xref: /llvm-project/llvm/test/Transforms/InstCombine/vector-reduce-min-max-known.ll (revision 38fffa630ee80163dc65e759392ad29798905679)
1f9f4aba5SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2f9f4aba5SNoah Goldstein; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3f9f4aba5SNoah Goldstein
4f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umax_non_zero(<4 x i8> %xx) {
5f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_non_zero(
6f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 1, i8 0, i8 0>
7f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]])
8f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[V]], 0
9f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i1 [[R]]
10f9f4aba5SNoah Goldstein;
11f9f4aba5SNoah Goldstein  %x = add nuw <4 x i8> %xx, <i8 0, i8 1, i8 0, i8 0>
12f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x)
13f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
14f9f4aba5SNoah Goldstein  ret i1 %r
15f9f4aba5SNoah Goldstein}
16f9f4aba5SNoah Goldstein
17f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umax_non_zero_fail(<4 x i8> %xx) {
18f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_non_zero_fail(
19*38fffa63SPaul Walker; CHECK-NEXT:    [[X:%.*]] = add nsw <4 x i8> [[XX:%.*]], splat (i8 1)
20f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]])
21f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[V]], 0
22f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i1 [[R]]
23f9f4aba5SNoah Goldstein;
24f9f4aba5SNoah Goldstein  %x = add nsw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
25f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x)
26f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
27f9f4aba5SNoah Goldstein  ret i1 %r
28f9f4aba5SNoah Goldstein}
29f9f4aba5SNoah Goldstein
30f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umin_non_zero(<4 x i8> %xx) {
31f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_non_zero(
3277d66845SNoah Goldstein; CHECK-NEXT:    ret i1 false
33f9f4aba5SNoah Goldstein;
34f9f4aba5SNoah Goldstein  %x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
35f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x)
36f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
37f9f4aba5SNoah Goldstein  ret i1 %r
38f9f4aba5SNoah Goldstein}
39f9f4aba5SNoah Goldstein
40f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_umin_non_zero_fail(<4 x i8> %xx) {
41f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_non_zero_fail(
42f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 1, i8 1, i8 1>
43f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]])
44f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[V]], 0
45f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i1 [[R]]
46f9f4aba5SNoah Goldstein;
47f9f4aba5SNoah Goldstein  %x = add nuw <4 x i8> %xx, <i8 0, i8 1, i8 1, i8 1>
48f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x)
49f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
50f9f4aba5SNoah Goldstein  ret i1 %r
51f9f4aba5SNoah Goldstein}
52f9f4aba5SNoah Goldstein
53f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smax_non_zero0(<4 x i8> %xx) {
54f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_non_zero0(
5577d66845SNoah Goldstein; CHECK-NEXT:    ret i1 false
56f9f4aba5SNoah Goldstein;
57f9f4aba5SNoah Goldstein  %x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
58f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x)
59f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
60f9f4aba5SNoah Goldstein  ret i1 %r
61f9f4aba5SNoah Goldstein}
62f9f4aba5SNoah Goldstein
63f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smax_non_zero1(<4 x i8> %xx) {
64f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_non_zero1(
65f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X0:%.*]] = and <4 x i8> [[XX:%.*]], <i8 127, i8 -1, i8 -1, i8 -1>
66f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[X0]], <i8 1, i8 0, i8 0, i8 0>
67f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> [[X]])
68f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[V]], 0
69f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i1 [[R]]
70f9f4aba5SNoah Goldstein;
71f9f4aba5SNoah Goldstein  %x0 = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255>
72f9f4aba5SNoah Goldstein  %x = or <4 x i8> %x0, <i8 1, i8 0, i8 0, i8 0>
73f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x)
74f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
75f9f4aba5SNoah Goldstein  ret i1 %r
76f9f4aba5SNoah Goldstein}
77f9f4aba5SNoah Goldstein
78f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smax_non_zero_fail(<4 x i8> %xx) {
79f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_non_zero_fail(
80f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X0:%.*]] = and <4 x i8> [[XX:%.*]], <i8 127, i8 -1, i8 -1, i8 -1>
81f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = add nuw <4 x i8> [[X0]], <i8 1, i8 0, i8 0, i8 0>
82f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> [[X]])
83f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[V]], 0
84f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i1 [[R]]
85f9f4aba5SNoah Goldstein;
86f9f4aba5SNoah Goldstein  %x0 = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255>
87f9f4aba5SNoah Goldstein  %x = add nuw <4 x i8> %x0, <i8 1, i8 0, i8 0, i8 0>
88f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x)
89f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
90f9f4aba5SNoah Goldstein  ret i1 %r
91f9f4aba5SNoah Goldstein}
92f9f4aba5SNoah Goldstein
93f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smin_non_zero0(<4 x i8> %xx) {
94f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_non_zero0(
9577d66845SNoah Goldstein; CHECK-NEXT:    ret i1 false
96f9f4aba5SNoah Goldstein;
97f9f4aba5SNoah Goldstein  %x = add nuw <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
98f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x)
99f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
100f9f4aba5SNoah Goldstein  ret i1 %r
101f9f4aba5SNoah Goldstein}
102f9f4aba5SNoah Goldstein
103f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smin_non_zero1(<4 x i8> %xx) {
104f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_non_zero1(
105f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 0, i8 -128>
106f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> [[X]])
107f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[V]], 0
108f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i1 [[R]]
109f9f4aba5SNoah Goldstein;
110f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 0, i8 0, i8 0, i8 128>
111f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x)
112f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
113f9f4aba5SNoah Goldstein  ret i1 %r
114f9f4aba5SNoah Goldstein}
115f9f4aba5SNoah Goldstein
116f9f4aba5SNoah Goldsteindefine i1 @vec_reduce_smin_non_zero_fail(<4 x i8> %xx) {
117f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_non_zero_fail(
118f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X0:%.*]] = or <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 0, i8 -128>
119f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = add <4 x i8> [[X0]], <i8 0, i8 0, i8 0, i8 1>
120f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> [[X]])
121f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[V]], 0
122f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i1 [[R]]
123f9f4aba5SNoah Goldstein;
124f9f4aba5SNoah Goldstein  %x0 = or <4 x i8> %xx, <i8 0, i8 0, i8 0, i8 128>
125f9f4aba5SNoah Goldstein  %x = add <4 x i8> %x0, <i8 0, i8 0, i8 0, i8 1>
126f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x)
127f9f4aba5SNoah Goldstein  %r = icmp eq i8 %v, 0
128f9f4aba5SNoah Goldstein  ret i1 %r
129f9f4aba5SNoah Goldstein}
130f9f4aba5SNoah Goldstein
131f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known0(<4 x i8> %xx) {
132f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known0(
13341c52217SNoah Goldstein; CHECK-NEXT:    ret i8 1
134f9f4aba5SNoah Goldstein;
135f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
136f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x)
137f9f4aba5SNoah Goldstein  %r = and i8 %v, 1
138f9f4aba5SNoah Goldstein  ret i8 %r
139f9f4aba5SNoah Goldstein}
140f9f4aba5SNoah Goldstein
141f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known1(<4 x i8> %xx) {
142f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known1(
143f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 -128>
144f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]])
145f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], -128
146f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
147f9f4aba5SNoah Goldstein;
148f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 128>
149f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x)
150f9f4aba5SNoah Goldstein  %r = and i8 %v, 128
151f9f4aba5SNoah Goldstein  ret i8 %r
152f9f4aba5SNoah Goldstein}
153f9f4aba5SNoah Goldstein
154f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known_fail0(<4 x i8> %xx) {
155f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known_fail0(
156f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 -128>
157f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]])
158f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], 1
159f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
160f9f4aba5SNoah Goldstein;
161f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 128>
162f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x)
163f9f4aba5SNoah Goldstein  %r = and i8 %v, 1
164f9f4aba5SNoah Goldstein  ret i8 %r
165f9f4aba5SNoah Goldstein}
166f9f4aba5SNoah Goldstein
167f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umax_known_fail1(<4 x i8> %xx) {
168f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umax_known_fail1(
169f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 2, i8 4, i8 8>
170f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]])
171f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], 1
172f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
173f9f4aba5SNoah Goldstein;
174f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 1, i8 2, i8 4, i8 8>
175f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x)
176f9f4aba5SNoah Goldstein  %r = and i8 %v, 1
177f9f4aba5SNoah Goldstein  ret i8 %r
178f9f4aba5SNoah Goldstein}
179f9f4aba5SNoah Goldstein
180f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known0(<4 x i8> %xx) {
181f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known0(
18241c52217SNoah Goldstein; CHECK-NEXT:    ret i8 1
183f9f4aba5SNoah Goldstein;
184f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 1, i8 1, i8 1, i8 1>
185f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x)
186f9f4aba5SNoah Goldstein  %r = and i8 %v, 1
187f9f4aba5SNoah Goldstein  ret i8 %r
188f9f4aba5SNoah Goldstein}
189f9f4aba5SNoah Goldstein
190f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known1(<4 x i8> %xx) {
191f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known1(
192f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = and <4 x i8> [[XX:%.*]], <i8 127, i8 -1, i8 -1, i8 -1>
193f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]])
194f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], -128
195f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
196f9f4aba5SNoah Goldstein;
197f9f4aba5SNoah Goldstein  %x = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255>
198f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x)
199f9f4aba5SNoah Goldstein  %r = and i8 %v, 128
200f9f4aba5SNoah Goldstein  ret i8 %r
201f9f4aba5SNoah Goldstein}
202f9f4aba5SNoah Goldstein
203f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known_fail0(<4 x i8> %xx) {
204f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known_fail0(
205f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 0, i8 0, i8 0>
206f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]])
207f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], 1
208f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
209f9f4aba5SNoah Goldstein;
210f9f4aba5SNoah Goldstein  %x0 = and <4 x i8> %xx, <i8 127, i8 255, i8 255, i8 255>
211f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 1, i8 0, i8 0, i8 0>
212f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x)
213f9f4aba5SNoah Goldstein  %r = and i8 %v, 1
214f9f4aba5SNoah Goldstein  ret i8 %r
215f9f4aba5SNoah Goldstein}
216f9f4aba5SNoah Goldstein
217f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_umin_known_fail1(<4 x i8> %xx) {
218f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_umin_known_fail1(
219f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 1, i8 2, i8 4, i8 8>
220f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umin.v4i8(<4 x i8> [[X]])
221f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], 1
222f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
223f9f4aba5SNoah Goldstein;
224f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 1, i8 2, i8 4, i8 8>
225f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umin(<4 x i8> %x)
226f9f4aba5SNoah Goldstein  %r = and i8 %v, 1
227f9f4aba5SNoah Goldstein  ret i8 %r
228f9f4aba5SNoah Goldstein}
229f9f4aba5SNoah Goldstein
230f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smax_known(<4 x i8> %xx) {
231f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_known(
23241c52217SNoah Goldstein; CHECK-NEXT:    ret i8 4
233f9f4aba5SNoah Goldstein;
234f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 4, i8 4, i8 4, i8 5>
235f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smax(<4 x i8> %x)
236f9f4aba5SNoah Goldstein  %r = and i8 %v, 4
237f9f4aba5SNoah Goldstein  ret i8 %r
238f9f4aba5SNoah Goldstein}
239f9f4aba5SNoah Goldstein
240f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smax_known_fail(<4 x i8> %xx) {
241f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smax_known_fail(
242f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 4, i8 4, i8 8, i8 5>
243f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> [[X]])
244f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], 4
245f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
246f9f4aba5SNoah Goldstein;
247f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 4, i8 4, i8 8, i8 5>
248f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.umax(<4 x i8> %x)
249f9f4aba5SNoah Goldstein  %r = and i8 %v, 4
250f9f4aba5SNoah Goldstein  ret i8 %r
251f9f4aba5SNoah Goldstein}
252f9f4aba5SNoah Goldstein
253f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smin_known(<4 x i8> %xx) {
254f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_known(
25541c52217SNoah Goldstein; CHECK-NEXT:    ret i8 8
256f9f4aba5SNoah Goldstein;
257f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 8, i8 24, i8 56, i8 9>
258f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x)
259f9f4aba5SNoah Goldstein  %r = and i8 %v, 8
260f9f4aba5SNoah Goldstein  ret i8 %r
261f9f4aba5SNoah Goldstein}
262f9f4aba5SNoah Goldstein
263f9f4aba5SNoah Goldsteindefine i8 @vec_reduce_smin_known_fail(<4 x i8> %xx) {
264f9f4aba5SNoah Goldstein; CHECK-LABEL: @vec_reduce_smin_known_fail(
265f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[X:%.*]] = or <4 x i8> [[XX:%.*]], <i8 8, i8 23, i8 56, i8 9>
266f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[V:%.*]] = call i8 @llvm.vector.reduce.smin.v4i8(<4 x i8> [[X]])
267f9f4aba5SNoah Goldstein; CHECK-NEXT:    [[R:%.*]] = and i8 [[V]], 8
268f9f4aba5SNoah Goldstein; CHECK-NEXT:    ret i8 [[R]]
269f9f4aba5SNoah Goldstein;
270f9f4aba5SNoah Goldstein  %x = or <4 x i8> %xx, <i8 8, i8 23, i8 56, i8 9>
271f9f4aba5SNoah Goldstein  %v = call i8 @llvm.vector.reduce.smin(<4 x i8> %x)
272f9f4aba5SNoah Goldstein  %r = and i8 %v, 8
273f9f4aba5SNoah Goldstein  ret i8 %r
274f9f4aba5SNoah Goldstein}
275