[llvm] [Attributor] Propagate alignment through ptrmask (PR #150158)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 7 23:02:58 PDT 2025
================
@@ -5188,6 +5188,81 @@ 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()) {
+ if (ConstVals->isAtFixpoint()) {
+ const DataLayout &DL = A.getDataLayout();
+ unsigned Size =
+ DL.getPointerTypeSizeInBits(II->getOperand(0)->getType());
+ uint64_t TrailingZeros = Size - 1;
+ for (const APInt &It : ConstVals->getAssumedSet())
+ if (It.countTrailingZeros() < TrailingZeros)
+ TrailingZeros = It.countTrailingZeros();
+
+ APInt Mask = APInt(Size, 1).shl(TrailingZeros);
+ APInt PtrAlign = APInt(Size, 1).shl(Log2(AlignAA->getKnownAlign()));
----------------
arsenm wrote:
APInt::getSignMask (but can you also just use APInt::isAligned?)
https://github.com/llvm/llvm-project/pull/150158
More information about the llvm-commits
mailing list