[llvm] [GlobalISel] Add known bits calculation for atomic G_LOAD (PR #222870)

Tim Gymnich via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 11 03:09:01 PDT 2026


================
@@ -708,7 +708,23 @@ void GISelValueTracking::computeKnownBitsImpl(Register R, KnownBits &Known,
     KnownBits KnownRange(MMO->getMemoryType().getScalarSizeInBits());
     if (const MDNode *Ranges = MMO->getRanges())
       computeKnownBitsFromRangeMetadata(*Ranges, KnownRange);
-    Known = KnownRange.anyext(Known.getBitWidth());
+
+    if (MMO->isAtomic()) {
+      switch (TL.getExtendForAtomicOps()) {
+      case ISD::ZERO_EXTEND:
+        Known = KnownRange.zext(Known.getBitWidth());
+        break;
+      case ISD::SIGN_EXTEND:
+        Known = KnownRange.sext(Known.getBitWidth());
+        break;
+      default:
+        Known = KnownRange.anyext(Known.getBitWidth());
+        break;
+      }
+    } else {
+      Known = KnownRange.anyext(Known.getBitWidth());
+    }
----------------
tgymnich wrote:

at this point we have no guarantee that an atomic load actually will get extended later on.

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


More information about the llvm-commits mailing list