summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorManuel Jacob <me@manueljacob.de>2015-12-28 20:14:05 +0000
committerManuel Jacob <me@manueljacob.de>2015-12-28 20:14:05 +0000
commit9db5b93ffc3ba35b107fbc9be04e5c3f5a4379a4 (patch)
treecd39626a7f6c9b1d156daf077c93b4ac06155740 /llvm/lib
parent549469882803cdfd6e557e979840a80a95169931 (diff)
downloadbcm5719-llvm-9db5b93ffc3ba35b107fbc9be04e5c3f5a4379a4.tar.gz
bcm5719-llvm-9db5b93ffc3ba35b107fbc9be04e5c3f5a4379a4.zip
[RS4GC] Fix rematerialization of bitcast of bitcast.
Summary: Previously, only the outer (last) bitcast was rematerialized, resulting in a use of the unrelocated inner (first) bitcast after the statepoint. See the test case for an example. Reviewers: igor-laevsky, reames Subscribers: reames, alex, llvm-commits, sanjoy Differential Revision: http://reviews.llvm.org/D15789 llvm-svn: 256520
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp8
1 files changed, 2 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp b/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp
index a077ba01a92..a9dc8d8eec0 100644
--- a/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp
+++ b/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp
@@ -2101,16 +2101,12 @@ static bool findRematerializableChainToBasePointer(
}
if (CastInst *CI = dyn_cast<CastInst>(CurrentValue)) {
- Value *Def = CI->stripPointerCasts();
-
- // This two checks are basically similar. First one is here for the
- // consistency with findBasePointers logic.
- assert(!isa<CastInst>(Def) && "not a pointer cast found");
if (!CI->isNoopCast(CI->getModule()->getDataLayout()))
return false;
ChainToBase.push_back(CI);
- return findRematerializableChainToBasePointer(ChainToBase, Def, BaseValue);
+ return findRematerializableChainToBasePointer(ChainToBase,
+ CI->getOperand(0), BaseValue);
}
// Not supported instruction in the chain
OpenPOWER on IntegriCloud