summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/Scalarizer.cpp
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@linux.vnet.ibm.com>2013-12-23 14:51:56 +0000
committerRichard Sandiford <rsandifo@linux.vnet.ibm.com>2013-12-23 14:51:56 +0000
commit1fb5c13e3acc890f8ec8154721464dae336ee5ec (patch)
treeb82f5a1d08594a70d19d65a96f1799a9fd0b460c /llvm/lib/Transforms/Scalar/Scalarizer.cpp
parent3548cbb98044c569e6fef10d6b9a1b6c68c8bbf7 (diff)
downloadbcm5719-llvm-1fb5c13e3acc890f8ec8154721464dae336ee5ec.tar.gz
bcm5719-llvm-1fb5c13e3acc890f8ec8154721464dae336ee5ec.zip
Fix Scalarizer insertion point when replacing PHIs with insertelements
If the Scalarizer scalarized a vector PHI but could not scalarize all uses of it, it would insert a series of insertelements to reconstruct the vector PHI value from the scalar ones. The problem was that it would emit these insertelements immediately after the PHI, even if there were other PHIs after it. llvm-svn: 197909
Diffstat (limited to 'llvm/lib/Transforms/Scalar/Scalarizer.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/Scalarizer.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/Scalarizer.cpp b/llvm/lib/Transforms/Scalar/Scalarizer.cpp
index 33ccb7350d8..e614ecee53a 100644
--- a/llvm/lib/Transforms/Scalar/Scalarizer.cpp
+++ b/llvm/lib/Transforms/Scalar/Scalarizer.cpp
@@ -638,8 +638,11 @@ bool Scalarizer::finish() {
// InsertElements.
Type *Ty = Op->getType();
Value *Res = UndefValue::get(Ty);
+ BasicBlock *BB = Op->getParent();
unsigned Count = Ty->getVectorNumElements();
- IRBuilder<> Builder(Op->getParent(), Op);
+ IRBuilder<> Builder(BB, Op);
+ if (isa<PHINode>(Op))
+ Builder.SetInsertPoint(BB, BB->getFirstInsertionPt());
for (unsigned I = 0; I < Count; ++I)
Res = Builder.CreateInsertElement(Res, CV[I], Builder.getInt32(I),
Op->getName() + ".upto" + Twine(I));
OpenPOWER on IntegriCloud