[llvm] [loop-idiom] Forget outer loop scev when loop-idiom introduces memset… (PR #150916)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 5 00:58:38 PDT 2025


================
@@ -7421,7 +7422,17 @@ ScalarEvolution::getLoopProperties(const Loop *L) {
       if (auto *SI = dyn_cast<StoreInst>(I))
         return !SI->isSimple();
 
-      return I->mayThrow() || I->mayWriteToMemory();
+      if (I->mayThrow())
+        return true;
+
+      // Check if the function accesses inaccessible memory.
+      if (auto *CI = dyn_cast<CallInst>(I)) {
+        auto ME = CI->getMemoryEffects();
+        if (!isModSet(ME.getModRef(IRMemLocation::InaccessibleMem)))
+          return false;
+      }
----------------
nikic wrote:

```suggestion
      // Non-volatile memset / memcpy do not count as side-effect
      // for forward progress.
      if (isa<MemIntrinsic>(I) && !I->isVolatile())
        return false;
```

https://github.com/llvm/llvm-project/pull/150916


More information about the llvm-commits mailing list