Skip to content

Commit 9c801c4

Browse files
committed
[NFC][IndVarSimplify] Autogenerate tests affected by isHighCostExpansionHelper() cost modelling (PR44668)
1 parent c3075e6 commit 9c801c4

File tree

7 files changed

+732
-191
lines changed

7 files changed

+732
-191
lines changed

llvm/test/Analysis/ScalarEvolution/pr28705.ll

Lines changed: 0 additions & 41 deletions
This file was deleted.
Lines changed: 100 additions & 37 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
12
; RUN: opt < %s -indvars -S | FileCheck %s
23

34
; This tests that the IV is not recomputed outside of the loop when it is known
@@ -21,55 +22,89 @@
2122

2223
declare void @func(i32)
2324

24-
; CHECK-LABEL: @test(
2525
define void @test(i32 %m) nounwind uwtable {
26+
; CHECK-LABEL: @test(
27+
; CHECK-NEXT: entry:
28+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
29+
; CHECK: for.body:
30+
; CHECK-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
31+
; CHECK-NEXT: [[A_05:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
32+
; CHECK-NEXT: [[ADD]] = add i32 [[A_05]], [[M:%.*]]
33+
; CHECK-NEXT: tail call void @func(i32 [[ADD]])
34+
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
35+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 186
36+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
37+
; CHECK: for.end:
38+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
39+
; CHECK-NEXT: tail call void @func(i32 [[ADD_LCSSA]])
40+
; CHECK-NEXT: ret void
41+
;
2642
entry:
2743
br label %for.body
2844

2945
for.body: ; preds = %for.body, %entry
3046
%i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
3147
%a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
3248
%add = add i32 %a.05, %m
33-
; CHECK: tail call void @func(i32 %add)
3449
tail call void @func(i32 %add)
3550
%inc = add nsw i32 %i.06, 1
3651
%exitcond = icmp eq i32 %inc, 186
3752
br i1 %exitcond, label %for.end, label %for.body
3853

3954
for.end: ; preds = %for.body
40-
; CHECK: for.end:
41-
; CHECK-NOT: mul i32 %m, 186
42-
; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
43-
; CHECK-NEXT: tail call void @func(i32 %add.lcssa)
4455
tail call void @func(i32 %add)
4556
ret void
4657
}
4758

48-
; CHECK-LABEL: @test2(
4959
define i32 @test2(i32 %m) nounwind uwtable {
60+
; CHECK-LABEL: @test2(
61+
; CHECK-NEXT: entry:
62+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
63+
; CHECK: for.body:
64+
; CHECK-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
65+
; CHECK-NEXT: [[A_05:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
66+
; CHECK-NEXT: [[ADD]] = add i32 [[A_05]], [[M:%.*]]
67+
; CHECK-NEXT: tail call void @func(i32 [[ADD]])
68+
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
69+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 186
70+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
71+
; CHECK: for.end:
72+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
73+
; CHECK-NEXT: ret i32 [[ADD_LCSSA]]
74+
;
5075
entry:
5176
br label %for.body
5277

5378
for.body: ; preds = %for.body, %entry
5479
%i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
5580
%a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
5681
%add = add i32 %a.05, %m
57-
; CHECK: tail call void @func(i32 %add)
5882
tail call void @func(i32 %add)
5983
%inc = add nsw i32 %i.06, 1
6084
%exitcond = icmp eq i32 %inc, 186
6185
br i1 %exitcond, label %for.end, label %for.body
6286

6387
for.end: ; preds = %for.body
64-
; CHECK: for.end:
65-
; CHECK-NOT: mul i32 %m, 186
66-
; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
67-
; CHECK-NEXT: ret i32 %add.lcssa
6888
ret i32 %add
6989
}
7090

71-
; CHECK-LABEL: @test3(
7291
define void @test3(i32 %m) nounwind uwtable {
92+
; CHECK-LABEL: @test3(
93+
; CHECK-NEXT: entry:
94+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
95+
; CHECK: for.body:
96+
; CHECK-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
97+
; CHECK-NEXT: [[A_05:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
98+
; CHECK-NEXT: [[ADD]] = add i32 [[A_05]], [[M:%.*]]
99+
; CHECK-NEXT: tail call void @func(i32 [[ADD]])
100+
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
101+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 186
102+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
103+
; CHECK: for.end:
104+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
105+
; CHECK-NEXT: tail call void @func(i32 [[ADD_LCSSA]])
106+
; CHECK-NEXT: ret void
107+
;
73108
entry:
74109
br label %for.body
75110

@@ -83,49 +118,70 @@ for.body: ; preds = %for.body, %entry
83118
mul i32 %add, 1
84119
mul i32 %add, 1
85120
mul i32 %add, 1
86-
; CHECK: tail call void @func(i32 %add)
87121
tail call void @func(i32 %add)
88122
%inc = add nsw i32 %i.06, 1
89123
%exitcond = icmp eq i32 %inc, 186
90124
br i1 %exitcond, label %for.end, label %for.body
91125

92126
for.end: ; preds = %for.body
93-
; CHECK: for.end:
94-
; CHECK-NOT: mul i32 %m, 186
95-
; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
96-
; CHECK-NEXT: tail call void @func(i32 %add.lcssa)
97127
tail call void @func(i32 %add)
98128
ret void
99129
}
100130

101-
; CHECK-LABEL: @test4(
102131
define void @test4(i32 %m) nounwind uwtable {
132+
; CHECK-LABEL: @test4(
133+
; CHECK-NEXT: entry:
134+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
135+
; CHECK: for.body:
136+
; CHECK-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
137+
; CHECK-NEXT: [[A_05:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
138+
; CHECK-NEXT: [[ADD]] = add i32 [[A_05]], [[M:%.*]]
139+
; CHECK-NEXT: tail call void @func(i32 [[ADD]])
140+
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
141+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 186
142+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
143+
; CHECK: for.end:
144+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
145+
; CHECK-NEXT: [[SOFT_USE:%.*]] = add i32 [[ADD_LCSSA]], 123
146+
; CHECK-NEXT: tail call void @func(i32 [[SOFT_USE]])
147+
; CHECK-NEXT: ret void
148+
;
103149
entry:
104150
br label %for.body
105151

106152
for.body: ; preds = %for.body, %entry
107153
%i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
108154
%a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
109155
%add = add i32 %a.05, %m
110-
; CHECK: tail call void @func(i32 %add)
111156
tail call void @func(i32 %add)
112157
%inc = add nsw i32 %i.06, 1
113158
%exitcond = icmp eq i32 %inc, 186
114159
br i1 %exitcond, label %for.end, label %for.body
115160

116161
for.end: ; preds = %for.body
117-
; CHECK: for.end:
118-
; CHECK-NOT: mul i32 %m, 186
119-
; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
120-
; CHECK-NEXT: %soft_use = add i32 %add.lcssa, 123
121-
; CHECK-NEXT: tail call void @func(i32 %soft_use)
122162
%soft_use = add i32 %add, 123
123163
tail call void @func(i32 %soft_use)
124164
ret void
125165
}
126166

127-
; CHECK-LABEL: @test5(
128167
define void @test5(i32 %m) nounwind uwtable {
168+
; CHECK-LABEL: @test5(
169+
; CHECK-NEXT: entry:
170+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
171+
; CHECK: for.body:
172+
; CHECK-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
173+
; CHECK-NEXT: [[A_05:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
174+
; CHECK-NEXT: [[ADD]] = add i32 [[A_05]], [[M:%.*]]
175+
; CHECK-NEXT: [[SOFT_USE:%.*]] = add i32 [[ADD]], 123
176+
; CHECK-NEXT: tail call void @func(i32 [[SOFT_USE]])
177+
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
178+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 186
179+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
180+
; CHECK: for.end:
181+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
182+
; CHECK-NEXT: tail call void @func(i32 [[ADD_LCSSA]])
183+
; CHECK-NEXT: ret void
184+
;
129185
entry:
130186
br label %for.body
131187

@@ -134,23 +190,35 @@ for.body: ; preds = %for.body, %entry
134190
%a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
135191
%add = add i32 %a.05, %m
136192
%soft_use = add i32 %add, 123
137-
; CHECK: tail call void @func(i32 %soft_use)
138193
tail call void @func(i32 %soft_use)
139194
%inc = add nsw i32 %i.06, 1
140195
%exitcond = icmp eq i32 %inc, 186
141196
br i1 %exitcond, label %for.end, label %for.body
142197

143198
for.end: ; preds = %for.body
144-
; CHECK: for.end:
145-
; CHECK-NOT: mul i32 %m, 186
146-
; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
147-
; CHECK-NEXT: tail call void @func(i32 %add.lcssa)
148199
tail call void @func(i32 %add)
149200
ret void
150201
}
151202

152-
; CHECK-LABEL: @test6(
153203
define void @test6(i32 %m, i32* %p) nounwind uwtable {
204+
; CHECK-LABEL: @test6(
205+
; CHECK-NEXT: entry:
206+
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
207+
; CHECK: for.body:
208+
; CHECK-NEXT: [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
209+
; CHECK-NEXT: [[A_05:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_BODY]] ]
210+
; CHECK-NEXT: [[ADD]] = add i32 [[A_05]], [[M:%.*]]
211+
; CHECK-NEXT: [[SOFT_USE:%.*]] = add i32 [[ADD]], 123
212+
; CHECK-NEXT: [[PIDX:%.*]] = getelementptr i32, i32* [[P:%.*]], i32 [[ADD]]
213+
; CHECK-NEXT: store i32 [[SOFT_USE]], i32* [[PIDX]]
214+
; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_06]], 1
215+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 186
216+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
217+
; CHECK: for.end:
218+
; CHECK-NEXT: [[ADD_LCSSA:%.*]] = phi i32 [ [[ADD]], [[FOR_BODY]] ]
219+
; CHECK-NEXT: tail call void @func(i32 [[ADD_LCSSA]])
220+
; CHECK-NEXT: ret void
221+
;
154222
entry:
155223
br label %for.body
156224

@@ -159,18 +227,13 @@ for.body: ; preds = %for.body, %entry
159227
%a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
160228
%add = add i32 %a.05, %m
161229
%soft_use = add i32 %add, 123
162-
; CHECK: store i32 %soft_use, i32* %pidx
163230
%pidx = getelementptr i32, i32* %p, i32 %add
164231
store i32 %soft_use, i32* %pidx
165232
%inc = add nsw i32 %i.06, 1
166233
%exitcond = icmp eq i32 %inc, 186
167234
br i1 %exitcond, label %for.end, label %for.body
168235

169236
for.end: ; preds = %for.body
170-
; CHECK: for.end:
171-
; CHECK-NOT: mul i32 %m, 186
172-
; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
173-
; CHECK-NEXT: tail call void @func(i32 %add.lcssa)
174237
tail call void @func(i32 %add)
175238
ret void
176239
}

llvm/test/Transforms/IndVarSimplify/lftr-reuse.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ exit:
128128
; Force SCEVExpander to look for an existing well-formed phi.
129129
; Perform LFTR without generating extra preheader code.
130130
define void @guardedloop([0 x double]* %matrix, [0 x double]* %vector,
131+
;
131132
; CHECK-LABEL: @guardedloop(
132133
; CHECK-NEXT: entry:
133134
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 1, [[IROW:%.*]]
@@ -183,6 +184,7 @@ return:
183184

184185
; Avoid generating extra code to materialize a trip count. Skip LFTR.
185186
define void @unguardedloop([0 x double]* %matrix, [0 x double]* %vector,
187+
;
186188
; CHECK-LABEL: @unguardedloop(
187189
; CHECK-NEXT: entry:
188190
; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[IROW:%.*]] to i64

0 commit comments

Comments
 (0)