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