[llvm] [InferAlignment] Propagate alignment between loads/stores of the same base pointer (PR #145733)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 1 06:19:43 PDT 2025


================
@@ -58,14 +58,56 @@ bool inferAlignment(Function &F, AssumptionCache &AC, DominatorTree &DT) {
   }
 
   // Compute alignment from known bits.
+  auto InferFromKnownBits = [&](Instruction &I, Value *PtrOp) {
+    KnownBits Known = computeKnownBits(PtrOp, DL, &AC, &I, &DT);
+    unsigned TrailZ =
+        std::min(Known.countMinTrailingZeros(), +Value::MaxAlignmentExponent);
+    return Align(1ull << std::min(Known.getBitWidth() - 1, TrailZ));
+  };
+
+  // Propagate alignment between loads and stores that originate from the
+  // same base pointer.
+  DenseMap<Value *, Align> BestBasePointerAligns;
+  auto InferFromBasePointer = [&](Value *PtrOp, Align LoadStoreAlign) {
+    APInt OffsetFromBase =
+        APInt(DL.getIndexTypeSizeInBits(PtrOp->getType()), 0);
----------------
nikic wrote:

```suggestion
    APInt OffsetFromBase(DL.getIndexTypeSizeInBits(PtrOp->getType()), 0);
```

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


More information about the llvm-commits mailing list