diff options
author | Chen Li <meloli87@gmail.com> | 2015-05-18 19:02:25 +0000 |
---|---|---|
committer | Chen Li <meloli87@gmail.com> | 2015-05-18 19:02:25 +0000 |
commit | 74ca2a87773d54883df1d3741c4828c709629a7a (patch) | |
tree | 25f9a7a40c7cc0a218957601f1f212ae756c81da /llvm/lib/Transforms/Scalar/PlaceSafepoints.cpp | |
parent | 98dbf02e198d3dcccdac3e4f2034b2cb6e254423 (diff) | |
download | bcm5719-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.cpp | 4 |
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); |