@@ -5189,34 +5189,34 @@ struct AADereferenceableCallSiteReturned final
51895189
51905190namespace {
51915191
5192- static std::optional<uint64_t>
5193- getKnownAlignForIntrinsic(Attributor &A, AAAlign &QueryingAA,
5194- const IntrinsicInst *II) {
5192+ static std::optional<Align> getKnownAlignForIntrinsic(Attributor &A,
5193+ AAAlign &QueryingAA,
5194+ const IntrinsicInst *II) {
51955195 switch (II->getIntrinsicID()) {
51965196 case Intrinsic::ptrmask: {
5197- auto *ConstVals = A.getAAFor<AAPotentialConstantValues>(
5197+ const auto *ConstVals = A.getAAFor<AAPotentialConstantValues>(
51985198 QueryingAA, IRPosition::value(*(II->getOperand(1))), DepClassTy::NONE);
5199- const AAAlign *AlignAA = A.getAAFor<AAAlign>(
5199+ const auto *AlignAA = A.getAAFor<AAAlign>(
52005200 QueryingAA, IRPosition::value(*(II)), DepClassTy::NONE);
52015201 if (ConstVals && ConstVals->isValidState()) {
52025202 if (ConstVals->isAtFixpoint()) {
52035203 const DataLayout &DL = A.getDataLayout();
52045204 unsigned Size =
52055205 DL.getPointerTypeSizeInBits(II->getOperand(0)->getType());
52065206 uint64_t TrailingZeros = Size;
5207- for (const auto &It : ConstVals->getAssumedSet())
5207+ for (const APInt &It : ConstVals->getAssumedSet())
52085208 if (It.countTrailingZeros() < TrailingZeros)
52095209 TrailingZeros = It.countTrailingZeros();
52105210 if (TrailingZeros < Size) {
52115211 uint64_t Mask = 1 << TrailingZeros;
52125212 if (Mask >= AlignAA->getKnownAlign().value()) {
5213- return 0 ;
5213+ return Align(1) ;
52145214 }
52155215 }
5216- return AlignAA->getKnownAlign().value() ;
5216+ return AlignAA->getKnownAlign();
52175217 }
52185218 } else if (AlignAA) {
5219- return AlignAA->getKnownAlign().value() ;
5219+ return AlignAA->getKnownAlign();
52205220 }
52215221 break;
52225222 }
@@ -5226,24 +5226,23 @@ getKnownAlignForIntrinsic(Attributor &A, AAAlign &QueryingAA,
52265226 return std::nullopt;
52275227}
52285228
5229- static std::optional<uint64_t >
5229+ static std::optional<Align >
52305230getAssumedAlignForIntrinsic(Attributor &A, AAAlign &QueryingAA,
52315231 const IntrinsicInst *II) {
52325232 switch (II->getIntrinsicID()) {
52335233 case Intrinsic::ptrmask: {
5234- const AAPotentialConstantValues *ConstVals =
5235- A.getAAFor<AAPotentialConstantValues>(
5236- QueryingAA, IRPosition::value(*(II->getOperand(1))),
5237- DepClassTy::REQUIRED);
5238- const AAAlign *AlignAA =
5234+ const auto *ConstVals = A.getAAFor<AAPotentialConstantValues>(
5235+ QueryingAA, IRPosition::value(*(II->getOperand(1))),
5236+ DepClassTy::REQUIRED);
5237+ const auto *AlignAA =
52395238 A.getAAFor<AAAlign>(QueryingAA, IRPosition::value(*(II->getOperand(0))),
52405239 DepClassTy::REQUIRED);
52415240 uint64_t Alignment = 0;
52425241 if (ConstVals && ConstVals->isValidState()) {
52435242 const DataLayout &DL = A.getDataLayout();
52445243 unsigned Size = DL.getPointerTypeSizeInBits(II->getOperand(0)->getType());
52455244 unsigned TrailingZeros = Size;
5246- for (const auto &It : ConstVals->getAssumedSet())
5245+ for (const APInt &It : ConstVals->getAssumedSet())
52475246 if (It.countTrailingZeros() < TrailingZeros)
52485247 TrailingZeros = It.countTrailingZeros();
52495248 if (TrailingZeros < Size)
@@ -5253,11 +5252,9 @@ getAssumedAlignForIntrinsic(Attributor &A, AAAlign &QueryingAA,
52535252 Alignment < AlignAA->getAssumedAlign().value())
52545253 Alignment = AlignAA->getAssumedAlign().value();
52555254
5256- if (Alignment != 0) {
5257- return Alignment;
5258- }
5259- return QueryingAA.getAssumedAlign().value();
5260- break;
5255+ if (Alignment != 0)
5256+ return Align(Alignment);
5257+ return QueryingAA.getAssumedAlign();
52615258 }
52625259 default:
52635260 break;
@@ -5280,11 +5277,10 @@ static unsigned getKnownAlignForUse(Attributor &A, AAAlign &QueryingAA,
52805277 TrackUse = true;
52815278 return 0;
52825279 }
5283- if (auto *II = dyn_cast<IntrinsicInst>(I)) {
5284- std::optional<uint64_t> Align =
5285- getKnownAlignForIntrinsic(A, QueryingAA, II);
5280+ if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) {
5281+ std::optional<Align> Align = getKnownAlignForIntrinsic(A, QueryingAA, II);
52865282 if (Align.has_value())
5287- return Align.value();
5283+ return Align.value().value() ;
52885284 }
52895285
52905286 MaybeAlign MA;
@@ -5587,11 +5583,11 @@ struct AAAlignCallSiteReturned final
55875583
55885584 ChangeStatus updateImpl(Attributor &A) override {
55895585 Instruction *I = getIRPosition().getCtxI();
5590- if (auto *II = dyn_cast<IntrinsicInst>(I)) {
5591- std::optional<uint64_t > Align = getAssumedAlignForIntrinsic(A, *this, II);
5586+ if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) {
5587+ std::optional<Align > Align = getAssumedAlignForIntrinsic(A, *this, II);
55925588 if (Align.has_value()) {
55935589 uint64_t OldAssumed = getAssumed();
5594- takeAssumedMinimum(Align.value());
5590+ takeAssumedMinimum(Align.value().value() );
55955591 return OldAssumed == getAssumed() ? ChangeStatus::UNCHANGED
55965592 : ChangeStatus::CHANGED;
55975593 }
0 commit comments