diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-01-25 02:58:12 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-01-25 02:58:12 +0000 |
commit | af521dae8ee15ebf4ecceae3d25f66a475104a07 (patch) | |
tree | 719753982fdd75883393ba233f90207d1999ee4d /lib/CodeGen/CGExprScalar.cpp | |
parent | c0536c8294fc4453f0f1d1cf24a62bfc725fd492 (diff) |
Revert 148902 which was part of 148901 which was reverted in r148906.
Original log:
use the new ConstantVector::getSplat method where it makes sense.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148907 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExprScalar.cpp')
-rw-r--r-- | lib/CodeGen/CGExprScalar.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 6893439343..e1342d3ce5 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -612,8 +612,10 @@ Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType, // Splat the element across to all elements SmallVector<llvm::Constant*, 16> Args; unsigned NumElements = cast<llvm::VectorType>(DstTy)->getNumElements(); - llvm::Constant *Mask = llvm::ConstantVector::getSplat(NumElements, - Builder.getInt32(0)); + for (unsigned i = 0; i != NumElements; ++i) + Args.push_back(Builder.getInt32(0)); + + llvm::Constant *Mask = llvm::ConstantVector::get(Args); llvm::Value *Yay = Builder.CreateShuffleVector(UnV, UnV, Mask, "splat"); return Yay; } @@ -747,8 +749,11 @@ Value *ScalarExprEmitter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { (1 << llvm::Log2_32(LHSElts))-1); // Mask off the high bits of each shuffle index. - Value *MaskBits = llvm::ConstantVector::getSplat(MTy->getNumElements(), - EltMask); + SmallVector<llvm::Constant *, 32> MaskV; + for (unsigned i = 0, e = MTy->getNumElements(); i != e; ++i) + MaskV.push_back(EltMask); + + Value* MaskBits = llvm::ConstantVector::get(MaskV); Mask = Builder.CreateAnd(Mask, MaskBits, "mask"); // newv = undef @@ -1201,7 +1206,10 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) { SmallVector<llvm::Constant*, 16> Args; unsigned NumElements = cast<llvm::VectorType>(DstTy)->getNumElements(); llvm::Constant *Zero = Builder.getInt32(0); - llvm::Constant *Mask = llvm::ConstantVector::getSplat(NumElements, Zero); + for (unsigned i = 0; i < NumElements; i++) + Args.push_back(Zero); + + llvm::Constant *Mask = llvm::ConstantVector::get(Args); llvm::Value *Yay = Builder.CreateShuffleVector(UnV, UnV, Mask, "splat"); return Yay; } @@ -2588,7 +2596,11 @@ VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) { unsigned numElem = vecTy->getNumElements(); llvm::Type *elemType = vecTy->getElementType(); - llvm::Value *zeroVec = llvm::Constant::getNullValue(vecTy); + std::vector<llvm::Constant*> Zvals; + for (unsigned i = 0; i < numElem; ++i) + Zvals.push_back(llvm::ConstantInt::get(elemType, 0)); + + llvm::Value *zeroVec = llvm::ConstantVector::get(Zvals); llvm::Value *TestMSB = Builder.CreateICmpSLT(CondV, zeroVec); llvm::Value *tmp = Builder.CreateSExt(TestMSB, llvm::VectorType::get(elemType, |