Skip to content

Commit cef5a31

Browse files
committed
[PhaseOrdering] Add test for #139050 (NFC)
1 parent 8395912 commit cef5a31

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

llvm/test/Transforms/PhaseOrdering/X86/vector-reductions.ll

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,3 +325,53 @@ cleanup:
325325
%retval.0 = phi i1 [ false, %if.then ], [ true, %if.end ]
326326
ret i1 %retval.0
327327
}
328+
329+
; From https://github.com/llvm/llvm-project/issues/139050.
330+
; FIXME: This should be vectorized.
331+
define i8 @masked_min_reduction(ptr %data, ptr %mask) {
332+
; CHECK-LABEL: @masked_min_reduction(
333+
; CHECK-NEXT: entry:
334+
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
335+
; CHECK: loop:
336+
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
337+
; CHECK-NEXT: [[ACC:%.*]] = phi i8 [ -1, [[ENTRY]] ], [ [[TMP21:%.*]], [[VECTOR_BODY]] ]
338+
; CHECK-NEXT: [[DATA:%.*]] = getelementptr i8, ptr [[DATA1:%.*]], i64 [[INDEX]]
339+
; CHECK-NEXT: [[VAL:%.*]] = load i8, ptr [[DATA]], align 1
340+
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr i8, ptr [[MASK:%.*]], i64 [[INDEX]]
341+
; CHECK-NEXT: [[M:%.*]] = load i8, ptr [[TMP7]], align 1
342+
; CHECK-NEXT: [[COND:%.*]] = icmp eq i8 [[M]], 0
343+
; CHECK-NEXT: [[TMP0:%.*]] = tail call i8 @llvm.umin.i8(i8 [[ACC]], i8 [[VAL]])
344+
; CHECK-NEXT: [[TMP21]] = select i1 [[COND]], i8 [[TMP0]], i8 [[ACC]]
345+
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw nsw i64 [[INDEX]], 1
346+
; CHECK-NEXT: [[TMP20:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
347+
; CHECK-NEXT: br i1 [[TMP20]], label [[EXIT:%.*]], label [[VECTOR_BODY]]
348+
; CHECK: exit:
349+
; CHECK-NEXT: ret i8 [[TMP21]]
350+
;
351+
entry:
352+
br label %loop
353+
354+
loop:
355+
%i = phi i64 [ 0, %entry ], [ %next, %loop ]
356+
%acc = phi i8 [ 255, %entry ], [ %acc_next, %loop ]
357+
358+
%ptr_i = getelementptr i8, ptr %data, i64 %i
359+
%val = load i8, ptr %ptr_i, align 1
360+
361+
%mask_ptr = getelementptr i8, ptr %mask, i64 %i
362+
%m = load i8, ptr %mask_ptr, align 1
363+
%cond = icmp eq i8 %m, 0
364+
365+
; Use select to implement masking
366+
%masked_val = select i1 %cond, i8 %val, i8 255
367+
368+
; min reduction
369+
%acc_next = call i8 @llvm.umin.i8(i8 %acc, i8 %masked_val)
370+
371+
%next = add i64 %i, 1
372+
%cmp = icmp ult i64 %next, 1024
373+
br i1 %cmp, label %loop, label %exit
374+
375+
exit:
376+
ret i8 %acc_next
377+
}

0 commit comments

Comments
 (0)