@@ -43,7 +43,7 @@ define void @cost_store_i8(ptr %dst) #0 {
43
43
; DEFAULT-NEXT: [[TMP12:%.*]] = call i64 @llvm.vscale.i64()
44
44
; DEFAULT-NEXT: [[TMP13:%.*]] = shl nuw i64 [[TMP12]], 3
45
45
; DEFAULT-NEXT: [[MIN_EPILOG_ITERS_CHECK:%.*]] = icmp ult i64 [[N_VEC_REMAINING]], [[TMP13]]
46
- ; DEFAULT-NEXT: br i1 [[MIN_EPILOG_ITERS_CHECK]], label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]]
46
+ ; DEFAULT-NEXT: br i1 [[MIN_EPILOG_ITERS_CHECK]], label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]], !prof [[PROF3:![0-9]+]]
47
47
; DEFAULT: vec.epilog.ph:
48
48
; DEFAULT-NEXT: [[VEC_EPILOG_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[VECTOR_MAIN_LOOP_ITER_CHECK]] ]
49
49
; DEFAULT-NEXT: [[TMP14:%.*]] = call i64 @llvm.vscale.i64()
@@ -57,7 +57,7 @@ define void @cost_store_i8(ptr %dst) #0 {
57
57
; DEFAULT-NEXT: store <vscale x 8 x i8> zeroinitializer, ptr [[TMP19]], align 1
58
58
; DEFAULT-NEXT: [[INDEX_NEXT6]] = add nuw i64 [[INDEX5]], [[TMP15]]
59
59
; DEFAULT-NEXT: [[TMP21:%.*]] = icmp eq i64 [[INDEX_NEXT6]], [[N_VEC3]]
60
- ; DEFAULT-NEXT: br i1 [[TMP21]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP3 :![0-9]+]]
60
+ ; DEFAULT-NEXT: br i1 [[TMP21]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
61
61
; DEFAULT: vec.epilog.middle.block:
62
62
; DEFAULT-NEXT: [[CMP_N4:%.*]] = icmp eq i64 101, [[N_VEC3]]
63
63
; DEFAULT-NEXT: br i1 [[CMP_N4]], label [[EXIT]], label [[VEC_EPILOG_SCALAR_PH]]
@@ -70,7 +70,7 @@ define void @cost_store_i8(ptr %dst) #0 {
70
70
; DEFAULT-NEXT: store i8 0, ptr [[GEP]], align 1
71
71
; DEFAULT-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
72
72
; DEFAULT-NEXT: [[EC:%.*]] = icmp eq i64 [[IV]], 100
73
- ; DEFAULT-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP4 :![0-9]+]]
73
+ ; DEFAULT-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP5 :![0-9]+]]
74
74
; DEFAULT: exit:
75
75
; DEFAULT-NEXT: ret void
76
76
;
@@ -148,22 +148,22 @@ define void @trunc_store(ptr %dst, ptr %src, i16 %x) #1 {
148
148
; DEFAULT-NEXT: br label [[VECTOR_BODY:%.*]]
149
149
; DEFAULT: vector.body:
150
150
; DEFAULT-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
151
- ; DEFAULT-NEXT: [[TMP4:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META5 :![0-9]+]]
151
+ ; DEFAULT-NEXT: [[TMP4:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META6 :![0-9]+]]
152
152
; DEFAULT-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <16 x i64> poison, i64 [[TMP4]], i64 0
153
153
; DEFAULT-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <16 x i64> [[BROADCAST_SPLATINSERT1]], <16 x i64> poison, <16 x i32> zeroinitializer
154
154
; DEFAULT-NEXT: [[TMP5:%.*]] = trunc <16 x i64> [[BROADCAST_SPLAT2]] to <16 x i8>
155
155
; DEFAULT-NEXT: [[TMP9:%.*]] = and <16 x i8> [[TMP5]], [[TMP7]]
156
156
; DEFAULT-NEXT: [[TMP10:%.*]] = getelementptr i8, ptr [[DST]], i64 [[INDEX]]
157
157
; DEFAULT-NEXT: [[TMP13:%.*]] = getelementptr i8, ptr [[TMP10]], i32 16
158
- ; DEFAULT-NEXT: store <16 x i8> [[TMP9]], ptr [[TMP10]], align 1, !alias.scope [[META8 :![0-9]+]], !noalias [[META5 ]]
159
- ; DEFAULT-NEXT: store <16 x i8> [[TMP9]], ptr [[TMP13]], align 1, !alias.scope [[META8 ]], !noalias [[META5 ]]
158
+ ; DEFAULT-NEXT: store <16 x i8> [[TMP9]], ptr [[TMP10]], align 1, !alias.scope [[META9 :![0-9]+]], !noalias [[META6 ]]
159
+ ; DEFAULT-NEXT: store <16 x i8> [[TMP9]], ptr [[TMP13]], align 1, !alias.scope [[META9 ]], !noalias [[META6 ]]
160
160
; DEFAULT-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 32
161
161
; DEFAULT-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 992
162
- ; DEFAULT-NEXT: br i1 [[TMP11]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10 :![0-9]+]]
162
+ ; DEFAULT-NEXT: br i1 [[TMP11]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP11 :![0-9]+]]
163
163
; DEFAULT: middle.block:
164
164
; DEFAULT-NEXT: br i1 false, label [[EXIT:%.*]], label [[VEC_EPILOG_ITER_CHECK:%.*]]
165
165
; DEFAULT: vec.epilog.iter.check:
166
- ; DEFAULT-NEXT: br i1 false, label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]]
166
+ ; DEFAULT-NEXT: br i1 false, label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]], !prof [[PROF3]]
167
167
; DEFAULT: vec.epilog.ph:
168
168
; DEFAULT-NEXT: [[VEC_EPILOG_RESUME_VAL:%.*]] = phi i64 [ 992, [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[VECTOR_MAIN_LOOP_ITER_CHECK]] ]
169
169
; DEFAULT-NEXT: [[BROADCAST_SPLATINSERT4:%.*]] = insertelement <8 x i16> poison, i16 [[X]], i64 0
@@ -172,16 +172,16 @@ define void @trunc_store(ptr %dst, ptr %src, i16 %x) #1 {
172
172
; DEFAULT-NEXT: br label [[VEC_EPILOG_VECTOR_BODY:%.*]]
173
173
; DEFAULT: vec.epilog.vector.body:
174
174
; DEFAULT-NEXT: [[INDEX5:%.*]] = phi i64 [ [[VEC_EPILOG_RESUME_VAL]], [[VEC_EPILOG_PH]] ], [ [[INDEX_NEXT8:%.*]], [[VEC_EPILOG_VECTOR_BODY]] ]
175
- ; DEFAULT-NEXT: [[TMP16:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META5 ]]
175
+ ; DEFAULT-NEXT: [[TMP16:%.*]] = load i64, ptr [[SRC]], align 8, !alias.scope [[META6 ]]
176
176
; DEFAULT-NEXT: [[BROADCAST_SPLATINSERT7:%.*]] = insertelement <8 x i64> poison, i64 [[TMP16]], i64 0
177
177
; DEFAULT-NEXT: [[BROADCAST_SPLAT8:%.*]] = shufflevector <8 x i64> [[BROADCAST_SPLATINSERT7]], <8 x i64> poison, <8 x i32> zeroinitializer
178
178
; DEFAULT-NEXT: [[TMP18:%.*]] = trunc <8 x i64> [[BROADCAST_SPLAT8]] to <8 x i8>
179
179
; DEFAULT-NEXT: [[TMP14:%.*]] = and <8 x i8> [[TMP18]], [[TMP15]]
180
180
; DEFAULT-NEXT: [[TMP26:%.*]] = getelementptr i8, ptr [[DST]], i64 [[INDEX5]]
181
- ; DEFAULT-NEXT: store <8 x i8> [[TMP14]], ptr [[TMP26]], align 1, !alias.scope [[META8 ]], !noalias [[META5 ]]
181
+ ; DEFAULT-NEXT: store <8 x i8> [[TMP14]], ptr [[TMP26]], align 1, !alias.scope [[META9 ]], !noalias [[META6 ]]
182
182
; DEFAULT-NEXT: [[INDEX_NEXT8]] = add nuw i64 [[INDEX5]], 8
183
183
; DEFAULT-NEXT: [[TMP17:%.*]] = icmp eq i64 [[INDEX_NEXT8]], 1000
184
- ; DEFAULT-NEXT: br i1 [[TMP17]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP11 :![0-9]+]]
184
+ ; DEFAULT-NEXT: br i1 [[TMP17]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], !llvm.loop [[LOOP12 :![0-9]+]]
185
185
; DEFAULT: vec.epilog.middle.block:
186
186
; DEFAULT-NEXT: br i1 true, label [[EXIT]], label [[VEC_EPILOG_SCALAR_PH]]
187
187
; DEFAULT: vec.epilog.scalar.ph:
@@ -197,7 +197,7 @@ define void @trunc_store(ptr %dst, ptr %src, i16 %x) #1 {
197
197
; DEFAULT-NEXT: store i8 [[TRUNC]], ptr [[GEP]], align 1
198
198
; DEFAULT-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
199
199
; DEFAULT-NEXT: [[EC:%.*]] = icmp eq i64 [[IV_NEXT]], 1000
200
- ; DEFAULT-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP12 :![0-9]+]]
200
+ ; DEFAULT-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP13 :![0-9]+]]
201
201
; DEFAULT: exit:
202
202
; DEFAULT-NEXT: ret void
203
203
;
@@ -281,16 +281,17 @@ attributes #1 = { vscale_range(1,16) "target-features"="+sve" }
281
281
; DEFAULT: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
282
282
; DEFAULT: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}
283
283
; DEFAULT: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
284
- ; DEFAULT: [[LOOP3 ]] = distinct !{[[LOOP3]], [[META1]], [[META2]] }
285
- ; DEFAULT: [[LOOP4]] = distinct !{[[LOOP4]], [[META2 ]], [[META1 ]]}
286
- ; DEFAULT: [[META5 ]] = !{[[META6:![0-9]+ ]]}
287
- ; DEFAULT: [[META6]] = distinct !{[[META6]], [[META7:![0-9]+]]}
288
- ; DEFAULT: [[META7]] = distinct !{[[META7]], !"LVerDomain" }
289
- ; DEFAULT: [[META8]] = !{[[META9:![0-9]+]] }
290
- ; DEFAULT: [[META9]] = distinct !{[[META9]], [[META7 ]]}
291
- ; DEFAULT: [[LOOP10 ]] = distinct !{[[LOOP10 ]], [[META1]], [[META2 ]]}
284
+ ; DEFAULT: [[PROF3 ]] = !{!"branch_weights", i32 8, i32 24 }
285
+ ; DEFAULT: [[LOOP4]] = distinct !{[[LOOP4]], [[META1 ]], [[META2 ]]}
286
+ ; DEFAULT: [[LOOP5 ]] = distinct !{[[LOOP5]], [[META2]], [[META1 ]]}
287
+ ; DEFAULT: [[META6]] = !{ [[META7:![0-9]+]]}
288
+ ; DEFAULT: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]] }
289
+ ; DEFAULT: [[META8]] = distinct !{[[META8]], !"LVerDomain" }
290
+ ; DEFAULT: [[META9]] = !{[[META10:![0-9]+ ]]}
291
+ ; DEFAULT: [[META10 ]] = distinct !{[[META10 ]], [[META8 ]]}
292
292
; DEFAULT: [[LOOP11]] = distinct !{[[LOOP11]], [[META1]], [[META2]]}
293
- ; DEFAULT: [[LOOP12]] = distinct !{[[LOOP12]], [[META1]]}
293
+ ; DEFAULT: [[LOOP12]] = distinct !{[[LOOP12]], [[META1]], [[META2]]}
294
+ ; DEFAULT: [[LOOP13]] = distinct !{[[LOOP13]], [[META1]]}
294
295
;.
295
296
; PRED: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
296
297
; PRED: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}
0 commit comments