@@ -142,11 +142,11 @@ define void @vector_reverse_i64(ptr nocapture noundef writeonly %A, ptr nocaptur
142
142
; CHECK-NEXT: LV: Interleaving is not beneficial.
143
143
; CHECK-NEXT: LV: Found a vectorizable loop (vscale x 4) in <stdin>
144
144
; CHECK-NEXT: LEV: Epilogue vectorization is not profitable for this loop
145
- ; CHECK-NEXT: Executing best plan with VF=vscale x 4, UF=1
145
+ ; CHECK: Executing best plan with VF=vscale x 4, UF=1
146
146
; CHECK-NEXT: VPlan 'Final VPlan for VF={vscale x 4},UF={1}' {
147
- ; CHECK-NEXT: Live-in vp <[[VF:%.+]]> = VF
148
- ; CHECK-NEXT: Live-in vp <[[VFxUF:%.+]]> = VF * UF
149
- ; CHECK-NEXT: Live-in vp <[[VEC_TC:%.+]]> = vector-trip-count
147
+ ; CHECK-NEXT: Live-in ir <[[VF:%.+]]> = VF
148
+ ; CHECK-NEXT: Live-in ir <[[VFxUF:%.+]]>.1 = VF * UF
149
+ ; CHECK-NEXT: Live-in ir <[[VEC_TC:%.+]]> = vector-trip-count
150
150
; CHECK-NEXT: vp<[[TC:%.+]]> = original trip-count
151
151
; CHECK-EMPTY:
152
152
; CHECK-NEXT: ir-bb<for.body.preheader>:
@@ -159,35 +159,37 @@ define void @vector_reverse_i64(ptr nocapture noundef writeonly %A, ptr nocaptur
159
159
; CHECK-EMPTY:
160
160
; CHECK-NEXT: <x1> vector loop: {
161
161
; CHECK-NEXT: vector.body:
162
- ; CHECK-NEXT: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION
162
+ ; CHECK-NEXT: SCALAR-PHI vp<[[CAN_IV:%.+]]> = phi ir<0>, vp<[[CAN_IV_NEXT:%.+]]>
163
163
; CHECK-NEXT: vp<[[DEV_IV:%.+]]> = DERIVED-IV ir<%n> + vp<[[CAN_IV]]> * ir<-1>
164
164
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[DEV_IV]]>, ir<-1>
165
165
; CHECK-NEXT: CLONE ir<%i.0> = add nsw vp<[[STEPS]]>, ir<-1>
166
166
; CHECK-NEXT: CLONE ir<%idxprom> = zext ir<%i.0>
167
167
; CHECK-NEXT: CLONE ir<%arrayidx> = getelementptr inbounds ir<%B>, ir<%idxprom>
168
- ; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx>, vp <[[VF]]>
169
- ; CHECK-NEXT: WIDEN ir<%13 > = load vp<[[VEC_PTR]]>
170
- ; CHECK-NEXT: WIDEN ir<%add9> = add ir<%13 >, ir<1>
168
+ ; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx>, ir <[[VF]]>
169
+ ; CHECK-NEXT: WIDEN ir<[[L:%.+]] > = load vp<[[VEC_PTR]]>
170
+ ; CHECK-NEXT: WIDEN ir<%add9> = add ir<[[L]] >, ir<1>
171
171
; CHECK-NEXT: CLONE ir<%arrayidx3> = getelementptr inbounds ir<%A>, ir<%idxprom>
172
- ; CHECK-NEXT: vp<[[VEC_PTR2:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx3>, vp <[[VF]]>
172
+ ; CHECK-NEXT: vp<[[VEC_PTR2:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx3>, ir <[[VF]]>
173
173
; CHECK-NEXT: WIDEN store vp<[[VEC_PTR2]]>, ir<%add9>
174
- ; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+ ]]> = add nuw vp<[[CAN_IV]]>, vp <[[VFxUF]]>
175
- ; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp <[[VEC_TC]]>
174
+ ; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT]]> = add nuw vp<[[CAN_IV]]>, ir <[[VFxUF]]>.1
175
+ ; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, ir <[[VEC_TC]]>
176
176
; CHECK-NEXT: No successors
177
177
; CHECK-NEXT: }
178
- ; CHECK-NEXT: Successor(s): middle.block
178
+ ; CHECK-NEXT: Successor(s): ir-bb< middle.block>
179
179
; CHECK-EMPTY:
180
- ; CHECK-NEXT: middle.block:
181
- ; CHECK-NEXT: EMIT vp<[[CMP:%.+]]> = icmp eq vp<[[TC]]>, vp <[[VEC_TC]]>
180
+ ; CHECK-NEXT: ir-bb< middle.block> :
181
+ ; CHECK-NEXT: EMIT vp<[[CMP:%.+]]> = icmp eq vp<[[TC]]>, ir <[[VEC_TC]]>
182
182
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
183
- ; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup.loopexit>, scalar.ph
183
+ ; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup.loopexit>, ir-bb< scalar.ph>
184
184
; CHECK-EMPTY:
185
- ; CHECK-NEXT: scalar.ph:
185
+ ; CHECK-NEXT: ir-bb<scalar.ph>:
186
+ ; CHECK-NEXT: EMIT vp<[[RESUME1:%.+]]> = resume-phi ir<%ind.end>, ir<%0>
187
+ ; CHECK-NEXT: EMIT vp<[[RESUME2:%.+]]>.1 = resume-phi ir<%ind.end3>, ir<%n>
186
188
; CHECK-NEXT: Successor(s): ir-bb<for.body>
187
189
; CHECK-EMPTY:
188
190
; CHECK-NEXT: ir-bb<for.body>:
189
- ; CHECK-NEXT: IR %indvars.iv = phi i64 [ %0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
190
- ; CHECK-NEXT: IR %i.0.in8 = phi i32 [ %n, %for.body.preheader ], [ %i.0, %for.body ]
191
+ ; CHECK-NEXT: IR %indvars.iv = phi i64 [ %0, %scalar.ph ], [ %indvars.iv.next, %for.body ] (extra operand: vp<[[RESUME1]]> from ir-bb<scalar.ph>
192
+ ; CHECK-NEXT: IR %i.0.in8 = phi i32 [ %n, %scalar.ph ], [ %i.0, %for.body ] (extra operand: vp<[[RESUME2]]>.1 from ir-bb<scalar.ph>
191
193
; CHECK: IR %indvars.iv.next = add nsw i64 %indvars.iv, -1
192
194
; CHECK-NEXT: No successors
193
195
; CHECK-EMPTY:
@@ -356,11 +358,11 @@ define void @vector_reverse_f32(ptr nocapture noundef writeonly %A, ptr nocaptur
356
358
; CHECK-NEXT: LV: Interleaving is not beneficial.
357
359
; CHECK-NEXT: LV: Found a vectorizable loop (vscale x 4) in <stdin>
358
360
; CHECK-NEXT: LEV: Epilogue vectorization is not profitable for this loop
359
- ; CHECK-NEXT: Executing best plan with VF=vscale x 4, UF=1
361
+ ; CHECK: Executing best plan with VF=vscale x 4, UF=1
360
362
; CHECK-NEXT: VPlan 'Final VPlan for VF={vscale x 4},UF={1}' {
361
- ; CHECK-NEXT: Live-in vp <[[VF:%.+]]> = VF
362
- ; CHECK-NEXT: Live-in vp <[[VFxUF:%.+]]> = VF * UF
363
- ; CHECK-NEXT: Live-in vp <[[VEC_TC:%.+]]> = vector-trip-count
363
+ ; CHECK-NEXT: Live-in ir <[[VF:%.+]]> = VF
364
+ ; CHECK-NEXT: Live-in ir <[[VFxUF:%.+]]>.1 = VF * UF
365
+ ; CHECK-NEXT: Live-in ir <[[VEC_TC:%.+]]> = vector-trip-count
364
366
; CHECK-NEXT: vp<[[TC:%.+]]> = original trip-count
365
367
; CHECK-EMPTY:
366
368
; CHECK-NEXT: ir-bb<for.body.preheader>:
@@ -373,35 +375,37 @@ define void @vector_reverse_f32(ptr nocapture noundef writeonly %A, ptr nocaptur
373
375
; CHECK-EMPTY:
374
376
; CHECK-NEXT: <x1> vector loop: {
375
377
; CHECK-NEXT: vector.body:
376
- ; CHECK-NEXT: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION
378
+ ; CHECK-NEXT: SCALAR-PHI vp<[[CAN_IV:%.+]]> = phi ir<0>, vp<[[CAN_IV_NEXT:%.+]]>
377
379
; CHECK-NEXT: vp<[[DEV_IV:%.+]]> = DERIVED-IV ir<%n> + vp<[[CAN_IV]]> * ir<-1>
378
380
; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[DEV_IV]]>, ir<-1>
379
381
; CHECK-NEXT: CLONE ir<%i.0> = add nsw vp<[[STEPS]]>, ir<-1>
380
382
; CHECK-NEXT: CLONE ir<%idxprom> = zext ir<%i.0>
381
383
; CHECK-NEXT: CLONE ir<%arrayidx> = getelementptr inbounds ir<%B>, ir<%idxprom>
382
- ; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx>, vp <[[VF]]>
383
- ; CHECK-NEXT: WIDEN ir<%13 > = load vp<[[VEC_PTR]]>
384
- ; CHECK-NEXT: WIDEN ir<%conv1> = fadd ir<%13 >, ir<1.000000e+00>
384
+ ; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx>, ir <[[VF]]>
385
+ ; CHECK-NEXT: WIDEN ir<[[L:%.+]] > = load vp<[[VEC_PTR]]>
386
+ ; CHECK-NEXT: WIDEN ir<%conv1> = fadd ir<[[L]] >, ir<1.000000e+00>
385
387
; CHECK-NEXT: CLONE ir<%arrayidx3> = getelementptr inbounds ir<%A>, ir<%idxprom>
386
- ; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx3>, vp <[[VF]]>
388
+ ; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = reverse-vector-pointer inbounds ir<%arrayidx3>, ir <[[VF]]>
387
389
; CHECK-NEXT: WIDEN store vp<[[VEC_PTR]]>, ir<%conv1>
388
- ; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+ ]]> = add nuw vp<[[CAN_IV]]>, vp <[[VFxUF]]>
389
- ; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp <[[VEC_TC]]>
390
+ ; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT]]> = add nuw vp<[[CAN_IV]]>, ir <[[VFxUF]]>.1
391
+ ; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, ir <[[VEC_TC]]>
390
392
; CHECK-NEXT: No successors
391
393
; CHECK-NEXT: }
392
- ; CHECK-NEXT: Successor(s): middle.block
394
+ ; CHECK-NEXT: Successor(s): ir-bb< middle.block>
393
395
; CHECK-EMPTY:
394
- ; CHECK-NEXT: middle.block:
395
- ; CHECK-NEXT: EMIT vp<[[CMP:%.+]]> = icmp eq vp<[[TC]]>, vp <[[VEC_TC]]>
396
+ ; CHECK-NEXT: ir-bb< middle.block> :
397
+ ; CHECK-NEXT: EMIT vp<[[CMP:%.+]]> = icmp eq vp<[[TC]]>, ir <[[VEC_TC]]>
396
398
; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
397
- ; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup.loopexit>, scalar.ph
399
+ ; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup.loopexit>, ir-bb< scalar.ph>
398
400
; CHECK-EMPTY:
399
- ; CHECK-NEXT: scalar.ph:
401
+ ; CHECK-NEXT: ir-bb<scalar.ph>:
402
+ ; CHECK-NEXT: EMIT vp<[[RESUME1:%.+]]> = resume-phi ir<%ind.end>, ir<%0>
403
+ ; CHECK-NEXT: EMIT vp<[[RESUME2:%.+]]>.1 = resume-phi ir<%ind.end3>, ir<%n>
400
404
; CHECK-NEXT: Successor(s): ir-bb<for.body>
401
405
; CHECK-EMPTY:
402
406
; CHECK-NEXT: ir-bb<for.body>:
403
- ; CHECK-NEXT: IR %indvars.iv = phi i64 [ %0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
404
- ; CHECK-NEXT: IR %i.0.in8 = phi i32 [ %n, %for.body.preheader ], [ %i.0, %for.body ]
407
+ ; CHECK-NEXT: IR %indvars.iv = phi i64 [ %0, %scalar.ph ], [ %indvars.iv.next, %for.body ] (extra operand: vp<[[RESUME1]]> from ir-bb<scalar.ph>
408
+ ; CHECK-NEXT: IR %i.0.in8 = phi i32 [ %n, %scalar.ph ], [ %i.0, %for.body ] (extra operand: vp<[[RESUME2]]>.1 from ir-bb<scalar.ph>
405
409
; CHECK: IR %indvars.iv.next = add nsw i64 %indvars.iv, -1
406
410
; CHECK-NEXT: No successors
407
411
; CHECK-EMPTY:
0 commit comments