1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --filter "br" --filter "^.*:" --version 5
2
2
; RUN: opt -passes="print<block-freq>,loop-vectorize" -mcpu=neoverse-v1 -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefix=CHECK-V1-IC1
3
+ ; RUN: opt -passes="print<block-freq>,loop-vectorize" -mcpu=neoverse-v1 -force-vector-interleave=1 \
4
+ ; RUN: -epilogue-vectorization-force-VF=4 -S < %s | FileCheck %s -check-prefix=CHECK-V1-IC1-FORCE-EPI4
3
5
; RUN: opt -passes="print<block-freq>,loop-vectorize" -mcpu=neoverse-v2 -force-vector-interleave=1 -S < %s | FileCheck %s -check-prefix=CHECK-V2-IC1
4
6
; RUN: opt -passes="print<block-freq>,loop-vectorize" -mcpu=neoverse-v2 -force-vector-interleave=4 -S < %s | FileCheck %s -check-prefix=CHECK-V2-IC4
5
7
@@ -10,15 +12,15 @@ target triple = "aarch64-unknown-linux-gnu"
10
12
11
13
; We expect the branch weight computations after vectorisation to use
12
14
; vscale=2 for neoverse-v1 and vscale=1 for neoverse-v2.
13
- define void @_Z3foov (i64 %n ) {
14
- ; CHECK-V1-IC1-LABEL: define void @_Z3foov (
15
+ define void @foo_i32 (i64 %n ) {
16
+ ; CHECK-V1-IC1-LABEL: define void @foo_i32 (
15
17
; CHECK-V1-IC1-SAME: i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
16
18
; CHECK-V1-IC1: [[ENTRY:.*:]]
17
19
; CHECK-V1-IC1: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0:![0-9]+]]
18
20
; CHECK-V1-IC1: [[VECTOR_PH]]:
19
21
; CHECK-V1-IC1: br label %[[VECTOR_BODY:.*]]
20
22
; CHECK-V1-IC1: [[VECTOR_BODY]]:
21
- ; CHECK-V1-IC1: br i1 [[TMP8 :%.*]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF0]], !llvm.loop [[LOOP1:![0-9]+]]
23
+ ; CHECK-V1-IC1: br i1 [[TMP6 :%.*]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF0]], !llvm.loop [[LOOP1:![0-9]+]]
22
24
; CHECK-V1-IC1: [[MIDDLE_BLOCK]]:
23
25
; CHECK-V1-IC1: br i1 [[CMP_N:%.*]], label %[[FOR_COND_CLEANUP:.*]], label %[[SCALAR_PH]], !prof [[PROF4:![0-9]+]]
24
26
; CHECK-V1-IC1: [[SCALAR_PH]]:
@@ -27,7 +29,33 @@ define void @_Z3foov(i64 %n) {
27
29
; CHECK-V1-IC1: br i1 [[EXITCOND:%.*]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !prof [[PROF5:![0-9]+]], !llvm.loop [[LOOP6:![0-9]+]]
28
30
; CHECK-V1-IC1: [[FOR_COND_CLEANUP]]:
29
31
;
30
- ; CHECK-V2-IC1-LABEL: define void @_Z3foov(
32
+ ; CHECK-V1-IC1-FORCE-EPI4-LABEL: define void @foo_i32(
33
+ ; CHECK-V1-IC1-FORCE-EPI4-SAME: i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
34
+ ; CHECK-V1-IC1-FORCE-EPI4: [[ITER_CHECK:.*:]]
35
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH:.*]], label %[[VECTOR_MAIN_LOOP_ITER_CHECK:.*]], !prof [[PROF0:![0-9]+]]
36
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VECTOR_MAIN_LOOP_ITER_CHECK]]:
37
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[MIN_ITERS_CHECK1:%.*]], label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0]]
38
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VECTOR_PH]]:
39
+ ; CHECK-V1-IC1-FORCE-EPI4: br label %[[VECTOR_BODY:.*]]
40
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VECTOR_BODY]]:
41
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[TMP6:%.*]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF0]], !llvm.loop [[LOOP1:![0-9]+]]
42
+ ; CHECK-V1-IC1-FORCE-EPI4: [[MIDDLE_BLOCK]]:
43
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[CMP_N:%.*]], label %[[FOR_COND_CLEANUP:.*]], label %[[VEC_EPILOG_ITER_CHECK:.*]], !prof [[PROF4:![0-9]+]]
44
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_ITER_CHECK]]:
45
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[MIN_EPILOG_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH]], label %[[VEC_EPILOG_PH]], !prof [[PROF5:![0-9]+]]
46
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_PH]]:
47
+ ; CHECK-V1-IC1-FORCE-EPI4: br label %[[VEC_EPILOG_VECTOR_BODY:.*]]
48
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_VECTOR_BODY]]:
49
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[TMP9:%.*]], label %[[VEC_EPILOG_MIDDLE_BLOCK:.*]], label %[[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
50
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_MIDDLE_BLOCK]]:
51
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[CMP_N7:%.*]], label %[[FOR_COND_CLEANUP]], label %[[VEC_EPILOG_SCALAR_PH]], !prof [[PROF7:![0-9]+]]
52
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_SCALAR_PH]]:
53
+ ; CHECK-V1-IC1-FORCE-EPI4: br label %[[FOR_BODY:.*]]
54
+ ; CHECK-V1-IC1-FORCE-EPI4: [[FOR_BODY]]:
55
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[EXITCOND:%.*]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !prof [[PROF8:![0-9]+]], !llvm.loop [[LOOP9:![0-9]+]]
56
+ ; CHECK-V1-IC1-FORCE-EPI4: [[FOR_COND_CLEANUP]]:
57
+ ;
58
+ ; CHECK-V2-IC1-LABEL: define void @foo_i32(
31
59
; CHECK-V2-IC1-SAME: i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
32
60
; CHECK-V2-IC1: [[ENTRY:.*:]]
33
61
; CHECK-V2-IC1: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0:![0-9]+]]
@@ -43,9 +71,9 @@ define void @_Z3foov(i64 %n) {
43
71
; CHECK-V2-IC1: br i1 [[EXITCOND:%.*]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !prof [[PROF6:![0-9]+]], !llvm.loop [[LOOP7:![0-9]+]]
44
72
; CHECK-V2-IC1: [[FOR_COND_CLEANUP]]:
45
73
;
46
- ; CHECK-V2-IC4-LABEL: define void @_Z3foov (
74
+ ; CHECK-V2-IC4-LABEL: define void @foo_i32 (
47
75
; CHECK-V2-IC4-SAME: i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
48
- ; CHECK-V2-IC4: [[VEC_EPILOG_VECTOR_BODY1 :.*:]]
76
+ ; CHECK-V2-IC4: [[ITER_CHECK :.*:]]
49
77
; CHECK-V2-IC4: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH:.*]], label %[[VECTOR_MAIN_LOOP_ITER_CHECK:.*]], !prof [[PROF0:![0-9]+]]
50
78
; CHECK-V2-IC4: [[VECTOR_MAIN_LOOP_ITER_CHECK]]:
51
79
; CHECK-V2-IC4: br i1 [[MIN_ITERS_CHECK1:%.*]], label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0]]
@@ -86,6 +114,128 @@ for.cond.cleanup: ; preds = %for.body
86
114
ret void
87
115
}
88
116
117
+ define void @foo_i8 (i64 %n ) {
118
+ ; CHECK-V1-IC1-LABEL: define void @foo_i8(
119
+ ; CHECK-V1-IC1-SAME: i64 [[N:%.*]]) #[[ATTR0]] {
120
+ ; CHECK-V1-IC1: [[ITER_CHECK:.*:]]
121
+ ; CHECK-V1-IC1: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH:.*]], label %[[VECTOR_MAIN_LOOP_ITER_CHECK:.*]], !prof [[PROF0]]
122
+ ; CHECK-V1-IC1: [[VECTOR_MAIN_LOOP_ITER_CHECK]]:
123
+ ; CHECK-V1-IC1: br i1 [[MIN_ITERS_CHECK1:%.*]], label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0]]
124
+ ; CHECK-V1-IC1: [[VECTOR_PH]]:
125
+ ; CHECK-V1-IC1: br label %[[VECTOR_BODY:.*]]
126
+ ; CHECK-V1-IC1: [[VECTOR_BODY]]:
127
+ ; CHECK-V1-IC1: br i1 [[TMP8:%.*]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF7:![0-9]+]], !llvm.loop [[LOOP8:![0-9]+]]
128
+ ; CHECK-V1-IC1: [[MIDDLE_BLOCK]]:
129
+ ; CHECK-V1-IC1: br i1 [[CMP_N:%.*]], label %[[FOR_COND_CLEANUP:.*]], label %[[VEC_EPILOG_ITER_CHECK:.*]], !prof [[PROF7]]
130
+ ; CHECK-V1-IC1: [[VEC_EPILOG_ITER_CHECK]]:
131
+ ; CHECK-V1-IC1: br i1 [[MIN_EPILOG_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH]], label %[[VEC_EPILOG_PH]], !prof [[PROF9:![0-9]+]]
132
+ ; CHECK-V1-IC1: [[VEC_EPILOG_PH]]:
133
+ ; CHECK-V1-IC1: br label %[[VEC_EPILOG_VECTOR_BODY:.*]]
134
+ ; CHECK-V1-IC1: [[VEC_EPILOG_VECTOR_BODY]]:
135
+ ; CHECK-V1-IC1: br i1 [[TMP15:%.*]], label %[[VEC_EPILOG_MIDDLE_BLOCK:.*]], label %[[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
136
+ ; CHECK-V1-IC1: [[VEC_EPILOG_MIDDLE_BLOCK]]:
137
+ ; CHECK-V1-IC1: br i1 [[CMP_N7:%.*]], label %[[FOR_COND_CLEANUP]], label %[[VEC_EPILOG_SCALAR_PH]], !prof [[PROF11:![0-9]+]]
138
+ ; CHECK-V1-IC1: [[VEC_EPILOG_SCALAR_PH]]:
139
+ ; CHECK-V1-IC1: br label %[[FOR_BODY:.*]]
140
+ ; CHECK-V1-IC1: [[FOR_BODY]]:
141
+ ; CHECK-V1-IC1: br i1 [[EXITCOND:%.*]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !prof [[PROF5]], !llvm.loop [[LOOP12:![0-9]+]]
142
+ ; CHECK-V1-IC1: [[FOR_COND_CLEANUP]]:
143
+ ;
144
+ ; CHECK-V1-IC1-FORCE-EPI4-LABEL: define void @foo_i8(
145
+ ; CHECK-V1-IC1-FORCE-EPI4-SAME: i64 [[N:%.*]]) #[[ATTR0]] {
146
+ ; CHECK-V1-IC1-FORCE-EPI4: [[ITER_CHECK:.*:]]
147
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH:.*]], label %[[VECTOR_MAIN_LOOP_ITER_CHECK:.*]], !prof [[PROF0]]
148
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VECTOR_MAIN_LOOP_ITER_CHECK]]:
149
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[MIN_ITERS_CHECK1:%.*]], label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0]]
150
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VECTOR_PH]]:
151
+ ; CHECK-V1-IC1-FORCE-EPI4: br label %[[VECTOR_BODY:.*]]
152
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VECTOR_BODY]]:
153
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[TMP6:%.*]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF10:![0-9]+]], !llvm.loop [[LOOP11:![0-9]+]]
154
+ ; CHECK-V1-IC1-FORCE-EPI4: [[MIDDLE_BLOCK]]:
155
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[CMP_N:%.*]], label %[[FOR_COND_CLEANUP:.*]], label %[[VEC_EPILOG_ITER_CHECK:.*]], !prof [[PROF10]]
156
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_ITER_CHECK]]:
157
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[MIN_EPILOG_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH]], label %[[VEC_EPILOG_PH]], !prof [[PROF12:![0-9]+]]
158
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_PH]]:
159
+ ; CHECK-V1-IC1-FORCE-EPI4: br label %[[VEC_EPILOG_VECTOR_BODY:.*]]
160
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_VECTOR_BODY]]:
161
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[TMP9:%.*]], label %[[VEC_EPILOG_MIDDLE_BLOCK:.*]], label %[[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP13:![0-9]+]]
162
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_MIDDLE_BLOCK]]:
163
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[CMP_N7:%.*]], label %[[FOR_COND_CLEANUP]], label %[[VEC_EPILOG_SCALAR_PH]], !prof [[PROF7]]
164
+ ; CHECK-V1-IC1-FORCE-EPI4: [[VEC_EPILOG_SCALAR_PH]]:
165
+ ; CHECK-V1-IC1-FORCE-EPI4: br label %[[FOR_BODY:.*]]
166
+ ; CHECK-V1-IC1-FORCE-EPI4: [[FOR_BODY]]:
167
+ ; CHECK-V1-IC1-FORCE-EPI4: br i1 [[EXITCOND:%.*]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !prof [[PROF8]], !llvm.loop [[LOOP14:![0-9]+]]
168
+ ; CHECK-V1-IC1-FORCE-EPI4: [[FOR_COND_CLEANUP]]:
169
+ ;
170
+ ; CHECK-V2-IC1-LABEL: define void @foo_i8(
171
+ ; CHECK-V2-IC1-SAME: i64 [[N:%.*]]) #[[ATTR0]] {
172
+ ; CHECK-V2-IC1: [[ITER_CHECK:.*:]]
173
+ ; CHECK-V2-IC1: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH:.*]], label %[[VECTOR_MAIN_LOOP_ITER_CHECK:.*]], !prof [[PROF0]]
174
+ ; CHECK-V2-IC1: [[VECTOR_MAIN_LOOP_ITER_CHECK]]:
175
+ ; CHECK-V2-IC1: br i1 [[MIN_ITERS_CHECK1:%.*]], label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0]]
176
+ ; CHECK-V2-IC1: [[VECTOR_PH]]:
177
+ ; CHECK-V2-IC1: br label %[[VECTOR_BODY:.*]]
178
+ ; CHECK-V2-IC1: [[VECTOR_BODY]]:
179
+ ; CHECK-V2-IC1: br i1 [[TMP4:%.*]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF8:![0-9]+]], !llvm.loop [[LOOP9:![0-9]+]]
180
+ ; CHECK-V2-IC1: [[MIDDLE_BLOCK]]:
181
+ ; CHECK-V2-IC1: br i1 [[CMP_N:%.*]], label %[[FOR_COND_CLEANUP:.*]], label %[[VEC_EPILOG_ITER_CHECK:.*]], !prof [[PROF10:![0-9]+]]
182
+ ; CHECK-V2-IC1: [[VEC_EPILOG_ITER_CHECK]]:
183
+ ; CHECK-V2-IC1: br i1 [[MIN_EPILOG_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH]], label %[[VEC_EPILOG_PH]], !prof [[PROF11:![0-9]+]]
184
+ ; CHECK-V2-IC1: [[VEC_EPILOG_PH]]:
185
+ ; CHECK-V2-IC1: br label %[[VEC_EPILOG_VECTOR_BODY:.*]]
186
+ ; CHECK-V2-IC1: [[VEC_EPILOG_VECTOR_BODY]]:
187
+ ; CHECK-V2-IC1: br i1 [[TMP11:%.*]], label %[[VEC_EPILOG_MIDDLE_BLOCK:.*]], label %[[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
188
+ ; CHECK-V2-IC1: [[VEC_EPILOG_MIDDLE_BLOCK]]:
189
+ ; CHECK-V2-IC1: br i1 [[CMP_N7:%.*]], label %[[FOR_COND_CLEANUP]], label %[[VEC_EPILOG_SCALAR_PH]], !prof [[PROF5]]
190
+ ; CHECK-V2-IC1: [[VEC_EPILOG_SCALAR_PH]]:
191
+ ; CHECK-V2-IC1: br label %[[FOR_BODY:.*]]
192
+ ; CHECK-V2-IC1: [[FOR_BODY]]:
193
+ ; CHECK-V2-IC1: br i1 [[EXITCOND:%.*]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !prof [[PROF6]], !llvm.loop [[LOOP13:![0-9]+]]
194
+ ; CHECK-V2-IC1: [[FOR_COND_CLEANUP]]:
195
+ ;
196
+ ; CHECK-V2-IC4-LABEL: define void @foo_i8(
197
+ ; CHECK-V2-IC4-SAME: i64 [[N:%.*]]) #[[ATTR0]] {
198
+ ; CHECK-V2-IC4: [[ITER_CHECK:.*:]]
199
+ ; CHECK-V2-IC4: br i1 [[MIN_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH:.*]], label %[[VECTOR_MAIN_LOOP_ITER_CHECK:.*]], !prof [[PROF0]]
200
+ ; CHECK-V2-IC4: [[VECTOR_MAIN_LOOP_ITER_CHECK]]:
201
+ ; CHECK-V2-IC4: br i1 [[MIN_ITERS_CHECK1:%.*]], label %[[VEC_EPILOG_PH:.*]], label %[[VECTOR_PH:.*]], !prof [[PROF0]]
202
+ ; CHECK-V2-IC4: [[VECTOR_PH]]:
203
+ ; CHECK-V2-IC4: br label %[[VECTOR_BODY:.*]]
204
+ ; CHECK-V2-IC4: [[VECTOR_BODY]]:
205
+ ; CHECK-V2-IC4: br i1 [[TMP8:%.*]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !prof [[PROF5]], !llvm.loop [[LOOP11:![0-9]+]]
206
+ ; CHECK-V2-IC4: [[MIDDLE_BLOCK]]:
207
+ ; CHECK-V2-IC4: br i1 [[CMP_N:%.*]], label %[[FOR_COND_CLEANUP:.*]], label %[[VEC_EPILOG_ITER_CHECK:.*]], !prof [[PROF1]]
208
+ ; CHECK-V2-IC4: [[VEC_EPILOG_ITER_CHECK]]:
209
+ ; CHECK-V2-IC4: br i1 [[MIN_EPILOG_ITERS_CHECK:%.*]], label %[[VEC_EPILOG_SCALAR_PH]], label %[[VEC_EPILOG_PH]], !prof [[PROF12:![0-9]+]]
210
+ ; CHECK-V2-IC4: [[VEC_EPILOG_PH]]:
211
+ ; CHECK-V2-IC4: br label %[[VEC_EPILOG_VECTOR_BODY:.*]]
212
+ ; CHECK-V2-IC4: [[VEC_EPILOG_VECTOR_BODY]]:
213
+ ; CHECK-V2-IC4: br i1 [[TMP11:%.*]], label %[[VEC_EPILOG_MIDDLE_BLOCK:.*]], label %[[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP13:![0-9]+]]
214
+ ; CHECK-V2-IC4: [[VEC_EPILOG_MIDDLE_BLOCK]]:
215
+ ; CHECK-V2-IC4: br i1 [[CMP_N10:%.*]], label %[[FOR_COND_CLEANUP]], label %[[VEC_EPILOG_SCALAR_PH]], !prof [[PROF14:![0-9]+]]
216
+ ; CHECK-V2-IC4: [[VEC_EPILOG_SCALAR_PH]]:
217
+ ; CHECK-V2-IC4: br label %[[FOR_BODY:.*]]
218
+ ; CHECK-V2-IC4: [[FOR_BODY]]:
219
+ ; CHECK-V2-IC4: br i1 [[EXITCOND:%.*]], label %[[FOR_COND_CLEANUP]], label %[[FOR_BODY]], !prof [[PROF9]], !llvm.loop [[LOOP15:![0-9]+]]
220
+ ; CHECK-V2-IC4: [[FOR_COND_CLEANUP]]:
221
+ ;
222
+ entry:
223
+ br label %for.body
224
+
225
+ for.body:
226
+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %for.body ]
227
+ %arrayidx = getelementptr inbounds [1024 x i8 ], ptr @b , i64 0 , i64 %iv
228
+ %load = load i8 , ptr %arrayidx , align 1
229
+ %arrayidx2 = getelementptr inbounds [1024 x i8 ], ptr @a , i64 0 , i64 %iv
230
+ store i8 %load , ptr %arrayidx2 , align 1
231
+ %iv.next = add nuw nsw i64 %iv , 1
232
+ %exitcond = icmp eq i64 %iv.next , %n
233
+ br i1 %exitcond , label %for.cond.cleanup , label %for.body , !prof !0
234
+
235
+ for.cond.cleanup:
236
+ ret void
237
+ }
238
+
89
239
!0 = !{!"branch_weights" , i32 1 , i32 1023 }
90
240
;.
91
241
; CHECK-V1-IC1: [[PROF0]] = !{!"branch_weights", i32 1, i32 127}
@@ -95,6 +245,28 @@ for.cond.cleanup: ; preds = %for.body
95
245
; CHECK-V1-IC1: [[PROF4]] = !{!"branch_weights", i32 1, i32 7}
96
246
; CHECK-V1-IC1: [[PROF5]] = !{!"branch_weights", i32 0, i32 0}
97
247
; CHECK-V1-IC1: [[LOOP6]] = distinct !{[[LOOP6]], [[META3]], [[META2]]}
248
+ ; CHECK-V1-IC1: [[PROF7]] = !{!"branch_weights", i32 1, i32 31}
249
+ ; CHECK-V1-IC1: [[LOOP8]] = distinct !{[[LOOP8]], [[META2]], [[META3]]}
250
+ ; CHECK-V1-IC1: [[PROF9]] = !{!"branch_weights", i32 16, i32 16}
251
+ ; CHECK-V1-IC1: [[LOOP10]] = distinct !{[[LOOP10]], [[META2]], [[META3]]}
252
+ ; CHECK-V1-IC1: [[PROF11]] = !{!"branch_weights", i32 1, i32 15}
253
+ ; CHECK-V1-IC1: [[LOOP12]] = distinct !{[[LOOP12]], [[META3]], [[META2]]}
254
+ ;.
255
+ ; CHECK-V1-IC1-FORCE-EPI4: [[PROF0]] = !{!"branch_weights", i32 1, i32 127}
256
+ ; CHECK-V1-IC1-FORCE-EPI4: [[LOOP1]] = distinct !{[[LOOP1]], [[META2:![0-9]+]], [[META3:![0-9]+]]}
257
+ ; CHECK-V1-IC1-FORCE-EPI4: [[META2]] = !{!"llvm.loop.isvectorized", i32 1}
258
+ ; CHECK-V1-IC1-FORCE-EPI4: [[META3]] = !{!"llvm.loop.unroll.runtime.disable"}
259
+ ; CHECK-V1-IC1-FORCE-EPI4: [[PROF4]] = !{!"branch_weights", i32 1, i32 7}
260
+ ; CHECK-V1-IC1-FORCE-EPI4: [[PROF5]] = !{!"branch_weights", i32 4, i32 4}
261
+ ; CHECK-V1-IC1-FORCE-EPI4: [[LOOP6]] = distinct !{[[LOOP6]], [[META2]], [[META3]]}
262
+ ; CHECK-V1-IC1-FORCE-EPI4: [[PROF7]] = !{!"branch_weights", i32 1, i32 3}
263
+ ; CHECK-V1-IC1-FORCE-EPI4: [[PROF8]] = !{!"branch_weights", i32 0, i32 0}
264
+ ; CHECK-V1-IC1-FORCE-EPI4: [[LOOP9]] = distinct !{[[LOOP9]], [[META3]], [[META2]]}
265
+ ; CHECK-V1-IC1-FORCE-EPI4: [[PROF10]] = !{!"branch_weights", i32 1, i32 31}
266
+ ; CHECK-V1-IC1-FORCE-EPI4: [[LOOP11]] = distinct !{[[LOOP11]], [[META2]], [[META3]]}
267
+ ; CHECK-V1-IC1-FORCE-EPI4: [[PROF12]] = !{!"branch_weights", i32 4, i32 28}
268
+ ; CHECK-V1-IC1-FORCE-EPI4: [[LOOP13]] = distinct !{[[LOOP13]], [[META2]], [[META3]]}
269
+ ; CHECK-V1-IC1-FORCE-EPI4: [[LOOP14]] = distinct !{[[LOOP14]], [[META3]], [[META2]]}
98
270
;.
99
271
; CHECK-V2-IC1: [[PROF0]] = !{!"branch_weights", i32 1, i32 127}
100
272
; CHECK-V2-IC1: [[PROF1]] = !{!"branch_weights", i32 1, i32 255}
@@ -104,6 +276,12 @@ for.cond.cleanup: ; preds = %for.body
104
276
; CHECK-V2-IC1: [[PROF5]] = !{!"branch_weights", i32 1, i32 3}
105
277
; CHECK-V2-IC1: [[PROF6]] = !{!"branch_weights", i32 0, i32 0}
106
278
; CHECK-V2-IC1: [[LOOP7]] = distinct !{[[LOOP7]], [[META4]], [[META3]]}
279
+ ; CHECK-V2-IC1: [[PROF8]] = !{!"branch_weights", i32 1, i32 63}
280
+ ; CHECK-V2-IC1: [[LOOP9]] = distinct !{[[LOOP9]], [[META3]], [[META4]]}
281
+ ; CHECK-V2-IC1: [[PROF10]] = !{!"branch_weights", i32 1, i32 15}
282
+ ; CHECK-V2-IC1: [[PROF11]] = !{!"branch_weights", i32 4, i32 12}
283
+ ; CHECK-V2-IC1: [[LOOP12]] = distinct !{[[LOOP12]], [[META3]], [[META4]]}
284
+ ; CHECK-V2-IC1: [[LOOP13]] = distinct !{[[LOOP13]], [[META4]], [[META3]]}
107
285
;.
108
286
; CHECK-V2-IC4: [[PROF0]] = !{!"branch_weights", i32 1, i32 127}
109
287
; CHECK-V2-IC4: [[PROF1]] = !{!"branch_weights", i32 1, i32 63}
@@ -116,4 +294,9 @@ for.cond.cleanup: ; preds = %for.body
116
294
; CHECK-V2-IC4: [[PROF8]] = !{!"branch_weights", i32 1, i32 3}
117
295
; CHECK-V2-IC4: [[PROF9]] = !{!"branch_weights", i32 0, i32 0}
118
296
; CHECK-V2-IC4: [[LOOP10]] = distinct !{[[LOOP10]], [[META4]], [[META3]]}
297
+ ; CHECK-V2-IC4: [[LOOP11]] = distinct !{[[LOOP11]], [[META3]], [[META4]]}
298
+ ; CHECK-V2-IC4: [[PROF12]] = !{!"branch_weights", i32 8, i32 56}
299
+ ; CHECK-V2-IC4: [[LOOP13]] = distinct !{[[LOOP13]], [[META3]], [[META4]]}
300
+ ; CHECK-V2-IC4: [[PROF14]] = !{!"branch_weights", i32 1, i32 7}
301
+ ; CHECK-V2-IC4: [[LOOP15]] = distinct !{[[LOOP15]], [[META4]], [[META3]]}
119
302
;.
0 commit comments