1*9880d681SAndroid Build Coastguard Worker; check AVX2 instructions that are disabled in case avx512VL/avx512BW present 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=corei7-avx -o /dev/null 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=core-avx2 -mattr=+avx2 -o /dev/null 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl -o /dev/null 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl -mattr=+avx512vl -o /dev/null 7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl -mattr=+avx512bw -o /dev/null 8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl -mattr=+avx512vl -mattr=+avx512bw -o /dev/null 9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=skx -o /dev/null 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpand_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 12*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 13*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 14*9880d681SAndroid Build Coastguard Worker %x = and <4 x i64> %a2, %b 15*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpand_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 19*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 20*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 21*9880d681SAndroid Build Coastguard Worker %x = and <2 x i64> %a2, %b 22*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpandn_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 26*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 27*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 28*9880d681SAndroid Build Coastguard Worker %y = xor <4 x i64> %a2, <i64 -1, i64 -1, i64 -1, i64 -1> 29*9880d681SAndroid Build Coastguard Worker %x = and <4 x i64> %a, %y 30*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpandn_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 34*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 35*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 36*9880d681SAndroid Build Coastguard Worker %y = xor <2 x i64> %a2, <i64 -1, i64 -1> 37*9880d681SAndroid Build Coastguard Worker %x = and <2 x i64> %a, %y 38*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpor_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 42*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 43*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 44*9880d681SAndroid Build Coastguard Worker %x = or <4 x i64> %a2, %b 45*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpxor_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp { 49*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 50*9880d681SAndroid Build Coastguard Worker %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1> 51*9880d681SAndroid Build Coastguard Worker %x = xor <4 x i64> %a2, %b 52*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpor_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 56*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 57*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 58*9880d681SAndroid Build Coastguard Worker %x = or <2 x i64> %a2, %b 59*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpxor_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp { 63*9880d681SAndroid Build Coastguard Worker ; Force the execution domain with an add. 64*9880d681SAndroid Build Coastguard Worker %a2 = add <2 x i64> %a, <i64 1, i64 1> 65*9880d681SAndroid Build Coastguard Worker %x = xor <2 x i64> %a2, %b 66*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_vpaddq_256(<4 x i64> %i, <4 x i64> %j) nounwind readnone { 70*9880d681SAndroid Build Coastguard Worker %x = add <4 x i64> %i, %j 71*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpaddd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 75*9880d681SAndroid Build Coastguard Worker %x = add <8 x i32> %i, %j 76*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpaddw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone { 80*9880d681SAndroid Build Coastguard Worker %x = add <16 x i16> %i, %j 81*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpaddb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone { 85*9880d681SAndroid Build Coastguard Worker %x = add <32 x i8> %i, %j 86*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %x 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_vpsubq_256(<4 x i64> %i, <4 x i64> %j) nounwind readnone { 90*9880d681SAndroid Build Coastguard Worker %x = sub <4 x i64> %i, %j 91*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %x 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpsubd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 95*9880d681SAndroid Build Coastguard Worker %x = sub <8 x i32> %i, %j 96*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpsubw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone { 100*9880d681SAndroid Build Coastguard Worker %x = sub <16 x i16> %i, %j 101*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpsubb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone { 105*9880d681SAndroid Build Coastguard Worker %x = sub <32 x i8> %i, %j 106*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %x 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpmullw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone { 110*9880d681SAndroid Build Coastguard Worker %x = mul <16 x i16> %i, %j 111*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpcmpgtd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 115*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <8 x i32> %i, %j 116*9880d681SAndroid Build Coastguard Worker %x = sext <8 x i1> %bincmp to <8 x i32> 117*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpcmpeqb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone { 121*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <32 x i8> %i, %j 122*9880d681SAndroid Build Coastguard Worker %x = sext <32 x i1> %bincmp to <32 x i8> 123*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %x 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpcmpeqw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone { 127*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <16 x i16> %i, %j 128*9880d681SAndroid Build Coastguard Worker %x = sext <16 x i1> %bincmp to <16 x i16> 129*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpcmpgtb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone { 133*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <32 x i8> %i, %j 134*9880d681SAndroid Build Coastguard Worker %x = sext <32 x i1> %bincmp to <32 x i8> 135*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %x 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpcmpgtw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone { 139*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <16 x i16> %i, %j 140*9880d681SAndroid Build Coastguard Worker %x = sext <16 x i1> %bincmp to <16 x i16> 141*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpcmpeqd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone { 145*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <8 x i32> %i, %j 146*9880d681SAndroid Build Coastguard Worker %x = sext <8 x i1> %bincmp to <8 x i32> 147*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 148*9880d681SAndroid Build Coastguard Worker} 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpaddq_128(<2 x i64> %i, <2 x i64> %j) nounwind readnone { 151*9880d681SAndroid Build Coastguard Worker %x = add <2 x i64> %i, %j 152*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpaddd_128(<4 x i32> %i, <4 x i32> %j) nounwind readnone { 156*9880d681SAndroid Build Coastguard Worker %x = add <4 x i32> %i, %j 157*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 158*9880d681SAndroid Build Coastguard Worker} 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpaddw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone { 161*9880d681SAndroid Build Coastguard Worker %x = add <8 x i16> %i, %j 162*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpaddb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone { 166*9880d681SAndroid Build Coastguard Worker %x = add <16 x i8> %i, %j 167*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %x 168*9880d681SAndroid Build Coastguard Worker} 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpsubq_128(<2 x i64> %i, <2 x i64> %j) nounwind readnone { 171*9880d681SAndroid Build Coastguard Worker %x = sub <2 x i64> %i, %j 172*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %x 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpsubd_128(<4 x i32> %i, <4 x i32> %j) nounwind readnone { 176*9880d681SAndroid Build Coastguard Worker %x = sub <4 x i32> %i, %j 177*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpsubw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone { 181*9880d681SAndroid Build Coastguard Worker %x = sub <8 x i16> %i, %j 182*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 183*9880d681SAndroid Build Coastguard Worker} 184*9880d681SAndroid Build Coastguard Worker 185*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpsubb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone { 186*9880d681SAndroid Build Coastguard Worker %x = sub <16 x i8> %i, %j 187*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %x 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpmullw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone { 191*9880d681SAndroid Build Coastguard Worker %x = mul <8 x i16> %i, %j 192*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpcmpgtw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone { 196*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <8 x i16> %i, %j 197*9880d681SAndroid Build Coastguard Worker %x = sext <8 x i1> %bincmp to <8 x i16> 198*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 199*9880d681SAndroid Build Coastguard Worker} 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpcmpgtb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone { 202*9880d681SAndroid Build Coastguard Worker %bincmp = icmp slt <16 x i8> %i, %j 203*9880d681SAndroid Build Coastguard Worker %x = sext <16 x i1> %bincmp to <16 x i8> 204*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %x 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpcmpeqw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone { 208*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <8 x i16> %i, %j 209*9880d681SAndroid Build Coastguard Worker %x = sext <8 x i1> %bincmp to <8 x i16> 210*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpcmpeqb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone { 214*9880d681SAndroid Build Coastguard Worker %bincmp = icmp eq <16 x i8> %i, %j 215*9880d681SAndroid Build Coastguard Worker %x = sext <16 x i1> %bincmp to <16 x i8> 216*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %x 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @shuffle_v8i16_vpalignr(<8 x i16> %a, <8 x i16> %b) { 220*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11> 221*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shuffle 222*9880d681SAndroid Build Coastguard Worker} 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shuffle_v16i16_vpalignr(<16 x i16> %a, <16 x i16> %b) { 225*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 23, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 31, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14> 226*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shuffle 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @shuffle_v16i8_vpalignr(<16 x i8> %a, <16 x i8> %b) { 230*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 31, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14> 231*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shuffle 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @shuffle_v32i8_vpalignr(<32 x i8> %a, <32 x i8> %b) { 235*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 undef, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 63, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 236*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %shuffle 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_vpalignr(<2 x i64> %a, <2 x i64> %b) { 240*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 2> 241*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shuffle 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shuffle_v4i32_vpalignr(<4 x i32> %a, <4 x i32> %b) { 245*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 7, i32 0, i32 1, i32 2> 246*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shuffle 247*9880d681SAndroid Build Coastguard Worker} 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @shuffle_v8i32_vpalignr(<8 x i32> %a, <8 x i32> %b) { 250*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 0, i32 1, i32 2, i32 15, i32 4, i32 5, i32 6> 251*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shuffle 252*9880d681SAndroid Build Coastguard Worker} 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_5163(<4 x double> %a, <4 x double> %b) { 255*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 6, i32 3> 256*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 257*9880d681SAndroid Build Coastguard Worker} 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_bitcast_1z(<2 x double> %a) { 260*9880d681SAndroid Build Coastguard Worker %shuffle64 = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <2 x i32> <i32 2, i32 1> 261*9880d681SAndroid Build Coastguard Worker %bitcast32 = bitcast <2 x double> %shuffle64 to <4 x float> 262*9880d681SAndroid Build Coastguard Worker %shuffle32 = shufflevector <4 x float> %bitcast32, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 0, i32 1> 263*9880d681SAndroid Build Coastguard Worker %bitcast64 = bitcast <4 x float> %shuffle32 to <2 x double> 264*9880d681SAndroid Build Coastguard Worker ret <2 x double> %bitcast64 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shuffle_v16i16_zz_zz_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_24(<16 x i16> %a) { 268*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x i16> zeroinitializer, <16 x i16> %a, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 24> 269*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shuffle 270*9880d681SAndroid Build Coastguard Worker} 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v2i64(<2 x i64> %x, i64* %dst) { 273*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <2 x i64> %x, i32 0 274*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <2 x i64> %x, i32 1 275*9880d681SAndroid Build Coastguard Worker store i64 %r2, i64* %dst, align 1 276*9880d681SAndroid Build Coastguard Worker ret i64 %r1 277*9880d681SAndroid Build Coastguard Worker} 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v4i32(<4 x i32> %x, i32* %dst) { 280*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <4 x i32> %x, i32 1 281*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <4 x i32> %x, i32 3 282*9880d681SAndroid Build Coastguard Worker store i32 %r2, i32* %dst, align 1 283*9880d681SAndroid Build Coastguard Worker ret i32 %r1 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v8i16(<8 x i16> %x, i16* %dst) { 287*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <8 x i16> %x, i32 1 288*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <8 x i16> %x, i32 3 289*9880d681SAndroid Build Coastguard Worker store i16 %r2, i16* %dst, align 1 290*9880d681SAndroid Build Coastguard Worker ret i16 %r1 291*9880d681SAndroid Build Coastguard Worker} 292*9880d681SAndroid Build Coastguard Worker 293*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v16i8(<16 x i8> %x, i8* %dst) { 294*9880d681SAndroid Build Coastguard Worker %r1 = extractelement <16 x i8> %x, i32 1 295*9880d681SAndroid Build Coastguard Worker %r2 = extractelement <16 x i8> %x, i32 3 296*9880d681SAndroid Build Coastguard Worker store i8 %r2, i8* %dst, align 1 297*9880d681SAndroid Build Coastguard Worker ret i8 %r1 298*9880d681SAndroid Build Coastguard Worker} 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_v2i64(<2 x i64> %x, i64 %y , i64* %ptr) { 301*9880d681SAndroid Build Coastguard Worker %val = load i64, i64* %ptr 302*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <2 x i64> %x, i64 %val, i32 1 303*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <2 x i64> %r1, i64 %y, i32 3 304*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %r2 305*9880d681SAndroid Build Coastguard Worker} 306*9880d681SAndroid Build Coastguard Worker 307*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @insert_v4i32(<4 x i32> %x, i32 %y, i32* %ptr) { 308*9880d681SAndroid Build Coastguard Worker %val = load i32, i32* %ptr 309*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <4 x i32> %x, i32 %val, i32 1 310*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <4 x i32> %r1, i32 %y, i32 3 311*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r2 312*9880d681SAndroid Build Coastguard Worker} 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @insert_v8i16(<8 x i16> %x, i16 %y, i16* %ptr) { 315*9880d681SAndroid Build Coastguard Worker %val = load i16, i16* %ptr 316*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <8 x i16> %x, i16 %val, i32 1 317*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <8 x i16> %r1, i16 %y, i32 5 318*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r2 319*9880d681SAndroid Build Coastguard Worker} 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @insert_v16i8(<16 x i8> %x, i8 %y, i8* %ptr) { 322*9880d681SAndroid Build Coastguard Worker %val = load i8, i8* %ptr 323*9880d681SAndroid Build Coastguard Worker %r1 = insertelement <16 x i8> %x, i8 %val, i32 3 324*9880d681SAndroid Build Coastguard Worker %r2 = insertelement <16 x i8> %r1, i8 %y, i32 10 325*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r2 326*9880d681SAndroid Build Coastguard Worker} 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shuffle_v4i32_0451(<4 x i32> %a, <4 x i32> %b) { 329*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 1> 330*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shuffle 331*9880d681SAndroid Build Coastguard Worker} 332*9880d681SAndroid Build Coastguard Worker 333*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shuffle_v4i32_0142(<4 x i32> %a, <4 x i32> %b) { 334*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 2> 335*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shuffle 336*9880d681SAndroid Build Coastguard Worker} 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @shuffle_v16i8_0101010101010101(<16 x i8> %a, <16 x i8> %b) { 339*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> 340*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shuffle 341*9880d681SAndroid Build Coastguard Worker} 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) { 344*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 345*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shuffle 346*9880d681SAndroid Build Coastguard Worker} 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) { 349*9880d681SAndroid Build Coastguard Worker; vmovshdup 256 test 350*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> 351*9880d681SAndroid Build Coastguard Worker ret <8 x float> %shuffle 352*9880d681SAndroid Build Coastguard Worker} 353*9880d681SAndroid Build Coastguard Worker 354*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_1133(<4 x float> %a, <4 x float> %b) { 355*9880d681SAndroid Build Coastguard Worker; vmovshdup 128 test 356*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3> 357*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuffle 358*9880d681SAndroid Build Coastguard Worker} 359*9880d681SAndroid Build Coastguard Worker 360*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) { 361*9880d681SAndroid Build Coastguard Worker; vmovsldup 256 test 362*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> 363*9880d681SAndroid Build Coastguard Worker ret <8 x float> %shuffle 364*9880d681SAndroid Build Coastguard Worker} 365*9880d681SAndroid Build Coastguard Worker 366*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0022(<4 x float> %a, <4 x float> %b) { 367*9880d681SAndroid Build Coastguard Worker; vmovsldup 128 test 368*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2> 369*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuffle 370*9880d681SAndroid Build Coastguard Worker} 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_mem_lo_v2f64(double* %ptr, <2 x double> %b) { 373*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 374*9880d681SAndroid Build Coastguard Worker %v = insertelement <2 x double> undef, double %a, i32 0 375*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 0, i32 3> 376*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuffle 377*9880d681SAndroid Build Coastguard Worker} 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_mem_hi_v2f64(double* %ptr, <2 x double> %b) { 380*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 381*9880d681SAndroid Build Coastguard Worker %v = insertelement <2 x double> undef, double %a, i32 0 382*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 2, i32 0> 383*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuffle 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Workerdefine void @store_floats(<4 x float> %x, i64* %p) { 387*9880d681SAndroid Build Coastguard Worker %a = fadd <4 x float> %x, %x 388*9880d681SAndroid Build Coastguard Worker %b = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 0, i32 1> 389*9880d681SAndroid Build Coastguard Worker %c = bitcast <2 x float> %b to i64 390*9880d681SAndroid Build Coastguard Worker store i64 %c, i64* %p 391*9880d681SAndroid Build Coastguard Worker ret void 392*9880d681SAndroid Build Coastguard Worker} 393*9880d681SAndroid Build Coastguard Worker 394*9880d681SAndroid Build Coastguard Workerdefine void @store_double(<2 x double> %x, i64* %p) { 395*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x double> %x, %x 396*9880d681SAndroid Build Coastguard Worker %b = extractelement <2 x double> %a, i32 0 397*9880d681SAndroid Build Coastguard Worker %c = bitcast double %b to i64 398*9880d681SAndroid Build Coastguard Worker store i64 %c, i64* %p 399*9880d681SAndroid Build Coastguard Worker ret void 400*9880d681SAndroid Build Coastguard Worker} 401*9880d681SAndroid Build Coastguard Worker 402*9880d681SAndroid Build Coastguard Workerdefine void @store_h_double(<2 x double> %x, i64* %p) { 403*9880d681SAndroid Build Coastguard Worker %a = fadd <2 x double> %x, %x 404*9880d681SAndroid Build Coastguard Worker %b = extractelement <2 x double> %a, i32 1 405*9880d681SAndroid Build Coastguard Worker %c = bitcast double %b to i64 406*9880d681SAndroid Build Coastguard Worker store i64 %c, i64* %p 407*9880d681SAndroid Build Coastguard Worker ret void 408*9880d681SAndroid Build Coastguard Worker} 409*9880d681SAndroid Build Coastguard Worker 410*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test39(double* %ptr) nounwind { 411*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 412*9880d681SAndroid Build Coastguard Worker %v = insertelement <2 x double> undef, double %a, i32 0 413*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0> 414*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuffle 415*9880d681SAndroid Build Coastguard Worker } 416*9880d681SAndroid Build Coastguard Worker 417*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test40(<2 x double>* %ptr) nounwind { 418*9880d681SAndroid Build Coastguard Worker %v = load <2 x double>, <2 x double>* %ptr 419*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0> 420*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuffle 421*9880d681SAndroid Build Coastguard Worker } 422*9880d681SAndroid Build Coastguard Worker 423*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_00(<2 x double> %a, <2 x double> %b) { 424*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 0> 425*9880d681SAndroid Build Coastguard Worker ret <2 x double> %shuffle 426*9880d681SAndroid Build Coastguard Worker} 427*9880d681SAndroid Build Coastguard Worker 428*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0022(<4 x double> %a, <4 x double> %b) { 429*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2> 430*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 431*9880d681SAndroid Build Coastguard Worker} 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @ashr_v8i32(<8 x i32> %a, <8 x i32> %b) { 434*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i32> %a, %b 435*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 436*9880d681SAndroid Build Coastguard Worker} 437*9880d681SAndroid Build Coastguard Worker 438*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @lshr_v8i32(<8 x i32> %a, <8 x i32> %b) { 439*9880d681SAndroid Build Coastguard Worker %shift = lshr <8 x i32> %a, %b 440*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 441*9880d681SAndroid Build Coastguard Worker} 442*9880d681SAndroid Build Coastguard Worker 443*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @shl_v8i32(<8 x i32> %a, <8 x i32> %b) { 444*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i32> %a, %b 445*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 446*9880d681SAndroid Build Coastguard Worker} 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @ashr_const_v8i32(<8 x i32> %a) { 449*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i32> %a, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 450*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 451*9880d681SAndroid Build Coastguard Worker} 452*9880d681SAndroid Build Coastguard Worker 453*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @lshr_const_v8i32(<8 x i32> %a) { 454*9880d681SAndroid Build Coastguard Worker %shift = lshr <8 x i32> %a, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 455*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 456*9880d681SAndroid Build Coastguard Worker} 457*9880d681SAndroid Build Coastguard Worker 458*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @shl_const_v8i32(<8 x i32> %a) { 459*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i32> %a, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 460*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shift 461*9880d681SAndroid Build Coastguard Worker} 462*9880d681SAndroid Build Coastguard Worker 463*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @ashr_v4i64(<4 x i64> %a, <4 x i64> %b) { 464*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i64> %a, %b 465*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 466*9880d681SAndroid Build Coastguard Worker} 467*9880d681SAndroid Build Coastguard Worker 468*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @lshr_v4i64(<4 x i64> %a, <4 x i64> %b) { 469*9880d681SAndroid Build Coastguard Worker %shift = lshr <4 x i64> %a, %b 470*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 471*9880d681SAndroid Build Coastguard Worker} 472*9880d681SAndroid Build Coastguard Worker 473*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shl_v4i64(<4 x i64> %a, <4 x i64> %b) { 474*9880d681SAndroid Build Coastguard Worker %shift = shl <4 x i64> %a, %b 475*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @ashr_const_v4i64(<4 x i64> %a) { 479*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i64> %a, <i64 3, i64 3, i64 3, i64 3> 480*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 481*9880d681SAndroid Build Coastguard Worker} 482*9880d681SAndroid Build Coastguard Worker 483*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @lshr_const_v4i64(<4 x i64> %a) { 484*9880d681SAndroid Build Coastguard Worker %shift = lshr <4 x i64> %a, <i64 3, i64 3, i64 3, i64 3> 485*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 486*9880d681SAndroid Build Coastguard Worker} 487*9880d681SAndroid Build Coastguard Worker 488*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shl_const_v4i64(<4 x i64> %a) { 489*9880d681SAndroid Build Coastguard Worker %shift = shl <4 x i64> %a, <i64 3, i64 3, i64 3, i64 3> 490*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shift 491*9880d681SAndroid Build Coastguard Worker} 492*9880d681SAndroid Build Coastguard Worker 493*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @ashr_v16i16(<16 x i16> %a, <16 x i16> %b) { 494*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i16> %a, %b 495*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 496*9880d681SAndroid Build Coastguard Worker} 497*9880d681SAndroid Build Coastguard Worker 498*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @lshr_v16i16(<16 x i16> %a, <16 x i16> %b) { 499*9880d681SAndroid Build Coastguard Worker %shift = lshr <16 x i16> %a, %b 500*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 501*9880d681SAndroid Build Coastguard Worker} 502*9880d681SAndroid Build Coastguard Worker 503*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shl_v16i16(<16 x i16> %a, <16 x i16> %b) { 504*9880d681SAndroid Build Coastguard Worker %shift = shl <16 x i16> %a, %b 505*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 506*9880d681SAndroid Build Coastguard Worker} 507*9880d681SAndroid Build Coastguard Worker 508*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @ashr_const_v16i16(<16 x i16> %a) { 509*9880d681SAndroid Build Coastguard Worker %shift = ashr <16 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 510*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 511*9880d681SAndroid Build Coastguard Worker} 512*9880d681SAndroid Build Coastguard Worker 513*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @lshr_const_v16i16(<16 x i16> %a) { 514*9880d681SAndroid Build Coastguard Worker %shift = lshr <16 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 515*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 516*9880d681SAndroid Build Coastguard Worker} 517*9880d681SAndroid Build Coastguard Worker 518*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shl_const_v16i16(<16 x i16> %a) { 519*9880d681SAndroid Build Coastguard Worker %shift = shl <16 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 520*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shift 521*9880d681SAndroid Build Coastguard Worker} 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ashr_v4i32(<4 x i32> %a, <4 x i32> %b) { 524*9880d681SAndroid Build Coastguard Worker %shift = ashr <4 x i32> %a, %b 525*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shift 526*9880d681SAndroid Build Coastguard Worker} 527*9880d681SAndroid Build Coastguard Worker 528*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_const_v4i32(<4 x i32> %a) { 529*9880d681SAndroid Build Coastguard Worker %shift = shl <4 x i32> %a, <i32 3, i32 3, i32 3, i32 3> 530*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shift 531*9880d681SAndroid Build Coastguard Worker} 532*9880d681SAndroid Build Coastguard Worker 533*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ashr_v2i64(<2 x i64> %a, <2 x i64> %b) { 534*9880d681SAndroid Build Coastguard Worker %shift = ashr <2 x i64> %a, %b 535*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shift 536*9880d681SAndroid Build Coastguard Worker} 537*9880d681SAndroid Build Coastguard Worker 538*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shl_const_v2i64(<2 x i64> %a) { 539*9880d681SAndroid Build Coastguard Worker %shift = shl <2 x i64> %a, <i64 3, i64 3> 540*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shift 541*9880d681SAndroid Build Coastguard Worker} 542*9880d681SAndroid Build Coastguard Worker 543*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ashr_v8i16(<8 x i16> %a, <8 x i16> %b) { 544*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i16> %a, %b 545*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 546*9880d681SAndroid Build Coastguard Worker} 547*9880d681SAndroid Build Coastguard Worker 548*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @lshr_v8i16(<8 x i16> %a, <8 x i16> %b) { 549*9880d681SAndroid Build Coastguard Worker %shift = lshr <8 x i16> %a, %b 550*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 551*9880d681SAndroid Build Coastguard Worker} 552*9880d681SAndroid Build Coastguard Worker 553*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @shl_v8i16(<8 x i16> %a, <8 x i16> %b) { 554*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i16> %a, %b 555*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 556*9880d681SAndroid Build Coastguard Worker} 557*9880d681SAndroid Build Coastguard Worker 558*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ashr_const_v8i16(<8 x i16> %a) { 559*9880d681SAndroid Build Coastguard Worker %shift = ashr <8 x i16> %a,<i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 560*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 561*9880d681SAndroid Build Coastguard Worker} 562*9880d681SAndroid Build Coastguard Worker 563*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @lshr_const_v8i16(<8 x i16> %a) { 564*9880d681SAndroid Build Coastguard Worker %shift = lshr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 565*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @shl_const_v8i16(<8 x i16> %a) { 569*9880d681SAndroid Build Coastguard Worker %shift = shl <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 570*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shift 571*9880d681SAndroid Build Coastguard Worker} 572*9880d681SAndroid Build Coastguard Worker 573*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @zext_16i8_to_8i16(<16 x i8> %A) nounwind uwtable readnone ssp { 574*9880d681SAndroid Build Coastguard Workerentry: 575*9880d681SAndroid Build Coastguard Worker %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 576*9880d681SAndroid Build Coastguard Worker %C = zext <8 x i8> %B to <8 x i16> 577*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %C 578*9880d681SAndroid Build Coastguard Worker} 579*9880d681SAndroid Build Coastguard Worker 580*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @_broadcast32xi8(i8 %a) { 581*9880d681SAndroid Build Coastguard Worker %b = insertelement <32 x i8> undef, i8 %a, i32 0 582*9880d681SAndroid Build Coastguard Worker %c = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer 583*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %c 584*9880d681SAndroid Build Coastguard Worker} 585*9880d681SAndroid Build Coastguard Worker 586*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @_broadcast16xi8(i8 %a) { 587*9880d681SAndroid Build Coastguard Worker %b = insertelement <16 x i8> undef, i8 %a, i32 0 588*9880d681SAndroid Build Coastguard Worker %c = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer 589*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %c 590*9880d681SAndroid Build Coastguard Worker} 591*9880d681SAndroid Build Coastguard Worker 592*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @_broadcast16xi16(i16 %a) { 593*9880d681SAndroid Build Coastguard Worker %b = insertelement <16 x i16> undef, i16 %a, i32 0 594*9880d681SAndroid Build Coastguard Worker %c = shufflevector <16 x i16> %b, <16 x i16> undef, <16 x i32> zeroinitializer 595*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %c 596*9880d681SAndroid Build Coastguard Worker} 597*9880d681SAndroid Build Coastguard Worker 598*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @_broadcast8xi16(i16 %a) { 599*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x i16> undef, i16 %a, i32 0 600*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x i16> %b, <8 x i16> undef, <8 x i32> zeroinitializer 601*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %c 602*9880d681SAndroid Build Coastguard Worker} 603*9880d681SAndroid Build Coastguard Worker 604*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @_broadcast8xi32(i32 %a) { 605*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x i32> undef, i32 %a, i32 0 606*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x i32> %b, <8 x i32> undef, <8 x i32> zeroinitializer 607*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %c 608*9880d681SAndroid Build Coastguard Worker} 609*9880d681SAndroid Build Coastguard Worker 610*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @_broadcast4xi32(i32 %a) { 611*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x i32> undef, i32 %a, i32 0 612*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x i32> %b, <4 x i32> undef, <4 x i32> zeroinitializer 613*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %c 614*9880d681SAndroid Build Coastguard Worker} 615*9880d681SAndroid Build Coastguard Worker 616*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @_broadcast4xi64(i64 %a) { 617*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x i64> undef, i64 %a, i64 0 618*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> zeroinitializer 619*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %c 620*9880d681SAndroid Build Coastguard Worker} 621*9880d681SAndroid Build Coastguard Worker 622*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @_broadcast2xi64(i64 %a) { 623*9880d681SAndroid Build Coastguard Worker %b = insertelement <2 x i64> undef, i64 %a, i64 0 624*9880d681SAndroid Build Coastguard Worker %c = shufflevector <2 x i64> %b, <2 x i64> undef, <2 x i32> zeroinitializer 625*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %c 626*9880d681SAndroid Build Coastguard Worker} 627*9880d681SAndroid Build Coastguard Worker 628*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @_broadcast8xfloat(float %a) { 629*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x float> undef, float %a, i32 0 630*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x float> %b, <8 x float> undef, <8 x i32> zeroinitializer 631*9880d681SAndroid Build Coastguard Worker ret <8 x float> %c 632*9880d681SAndroid Build Coastguard Worker} 633*9880d681SAndroid Build Coastguard Worker 634*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @_broadcast4xfloat(float %a) { 635*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x float> undef, float %a, i32 0 636*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x float> %b, <4 x float> undef, <4 x i32> zeroinitializer 637*9880d681SAndroid Build Coastguard Worker ret <4 x float> %c 638*9880d681SAndroid Build Coastguard Worker} 639*9880d681SAndroid Build Coastguard Worker 640*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @_broadcast4xdouble(double %a) { 641*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x double> undef, double %a, i32 0 642*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x double> %b, <4 x double> undef, <4 x i32> zeroinitializer 643*9880d681SAndroid Build Coastguard Worker ret <4 x double> %c 644*9880d681SAndroid Build Coastguard Worker} 645*9880d681SAndroid Build Coastguard Worker 646*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @_broadcast2xdouble(double %a) { 647*9880d681SAndroid Build Coastguard Worker %b = insertelement <2 x double> undef, double %a, i32 0 648*9880d681SAndroid Build Coastguard Worker %c = shufflevector <2 x double> %b, <2 x double> undef, <2 x i32> zeroinitializer 649*9880d681SAndroid Build Coastguard Worker ret <2 x double> %c 650*9880d681SAndroid Build Coastguard Worker} 651*9880d681SAndroid Build Coastguard Worker 652*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) { 653*9880d681SAndroid Build Coastguard Worker %x = fmul <4 x float> %a0, %a1 654*9880d681SAndroid Build Coastguard Worker %res = fsub <4 x float> %x, %a2 655*9880d681SAndroid Build Coastguard Worker ret <4 x float> %res 656*9880d681SAndroid Build Coastguard Worker} 657*9880d681SAndroid Build Coastguard Worker 658*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_cmpgtb(<32 x i8> %A) { 659*9880d681SAndroid Build Coastguard Worker; generate the follow code 660*9880d681SAndroid Build Coastguard Worker; vpxor %ymm1, %ymm1, %ymm1 661*9880d681SAndroid Build Coastguard Worker; vpcmpgtb %ymm0, %ymm1, %ymm0 662*9880d681SAndroid Build Coastguard Worker %B = ashr <32 x i8> %A, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7> 663*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %B 664*9880d681SAndroid Build Coastguard Worker} 665*9880d681SAndroid Build Coastguard Worker 666*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @_inreg4xfloat(float %a) { 667*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x float> undef, float %a, i32 0 668*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x float> %b, <4 x float> undef, <4 x i32> zeroinitializer 669*9880d681SAndroid Build Coastguard Worker ret <4 x float> %c 670*9880d681SAndroid Build Coastguard Worker} 671*9880d681SAndroid Build Coastguard Worker 672*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @_inreg8xfloat(float %a) { 673*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x float> undef, float %a, i32 0 674*9880d681SAndroid Build Coastguard Worker %c = shufflevector <8 x float> %b, <8 x float> undef, <8 x i32> zeroinitializer 675*9880d681SAndroid Build Coastguard Worker ret <8 x float> %c 676*9880d681SAndroid Build Coastguard Worker} 677*9880d681SAndroid Build Coastguard Worker 678*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @_inreg4xdouble(double %a) { 679*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x double> undef, double %a, i32 0 680*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x double> %b, <4 x double> undef, <4 x i32> zeroinitializer 681*9880d681SAndroid Build Coastguard Worker ret <4 x double> %c 682*9880d681SAndroid Build Coastguard Worker} 683