summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp
diff options
context:
space:
mode:
authorChen Li <meloli87@gmail.com>2015-05-18 19:02:25 +0000
committerChen Li <meloli87@gmail.com>2015-05-18 19:02:25 +0000
commit74ca2a87773d54883df1d3741c4828c709629a7a (patch)
tree25f9a7a40c7cc0a218957601f1f212ae756c81da /llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp
parent98dbf02e198d3dcccdac3e4f2034b2cb6e254423 (diff)
downloadbcm5719-llvm-74ca2a87773d54883df1d3741c4828c709629a7a.tar.gz
bcm5719-llvm-74ca2a87773d54883df1d3741c4828c709629a7a.zip
[PlaceSafepoints] Assertion on that gc_result can not have preceding phis should only apply to invoke statepoint
Summary: When PlaceSafepoints pass replaces old return result with gc_result from statepoint, it asserts that gc_result can not have preceding phis in its parent block. This is only true on invoke statepoint, which terminates the block and puts its result at the beginning of the normal successor block. Call statepoint does not terminate the block and thus its result is in the same block with it. There should be no restriction on whether there are phis or not. Reviewers: reames, igor-laevsky Reviewed By: igor-laevsky Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9803 llvm-svn: 237597
Diffstat (limited to 'llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp b/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp
index 319e5c79da4..a6356da2ecb 100644
--- a/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp
+++ b/llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp
@@ -716,8 +716,8 @@ bool PlaceSafepoints::runOnFunction(Function &F) {
CallSite &CS = ParsePointNeeded[i];
Value *GCResult = Results[i];
if (GCResult) {
- // Can not RAUW for the gc result in case of phi nodes preset.
- assert(!isa<PHINode>(cast<Instruction>(GCResult)->getParent()->begin()));
+ // Can not RAUW for the invoke gc result in case of phi nodes preset.
+ assert(CS.isCall() || !isa<PHINode>(cast<Instruction>(GCResult)->getParent()->begin()));
// Replace all uses with the new call
CS.getInstruction()->replaceAllUsesWith(GCResult);
OpenPOWER on IntegriCloud