Skip to content

Commit c1645ad

Browse files
committed
[InstCombine] Add pre-commit tests. NFC.
1 parent 7612dcc commit c1645ad

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

llvm/test/Transforms/InstCombine/select-min-max.ll

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,3 +301,70 @@ define i8 @not_smin_swap(i8 %i41, i8 %i43) {
301301
%spec.select = select i1 %i44, i8 %i46, i8 0
302302
ret i8 %spec.select
303303
}
304+
305+
define i8 @sel_umin_constant(i8 %x) {
306+
; CHECK-LABEL: @sel_umin_constant(
307+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], -1
308+
; CHECK-NEXT: [[UMIN:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 16)
309+
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i8 [[UMIN]], i8 16
310+
; CHECK-NEXT: ret i8 [[SEL]]
311+
;
312+
%cmp = icmp sgt i8 %x, -1
313+
%umin = call i8 @llvm.umin.i8(i8 %x, i8 16)
314+
%sel = select i1 %cmp, i8 %umin, i8 16
315+
ret i8 %sel
316+
}
317+
318+
define i8 @sel_constant_smax_with_range_attr(i8 %x) {
319+
; CHECK-LABEL: @sel_constant_smax_with_range_attr(
320+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 0
321+
; CHECK-NEXT: [[SMAX:%.*]] = call range(i8 8, 16) i8 @llvm.smax.i8(i8 [[X]], i8 16)
322+
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i8 16, i8 [[SMAX]]
323+
; CHECK-NEXT: ret i8 [[SEL]]
324+
;
325+
%cmp = icmp slt i8 %x, 0
326+
%smax = call range(i8 8, 16) i8 @llvm.smax.i8(i8 %x, i8 16)
327+
%sel = select i1 %cmp, i8 16, i8 %smax
328+
ret i8 %sel
329+
}
330+
331+
; Negative tests
332+
333+
define i8 @sel_umin_constant_mismatch(i8 %x) {
334+
; CHECK-LABEL: @sel_umin_constant_mismatch(
335+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], -1
336+
; CHECK-NEXT: [[UMIN:%.*]] = call i8 @llvm.umin.i8(i8 [[X]], i8 16)
337+
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i8 [[UMIN]], i8 15
338+
; CHECK-NEXT: ret i8 [[SEL]]
339+
;
340+
%cmp = icmp sgt i8 %x, -1
341+
%umin = call i8 @llvm.umin.i8(i8 %x, i8 16)
342+
%sel = select i1 %cmp, i8 %umin, i8 15
343+
ret i8 %sel
344+
}
345+
346+
define i8 @sel_umin_constant_op_mismatch(i8 %x, i8 %y) {
347+
; CHECK-LABEL: @sel_umin_constant_op_mismatch(
348+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], -1
349+
; CHECK-NEXT: [[UMIN:%.*]] = call i8 @llvm.umin.i8(i8 [[Y:%.*]], i8 16)
350+
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP]], i8 [[UMIN]], i8 16
351+
; CHECK-NEXT: ret i8 [[SEL]]
352+
;
353+
%cmp = icmp sgt i8 %x, -1
354+
%umin = call i8 @llvm.umin.i8(i8 %y, i8 16)
355+
%sel = select i1 %cmp, i8 %umin, i8 16
356+
ret i8 %sel
357+
}
358+
359+
define i8 @sel_umin_non_constant(i8 %x, i8 %y) {
360+
; CHECK-LABEL: @sel_umin_non_constant(
361+
; CHECK-NEXT: [[UMIN:%.*]] = call i8 @llvm.umin.i8(i8 [[X:%.*]], i8 16)
362+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[X]], 0
363+
; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1]], i8 [[Y:%.*]], i8 [[UMIN]]
364+
; CHECK-NEXT: ret i8 [[SEL]]
365+
;
366+
%cmp = icmp sgt i8 %x, -1
367+
%umin = call i8 @llvm.umin.i8(i8 %x, i8 16)
368+
%sel = select i1 %cmp, i8 %umin, i8 %y
369+
ret i8 %sel
370+
}

0 commit comments

Comments
 (0)