diff options
author | Arthur Eubanks <aeubanks@google.com> | 2022-02-16 20:34:55 -0800 |
---|---|---|
committer | Arthur Eubanks <aeubanks@google.com> | 2022-02-17 08:48:11 -0800 |
commit | 129af4daa7ce6ca8d1d649de4eba76129c199399 (patch) | |
tree | f034081c6942941b32514516ad9aaa5a7fe6bae5 /llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp | |
parent | edde46b5d0120b14c8e005d96b92ea28f8c562f0 (diff) | |
download | llvm-129af4daa7ce6ca8d1d649de4eba76129c199399.zip llvm-129af4daa7ce6ca8d1d649de4eba76129c199399.tar.gz llvm-129af4daa7ce6ca8d1d649de4eba76129c199399.tar.bz2 |
[SCEVExpander][OpaquePtr] Check GEP source type when finding identical GEP
Fixes an opaque pointers miscompile.
Reviewed By: #opaque-pointers, nikic
Differential Revision: https://reviews.llvm.org/D120004
Diffstat (limited to 'llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp index 007578d..754382a 100644 --- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp +++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp @@ -591,7 +591,9 @@ Value *SCEVExpander::expandAddToGEP(const SCEV *const *op_begin, if (isa<DbgInfoIntrinsic>(IP)) ScanLimit++; if (IP->getOpcode() == Instruction::GetElementPtr && - IP->getOperand(0) == V && IP->getOperand(1) == Idx) + IP->getOperand(0) == V && IP->getOperand(1) == Idx && + cast<GEPOperator>(&*IP)->getSourceElementType() == + Type::getInt8Ty(Ty->getContext())) return &*IP; if (IP == BlockBegin) break; } |