Skip to content

Commit df2d7a9

Browse files
committed
!fixup use getKnowledgeFromBundle
1 parent cd95751 commit df2d7a9

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3223,16 +3223,21 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
32233223
// Try to fold alignment assumption into a load's !align metadata, if the
32243224
// assumption is valid in the load's context.
32253225
if (OBU.getTagName() == "align" && OBU.Inputs.size() == 2) {
3226+
RetainedKnowledge RK = getKnowledgeFromBundle(
3227+
*cast<AssumeInst>(II), II->bundle_op_info_begin()[Idx]);
3228+
if (!RK || RK.AttrKind != Attribute::Alignment ||
3229+
!isPowerOf2_64(RK.ArgValue))
3230+
continue;
3231+
32263232
auto *LI = dyn_cast<LoadInst>(OBU.Inputs[0]);
32273233
if (!LI ||
32283234
!isValidAssumeForContext(II, LI, &DT, /*AllowEphemerals=*/true))
32293235
continue;
3230-
auto *Align = dyn_cast<ConstantInt>(OBU.Inputs[1]);
3231-
if (!Align || !isPowerOf2_64(Align->getZExtValue()) || Align->getType()->getScalarSizeInBits() != 64)
3232-
continue;
3236+
32333237
LI->setMetadata(
32343238
LLVMContext::MD_align,
3235-
MDNode::get(II->getContext(), ValueAsMetadata::getConstant(Align)));
3239+
MDNode::get(II->getContext(), ValueAsMetadata::getConstant(
3240+
Builder.getInt64(RK.ArgValue))));
32363241
auto *New = CallBase::removeOperandBundle(II, OBU.getTagID());
32373242
return New;
32383243
}

llvm/test/Transforms/InstCombine/assume-align.ll

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,9 @@ define ptr @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata(ptr %p)
133133
ret ptr %p2
134134
}
135135

136-
define ptr @dont_fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata(ptr %p) {
136+
define ptr @fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata(ptr %p) {
137137
; CHECK-LABEL: @dont_fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata(
138-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
139-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 8) ]
138+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0]]
140139
; CHECK-NEXT: ret ptr [[P2]]
141140
;
142141
%p2 = load ptr, ptr %p
@@ -184,8 +183,7 @@ define ptr @dont_fold_assume_align_zero_of_loaded_pointer_into_align_metadata(pt
184183
; !align must have a constant integer alignment.
185184
define ptr @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata(ptr %p, i64 %align) {
186185
; CHECK-LABEL: @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata(
187-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
188-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i64 [[ALIGN:%.*]]) ]
186+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META1:![0-9]+]]
189187
; CHECK-NEXT: ret ptr [[P2]]
190188
;
191189
%p2 = load ptr, ptr %p
@@ -195,4 +193,5 @@ define ptr @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_met
195193

196194
;.
197195
; CHECK: [[META0]] = !{i64 8}
196+
; CHECK: [[META1]] = !{i64 1}
198197
;.

0 commit comments

Comments
 (0)