Skip to content

Commit cea799a

Browse files
committed
[LV] Add ordered reduction test with live-in.
Extra test for #124644.
1 parent dee2092 commit cea799a

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

llvm/test/Transforms/LoopVectorize/strict-fadd-interleave-only.ll

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,3 +217,94 @@ exit:
217217
%.lcssa = phi float [ %rdx.next, %loop ]
218218
ret float %.lcssa
219219
}
220+
221+
define float @fadd_reduction_with_live_in(float %inc) {
222+
; CHECK-LABEL: define float @fadd_reduction_with_live_in(
223+
; CHECK-SAME: float [[INC:%.*]]) {
224+
; CHECK-NEXT: entry:
225+
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
226+
; CHECK: vector.ph:
227+
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
228+
; CHECK: vector.body:
229+
; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
230+
; CHECK-NEXT: [[VEC_PHI:%.*]] = phi float [ 0.000000e+00, [[VECTOR_PH]] ], [ [[TMP5:%.*]], [[VECTOR_BODY]] ]
231+
; CHECK-NEXT: [[VEC_IV:%.*]] = add i32 [[INDEX]], 0
232+
; CHECK-NEXT: [[VEC_IV1:%.*]] = add i32 [[INDEX]], 1
233+
; CHECK-NEXT: [[TMP0:%.*]] = icmp ule i32 [[VEC_IV]], 1000
234+
; CHECK-NEXT: [[TMP1:%.*]] = icmp ule i32 [[VEC_IV1]], 1000
235+
; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[TMP0]], float [[INC]], float -0.000000e+00
236+
; CHECK-NEXT: [[TMP3:%.*]] = fadd float [[VEC_PHI]], [[TMP2]]
237+
; CHECK-NEXT: [[TMP4:%.*]] = select i1 [[TMP1]], float [[INC]], float -0.000000e+00
238+
; CHECK-NEXT: [[TMP5]] = fadd float [[TMP3]], [[TMP4]]
239+
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2
240+
; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1002
241+
; CHECK-NEXT: br i1 [[TMP6]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
242+
; CHECK: middle.block:
243+
; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[SCALAR_PH]]
244+
; CHECK: scalar.ph:
245+
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ 1002, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
246+
; CHECK-NEXT: [[BC_MERGE_RDX:%.*]] = phi float [ [[TMP5]], [[MIDDLE_BLOCK]] ], [ 0.000000e+00, [[ENTRY]] ]
247+
; CHECK-NEXT: br label [[LOOP:%.*]]
248+
; CHECK: loop:
249+
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
250+
; CHECK-NEXT: [[SUM:%.*]] = phi float [ [[BC_MERGE_RDX]], [[SCALAR_PH]] ], [ [[SUM_NEXT:%.*]], [[LOOP]] ]
251+
; CHECK-NEXT: [[SUM_NEXT]] = fadd float [[SUM]], [[INC]]
252+
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
253+
; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV]], 1000
254+
; CHECK-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP7:![0-9]+]]
255+
; CHECK: exit:
256+
; CHECK-NEXT: [[LCSSA:%.*]] = phi float [ [[SUM_NEXT]], [[LOOP]] ], [ [[TMP5]], [[MIDDLE_BLOCK]] ]
257+
; CHECK-NEXT: ret float [[LCSSA]]
258+
;
259+
; CHECK-ALM-LABEL: define float @fadd_reduction_with_live_in(
260+
; CHECK-ALM-SAME: float [[INC:%.*]]) {
261+
; CHECK-ALM-NEXT: entry:
262+
; CHECK-ALM-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
263+
; CHECK-ALM: vector.ph:
264+
; CHECK-ALM-NEXT: br label [[VECTOR_BODY:%.*]]
265+
; CHECK-ALM: vector.body:
266+
; CHECK-ALM-NEXT: [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
267+
; CHECK-ALM-NEXT: [[VEC_PHI:%.*]] = phi float [ 0.000000e+00, [[VECTOR_PH]] ], [ [[TMP5:%.*]], [[VECTOR_BODY]] ]
268+
; CHECK-ALM-NEXT: [[TMP0:%.*]] = add i32 [[INDEX]], 0
269+
; CHECK-ALM-NEXT: [[TMP1:%.*]] = add i32 [[INDEX]], 1
270+
; CHECK-ALM-NEXT: [[ACTIVE_LANE_MASK:%.*]] = icmp ult i32 [[TMP0]], 1001
271+
; CHECK-ALM-NEXT: [[ACTIVE_LANE_MASK1:%.*]] = icmp ult i32 [[TMP1]], 1001
272+
; CHECK-ALM-NEXT: [[TMP2:%.*]] = select i1 [[ACTIVE_LANE_MASK]], float [[INC]], float -0.000000e+00
273+
; CHECK-ALM-NEXT: [[TMP3:%.*]] = fadd float [[VEC_PHI]], [[TMP2]]
274+
; CHECK-ALM-NEXT: [[TMP4:%.*]] = select i1 [[ACTIVE_LANE_MASK1]], float [[INC]], float -0.000000e+00
275+
; CHECK-ALM-NEXT: [[TMP5]] = fadd float [[TMP3]], [[TMP4]]
276+
; CHECK-ALM-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2
277+
; CHECK-ALM-NEXT: [[TMP6:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1002
278+
; CHECK-ALM-NEXT: br i1 [[TMP6]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
279+
; CHECK-ALM: middle.block:
280+
; CHECK-ALM-NEXT: br i1 true, label [[EXIT:%.*]], label [[SCALAR_PH]]
281+
; CHECK-ALM: scalar.ph:
282+
; CHECK-ALM-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ 1002, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ]
283+
; CHECK-ALM-NEXT: [[BC_MERGE_RDX:%.*]] = phi float [ [[TMP5]], [[MIDDLE_BLOCK]] ], [ 0.000000e+00, [[ENTRY]] ]
284+
; CHECK-ALM-NEXT: br label [[LOOP:%.*]]
285+
; CHECK-ALM: loop:
286+
; CHECK-ALM-NEXT: [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
287+
; CHECK-ALM-NEXT: [[SUM:%.*]] = phi float [ [[BC_MERGE_RDX]], [[SCALAR_PH]] ], [ [[SUM_NEXT:%.*]], [[LOOP]] ]
288+
; CHECK-ALM-NEXT: [[SUM_NEXT]] = fadd float [[SUM]], [[INC]]
289+
; CHECK-ALM-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
290+
; CHECK-ALM-NEXT: [[EC:%.*]] = icmp eq i32 [[IV]], 1000
291+
; CHECK-ALM-NEXT: br i1 [[EC]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP7:![0-9]+]]
292+
; CHECK-ALM: exit:
293+
; CHECK-ALM-NEXT: [[LCSSA:%.*]] = phi float [ [[SUM_NEXT]], [[LOOP]] ], [ [[TMP5]], [[MIDDLE_BLOCK]] ]
294+
; CHECK-ALM-NEXT: ret float [[LCSSA]]
295+
;
296+
entry:
297+
br label %loop
298+
299+
loop:
300+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
301+
%sum = phi float [ 0.000000e+00, %entry ], [ %sum.next, %loop ]
302+
%sum.next = fadd float %sum, %inc
303+
%iv.next = add i32 %iv, 1
304+
%ec = icmp eq i32 %iv, 1000
305+
br i1 %ec, label %exit, label %loop
306+
307+
exit:
308+
%lcssa = phi float [ %sum.next, %loop ]
309+
ret float %lcssa
310+
}

0 commit comments

Comments
 (0)