Skip to content

Commit 990095c

Browse files
committed
!fixup use getKnowledgeFromBundle
1 parent 1e33607 commit 990095c

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
@@ -3100,16 +3100,21 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
31003100
// Try to fold alignment assumption into a load's !align metadata, if the
31013101
// assumption is valid in the load's context.
31023102
if (OBU.getTagName() == "align" && OBU.Inputs.size() == 2) {
3103+
RetainedKnowledge RK = getKnowledgeFromBundle(
3104+
*cast<AssumeInst>(II), II->bundle_op_info_begin()[Idx]);
3105+
if (!RK || RK.AttrKind != Attribute::Alignment ||
3106+
!isPowerOf2_64(RK.ArgValue))
3107+
continue;
3108+
31033109
auto *LI = dyn_cast<LoadInst>(OBU.Inputs[0]);
31043110
if (!LI ||
31053111
!isValidAssumeForContext(II, LI, &DT, /*AllowEphemerals=*/true))
31063112
continue;
3107-
auto *Align = dyn_cast<ConstantInt>(OBU.Inputs[1]);
3108-
if (!Align || !isPowerOf2_64(Align->getZExtValue()) || Align->getType()->getScalarSizeInBits() != 64)
3109-
continue;
3113+
31103114
LI->setMetadata(
31113115
LLVMContext::MD_align,
3112-
MDNode::get(II->getContext(), ValueAsMetadata::getConstant(Align)));
3116+
MDNode::get(II->getContext(), ValueAsMetadata::getConstant(
3117+
Builder.getInt64(RK.ArgValue))));
31133118
auto *New = CallBase::removeOperandBundle(II, OBU.getTagID());
31143119
return New;
31153120
}

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)