1*9880d681SAndroid Build Coastguard Worker; Test vector intrinsics. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.s390.lcbb(i8 *, i32) 6*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vlbb(i8 *, i32) 7*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vll(i32, i8 *) 8*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vpdi(<2 x i64>, <2 x i64>, i32) 9*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vperm(<16 x i8>, <16 x i8>, <16 x i8>) 10*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vpksh(<8 x i16>, <8 x i16>) 11*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vpksf(<4 x i32>, <4 x i32>) 12*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vpksg(<2 x i64>, <2 x i64>) 13*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vpkshs(<8 x i16>, <8 x i16>) 14*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vpksfs(<4 x i32>, <4 x i32>) 15*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vpksgs(<2 x i64>, <2 x i64>) 16*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vpklsh(<8 x i16>, <8 x i16>) 17*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vpklsf(<4 x i32>, <4 x i32>) 18*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vpklsg(<2 x i64>, <2 x i64>) 19*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vpklshs(<8 x i16>, <8 x i16>) 20*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vpklsfs(<4 x i32>, <4 x i32>) 21*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vpklsgs(<2 x i64>, <2 x i64>) 22*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.s390.vstl(<16 x i8>, i32, i8 *) 23*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vuphb(<16 x i8>) 24*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vuphh(<8 x i16>) 25*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vuphf(<4 x i32>) 26*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vuplhb(<16 x i8>) 27*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vuplhh(<8 x i16>) 28*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vuplhf(<4 x i32>) 29*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vuplb(<16 x i8>) 30*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vuplhw(<8 x i16>) 31*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vuplf(<4 x i32>) 32*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vupllb(<16 x i8>) 33*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vupllh(<8 x i16>) 34*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vupllf(<4 x i32>) 35*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vaccb(<16 x i8>, <16 x i8>) 36*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vacch(<8 x i16>, <8 x i16>) 37*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vaccf(<4 x i32>, <4 x i32>) 38*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vaccg(<2 x i64>, <2 x i64>) 39*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vaq(<16 x i8>, <16 x i8>) 40*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vacq(<16 x i8>, <16 x i8>, <16 x i8>) 41*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vaccq(<16 x i8>, <16 x i8>) 42*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vacccq(<16 x i8>, <16 x i8>, <16 x i8>) 43*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vavgb(<16 x i8>, <16 x i8>) 44*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vavgh(<8 x i16>, <8 x i16>) 45*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vavgf(<4 x i32>, <4 x i32>) 46*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vavgg(<2 x i64>, <2 x i64>) 47*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vavglb(<16 x i8>, <16 x i8>) 48*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vavglh(<8 x i16>, <8 x i16>) 49*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vavglf(<4 x i32>, <4 x i32>) 50*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vavglg(<2 x i64>, <2 x i64>) 51*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vcksm(<4 x i32>, <4 x i32>) 52*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vgfmb(<16 x i8>, <16 x i8>) 53*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vgfmh(<8 x i16>, <8 x i16>) 54*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vgfmf(<4 x i32>, <4 x i32>) 55*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vgfmg(<2 x i64>, <2 x i64>) 56*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vgfmab(<16 x i8>, <16 x i8>, <8 x i16>) 57*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vgfmah(<8 x i16>, <8 x i16>, <4 x i32>) 58*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vgfmaf(<4 x i32>, <4 x i32>, <2 x i64>) 59*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vgfmag(<2 x i64>, <2 x i64>, <16 x i8>) 60*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmahb(<16 x i8>, <16 x i8>, <16 x i8>) 61*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmahh(<8 x i16>, <8 x i16>, <8 x i16>) 62*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmahf(<4 x i32>, <4 x i32>, <4 x i32>) 63*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmalhb(<16 x i8>, <16 x i8>, <16 x i8>) 64*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmalhh(<8 x i16>, <8 x i16>, <8 x i16>) 65*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmalhf(<4 x i32>, <4 x i32>, <4 x i32>) 66*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmaeb(<16 x i8>, <16 x i8>, <8 x i16>) 67*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaeh(<8 x i16>, <8 x i16>, <4 x i32>) 68*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmaef(<4 x i32>, <4 x i32>, <2 x i64>) 69*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmaleb(<16 x i8>, <16 x i8>, <8 x i16>) 70*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaleh(<8 x i16>, <8 x i16>, <4 x i32>) 71*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmalef(<4 x i32>, <4 x i32>, <2 x i64>) 72*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmaob(<16 x i8>, <16 x i8>, <8 x i16>) 73*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaoh(<8 x i16>, <8 x i16>, <4 x i32>) 74*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmaof(<4 x i32>, <4 x i32>, <2 x i64>) 75*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmalob(<16 x i8>, <16 x i8>, <8 x i16>) 76*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaloh(<8 x i16>, <8 x i16>, <4 x i32>) 77*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmalof(<4 x i32>, <4 x i32>, <2 x i64>) 78*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmhb(<16 x i8>, <16 x i8>) 79*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmhh(<8 x i16>, <8 x i16>) 80*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmhf(<4 x i32>, <4 x i32>) 81*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmlhb(<16 x i8>, <16 x i8>) 82*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmlhh(<8 x i16>, <8 x i16>) 83*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmlhf(<4 x i32>, <4 x i32>) 84*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmeb(<16 x i8>, <16 x i8>) 85*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmeh(<8 x i16>, <8 x i16>) 86*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmef(<4 x i32>, <4 x i32>) 87*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmleb(<16 x i8>, <16 x i8>) 88*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmleh(<8 x i16>, <8 x i16>) 89*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmlef(<4 x i32>, <4 x i32>) 90*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmob(<16 x i8>, <16 x i8>) 91*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmoh(<8 x i16>, <8 x i16>) 92*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmof(<4 x i32>, <4 x i32>) 93*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmlob(<16 x i8>, <16 x i8>) 94*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmloh(<8 x i16>, <8 x i16>) 95*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmlof(<4 x i32>, <4 x i32>) 96*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.verllvb(<16 x i8>, <16 x i8>) 97*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.verllvh(<8 x i16>, <8 x i16>) 98*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.verllvf(<4 x i32>, <4 x i32>) 99*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.verllvg(<2 x i64>, <2 x i64>) 100*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.verllb(<16 x i8>, i32) 101*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.verllh(<8 x i16>, i32) 102*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.verllf(<4 x i32>, i32) 103*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.verllg(<2 x i64>, i32) 104*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.verimb(<16 x i8>, <16 x i8>, <16 x i8>, i32) 105*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.verimh(<8 x i16>, <8 x i16>, <8 x i16>, i32) 106*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.verimf(<4 x i32>, <4 x i32>, <4 x i32>, i32) 107*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.verimg(<2 x i64>, <2 x i64>, <2 x i64>, i32) 108*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsl(<16 x i8>, <16 x i8>) 109*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vslb(<16 x i8>, <16 x i8>) 110*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsra(<16 x i8>, <16 x i8>) 111*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsrab(<16 x i8>, <16 x i8>) 112*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsrl(<16 x i8>, <16 x i8>) 113*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsrlb(<16 x i8>, <16 x i8>) 114*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsldb(<16 x i8>, <16 x i8>, i32) 115*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vscbib(<16 x i8>, <16 x i8>) 116*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vscbih(<8 x i16>, <8 x i16>) 117*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vscbif(<4 x i32>, <4 x i32>) 118*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vscbig(<2 x i64>, <2 x i64>) 119*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsq(<16 x i8>, <16 x i8>) 120*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsbiq(<16 x i8>, <16 x i8>, <16 x i8>) 121*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vscbiq(<16 x i8>, <16 x i8>) 122*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsbcbiq(<16 x i8>, <16 x i8>, <16 x i8>) 123*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vsumb(<16 x i8>, <16 x i8>) 124*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vsumh(<8 x i16>, <8 x i16>) 125*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vsumgh(<8 x i16>, <8 x i16>) 126*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vsumgf(<4 x i32>, <4 x i32>) 127*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsumqf(<4 x i32>, <4 x i32>) 128*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsumqg(<2 x i64>, <2 x i64>) 129*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.s390.vtm(<16 x i8>, <16 x i8>) 130*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8>, <16 x i8>) 131*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16>, <8 x i16>) 132*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32>, <4 x i32>) 133*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64>, <2 x i64>) 134*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8>, <16 x i8>) 135*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16>, <8 x i16>) 136*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32>, <4 x i32>) 137*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64>, <2 x i64>) 138*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8>, <16 x i8>) 139*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16>, <8 x i16>) 140*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32>, <4 x i32>) 141*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64>, <2 x i64>) 142*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfaeb(<16 x i8>, <16 x i8>, i32) 143*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfaeh(<8 x i16>, <8 x i16>, i32) 144*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfaef(<4 x i32>, <4 x i32>, i32) 145*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfaebs(<16 x i8>, <16 x i8>, i32) 146*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfaehs(<8 x i16>, <8 x i16>, i32) 147*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfaefs(<4 x i32>, <4 x i32>, i32) 148*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfaezb(<16 x i8>, <16 x i8>, i32) 149*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfaezh(<8 x i16>, <8 x i16>, i32) 150*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfaezf(<4 x i32>, <4 x i32>, i32) 151*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfaezbs(<16 x i8>, <16 x i8>, i32) 152*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfaezhs(<8 x i16>, <8 x i16>, i32) 153*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfaezfs(<4 x i32>, <4 x i32>, i32) 154*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfeeb(<16 x i8>, <16 x i8>) 155*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfeeh(<8 x i16>, <8 x i16>) 156*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfeef(<4 x i32>, <4 x i32>) 157*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfeebs(<16 x i8>, <16 x i8>) 158*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfeehs(<8 x i16>, <8 x i16>) 159*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfeefs(<4 x i32>, <4 x i32>) 160*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfeezb(<16 x i8>, <16 x i8>) 161*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfeezh(<8 x i16>, <8 x i16>) 162*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfeezf(<4 x i32>, <4 x i32>) 163*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfeezbs(<16 x i8>, <16 x i8>) 164*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfeezhs(<8 x i16>, <8 x i16>) 165*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfeezfs(<4 x i32>, <4 x i32>) 166*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfeneb(<16 x i8>, <16 x i8>) 167*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfeneh(<8 x i16>, <8 x i16>) 168*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfenef(<4 x i32>, <4 x i32>) 169*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfenebs(<16 x i8>, <16 x i8>) 170*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfenehs(<8 x i16>, <8 x i16>) 171*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfenefs(<4 x i32>, <4 x i32>) 172*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfenezb(<16 x i8>, <16 x i8>) 173*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfenezh(<8 x i16>, <8 x i16>) 174*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfenezf(<4 x i32>, <4 x i32>) 175*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfenezbs(<16 x i8>, <16 x i8>) 176*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfenezhs(<8 x i16>, <8 x i16>) 177*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfenezfs(<4 x i32>, <4 x i32>) 178*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vistrb(<16 x i8>) 179*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vistrh(<8 x i16>) 180*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vistrf(<4 x i32>) 181*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vistrbs(<16 x i8>) 182*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vistrhs(<8 x i16>) 183*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vistrfs(<4 x i32>) 184*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vstrcb(<16 x i8>, <16 x i8>, <16 x i8>, i32) 185*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vstrch(<8 x i16>, <8 x i16>, <8 x i16>, i32) 186*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vstrcf(<4 x i32>, <4 x i32>, <4 x i32>, i32) 187*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vstrcbs(<16 x i8>, <16 x i8>, <16 x i8>, 188*9880d681SAndroid Build Coastguard Worker i32) 189*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vstrchs(<8 x i16>, <8 x i16>, <8 x i16>, 190*9880d681SAndroid Build Coastguard Worker i32) 191*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vstrcfs(<4 x i32>, <4 x i32>, <4 x i32>, 192*9880d681SAndroid Build Coastguard Worker i32) 193*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vstrczb(<16 x i8>, <16 x i8>, <16 x i8>, i32) 194*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vstrczh(<8 x i16>, <8 x i16>, <8 x i16>, i32) 195*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vstrczf(<4 x i32>, <4 x i32>, <4 x i32>, i32) 196*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vstrczbs(<16 x i8>, <16 x i8>, <16 x i8>, 197*9880d681SAndroid Build Coastguard Worker i32) 198*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vstrczhs(<8 x i16>, <8 x i16>, <8 x i16>, 199*9880d681SAndroid Build Coastguard Worker i32) 200*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vstrczfs(<4 x i32>, <4 x i32>, <4 x i32>, 201*9880d681SAndroid Build Coastguard Worker i32) 202*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double>, <2 x double>) 203*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double>, <2 x double>) 204*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double>, <2 x double>) 205*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vftcidb(<2 x double>, i32) 206*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.s390.vfidb(<2 x double>, i32, i32) 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; LCBB with the lowest M3 operand. 209*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb1(i8 *%ptr) { 210*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb1: 211*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 0(%r2), 0 212*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 213*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 0) 214*9880d681SAndroid Build Coastguard Worker ret i32 %res 215*9880d681SAndroid Build Coastguard Worker} 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker; LCBB with the highest M3 operand. 218*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb2(i8 *%ptr) { 219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb2: 220*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 0(%r2), 15 221*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 222*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 15) 223*9880d681SAndroid Build Coastguard Worker ret i32 %res 224*9880d681SAndroid Build Coastguard Worker} 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker; LCBB with a displacement and index. 227*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb3(i8 *%base, i64 %index) { 228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb3: 229*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 4095({{%r2,%r3|%r3,%r2}}), 4 230*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 231*9880d681SAndroid Build Coastguard Worker %add = add i64 %index, 4095 232*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 %add 233*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 4) 234*9880d681SAndroid Build Coastguard Worker ret i32 %res 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker; LCBB with an out-of-range displacement. 238*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb4(i8 *%base) { 239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb4: 240*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 0({{%r[1-5]}}), 5 241*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 242*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 4096 243*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 5) 244*9880d681SAndroid Build Coastguard Worker ret i32 %res 245*9880d681SAndroid Build Coastguard Worker} 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker; VLBB with the lowest M3 operand. 248*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb1(i8 *%ptr) { 249*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb1: 250*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 0(%r2), 0 251*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 252*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 0) 253*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 254*9880d681SAndroid Build Coastguard Worker} 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker; VLBB with the highest M3 operand. 257*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb2(i8 *%ptr) { 258*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb2: 259*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 0(%r2), 15 260*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 261*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 15) 262*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 263*9880d681SAndroid Build Coastguard Worker} 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker; VLBB with a displacement and index. 266*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb3(i8 *%base, i64 %index) { 267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb3: 268*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 4095({{%r2,%r3|%r3,%r2}}), 4 269*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 270*9880d681SAndroid Build Coastguard Worker %add = add i64 %index, 4095 271*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 %add 272*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 4) 273*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 274*9880d681SAndroid Build Coastguard Worker} 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Worker; VLBB with an out-of-range displacement. 277*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb4(i8 *%base) { 278*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb4: 279*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 0({{%r[1-5]}}), 5 280*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 281*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 4096 282*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 5) 283*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker; VLL with the lowest in-range displacement. 287*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll1(i8 *%ptr, i32 %length) { 288*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll1: 289*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r3, 0(%r2) 290*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 291*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr) 292*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Worker; VLL with the highest in-range displacement. 296*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll2(i8 *%base, i32 %length) { 297*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll2: 298*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r3, 4095(%r2) 299*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 300*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 4095 301*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr) 302*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Worker; VLL with an out-of-range displacementa. 306*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll3(i8 *%base, i32 %length) { 307*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll3: 308*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r3, 0({{%r[1-5]}}) 309*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 310*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 4096 311*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr) 312*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 313*9880d681SAndroid Build Coastguard Worker} 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Worker; Check that VLL doesn't allow an index. 316*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll4(i8 *%base, i64 %index, i32 %length) { 317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll4: 318*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r4, 0({{%r[1-5]}}) 319*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 320*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 %index 321*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr) 322*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Worker; VPDI taking element 0 from each half. 326*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpdi1(<2 x i64> %a, <2 x i64> %b) { 327*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpdi1: 328*9880d681SAndroid Build Coastguard Worker; CHECK: vpdi %v24, %v24, %v26, 0 329*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 330*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vpdi(<2 x i64> %a, <2 x i64> %b, i32 0) 331*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 332*9880d681SAndroid Build Coastguard Worker} 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Worker; VPDI taking element 1 from each half. 335*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpdi2(<2 x i64> %a, <2 x i64> %b) { 336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpdi2: 337*9880d681SAndroid Build Coastguard Worker; CHECK: vpdi %v24, %v24, %v26, 10 338*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 339*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vpdi(<2 x i64> %a, <2 x i64> %b, i32 10) 340*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 341*9880d681SAndroid Build Coastguard Worker} 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Worker; VPERM. 344*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vperm(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vperm: 346*9880d681SAndroid Build Coastguard Worker; CHECK: vperm %v24, %v24, %v26, %v28 347*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 348*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vperm(<16 x i8> %a, <16 x i8> %b, 349*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 350*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 351*9880d681SAndroid Build Coastguard Worker} 352*9880d681SAndroid Build Coastguard Worker 353*9880d681SAndroid Build Coastguard Worker; VPKSH. 354*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpksh(<8 x i16> %a, <8 x i16> %b) { 355*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksh: 356*9880d681SAndroid Build Coastguard Worker; CHECK: vpksh %v24, %v24, %v26 357*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 358*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vpksh(<8 x i16> %a, <8 x i16> %b) 359*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 360*9880d681SAndroid Build Coastguard Worker} 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Worker; VPKSF. 363*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpksf(<4 x i32> %a, <4 x i32> %b) { 364*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksf: 365*9880d681SAndroid Build Coastguard Worker; CHECK: vpksf %v24, %v24, %v26 366*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 367*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vpksf(<4 x i32> %a, <4 x i32> %b) 368*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 369*9880d681SAndroid Build Coastguard Worker} 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Worker; VPKSG. 372*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpksg(<2 x i64> %a, <2 x i64> %b) { 373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksg: 374*9880d681SAndroid Build Coastguard Worker; CHECK: vpksg %v24, %v24, %v26 375*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 376*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vpksg(<2 x i64> %a, <2 x i64> %b) 377*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 378*9880d681SAndroid Build Coastguard Worker} 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Worker; VPKSHS with no processing of the result. 381*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpkshs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 382*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpkshs: 383*9880d681SAndroid Build Coastguard Worker; CHECK: vpkshs %v24, %v24, %v26 384*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 385*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 386*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 387*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 388*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vpkshs(<8 x i16> %a, <8 x i16> %b) 389*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 390*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 391*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 392*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 393*9880d681SAndroid Build Coastguard Worker} 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Worker; VPKSHS, storing to %ptr if all values were saturated. 396*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpkshs_all_store(<8 x i16> %a, <8 x i16> %b, i32 *%ptr) { 397*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpkshs_all_store: 398*9880d681SAndroid Build Coastguard Worker; CHECK: vpkshs %v24, %v24, %v26 399*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14 400*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 401*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 402*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vpkshs(<8 x i16> %a, <8 x i16> %b) 403*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 404*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 405*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %cc, 3 406*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Workerstore: 409*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 410*9880d681SAndroid Build Coastguard Worker br label %exit 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Workerexit: 413*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 414*9880d681SAndroid Build Coastguard Worker} 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Worker; VPKSFS with no processing of the result. 417*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpksfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksfs: 419*9880d681SAndroid Build Coastguard Worker; CHECK: vpksfs %v24, %v24, %v26 420*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 421*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 422*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 423*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 424*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vpksfs(<4 x i32> %a, <4 x i32> %b) 425*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 426*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 427*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 428*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 429*9880d681SAndroid Build Coastguard Worker} 430*9880d681SAndroid Build Coastguard Worker 431*9880d681SAndroid Build Coastguard Worker; VPKSFS, storing to %ptr if any values were saturated. 432*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpksfs_any_store(<4 x i32> %a, <4 x i32> %b, i32 *%ptr) { 433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksfs_any_store: 434*9880d681SAndroid Build Coastguard Worker; CHECK: vpksfs %v24, %v24, %v26 435*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14 436*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 437*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 438*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vpksfs(<4 x i32> %a, <4 x i32> %b) 439*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 440*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 441*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %cc, 0 442*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 443*9880d681SAndroid Build Coastguard Worker 444*9880d681SAndroid Build Coastguard Workerstore: 445*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 446*9880d681SAndroid Build Coastguard Worker br label %exit 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Workerexit: 449*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 450*9880d681SAndroid Build Coastguard Worker} 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Worker; VPKSGS with no processing of the result. 453*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpksgs(<2 x i64> %a, <2 x i64> %b, i32 *%ccptr) { 454*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksgs: 455*9880d681SAndroid Build Coastguard Worker; CHECK: vpksgs %v24, %v24, %v26 456*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 457*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 458*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 459*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 460*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vpksgs(<2 x i64> %a, <2 x i64> %b) 461*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 462*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 463*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 464*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 465*9880d681SAndroid Build Coastguard Worker} 466*9880d681SAndroid Build Coastguard Worker 467*9880d681SAndroid Build Coastguard Worker; VPKSGS, storing to %ptr if no elements were saturated 468*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpksgs_none_store(<2 x i64> %a, <2 x i64> %b, 469*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 470*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksgs_none_store: 471*9880d681SAndroid Build Coastguard Worker; CHECK: vpksgs %v24, %v24, %v26 472*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14 473*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 474*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 475*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vpksgs(<2 x i64> %a, <2 x i64> %b) 476*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 477*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 478*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %cc, 0 479*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 480*9880d681SAndroid Build Coastguard Worker 481*9880d681SAndroid Build Coastguard Workerstore: 482*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 483*9880d681SAndroid Build Coastguard Worker br label %exit 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Workerexit: 486*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 487*9880d681SAndroid Build Coastguard Worker} 488*9880d681SAndroid Build Coastguard Worker 489*9880d681SAndroid Build Coastguard Worker; VPKLSH. 490*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpklsh(<8 x i16> %a, <8 x i16> %b) { 491*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsh: 492*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsh %v24, %v24, %v26 493*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 494*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vpklsh(<8 x i16> %a, <8 x i16> %b) 495*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 496*9880d681SAndroid Build Coastguard Worker} 497*9880d681SAndroid Build Coastguard Worker 498*9880d681SAndroid Build Coastguard Worker; VPKLSF. 499*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpklsf(<4 x i32> %a, <4 x i32> %b) { 500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsf: 501*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsf %v24, %v24, %v26 502*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 503*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vpklsf(<4 x i32> %a, <4 x i32> %b) 504*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 505*9880d681SAndroid Build Coastguard Worker} 506*9880d681SAndroid Build Coastguard Worker 507*9880d681SAndroid Build Coastguard Worker; VPKLSG. 508*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpklsg(<2 x i64> %a, <2 x i64> %b) { 509*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsg: 510*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsg %v24, %v24, %v26 511*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 512*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vpklsg(<2 x i64> %a, <2 x i64> %b) 513*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 514*9880d681SAndroid Build Coastguard Worker} 515*9880d681SAndroid Build Coastguard Worker 516*9880d681SAndroid Build Coastguard Worker; VPKLSHS with no processing of the result. 517*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpklshs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklshs: 519*9880d681SAndroid Build Coastguard Worker; CHECK: vpklshs %v24, %v24, %v26 520*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 521*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 522*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 523*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 524*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vpklshs(<8 x i16> %a, <8 x i16> %b) 525*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 526*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 527*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 528*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 529*9880d681SAndroid Build Coastguard Worker} 530*9880d681SAndroid Build Coastguard Worker 531*9880d681SAndroid Build Coastguard Worker; VPKLSHS, storing to %ptr if all values were saturated. 532*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpklshs_all_store(<8 x i16> %a, <8 x i16> %b, 533*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 534*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklshs_all_store: 535*9880d681SAndroid Build Coastguard Worker; CHECK: vpklshs %v24, %v24, %v26 536*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14 537*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 538*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 539*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vpklshs(<8 x i16> %a, <8 x i16> %b) 540*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 541*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 542*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %cc, 3 543*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 544*9880d681SAndroid Build Coastguard Worker 545*9880d681SAndroid Build Coastguard Workerstore: 546*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 547*9880d681SAndroid Build Coastguard Worker br label %exit 548*9880d681SAndroid Build Coastguard Worker 549*9880d681SAndroid Build Coastguard Workerexit: 550*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 551*9880d681SAndroid Build Coastguard Worker} 552*9880d681SAndroid Build Coastguard Worker 553*9880d681SAndroid Build Coastguard Worker; VPKLSFS with no processing of the result. 554*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpklsfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 555*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsfs: 556*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsfs %v24, %v24, %v26 557*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 558*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 559*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 560*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 561*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vpklsfs(<4 x i32> %a, <4 x i32> %b) 562*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 563*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 564*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 565*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Worker; VPKLSFS, storing to %ptr if any values were saturated. 569*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpklsfs_any_store(<4 x i32> %a, <4 x i32> %b, 570*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 571*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsfs_any_store: 572*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsfs %v24, %v24, %v26 573*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14 574*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 575*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 576*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vpklsfs(<4 x i32> %a, <4 x i32> %b) 577*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 578*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 579*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %cc, 0 580*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 581*9880d681SAndroid Build Coastguard Worker 582*9880d681SAndroid Build Coastguard Workerstore: 583*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 584*9880d681SAndroid Build Coastguard Worker br label %exit 585*9880d681SAndroid Build Coastguard Worker 586*9880d681SAndroid Build Coastguard Workerexit: 587*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 588*9880d681SAndroid Build Coastguard Worker} 589*9880d681SAndroid Build Coastguard Worker 590*9880d681SAndroid Build Coastguard Worker; VPKLSGS with no processing of the result. 591*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpklsgs(<2 x i64> %a, <2 x i64> %b, i32 *%ccptr) { 592*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsgs: 593*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsgs %v24, %v24, %v26 594*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 595*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 596*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 597*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 598*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vpklsgs(<2 x i64> %a, <2 x i64> %b) 599*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 600*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 601*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 602*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 603*9880d681SAndroid Build Coastguard Worker} 604*9880d681SAndroid Build Coastguard Worker 605*9880d681SAndroid Build Coastguard Worker; VPKLSGS, storing to %ptr if no elements were saturated 606*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpklsgs_none_store(<2 x i64> %a, <2 x i64> %b, 607*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 608*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsgs_none_store: 609*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsgs %v24, %v24, %v26 610*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14 611*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 612*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 613*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vpklsgs(<2 x i64> %a, <2 x i64> %b) 614*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 615*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 616*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %cc, 0 617*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 618*9880d681SAndroid Build Coastguard Worker 619*9880d681SAndroid Build Coastguard Workerstore: 620*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 621*9880d681SAndroid Build Coastguard Worker br label %exit 622*9880d681SAndroid Build Coastguard Worker 623*9880d681SAndroid Build Coastguard Workerexit: 624*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 625*9880d681SAndroid Build Coastguard Worker} 626*9880d681SAndroid Build Coastguard Worker 627*9880d681SAndroid Build Coastguard Worker; VSTL with the lowest in-range displacement. 628*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl1(<16 x i8> %vec, i8 *%ptr, i32 %length) { 629*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl1: 630*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r3, 0(%r2) 631*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 632*9880d681SAndroid Build Coastguard Worker call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr) 633*9880d681SAndroid Build Coastguard Worker ret void 634*9880d681SAndroid Build Coastguard Worker} 635*9880d681SAndroid Build Coastguard Worker 636*9880d681SAndroid Build Coastguard Worker; VSTL with the highest in-range displacement. 637*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl2(<16 x i8> %vec, i8 *%base, i32 %length) { 638*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl2: 639*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r3, 4095(%r2) 640*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 641*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 4095 642*9880d681SAndroid Build Coastguard Worker call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr) 643*9880d681SAndroid Build Coastguard Worker ret void 644*9880d681SAndroid Build Coastguard Worker} 645*9880d681SAndroid Build Coastguard Worker 646*9880d681SAndroid Build Coastguard Worker; VSTL with an out-of-range displacement. 647*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl3(<16 x i8> %vec, i8 *%base, i32 %length) { 648*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl3: 649*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r3, 0({{%r[1-5]}}) 650*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 651*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 4096 652*9880d681SAndroid Build Coastguard Worker call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr) 653*9880d681SAndroid Build Coastguard Worker ret void 654*9880d681SAndroid Build Coastguard Worker} 655*9880d681SAndroid Build Coastguard Worker 656*9880d681SAndroid Build Coastguard Worker; Check that VSTL doesn't allow an index. 657*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl4(<16 x i8> %vec, i8 *%base, i64 %index, i32 %length) { 658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl4: 659*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r4, 0({{%r[1-5]}}) 660*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 661*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i8, i8 *%base, i64 %index 662*9880d681SAndroid Build Coastguard Worker call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr) 663*9880d681SAndroid Build Coastguard Worker ret void 664*9880d681SAndroid Build Coastguard Worker} 665*9880d681SAndroid Build Coastguard Worker 666*9880d681SAndroid Build Coastguard Worker; VUPHB. 667*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vuphb(<16 x i8> %a) { 668*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuphb: 669*9880d681SAndroid Build Coastguard Worker; CHECK: vuphb %v24, %v24 670*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 671*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vuphb(<16 x i8> %a) 672*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 673*9880d681SAndroid Build Coastguard Worker} 674*9880d681SAndroid Build Coastguard Worker 675*9880d681SAndroid Build Coastguard Worker; VUPHH. 676*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vuphh(<8 x i16> %a) { 677*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuphh: 678*9880d681SAndroid Build Coastguard Worker; CHECK: vuphh %v24, %v24 679*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 680*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vuphh(<8 x i16> %a) 681*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 682*9880d681SAndroid Build Coastguard Worker} 683*9880d681SAndroid Build Coastguard Worker 684*9880d681SAndroid Build Coastguard Worker; VUPHF. 685*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vuphf(<4 x i32> %a) { 686*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuphf: 687*9880d681SAndroid Build Coastguard Worker; CHECK: vuphf %v24, %v24 688*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 689*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vuphf(<4 x i32> %a) 690*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 691*9880d681SAndroid Build Coastguard Worker} 692*9880d681SAndroid Build Coastguard Worker 693*9880d681SAndroid Build Coastguard Worker; VUPLHB. 694*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vuplhb(<16 x i8> %a) { 695*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhb: 696*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhb %v24, %v24 697*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 698*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vuplhb(<16 x i8> %a) 699*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 700*9880d681SAndroid Build Coastguard Worker} 701*9880d681SAndroid Build Coastguard Worker 702*9880d681SAndroid Build Coastguard Worker; VUPLHH. 703*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vuplhh(<8 x i16> %a) { 704*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhh: 705*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhh %v24, %v24 706*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 707*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vuplhh(<8 x i16> %a) 708*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 709*9880d681SAndroid Build Coastguard Worker} 710*9880d681SAndroid Build Coastguard Worker 711*9880d681SAndroid Build Coastguard Worker; VUPLHF. 712*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vuplhf(<4 x i32> %a) { 713*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhf: 714*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhf %v24, %v24 715*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 716*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vuplhf(<4 x i32> %a) 717*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 718*9880d681SAndroid Build Coastguard Worker} 719*9880d681SAndroid Build Coastguard Worker 720*9880d681SAndroid Build Coastguard Worker; VUPLB. 721*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vuplb(<16 x i8> %a) { 722*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplb: 723*9880d681SAndroid Build Coastguard Worker; CHECK: vuplb %v24, %v24 724*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 725*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vuplb(<16 x i8> %a) 726*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 727*9880d681SAndroid Build Coastguard Worker} 728*9880d681SAndroid Build Coastguard Worker 729*9880d681SAndroid Build Coastguard Worker; VUPLHW. 730*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vuplhw(<8 x i16> %a) { 731*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhw: 732*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhw %v24, %v24 733*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 734*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vuplhw(<8 x i16> %a) 735*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 736*9880d681SAndroid Build Coastguard Worker} 737*9880d681SAndroid Build Coastguard Worker 738*9880d681SAndroid Build Coastguard Worker; VUPLF. 739*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vuplf(<4 x i32> %a) { 740*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplf: 741*9880d681SAndroid Build Coastguard Worker; CHECK: vuplf %v24, %v24 742*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 743*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vuplf(<4 x i32> %a) 744*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 745*9880d681SAndroid Build Coastguard Worker} 746*9880d681SAndroid Build Coastguard Worker 747*9880d681SAndroid Build Coastguard Worker; VUPLLB. 748*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vupllb(<16 x i8> %a) { 749*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vupllb: 750*9880d681SAndroid Build Coastguard Worker; CHECK: vupllb %v24, %v24 751*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 752*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vupllb(<16 x i8> %a) 753*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 754*9880d681SAndroid Build Coastguard Worker} 755*9880d681SAndroid Build Coastguard Worker 756*9880d681SAndroid Build Coastguard Worker; VUPLLH. 757*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vupllh(<8 x i16> %a) { 758*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vupllh: 759*9880d681SAndroid Build Coastguard Worker; CHECK: vupllh %v24, %v24 760*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 761*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vupllh(<8 x i16> %a) 762*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 763*9880d681SAndroid Build Coastguard Worker} 764*9880d681SAndroid Build Coastguard Worker 765*9880d681SAndroid Build Coastguard Worker; VUPLLF. 766*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vupllf(<4 x i32> %a) { 767*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vupllf: 768*9880d681SAndroid Build Coastguard Worker; CHECK: vupllf %v24, %v24 769*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 770*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vupllf(<4 x i32> %a) 771*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 772*9880d681SAndroid Build Coastguard Worker} 773*9880d681SAndroid Build Coastguard Worker 774*9880d681SAndroid Build Coastguard Worker; VACCB. 775*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vaccb(<16 x i8> %a, <16 x i8> %b) { 776*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccb: 777*9880d681SAndroid Build Coastguard Worker; CHECK: vaccb %v24, %v24, %v26 778*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 779*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vaccb(<16 x i8> %a, <16 x i8> %b) 780*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 781*9880d681SAndroid Build Coastguard Worker} 782*9880d681SAndroid Build Coastguard Worker 783*9880d681SAndroid Build Coastguard Worker; VACCH. 784*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vacch(<8 x i16> %a, <8 x i16> %b) { 785*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vacch: 786*9880d681SAndroid Build Coastguard Worker; CHECK: vacch %v24, %v24, %v26 787*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 788*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vacch(<8 x i16> %a, <8 x i16> %b) 789*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 790*9880d681SAndroid Build Coastguard Worker} 791*9880d681SAndroid Build Coastguard Worker 792*9880d681SAndroid Build Coastguard Worker; VACCF. 793*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vaccf(<4 x i32> %a, <4 x i32> %b) { 794*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccf: 795*9880d681SAndroid Build Coastguard Worker; CHECK: vaccf %v24, %v24, %v26 796*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 797*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vaccf(<4 x i32> %a, <4 x i32> %b) 798*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 799*9880d681SAndroid Build Coastguard Worker} 800*9880d681SAndroid Build Coastguard Worker 801*9880d681SAndroid Build Coastguard Worker; VACCG. 802*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vaccg(<2 x i64> %a, <2 x i64> %b) { 803*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccg: 804*9880d681SAndroid Build Coastguard Worker; CHECK: vaccg %v24, %v24, %v26 805*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 806*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vaccg(<2 x i64> %a, <2 x i64> %b) 807*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 808*9880d681SAndroid Build Coastguard Worker} 809*9880d681SAndroid Build Coastguard Worker 810*9880d681SAndroid Build Coastguard Worker; VAQ. 811*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vaq(<16 x i8> %a, <16 x i8> %b) { 812*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaq: 813*9880d681SAndroid Build Coastguard Worker; CHECK: vaq %v24, %v24, %v26 814*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 815*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vaq(<16 x i8> %a, <16 x i8> %b) 816*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 817*9880d681SAndroid Build Coastguard Worker} 818*9880d681SAndroid Build Coastguard Worker 819*9880d681SAndroid Build Coastguard Worker; VACQ. 820*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vacq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 821*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vacq: 822*9880d681SAndroid Build Coastguard Worker; CHECK: vacq %v24, %v24, %v26, %v28 823*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 824*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vacq(<16 x i8> %a, <16 x i8> %b, 825*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 826*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 827*9880d681SAndroid Build Coastguard Worker} 828*9880d681SAndroid Build Coastguard Worker 829*9880d681SAndroid Build Coastguard Worker; VACCQ. 830*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vaccq(<16 x i8> %a, <16 x i8> %b) { 831*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccq: 832*9880d681SAndroid Build Coastguard Worker; CHECK: vaccq %v24, %v24, %v26 833*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 834*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vaccq(<16 x i8> %a, <16 x i8> %b) 835*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 836*9880d681SAndroid Build Coastguard Worker} 837*9880d681SAndroid Build Coastguard Worker 838*9880d681SAndroid Build Coastguard Worker; VACCCQ. 839*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vacccq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 840*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vacccq: 841*9880d681SAndroid Build Coastguard Worker; CHECK: vacccq %v24, %v24, %v26, %v28 842*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 843*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vacccq(<16 x i8> %a, <16 x i8> %b, 844*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 845*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 846*9880d681SAndroid Build Coastguard Worker} 847*9880d681SAndroid Build Coastguard Worker 848*9880d681SAndroid Build Coastguard Worker; VAVGB. 849*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vavgb(<16 x i8> %a, <16 x i8> %b) { 850*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgb: 851*9880d681SAndroid Build Coastguard Worker; CHECK: vavgb %v24, %v24, %v26 852*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 853*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vavgb(<16 x i8> %a, <16 x i8> %b) 854*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 855*9880d681SAndroid Build Coastguard Worker} 856*9880d681SAndroid Build Coastguard Worker 857*9880d681SAndroid Build Coastguard Worker; VAVGH. 858*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vavgh(<8 x i16> %a, <8 x i16> %b) { 859*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgh: 860*9880d681SAndroid Build Coastguard Worker; CHECK: vavgh %v24, %v24, %v26 861*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 862*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vavgh(<8 x i16> %a, <8 x i16> %b) 863*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 864*9880d681SAndroid Build Coastguard Worker} 865*9880d681SAndroid Build Coastguard Worker 866*9880d681SAndroid Build Coastguard Worker; VAVGF. 867*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vavgf(<4 x i32> %a, <4 x i32> %b) { 868*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgf: 869*9880d681SAndroid Build Coastguard Worker; CHECK: vavgf %v24, %v24, %v26 870*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 871*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vavgf(<4 x i32> %a, <4 x i32> %b) 872*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 873*9880d681SAndroid Build Coastguard Worker} 874*9880d681SAndroid Build Coastguard Worker 875*9880d681SAndroid Build Coastguard Worker; VAVGG. 876*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vavgg(<2 x i64> %a, <2 x i64> %b) { 877*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgg: 878*9880d681SAndroid Build Coastguard Worker; CHECK: vavgg %v24, %v24, %v26 879*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 880*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vavgg(<2 x i64> %a, <2 x i64> %b) 881*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 882*9880d681SAndroid Build Coastguard Worker} 883*9880d681SAndroid Build Coastguard Worker 884*9880d681SAndroid Build Coastguard Worker; VAVGLB. 885*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vavglb(<16 x i8> %a, <16 x i8> %b) { 886*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglb: 887*9880d681SAndroid Build Coastguard Worker; CHECK: vavglb %v24, %v24, %v26 888*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 889*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vavglb(<16 x i8> %a, <16 x i8> %b) 890*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 891*9880d681SAndroid Build Coastguard Worker} 892*9880d681SAndroid Build Coastguard Worker 893*9880d681SAndroid Build Coastguard Worker; VAVGLH. 894*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vavglh(<8 x i16> %a, <8 x i16> %b) { 895*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglh: 896*9880d681SAndroid Build Coastguard Worker; CHECK: vavglh %v24, %v24, %v26 897*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 898*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vavglh(<8 x i16> %a, <8 x i16> %b) 899*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 900*9880d681SAndroid Build Coastguard Worker} 901*9880d681SAndroid Build Coastguard Worker 902*9880d681SAndroid Build Coastguard Worker; VAVGLF. 903*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vavglf(<4 x i32> %a, <4 x i32> %b) { 904*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglf: 905*9880d681SAndroid Build Coastguard Worker; CHECK: vavglf %v24, %v24, %v26 906*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 907*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vavglf(<4 x i32> %a, <4 x i32> %b) 908*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 909*9880d681SAndroid Build Coastguard Worker} 910*9880d681SAndroid Build Coastguard Worker 911*9880d681SAndroid Build Coastguard Worker; VAVGLG. 912*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vavglg(<2 x i64> %a, <2 x i64> %b) { 913*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglg: 914*9880d681SAndroid Build Coastguard Worker; CHECK: vavglg %v24, %v24, %v26 915*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 916*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vavglg(<2 x i64> %a, <2 x i64> %b) 917*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 918*9880d681SAndroid Build Coastguard Worker} 919*9880d681SAndroid Build Coastguard Worker 920*9880d681SAndroid Build Coastguard Worker; VCKSM. 921*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vcksm(<4 x i32> %a, <4 x i32> %b) { 922*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcksm: 923*9880d681SAndroid Build Coastguard Worker; CHECK: vcksm %v24, %v24, %v26 924*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 925*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vcksm(<4 x i32> %a, <4 x i32> %b) 926*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 927*9880d681SAndroid Build Coastguard Worker} 928*9880d681SAndroid Build Coastguard Worker 929*9880d681SAndroid Build Coastguard Worker; VGFMB. 930*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vgfmb(<16 x i8> %a, <16 x i8> %b) { 931*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmb: 932*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmb %v24, %v24, %v26 933*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 934*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vgfmb(<16 x i8> %a, <16 x i8> %b) 935*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 936*9880d681SAndroid Build Coastguard Worker} 937*9880d681SAndroid Build Coastguard Worker 938*9880d681SAndroid Build Coastguard Worker; VGFMH. 939*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vgfmh(<8 x i16> %a, <8 x i16> %b) { 940*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmh: 941*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmh %v24, %v24, %v26 942*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 943*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vgfmh(<8 x i16> %a, <8 x i16> %b) 944*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 945*9880d681SAndroid Build Coastguard Worker} 946*9880d681SAndroid Build Coastguard Worker 947*9880d681SAndroid Build Coastguard Worker; VGFMF. 948*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vgfmf(<4 x i32> %a, <4 x i32> %b) { 949*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmf: 950*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmf %v24, %v24, %v26 951*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 952*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vgfmf(<4 x i32> %a, <4 x i32> %b) 953*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 954*9880d681SAndroid Build Coastguard Worker} 955*9880d681SAndroid Build Coastguard Worker 956*9880d681SAndroid Build Coastguard Worker; VGFMG. 957*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vgfmg(<2 x i64> %a, <2 x i64> %b) { 958*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmg: 959*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmg %v24, %v24, %v26 960*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 961*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vgfmg(<2 x i64> %a, <2 x i64> %b) 962*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 963*9880d681SAndroid Build Coastguard Worker} 964*9880d681SAndroid Build Coastguard Worker 965*9880d681SAndroid Build Coastguard Worker; VGFMAB. 966*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vgfmab(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) { 967*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmab: 968*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmab %v24, %v24, %v26, %v28 969*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 970*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vgfmab(<16 x i8> %a, <16 x i8> %b, 971*9880d681SAndroid Build Coastguard Worker <8 x i16> %c) 972*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 973*9880d681SAndroid Build Coastguard Worker} 974*9880d681SAndroid Build Coastguard Worker 975*9880d681SAndroid Build Coastguard Worker; VGFMAH. 976*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vgfmah(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) { 977*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmah: 978*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmah %v24, %v24, %v26, %v28 979*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 980*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vgfmah(<8 x i16> %a, <8 x i16> %b, 981*9880d681SAndroid Build Coastguard Worker <4 x i32> %c) 982*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 983*9880d681SAndroid Build Coastguard Worker} 984*9880d681SAndroid Build Coastguard Worker 985*9880d681SAndroid Build Coastguard Worker; VGFMAF. 986*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vgfmaf(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) { 987*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmaf: 988*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmaf %v24, %v24, %v26, %v28 989*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 990*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vgfmaf(<4 x i32> %a, <4 x i32> %b, 991*9880d681SAndroid Build Coastguard Worker <2 x i64> %c) 992*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 993*9880d681SAndroid Build Coastguard Worker} 994*9880d681SAndroid Build Coastguard Worker 995*9880d681SAndroid Build Coastguard Worker; VGFMAG. 996*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vgfmag(<2 x i64> %a, <2 x i64> %b, <16 x i8> %c) { 997*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmag: 998*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmag %v24, %v24, %v26, %v28 999*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1000*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vgfmag(<2 x i64> %a, <2 x i64> %b, 1001*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 1002*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1003*9880d681SAndroid Build Coastguard Worker} 1004*9880d681SAndroid Build Coastguard Worker 1005*9880d681SAndroid Build Coastguard Worker; VMAHB. 1006*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmahb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 1007*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmahb: 1008*9880d681SAndroid Build Coastguard Worker; CHECK: vmahb %v24, %v24, %v26, %v28 1009*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1010*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vmahb(<16 x i8> %a, <16 x i8> %b, 1011*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 1012*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1013*9880d681SAndroid Build Coastguard Worker} 1014*9880d681SAndroid Build Coastguard Worker 1015*9880d681SAndroid Build Coastguard Worker; VMAHH. 1016*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmahh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) { 1017*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmahh: 1018*9880d681SAndroid Build Coastguard Worker; CHECK: vmahh %v24, %v24, %v26, %v28 1019*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1020*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmahh(<8 x i16> %a, <8 x i16> %b, 1021*9880d681SAndroid Build Coastguard Worker <8 x i16> %c) 1022*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1023*9880d681SAndroid Build Coastguard Worker} 1024*9880d681SAndroid Build Coastguard Worker 1025*9880d681SAndroid Build Coastguard Worker; VMAHF. 1026*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmahf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) { 1027*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmahf: 1028*9880d681SAndroid Build Coastguard Worker; CHECK: vmahf %v24, %v24, %v26, %v28 1029*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1030*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmahf(<4 x i32> %a, <4 x i32> %b, 1031*9880d681SAndroid Build Coastguard Worker <4 x i32> %c) 1032*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1033*9880d681SAndroid Build Coastguard Worker} 1034*9880d681SAndroid Build Coastguard Worker 1035*9880d681SAndroid Build Coastguard Worker; VMALHB. 1036*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmalhb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 1037*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalhb: 1038*9880d681SAndroid Build Coastguard Worker; CHECK: vmalhb %v24, %v24, %v26, %v28 1039*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1040*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vmalhb(<16 x i8> %a, <16 x i8> %b, 1041*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 1042*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1043*9880d681SAndroid Build Coastguard Worker} 1044*9880d681SAndroid Build Coastguard Worker 1045*9880d681SAndroid Build Coastguard Worker; VMALHH. 1046*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmalhh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) { 1047*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalhh: 1048*9880d681SAndroid Build Coastguard Worker; CHECK: vmalhh %v24, %v24, %v26, %v28 1049*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1050*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmalhh(<8 x i16> %a, <8 x i16> %b, 1051*9880d681SAndroid Build Coastguard Worker <8 x i16> %c) 1052*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1053*9880d681SAndroid Build Coastguard Worker} 1054*9880d681SAndroid Build Coastguard Worker 1055*9880d681SAndroid Build Coastguard Worker; VMALHF. 1056*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmalhf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) { 1057*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalhf: 1058*9880d681SAndroid Build Coastguard Worker; CHECK: vmalhf %v24, %v24, %v26, %v28 1059*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1060*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmalhf(<4 x i32> %a, <4 x i32> %b, 1061*9880d681SAndroid Build Coastguard Worker <4 x i32> %c) 1062*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1063*9880d681SAndroid Build Coastguard Worker} 1064*9880d681SAndroid Build Coastguard Worker 1065*9880d681SAndroid Build Coastguard Worker; VMAEB. 1066*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmaeb(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) { 1067*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaeb: 1068*9880d681SAndroid Build Coastguard Worker; CHECK: vmaeb %v24, %v24, %v26, %v28 1069*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1070*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmaeb(<16 x i8> %a, <16 x i8> %b, 1071*9880d681SAndroid Build Coastguard Worker <8 x i16> %c) 1072*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1073*9880d681SAndroid Build Coastguard Worker} 1074*9880d681SAndroid Build Coastguard Worker 1075*9880d681SAndroid Build Coastguard Worker; VMAEH. 1076*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaeh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) { 1077*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaeh: 1078*9880d681SAndroid Build Coastguard Worker; CHECK: vmaeh %v24, %v24, %v26, %v28 1079*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1080*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmaeh(<8 x i16> %a, <8 x i16> %b, 1081*9880d681SAndroid Build Coastguard Worker <4 x i32> %c) 1082*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1083*9880d681SAndroid Build Coastguard Worker} 1084*9880d681SAndroid Build Coastguard Worker 1085*9880d681SAndroid Build Coastguard Worker; VMAEF. 1086*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmaef(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) { 1087*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaef: 1088*9880d681SAndroid Build Coastguard Worker; CHECK: vmaef %v24, %v24, %v26, %v28 1089*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1090*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmaef(<4 x i32> %a, <4 x i32> %b, 1091*9880d681SAndroid Build Coastguard Worker <2 x i64> %c) 1092*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1093*9880d681SAndroid Build Coastguard Worker} 1094*9880d681SAndroid Build Coastguard Worker 1095*9880d681SAndroid Build Coastguard Worker; VMALEB. 1096*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmaleb(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) { 1097*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaleb: 1098*9880d681SAndroid Build Coastguard Worker; CHECK: vmaleb %v24, %v24, %v26, %v28 1099*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1100*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmaleb(<16 x i8> %a, <16 x i8> %b, 1101*9880d681SAndroid Build Coastguard Worker <8 x i16> %c) 1102*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1103*9880d681SAndroid Build Coastguard Worker} 1104*9880d681SAndroid Build Coastguard Worker 1105*9880d681SAndroid Build Coastguard Worker; VMALEH. 1106*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaleh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) { 1107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaleh: 1108*9880d681SAndroid Build Coastguard Worker; CHECK: vmaleh %v24, %v24, %v26, %v28 1109*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1110*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmaleh(<8 x i16> %a, <8 x i16> %b, 1111*9880d681SAndroid Build Coastguard Worker <4 x i32> %c) 1112*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1113*9880d681SAndroid Build Coastguard Worker} 1114*9880d681SAndroid Build Coastguard Worker 1115*9880d681SAndroid Build Coastguard Worker; VMALEF. 1116*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmalef(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) { 1117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalef: 1118*9880d681SAndroid Build Coastguard Worker; CHECK: vmalef %v24, %v24, %v26, %v28 1119*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1120*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmalef(<4 x i32> %a, <4 x i32> %b, 1121*9880d681SAndroid Build Coastguard Worker <2 x i64> %c) 1122*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1123*9880d681SAndroid Build Coastguard Worker} 1124*9880d681SAndroid Build Coastguard Worker 1125*9880d681SAndroid Build Coastguard Worker; VMAOB. 1126*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmaob(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) { 1127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaob: 1128*9880d681SAndroid Build Coastguard Worker; CHECK: vmaob %v24, %v24, %v26, %v28 1129*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1130*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmaob(<16 x i8> %a, <16 x i8> %b, 1131*9880d681SAndroid Build Coastguard Worker <8 x i16> %c) 1132*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1133*9880d681SAndroid Build Coastguard Worker} 1134*9880d681SAndroid Build Coastguard Worker 1135*9880d681SAndroid Build Coastguard Worker; VMAOH. 1136*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaoh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) { 1137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaoh: 1138*9880d681SAndroid Build Coastguard Worker; CHECK: vmaoh %v24, %v24, %v26, %v28 1139*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1140*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmaoh(<8 x i16> %a, <8 x i16> %b, 1141*9880d681SAndroid Build Coastguard Worker <4 x i32> %c) 1142*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1143*9880d681SAndroid Build Coastguard Worker} 1144*9880d681SAndroid Build Coastguard Worker 1145*9880d681SAndroid Build Coastguard Worker; VMAOF. 1146*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmaof(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) { 1147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaof: 1148*9880d681SAndroid Build Coastguard Worker; CHECK: vmaof %v24, %v24, %v26, %v28 1149*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1150*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmaof(<4 x i32> %a, <4 x i32> %b, 1151*9880d681SAndroid Build Coastguard Worker <2 x i64> %c) 1152*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1153*9880d681SAndroid Build Coastguard Worker} 1154*9880d681SAndroid Build Coastguard Worker 1155*9880d681SAndroid Build Coastguard Worker; VMALOB. 1156*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmalob(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) { 1157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalob: 1158*9880d681SAndroid Build Coastguard Worker; CHECK: vmalob %v24, %v24, %v26, %v28 1159*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1160*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmalob(<16 x i8> %a, <16 x i8> %b, 1161*9880d681SAndroid Build Coastguard Worker <8 x i16> %c) 1162*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1163*9880d681SAndroid Build Coastguard Worker} 1164*9880d681SAndroid Build Coastguard Worker 1165*9880d681SAndroid Build Coastguard Worker; VMALOH. 1166*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaloh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) { 1167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaloh: 1168*9880d681SAndroid Build Coastguard Worker; CHECK: vmaloh %v24, %v24, %v26, %v28 1169*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1170*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmaloh(<8 x i16> %a, <8 x i16> %b, 1171*9880d681SAndroid Build Coastguard Worker <4 x i32> %c) 1172*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1173*9880d681SAndroid Build Coastguard Worker} 1174*9880d681SAndroid Build Coastguard Worker 1175*9880d681SAndroid Build Coastguard Worker; VMALOF. 1176*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmalof(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) { 1177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalof: 1178*9880d681SAndroid Build Coastguard Worker; CHECK: vmalof %v24, %v24, %v26, %v28 1179*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1180*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmalof(<4 x i32> %a, <4 x i32> %b, 1181*9880d681SAndroid Build Coastguard Worker <2 x i64> %c) 1182*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1183*9880d681SAndroid Build Coastguard Worker} 1184*9880d681SAndroid Build Coastguard Worker 1185*9880d681SAndroid Build Coastguard Worker; VMHB. 1186*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmhb(<16 x i8> %a, <16 x i8> %b) { 1187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmhb: 1188*9880d681SAndroid Build Coastguard Worker; CHECK: vmhb %v24, %v24, %v26 1189*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1190*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vmhb(<16 x i8> %a, <16 x i8> %b) 1191*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1192*9880d681SAndroid Build Coastguard Worker} 1193*9880d681SAndroid Build Coastguard Worker 1194*9880d681SAndroid Build Coastguard Worker; VMHH. 1195*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmhh(<8 x i16> %a, <8 x i16> %b) { 1196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmhh: 1197*9880d681SAndroid Build Coastguard Worker; CHECK: vmhh %v24, %v24, %v26 1198*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1199*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmhh(<8 x i16> %a, <8 x i16> %b) 1200*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1201*9880d681SAndroid Build Coastguard Worker} 1202*9880d681SAndroid Build Coastguard Worker 1203*9880d681SAndroid Build Coastguard Worker; VMHF. 1204*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmhf(<4 x i32> %a, <4 x i32> %b) { 1205*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmhf: 1206*9880d681SAndroid Build Coastguard Worker; CHECK: vmhf %v24, %v24, %v26 1207*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1208*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmhf(<4 x i32> %a, <4 x i32> %b) 1209*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1210*9880d681SAndroid Build Coastguard Worker} 1211*9880d681SAndroid Build Coastguard Worker 1212*9880d681SAndroid Build Coastguard Worker; VMLHB. 1213*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmlhb(<16 x i8> %a, <16 x i8> %b) { 1214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlhb: 1215*9880d681SAndroid Build Coastguard Worker; CHECK: vmlhb %v24, %v24, %v26 1216*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1217*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vmlhb(<16 x i8> %a, <16 x i8> %b) 1218*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1219*9880d681SAndroid Build Coastguard Worker} 1220*9880d681SAndroid Build Coastguard Worker 1221*9880d681SAndroid Build Coastguard Worker; VMLHH. 1222*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlhh(<8 x i16> %a, <8 x i16> %b) { 1223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlhh: 1224*9880d681SAndroid Build Coastguard Worker; CHECK: vmlhh %v24, %v24, %v26 1225*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1226*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmlhh(<8 x i16> %a, <8 x i16> %b) 1227*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1228*9880d681SAndroid Build Coastguard Worker} 1229*9880d681SAndroid Build Coastguard Worker 1230*9880d681SAndroid Build Coastguard Worker; VMLHF. 1231*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlhf(<4 x i32> %a, <4 x i32> %b) { 1232*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlhf: 1233*9880d681SAndroid Build Coastguard Worker; CHECK: vmlhf %v24, %v24, %v26 1234*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1235*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmlhf(<4 x i32> %a, <4 x i32> %b) 1236*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1237*9880d681SAndroid Build Coastguard Worker} 1238*9880d681SAndroid Build Coastguard Worker 1239*9880d681SAndroid Build Coastguard Worker; VMEB. 1240*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmeb(<16 x i8> %a, <16 x i8> %b) { 1241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmeb: 1242*9880d681SAndroid Build Coastguard Worker; CHECK: vmeb %v24, %v24, %v26 1243*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1244*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmeb(<16 x i8> %a, <16 x i8> %b) 1245*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1246*9880d681SAndroid Build Coastguard Worker} 1247*9880d681SAndroid Build Coastguard Worker 1248*9880d681SAndroid Build Coastguard Worker; VMEH. 1249*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmeh(<8 x i16> %a, <8 x i16> %b) { 1250*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmeh: 1251*9880d681SAndroid Build Coastguard Worker; CHECK: vmeh %v24, %v24, %v26 1252*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1253*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmeh(<8 x i16> %a, <8 x i16> %b) 1254*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1255*9880d681SAndroid Build Coastguard Worker} 1256*9880d681SAndroid Build Coastguard Worker 1257*9880d681SAndroid Build Coastguard Worker; VMEF. 1258*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmef(<4 x i32> %a, <4 x i32> %b) { 1259*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmef: 1260*9880d681SAndroid Build Coastguard Worker; CHECK: vmef %v24, %v24, %v26 1261*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1262*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmef(<4 x i32> %a, <4 x i32> %b) 1263*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1264*9880d681SAndroid Build Coastguard Worker} 1265*9880d681SAndroid Build Coastguard Worker 1266*9880d681SAndroid Build Coastguard Worker; VMLEB. 1267*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmleb(<16 x i8> %a, <16 x i8> %b) { 1268*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmleb: 1269*9880d681SAndroid Build Coastguard Worker; CHECK: vmleb %v24, %v24, %v26 1270*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1271*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmleb(<16 x i8> %a, <16 x i8> %b) 1272*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1273*9880d681SAndroid Build Coastguard Worker} 1274*9880d681SAndroid Build Coastguard Worker 1275*9880d681SAndroid Build Coastguard Worker; VMLEH. 1276*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmleh(<8 x i16> %a, <8 x i16> %b) { 1277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmleh: 1278*9880d681SAndroid Build Coastguard Worker; CHECK: vmleh %v24, %v24, %v26 1279*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1280*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmleh(<8 x i16> %a, <8 x i16> %b) 1281*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1282*9880d681SAndroid Build Coastguard Worker} 1283*9880d681SAndroid Build Coastguard Worker 1284*9880d681SAndroid Build Coastguard Worker; VMLEF. 1285*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlef(<4 x i32> %a, <4 x i32> %b) { 1286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlef: 1287*9880d681SAndroid Build Coastguard Worker; CHECK: vmlef %v24, %v24, %v26 1288*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1289*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmlef(<4 x i32> %a, <4 x i32> %b) 1290*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1291*9880d681SAndroid Build Coastguard Worker} 1292*9880d681SAndroid Build Coastguard Worker 1293*9880d681SAndroid Build Coastguard Worker; VMOB. 1294*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmob(<16 x i8> %a, <16 x i8> %b) { 1295*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmob: 1296*9880d681SAndroid Build Coastguard Worker; CHECK: vmob %v24, %v24, %v26 1297*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1298*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmob(<16 x i8> %a, <16 x i8> %b) 1299*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1300*9880d681SAndroid Build Coastguard Worker} 1301*9880d681SAndroid Build Coastguard Worker 1302*9880d681SAndroid Build Coastguard Worker; VMOH. 1303*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmoh(<8 x i16> %a, <8 x i16> %b) { 1304*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmoh: 1305*9880d681SAndroid Build Coastguard Worker; CHECK: vmoh %v24, %v24, %v26 1306*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1307*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmoh(<8 x i16> %a, <8 x i16> %b) 1308*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1309*9880d681SAndroid Build Coastguard Worker} 1310*9880d681SAndroid Build Coastguard Worker 1311*9880d681SAndroid Build Coastguard Worker; VMOF. 1312*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmof(<4 x i32> %a, <4 x i32> %b) { 1313*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmof: 1314*9880d681SAndroid Build Coastguard Worker; CHECK: vmof %v24, %v24, %v26 1315*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1316*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmof(<4 x i32> %a, <4 x i32> %b) 1317*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1318*9880d681SAndroid Build Coastguard Worker} 1319*9880d681SAndroid Build Coastguard Worker 1320*9880d681SAndroid Build Coastguard Worker; VMLOB. 1321*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlob(<16 x i8> %a, <16 x i8> %b) { 1322*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlob: 1323*9880d681SAndroid Build Coastguard Worker; CHECK: vmlob %v24, %v24, %v26 1324*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1325*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vmlob(<16 x i8> %a, <16 x i8> %b) 1326*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1327*9880d681SAndroid Build Coastguard Worker} 1328*9880d681SAndroid Build Coastguard Worker 1329*9880d681SAndroid Build Coastguard Worker; VMLOH. 1330*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmloh(<8 x i16> %a, <8 x i16> %b) { 1331*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmloh: 1332*9880d681SAndroid Build Coastguard Worker; CHECK: vmloh %v24, %v24, %v26 1333*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1334*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vmloh(<8 x i16> %a, <8 x i16> %b) 1335*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1336*9880d681SAndroid Build Coastguard Worker} 1337*9880d681SAndroid Build Coastguard Worker 1338*9880d681SAndroid Build Coastguard Worker; VMLOF. 1339*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlof(<4 x i32> %a, <4 x i32> %b) { 1340*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlof: 1341*9880d681SAndroid Build Coastguard Worker; CHECK: vmlof %v24, %v24, %v26 1342*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1343*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vmlof(<4 x i32> %a, <4 x i32> %b) 1344*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1345*9880d681SAndroid Build Coastguard Worker} 1346*9880d681SAndroid Build Coastguard Worker 1347*9880d681SAndroid Build Coastguard Worker; VERLLVB. 1348*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllvb(<16 x i8> %a, <16 x i8> %b) { 1349*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvb: 1350*9880d681SAndroid Build Coastguard Worker; CHECK: verllvb %v24, %v24, %v26 1351*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1352*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.verllvb(<16 x i8> %a, <16 x i8> %b) 1353*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1354*9880d681SAndroid Build Coastguard Worker} 1355*9880d681SAndroid Build Coastguard Worker 1356*9880d681SAndroid Build Coastguard Worker; VERLLVH. 1357*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_verllvh(<8 x i16> %a, <8 x i16> %b) { 1358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvh: 1359*9880d681SAndroid Build Coastguard Worker; CHECK: verllvh %v24, %v24, %v26 1360*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1361*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.verllvh(<8 x i16> %a, <8 x i16> %b) 1362*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1363*9880d681SAndroid Build Coastguard Worker} 1364*9880d681SAndroid Build Coastguard Worker 1365*9880d681SAndroid Build Coastguard Worker; VERLLVF. 1366*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_verllvf(<4 x i32> %a, <4 x i32> %b) { 1367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvf: 1368*9880d681SAndroid Build Coastguard Worker; CHECK: verllvf %v24, %v24, %v26 1369*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1370*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.verllvf(<4 x i32> %a, <4 x i32> %b) 1371*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1372*9880d681SAndroid Build Coastguard Worker} 1373*9880d681SAndroid Build Coastguard Worker 1374*9880d681SAndroid Build Coastguard Worker; VERLLVG. 1375*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_verllvg(<2 x i64> %a, <2 x i64> %b) { 1376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvg: 1377*9880d681SAndroid Build Coastguard Worker; CHECK: verllvg %v24, %v24, %v26 1378*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1379*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.verllvg(<2 x i64> %a, <2 x i64> %b) 1380*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1381*9880d681SAndroid Build Coastguard Worker} 1382*9880d681SAndroid Build Coastguard Worker 1383*9880d681SAndroid Build Coastguard Worker; VERLLB. 1384*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb(<16 x i8> %a, i32 %b) { 1385*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb: 1386*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 0(%r2) 1387*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1388*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 %b) 1389*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1390*9880d681SAndroid Build Coastguard Worker} 1391*9880d681SAndroid Build Coastguard Worker 1392*9880d681SAndroid Build Coastguard Worker; VERLLH. 1393*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_verllh(<8 x i16> %a, i32 %b) { 1394*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllh: 1395*9880d681SAndroid Build Coastguard Worker; CHECK: verllh %v24, %v24, 0(%r2) 1396*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1397*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.verllh(<8 x i16> %a, i32 %b) 1398*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1399*9880d681SAndroid Build Coastguard Worker} 1400*9880d681SAndroid Build Coastguard Worker 1401*9880d681SAndroid Build Coastguard Worker; VERLLF. 1402*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_verllf(<4 x i32> %a, i32 %b) { 1403*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllf: 1404*9880d681SAndroid Build Coastguard Worker; CHECK: verllf %v24, %v24, 0(%r2) 1405*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1406*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.verllf(<4 x i32> %a, i32 %b) 1407*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1408*9880d681SAndroid Build Coastguard Worker} 1409*9880d681SAndroid Build Coastguard Worker 1410*9880d681SAndroid Build Coastguard Worker; VERLLG. 1411*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_verllg(<2 x i64> %a, i32 %b) { 1412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllg: 1413*9880d681SAndroid Build Coastguard Worker; CHECK: verllg %v24, %v24, 0(%r2) 1414*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1415*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.verllg(<2 x i64> %a, i32 %b) 1416*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1417*9880d681SAndroid Build Coastguard Worker} 1418*9880d681SAndroid Build Coastguard Worker 1419*9880d681SAndroid Build Coastguard Worker; VERLLB with the smallest count. 1420*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb_1(<16 x i8> %a) { 1421*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb_1: 1422*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 1 1423*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1424*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 1) 1425*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1426*9880d681SAndroid Build Coastguard Worker} 1427*9880d681SAndroid Build Coastguard Worker 1428*9880d681SAndroid Build Coastguard Worker; VERLLB with the largest count. 1429*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb_4095(<16 x i8> %a) { 1430*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb_4095: 1431*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 4095 1432*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1433*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 4095) 1434*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1435*9880d681SAndroid Build Coastguard Worker} 1436*9880d681SAndroid Build Coastguard Worker 1437*9880d681SAndroid Build Coastguard Worker; VERLLB with the largest count + 1. 1438*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb_4096(<16 x i8> %a) { 1439*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb_4096: 1440*9880d681SAndroid Build Coastguard Worker; CHECK: lhi [[REG:%r[1-5]]], 4096 1441*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 0([[REG]]) 1442*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1443*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 4096) 1444*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1445*9880d681SAndroid Build Coastguard Worker} 1446*9880d681SAndroid Build Coastguard Worker 1447*9880d681SAndroid Build Coastguard Worker; VERIMB. 1448*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verimb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 1449*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimb: 1450*9880d681SAndroid Build Coastguard Worker; CHECK: verimb %v24, %v26, %v28, 1 1451*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1452*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.verimb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, i32 1) 1453*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1454*9880d681SAndroid Build Coastguard Worker} 1455*9880d681SAndroid Build Coastguard Worker 1456*9880d681SAndroid Build Coastguard Worker; VERIMH. 1457*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_verimh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) { 1458*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimh: 1459*9880d681SAndroid Build Coastguard Worker; CHECK: verimh %v24, %v26, %v28, 1 1460*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1461*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.verimh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, i32 1) 1462*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1463*9880d681SAndroid Build Coastguard Worker} 1464*9880d681SAndroid Build Coastguard Worker 1465*9880d681SAndroid Build Coastguard Worker; VERIMF. 1466*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_verimf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) { 1467*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimf: 1468*9880d681SAndroid Build Coastguard Worker; CHECK: verimf %v24, %v26, %v28, 1 1469*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1470*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.verimf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, i32 1) 1471*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1472*9880d681SAndroid Build Coastguard Worker} 1473*9880d681SAndroid Build Coastguard Worker 1474*9880d681SAndroid Build Coastguard Worker; VERIMG. 1475*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_verimg(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) { 1476*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimg: 1477*9880d681SAndroid Build Coastguard Worker; CHECK: verimg %v24, %v26, %v28, 1 1478*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1479*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.verimg(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, i32 1) 1480*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1481*9880d681SAndroid Build Coastguard Worker} 1482*9880d681SAndroid Build Coastguard Worker 1483*9880d681SAndroid Build Coastguard Worker; VERIMB with a different mask. 1484*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verimb_254(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 1485*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimb_254: 1486*9880d681SAndroid Build Coastguard Worker; CHECK: verimb %v24, %v26, %v28, 254 1487*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1488*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.verimb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, i32 254) 1489*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1490*9880d681SAndroid Build Coastguard Worker} 1491*9880d681SAndroid Build Coastguard Worker 1492*9880d681SAndroid Build Coastguard Worker; VSL. 1493*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsl(<16 x i8> %a, <16 x i8> %b) { 1494*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsl: 1495*9880d681SAndroid Build Coastguard Worker; CHECK: vsl %v24, %v24, %v26 1496*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1497*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsl(<16 x i8> %a, <16 x i8> %b) 1498*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1499*9880d681SAndroid Build Coastguard Worker} 1500*9880d681SAndroid Build Coastguard Worker 1501*9880d681SAndroid Build Coastguard Worker; VSLB. 1502*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vslb(<16 x i8> %a, <16 x i8> %b) { 1503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vslb: 1504*9880d681SAndroid Build Coastguard Worker; CHECK: vslb %v24, %v24, %v26 1505*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1506*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vslb(<16 x i8> %a, <16 x i8> %b) 1507*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1508*9880d681SAndroid Build Coastguard Worker} 1509*9880d681SAndroid Build Coastguard Worker 1510*9880d681SAndroid Build Coastguard Worker; VSRA. 1511*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsra(<16 x i8> %a, <16 x i8> %b) { 1512*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsra: 1513*9880d681SAndroid Build Coastguard Worker; CHECK: vsra %v24, %v24, %v26 1514*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1515*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsra(<16 x i8> %a, <16 x i8> %b) 1516*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1517*9880d681SAndroid Build Coastguard Worker} 1518*9880d681SAndroid Build Coastguard Worker 1519*9880d681SAndroid Build Coastguard Worker; VSRAB. 1520*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsrab(<16 x i8> %a, <16 x i8> %b) { 1521*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsrab: 1522*9880d681SAndroid Build Coastguard Worker; CHECK: vsrab %v24, %v24, %v26 1523*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1524*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsrab(<16 x i8> %a, <16 x i8> %b) 1525*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1526*9880d681SAndroid Build Coastguard Worker} 1527*9880d681SAndroid Build Coastguard Worker 1528*9880d681SAndroid Build Coastguard Worker; VSRL. 1529*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsrl(<16 x i8> %a, <16 x i8> %b) { 1530*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsrl: 1531*9880d681SAndroid Build Coastguard Worker; CHECK: vsrl %v24, %v24, %v26 1532*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1533*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsrl(<16 x i8> %a, <16 x i8> %b) 1534*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1535*9880d681SAndroid Build Coastguard Worker} 1536*9880d681SAndroid Build Coastguard Worker 1537*9880d681SAndroid Build Coastguard Worker; VSRLB. 1538*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsrlb(<16 x i8> %a, <16 x i8> %b) { 1539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsrlb: 1540*9880d681SAndroid Build Coastguard Worker; CHECK: vsrlb %v24, %v24, %v26 1541*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1542*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %a, <16 x i8> %b) 1543*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1544*9880d681SAndroid Build Coastguard Worker} 1545*9880d681SAndroid Build Coastguard Worker 1546*9880d681SAndroid Build Coastguard Worker; VSLDB with the minimum useful value. 1547*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsldb_1(<16 x i8> %a, <16 x i8> %b) { 1548*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsldb_1: 1549*9880d681SAndroid Build Coastguard Worker; CHECK: vsldb %v24, %v24, %v26, 1 1550*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1551*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsldb(<16 x i8> %a, <16 x i8> %b, i32 1) 1552*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1553*9880d681SAndroid Build Coastguard Worker} 1554*9880d681SAndroid Build Coastguard Worker 1555*9880d681SAndroid Build Coastguard Worker; VSLDB with the maximum value. 1556*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsldb_15(<16 x i8> %a, <16 x i8> %b) { 1557*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsldb_15: 1558*9880d681SAndroid Build Coastguard Worker; CHECK: vsldb %v24, %v24, %v26, 15 1559*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1560*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsldb(<16 x i8> %a, <16 x i8> %b, i32 15) 1561*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1562*9880d681SAndroid Build Coastguard Worker} 1563*9880d681SAndroid Build Coastguard Worker 1564*9880d681SAndroid Build Coastguard Worker; VSCBIB. 1565*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vscbib(<16 x i8> %a, <16 x i8> %b) { 1566*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbib: 1567*9880d681SAndroid Build Coastguard Worker; CHECK: vscbib %v24, %v24, %v26 1568*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1569*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vscbib(<16 x i8> %a, <16 x i8> %b) 1570*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1571*9880d681SAndroid Build Coastguard Worker} 1572*9880d681SAndroid Build Coastguard Worker 1573*9880d681SAndroid Build Coastguard Worker; VSCBIH. 1574*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vscbih(<8 x i16> %a, <8 x i16> %b) { 1575*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbih: 1576*9880d681SAndroid Build Coastguard Worker; CHECK: vscbih %v24, %v24, %v26 1577*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1578*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vscbih(<8 x i16> %a, <8 x i16> %b) 1579*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1580*9880d681SAndroid Build Coastguard Worker} 1581*9880d681SAndroid Build Coastguard Worker 1582*9880d681SAndroid Build Coastguard Worker; VSCBIF. 1583*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vscbif(<4 x i32> %a, <4 x i32> %b) { 1584*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbif: 1585*9880d681SAndroid Build Coastguard Worker; CHECK: vscbif %v24, %v24, %v26 1586*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1587*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vscbif(<4 x i32> %a, <4 x i32> %b) 1588*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1589*9880d681SAndroid Build Coastguard Worker} 1590*9880d681SAndroid Build Coastguard Worker 1591*9880d681SAndroid Build Coastguard Worker; VSCBIG. 1592*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vscbig(<2 x i64> %a, <2 x i64> %b) { 1593*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbig: 1594*9880d681SAndroid Build Coastguard Worker; CHECK: vscbig %v24, %v24, %v26 1595*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1596*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vscbig(<2 x i64> %a, <2 x i64> %b) 1597*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1598*9880d681SAndroid Build Coastguard Worker} 1599*9880d681SAndroid Build Coastguard Worker 1600*9880d681SAndroid Build Coastguard Worker; VSQ. 1601*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsq(<16 x i8> %a, <16 x i8> %b) { 1602*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsq: 1603*9880d681SAndroid Build Coastguard Worker; CHECK: vsq %v24, %v24, %v26 1604*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1605*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsq(<16 x i8> %a, <16 x i8> %b) 1606*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1607*9880d681SAndroid Build Coastguard Worker} 1608*9880d681SAndroid Build Coastguard Worker 1609*9880d681SAndroid Build Coastguard Worker; VSBIQ. 1610*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsbiq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 1611*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsbiq: 1612*9880d681SAndroid Build Coastguard Worker; CHECK: vsbiq %v24, %v24, %v26, %v28 1613*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1614*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsbiq(<16 x i8> %a, <16 x i8> %b, 1615*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 1616*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1617*9880d681SAndroid Build Coastguard Worker} 1618*9880d681SAndroid Build Coastguard Worker 1619*9880d681SAndroid Build Coastguard Worker; VSCBIQ. 1620*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vscbiq(<16 x i8> %a, <16 x i8> %b) { 1621*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbiq: 1622*9880d681SAndroid Build Coastguard Worker; CHECK: vscbiq %v24, %v24, %v26 1623*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1624*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vscbiq(<16 x i8> %a, <16 x i8> %b) 1625*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1626*9880d681SAndroid Build Coastguard Worker} 1627*9880d681SAndroid Build Coastguard Worker 1628*9880d681SAndroid Build Coastguard Worker; VSBCBIQ. 1629*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsbcbiq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 1630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsbcbiq: 1631*9880d681SAndroid Build Coastguard Worker; CHECK: vsbcbiq %v24, %v24, %v26, %v28 1632*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1633*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsbcbiq(<16 x i8> %a, <16 x i8> %b, 1634*9880d681SAndroid Build Coastguard Worker <16 x i8> %c) 1635*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1636*9880d681SAndroid Build Coastguard Worker} 1637*9880d681SAndroid Build Coastguard Worker 1638*9880d681SAndroid Build Coastguard Worker; VSUMB. 1639*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vsumb(<16 x i8> %a, <16 x i8> %b) { 1640*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumb: 1641*9880d681SAndroid Build Coastguard Worker; CHECK: vsumb %v24, %v24, %v26 1642*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1643*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vsumb(<16 x i8> %a, <16 x i8> %b) 1644*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1645*9880d681SAndroid Build Coastguard Worker} 1646*9880d681SAndroid Build Coastguard Worker 1647*9880d681SAndroid Build Coastguard Worker; VSUMH. 1648*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vsumh(<8 x i16> %a, <8 x i16> %b) { 1649*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumh: 1650*9880d681SAndroid Build Coastguard Worker; CHECK: vsumh %v24, %v24, %v26 1651*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1652*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vsumh(<8 x i16> %a, <8 x i16> %b) 1653*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1654*9880d681SAndroid Build Coastguard Worker} 1655*9880d681SAndroid Build Coastguard Worker 1656*9880d681SAndroid Build Coastguard Worker; VSUMGH. 1657*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vsumgh(<8 x i16> %a, <8 x i16> %b) { 1658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumgh: 1659*9880d681SAndroid Build Coastguard Worker; CHECK: vsumgh %v24, %v24, %v26 1660*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1661*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vsumgh(<8 x i16> %a, <8 x i16> %b) 1662*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1663*9880d681SAndroid Build Coastguard Worker} 1664*9880d681SAndroid Build Coastguard Worker 1665*9880d681SAndroid Build Coastguard Worker; VSUMGF. 1666*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vsumgf(<4 x i32> %a, <4 x i32> %b) { 1667*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumgf: 1668*9880d681SAndroid Build Coastguard Worker; CHECK: vsumgf %v24, %v24, %v26 1669*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1670*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.s390.vsumgf(<4 x i32> %a, <4 x i32> %b) 1671*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1672*9880d681SAndroid Build Coastguard Worker} 1673*9880d681SAndroid Build Coastguard Worker 1674*9880d681SAndroid Build Coastguard Worker; VSUMQF. 1675*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsumqf(<4 x i32> %a, <4 x i32> %b) { 1676*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumqf: 1677*9880d681SAndroid Build Coastguard Worker; CHECK: vsumqf %v24, %v24, %v26 1678*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1679*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsumqf(<4 x i32> %a, <4 x i32> %b) 1680*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1681*9880d681SAndroid Build Coastguard Worker} 1682*9880d681SAndroid Build Coastguard Worker 1683*9880d681SAndroid Build Coastguard Worker; VSUMQG. 1684*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsumqg(<2 x i64> %a, <2 x i64> %b) { 1685*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumqg: 1686*9880d681SAndroid Build Coastguard Worker; CHECK: vsumqg %v24, %v24, %v26 1687*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1688*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vsumqg(<2 x i64> %a, <2 x i64> %b) 1689*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1690*9880d681SAndroid Build Coastguard Worker} 1691*9880d681SAndroid Build Coastguard Worker 1692*9880d681SAndroid Build Coastguard Worker; VTM with no processing of the result. 1693*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vtm(<16 x i8> %a, <16 x i8> %b) { 1694*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vtm: 1695*9880d681SAndroid Build Coastguard Worker; CHECK: vtm %v24, %v26 1696*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1697*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 1698*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1699*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.s390.vtm(<16 x i8> %a, <16 x i8> %b) 1700*9880d681SAndroid Build Coastguard Worker ret i32 %res 1701*9880d681SAndroid Build Coastguard Worker} 1702*9880d681SAndroid Build Coastguard Worker 1703*9880d681SAndroid Build Coastguard Worker; VTM, storing to %ptr if all bits are set. 1704*9880d681SAndroid Build Coastguard Workerdefine void @test_vtm_all_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) { 1705*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vtm_all_store: 1706*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 1707*9880d681SAndroid Build Coastguard Worker; CHECK: vtm %v24, %v26 1708*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14 1709*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 1710*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1711*9880d681SAndroid Build Coastguard Worker %res = call i32 @llvm.s390.vtm(<16 x i8> %a, <16 x i8> %b) 1712*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %res, 3 1713*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 1714*9880d681SAndroid Build Coastguard Worker 1715*9880d681SAndroid Build Coastguard Workerstore: 1716*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 1717*9880d681SAndroid Build Coastguard Worker br label %exit 1718*9880d681SAndroid Build Coastguard Worker 1719*9880d681SAndroid Build Coastguard Workerexit: 1720*9880d681SAndroid Build Coastguard Worker ret void 1721*9880d681SAndroid Build Coastguard Worker} 1722*9880d681SAndroid Build Coastguard Worker 1723*9880d681SAndroid Build Coastguard Worker; VCEQBS with no processing of the result. 1724*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqbs(<16 x i8> %a, <16 x i8> %b) { 1725*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqbs: 1726*9880d681SAndroid Build Coastguard Worker; CHECK: vceqbs {{%v[0-9]+}}, %v24, %v26 1727*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1728*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 1729*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1730*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8> %a, <16 x i8> %b) 1731*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 1 1732*9880d681SAndroid Build Coastguard Worker ret i32 %res 1733*9880d681SAndroid Build Coastguard Worker} 1734*9880d681SAndroid Build Coastguard Worker 1735*9880d681SAndroid Build Coastguard Worker; VCEQBS, returning 1 if any elements are equal (CC != 3). 1736*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqbs_any_bool(<16 x i8> %a, <16 x i8> %b) { 1737*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqbs_any_bool: 1738*9880d681SAndroid Build Coastguard Worker; CHECK: vceqbs {{%v[0-9]+}}, %v24, %v26 1739*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1740*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912 1741*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 1742*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1743*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8> %a, <16 x i8> %b) 1744*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 1 1745*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %res, 3 1746*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 1747*9880d681SAndroid Build Coastguard Worker ret i32 %ext 1748*9880d681SAndroid Build Coastguard Worker} 1749*9880d681SAndroid Build Coastguard Worker 1750*9880d681SAndroid Build Coastguard Worker; VCEQBS, storing to %ptr if any elements are equal. 1751*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vceqbs_any_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) { 1752*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqbs_any_store: 1753*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 1754*9880d681SAndroid Build Coastguard Worker; CHECK: vceqbs %v24, %v24, %v26 1755*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14 1756*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 1757*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1758*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8> %a, <16 x i8> %b) 1759*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 1760*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 1761*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i32 %cc, 2 1762*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 1763*9880d681SAndroid Build Coastguard Worker 1764*9880d681SAndroid Build Coastguard Workerstore: 1765*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 1766*9880d681SAndroid Build Coastguard Worker br label %exit 1767*9880d681SAndroid Build Coastguard Worker 1768*9880d681SAndroid Build Coastguard Workerexit: 1769*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1770*9880d681SAndroid Build Coastguard Worker} 1771*9880d681SAndroid Build Coastguard Worker 1772*9880d681SAndroid Build Coastguard Worker; VCEQHS with no processing of the result. 1773*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqhs(<8 x i16> %a, <8 x i16> %b) { 1774*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqhs: 1775*9880d681SAndroid Build Coastguard Worker; CHECK: vceqhs {{%v[0-9]+}}, %v24, %v26 1776*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1777*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 1778*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1779*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16> %a, <8 x i16> %b) 1780*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 1 1781*9880d681SAndroid Build Coastguard Worker ret i32 %res 1782*9880d681SAndroid Build Coastguard Worker} 1783*9880d681SAndroid Build Coastguard Worker 1784*9880d681SAndroid Build Coastguard Worker; VCEQHS, returning 1 if not all elements are equal. 1785*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqhs_notall_bool(<8 x i16> %a, <8 x i16> %b) { 1786*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqhs_notall_bool: 1787*9880d681SAndroid Build Coastguard Worker; CHECK: vceqhs {{%v[0-9]+}}, %v24, %v26 1788*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 1789*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36 1790*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1791*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16> %a, <8 x i16> %b) 1792*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 1 1793*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %res, 1 1794*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 1795*9880d681SAndroid Build Coastguard Worker ret i32 %ext 1796*9880d681SAndroid Build Coastguard Worker} 1797*9880d681SAndroid Build Coastguard Worker 1798*9880d681SAndroid Build Coastguard Worker; VCEQHS, storing to %ptr if not all elements are equal. 1799*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vceqhs_notall_store(<8 x i16> %a, <8 x i16> %b, 1800*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 1801*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqhs_notall_store: 1802*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 1803*9880d681SAndroid Build Coastguard Worker; CHECK: vceqhs %v24, %v24, %v26 1804*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14 1805*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 1806*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1807*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16> %a, <8 x i16> %b) 1808*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 1809*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 1810*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %cc, 0 1811*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 1812*9880d681SAndroid Build Coastguard Worker 1813*9880d681SAndroid Build Coastguard Workerstore: 1814*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 1815*9880d681SAndroid Build Coastguard Worker br label %exit 1816*9880d681SAndroid Build Coastguard Worker 1817*9880d681SAndroid Build Coastguard Workerexit: 1818*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 1819*9880d681SAndroid Build Coastguard Worker} 1820*9880d681SAndroid Build Coastguard Worker 1821*9880d681SAndroid Build Coastguard Worker; VCEQFS with no processing of the result. 1822*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqfs(<4 x i32> %a, <4 x i32> %b) { 1823*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqfs: 1824*9880d681SAndroid Build Coastguard Worker; CHECK: vceqfs {{%v[0-9]+}}, %v24, %v26 1825*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1826*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 1827*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1828*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32> %a, <4 x i32> %b) 1829*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 1 1830*9880d681SAndroid Build Coastguard Worker ret i32 %res 1831*9880d681SAndroid Build Coastguard Worker} 1832*9880d681SAndroid Build Coastguard Worker 1833*9880d681SAndroid Build Coastguard Worker; VCEQFS, returning 1 if no elements are equal. 1834*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqfs_none_bool(<4 x i32> %a, <4 x i32> %b) { 1835*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqfs_none_bool: 1836*9880d681SAndroid Build Coastguard Worker; CHECK: vceqfs {{%v[0-9]+}}, %v24, %v26 1837*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 1838*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35 1839*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1840*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32> %a, <4 x i32> %b) 1841*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 1 1842*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %res, 3 1843*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 1844*9880d681SAndroid Build Coastguard Worker ret i32 %ext 1845*9880d681SAndroid Build Coastguard Worker} 1846*9880d681SAndroid Build Coastguard Worker 1847*9880d681SAndroid Build Coastguard Worker; VCEQFS, storing to %ptr if no elements are equal. 1848*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vceqfs_none_store(<4 x i32> %a, <4 x i32> %b, 1849*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 1850*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqfs_none_store: 1851*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 1852*9880d681SAndroid Build Coastguard Worker; CHECK: vceqfs %v24, %v24, %v26 1853*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14 1854*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 1855*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1856*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32> %a, <4 x i32> %b) 1857*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 1858*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 1859*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %cc, 3 1860*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 1861*9880d681SAndroid Build Coastguard Worker 1862*9880d681SAndroid Build Coastguard Workerstore: 1863*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 1864*9880d681SAndroid Build Coastguard Worker br label %exit 1865*9880d681SAndroid Build Coastguard Worker 1866*9880d681SAndroid Build Coastguard Workerexit: 1867*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 1868*9880d681SAndroid Build Coastguard Worker} 1869*9880d681SAndroid Build Coastguard Worker 1870*9880d681SAndroid Build Coastguard Worker; VCEQGS with no processing of the result. 1871*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqgs(<2 x i64> %a, <2 x i64> %b) { 1872*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqgs: 1873*9880d681SAndroid Build Coastguard Worker; CHECK: vceqgs {{%v[0-9]+}}, %v24, %v26 1874*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1875*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 1876*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1877*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64> %a, <2 x i64> %b) 1878*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 1879*9880d681SAndroid Build Coastguard Worker ret i32 %res 1880*9880d681SAndroid Build Coastguard Worker} 1881*9880d681SAndroid Build Coastguard Worker 1882*9880d681SAndroid Build Coastguard Worker; VCEQGS returning 1 if all elements are equal (CC == 0). 1883*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqgs_all_bool(<2 x i64> %a, <2 x i64> %b) { 1884*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqgs_all_bool: 1885*9880d681SAndroid Build Coastguard Worker; CHECK: vceqgs {{%v[0-9]+}}, %v24, %v26 1886*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1887*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456 1888*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 1889*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1890*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64> %a, <2 x i64> %b) 1891*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 1892*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %res, 1 1893*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 1894*9880d681SAndroid Build Coastguard Worker ret i32 %ext 1895*9880d681SAndroid Build Coastguard Worker} 1896*9880d681SAndroid Build Coastguard Worker 1897*9880d681SAndroid Build Coastguard Worker; VCEQGS, storing to %ptr if all elements are equal. 1898*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vceqgs_all_store(<2 x i64> %a, <2 x i64> %b, i32 *%ptr) { 1899*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqgs_all_store: 1900*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 1901*9880d681SAndroid Build Coastguard Worker; CHECK: vceqgs %v24, %v24, %v26 1902*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14 1903*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 1904*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1905*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64> %a, <2 x i64> %b) 1906*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 0 1907*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<2 x i64>, i32} %call, 1 1908*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %cc, 0 1909*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 1910*9880d681SAndroid Build Coastguard Worker 1911*9880d681SAndroid Build Coastguard Workerstore: 1912*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 1913*9880d681SAndroid Build Coastguard Worker br label %exit 1914*9880d681SAndroid Build Coastguard Worker 1915*9880d681SAndroid Build Coastguard Workerexit: 1916*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 1917*9880d681SAndroid Build Coastguard Worker} 1918*9880d681SAndroid Build Coastguard Worker 1919*9880d681SAndroid Build Coastguard Worker; VCHBS with no processing of the result. 1920*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchbs(<16 x i8> %a, <16 x i8> %b) { 1921*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchbs: 1922*9880d681SAndroid Build Coastguard Worker; CHECK: vchbs {{%v[0-9]+}}, %v24, %v26 1923*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1924*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 1925*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1926*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8> %a, <16 x i8> %b) 1927*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 1 1928*9880d681SAndroid Build Coastguard Worker ret i32 %res 1929*9880d681SAndroid Build Coastguard Worker} 1930*9880d681SAndroid Build Coastguard Worker 1931*9880d681SAndroid Build Coastguard Worker; VCHBS, returning 1 if any elements are higher (CC != 3). 1932*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchbs_any_bool(<16 x i8> %a, <16 x i8> %b) { 1933*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchbs_any_bool: 1934*9880d681SAndroid Build Coastguard Worker; CHECK: vchbs {{%v[0-9]+}}, %v24, %v26 1935*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1936*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912 1937*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 1938*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1939*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8> %a, <16 x i8> %b) 1940*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 1 1941*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %res, 3 1942*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 1943*9880d681SAndroid Build Coastguard Worker ret i32 %ext 1944*9880d681SAndroid Build Coastguard Worker} 1945*9880d681SAndroid Build Coastguard Worker 1946*9880d681SAndroid Build Coastguard Worker; VCHBS, storing to %ptr if any elements are higher. 1947*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vchbs_any_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) { 1948*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchbs_any_store: 1949*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 1950*9880d681SAndroid Build Coastguard Worker; CHECK: vchbs %v24, %v24, %v26 1951*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14 1952*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 1953*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1954*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8> %a, <16 x i8> %b) 1955*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 1956*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 1957*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i32 %cc, 2 1958*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 1959*9880d681SAndroid Build Coastguard Worker 1960*9880d681SAndroid Build Coastguard Workerstore: 1961*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 1962*9880d681SAndroid Build Coastguard Worker br label %exit 1963*9880d681SAndroid Build Coastguard Worker 1964*9880d681SAndroid Build Coastguard Workerexit: 1965*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 1966*9880d681SAndroid Build Coastguard Worker} 1967*9880d681SAndroid Build Coastguard Worker 1968*9880d681SAndroid Build Coastguard Worker; VCHHS with no processing of the result. 1969*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchhs(<8 x i16> %a, <8 x i16> %b) { 1970*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchhs: 1971*9880d681SAndroid Build Coastguard Worker; CHECK: vchhs {{%v[0-9]+}}, %v24, %v26 1972*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 1973*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 1974*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1975*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16> %a, <8 x i16> %b) 1976*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 1 1977*9880d681SAndroid Build Coastguard Worker ret i32 %res 1978*9880d681SAndroid Build Coastguard Worker} 1979*9880d681SAndroid Build Coastguard Worker 1980*9880d681SAndroid Build Coastguard Worker; VCHHS, returning 1 if not all elements are higher. 1981*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchhs_notall_bool(<8 x i16> %a, <8 x i16> %b) { 1982*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchhs_notall_bool: 1983*9880d681SAndroid Build Coastguard Worker; CHECK: vchhs {{%v[0-9]+}}, %v24, %v26 1984*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 1985*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36 1986*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 1987*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16> %a, <8 x i16> %b) 1988*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 1 1989*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %res, 1 1990*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 1991*9880d681SAndroid Build Coastguard Worker ret i32 %ext 1992*9880d681SAndroid Build Coastguard Worker} 1993*9880d681SAndroid Build Coastguard Worker 1994*9880d681SAndroid Build Coastguard Worker; VCHHS, storing to %ptr if not all elements are higher. 1995*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vchhs_notall_store(<8 x i16> %a, <8 x i16> %b, 1996*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 1997*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchhs_notall_store: 1998*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 1999*9880d681SAndroid Build Coastguard Worker; CHECK: vchhs %v24, %v24, %v26 2000*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14 2001*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 2002*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2003*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16> %a, <8 x i16> %b) 2004*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2005*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2006*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %cc, 0 2007*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 2008*9880d681SAndroid Build Coastguard Worker 2009*9880d681SAndroid Build Coastguard Workerstore: 2010*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 2011*9880d681SAndroid Build Coastguard Worker br label %exit 2012*9880d681SAndroid Build Coastguard Worker 2013*9880d681SAndroid Build Coastguard Workerexit: 2014*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2015*9880d681SAndroid Build Coastguard Worker} 2016*9880d681SAndroid Build Coastguard Worker 2017*9880d681SAndroid Build Coastguard Worker; VCHFS with no processing of the result. 2018*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchfs(<4 x i32> %a, <4 x i32> %b) { 2019*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchfs: 2020*9880d681SAndroid Build Coastguard Worker; CHECK: vchfs {{%v[0-9]+}}, %v24, %v26 2021*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2022*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 2023*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2024*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32> %a, <4 x i32> %b) 2025*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 1 2026*9880d681SAndroid Build Coastguard Worker ret i32 %res 2027*9880d681SAndroid Build Coastguard Worker} 2028*9880d681SAndroid Build Coastguard Worker 2029*9880d681SAndroid Build Coastguard Worker; VCHFS, returning 1 if no elements are higher. 2030*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchfs_none_bool(<4 x i32> %a, <4 x i32> %b) { 2031*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchfs_none_bool: 2032*9880d681SAndroid Build Coastguard Worker; CHECK: vchfs {{%v[0-9]+}}, %v24, %v26 2033*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2034*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35 2035*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2036*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32> %a, <4 x i32> %b) 2037*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 1 2038*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %res, 3 2039*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 2040*9880d681SAndroid Build Coastguard Worker ret i32 %ext 2041*9880d681SAndroid Build Coastguard Worker} 2042*9880d681SAndroid Build Coastguard Worker 2043*9880d681SAndroid Build Coastguard Worker; VCHFS, storing to %ptr if no elements are higher. 2044*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vchfs_none_store(<4 x i32> %a, <4 x i32> %b, i32 *%ptr) { 2045*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchfs_none_store: 2046*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 2047*9880d681SAndroid Build Coastguard Worker; CHECK: vchfs %v24, %v24, %v26 2048*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14 2049*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 2050*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2051*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32> %a, <4 x i32> %b) 2052*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2053*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2054*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %cc, 3 2055*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 2056*9880d681SAndroid Build Coastguard Worker 2057*9880d681SAndroid Build Coastguard Workerstore: 2058*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 2059*9880d681SAndroid Build Coastguard Worker br label %exit 2060*9880d681SAndroid Build Coastguard Worker 2061*9880d681SAndroid Build Coastguard Workerexit: 2062*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2063*9880d681SAndroid Build Coastguard Worker} 2064*9880d681SAndroid Build Coastguard Worker 2065*9880d681SAndroid Build Coastguard Worker; VCHGS with no processing of the result. 2066*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchgs(<2 x i64> %a, <2 x i64> %b) { 2067*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchgs: 2068*9880d681SAndroid Build Coastguard Worker; CHECK: vchgs {{%v[0-9]+}}, %v24, %v26 2069*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2070*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 2071*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2072*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64> %a, <2 x i64> %b) 2073*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 2074*9880d681SAndroid Build Coastguard Worker ret i32 %res 2075*9880d681SAndroid Build Coastguard Worker} 2076*9880d681SAndroid Build Coastguard Worker 2077*9880d681SAndroid Build Coastguard Worker; VCHGS returning 1 if all elements are higher (CC == 0). 2078*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchgs_all_bool(<2 x i64> %a, <2 x i64> %b) { 2079*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchgs_all_bool: 2080*9880d681SAndroid Build Coastguard Worker; CHECK: vchgs {{%v[0-9]+}}, %v24, %v26 2081*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2082*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456 2083*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 2084*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2085*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64> %a, <2 x i64> %b) 2086*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 2087*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %res, 1 2088*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 2089*9880d681SAndroid Build Coastguard Worker ret i32 %ext 2090*9880d681SAndroid Build Coastguard Worker} 2091*9880d681SAndroid Build Coastguard Worker 2092*9880d681SAndroid Build Coastguard Worker; VCHGS, storing to %ptr if all elements are higher. 2093*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vchgs_all_store(<2 x i64> %a, <2 x i64> %b, i32 *%ptr) { 2094*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchgs_all_store: 2095*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 2096*9880d681SAndroid Build Coastguard Worker; CHECK: vchgs %v24, %v24, %v26 2097*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14 2098*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 2099*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2100*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64> %a, <2 x i64> %b) 2101*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 0 2102*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<2 x i64>, i32} %call, 1 2103*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %cc, 0 2104*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 2105*9880d681SAndroid Build Coastguard Worker 2106*9880d681SAndroid Build Coastguard Workerstore: 2107*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 2108*9880d681SAndroid Build Coastguard Worker br label %exit 2109*9880d681SAndroid Build Coastguard Worker 2110*9880d681SAndroid Build Coastguard Workerexit: 2111*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 2112*9880d681SAndroid Build Coastguard Worker} 2113*9880d681SAndroid Build Coastguard Worker 2114*9880d681SAndroid Build Coastguard Worker; VCHLBS with no processing of the result. 2115*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlbs(<16 x i8> %a, <16 x i8> %b) { 2116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlbs: 2117*9880d681SAndroid Build Coastguard Worker; CHECK: vchlbs {{%v[0-9]+}}, %v24, %v26 2118*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2119*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 2120*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2121*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8> %a, <16 x i8> %b) 2122*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 1 2123*9880d681SAndroid Build Coastguard Worker ret i32 %res 2124*9880d681SAndroid Build Coastguard Worker} 2125*9880d681SAndroid Build Coastguard Worker 2126*9880d681SAndroid Build Coastguard Worker; VCHLBS, returning 1 if any elements are higher (CC != 3). 2127*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlbs_any_bool(<16 x i8> %a, <16 x i8> %b) { 2128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlbs_any_bool: 2129*9880d681SAndroid Build Coastguard Worker; CHECK: vchlbs {{%v[0-9]+}}, %v24, %v26 2130*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2131*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912 2132*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 2133*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2134*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8> %a, <16 x i8> %b) 2135*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 1 2136*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %res, 3 2137*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 2138*9880d681SAndroid Build Coastguard Worker ret i32 %ext 2139*9880d681SAndroid Build Coastguard Worker} 2140*9880d681SAndroid Build Coastguard Worker 2141*9880d681SAndroid Build Coastguard Worker; VCHLBS, storing to %ptr if any elements are higher. 2142*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vchlbs_any_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) { 2143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlbs_any_store: 2144*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 2145*9880d681SAndroid Build Coastguard Worker; CHECK: vchlbs %v24, %v24, %v26 2146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14 2147*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 2148*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2149*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8> %a, <16 x i8> %b) 2150*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2151*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2152*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %cc, 2 2153*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 2154*9880d681SAndroid Build Coastguard Worker 2155*9880d681SAndroid Build Coastguard Workerstore: 2156*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 2157*9880d681SAndroid Build Coastguard Worker br label %exit 2158*9880d681SAndroid Build Coastguard Worker 2159*9880d681SAndroid Build Coastguard Workerexit: 2160*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2161*9880d681SAndroid Build Coastguard Worker} 2162*9880d681SAndroid Build Coastguard Worker 2163*9880d681SAndroid Build Coastguard Worker; VCHLHS with no processing of the result. 2164*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlhs(<8 x i16> %a, <8 x i16> %b) { 2165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlhs: 2166*9880d681SAndroid Build Coastguard Worker; CHECK: vchlhs {{%v[0-9]+}}, %v24, %v26 2167*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2168*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 2169*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2170*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16> %a, <8 x i16> %b) 2171*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 1 2172*9880d681SAndroid Build Coastguard Worker ret i32 %res 2173*9880d681SAndroid Build Coastguard Worker} 2174*9880d681SAndroid Build Coastguard Worker 2175*9880d681SAndroid Build Coastguard Worker; VCHLHS, returning 1 if not all elements are higher. 2176*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlhs_notall_bool(<8 x i16> %a, <8 x i16> %b) { 2177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlhs_notall_bool: 2178*9880d681SAndroid Build Coastguard Worker; CHECK: vchlhs {{%v[0-9]+}}, %v24, %v26 2179*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2180*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36 2181*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2182*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16> %a, <8 x i16> %b) 2183*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 1 2184*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %res, 1 2185*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 2186*9880d681SAndroid Build Coastguard Worker ret i32 %ext 2187*9880d681SAndroid Build Coastguard Worker} 2188*9880d681SAndroid Build Coastguard Worker 2189*9880d681SAndroid Build Coastguard Worker; VCHLHS, storing to %ptr if not all elements are higher. 2190*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vchlhs_notall_store(<8 x i16> %a, <8 x i16> %b, 2191*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 2192*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlhs_notall_store: 2193*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 2194*9880d681SAndroid Build Coastguard Worker; CHECK: vchlhs %v24, %v24, %v26 2195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14 2196*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 2197*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2198*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16> %a, <8 x i16> %b) 2199*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2200*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2201*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %cc, 0 2202*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 2203*9880d681SAndroid Build Coastguard Worker 2204*9880d681SAndroid Build Coastguard Workerstore: 2205*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 2206*9880d681SAndroid Build Coastguard Worker br label %exit 2207*9880d681SAndroid Build Coastguard Worker 2208*9880d681SAndroid Build Coastguard Workerexit: 2209*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2210*9880d681SAndroid Build Coastguard Worker} 2211*9880d681SAndroid Build Coastguard Worker 2212*9880d681SAndroid Build Coastguard Worker; VCHLFS with no processing of the result. 2213*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlfs(<4 x i32> %a, <4 x i32> %b) { 2214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlfs: 2215*9880d681SAndroid Build Coastguard Worker; CHECK: vchlfs {{%v[0-9]+}}, %v24, %v26 2216*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2217*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 2218*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2219*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32> %a, <4 x i32> %b) 2220*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 1 2221*9880d681SAndroid Build Coastguard Worker ret i32 %res 2222*9880d681SAndroid Build Coastguard Worker} 2223*9880d681SAndroid Build Coastguard Worker 2224*9880d681SAndroid Build Coastguard Worker; VCHLFS, returning 1 if no elements are higher. 2225*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlfs_none_bool(<4 x i32> %a, <4 x i32> %b) { 2226*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlfs_none_bool: 2227*9880d681SAndroid Build Coastguard Worker; CHECK: vchlfs {{%v[0-9]+}}, %v24, %v26 2228*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2229*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35 2230*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2231*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32> %a, <4 x i32> %b) 2232*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 1 2233*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %res, 3 2234*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 2235*9880d681SAndroid Build Coastguard Worker ret i32 %ext 2236*9880d681SAndroid Build Coastguard Worker} 2237*9880d681SAndroid Build Coastguard Worker 2238*9880d681SAndroid Build Coastguard Worker; VCHLFS, storing to %ptr if no elements are higher. 2239*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vchlfs_none_store(<4 x i32> %a, <4 x i32> %b, 2240*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 2241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlfs_none_store: 2242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 2243*9880d681SAndroid Build Coastguard Worker; CHECK: vchlfs %v24, %v24, %v26 2244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14 2245*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 2246*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2247*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32> %a, <4 x i32> %b) 2248*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2249*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2250*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %cc, 3 2251*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 2252*9880d681SAndroid Build Coastguard Worker 2253*9880d681SAndroid Build Coastguard Workerstore: 2254*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 2255*9880d681SAndroid Build Coastguard Worker br label %exit 2256*9880d681SAndroid Build Coastguard Worker 2257*9880d681SAndroid Build Coastguard Workerexit: 2258*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2259*9880d681SAndroid Build Coastguard Worker} 2260*9880d681SAndroid Build Coastguard Worker 2261*9880d681SAndroid Build Coastguard Worker; VCHLGS with no processing of the result. 2262*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlgs(<2 x i64> %a, <2 x i64> %b) { 2263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlgs: 2264*9880d681SAndroid Build Coastguard Worker; CHECK: vchlgs {{%v[0-9]+}}, %v24, %v26 2265*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2266*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 2267*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2268*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64> %a, <2 x i64> %b) 2269*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 2270*9880d681SAndroid Build Coastguard Worker ret i32 %res 2271*9880d681SAndroid Build Coastguard Worker} 2272*9880d681SAndroid Build Coastguard Worker 2273*9880d681SAndroid Build Coastguard Worker; VCHLGS returning 1 if all elements are higher (CC == 0). 2274*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlgs_all_bool(<2 x i64> %a, <2 x i64> %b) { 2275*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlgs_all_bool: 2276*9880d681SAndroid Build Coastguard Worker; CHECK: vchlgs {{%v[0-9]+}}, %v24, %v26 2277*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 2278*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456 2279*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 2280*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2281*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64> %a, <2 x i64> %b) 2282*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 2283*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %res, 1 2284*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 2285*9880d681SAndroid Build Coastguard Worker ret i32 %ext 2286*9880d681SAndroid Build Coastguard Worker} 2287*9880d681SAndroid Build Coastguard Worker 2288*9880d681SAndroid Build Coastguard Worker; VCHLGS, storing to %ptr if all elements are higher. 2289*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vchlgs_all_store(<2 x i64> %a, <2 x i64> %b, i32 *%ptr) { 2290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlgs_all_store: 2291*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 2292*9880d681SAndroid Build Coastguard Worker; CHECK: vchlgs %v24, %v24, %v26 2293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14 2294*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 2295*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2296*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64> %a, <2 x i64> %b) 2297*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 0 2298*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<2 x i64>, i32} %call, 1 2299*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i32 %cc, 0 2300*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 2301*9880d681SAndroid Build Coastguard Worker 2302*9880d681SAndroid Build Coastguard Workerstore: 2303*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 2304*9880d681SAndroid Build Coastguard Worker br label %exit 2305*9880d681SAndroid Build Coastguard Worker 2306*9880d681SAndroid Build Coastguard Workerexit: 2307*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 2308*9880d681SAndroid Build Coastguard Worker} 2309*9880d681SAndroid Build Coastguard Worker 2310*9880d681SAndroid Build Coastguard Worker; VFAEB with !IN !RT. 2311*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_0(<16 x i8> %a, <16 x i8> %b) { 2312*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_0: 2313*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 0 2314*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2315*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 0) 2316*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2317*9880d681SAndroid Build Coastguard Worker} 2318*9880d681SAndroid Build Coastguard Worker 2319*9880d681SAndroid Build Coastguard Worker; VFAEB with !IN RT. 2320*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_4(<16 x i8> %a, <16 x i8> %b) { 2321*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_4: 2322*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 4 2323*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2324*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 4) 2325*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2326*9880d681SAndroid Build Coastguard Worker} 2327*9880d681SAndroid Build Coastguard Worker 2328*9880d681SAndroid Build Coastguard Worker; VFAEB with IN !RT. 2329*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_8(<16 x i8> %a, <16 x i8> %b) { 2330*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_8: 2331*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 8 2332*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2333*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 8) 2334*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2335*9880d681SAndroid Build Coastguard Worker} 2336*9880d681SAndroid Build Coastguard Worker 2337*9880d681SAndroid Build Coastguard Worker; VFAEB with IN RT. 2338*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_12(<16 x i8> %a, <16 x i8> %b) { 2339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_12: 2340*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 12 2341*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2342*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 12) 2343*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2344*9880d681SAndroid Build Coastguard Worker} 2345*9880d681SAndroid Build Coastguard Worker 2346*9880d681SAndroid Build Coastguard Worker; VFAEB with CS -- should be ignored. 2347*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_1(<16 x i8> %a, <16 x i8> %b) { 2348*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_1: 2349*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 0 2350*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2351*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 1) 2352*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2353*9880d681SAndroid Build Coastguard Worker} 2354*9880d681SAndroid Build Coastguard Worker 2355*9880d681SAndroid Build Coastguard Worker; VFAEH. 2356*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaeh(<8 x i16> %a, <8 x i16> %b) { 2357*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeh: 2358*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeh %v24, %v24, %v26, 4 2359*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2360*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vfaeh(<8 x i16> %a, <8 x i16> %b, i32 4) 2361*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2362*9880d681SAndroid Build Coastguard Worker} 2363*9880d681SAndroid Build Coastguard Worker 2364*9880d681SAndroid Build Coastguard Worker; VFAEF. 2365*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaef(<4 x i32> %a, <4 x i32> %b) { 2366*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaef: 2367*9880d681SAndroid Build Coastguard Worker; CHECK: vfaef %v24, %v24, %v26, 8 2368*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2369*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vfaef(<4 x i32> %a, <4 x i32> %b, i32 8) 2370*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2371*9880d681SAndroid Build Coastguard Worker} 2372*9880d681SAndroid Build Coastguard Worker 2373*9880d681SAndroid Build Coastguard Worker; VFAEBS. 2374*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaebs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) { 2375*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaebs: 2376*9880d681SAndroid Build Coastguard Worker; CHECK: vfaebs %v24, %v24, %v26, 0 2377*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2378*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2379*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2380*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2381*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vfaebs(<16 x i8> %a, <16 x i8> %b, 2382*9880d681SAndroid Build Coastguard Worker i32 0) 2383*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2384*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2385*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2386*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2387*9880d681SAndroid Build Coastguard Worker} 2388*9880d681SAndroid Build Coastguard Worker 2389*9880d681SAndroid Build Coastguard Worker; VFAEHS. 2390*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaehs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 2391*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaehs: 2392*9880d681SAndroid Build Coastguard Worker; CHECK: vfaehs %v24, %v24, %v26, 4 2393*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2394*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2395*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2396*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2397*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vfaehs(<8 x i16> %a, <8 x i16> %b, 2398*9880d681SAndroid Build Coastguard Worker i32 4) 2399*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2400*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2401*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2402*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2403*9880d681SAndroid Build Coastguard Worker} 2404*9880d681SAndroid Build Coastguard Worker 2405*9880d681SAndroid Build Coastguard Worker; VFAEFS. 2406*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaefs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 2407*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaefs: 2408*9880d681SAndroid Build Coastguard Worker; CHECK: vfaefs %v24, %v24, %v26, 8 2409*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2410*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2411*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2412*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2413*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vfaefs(<4 x i32> %a, <4 x i32> %b, 2414*9880d681SAndroid Build Coastguard Worker i32 8) 2415*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2416*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2417*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2418*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2419*9880d681SAndroid Build Coastguard Worker} 2420*9880d681SAndroid Build Coastguard Worker 2421*9880d681SAndroid Build Coastguard Worker; VFAEZB with !IN !RT. 2422*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_0(<16 x i8> %a, <16 x i8> %b) { 2423*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_0: 2424*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 0 2425*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2426*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 0) 2427*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2428*9880d681SAndroid Build Coastguard Worker} 2429*9880d681SAndroid Build Coastguard Worker 2430*9880d681SAndroid Build Coastguard Worker; VFAEZB with !IN RT. 2431*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_4(<16 x i8> %a, <16 x i8> %b) { 2432*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_4: 2433*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 4 2434*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2435*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 4) 2436*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2437*9880d681SAndroid Build Coastguard Worker} 2438*9880d681SAndroid Build Coastguard Worker 2439*9880d681SAndroid Build Coastguard Worker; VFAEZB with IN !RT. 2440*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_8(<16 x i8> %a, <16 x i8> %b) { 2441*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_8: 2442*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 8 2443*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2444*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 8) 2445*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2446*9880d681SAndroid Build Coastguard Worker} 2447*9880d681SAndroid Build Coastguard Worker 2448*9880d681SAndroid Build Coastguard Worker; VFAEZB with IN RT. 2449*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_12(<16 x i8> %a, <16 x i8> %b) { 2450*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_12: 2451*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 12 2452*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2453*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 12) 2454*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2455*9880d681SAndroid Build Coastguard Worker} 2456*9880d681SAndroid Build Coastguard Worker 2457*9880d681SAndroid Build Coastguard Worker; VFAEZB with CS -- should be ignored. 2458*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_1(<16 x i8> %a, <16 x i8> %b) { 2459*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_1: 2460*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 0 2461*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2462*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 1) 2463*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2464*9880d681SAndroid Build Coastguard Worker} 2465*9880d681SAndroid Build Coastguard Worker 2466*9880d681SAndroid Build Coastguard Worker; VFAEZH. 2467*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaezh(<8 x i16> %a, <8 x i16> %b) { 2468*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezh: 2469*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezh %v24, %v24, %v26, 4 2470*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2471*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vfaezh(<8 x i16> %a, <8 x i16> %b, i32 4) 2472*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2473*9880d681SAndroid Build Coastguard Worker} 2474*9880d681SAndroid Build Coastguard Worker 2475*9880d681SAndroid Build Coastguard Worker; VFAEZF. 2476*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaezf(<4 x i32> %a, <4 x i32> %b) { 2477*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezf: 2478*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezf %v24, %v24, %v26, 8 2479*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2480*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vfaezf(<4 x i32> %a, <4 x i32> %b, i32 8) 2481*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2482*9880d681SAndroid Build Coastguard Worker} 2483*9880d681SAndroid Build Coastguard Worker 2484*9880d681SAndroid Build Coastguard Worker; VFAEZBS. 2485*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezbs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) { 2486*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezbs: 2487*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezbs %v24, %v24, %v26, 0 2488*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2489*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2490*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2491*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2492*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vfaezbs(<16 x i8> %a, <16 x i8> %b, 2493*9880d681SAndroid Build Coastguard Worker i32 0) 2494*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2495*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2496*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2497*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2498*9880d681SAndroid Build Coastguard Worker} 2499*9880d681SAndroid Build Coastguard Worker 2500*9880d681SAndroid Build Coastguard Worker; VFAEZHS. 2501*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaezhs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 2502*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezhs: 2503*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezhs %v24, %v24, %v26, 4 2504*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2505*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2506*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2507*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2508*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vfaezhs(<8 x i16> %a, <8 x i16> %b, 2509*9880d681SAndroid Build Coastguard Worker i32 4) 2510*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2511*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2512*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2513*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2514*9880d681SAndroid Build Coastguard Worker} 2515*9880d681SAndroid Build Coastguard Worker 2516*9880d681SAndroid Build Coastguard Worker; VFAEZFS. 2517*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaezfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 2518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezfs: 2519*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezfs %v24, %v24, %v26, 8 2520*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2521*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2522*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2523*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2524*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vfaezfs(<4 x i32> %a, <4 x i32> %b, 2525*9880d681SAndroid Build Coastguard Worker i32 8) 2526*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2527*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2528*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2529*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2530*9880d681SAndroid Build Coastguard Worker} 2531*9880d681SAndroid Build Coastguard Worker 2532*9880d681SAndroid Build Coastguard Worker; VFEEB. 2533*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeeb_0(<16 x i8> %a, <16 x i8> %b) { 2534*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeeb_0: 2535*9880d681SAndroid Build Coastguard Worker; CHECK: vfeeb %v24, %v24, %v26 2536*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2537*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfeeb(<16 x i8> %a, <16 x i8> %b) 2538*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2539*9880d681SAndroid Build Coastguard Worker} 2540*9880d681SAndroid Build Coastguard Worker 2541*9880d681SAndroid Build Coastguard Worker; VFEEH. 2542*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeeh(<8 x i16> %a, <8 x i16> %b) { 2543*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeeh: 2544*9880d681SAndroid Build Coastguard Worker; CHECK: vfeeh %v24, %v24, %v26 2545*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2546*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vfeeh(<8 x i16> %a, <8 x i16> %b) 2547*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2548*9880d681SAndroid Build Coastguard Worker} 2549*9880d681SAndroid Build Coastguard Worker 2550*9880d681SAndroid Build Coastguard Worker; VFEEF. 2551*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeef(<4 x i32> %a, <4 x i32> %b) { 2552*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeef: 2553*9880d681SAndroid Build Coastguard Worker; CHECK: vfeef %v24, %v24, %v26 2554*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2555*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vfeef(<4 x i32> %a, <4 x i32> %b) 2556*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2557*9880d681SAndroid Build Coastguard Worker} 2558*9880d681SAndroid Build Coastguard Worker 2559*9880d681SAndroid Build Coastguard Worker; VFEEBS. 2560*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeebs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) { 2561*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeebs: 2562*9880d681SAndroid Build Coastguard Worker; CHECK: vfeebs %v24, %v24, %v26 2563*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2564*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2565*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2566*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2567*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vfeebs(<16 x i8> %a, <16 x i8> %b) 2568*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2569*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2570*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2571*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2572*9880d681SAndroid Build Coastguard Worker} 2573*9880d681SAndroid Build Coastguard Worker 2574*9880d681SAndroid Build Coastguard Worker; VFEEHS. 2575*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeehs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 2576*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeehs: 2577*9880d681SAndroid Build Coastguard Worker; CHECK: vfeehs %v24, %v24, %v26 2578*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2579*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2580*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2581*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2582*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vfeehs(<8 x i16> %a, <8 x i16> %b) 2583*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2584*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2585*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2586*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2587*9880d681SAndroid Build Coastguard Worker} 2588*9880d681SAndroid Build Coastguard Worker 2589*9880d681SAndroid Build Coastguard Worker; VFEEFS. 2590*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeefs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 2591*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeefs: 2592*9880d681SAndroid Build Coastguard Worker; CHECK: vfeefs %v24, %v24, %v26 2593*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2594*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2595*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2596*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2597*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vfeefs(<4 x i32> %a, <4 x i32> %b) 2598*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2599*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2600*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2601*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2602*9880d681SAndroid Build Coastguard Worker} 2603*9880d681SAndroid Build Coastguard Worker 2604*9880d681SAndroid Build Coastguard Worker; VFEEZB. 2605*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeezb(<16 x i8> %a, <16 x i8> %b) { 2606*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezb: 2607*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezb %v24, %v24, %v26 2608*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2609*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfeezb(<16 x i8> %a, <16 x i8> %b) 2610*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2611*9880d681SAndroid Build Coastguard Worker} 2612*9880d681SAndroid Build Coastguard Worker 2613*9880d681SAndroid Build Coastguard Worker; VFEEZH. 2614*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeezh(<8 x i16> %a, <8 x i16> %b) { 2615*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezh: 2616*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezh %v24, %v24, %v26 2617*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2618*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vfeezh(<8 x i16> %a, <8 x i16> %b) 2619*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2620*9880d681SAndroid Build Coastguard Worker} 2621*9880d681SAndroid Build Coastguard Worker 2622*9880d681SAndroid Build Coastguard Worker; VFEEZF. 2623*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeezf(<4 x i32> %a, <4 x i32> %b) { 2624*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezf: 2625*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezf %v24, %v24, %v26 2626*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2627*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vfeezf(<4 x i32> %a, <4 x i32> %b) 2628*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2629*9880d681SAndroid Build Coastguard Worker} 2630*9880d681SAndroid Build Coastguard Worker 2631*9880d681SAndroid Build Coastguard Worker; VFEEZBS. 2632*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeezbs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) { 2633*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezbs: 2634*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezbs %v24, %v24, %v26 2635*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2636*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2637*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2638*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2639*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vfeezbs(<16 x i8> %a, <16 x i8> %b) 2640*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2641*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2642*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2643*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2644*9880d681SAndroid Build Coastguard Worker} 2645*9880d681SAndroid Build Coastguard Worker 2646*9880d681SAndroid Build Coastguard Worker; VFEEZHS. 2647*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeezhs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 2648*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezhs: 2649*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezhs %v24, %v24, %v26 2650*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2651*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2652*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2653*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2654*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vfeezhs(<8 x i16> %a, <8 x i16> %b) 2655*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2656*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2657*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2658*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2659*9880d681SAndroid Build Coastguard Worker} 2660*9880d681SAndroid Build Coastguard Worker 2661*9880d681SAndroid Build Coastguard Worker; VFEEZFS. 2662*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeezfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 2663*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezfs: 2664*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezfs %v24, %v24, %v26 2665*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2666*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2667*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2668*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2669*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vfeezfs(<4 x i32> %a, <4 x i32> %b) 2670*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2671*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2672*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2673*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2674*9880d681SAndroid Build Coastguard Worker} 2675*9880d681SAndroid Build Coastguard Worker 2676*9880d681SAndroid Build Coastguard Worker; VFENEB. 2677*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeneb_0(<16 x i8> %a, <16 x i8> %b) { 2678*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeneb_0: 2679*9880d681SAndroid Build Coastguard Worker; CHECK: vfeneb %v24, %v24, %v26 2680*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2681*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfeneb(<16 x i8> %a, <16 x i8> %b) 2682*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2683*9880d681SAndroid Build Coastguard Worker} 2684*9880d681SAndroid Build Coastguard Worker 2685*9880d681SAndroid Build Coastguard Worker; VFENEH. 2686*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeneh(<8 x i16> %a, <8 x i16> %b) { 2687*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeneh: 2688*9880d681SAndroid Build Coastguard Worker; CHECK: vfeneh %v24, %v24, %v26 2689*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2690*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vfeneh(<8 x i16> %a, <8 x i16> %b) 2691*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2692*9880d681SAndroid Build Coastguard Worker} 2693*9880d681SAndroid Build Coastguard Worker 2694*9880d681SAndroid Build Coastguard Worker; VFENEF. 2695*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenef(<4 x i32> %a, <4 x i32> %b) { 2696*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenef: 2697*9880d681SAndroid Build Coastguard Worker; CHECK: vfenef %v24, %v24, %v26 2698*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2699*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vfenef(<4 x i32> %a, <4 x i32> %b) 2700*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2701*9880d681SAndroid Build Coastguard Worker} 2702*9880d681SAndroid Build Coastguard Worker 2703*9880d681SAndroid Build Coastguard Worker; VFENEBS. 2704*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfenebs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) { 2705*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenebs: 2706*9880d681SAndroid Build Coastguard Worker; CHECK: vfenebs %v24, %v24, %v26 2707*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2708*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2709*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2710*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2711*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vfenebs(<16 x i8> %a, <16 x i8> %b) 2712*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2713*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2714*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2715*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2716*9880d681SAndroid Build Coastguard Worker} 2717*9880d681SAndroid Build Coastguard Worker 2718*9880d681SAndroid Build Coastguard Worker; VFENEHS. 2719*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfenehs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 2720*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenehs: 2721*9880d681SAndroid Build Coastguard Worker; CHECK: vfenehs %v24, %v24, %v26 2722*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2723*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2724*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2725*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2726*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vfenehs(<8 x i16> %a, <8 x i16> %b) 2727*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2728*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2729*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2730*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2731*9880d681SAndroid Build Coastguard Worker} 2732*9880d681SAndroid Build Coastguard Worker 2733*9880d681SAndroid Build Coastguard Worker; VFENEFS. 2734*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenefs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 2735*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenefs: 2736*9880d681SAndroid Build Coastguard Worker; CHECK: vfenefs %v24, %v24, %v26 2737*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2738*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2739*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2740*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2741*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vfenefs(<4 x i32> %a, <4 x i32> %b) 2742*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2743*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2744*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2745*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2746*9880d681SAndroid Build Coastguard Worker} 2747*9880d681SAndroid Build Coastguard Worker 2748*9880d681SAndroid Build Coastguard Worker; VFENEZB. 2749*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfenezb(<16 x i8> %a, <16 x i8> %b) { 2750*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezb: 2751*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezb %v24, %v24, %v26 2752*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2753*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vfenezb(<16 x i8> %a, <16 x i8> %b) 2754*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2755*9880d681SAndroid Build Coastguard Worker} 2756*9880d681SAndroid Build Coastguard Worker 2757*9880d681SAndroid Build Coastguard Worker; VFENEZH. 2758*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfenezh(<8 x i16> %a, <8 x i16> %b) { 2759*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezh: 2760*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezh %v24, %v24, %v26 2761*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2762*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vfenezh(<8 x i16> %a, <8 x i16> %b) 2763*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2764*9880d681SAndroid Build Coastguard Worker} 2765*9880d681SAndroid Build Coastguard Worker 2766*9880d681SAndroid Build Coastguard Worker; VFENEZF. 2767*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenezf(<4 x i32> %a, <4 x i32> %b) { 2768*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezf: 2769*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezf %v24, %v24, %v26 2770*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2771*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vfenezf(<4 x i32> %a, <4 x i32> %b) 2772*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2773*9880d681SAndroid Build Coastguard Worker} 2774*9880d681SAndroid Build Coastguard Worker 2775*9880d681SAndroid Build Coastguard Worker; VFENEZBS. 2776*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfenezbs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) { 2777*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezbs: 2778*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezbs %v24, %v24, %v26 2779*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2780*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2781*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2782*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2783*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vfenezbs(<16 x i8> %a, <16 x i8> %b) 2784*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2785*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2786*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2787*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2788*9880d681SAndroid Build Coastguard Worker} 2789*9880d681SAndroid Build Coastguard Worker 2790*9880d681SAndroid Build Coastguard Worker; VFENEZHS. 2791*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfenezhs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) { 2792*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezhs: 2793*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezhs %v24, %v24, %v26 2794*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2795*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2796*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2797*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2798*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vfenezhs(<8 x i16> %a, <8 x i16> %b) 2799*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2800*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2801*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2802*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2803*9880d681SAndroid Build Coastguard Worker} 2804*9880d681SAndroid Build Coastguard Worker 2805*9880d681SAndroid Build Coastguard Worker; VFENEZFS. 2806*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenezfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) { 2807*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezfs: 2808*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezfs %v24, %v24, %v26 2809*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2810*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2811*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2812*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2813*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vfenezfs(<4 x i32> %a, <4 x i32> %b) 2814*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2815*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2816*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2817*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2818*9880d681SAndroid Build Coastguard Worker} 2819*9880d681SAndroid Build Coastguard Worker 2820*9880d681SAndroid Build Coastguard Worker; VISTRB. 2821*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vistrb(<16 x i8> %a) { 2822*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrb: 2823*9880d681SAndroid Build Coastguard Worker; CHECK: vistrb %v24, %v24 2824*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2825*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vistrb(<16 x i8> %a) 2826*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2827*9880d681SAndroid Build Coastguard Worker} 2828*9880d681SAndroid Build Coastguard Worker 2829*9880d681SAndroid Build Coastguard Worker; VISTRH. 2830*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vistrh(<8 x i16> %a) { 2831*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrh: 2832*9880d681SAndroid Build Coastguard Worker; CHECK: vistrh %v24, %v24 2833*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2834*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vistrh(<8 x i16> %a) 2835*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2836*9880d681SAndroid Build Coastguard Worker} 2837*9880d681SAndroid Build Coastguard Worker 2838*9880d681SAndroid Build Coastguard Worker; VISTRF. 2839*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vistrf(<4 x i32> %a) { 2840*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrf: 2841*9880d681SAndroid Build Coastguard Worker; CHECK: vistrf %v24, %v24 2842*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2843*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vistrf(<4 x i32> %a) 2844*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2845*9880d681SAndroid Build Coastguard Worker} 2846*9880d681SAndroid Build Coastguard Worker 2847*9880d681SAndroid Build Coastguard Worker; VISTRBS. 2848*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vistrbs(<16 x i8> %a, i32 *%ccptr) { 2849*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrbs: 2850*9880d681SAndroid Build Coastguard Worker; CHECK: vistrbs %v24, %v24 2851*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2852*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2853*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2854*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2855*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vistrbs(<16 x i8> %a) 2856*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2857*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2858*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2859*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2860*9880d681SAndroid Build Coastguard Worker} 2861*9880d681SAndroid Build Coastguard Worker 2862*9880d681SAndroid Build Coastguard Worker; VISTRHS. 2863*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vistrhs(<8 x i16> %a, i32 *%ccptr) { 2864*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrhs: 2865*9880d681SAndroid Build Coastguard Worker; CHECK: vistrhs %v24, %v24 2866*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2867*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2868*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2869*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2870*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vistrhs(<8 x i16> %a) 2871*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2872*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2873*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2874*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2875*9880d681SAndroid Build Coastguard Worker} 2876*9880d681SAndroid Build Coastguard Worker 2877*9880d681SAndroid Build Coastguard Worker; VISTRFS. 2878*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vistrfs(<4 x i32> %a, i32 *%ccptr) { 2879*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrfs: 2880*9880d681SAndroid Build Coastguard Worker; CHECK: vistrfs %v24, %v24 2881*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2882*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2883*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2884*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2885*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vistrfs(<4 x i32> %a) 2886*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 2887*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 2888*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2889*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2890*9880d681SAndroid Build Coastguard Worker} 2891*9880d681SAndroid Build Coastguard Worker 2892*9880d681SAndroid Build Coastguard Worker; VSTRCB with !IN !RT. 2893*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_0(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 2894*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_0: 2895*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 0 2896*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2897*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b, 2898*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 0) 2899*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2900*9880d681SAndroid Build Coastguard Worker} 2901*9880d681SAndroid Build Coastguard Worker 2902*9880d681SAndroid Build Coastguard Worker; VSTRCB with !IN RT. 2903*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_4(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 2904*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_4: 2905*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 4 2906*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2907*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b, 2908*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 4) 2909*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2910*9880d681SAndroid Build Coastguard Worker} 2911*9880d681SAndroid Build Coastguard Worker 2912*9880d681SAndroid Build Coastguard Worker; VSTRCB with IN !RT. 2913*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 2914*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_8: 2915*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 8 2916*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2917*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b, 2918*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 8) 2919*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2920*9880d681SAndroid Build Coastguard Worker} 2921*9880d681SAndroid Build Coastguard Worker 2922*9880d681SAndroid Build Coastguard Worker; VSTRCB with IN RT. 2923*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_12(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 2924*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_12: 2925*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 12 2926*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2927*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b, 2928*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 12) 2929*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2930*9880d681SAndroid Build Coastguard Worker} 2931*9880d681SAndroid Build Coastguard Worker 2932*9880d681SAndroid Build Coastguard Worker; VSTRCB with CS -- should be ignored. 2933*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 2934*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_1: 2935*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 0 2936*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2937*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b, 2938*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 1) 2939*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2940*9880d681SAndroid Build Coastguard Worker} 2941*9880d681SAndroid Build Coastguard Worker 2942*9880d681SAndroid Build Coastguard Worker; VSTRCH. 2943*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrch(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) { 2944*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrch: 2945*9880d681SAndroid Build Coastguard Worker; CHECK: vstrch %v24, %v24, %v26, %v28, 4 2946*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2947*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vstrch(<8 x i16> %a, <8 x i16> %b, 2948*9880d681SAndroid Build Coastguard Worker <8 x i16> %c, i32 4) 2949*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2950*9880d681SAndroid Build Coastguard Worker} 2951*9880d681SAndroid Build Coastguard Worker 2952*9880d681SAndroid Build Coastguard Worker; VSTRCF. 2953*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrcf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) { 2954*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcf: 2955*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcf %v24, %v24, %v26, %v28, 8 2956*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2957*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vstrcf(<4 x i32> %a, <4 x i32> %b, 2958*9880d681SAndroid Build Coastguard Worker <4 x i32> %c, i32 8) 2959*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 2960*9880d681SAndroid Build Coastguard Worker} 2961*9880d681SAndroid Build Coastguard Worker 2962*9880d681SAndroid Build Coastguard Worker; VSTRCBS. 2963*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcbs(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, 2964*9880d681SAndroid Build Coastguard Worker i32 *%ccptr) { 2965*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcbs: 2966*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcbs %v24, %v24, %v26, %v28, 0 2967*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2968*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2969*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2970*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2971*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vstrcbs(<16 x i8> %a, <16 x i8> %b, 2972*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 0) 2973*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 2974*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 2975*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2976*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 2977*9880d681SAndroid Build Coastguard Worker} 2978*9880d681SAndroid Build Coastguard Worker 2979*9880d681SAndroid Build Coastguard Worker; VSTRCHS. 2980*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrchs(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, 2981*9880d681SAndroid Build Coastguard Worker i32 *%ccptr) { 2982*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrchs: 2983*9880d681SAndroid Build Coastguard Worker; CHECK: vstrchs %v24, %v24, %v26, %v28, 4 2984*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 2985*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 2986*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 2987*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 2988*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vstrchs(<8 x i16> %a, <8 x i16> %b, 2989*9880d681SAndroid Build Coastguard Worker <8 x i16> %c, i32 4) 2990*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 2991*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 2992*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 2993*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 2994*9880d681SAndroid Build Coastguard Worker} 2995*9880d681SAndroid Build Coastguard Worker 2996*9880d681SAndroid Build Coastguard Worker; VSTRCFS. 2997*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrcfs(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, 2998*9880d681SAndroid Build Coastguard Worker i32 *%ccptr) { 2999*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcfs: 3000*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcfs %v24, %v24, %v26, %v28, 8 3001*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 3002*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 3003*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 3004*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3005*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vstrcfs(<4 x i32> %a, <4 x i32> %b, 3006*9880d681SAndroid Build Coastguard Worker <4 x i32> %c, i32 8) 3007*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 3008*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 3009*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 3010*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 3011*9880d681SAndroid Build Coastguard Worker} 3012*9880d681SAndroid Build Coastguard Worker 3013*9880d681SAndroid Build Coastguard Worker; VSTRCZB with !IN !RT. 3014*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_0(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 3015*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_0: 3016*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 0 3017*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3018*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b, 3019*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 0) 3020*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 3021*9880d681SAndroid Build Coastguard Worker} 3022*9880d681SAndroid Build Coastguard Worker 3023*9880d681SAndroid Build Coastguard Worker; VSTRCZB with !IN RT. 3024*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_4(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 3025*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_4: 3026*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 4 3027*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3028*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b, 3029*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 4) 3030*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 3031*9880d681SAndroid Build Coastguard Worker} 3032*9880d681SAndroid Build Coastguard Worker 3033*9880d681SAndroid Build Coastguard Worker; VSTRCZB with IN !RT. 3034*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 3035*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_8: 3036*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 8 3037*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3038*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b, 3039*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 8) 3040*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 3041*9880d681SAndroid Build Coastguard Worker} 3042*9880d681SAndroid Build Coastguard Worker 3043*9880d681SAndroid Build Coastguard Worker; VSTRCZB with IN RT. 3044*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_12(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 3045*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_12: 3046*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 12 3047*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3048*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b, 3049*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 12) 3050*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 3051*9880d681SAndroid Build Coastguard Worker} 3052*9880d681SAndroid Build Coastguard Worker 3053*9880d681SAndroid Build Coastguard Worker; VSTRCZB with CS -- should be ignored. 3054*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) { 3055*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_1: 3056*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 0 3057*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3058*9880d681SAndroid Build Coastguard Worker %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b, 3059*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 1) 3060*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 3061*9880d681SAndroid Build Coastguard Worker} 3062*9880d681SAndroid Build Coastguard Worker 3063*9880d681SAndroid Build Coastguard Worker; VSTRCZH. 3064*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrczh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) { 3065*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczh: 3066*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczh %v24, %v24, %v26, %v28, 4 3067*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3068*9880d681SAndroid Build Coastguard Worker %res = call <8 x i16> @llvm.s390.vstrczh(<8 x i16> %a, <8 x i16> %b, 3069*9880d681SAndroid Build Coastguard Worker <8 x i16> %c, i32 4) 3070*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 3071*9880d681SAndroid Build Coastguard Worker} 3072*9880d681SAndroid Build Coastguard Worker 3073*9880d681SAndroid Build Coastguard Worker; VSTRCZF. 3074*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrczf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) { 3075*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczf: 3076*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczf %v24, %v24, %v26, %v28, 8 3077*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3078*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.s390.vstrczf(<4 x i32> %a, <4 x i32> %b, 3079*9880d681SAndroid Build Coastguard Worker <4 x i32> %c, i32 8) 3080*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 3081*9880d681SAndroid Build Coastguard Worker} 3082*9880d681SAndroid Build Coastguard Worker 3083*9880d681SAndroid Build Coastguard Worker; VSTRCZBS. 3084*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczbs(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, 3085*9880d681SAndroid Build Coastguard Worker i32 *%ccptr) { 3086*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczbs: 3087*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczbs %v24, %v24, %v26, %v28, 0 3088*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 3089*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 3090*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 3091*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3092*9880d681SAndroid Build Coastguard Worker %call = call {<16 x i8>, i32} @llvm.s390.vstrczbs(<16 x i8> %a, <16 x i8> %b, 3093*9880d681SAndroid Build Coastguard Worker <16 x i8> %c, i32 0) 3094*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<16 x i8>, i32} %call, 0 3095*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<16 x i8>, i32} %call, 1 3096*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 3097*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 3098*9880d681SAndroid Build Coastguard Worker} 3099*9880d681SAndroid Build Coastguard Worker 3100*9880d681SAndroid Build Coastguard Worker; VSTRCZHS. 3101*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrczhs(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, 3102*9880d681SAndroid Build Coastguard Worker i32 *%ccptr) { 3103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczhs: 3104*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczhs %v24, %v24, %v26, %v28, 4 3105*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 3106*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 3107*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 3108*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3109*9880d681SAndroid Build Coastguard Worker %call = call {<8 x i16>, i32} @llvm.s390.vstrczhs(<8 x i16> %a, <8 x i16> %b, 3110*9880d681SAndroid Build Coastguard Worker <8 x i16> %c, i32 4) 3111*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<8 x i16>, i32} %call, 0 3112*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<8 x i16>, i32} %call, 1 3113*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 3114*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 3115*9880d681SAndroid Build Coastguard Worker} 3116*9880d681SAndroid Build Coastguard Worker 3117*9880d681SAndroid Build Coastguard Worker; VSTRCZFS. 3118*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrczfs(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, 3119*9880d681SAndroid Build Coastguard Worker i32 *%ccptr) { 3120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczfs: 3121*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczfs %v24, %v24, %v26, %v28, 8 3122*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 3123*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28 3124*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2) 3125*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3126*9880d681SAndroid Build Coastguard Worker %call = call {<4 x i32>, i32} @llvm.s390.vstrczfs(<4 x i32> %a, <4 x i32> %b, 3127*9880d681SAndroid Build Coastguard Worker <4 x i32> %c, i32 8) 3128*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<4 x i32>, i32} %call, 0 3129*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<4 x i32>, i32} %call, 1 3130*9880d681SAndroid Build Coastguard Worker store i32 %cc, i32 *%ccptr 3131*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 3132*9880d681SAndroid Build Coastguard Worker} 3133*9880d681SAndroid Build Coastguard Worker 3134*9880d681SAndroid Build Coastguard Worker; VFCEDBS with no processing of the result. 3135*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfcedbs(<2 x double> %a, <2 x double> %b) { 3136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfcedbs: 3137*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedbs {{%v[0-9]+}}, %v24, %v26 3138*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 3139*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 3140*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3141*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double> %a, 3142*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3143*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3144*9880d681SAndroid Build Coastguard Worker ret i32 %res 3145*9880d681SAndroid Build Coastguard Worker} 3146*9880d681SAndroid Build Coastguard Worker 3147*9880d681SAndroid Build Coastguard Worker; VFCEDBS, returning 1 if any elements are equal (CC != 3). 3148*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfcedbs_any_bool(<2 x double> %a, <2 x double> %b) { 3149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfcedbs_any_bool: 3150*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedbs {{%v[0-9]+}}, %v24, %v26 3151*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 3152*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912 3153*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 3154*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3155*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double> %a, 3156*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3157*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3158*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %res, 3 3159*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 3160*9880d681SAndroid Build Coastguard Worker ret i32 %ext 3161*9880d681SAndroid Build Coastguard Worker} 3162*9880d681SAndroid Build Coastguard Worker 3163*9880d681SAndroid Build Coastguard Worker; VFCEDBS, storing to %ptr if any elements are equal. 3164*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vfcedbs_any_store(<2 x double> %a, <2 x double> %b, 3165*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 3166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfcedbs_any_store: 3167*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 3168*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedbs %v24, %v24, %v26 3169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14 3170*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 3171*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3172*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double> %a, 3173*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3174*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 0 3175*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<2 x i64>, i32} %call, 1 3176*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i32 %cc, 2 3177*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 3178*9880d681SAndroid Build Coastguard Worker 3179*9880d681SAndroid Build Coastguard Workerstore: 3180*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 3181*9880d681SAndroid Build Coastguard Worker br label %exit 3182*9880d681SAndroid Build Coastguard Worker 3183*9880d681SAndroid Build Coastguard Workerexit: 3184*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 3185*9880d681SAndroid Build Coastguard Worker} 3186*9880d681SAndroid Build Coastguard Worker 3187*9880d681SAndroid Build Coastguard Worker; VFCHDBS with no processing of the result. 3188*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchdbs(<2 x double> %a, <2 x double> %b) { 3189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchdbs: 3190*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdbs {{%v[0-9]+}}, %v24, %v26 3191*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 3192*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 3193*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3194*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double> %a, 3195*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3196*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3197*9880d681SAndroid Build Coastguard Worker ret i32 %res 3198*9880d681SAndroid Build Coastguard Worker} 3199*9880d681SAndroid Build Coastguard Worker 3200*9880d681SAndroid Build Coastguard Worker; VFCHDBS, returning 1 if not all elements are higher. 3201*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchdbs_notall_bool(<2 x double> %a, <2 x double> %b) { 3202*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchdbs_notall_bool: 3203*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdbs {{%v[0-9]+}}, %v24, %v26 3204*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 3205*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36 3206*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3207*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double> %a, 3208*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3209*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3210*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %res, 1 3211*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 3212*9880d681SAndroid Build Coastguard Worker ret i32 %ext 3213*9880d681SAndroid Build Coastguard Worker} 3214*9880d681SAndroid Build Coastguard Worker 3215*9880d681SAndroid Build Coastguard Worker; VFCHDBS, storing to %ptr if not all elements are higher. 3216*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vfchdbs_notall_store(<2 x double> %a, <2 x double> %b, 3217*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 3218*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchdbs_notall_store: 3219*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 3220*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdbs %v24, %v24, %v26 3221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14 3222*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 3223*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3224*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double> %a, 3225*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3226*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 0 3227*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<2 x i64>, i32} %call, 1 3228*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %cc, 0 3229*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 3230*9880d681SAndroid Build Coastguard Worker 3231*9880d681SAndroid Build Coastguard Workerstore: 3232*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 3233*9880d681SAndroid Build Coastguard Worker br label %exit 3234*9880d681SAndroid Build Coastguard Worker 3235*9880d681SAndroid Build Coastguard Workerexit: 3236*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 3237*9880d681SAndroid Build Coastguard Worker} 3238*9880d681SAndroid Build Coastguard Worker 3239*9880d681SAndroid Build Coastguard Worker; VFCHEDBS with no processing of the result. 3240*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchedbs(<2 x double> %a, <2 x double> %b) { 3241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchedbs: 3242*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedbs {{%v[0-9]+}}, %v24, %v26 3243*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 3244*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 3245*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3246*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double> %a, 3247*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3248*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3249*9880d681SAndroid Build Coastguard Worker ret i32 %res 3250*9880d681SAndroid Build Coastguard Worker} 3251*9880d681SAndroid Build Coastguard Worker 3252*9880d681SAndroid Build Coastguard Worker; VFCHEDBS, returning 1 if neither element is higher or equal. 3253*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchedbs_none_bool(<2 x double> %a, <2 x double> %b) { 3254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchedbs_none_bool: 3255*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedbs {{%v[0-9]+}}, %v24, %v26 3256*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]] 3257*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35 3258*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3259*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double> %a, 3260*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3261*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3262*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %res, 3 3263*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 3264*9880d681SAndroid Build Coastguard Worker ret i32 %ext 3265*9880d681SAndroid Build Coastguard Worker} 3266*9880d681SAndroid Build Coastguard Worker 3267*9880d681SAndroid Build Coastguard Worker; VFCHEDBS, storing to %ptr if neither element is higher or equal. 3268*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vfchedbs_none_store(<2 x double> %a, <2 x double> %b, 3269*9880d681SAndroid Build Coastguard Worker i32 *%ptr) { 3270*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchedbs_none_store: 3271*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r 3272*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedbs %v24, %v24, %v26 3273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14 3274*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0 3275*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3276*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double> %a, 3277*9880d681SAndroid Build Coastguard Worker <2 x double> %b) 3278*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 0 3279*9880d681SAndroid Build Coastguard Worker %cc = extractvalue {<2 x i64>, i32} %call, 1 3280*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %cc, 3 3281*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %store, label %exit 3282*9880d681SAndroid Build Coastguard Worker 3283*9880d681SAndroid Build Coastguard Workerstore: 3284*9880d681SAndroid Build Coastguard Worker store i32 0, i32 *%ptr 3285*9880d681SAndroid Build Coastguard Worker br label %exit 3286*9880d681SAndroid Build Coastguard Worker 3287*9880d681SAndroid Build Coastguard Workerexit: 3288*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 3289*9880d681SAndroid Build Coastguard Worker} 3290*9880d681SAndroid Build Coastguard Worker 3291*9880d681SAndroid Build Coastguard Worker; VFTCIDB with the lowest useful class selector and no processing of the result. 3292*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vftcidb(<2 x double> %a) { 3293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vftcidb: 3294*9880d681SAndroid Build Coastguard Worker; CHECK: vftcidb {{%v[0-9]+}}, %v24, 1 3295*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2 3296*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28 3297*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3298*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vftcidb(<2 x double> %a, i32 1) 3299*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3300*9880d681SAndroid Build Coastguard Worker ret i32 %res 3301*9880d681SAndroid Build Coastguard Worker} 3302*9880d681SAndroid Build Coastguard Worker 3303*9880d681SAndroid Build Coastguard Worker; VFTCIDB with the highest useful class selector, returning 1 if all elements 3304*9880d681SAndroid Build Coastguard Worker; have the right class (CC == 0). 3305*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vftcidb_all_bool(<2 x double> %a) { 3306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vftcidb_all_bool: 3307*9880d681SAndroid Build Coastguard Worker; CHECK: vftcidb {{%v[0-9]+}}, %v24, 4094 3308*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456 3309*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31 3310*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3311*9880d681SAndroid Build Coastguard Worker %call = call {<2 x i64>, i32} @llvm.s390.vftcidb(<2 x double> %a, i32 4094) 3312*9880d681SAndroid Build Coastguard Worker %res = extractvalue {<2 x i64>, i32} %call, 1 3313*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %res, 0 3314*9880d681SAndroid Build Coastguard Worker %ext = zext i1 %cmp to i32 3315*9880d681SAndroid Build Coastguard Worker ret i32 %ext 3316*9880d681SAndroid Build Coastguard Worker} 3317*9880d681SAndroid Build Coastguard Worker 3318*9880d681SAndroid Build Coastguard Worker; VFIDB with a rounding mode not usable via standard intrinsics. 3319*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfidb_0_4(<2 x double> %a) { 3320*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfidb_0_4: 3321*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 0, 4 3322*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3323*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.s390.vfidb(<2 x double> %a, i32 0, i32 4) 3324*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 3325*9880d681SAndroid Build Coastguard Worker} 3326*9880d681SAndroid Build Coastguard Worker 3327*9880d681SAndroid Build Coastguard Worker; VFIDB with IEEE-inexact exception suppressed. 3328*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfidb_4_0(<2 x double> %a) { 3329*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfidb_4_0: 3330*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 4, 0 3331*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 3332*9880d681SAndroid Build Coastguard Worker %res = call <2 x double> @llvm.s390.vfidb(<2 x double> %a, i32 4, i32 0) 3333*9880d681SAndroid Build Coastguard Worker ret <2 x double> %res 3334*9880d681SAndroid Build Coastguard Worker} 3335*9880d681SAndroid Build Coastguard Worker 3336