[llvm] [Attributor] Propagate alignment through ptrmask (PR #150158)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 19 19:50:09 PDT 2025
================
@@ -5188,6 +5188,60 @@ 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();
+ } else 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()) {
+ case Intrinsic::ptrmask: {
+ const auto *ConstVals = A.getAAFor<AAPotentialConstantValues>(
+ QueryingAA, IRPosition::value(*(II->getOperand(1))),
+ DepClassTy::REQUIRED);
+ const auto *AlignAA =
+ A.getAAFor<AAAlign>(QueryingAA, IRPosition::value(*(II->getOperand(0))),
+ DepClassTy::REQUIRED);
+ if (ConstVals && ConstVals->isValidState()) {
+ Alignment = Align(1 << ConstVals->getAssumedMinTrailingZeros());
+ }
+ if (AlignAA && AlignAA->isValidState()) {
+ if (Alignment < AlignAA->getAssumedAlign())
+ Alignment = AlignAA->getAssumedAlign();
----------------
arsenm wrote:
Use max?
https://github.com/llvm/llvm-project/pull/150158
More information about the llvm-commits
mailing list