diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-02-14 12:06:21 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-02-14 12:06:21 +0000 |
commit | 14c598268ff7534d3753ae84eba9b8a81bf0bf8f (patch) | |
tree | 9738b30d50ace204cca6c36e30fcbb87f282ca7f /lib/CodeGen/CGExprScalar.cpp | |
parent | 3164c14cadbb09a05ba811602221e9156077cf44 (diff) |
Use a simpler (and more efficient) pattern to pad vectors.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150475 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExprScalar.cpp')
-rw-r--r-- | lib/CodeGen/CGExprScalar.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 4047a39287..d9b0e21238 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -895,8 +895,7 @@ Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) { if (CurIdx == 0) { // insert into undef -> shuffle (src, undef) Args.push_back(C); - for (unsigned j = 1; j != ResElts; ++j) - Args.push_back(llvm::UndefValue::get(CGF.Int32Ty)); + Args.resize(ResElts, llvm::UndefValue::get(CGF.Int32Ty)); LHS = EI->getVectorOperand(); RHS = V; @@ -907,9 +906,8 @@ Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) { for (unsigned j = 0; j != CurIdx; ++j) Args.push_back(getMaskElt(SVV, j, 0, CGF.Int32Ty)); Args.push_back(Builder.getInt32(ResElts + C->getZExtValue())); - for (unsigned j = CurIdx + 1; j != ResElts; ++j) - Args.push_back(llvm::UndefValue::get(CGF.Int32Ty)); - + Args.resize(ResElts, llvm::UndefValue::get(CGF.Int32Ty)); + LHS = cast<llvm::ShuffleVectorInst>(V)->getOperand(0); RHS = EI->getVectorOperand(); VIsUndefShuffle = false; @@ -953,8 +951,7 @@ Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) { } for (unsigned j = 0, je = InitElts; j != je; ++j) Args.push_back(getMaskElt(SVI, j, Offset, CGF.Int32Ty)); - for (unsigned j = CurIdx + InitElts; j != ResElts; ++j) - Args.push_back(llvm::UndefValue::get(CGF.Int32Ty)); + Args.resize(ResElts, llvm::UndefValue::get(CGF.Int32Ty)); if (VIsUndefShuffle) V = cast<llvm::ShuffleVectorInst>(V)->getOperand(0); @@ -968,8 +965,7 @@ Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) { if (Args.empty()) { for (unsigned j = 0; j != InitElts; ++j) Args.push_back(Builder.getInt32(j)); - for (unsigned j = InitElts; j != ResElts; ++j) - Args.push_back(llvm::UndefValue::get(CGF.Int32Ty)); + Args.resize(ResElts, llvm::UndefValue::get(CGF.Int32Ty)); llvm::Constant *Mask = llvm::ConstantVector::get(Args); Init = Builder.CreateShuffleVector(Init, llvm::UndefValue::get(VVT), Mask, "vext"); @@ -979,8 +975,7 @@ Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) { Args.push_back(Builder.getInt32(j)); for (unsigned j = 0; j != InitElts; ++j) Args.push_back(Builder.getInt32(j+Offset)); - for (unsigned j = CurIdx + InitElts; j != ResElts; ++j) - Args.push_back(llvm::UndefValue::get(CGF.Int32Ty)); + Args.resize(ResElts, llvm::UndefValue::get(CGF.Int32Ty)); } // If V is undef, make sure it ends up on the RHS of the shuffle to aid |