[llvm] [AA] Refine ModRefInfo taking into account `errnomem` location (PR #157495)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 14 13:50:17 PDT 2025


================
@@ -997,6 +998,18 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call,
   }
 
   ModRefInfo Result = ArgMR | OtherMR;
+
+  // Refine writes to errno memory. We can safely exclude the errno location if
+  // the given memory location is an alloca, the size of the memory access is
+  // larger than the integer size, or if TBAA proves it does not alias errno.
+  if ((ErrnoMR | Result) != Result) {
+    if (ErrnoMR == ModRefInfo::Mod && !isa<AllocaInst>(Object) &&
----------------
nikic wrote:

Hm, I think identified function-local is not completely right here because it also includes noalias arguments. All of alloca, noalias call and byval are fine, but I believe a noalias argument can alias errno.

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


More information about the llvm-commits mailing list