diff options
author | Manuel Jacob <me@manueljacob.de> | 2015-12-28 20:14:05 +0000 |
---|---|---|
committer | Manuel Jacob <me@manueljacob.de> | 2015-12-28 20:14:05 +0000 |
commit | 9db5b93ffc3ba35b107fbc9be04e5c3f5a4379a4 (patch) | |
tree | cd39626a7f6c9b1d156daf077c93b4ac06155740 /llvm/lib | |
parent | 549469882803cdfd6e557e979840a80a95169931 (diff) | |
download | bcm5719-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.cpp | 8 |
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 |