xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/aarch64-minmaxv.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=aarch64 -aarch64-neon-syntax=generic < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
4*9880d681SAndroid Build Coastguard Workertarget triple = "aarch64-linu--gnu"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smax_B
7*9880d681SAndroid Build Coastguard Worker; CHECK: smaxv {{b[0-9]+}}, {{v[0-9]+}}.16b
8*9880d681SAndroid Build Coastguard Workerdefine i8 @smax_B(<16 x i8>* nocapture readonly %arr)  {
9*9880d681SAndroid Build Coastguard Worker  %arr.load = load <16 x i8>, <16 x i8>* %arr
10*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i8> %arr.load, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
11*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp sgt <16 x i8> %arr.load, %rdx.shuf
12*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i8> %arr.load, <16 x i8> %rdx.shuf
13*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i8> %rdx.minmax.select23, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
14*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp sgt <16 x i8> %rdx.minmax.select23, %rdx.shuf24
15*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i8> %rdx.minmax.select23, <16 x i8> %rdx.shuf24
16*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i8> %rdx.minmax.select26, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
17*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp sgt <16 x i8> %rdx.minmax.select26, %rdx.shuf27
18*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i8> %rdx.minmax.select26, <16 x i8> %rdx.shuf27
19*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i8> %rdx.minmax.select29, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
20*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp sgt <16 x i8> %rdx.minmax.select29, %rdx.shuf30
21*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
22*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 0
23*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 1
24*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i8 %rdx.minmax.select29.elt, i8 %rdx.shuf30.elt
25*9880d681SAndroid Build Coastguard Worker  ret i8 %r
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smax_H
29*9880d681SAndroid Build Coastguard Worker; CHECK: smaxv {{h[0-9]+}}, {{v[0-9]+}}.8h
30*9880d681SAndroid Build Coastguard Workerdefine i16 @smax_H(<8 x i16>* nocapture readonly %arr) {
31*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <8 x i16>, <8 x i16>* %arr
32*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <8 x i16> %rdx.minmax.select, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
33*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp23 = icmp sgt <8 x i16> %rdx.minmax.select, %rdx.shuf
34*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select24 = select <8 x i1> %rdx.minmax.cmp23, <8 x i16> %rdx.minmax.select, <8 x i16> %rdx.shuf
35*9880d681SAndroid Build Coastguard Worker  %rdx.shuf25 = shufflevector <8 x i16> %rdx.minmax.select24, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
36*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp26 = icmp sgt <8 x i16> %rdx.minmax.select24, %rdx.shuf25
37*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27 = select <8 x i1> %rdx.minmax.cmp26, <8 x i16> %rdx.minmax.select24, <8 x i16> %rdx.shuf25
38*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28 = shufflevector <8 x i16> %rdx.minmax.select27, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
39*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29 = icmp sgt <8 x i16> %rdx.minmax.select27, %rdx.shuf28
40*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29.elt = extractelement <8 x i1> %rdx.minmax.cmp29, i32 0
41*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 0
42*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 1
43*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp29.elt, i16 %rdx.minmax.select27.elt, i16 %rdx.shuf28.elt
44*9880d681SAndroid Build Coastguard Worker  ret i16 %r
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smax_S
48*9880d681SAndroid Build Coastguard Worker; CHECK: smaxv {{s[0-9]+}}, {{v[0-9]+}}.4s
49*9880d681SAndroid Build Coastguard Workerdefine i32 @smax_S(<4 x i32> * nocapture readonly %arr)  {
50*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <4 x i32>, <4 x i32>* %arr
51*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <4 x i32> %rdx.minmax.select, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
52*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp sgt <4 x i32> %rdx.minmax.select, %rdx.shuf
53*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19 = select <4 x i1> %rdx.minmax.cmp18, <4 x i32> %rdx.minmax.select, <4 x i32> %rdx.shuf
54*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20 = shufflevector <4 x i32> %rdx.minmax.select19, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
55*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21 = icmp sgt <4 x i32> %rdx.minmax.select19, %rdx.shuf20
56*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21.elt = extractelement <4 x i1> %rdx.minmax.cmp21, i32 0
57*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 0
58*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 1
59*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp21.elt, i32 %rdx.minmax.select19.elt, i32 %rdx.shuf20.elt
60*9880d681SAndroid Build Coastguard Worker  ret i32 %r
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smax_D
64*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: smaxv
65*9880d681SAndroid Build Coastguard Workerdefine i64 @smax_D(<2 x i64>* nocapture readonly %arr) {
66*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <2 x i64>, <2 x i64>* %arr
67*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <2 x i64> %rdx.minmax.select, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
68*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp sgt <2 x i64> %rdx.minmax.select, %rdx.shuf
69*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18.elt = extractelement <2 x i1> %rdx.minmax.cmp18, i32 0
70*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select.elt = extractelement <2 x i64> %rdx.minmax.select, i32 0
71*9880d681SAndroid Build Coastguard Worker  %rdx.shuf.elt = extractelement <2 x i64> %rdx.minmax.select, i32 1
72*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp18.elt, i64 %rdx.minmax.select.elt, i64 %rdx.shuf.elt
73*9880d681SAndroid Build Coastguard Worker  ret i64 %r
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umax_B
78*9880d681SAndroid Build Coastguard Worker; CHECK: umaxv {{b[0-9]+}}, {{v[0-9]+}}.16b
79*9880d681SAndroid Build Coastguard Workerdefine i8 @umax_B(<16 x i8>* nocapture readonly %arr)  {
80*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <16 x i8>, <16 x i8>* %arr
81*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i8> %rdx.minmax.select, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
82*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp ugt <16 x i8> %rdx.minmax.select, %rdx.shuf
83*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i8> %rdx.minmax.select, <16 x i8> %rdx.shuf
84*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i8> %rdx.minmax.select23, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
85*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp ugt <16 x i8> %rdx.minmax.select23, %rdx.shuf24
86*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i8> %rdx.minmax.select23, <16 x i8> %rdx.shuf24
87*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i8> %rdx.minmax.select26, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
88*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp ugt <16 x i8> %rdx.minmax.select26, %rdx.shuf27
89*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i8> %rdx.minmax.select26, <16 x i8> %rdx.shuf27
90*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i8> %rdx.minmax.select29, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
91*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp ugt <16 x i8> %rdx.minmax.select29, %rdx.shuf30
92*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
93*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 0
94*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 1
95*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i8 %rdx.minmax.select29.elt, i8 %rdx.shuf30.elt
96*9880d681SAndroid Build Coastguard Worker  ret i8 %r
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umax_H
100*9880d681SAndroid Build Coastguard Worker; CHECK: umaxv {{h[0-9]+}}, {{v[0-9]+}}.8h
101*9880d681SAndroid Build Coastguard Workerdefine i16 @umax_H(<8 x i16>* nocapture readonly %arr)  {
102*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <8 x i16>, <8 x i16>* %arr
103*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <8 x i16> %rdx.minmax.select, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
104*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp23 = icmp ugt <8 x i16> %rdx.minmax.select, %rdx.shuf
105*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select24 = select <8 x i1> %rdx.minmax.cmp23, <8 x i16> %rdx.minmax.select, <8 x i16> %rdx.shuf
106*9880d681SAndroid Build Coastguard Worker  %rdx.shuf25 = shufflevector <8 x i16> %rdx.minmax.select24, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
107*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp26 = icmp ugt <8 x i16> %rdx.minmax.select24, %rdx.shuf25
108*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27 = select <8 x i1> %rdx.minmax.cmp26, <8 x i16> %rdx.minmax.select24, <8 x i16> %rdx.shuf25
109*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28 = shufflevector <8 x i16> %rdx.minmax.select27, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
110*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29 = icmp ugt <8 x i16> %rdx.minmax.select27, %rdx.shuf28
111*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29.elt = extractelement <8 x i1> %rdx.minmax.cmp29, i32 0
112*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 0
113*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 1
114*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp29.elt, i16 %rdx.minmax.select27.elt, i16 %rdx.shuf28.elt
115*9880d681SAndroid Build Coastguard Worker  ret i16 %r
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umax_S
119*9880d681SAndroid Build Coastguard Worker; CHECK: umaxv {{s[0-9]+}}, {{v[0-9]+}}.4s
120*9880d681SAndroid Build Coastguard Workerdefine i32 @umax_S(<4 x i32>* nocapture readonly %arr) {
121*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select  = load <4 x i32>, <4 x i32>* %arr
122*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <4 x i32> %rdx.minmax.select, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
123*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp ugt <4 x i32> %rdx.minmax.select, %rdx.shuf
124*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19 = select <4 x i1> %rdx.minmax.cmp18, <4 x i32> %rdx.minmax.select, <4 x i32> %rdx.shuf
125*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20 = shufflevector <4 x i32> %rdx.minmax.select19, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
126*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21 = icmp ugt <4 x i32> %rdx.minmax.select19, %rdx.shuf20
127*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21.elt = extractelement <4 x i1> %rdx.minmax.cmp21, i32 0
128*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 0
129*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 1
130*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp21.elt, i32 %rdx.minmax.select19.elt, i32 %rdx.shuf20.elt
131*9880d681SAndroid Build Coastguard Worker  ret i32 %r
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umax_D
135*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: umaxv
136*9880d681SAndroid Build Coastguard Workerdefine i64 @umax_D(<2 x i64>* nocapture readonly %arr)  {
137*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <2 x i64>, <2 x i64>* %arr
138*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <2 x i64> %rdx.minmax.select, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
139*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp ugt <2 x i64> %rdx.minmax.select, %rdx.shuf
140*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18.elt = extractelement <2 x i1> %rdx.minmax.cmp18, i32 0
141*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select.elt = extractelement <2 x i64> %rdx.minmax.select, i32 0
142*9880d681SAndroid Build Coastguard Worker  %rdx.shuf.elt = extractelement <2 x i64> %rdx.minmax.select, i32 1
143*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp18.elt, i64 %rdx.minmax.select.elt, i64 %rdx.shuf.elt
144*9880d681SAndroid Build Coastguard Worker  ret i64 %r
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smin_B
149*9880d681SAndroid Build Coastguard Worker; CHECK: sminv {{b[0-9]+}}, {{v[0-9]+}}.16b
150*9880d681SAndroid Build Coastguard Workerdefine i8 @smin_B(<16 x i8>* nocapture readonly %arr) {
151*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <16 x i8>, <16 x i8>* %arr
152*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i8> %rdx.minmax.select, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
153*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp slt <16 x i8> %rdx.minmax.select, %rdx.shuf
154*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i8> %rdx.minmax.select, <16 x i8> %rdx.shuf
155*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i8> %rdx.minmax.select23, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
156*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp slt <16 x i8> %rdx.minmax.select23, %rdx.shuf24
157*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i8> %rdx.minmax.select23, <16 x i8> %rdx.shuf24
158*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i8> %rdx.minmax.select26, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
159*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp slt <16 x i8> %rdx.minmax.select26, %rdx.shuf27
160*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i8> %rdx.minmax.select26, <16 x i8> %rdx.shuf27
161*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i8> %rdx.minmax.select29, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
162*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp slt <16 x i8> %rdx.minmax.select29, %rdx.shuf30
163*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
164*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 0
165*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 1
166*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i8 %rdx.minmax.select29.elt, i8 %rdx.shuf30.elt
167*9880d681SAndroid Build Coastguard Worker  ret i8 %r
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smin_H
171*9880d681SAndroid Build Coastguard Worker; CHECK: sminv {{h[0-9]+}}, {{v[0-9]+}}.8h
172*9880d681SAndroid Build Coastguard Workerdefine i16 @smin_H(<8 x i16>* nocapture readonly %arr) {
173*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <8 x i16>, <8 x i16>* %arr
174*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <8 x i16> %rdx.minmax.select, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
175*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp23 = icmp slt <8 x i16> %rdx.minmax.select, %rdx.shuf
176*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select24 = select <8 x i1> %rdx.minmax.cmp23, <8 x i16> %rdx.minmax.select, <8 x i16> %rdx.shuf
177*9880d681SAndroid Build Coastguard Worker  %rdx.shuf25 = shufflevector <8 x i16> %rdx.minmax.select24, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
178*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp26 = icmp slt <8 x i16> %rdx.minmax.select24, %rdx.shuf25
179*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27 = select <8 x i1> %rdx.minmax.cmp26, <8 x i16> %rdx.minmax.select24, <8 x i16> %rdx.shuf25
180*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28 = shufflevector <8 x i16> %rdx.minmax.select27, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
181*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29 = icmp slt <8 x i16> %rdx.minmax.select27, %rdx.shuf28
182*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29.elt = extractelement <8 x i1> %rdx.minmax.cmp29, i32 0
183*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 0
184*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 1
185*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp29.elt, i16 %rdx.minmax.select27.elt, i16 %rdx.shuf28.elt
186*9880d681SAndroid Build Coastguard Worker  ret i16 %r
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smin_S
190*9880d681SAndroid Build Coastguard Worker; CHECK: sminv {{s[0-9]+}}, {{v[0-9]+}}.4s
191*9880d681SAndroid Build Coastguard Workerdefine i32 @smin_S(<4 x i32>* nocapture readonly %arr) {
192*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <4 x i32>, <4 x i32>* %arr
193*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <4 x i32> %rdx.minmax.select, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
194*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp slt <4 x i32> %rdx.minmax.select, %rdx.shuf
195*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19 = select <4 x i1> %rdx.minmax.cmp18, <4 x i32> %rdx.minmax.select, <4 x i32> %rdx.shuf
196*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20 = shufflevector <4 x i32> %rdx.minmax.select19, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
197*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21 = icmp slt <4 x i32> %rdx.minmax.select19, %rdx.shuf20
198*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21.elt = extractelement <4 x i1> %rdx.minmax.cmp21, i32 0
199*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 0
200*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 1
201*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp21.elt, i32 %rdx.minmax.select19.elt, i32 %rdx.shuf20.elt
202*9880d681SAndroid Build Coastguard Worker  ret i32 %r
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smin_D
206*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sminv
207*9880d681SAndroid Build Coastguard Workerdefine i64 @smin_D(<2 x i64>* nocapture readonly %arr) {
208*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <2 x i64>, <2 x i64>* %arr
209*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <2 x i64> %rdx.minmax.select, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
210*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp slt <2 x i64> %rdx.minmax.select, %rdx.shuf
211*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18.elt = extractelement <2 x i1> %rdx.minmax.cmp18, i32 0
212*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select.elt = extractelement <2 x i64> %rdx.minmax.select, i32 0
213*9880d681SAndroid Build Coastguard Worker  %rdx.shuf.elt = extractelement <2 x i64> %rdx.minmax.select, i32 1
214*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp18.elt, i64 %rdx.minmax.select.elt, i64 %rdx.shuf.elt
215*9880d681SAndroid Build Coastguard Worker  ret i64 %r
216*9880d681SAndroid Build Coastguard Worker}
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umin_B
220*9880d681SAndroid Build Coastguard Worker; CHECK: uminv {{b[0-9]+}}, {{v[0-9]+}}.16b
221*9880d681SAndroid Build Coastguard Workerdefine i8 @umin_B(<16 x i8>* nocapture readonly %arr)  {
222*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <16 x i8>, <16 x i8>* %arr
223*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i8> %rdx.minmax.select, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
224*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp ult <16 x i8> %rdx.minmax.select, %rdx.shuf
225*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i8> %rdx.minmax.select, <16 x i8> %rdx.shuf
226*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i8> %rdx.minmax.select23, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
227*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp ult <16 x i8> %rdx.minmax.select23, %rdx.shuf24
228*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i8> %rdx.minmax.select23, <16 x i8> %rdx.shuf24
229*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i8> %rdx.minmax.select26, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
230*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp ult <16 x i8> %rdx.minmax.select26, %rdx.shuf27
231*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i8> %rdx.minmax.select26, <16 x i8> %rdx.shuf27
232*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i8> %rdx.minmax.select29, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
233*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp ult <16 x i8> %rdx.minmax.select29, %rdx.shuf30
234*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
235*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 0
236*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i8> %rdx.minmax.select29, i32 1
237*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i8 %rdx.minmax.select29.elt, i8 %rdx.shuf30.elt
238*9880d681SAndroid Build Coastguard Worker  ret i8 %r
239*9880d681SAndroid Build Coastguard Worker}
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umin_H
242*9880d681SAndroid Build Coastguard Worker; CHECK: uminv {{h[0-9]+}}, {{v[0-9]+}}.8h
243*9880d681SAndroid Build Coastguard Workerdefine i16 @umin_H(<8 x i16>* nocapture readonly %arr)  {
244*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <8 x i16>, <8 x i16>* %arr
245*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <8 x i16> %rdx.minmax.select, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
246*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp23 = icmp ult <8 x i16> %rdx.minmax.select, %rdx.shuf
247*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select24 = select <8 x i1> %rdx.minmax.cmp23, <8 x i16> %rdx.minmax.select, <8 x i16> %rdx.shuf
248*9880d681SAndroid Build Coastguard Worker  %rdx.shuf25 = shufflevector <8 x i16> %rdx.minmax.select24, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
249*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp26 = icmp ult <8 x i16> %rdx.minmax.select24, %rdx.shuf25
250*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27 = select <8 x i1> %rdx.minmax.cmp26, <8 x i16> %rdx.minmax.select24, <8 x i16> %rdx.shuf25
251*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28 = shufflevector <8 x i16> %rdx.minmax.select27, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
252*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29 = icmp ult <8 x i16> %rdx.minmax.select27, %rdx.shuf28
253*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp29.elt = extractelement <8 x i1> %rdx.minmax.cmp29, i32 0
254*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select27.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 0
255*9880d681SAndroid Build Coastguard Worker  %rdx.shuf28.elt = extractelement <8 x i16> %rdx.minmax.select27, i32 1
256*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp29.elt, i16 %rdx.minmax.select27.elt, i16 %rdx.shuf28.elt
257*9880d681SAndroid Build Coastguard Worker  ret i16 %r
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umin_S
261*9880d681SAndroid Build Coastguard Worker; CHECK: uminv {{s[0-9]+}}, {{v[0-9]+}}.4s
262*9880d681SAndroid Build Coastguard Workerdefine i32 @umin_S(<4 x i32>* nocapture readonly %arr) {
263*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <4 x i32>, <4 x i32>* %arr
264*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <4 x i32> %rdx.minmax.select, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
265*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp ult <4 x i32> %rdx.minmax.select, %rdx.shuf
266*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19 = select <4 x i1> %rdx.minmax.cmp18, <4 x i32> %rdx.minmax.select, <4 x i32> %rdx.shuf
267*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20 = shufflevector <4 x i32> %rdx.minmax.select19, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
268*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21 = icmp ult <4 x i32> %rdx.minmax.select19, %rdx.shuf20
269*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp21.elt = extractelement <4 x i1> %rdx.minmax.cmp21, i32 0
270*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select19.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 0
271*9880d681SAndroid Build Coastguard Worker  %rdx.shuf20.elt = extractelement <4 x i32> %rdx.minmax.select19, i32 1
272*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp21.elt, i32 %rdx.minmax.select19.elt, i32 %rdx.shuf20.elt
273*9880d681SAndroid Build Coastguard Worker  ret i32 %r
274*9880d681SAndroid Build Coastguard Worker}
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umin_D
277*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: uminv
278*9880d681SAndroid Build Coastguard Workerdefine i64 @umin_D(<2 x i64>* nocapture readonly %arr)  {
279*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <2 x i64>, <2 x i64>* %arr
280*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <2 x i64> %rdx.minmax.select, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
281*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18 = icmp ult <2 x i64> %rdx.minmax.select, %rdx.shuf
282*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp18.elt = extractelement <2 x i1> %rdx.minmax.cmp18, i32 0
283*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select.elt = extractelement <2 x i64> %rdx.minmax.select, i32 0
284*9880d681SAndroid Build Coastguard Worker  %rdx.shuf.elt = extractelement <2 x i64> %rdx.minmax.select, i32 1
285*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp18.elt, i64 %rdx.minmax.select.elt, i64 %rdx.shuf.elt
286*9880d681SAndroid Build Coastguard Worker  ret i64 %r
287*9880d681SAndroid Build Coastguard Worker}
288*9880d681SAndroid Build Coastguard Worker
289*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fmaxnm_S
290*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxnmv
291*9880d681SAndroid Build Coastguard Workerdefine float @fmaxnm_S(<4 x float>* nocapture readonly %arr) {
292*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select  = load <4 x float>, <4 x float>* %arr
293*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <4 x float> %rdx.minmax.select, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
294*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp = fcmp fast oge <4 x float> %rdx.minmax.select, %rdx.shuf
295*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select1 = select <4 x i1> %rdx.minmax.cmp, <4 x float> %rdx.minmax.select, <4 x float> %rdx.shuf
296*9880d681SAndroid Build Coastguard Worker  %rdx.shuf1 = shufflevector <4 x float> %rdx.minmax.select1, <4 x float> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
297*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp1 = fcmp fast oge <4 x float> %rdx.minmax.select1, %rdx.shuf1
298*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp1.elt = extractelement <4 x i1> %rdx.minmax.cmp1, i32 0
299*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select1.elt = extractelement <4 x float> %rdx.minmax.select1, i32 0
300*9880d681SAndroid Build Coastguard Worker  %rdx.shuf1.elt = extractelement <4 x float> %rdx.minmax.select1, i32 1
301*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp1.elt, float %rdx.minmax.select1.elt, float %rdx.shuf1.elt
302*9880d681SAndroid Build Coastguard Worker  ret float %r
303*9880d681SAndroid Build Coastguard Worker}
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fminnm_S
306*9880d681SAndroid Build Coastguard Worker; CHECK: fminnmv
307*9880d681SAndroid Build Coastguard Workerdefine float @fminnm_S(<4 x float>* nocapture readonly %arr) {
308*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select  = load <4 x float>, <4 x float>* %arr
309*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <4 x float> %rdx.minmax.select, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
310*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp = fcmp fast ole <4 x float> %rdx.minmax.select, %rdx.shuf
311*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select1 = select <4 x i1> %rdx.minmax.cmp, <4 x float> %rdx.minmax.select, <4 x float> %rdx.shuf
312*9880d681SAndroid Build Coastguard Worker  %rdx.shuf1 = shufflevector <4 x float> %rdx.minmax.select1, <4 x float> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
313*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp1 = fcmp fast ole <4 x float> %rdx.minmax.select1, %rdx.shuf1
314*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp1.elt = extractelement <4 x i1> %rdx.minmax.cmp1, i32 0
315*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select1.elt = extractelement <4 x float> %rdx.minmax.select1, i32 0
316*9880d681SAndroid Build Coastguard Worker  %rdx.shuf1.elt = extractelement <4 x float> %rdx.minmax.select1, i32 1
317*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp1.elt, float %rdx.minmax.select1.elt, float %rdx.shuf1.elt
318*9880d681SAndroid Build Coastguard Worker  ret float %r
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Workerdefine i16 @oversized_umax_256(<16 x i16>* nocapture readonly %arr)  {
322*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_umax_256
323*9880d681SAndroid Build Coastguard Worker; CHECK: umax [[V0:v[0-9]+]].8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
324*9880d681SAndroid Build Coastguard Worker; CHECK: umaxv {{h[0-9]+}}, [[V0]]
325*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <16 x i16>, <16 x i16>* %arr
326*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i16> %rdx.minmax.select, <16 x i16> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
327*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp ugt <16 x i16> %rdx.minmax.select, %rdx.shuf
328*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i16> %rdx.minmax.select, <16 x i16> %rdx.shuf
329*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i16> %rdx.minmax.select23, <16 x i16> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
330*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp ugt <16 x i16> %rdx.minmax.select23, %rdx.shuf24
331*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i16> %rdx.minmax.select23, <16 x i16> %rdx.shuf24
332*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i16> %rdx.minmax.select26, <16 x i16> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
333*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp ugt <16 x i16> %rdx.minmax.select26, %rdx.shuf27
334*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i16> %rdx.minmax.select26, <16 x i16> %rdx.shuf27
335*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i16> %rdx.minmax.select29, <16 x i16> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
336*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp ugt <16 x i16> %rdx.minmax.select29, %rdx.shuf30
337*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
338*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 0
339*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 1
340*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i16 %rdx.minmax.select29.elt, i16 %rdx.shuf30.elt
341*9880d681SAndroid Build Coastguard Worker  ret i16 %r
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerdefine i32 @oversized_umax_512(<16 x i32>* nocapture readonly %arr)  {
345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_umax_512
346*9880d681SAndroid Build Coastguard Worker; CHECK: umax v
347*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umax v
348*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umax [[V0:v[0-9]+]].4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umaxv {{s[0-9]+}}, [[V0]]
350*9880d681SAndroid Build Coastguard Worker  %arr.load = load <16 x i32>, <16 x i32>* %arr
351*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i32> %arr.load, <16 x i32> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
352*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp ugt <16 x i32> %arr.load, %rdx.shuf
353*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i32> %arr.load, <16 x i32> %rdx.shuf
354*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i32> %rdx.minmax.select23, <16 x i32> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
355*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp ugt <16 x i32> %rdx.minmax.select23, %rdx.shuf24
356*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i32> %rdx.minmax.select23, <16 x i32> %rdx.shuf24
357*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i32> %rdx.minmax.select26, <16 x i32> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
358*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp ugt <16 x i32> %rdx.minmax.select26, %rdx.shuf27
359*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i32> %rdx.minmax.select26, <16 x i32> %rdx.shuf27
360*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i32> %rdx.minmax.select29, <16 x i32> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
361*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp ugt <16 x i32> %rdx.minmax.select29, %rdx.shuf30
362*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
363*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 0
364*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 1
365*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i32 %rdx.minmax.select29.elt, i32 %rdx.shuf30.elt
366*9880d681SAndroid Build Coastguard Worker  ret i32 %r
367*9880d681SAndroid Build Coastguard Worker}
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Workerdefine i16 @oversized_umin_256(<16 x i16>* nocapture readonly %arr)  {
370*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_umin_256
371*9880d681SAndroid Build Coastguard Worker; CHECK: umin [[V0:v[0-9]+]].8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
372*9880d681SAndroid Build Coastguard Worker; CHECK: uminv {{h[0-9]+}}, [[V0]]
373*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <16 x i16>, <16 x i16>* %arr
374*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i16> %rdx.minmax.select, <16 x i16> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
375*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp ult <16 x i16> %rdx.minmax.select, %rdx.shuf
376*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i16> %rdx.minmax.select, <16 x i16> %rdx.shuf
377*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i16> %rdx.minmax.select23, <16 x i16> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
378*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp ult <16 x i16> %rdx.minmax.select23, %rdx.shuf24
379*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i16> %rdx.minmax.select23, <16 x i16> %rdx.shuf24
380*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i16> %rdx.minmax.select26, <16 x i16> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
381*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp ult <16 x i16> %rdx.minmax.select26, %rdx.shuf27
382*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i16> %rdx.minmax.select26, <16 x i16> %rdx.shuf27
383*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i16> %rdx.minmax.select29, <16 x i16> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
384*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp ult <16 x i16> %rdx.minmax.select29, %rdx.shuf30
385*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
386*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 0
387*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 1
388*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i16 %rdx.minmax.select29.elt, i16 %rdx.shuf30.elt
389*9880d681SAndroid Build Coastguard Worker  ret i16 %r
390*9880d681SAndroid Build Coastguard Worker}
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Workerdefine i32 @oversized_umin_512(<16 x i32>* nocapture readonly %arr)  {
393*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_umin_512
394*9880d681SAndroid Build Coastguard Worker; CHECK: umin v
395*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umin v
396*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umin [[V0:v[0-9]+]].4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
397*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: uminv {{s[0-9]+}}, [[V0]]
398*9880d681SAndroid Build Coastguard Worker  %arr.load = load <16 x i32>, <16 x i32>* %arr
399*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i32> %arr.load, <16 x i32> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
400*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp ult <16 x i32> %arr.load, %rdx.shuf
401*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i32> %arr.load, <16 x i32> %rdx.shuf
402*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i32> %rdx.minmax.select23, <16 x i32> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
403*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp ult <16 x i32> %rdx.minmax.select23, %rdx.shuf24
404*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i32> %rdx.minmax.select23, <16 x i32> %rdx.shuf24
405*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i32> %rdx.minmax.select26, <16 x i32> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
406*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp ult <16 x i32> %rdx.minmax.select26, %rdx.shuf27
407*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i32> %rdx.minmax.select26, <16 x i32> %rdx.shuf27
408*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i32> %rdx.minmax.select29, <16 x i32> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
409*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp ult <16 x i32> %rdx.minmax.select29, %rdx.shuf30
410*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
411*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 0
412*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 1
413*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i32 %rdx.minmax.select29.elt, i32 %rdx.shuf30.elt
414*9880d681SAndroid Build Coastguard Worker  ret i32 %r
415*9880d681SAndroid Build Coastguard Worker}
416*9880d681SAndroid Build Coastguard Worker
417*9880d681SAndroid Build Coastguard Workerdefine i16 @oversized_smax_256(<16 x i16>* nocapture readonly %arr)  {
418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_smax_256
419*9880d681SAndroid Build Coastguard Worker; CHECK: smax [[V0:v[0-9]+]].8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
420*9880d681SAndroid Build Coastguard Worker; CHECK: smaxv {{h[0-9]+}}, [[V0]]
421*9880d681SAndroid Build Coastguard Worker  %arr.load = load <16 x i16>, <16 x i16>* %arr
422*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i16> %arr.load, <16 x i16> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
423*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp sgt <16 x i16> %arr.load, %rdx.shuf
424*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i16> %arr.load, <16 x i16> %rdx.shuf
425*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i16> %rdx.minmax.select23, <16 x i16> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
426*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp sgt <16 x i16> %rdx.minmax.select23, %rdx.shuf24
427*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i16> %rdx.minmax.select23, <16 x i16> %rdx.shuf24
428*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i16> %rdx.minmax.select26, <16 x i16> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
429*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp sgt <16 x i16> %rdx.minmax.select26, %rdx.shuf27
430*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i16> %rdx.minmax.select26, <16 x i16> %rdx.shuf27
431*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i16> %rdx.minmax.select29, <16 x i16> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
432*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp sgt <16 x i16> %rdx.minmax.select29, %rdx.shuf30
433*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
434*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 0
435*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 1
436*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i16 %rdx.minmax.select29.elt, i16 %rdx.shuf30.elt
437*9880d681SAndroid Build Coastguard Worker  ret i16 %r
438*9880d681SAndroid Build Coastguard Worker}
439*9880d681SAndroid Build Coastguard Worker
440*9880d681SAndroid Build Coastguard Workerdefine i32 @oversized_smax_512(<16 x i32>* nocapture readonly %arr)  {
441*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_smax_512
442*9880d681SAndroid Build Coastguard Worker; CHECK: smax v
443*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smax v
444*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smax [[V0:v[0-9]+]].4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
445*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smaxv {{s[0-9]+}}, [[V0]]
446*9880d681SAndroid Build Coastguard Worker  %arr.load = load <16 x i32>, <16 x i32>* %arr
447*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i32> %arr.load, <16 x i32> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
448*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp sgt <16 x i32> %arr.load, %rdx.shuf
449*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i32> %arr.load, <16 x i32> %rdx.shuf
450*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i32> %rdx.minmax.select23, <16 x i32> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
451*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp sgt <16 x i32> %rdx.minmax.select23, %rdx.shuf24
452*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i32> %rdx.minmax.select23, <16 x i32> %rdx.shuf24
453*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i32> %rdx.minmax.select26, <16 x i32> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
454*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp sgt <16 x i32> %rdx.minmax.select26, %rdx.shuf27
455*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i32> %rdx.minmax.select26, <16 x i32> %rdx.shuf27
456*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i32> %rdx.minmax.select29, <16 x i32> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
457*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp sgt <16 x i32> %rdx.minmax.select29, %rdx.shuf30
458*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
459*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 0
460*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 1
461*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i32 %rdx.minmax.select29.elt, i32 %rdx.shuf30.elt
462*9880d681SAndroid Build Coastguard Worker  ret i32 %r
463*9880d681SAndroid Build Coastguard Worker}
464*9880d681SAndroid Build Coastguard Worker
465*9880d681SAndroid Build Coastguard Workerdefine i16 @oversized_smin_256(<16 x i16>* nocapture readonly %arr)  {
466*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_smin_256
467*9880d681SAndroid Build Coastguard Worker; CHECK: smin [[V0:v[0-9]+]].8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
468*9880d681SAndroid Build Coastguard Worker; CHECK: sminv {{h[0-9]+}}, [[V0]]
469*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select = load <16 x i16>, <16 x i16>* %arr
470*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i16> %rdx.minmax.select, <16 x i16> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
471*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp slt <16 x i16> %rdx.minmax.select, %rdx.shuf
472*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i16> %rdx.minmax.select, <16 x i16> %rdx.shuf
473*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i16> %rdx.minmax.select23, <16 x i16> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
474*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp slt <16 x i16> %rdx.minmax.select23, %rdx.shuf24
475*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i16> %rdx.minmax.select23, <16 x i16> %rdx.shuf24
476*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i16> %rdx.minmax.select26, <16 x i16> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
477*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp slt <16 x i16> %rdx.minmax.select26, %rdx.shuf27
478*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i16> %rdx.minmax.select26, <16 x i16> %rdx.shuf27
479*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i16> %rdx.minmax.select29, <16 x i16> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
480*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp slt <16 x i16> %rdx.minmax.select29, %rdx.shuf30
481*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
482*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 0
483*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i16> %rdx.minmax.select29, i32 1
484*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i16 %rdx.minmax.select29.elt, i16 %rdx.shuf30.elt
485*9880d681SAndroid Build Coastguard Worker  ret i16 %r
486*9880d681SAndroid Build Coastguard Worker}
487*9880d681SAndroid Build Coastguard Worker
488*9880d681SAndroid Build Coastguard Workerdefine i32 @oversized_smin_512(<16 x i32>* nocapture readonly %arr)  {
489*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: oversized_smin_512
490*9880d681SAndroid Build Coastguard Worker; CHECK: smin v
491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smin v
492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smin [[V0:v[0-9]+]].4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
493*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sminv {{s[0-9]+}}, [[V0]]
494*9880d681SAndroid Build Coastguard Worker  %arr.load = load <16 x i32>, <16 x i32>* %arr
495*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i32> %arr.load, <16 x i32> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
496*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp22 = icmp slt <16 x i32> %arr.load, %rdx.shuf
497*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select23 = select <16 x i1> %rdx.minmax.cmp22, <16 x i32> %arr.load, <16 x i32> %rdx.shuf
498*9880d681SAndroid Build Coastguard Worker  %rdx.shuf24 = shufflevector <16 x i32> %rdx.minmax.select23, <16 x i32> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
499*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp25 = icmp slt <16 x i32> %rdx.minmax.select23, %rdx.shuf24
500*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select26 = select <16 x i1> %rdx.minmax.cmp25, <16 x i32> %rdx.minmax.select23, <16 x i32> %rdx.shuf24
501*9880d681SAndroid Build Coastguard Worker  %rdx.shuf27 = shufflevector <16 x i32> %rdx.minmax.select26, <16 x i32> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
502*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp28 = icmp slt <16 x i32> %rdx.minmax.select26, %rdx.shuf27
503*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29 = select <16 x i1> %rdx.minmax.cmp28, <16 x i32> %rdx.minmax.select26, <16 x i32> %rdx.shuf27
504*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30 = shufflevector <16 x i32> %rdx.minmax.select29, <16 x i32> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
505*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31 = icmp slt <16 x i32> %rdx.minmax.select29, %rdx.shuf30
506*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.cmp31.elt = extractelement <16 x i1> %rdx.minmax.cmp31, i32 0
507*9880d681SAndroid Build Coastguard Worker  %rdx.minmax.select29.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 0
508*9880d681SAndroid Build Coastguard Worker  %rdx.shuf30.elt = extractelement <16 x i32> %rdx.minmax.select29, i32 1
509*9880d681SAndroid Build Coastguard Worker  %r = select i1 %rdx.minmax.cmp31.elt, i32 %rdx.minmax.select29.elt, i32 %rdx.shuf30.elt
510*9880d681SAndroid Build Coastguard Worker  ret i32 %r
511*9880d681SAndroid Build Coastguard Worker}
512