[llvm] [FlattenCFG] Fix an Imprecise Usage of AA (PR #128117)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 14 05:49:45 PDT 2025


================
@@ -369,6 +369,22 @@ ModRefInfo AAResults::getModRefInfo(const CallBase *Call1,
   return Result;
 }
 
+// Check whether two instructions may read or write the same memory location.
+ModRefInfo AAResults::getModRefInfo(const Instruction *I1,
+                                    const Instruction *I2) {
+  SimpleAAQueryInfo AAQIP(*this);
+
+  // Early-exit if either instruction does not read or write memory.
+  if (!I1->mayReadOrWriteMemory() || !I2->mayReadOrWriteMemory())
+    return ModRefInfo::NoModRef;
+
+  if (const auto *Call2 = dyn_cast<CallBase>(I2))
+    return getModRefInfo(I1, Call2, AAQIP);
+
+  ModRefInfo MR = getModRefInfo(I1, MemoryLocation::getOrNone(I2), AAQIP);
+  return isModOrRefSet(MR) ? ModRefInfo::ModRef : ModRefInfo::NoModRef;
----------------
nikic wrote:

This could be more precise, but it's okay to start with.

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


More information about the llvm-commits mailing list