[llvm] [Attributor] Propagate alignment through ptrmask (PR #150158)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 20 04:02:18 PDT 2025


================
@@ -5188,6 +5188,59 @@ struct AADereferenceableCallSiteReturned final
 // ------------------------ Align Argument Attribute ------------------------
 
 namespace {
+
+Align getKnownAlignForIntrinsic(Attributor &A, AAAlign &QueryingAA,
+                                const IntrinsicInst *II) {
+  switch (II->getIntrinsicID()) {
+  case Intrinsic::ptrmask: {
+    const auto *ConstVals = A.getAAFor<AAPotentialConstantValues>(
+        QueryingAA, IRPosition::value(*(II->getOperand(1))), DepClassTy::NONE);
+    const auto *AlignAA = A.getAAFor<AAAlign>(
+        QueryingAA, IRPosition::value(*(II)), DepClassTy::NONE);
+    if (ConstVals && ConstVals->isValidState() && ConstVals->isAtFixpoint()) {
+      Align ConstAlign(1 << ConstVals->getAssumedMinTrailingZeros());
+      if (ConstAlign >= AlignAA->getKnownAlign())
+        return Align(1);
+      return AlignAA->getKnownAlign();
+    }
+    if (AlignAA) {
+      return AlignAA->getKnownAlign();
+    }
+    break;
+  }
+  default:
+    break;
+  }
+  return Align(1);
+}
+
+Align getAssumedAlignForIntrinsic(Attributor &A, AAAlign &QueryingAA,
+                                  const IntrinsicInst *II) {
+  Align Alignment;
+  switch (II->getIntrinsicID()) {
----------------
arsenm wrote:

```suggestion
  switch (II.getIntrinsicID()) {
```

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


More information about the llvm-commits mailing list