xref: /llvm-project/llvm/test/Transforms/InstCombine/fold-minmax-i1.ll (revision 1a65cd3fcf5828ecd36fd336de7689ff7a0218a4)
1149a6985SQi Hu; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2149a6985SQi Hu; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3149a6985SQi Hu
4149a6985SQi Hu;------------------------------------------------------------------------------;
5149a6985SQi Hu; Scalar tests
6149a6985SQi Hu;------------------------------------------------------------------------------;
7149a6985SQi Hu
8149a6985SQi Hudefine i1 @umin_scalar(i1 %0, i1 %1) {
9149a6985SQi Hu; CHECK-LABEL: define i1 @umin_scalar
10149a6985SQi Hu; CHECK-SAME: (i1 [[TMP0:%.*]], i1 [[TMP1:%.*]]) {
11*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = and i1 [[TMP0]], [[TMP1]]
12149a6985SQi Hu; CHECK-NEXT:    ret i1 [[TMP3]]
13149a6985SQi Hu;
14149a6985SQi Hu  %3 = call i1 @llvm.umin.i1(i1 %0, i1 %1)
15149a6985SQi Hu  ret i1 %3
16149a6985SQi Hu}
17149a6985SQi Hu
18149a6985SQi Hudefine i1 @smin_scalar(i1 %0, i1 %1) {
19149a6985SQi Hu; CHECK-LABEL: define i1 @smin_scalar
20149a6985SQi Hu; CHECK-SAME: (i1 [[TMP0:%.*]], i1 [[TMP1:%.*]]) {
21*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = or i1 [[TMP0]], [[TMP1]]
22149a6985SQi Hu; CHECK-NEXT:    ret i1 [[TMP3]]
23149a6985SQi Hu;
24149a6985SQi Hu  %3 = call i1 @llvm.smin.i1(i1 %0, i1 %1)
25149a6985SQi Hu  ret i1 %3
26149a6985SQi Hu}
27149a6985SQi Hu
28149a6985SQi Hudefine i1 @umax_scalar(i1 %0, i1 %1) {
29149a6985SQi Hu; CHECK-LABEL: define i1 @umax_scalar
30149a6985SQi Hu; CHECK-SAME: (i1 [[TMP0:%.*]], i1 [[TMP1:%.*]]) {
31*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = or i1 [[TMP0]], [[TMP1]]
32149a6985SQi Hu; CHECK-NEXT:    ret i1 [[TMP3]]
33149a6985SQi Hu;
34149a6985SQi Hu  %3 = call i1 @llvm.umax.i1(i1 %0, i1 %1)
35149a6985SQi Hu  ret i1 %3
36149a6985SQi Hu}
37149a6985SQi Hu
38149a6985SQi Hudefine i1 @smax_scalar(i1 %0, i1 %1) {
39149a6985SQi Hu; CHECK-LABEL: define i1 @smax_scalar
40149a6985SQi Hu; CHECK-SAME: (i1 [[TMP0:%.*]], i1 [[TMP1:%.*]]) {
41*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = and i1 [[TMP0]], [[TMP1]]
42149a6985SQi Hu; CHECK-NEXT:    ret i1 [[TMP3]]
43149a6985SQi Hu;
44149a6985SQi Hu  %3 = call i1 @llvm.smax.i1(i1 %0, i1 %1)
45149a6985SQi Hu  ret i1 %3
46149a6985SQi Hu}
47149a6985SQi Hu
48149a6985SQi Hu;------------------------------------------------------------------------------;
49149a6985SQi Hu; Vector tests
50149a6985SQi Hu;------------------------------------------------------------------------------;
51149a6985SQi Hu
52149a6985SQi Hudefine <4 x i1> @umin_vector(<4 x i1> %0, <4 x i1> %1) {
53149a6985SQi Hu; CHECK-LABEL: define <4 x i1> @umin_vector
54149a6985SQi Hu; CHECK-SAME: (<4 x i1> [[TMP0:%.*]], <4 x i1> [[TMP1:%.*]]) {
55*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = and <4 x i1> [[TMP0]], [[TMP1]]
56149a6985SQi Hu; CHECK-NEXT:    ret <4 x i1> [[TMP3]]
57149a6985SQi Hu;
58149a6985SQi Hu  %3 = call <4 x i1> @llvm.umin.v4i1(<4 x i1> %0, <4 x i1> %1)
59149a6985SQi Hu  ret <4 x i1> %3
60149a6985SQi Hu}
61149a6985SQi Hu
62149a6985SQi Hudefine <4 x i1> @smin_vector(<4 x i1> %0, <4 x i1> %1) {
63149a6985SQi Hu; CHECK-LABEL: define <4 x i1> @smin_vector
64149a6985SQi Hu; CHECK-SAME: (<4 x i1> [[TMP0:%.*]], <4 x i1> [[TMP1:%.*]]) {
65*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = or <4 x i1> [[TMP0]], [[TMP1]]
66149a6985SQi Hu; CHECK-NEXT:    ret <4 x i1> [[TMP3]]
67149a6985SQi Hu;
68149a6985SQi Hu  %3 = call <4 x i1> @llvm.smin.v4i1(<4 x i1> %0, <4 x i1> %1)
69149a6985SQi Hu  ret <4 x i1> %3
70149a6985SQi Hu}
71149a6985SQi Hu
72149a6985SQi Hudefine <4 x i1> @umax_vector(<4 x i1> %0, <4 x i1> %1) {
73149a6985SQi Hu; CHECK-LABEL: define <4 x i1> @umax_vector
74149a6985SQi Hu; CHECK-SAME: (<4 x i1> [[TMP0:%.*]], <4 x i1> [[TMP1:%.*]]) {
75*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = or <4 x i1> [[TMP0]], [[TMP1]]
76149a6985SQi Hu; CHECK-NEXT:    ret <4 x i1> [[TMP3]]
77149a6985SQi Hu;
78149a6985SQi Hu  %3 = call <4 x i1> @llvm.umax.v4i1(<4 x i1> %0, <4 x i1> %1)
79149a6985SQi Hu  ret <4 x i1> %3
80149a6985SQi Hu}
81149a6985SQi Hu
82149a6985SQi Hudefine <4 x i1> @smax_vector(<4 x i1> %0, <4 x i1> %1) {
83149a6985SQi Hu; CHECK-LABEL: define <4 x i1> @smax_vector
84149a6985SQi Hu; CHECK-SAME: (<4 x i1> [[TMP0:%.*]], <4 x i1> [[TMP1:%.*]]) {
85*1a65cd3fSQi Hu; CHECK-NEXT:    [[TMP3:%.*]] = and <4 x i1> [[TMP0]], [[TMP1]]
86149a6985SQi Hu; CHECK-NEXT:    ret <4 x i1> [[TMP3]]
87149a6985SQi Hu;
88149a6985SQi Hu  %3 = call <4 x i1> @llvm.smax.v4i1(<4 x i1> %0, <4 x i1> %1)
89149a6985SQi Hu  ret <4 x i1> %3
90149a6985SQi Hu}
91149a6985SQi Hu
92149a6985SQi Hudeclare i1 @llvm.umin.i1(i1, i1)
93149a6985SQi Hudeclare i1 @llvm.smin.i1(i1, i1)
94149a6985SQi Hudeclare i1 @llvm.umax.i1(i1, i1)
95149a6985SQi Hudeclare i1 @llvm.smax.i1(i1, i1)
96149a6985SQi Hudeclare <4 x i1> @llvm.umin.v4i1(<4 x i1>, <4 x i1>)
97149a6985SQi Hudeclare <4 x i1> @llvm.smin.v4i1(<4 x i1>, <4 x i1>)
98149a6985SQi Hudeclare <4 x i1> @llvm.umax.v4i1(<4 x i1>, <4 x i1>)
99149a6985SQi Hudeclare <4 x i1> @llvm.smax.v4i1(<4 x i1>, <4 x i1>)
100