[llvm] [LoopIdiom] Use SCEV for deciding memmove validity (PR #211274)
John Brawn via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 28 08:55:44 PDT 2026
================
@@ -1290,43 +1290,44 @@ bool LoopIdiomRecognize::processLoopStoreOfLoopLoad(StoreInst *SI,
namespace {
class MemmoveVerifier {
public:
- explicit MemmoveVerifier(const Value &LoadBasePtr, const Value &StoreBasePtr,
- const DataLayout &DL)
- : DL(DL), BP1(llvm::GetPointerBaseWithConstantOffset(
- LoadBasePtr.stripPointerCasts(), LoadOff, DL)),
- BP2(llvm::GetPointerBaseWithConstantOffset(
- StoreBasePtr.stripPointerCasts(), StoreOff, DL)),
- IsSameObject(BP1 == BP2) {}
+ explicit MemmoveVerifier(const SCEV &LoadStart, const SCEV &StoreStart,
+ const DataLayout &DL, ScalarEvolution &SE)
+ : DL(DL),
+ Off(dyn_cast<SCEVConstant>(SE.getMinusSCEV(&StoreStart, &LoadStart))),
+ BasePtr(dyn_cast<SCEVUnknown>(SE.getPointerBase(&StoreStart))),
+ IsSameObject(Off != nullptr) {}
----------------
john-brawn-arm wrote:
Yes, it's used in LoopIdiomRecognize::processLoopStoreOfLoopLoad when dealing with a loop that contains a memcpy.
https://github.com/llvm/llvm-project/pull/211274
More information about the llvm-commits
mailing list