Skip to content

Commit 0778e2e

Browse files
committed
Test update
1 parent fcb2fa1 commit 0778e2e

File tree

2 files changed

+57
-24
lines changed

2 files changed

+57
-24
lines changed

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

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals smart
2-
; RUN: opt -S -passes=instcombine,simplifycfg < %s 2>&1 | FileCheck %s
2+
; RUN: opt -S -passes='instcombine<no-verify-fixpoint>,simplifycfg' < %s 2>&1 | FileCheck %s
33

44
declare void @llvm.assume(i1 noundef)
55

@@ -87,7 +87,6 @@ if.end: ; preds = %if.else, %if.then
8787
define void @f3(i64 %a, ptr %b) {
8888
; CHECK-LABEL: @f3(
8989
; CHECK-NEXT: [[C:%.*]] = ptrtoint ptr [[B:%.*]] to i64
90-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[B]], i64 4294967296) ]
9190
; CHECK-NEXT: [[D:%.*]] = add i64 [[A:%.*]], [[C]]
9291
; CHECK-NEXT: call void @g(i64 [[D]])
9392
; CHECK-NEXT: ret void
@@ -125,8 +124,7 @@ define i8 @assume_align_non_pow2(ptr %p) {
125124

126125
define ptr @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata(ptr %p) {
127126
; CHECK-LABEL: @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata(
128-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
129-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i64 8) ]
127+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0:![0-9]+]], !noundef [[META1:![0-9]+]]
130128
; CHECK-NEXT: ret ptr [[P2]]
131129
;
132130
%p2 = load ptr, ptr %p
@@ -136,8 +134,7 @@ define ptr @fold_assume_align_pow2_of_loaded_pointer_into_align_metadata(ptr %p)
136134

137135
define ptr @fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata(ptr %p) {
138136
; CHECK-LABEL: @fold_assume_align_i32_pow2_of_loaded_pointer_into_align_metadata(
139-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
140-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 8) ]
137+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0]], !noundef [[META1]]
141138
; CHECK-NEXT: ret ptr [[P2]]
142139
;
143140
%p2 = load ptr, ptr %p
@@ -184,8 +181,7 @@ define ptr @dont_fold_assume_align_zero_of_loaded_pointer_into_align_metadata(pt
184181

185182
define ptr @redundant_assume_align_1(ptr %p) {
186183
; CHECK-LABEL: @redundant_assume_align_1(
187-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
188-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 1) ]
184+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META2:![0-9]+]], !noundef [[META1]]
189185
; CHECK-NEXT: call void @foo(ptr [[P2]])
190186
; CHECK-NEXT: ret ptr [[P2]]
191187
;
@@ -198,8 +194,7 @@ define ptr @redundant_assume_align_1(ptr %p) {
198194

199195
define ptr @redundant_assume_align_8_via_align_metadata(ptr %p) {
200196
; CHECK-LABEL: @redundant_assume_align_8_via_align_metadata(
201-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0:![0-9]+]]
202-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 8) ]
197+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0]], !noundef [[META1]]
203198
; CHECK-NEXT: call void @foo(ptr [[P2]])
204199
; CHECK-NEXT: ret ptr [[P2]]
205200
;
@@ -211,8 +206,7 @@ define ptr @redundant_assume_align_8_via_align_metadata(ptr %p) {
211206

212207
define ptr @assume_align_16_via_align_metadata(ptr %p) {
213208
; CHECK-LABEL: @assume_align_16_via_align_metadata(
214-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META0]]
215-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i32 16) ]
209+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META3:![0-9]+]], !noundef [[META1]]
216210
; CHECK-NEXT: call void @foo(ptr [[P2]])
217211
; CHECK-NEXT: ret ptr [[P2]]
218212
;
@@ -224,7 +218,8 @@ define ptr @assume_align_16_via_align_metadata(ptr %p) {
224218

225219
define ptr @redundant_assume_align_8_via_align_attribute(ptr align 8 %p) {
226220
; CHECK-LABEL: @redundant_assume_align_8_via_align_attribute(
227-
; CHECK-NEXT: call void @foo(ptr [[P:%.*]])
221+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P:%.*]], i32 8) ]
222+
; CHECK-NEXT: call void @foo(ptr [[P]])
228223
; CHECK-NEXT: ret ptr [[P]]
229224
;
230225
call void @llvm.assume(i1 true) [ "align"(ptr %p, i32 8) ]
@@ -258,13 +253,40 @@ define ptr @redundant_assume_align_8_via_asume(ptr %p) {
258253
ret ptr %p
259254
}
260255

256+
define void @redundant_arg_passed_to_intrinsic(ptr %dst, ptr %src) {
257+
; CHECK-LABEL: @redundant_arg_passed_to_intrinsic(
258+
; CHECK-NEXT: call void @bar()
259+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[SRC:%.*]], i32 8) ]
260+
; CHECK-NEXT: call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[DST:%.*]], ptr noundef nonnull align 8 dereferenceable(16) [[SRC]], i64 16, i1 false)
261+
; CHECK-NEXT: ret void
262+
;
263+
call void @llvm.assume(i1 true) [ "align"(ptr %dst, i32 8) ]
264+
call void @bar()
265+
call void @llvm.assume(i1 true) [ "align"(ptr %src, i32 8) ]
266+
call void @llvm.memmove.p0.p0.i64(ptr align 8 %dst, ptr %src, i64 16, i1 false)
267+
ret void
268+
}
269+
270+
define void @test_store(ptr %ptr) {
271+
; CHECK-LABEL: @test_store(
272+
; CHECK-NEXT: entry:
273+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 2) ]
274+
; CHECK-NEXT: store i16 0, ptr [[PTR]], align 1
275+
; CHECK-NEXT: ret void
276+
;
277+
entry:
278+
call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 2) ]
279+
store i16 0, ptr %ptr, align 1
280+
ret void
281+
}
282+
261283
declare void @foo(ptr)
284+
declare void @bar()
262285

263286
; !align must have a constant integer alignment.
264287
define ptr @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata(ptr %p, i64 %align) {
265288
; CHECK-LABEL: @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_metadata(
266-
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8
267-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P2]], i64 [[ALIGN:%.*]]) ]
289+
; CHECK-NEXT: [[P2:%.*]] = load ptr, ptr [[P:%.*]], align 8, !align [[META2]], !noundef [[META1]]
268290
; CHECK-NEXT: ret ptr [[P2]]
269291
;
270292
%p2 = load ptr, ptr %p
@@ -274,4 +296,7 @@ define ptr @dont_fold_assume_align_not_constant_of_loaded_pointer_into_align_met
274296

275297
;.
276298
; CHECK: [[META0]] = !{i64 8}
299+
; CHECK: [[META1]] = !{}
300+
; CHECK: [[META2]] = !{i64 1}
301+
; CHECK: [[META3]] = !{i64 16}
277302
;.

llvm/test/Transforms/PhaseOrdering/AArch64/infer-align-from-assumption.ll

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ define i32 @earlycse_entry(ptr %p) {
1414
; CHECK-NEXT: [[L_2_I:%.*]] = load ptr, ptr [[P]], align 8
1515
; CHECK-NEXT: [[GEP_I:%.*]] = getelementptr i8, ptr [[L_2_I]], i64 4
1616
; CHECK-NEXT: store ptr [[GEP_I]], ptr [[P]], align 8
17-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[GEP_I]], i64 4) ]
1817
; CHECK-NEXT: [[L_ASSUME_ALIGNED_I_I2:%.*]] = load i32, ptr [[GEP_I]], align 4
1918
; CHECK-NEXT: [[R_I_I3:%.*]] = tail call i32 @swap(i32 [[L_ASSUME_ALIGNED_I_I2]])
2019
; CHECK-NEXT: [[L_2_I4:%.*]] = load ptr, ptr [[P]], align 8
@@ -49,7 +48,6 @@ define i32 @earlycse_fn1(ptr %p) {
4948
define i32 @load_assume_aligned(ptr %p) {
5049
; CHECK-LABEL: define i32 @load_assume_aligned(
5150
; CHECK-SAME: ptr [[P:%.*]]) local_unnamed_addr {
52-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P]], i64 4) ]
5351
; CHECK-NEXT: [[DOT0_COPYLOAD:%.*]] = load i32, ptr [[P]], align 4
5452
; CHECK-NEXT: [[TMP2:%.*]] = tail call i32 @swap(i32 [[DOT0_COPYLOAD]])
5553
; CHECK-NEXT: ret i32 [[TMP2]]
@@ -64,8 +62,7 @@ declare i32 @swap(i32)
6462

6563
define void @sroa_align_entry(ptr %p) {
6664
; CHECK-LABEL: define void @sroa_align_entry(
67-
; CHECK-SAME: ptr [[P:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
68-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P]], i64 8) ]
65+
; CHECK-SAME: ptr [[P:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
6966
; CHECK-NEXT: [[DOT0_COPYLOAD_I_I_I:%.*]] = load i64, ptr [[P]], align 8
7067
; CHECK-NEXT: [[TMP2:%.*]] = inttoptr i64 [[DOT0_COPYLOAD_I_I_I]] to ptr
7168
; CHECK-NEXT: store i32 0, ptr [[TMP2]], align 4
@@ -80,7 +77,7 @@ define void @sroa_align_entry(ptr %p) {
8077

8178
define ptr @sroa_fn1(ptr %p) {
8279
; CHECK-LABEL: define ptr @sroa_fn1(
83-
; CHECK-SAME: ptr nocapture readonly [[P:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
80+
; CHECK-SAME: ptr nocapture readonly [[P:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
8481
; CHECK-NEXT: [[L:%.*]] = load ptr, ptr [[P]], align 8, !align [[META2:![0-9]+]], !noundef [[META1]]
8582
; CHECK-NEXT: [[L_FN3_I_I:%.*]] = load i64, ptr [[L]], align 8
8683
; CHECK-NEXT: [[I_I:%.*]] = inttoptr i64 [[L_FN3_I_I]] to ptr
@@ -93,8 +90,7 @@ define ptr @sroa_fn1(ptr %p) {
9390

9491
define ptr @sroa_fn2(ptr %p) {
9592
; CHECK-LABEL: define ptr @sroa_fn2(
96-
; CHECK-SAME: ptr [[P:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {
97-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[P]], i64 8) ]
93+
; CHECK-SAME: ptr [[P:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
9894
; CHECK-NEXT: [[DOT0_COPYLOAD_I_I:%.*]] = load i64, ptr [[P]], align 8
9995
; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[DOT0_COPYLOAD_I_I]] to ptr
10096
; CHECK-NEXT: ret ptr [[TMP3]]
@@ -106,15 +102,27 @@ define ptr @sroa_fn2(ptr %p) {
106102

107103
define i64 @sroa_fn3(ptr %0) {
108104
; CHECK-LABEL: define i64 @sroa_fn3(
109-
; CHECK-SAME: ptr [[TMP0:%.*]]) local_unnamed_addr #[[ATTR3]] {
110-
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0]], i64 8) ]
105+
; CHECK-SAME: ptr [[TMP0:%.*]]) local_unnamed_addr #[[ATTR2]] {
111106
; CHECK-NEXT: [[DOT0_COPYLOAD_I:%.*]] = load i64, ptr [[TMP0]], align 8
112107
; CHECK-NEXT: ret i64 [[DOT0_COPYLOAD_I]]
113108
;
114109
call void @llvm.assume(i1 true) [ "align"(ptr %0, i64 8) ]
115110
%l.fn3 = load i64, ptr %0, align 1
116111
ret i64 %l.fn3
117112
}
113+
114+
define void @test_store(ptr %ptr) {
115+
; CHECK-LABEL: define void @test_store(
116+
; CHECK-SAME: ptr [[PTR:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {
117+
; CHECK-NEXT: [[ENTRY:.*:]]
118+
; CHECK-NEXT: store i16 0, ptr [[PTR]], align 2
119+
; CHECK-NEXT: ret void
120+
;
121+
entry:
122+
call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 2) ]
123+
store i16 0, ptr %ptr, align 1
124+
ret void
125+
}
118126
;.
119127
; CHECK: [[META0]] = !{i64 4}
120128
; CHECK: [[META1]] = !{}

0 commit comments

Comments
 (0)