Skip to content

Commit 2c9aba9

Browse files
committed
[LSR] Regenerate test checks (NFC)
1 parent 6b83c06 commit 2c9aba9

File tree

7 files changed

+190
-60
lines changed

7 files changed

+190
-60
lines changed

llvm/test/Transforms/LoopStrengthReduce/2011-10-06-ReusePhi.ll

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
12
; RUN: opt -opaque-pointers=0 -loop-reduce -S < %s | FileCheck %s
23
;
34
; Test LSR's intelligence regarding phi reuse.
@@ -9,24 +10,42 @@ target triple = "x86_64-apple-darwin"
910
target datalayout = "n8:16:32:64"
1011

1112

12-
; CHECK-LABEL: @test(
13-
; multiplies are hoisted out of the loop
14-
; CHECK: while.body.lr.ph:
15-
; CHECK: shl nsw i64
16-
; CHECK: shl nsw i64
17-
; GEPs are ugly
18-
; CHECK: while.body:
19-
; CHECK: phi
20-
; CHECK: phi
21-
; CHECK: phi
22-
; CHECK: phi
23-
; CHECK-NOT: phi
24-
; CHECK: bitcast float* {{.*}} to i1*
25-
; CHECK: bitcast float* {{.*}} to i1*
26-
; CHECK: getelementptr i1, i1*
27-
; CHECK: getelementptr i1, i1*
28-
2913
define float @test(float* nocapture %A, float* nocapture %B, i32 %N, i32 %IA, i32 %IB) nounwind uwtable readonly ssp {
14+
; CHECK-LABEL: define float @test
15+
; CHECK-SAME: (float* nocapture [[A:%.*]], float* nocapture [[B:%.*]], i32 [[N:%.*]], i32 [[IA:%.*]], i32 [[IB:%.*]]) #[[ATTR0:[0-9]+]] {
16+
; CHECK-NEXT: entry:
17+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[N]], 0
18+
; CHECK-NEXT: br i1 [[CMP1]], label [[WHILE_BODY_LR_PH:%.*]], label [[WHILE_END:%.*]]
19+
; CHECK: while.body.lr.ph:
20+
; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[IA]] to i64
21+
; CHECK-NEXT: [[IDX_EXT2:%.*]] = sext i32 [[IB]] to i64
22+
; CHECK-NEXT: [[TMP0:%.*]] = shl nsw i64 [[IDX_EXT]], 2
23+
; CHECK-NEXT: [[TMP1:%.*]] = shl nsw i64 [[IDX_EXT2]], 2
24+
; CHECK-NEXT: br label [[WHILE_BODY:%.*]]
25+
; CHECK: while.body:
26+
; CHECK-NEXT: [[LSR_IV2:%.*]] = phi float* [ [[TMP5:%.*]], [[WHILE_BODY]] ], [ [[B]], [[WHILE_BODY_LR_PH]] ]
27+
; CHECK-NEXT: [[LSR_IV:%.*]] = phi float* [ [[TMP4:%.*]], [[WHILE_BODY]] ], [ [[A]], [[WHILE_BODY_LR_PH]] ]
28+
; CHECK-NEXT: [[N_ADDR_03:%.*]] = phi i32 [ [[N]], [[WHILE_BODY_LR_PH]] ], [ [[SUB:%.*]], [[WHILE_BODY]] ]
29+
; CHECK-NEXT: [[SUM0_02:%.*]] = phi float [ 0.000000e+00, [[WHILE_BODY_LR_PH]] ], [ [[ADD:%.*]], [[WHILE_BODY]] ]
30+
; CHECK-NEXT: [[LSR_IV1:%.*]] = bitcast float* [[LSR_IV]] to i1*
31+
; CHECK-NEXT: [[LSR_IV23:%.*]] = bitcast float* [[LSR_IV2]] to i1*
32+
; CHECK-NEXT: [[TMP2:%.*]] = load float, float* [[LSR_IV]], align 4
33+
; CHECK-NEXT: [[TMP3:%.*]] = load float, float* [[LSR_IV2]], align 4
34+
; CHECK-NEXT: [[MUL:%.*]] = fmul float [[TMP2]], [[TMP3]]
35+
; CHECK-NEXT: [[ADD]] = fadd float [[SUM0_02]], [[MUL]]
36+
; CHECK-NEXT: [[SUB]] = add nsw i32 [[N_ADDR_03]], -1
37+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i1, i1* [[LSR_IV1]], i64 [[TMP0]]
38+
; CHECK-NEXT: [[TMP4]] = bitcast i1* [[SCEVGEP]] to float*
39+
; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr i1, i1* [[LSR_IV23]], i64 [[TMP1]]
40+
; CHECK-NEXT: [[TMP5]] = bitcast i1* [[SCEVGEP4]] to float*
41+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[SUB]], 0
42+
; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_END_LOOPEXIT:%.*]]
43+
; CHECK: while.end.loopexit:
44+
; CHECK-NEXT: br label [[WHILE_END]]
45+
; CHECK: while.end:
46+
; CHECK-NEXT: [[SUM0_0_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY:%.*]] ], [ [[ADD]], [[WHILE_END_LOOPEXIT]] ]
47+
; CHECK-NEXT: ret float [[SUM0_0_LCSSA]]
48+
;
3049
entry:
3150
%cmp1 = icmp sgt i32 %N, 0
3251
br i1 %cmp1, label %while.body.lr.ph, label %while.end

llvm/test/Transforms/LoopStrengthReduce/2011-12-19-PostincQuadratic.ll

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
12
; RUN: opt -opaque-pointers=0 -loop-reduce -S < %s | FileCheck %s
23
;
34
; PR11571: handle a postinc user outside of for.body7 that requires
@@ -9,16 +10,31 @@ target triple = "i386-unknown-freebsd10.0"
910

1011
@b = external global [121 x i32]
1112

12-
; CHECK-LABEL: @vb(
13-
; Outer recurrence:
14-
; CHECK: %lsr.iv1 = phi [121 x i32]*
15-
; Inner recurrence:
16-
; CHECK: %lsr.iv = phi i32
17-
; Outer step (relative to inner recurrence):
18-
; CHECK: %scevgep = getelementptr i1, i1* %{{.*}}, i32 %lsr.iv
19-
; Outer use:
20-
; CHECK: %lsr.iv3 = phi [121 x i32]* [ %lsr.iv1, %for.body43.preheader ]
2113
define void @vb() nounwind {
14+
; CHECK-LABEL: define void @vb
15+
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
16+
; CHECK-NEXT: for.cond.preheader:
17+
; CHECK-NEXT: br label [[FOR_BODY7:%.*]]
18+
; CHECK: for.body7:
19+
; CHECK-NEXT: [[LSR_IV1:%.*]] = phi [121 x i32]* [ [[TMP0:%.*]], [[FOR_BODY7]] ], [ bitcast (i32* getelementptr inbounds ([121 x i32], [121 x i32]* @b, i32 0, i32 1) to [121 x i32]*), [[FOR_COND_PREHEADER:%.*]] ]
20+
; CHECK-NEXT: [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[FOR_BODY7]] ], [ 8, [[FOR_COND_PREHEADER]] ]
21+
; CHECK-NEXT: [[INDVARS_IV77:%.*]] = phi i32 [ [[INDVARS_IV_NEXT78:%.*]], [[FOR_BODY7]] ], [ 1, [[FOR_COND_PREHEADER]] ]
22+
; CHECK-NEXT: [[LSR_IV12:%.*]] = bitcast [121 x i32]* [[LSR_IV1]] to i1*
23+
; CHECK-NEXT: [[INDVARS_IV_NEXT78]] = add i32 [[INDVARS_IV77]], 1
24+
; CHECK-NEXT: [[LSR_IV_NEXT]] = add nuw nsw i32 [[LSR_IV]], 4
25+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i1, i1* [[LSR_IV12]], i32 [[LSR_IV]]
26+
; CHECK-NEXT: [[TMP0]] = bitcast i1* [[SCEVGEP]] to [121 x i32]*
27+
; CHECK-NEXT: br i1 true, label [[FOR_BODY43_PREHEADER:%.*]], label [[FOR_BODY7]]
28+
; CHECK: for.body43.preheader:
29+
; CHECK-NEXT: br label [[FOR_BODY43:%.*]]
30+
; CHECK: for.body43:
31+
; CHECK-NEXT: [[LSR_IV3:%.*]] = phi [121 x i32]* [ [[LSR_IV1]], [[FOR_BODY43_PREHEADER]] ], [ [[TMP1:%.*]], [[FOR_BODY43]] ]
32+
; CHECK-NEXT: [[LSR_IV35:%.*]] = bitcast [121 x i32]* [[LSR_IV3]] to i32*
33+
; CHECK-NEXT: [[T2:%.*]] = load i32, i32* [[LSR_IV35]], align 4
34+
; CHECK-NEXT: [[SCEVGEP4:%.*]] = getelementptr [121 x i32], [121 x i32]* [[LSR_IV3]], i32 0, i32 1
35+
; CHECK-NEXT: [[TMP1]] = bitcast i32* [[SCEVGEP4]] to [121 x i32]*
36+
; CHECK-NEXT: br label [[FOR_BODY43]]
37+
;
2238
for.cond.preheader:
2339
br label %for.body7
2440

llvm/test/Transforms/LoopStrengthReduce/AArch64/lsr-memcpy.ll

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
12
; RUN: llc -opaque-pointers=0 -mtriple=arm64-unknown-unknown -mcpu=cyclone -pre-RA-sched=list-hybrid < %s | FileCheck %s
23
; rdar://10232252
34
; Prevent LSR of doing poor choice that cannot be folded in addressing mode
@@ -6,12 +7,25 @@
67
; <rdar://problem/12702735> [ARM64][coalescer] need better register
78
; coalescing for simple unit tests.
89

9-
; CHECK: testCase
10-
; CHECK: %while.body{{$}}
11-
; CHECK: ldr [[STREG:x[0-9]+]], [{{x[0-9]+}}], #8
12-
; CHECK-NEXT: str [[STREG]], [{{x[0-9]+}}], #8
13-
; CHECK: %while.end
1410
define i32 @testCase() nounwind ssp {
11+
; CHECK-LABEL: testCase:
12+
; CHECK: // %bb.0: // %entry
13+
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
14+
; CHECK-NEXT: mov w8, #1288 // =0x508
15+
; CHECK-NEXT: mov x9, #4294967296 // =0x100000000
16+
; CHECK-NEXT: mov x10, #6442450944 // =0x180000000
17+
; CHECK-NEXT: .LBB0_1: // %while.body
18+
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
19+
; CHECK-NEXT: ldr x11, [x9], #8
20+
; CHECK-NEXT: str x11, [x10], #8
21+
; CHECK-NEXT: subs x8, x8, #8
22+
; CHECK-NEXT: b.pl .LBB0_1
23+
; CHECK-NEXT: // %bb.2: // %while.end
24+
; CHECK-NEXT: mov x8, #6442450944 // =0x180000000
25+
; CHECK-NEXT: blr x8
26+
; CHECK-NEXT: mov w0, #0 // =0x0
27+
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
28+
; CHECK-NEXT: ret
1529
entry:
1630
br label %while.body
1731

llvm/test/Transforms/LoopStrengthReduce/ivchain.ll

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
12
; RUN: opt -opaque-pointers=0 < %s -loop-reduce -S | FileCheck %s
23
; RUN: opt -opaque-pointers=0 -passes='require<scalar-evolution>,require<targetir>,loop(loop-reduce)' < %s -S | FileCheck %s
34
;
@@ -11,11 +12,32 @@ target datalayout = "n8:16:32:64"
1112

1213
%struct = type { i8*, i8*, i16, i64, i16, i16, i16, i64, i64, i16, i8*, i64, i64, i64 }
1314

14-
; CHECK-LABEL: @test(
15-
; CHECK: for.body:
16-
; CHECK: lsr.iv = phi %struct
17-
; CHECK: br
1815
define i32 @test(i8* %h, i32 %more) nounwind uwtable {
16+
; CHECK-LABEL: define i32 @test
17+
; CHECK-SAME: (i8* [[H:%.*]], i32 [[MORE:%.*]]) #[[ATTR0:[0-9]+]] {
18+
; CHECK-NEXT: entry:
19+
; CHECK-NEXT: br i1 undef, label [[LAND_END238:%.*]], label [[RETURN:%.*]]
20+
; CHECK: land.end238:
21+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
22+
; CHECK: for.body:
23+
; CHECK-NEXT: [[LSR_IV:%.*]] = phi %struct* [ [[SCEVGEP:%.*]], [[SW_EPILOG:%.*]] ], [ undef, [[LAND_END238]] ]
24+
; CHECK-NEXT: [[COLUMN_N_0:%.*]] = phi i16 [ 0, [[LAND_END238]] ], [ [[INC601:%.*]], [[SW_EPILOG]] ]
25+
; CHECK-NEXT: [[LSR_IV1:%.*]] = bitcast %struct* [[LSR_IV]] to i64*
26+
; CHECK-NEXT: [[CONV250:%.*]] = sext i16 [[COLUMN_N_0]] to i32
27+
; CHECK-NEXT: [[ADD257:%.*]] = add nsw i32 [[CONV250]], 1
28+
; CHECK-NEXT: [[CONV258:%.*]] = trunc i32 [[ADD257]] to i16
29+
; CHECK-NEXT: [[CMP263:%.*]] = icmp ult i16 undef, 2
30+
; CHECK-NEXT: br label [[IF_END388:%.*]]
31+
; CHECK: if.end388:
32+
; CHECK-NEXT: [[CALL405:%.*]] = call signext i16 @SQLColAttribute(i8* undef, i16 zeroext [[CONV258]], i16 zeroext 1003, i8* null, i16 signext 0, i16* null, i64* [[LSR_IV1]]) #[[ATTR1:[0-9]+]]
33+
; CHECK-NEXT: br label [[SW_EPILOG]]
34+
; CHECK: sw.epilog:
35+
; CHECK-NEXT: [[INC601]] = add i16 [[COLUMN_N_0]], 1
36+
; CHECK-NEXT: [[SCEVGEP]] = getelementptr [[STRUCT:%.*]], %struct* [[LSR_IV]], i64 1
37+
; CHECK-NEXT: br label [[FOR_BODY]]
38+
; CHECK: return:
39+
; CHECK-NEXT: ret i32 1
40+
;
1941
entry:
2042
br i1 undef, label %land.end238, label %return
2143

llvm/test/Transforms/LoopStrengthReduce/nonintegral.ll

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,44 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
12
; RUN: opt -opaque-pointers=0 -S -loop-reduce < %s | FileCheck %s
23

34
; Address Space 10 is non-integral. The optimizer is not allowed to use
45
; ptrtoint/inttoptr instructions. Make sure that this doesn't happen
56
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12"
67
target triple = "x86_64-unknown-linux-gnu"
78

8-
define void @japi1__unsafe_getindex_65028(i64 addrspace(10)* %arg) {
9-
; CHECK-NOT: inttoptr
10-
; CHECK-NOT: ptrtoint
119
; How exactly SCEV chooses to materialize isn't all that important, as
1210
; long as it doesn't try to round-trip through integers. As of this writing,
1311
; it emits a byte-wise gep, which is fine.
14-
; CHECK: getelementptr i64, i64 addrspace(10)* {{.*}}, i64 {{.*}}
12+
define void @japi1__unsafe_getindex_65028(i64 addrspace(10)* %arg) {
13+
; CHECK-LABEL: define void @japi1__unsafe_getindex_65028
14+
; CHECK-SAME: (i64 addrspace(10)* [[ARG:%.*]]) {
15+
; CHECK-NEXT: top:
16+
; CHECK-NEXT: br label [[L86:%.*]]
17+
; CHECK: L86:
18+
; CHECK-NEXT: [[LSR_IV4:%.*]] = phi i64 [ [[LSR_IV_NEXT5:%.*]], [[L86]] ], [ -2, [[TOP:%.*]] ]
19+
; CHECK-NEXT: [[LSR_IV_NEXT5]] = add nsw i64 [[LSR_IV4]], 2
20+
; CHECK-NEXT: br i1 false, label [[L86]], label [[IF29:%.*]]
21+
; CHECK: if29:
22+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i64, i64 addrspace(10)* [[ARG]], i64 -1
23+
; CHECK-NEXT: br label [[IF31:%.*]]
24+
; CHECK: if31:
25+
; CHECK-NEXT: %"#temp#1.sroa.0.022" = phi i64 [ 0, [[IF29]] ], [ [[TMP3_LCSSA:%.*]], [[IF38:%.*]] ]
26+
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[LSR_IV_NEXT5]], %"#temp#1.sroa.0.022"
27+
; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i64, i64 addrspace(10)* [[SCEVGEP]], i64 [[TMP0]]
28+
; CHECK-NEXT: br label [[L119:%.*]]
29+
; CHECK: L119:
30+
; CHECK-NEXT: [[LSR_IV2:%.*]] = phi i64 addrspace(10)* [ [[SCEVGEP3:%.*]], [[L119]] ], [ [[SCEVGEP1]], [[IF31]] ]
31+
; CHECK-NEXT: [[I5_0:%.*]] = phi i64 [ %"#temp#1.sroa.0.022", [[IF31]] ], [ [[TMP3:%.*]], [[L119]] ]
32+
; CHECK-NEXT: [[TMP3]] = add i64 [[I5_0]], 1
33+
; CHECK-NEXT: [[SCEVGEP3]] = getelementptr i64, i64 addrspace(10)* [[LSR_IV2]], i64 1
34+
; CHECK-NEXT: br i1 false, label [[L119]], label [[IF38]]
35+
; CHECK: if38:
36+
; CHECK-NEXT: [[TMP3_LCSSA]] = phi i64 [ [[TMP3]], [[L119]] ]
37+
; CHECK-NEXT: [[TMP6:%.*]] = load i64, i64 addrspace(10)* [[SCEVGEP3]], align 8
38+
; CHECK-NEXT: br i1 true, label [[DONE:%.*]], label [[IF31]]
39+
; CHECK: done:
40+
; CHECK-NEXT: ret void
41+
;
1542
top:
1643
br label %L86
1744

llvm/test/Transforms/LoopStrengthReduce/shl.ll

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,38 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
12
; RUN: opt -opaque-pointers=0 < %s -loop-reduce -gvn -S | FileCheck %s
23

34
target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64"
45

6+
; LoopStrengthReduce should reuse %mul as the stride.
57
define void @_Z3fooPfll(float* nocapture readonly %input, i64 %n, i64 %s) {
6-
; CHECK-LABEL: @_Z3fooPfll(
8+
; CHECK-LABEL: define void @_Z3fooPfll
9+
; CHECK-SAME: (float* nocapture readonly [[INPUT:%.*]], i64 [[N:%.*]], i64 [[S:%.*]]) {
10+
; CHECK-NEXT: entry:
11+
; CHECK-NEXT: [[MUL:%.*]] = shl i64 [[S]], 2
12+
; CHECK-NEXT: tail call void @_Z3bazl(i64 [[MUL]])
13+
; CHECK-NEXT: [[CMP_5:%.*]] = icmp sgt i64 [[N]], 0
14+
; CHECK-NEXT: br i1 [[CMP_5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
15+
; CHECK: for.body.preheader:
16+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
17+
; CHECK: for.cond.cleanup.loopexit:
18+
; CHECK-NEXT: br label [[FOR_COND_CLEANUP]]
19+
; CHECK: for.cond.cleanup:
20+
; CHECK-NEXT: ret void
21+
; CHECK: for.body:
22+
; CHECK-NEXT: [[LSR_IV:%.*]] = phi float* [ [[TMP1:%.*]], [[FOR_BODY]] ], [ [[INPUT]], [[FOR_BODY_PREHEADER]] ]
23+
; CHECK-NEXT: [[I_06:%.*]] = phi i64 [ [[ADD:%.*]], [[FOR_BODY]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
24+
; CHECK-NEXT: [[LSR_IV1:%.*]] = bitcast float* [[LSR_IV]] to i1*
25+
; CHECK-NEXT: [[TMP0:%.*]] = load float, float* [[LSR_IV]], align 4
26+
; CHECK-NEXT: tail call void @_Z3barf(float [[TMP0]])
27+
; CHECK-NEXT: [[ADD]] = add i64 [[I_06]], [[S]]
28+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i1, i1* [[LSR_IV1]], i64 [[MUL]]
29+
; CHECK-NEXT: [[TMP1]] = bitcast i1* [[SCEVGEP]] to float*
30+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[ADD]], [[N]]
31+
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]]
32+
;
733
entry:
834
%mul = shl nsw i64 %s, 2
9-
; CHECK: %mul = shl i64 %s, 2
1035
tail call void @_Z3bazl(i64 %mul) #2
11-
; CHECK-NEXT: call void @_Z3bazl(i64 %mul)
1236
%cmp.5 = icmp sgt i64 %n, 0
1337
br i1 %cmp.5, label %for.body.preheader, label %for.cond.cleanup
1438

@@ -24,8 +48,6 @@ for.cond.cleanup: ; preds = %for.cond.cleanup.lo
2448
for.body: ; preds = %for.body.preheader, %for.body
2549
%i.06 = phi i64 [ %add, %for.body ], [ 0, %for.body.preheader ]
2650
%arrayidx = getelementptr inbounds float, float* %input, i64 %i.06
27-
; LoopStrengthReduce should reuse %mul as the stride.
28-
; CHECK: getelementptr i1, i1* {{[^,]+}}, i64 %mul
2951
%0 = load float, float* %arrayidx, align 4
3052
tail call void @_Z3barf(float %0) #2
3153
%add = add nsw i64 %i.06, %s

llvm/test/Transforms/LoopStrengthReduce/uglygep-address-space.ll

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
12
; RUN: opt -opaque-pointers=0 < %s -loop-reduce -S | FileCheck %s
23

34
; LSR shouldn't consider %t8 to be an interesting user of %t6, and it
@@ -9,7 +10,31 @@ target datalayout = "e-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-
910
; This tests expandAddToGEP uses the right smaller integer type for
1011
; another address space
1112
define void @Z4(i8 addrspace(1)* %ptr.i8, float addrspace(1)* addrspace(1)* %ptr.float) {
12-
; CHECK: define void @Z4
13+
; CHECK-LABEL: define void @Z4
14+
; CHECK-SAME: (i8 addrspace(1)* [[PTR_I8:%.*]], float addrspace(1)* addrspace(1)* [[PTR_FLOAT:%.*]]) {
15+
; CHECK-NEXT: bb:
16+
; CHECK-NEXT: br label [[BB3:%.*]]
17+
; CHECK: bb1:
18+
; CHECK-NEXT: br i1 true, label [[BB10:%.*]], label [[BB2:%.*]]
19+
; CHECK: bb2:
20+
; CHECK-NEXT: [[T:%.*]] = add i16 [[T4:%.*]], 1
21+
; CHECK-NEXT: br label [[BB3]]
22+
; CHECK: bb3:
23+
; CHECK-NEXT: [[T4]] = phi i16 [ [[T]], [[BB2]] ], [ 0, [[BB:%.*]] ]
24+
; CHECK-NEXT: br label [[BB1:%.*]]
25+
; CHECK: bb10:
26+
; CHECK-NEXT: [[T7:%.*]] = icmp eq i16 [[T4]], 0
27+
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, i8 addrspace(1)* [[PTR_I8]], i16 [[T4]]
28+
; CHECK-NEXT: br label [[BB14:%.*]]
29+
; CHECK: bb14:
30+
; CHECK-NEXT: store i8 undef, i8 addrspace(1)* [[SCEVGEP]], align 1
31+
; CHECK-NEXT: [[T6:%.*]] = load float addrspace(1)*, float addrspace(1)* addrspace(1)* [[PTR_FLOAT]], align 2
32+
; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr float, float addrspace(1)* [[T6]], i16 4
33+
; CHECK-NEXT: [[SCEVGEP12:%.*]] = bitcast float addrspace(1)* [[SCEVGEP1]] to i8 addrspace(1)*
34+
; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, i8 addrspace(1)* [[SCEVGEP12]], i16 [[T4]]
35+
; CHECK-NEXT: store i8 undef, i8 addrspace(1)* [[SCEVGEP3]], align 1
36+
; CHECK-NEXT: br label [[BB14]]
37+
;
1338
bb:
1439
br label %bb3
1540

@@ -24,26 +49,11 @@ bb3: ; preds = %bb2, %bb
2449
%t4 = phi i16 [ %t, %bb2 ], [ 0, %bb ] ; <i16> [#uses=3]
2550
br label %bb1
2651

27-
; CHECK: bb10:
28-
; CHECK-NEXT: %t7 = icmp eq i16 %t4, 0
29-
; Host %t2 computation outside the loop.
30-
; CHECK-NEXT: [[SCEVGEP:%[^ ]+]] = getelementptr i8, i8 addrspace(1)* %ptr.i8, i16 %t4
31-
; CHECK-NEXT: br label %bb14
3252
bb10: ; preds = %bb9
3353
%t7 = icmp eq i16 %t4, 0 ; <i1> [#uses=1]
3454
%t3 = add i16 %t4, 16 ; <i16> [#uses=1]
3555
br label %bb14
3656

37-
; CHECK: bb14:
38-
; CHECK-NEXT: store i8 undef, i8 addrspace(1)* [[SCEVGEP]]
39-
; CHECK-NEXT: %t6 = load float addrspace(1)*, float addrspace(1)* addrspace(1)* %ptr.float
40-
; Fold %t3's add within the address.
41-
; CHECK-NEXT: [[SCEVGEP1:%[^ ]+]] = getelementptr float, float addrspace(1)* %t6, i16 4
42-
; CHECK-NEXT: [[SCEVGEP2:%[^ ]+]] = bitcast float addrspace(1)* [[SCEVGEP1]] to i8 addrspace(1)*
43-
; Use the induction variable (%t4) to access the right element
44-
; CHECK-NEXT: [[ADDRESS:%[^ ]+]] = getelementptr i8, i8 addrspace(1)* [[SCEVGEP2]], i16 %t4
45-
; CHECK-NEXT: store i8 undef, i8 addrspace(1)* [[ADDRESS]]
46-
; CHECK-NEXT: br label %bb14
4757
bb14: ; preds = %bb14, %bb10
4858
%t2 = getelementptr inbounds i8, i8 addrspace(1)* %ptr.i8, i16 %t4 ; <i8*> [#uses=1]
4959
store i8 undef, i8 addrspace(1)* %t2

0 commit comments

Comments
 (0)