diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-09-01 21:20:14 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-09-01 21:20:14 +0000 |
| commit | d4cffcf07385bc92dd5b836646cad9204f1d043d (patch) | |
| tree | 50d588f4e616311a80eeea71142440312b17f297 /llvm/lib/Transforms | |
| parent | d2df50196fbdbf8ceec6ed708f0ccce0af24a7c9 (diff) | |
| download | bcm5719-llvm-d4cffcf07385bc92dd5b836646cad9204f1d043d.tar.gz bcm5719-llvm-d4cffcf07385bc92dd5b836646cad9204f1d043d.zip | |
SROA: Don't insert instructions before a PHI
SROA may decide that it needs to insert a bitcast and would set it's
insertion point before a PHI. This will create an invalid module
right quick.
Instead, choose the first insertion point in the basic block that holds
our PHI.
This fixes PR20822.
Differential Revision: http://reviews.llvm.org/D5141
llvm-svn: 216891
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index da5f14a7888..32a61a0b9f2 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -2708,7 +2708,10 @@ private: // the old pointer, which necessarily must be in the right position to // dominate the PHI. IRBuilderTy PtrBuilder(IRB); - PtrBuilder.SetInsertPoint(OldPtr); + if (isa<PHINode>(OldPtr)) + PtrBuilder.SetInsertPoint(OldPtr->getParent()->getFirstInsertionPt()); + else + PtrBuilder.SetInsertPoint(OldPtr); PtrBuilder.SetCurrentDebugLocation(OldPtr->getDebugLoc()); Value *NewPtr = getNewAllocaSlicePtr(PtrBuilder, OldPtr->getType()); |

