1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=dsp < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_eq_: 4*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}} 5*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $6, $7 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_eq_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 10*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 11*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 12*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 13*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <2 x i16> %0, %1 14*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 15*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 16*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 17*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_lt_: 21*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5 22*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $6, $7 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 25*9880d681SAndroid Build Coastguard Workerentry: 26*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 27*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 28*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 29*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 30*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt <2 x i16> %0, %1 31*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 32*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 33*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 34*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_le_: 38*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5 39*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $6, $7 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 42*9880d681SAndroid Build Coastguard Workerentry: 43*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 44*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 45*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 46*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 47*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle <2 x i16> %0, %1 48*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 49*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 50*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 51*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_ne_: 55*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}} 56*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $7, $6 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_ne_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 59*9880d681SAndroid Build Coastguard Workerentry: 60*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 61*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 62*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 63*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 64*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne <2 x i16> %0, %1 65*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 66*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 67*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 68*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_gt_: 72*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5 73*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $7, $6 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 76*9880d681SAndroid Build Coastguard Workerentry: 77*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 78*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 79*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 80*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 81*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <2 x i16> %0, %1 82*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 83*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 84*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 85*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2q15_ge_: 89*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5 90*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, $7, $6 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2q15_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 93*9880d681SAndroid Build Coastguard Workerentry: 94*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 95*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 96*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 97*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 98*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge <2 x i16> %0, %1 99*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 100*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 101*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 102*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_eq_: 106*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}} 107*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $6, $7 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_eq_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 110*9880d681SAndroid Build Coastguard Workerentry: 111*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 112*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 113*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 114*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 115*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <4 x i8> %0, %1 116*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 117*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 118*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 119*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_lt_: 123*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5 124*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $6, $7 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 127*9880d681SAndroid Build Coastguard Workerentry: 128*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 129*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 130*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 131*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 132*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult <4 x i8> %0, %1 133*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 134*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 135*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 136*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_le_: 140*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5 141*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $6, $7 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 144*9880d681SAndroid Build Coastguard Workerentry: 145*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 146*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 147*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 148*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 149*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule <4 x i8> %0, %1 150*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 151*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 152*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 153*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 154*9880d681SAndroid Build Coastguard Worker} 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_ne_: 157*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}} 158*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $7, $6 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_ne_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 161*9880d681SAndroid Build Coastguard Workerentry: 162*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 163*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 164*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 165*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 166*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne <4 x i8> %0, %1 167*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 168*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 169*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 170*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_gt_: 174*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5 175*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $7, $6 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 178*9880d681SAndroid Build Coastguard Workerentry: 179*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 180*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 181*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 182*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 183*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt <4 x i8> %0, %1 184*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 185*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 186*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 187*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4ui8_ge_: 191*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5 192*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, $7, $6 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4ui8_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 195*9880d681SAndroid Build Coastguard Workerentry: 196*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 197*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 198*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 199*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 200*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge <4 x i8> %0, %1 201*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 202*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 203*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 204*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_lt_: 208*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 209*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 212*9880d681SAndroid Build Coastguard Workerentry: 213*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 214*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 215*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 216*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 217*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult <2 x i16> %0, %1 218*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 219*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 220*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 221*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 222*9880d681SAndroid Build Coastguard Worker} 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_le_: 225*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 226*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 229*9880d681SAndroid Build Coastguard Workerentry: 230*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 231*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 232*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 233*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 234*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule <2 x i16> %0, %1 235*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 236*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 237*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 238*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_gt_: 242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 243*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 244*9880d681SAndroid Build Coastguard Worker 245*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 246*9880d681SAndroid Build Coastguard Workerentry: 247*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 248*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 249*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 250*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 251*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt <2 x i16> %0, %1 252*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 253*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 254*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 255*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 256*9880d681SAndroid Build Coastguard Worker} 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v2ui16_ge_: 259*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 260*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v2ui16_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 263*9880d681SAndroid Build Coastguard Workerentry: 264*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 265*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 266*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <2 x i16> 267*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <2 x i16> 268*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge <2 x i16> %0, %1 269*9880d681SAndroid Build Coastguard Worker %or = select <2 x i1> %cmp, <2 x i16> %2, <2 x i16> %3 270*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i16> %or to i32 271*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 272*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_lt_: 276*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 277*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_lt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 280*9880d681SAndroid Build Coastguard Workerentry: 281*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 282*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 283*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 284*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 285*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt <4 x i8> %0, %1 286*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 287*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 288*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 289*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_le_: 293*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 294*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_le_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 297*9880d681SAndroid Build Coastguard Workerentry: 298*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 299*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 300*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 301*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 302*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle <4 x i8> %0, %1 303*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 304*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 305*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 306*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 307*9880d681SAndroid Build Coastguard Worker} 308*9880d681SAndroid Build Coastguard Worker 309*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_gt_: 310*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 311*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_gt_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 314*9880d681SAndroid Build Coastguard Workerentry: 315*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 316*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 317*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 318*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 319*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <4 x i8> %0, %1 320*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 321*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 322*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 323*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 324*9880d681SAndroid Build Coastguard Worker} 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: select_v4i8_ge_: 327*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 328*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Workerdefine { i32 } @select_v4i8_ge_(i32 %a0.coerce, i32 %a1.coerce, i32 %a2.coerce, i32 %a3.coerce) { 331*9880d681SAndroid Build Coastguard Workerentry: 332*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 333*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 334*9880d681SAndroid Build Coastguard Worker %2 = bitcast i32 %a2.coerce to <4 x i8> 335*9880d681SAndroid Build Coastguard Worker %3 = bitcast i32 %a3.coerce to <4 x i8> 336*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge <4 x i8> %0, %1 337*9880d681SAndroid Build Coastguard Worker %or = select <4 x i1> %cmp, <4 x i8> %2, <4 x i8> %3 338*9880d681SAndroid Build Coastguard Worker %4 = bitcast <4 x i8> %or to i32 339*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %4, 0 340*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 341*9880d681SAndroid Build Coastguard Worker} 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_eq_: 344*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}} 345*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_eq_(i32 %a0.coerce, i32 %a1.coerce) { 348*9880d681SAndroid Build Coastguard Workerentry: 349*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 350*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 351*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <2 x i16> %0, %1 352*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 353*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 354*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 355*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 356*9880d681SAndroid Build Coastguard Worker} 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_lt_: 359*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5 360*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_lt_(i32 %a0.coerce, i32 %a1.coerce) { 363*9880d681SAndroid Build Coastguard Workerentry: 364*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 365*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 366*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt <2 x i16> %0, %1 367*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 368*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 369*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 370*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 371*9880d681SAndroid Build Coastguard Worker} 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_le_: 374*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5 375*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_le_(i32 %a0.coerce, i32 %a1.coerce) { 378*9880d681SAndroid Build Coastguard Workerentry: 379*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 380*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 381*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle <2 x i16> %0, %1 382*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 383*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 384*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 385*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 386*9880d681SAndroid Build Coastguard Worker} 387*9880d681SAndroid Build Coastguard Worker 388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_ne_: 389*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.eq.ph ${{[0-9]+}}, ${{[0-9]+}} 390*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 391*9880d681SAndroid Build Coastguard Worker 392*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_ne_(i32 %a0.coerce, i32 %a1.coerce) { 393*9880d681SAndroid Build Coastguard Workerentry: 394*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 395*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 396*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne <2 x i16> %0, %1 397*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 398*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 399*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 400*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 401*9880d681SAndroid Build Coastguard Worker} 402*9880d681SAndroid Build Coastguard Worker 403*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_gt_: 404*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.le.ph $4, $5 405*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 406*9880d681SAndroid Build Coastguard Worker 407*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_gt_(i32 %a0.coerce, i32 %a1.coerce) { 408*9880d681SAndroid Build Coastguard Workerentry: 409*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 410*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 411*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <2 x i16> %0, %1 412*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 413*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 414*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 415*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 416*9880d681SAndroid Build Coastguard Worker} 417*9880d681SAndroid Build Coastguard Worker 418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2q15_ge_: 419*9880d681SAndroid Build Coastguard Worker; CHECK: cmp.lt.ph $4, $5 420*9880d681SAndroid Build Coastguard Worker; CHECK: pick.ph ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2q15_ge_(i32 %a0.coerce, i32 %a1.coerce) { 423*9880d681SAndroid Build Coastguard Workerentry: 424*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 425*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 426*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge <2 x i16> %0, %1 427*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 428*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 429*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 430*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 431*9880d681SAndroid Build Coastguard Worker} 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_eq_: 434*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}} 435*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 436*9880d681SAndroid Build Coastguard Worker 437*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_eq_(i32 %a0.coerce, i32 %a1.coerce) { 438*9880d681SAndroid Build Coastguard Workerentry: 439*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 440*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 441*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <4 x i8> %0, %1 442*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 443*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 444*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 445*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 446*9880d681SAndroid Build Coastguard Worker} 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_lt_: 449*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5 450*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_lt_(i32 %a0.coerce, i32 %a1.coerce) { 453*9880d681SAndroid Build Coastguard Workerentry: 454*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 455*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 456*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult <4 x i8> %0, %1 457*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 458*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 459*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 460*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 461*9880d681SAndroid Build Coastguard Worker} 462*9880d681SAndroid Build Coastguard Worker 463*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_le_: 464*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5 465*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 466*9880d681SAndroid Build Coastguard Worker 467*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_le_(i32 %a0.coerce, i32 %a1.coerce) { 468*9880d681SAndroid Build Coastguard Workerentry: 469*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 470*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 471*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule <4 x i8> %0, %1 472*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 473*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 474*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 475*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_ne_: 479*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.eq.qb ${{[0-9]+}}, ${{[0-9]+}} 480*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 481*9880d681SAndroid Build Coastguard Worker 482*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_ne_(i32 %a0.coerce, i32 %a1.coerce) { 483*9880d681SAndroid Build Coastguard Workerentry: 484*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 485*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 486*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne <4 x i8> %0, %1 487*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 488*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 489*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 490*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 491*9880d681SAndroid Build Coastguard Worker} 492*9880d681SAndroid Build Coastguard Worker 493*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_gt_: 494*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.le.qb $4, $5 495*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 496*9880d681SAndroid Build Coastguard Worker 497*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_gt_(i32 %a0.coerce, i32 %a1.coerce) { 498*9880d681SAndroid Build Coastguard Workerentry: 499*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 500*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 501*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt <4 x i8> %0, %1 502*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 503*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 504*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 505*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 506*9880d681SAndroid Build Coastguard Worker} 507*9880d681SAndroid Build Coastguard Worker 508*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4ui8_ge_: 509*9880d681SAndroid Build Coastguard Worker; CHECK: cmpu.lt.qb $4, $5 510*9880d681SAndroid Build Coastguard Worker; CHECK: pick.qb ${{[0-9]+}}, ${{[a-z0-9]+}}, ${{[a-z0-9]+}} 511*9880d681SAndroid Build Coastguard Worker 512*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4ui8_ge_(i32 %a0.coerce, i32 %a1.coerce) { 513*9880d681SAndroid Build Coastguard Workerentry: 514*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 515*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 516*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge <4 x i8> %0, %1 517*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 518*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 519*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 520*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 521*9880d681SAndroid Build Coastguard Worker} 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_lt_: 524*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 525*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 526*9880d681SAndroid Build Coastguard Worker 527*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_lt_(i32 %a0.coerce, i32 %a1.coerce) { 528*9880d681SAndroid Build Coastguard Workerentry: 529*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 530*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 531*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult <2 x i16> %0, %1 532*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 533*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 534*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 535*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 536*9880d681SAndroid Build Coastguard Worker} 537*9880d681SAndroid Build Coastguard Worker 538*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_le_: 539*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 540*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 541*9880d681SAndroid Build Coastguard Worker 542*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_le_(i32 %a0.coerce, i32 %a1.coerce) { 543*9880d681SAndroid Build Coastguard Workerentry: 544*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 545*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 546*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule <2 x i16> %0, %1 547*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 548*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 549*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 550*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 551*9880d681SAndroid Build Coastguard Worker} 552*9880d681SAndroid Build Coastguard Worker 553*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_gt_: 554*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 555*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 556*9880d681SAndroid Build Coastguard Worker 557*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_gt_(i32 %a0.coerce, i32 %a1.coerce) { 558*9880d681SAndroid Build Coastguard Workerentry: 559*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 560*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 561*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt <2 x i16> %0, %1 562*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 563*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 564*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 565*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v2ui16_ge_: 569*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 570*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 571*9880d681SAndroid Build Coastguard Worker 572*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v2ui16_ge_(i32 %a0.coerce, i32 %a1.coerce) { 573*9880d681SAndroid Build Coastguard Workerentry: 574*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <2 x i16> 575*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <2 x i16> 576*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge <2 x i16> %0, %1 577*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %cmp to <2 x i16> 578*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i16> %sext to i32 579*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 580*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 581*9880d681SAndroid Build Coastguard Worker} 582*9880d681SAndroid Build Coastguard Worker 583*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_lt_: 584*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 585*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 586*9880d681SAndroid Build Coastguard Worker 587*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_lt_(i32 %a0.coerce, i32 %a1.coerce) { 588*9880d681SAndroid Build Coastguard Workerentry: 589*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 590*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 591*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt <4 x i8> %0, %1 592*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 593*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 594*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 595*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 596*9880d681SAndroid Build Coastguard Worker} 597*9880d681SAndroid Build Coastguard Worker 598*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_le_: 599*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 600*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 601*9880d681SAndroid Build Coastguard Worker 602*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_le_(i32 %a0.coerce, i32 %a1.coerce) { 603*9880d681SAndroid Build Coastguard Workerentry: 604*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 605*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 606*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle <4 x i8> %0, %1 607*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 608*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 609*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 610*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 611*9880d681SAndroid Build Coastguard Worker} 612*9880d681SAndroid Build Coastguard Worker 613*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_gt_: 614*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 615*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 616*9880d681SAndroid Build Coastguard Worker 617*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_gt_(i32 %a0.coerce, i32 %a1.coerce) { 618*9880d681SAndroid Build Coastguard Workerentry: 619*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 620*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 621*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <4 x i8> %0, %1 622*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 623*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 624*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 625*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 626*9880d681SAndroid Build Coastguard Worker} 627*9880d681SAndroid Build Coastguard Worker 628*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: compare_v4i8_ge_: 629*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmp 630*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pick 631*9880d681SAndroid Build Coastguard Worker 632*9880d681SAndroid Build Coastguard Workerdefine { i32 } @compare_v4i8_ge_(i32 %a0.coerce, i32 %a1.coerce) { 633*9880d681SAndroid Build Coastguard Workerentry: 634*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a0.coerce to <4 x i8> 635*9880d681SAndroid Build Coastguard Worker %1 = bitcast i32 %a1.coerce to <4 x i8> 636*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge <4 x i8> %0, %1 637*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %cmp to <4 x i8> 638*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i8> %sext to i32 639*9880d681SAndroid Build Coastguard Worker %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0 640*9880d681SAndroid Build Coastguard Worker ret { i32 } %.fca.0.insert 641*9880d681SAndroid Build Coastguard Worker} 642