1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=core-avx2 -mattr=+avx2 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl0 4*9880d681SAndroid Build Coastguard Worker; CHECK: psllvd 5*9880d681SAndroid Build Coastguard Worker; CHECK: ret 6*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @variable_shl0(<4 x i32> %x, <4 x i32> %y) { 7*9880d681SAndroid Build Coastguard Worker %k = shl <4 x i32> %x, %y 8*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %k 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl1 11*9880d681SAndroid Build Coastguard Worker; CHECK: psllvd 12*9880d681SAndroid Build Coastguard Worker; CHECK: ret 13*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @variable_shl1(<8 x i32> %x, <8 x i32> %y) { 14*9880d681SAndroid Build Coastguard Worker %k = shl <8 x i32> %x, %y 15*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %k 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl2 18*9880d681SAndroid Build Coastguard Worker; CHECK: psllvq 19*9880d681SAndroid Build Coastguard Worker; CHECK: ret 20*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @variable_shl2(<2 x i64> %x, <2 x i64> %y) { 21*9880d681SAndroid Build Coastguard Worker %k = shl <2 x i64> %x, %y 22*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %k 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl3 25*9880d681SAndroid Build Coastguard Worker; CHECK: psllvq 26*9880d681SAndroid Build Coastguard Worker; CHECK: ret 27*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @variable_shl3(<4 x i64> %x, <4 x i64> %y) { 28*9880d681SAndroid Build Coastguard Worker %k = shl <4 x i64> %x, %y 29*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %k 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl0 32*9880d681SAndroid Build Coastguard Worker; CHECK: psrlvd 33*9880d681SAndroid Build Coastguard Worker; CHECK: ret 34*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @variable_srl0(<4 x i32> %x, <4 x i32> %y) { 35*9880d681SAndroid Build Coastguard Worker %k = lshr <4 x i32> %x, %y 36*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %k 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl1 39*9880d681SAndroid Build Coastguard Worker; CHECK: psrlvd 40*9880d681SAndroid Build Coastguard Worker; CHECK: ret 41*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @variable_srl1(<8 x i32> %x, <8 x i32> %y) { 42*9880d681SAndroid Build Coastguard Worker %k = lshr <8 x i32> %x, %y 43*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %k 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl2 46*9880d681SAndroid Build Coastguard Worker; CHECK: psrlvq 47*9880d681SAndroid Build Coastguard Worker; CHECK: ret 48*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @variable_srl2(<2 x i64> %x, <2 x i64> %y) { 49*9880d681SAndroid Build Coastguard Worker %k = lshr <2 x i64> %x, %y 50*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %k 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl3 53*9880d681SAndroid Build Coastguard Worker; CHECK: psrlvq 54*9880d681SAndroid Build Coastguard Worker; CHECK: ret 55*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @variable_srl3(<4 x i64> %x, <4 x i64> %y) { 56*9880d681SAndroid Build Coastguard Worker %k = lshr <4 x i64> %x, %y 57*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %k 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK: variable_sra0 61*9880d681SAndroid Build Coastguard Worker; CHECK: vpsravd 62*9880d681SAndroid Build Coastguard Worker; CHECK: ret 63*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @variable_sra0(<4 x i32> %x, <4 x i32> %y) { 64*9880d681SAndroid Build Coastguard Worker %k = ashr <4 x i32> %x, %y 65*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %k 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker; CHECK: variable_sra1 68*9880d681SAndroid Build Coastguard Worker; CHECK: vpsravd 69*9880d681SAndroid Build Coastguard Worker; CHECK: ret 70*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @variable_sra1(<8 x i32> %x, <8 x i32> %y) { 71*9880d681SAndroid Build Coastguard Worker %k = ashr <8 x i32> %x, %y 72*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %k 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker;;; Shift left 76*9880d681SAndroid Build Coastguard Worker; CHECK: vpslld 77*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vshift00(<8 x i32> %a) nounwind readnone { 78*9880d681SAndroid Build Coastguard Worker %s = shl <8 x i32> %a, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 79*9880d681SAndroid Build Coastguard Worker2> 80*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %s 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllw 84*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vshift01(<16 x i16> %a) nounwind readnone { 85*9880d681SAndroid Build Coastguard Worker %s = shl <16 x i16> %a, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2> 86*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %s 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllq 90*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vshift02(<4 x i64> %a) nounwind readnone { 91*9880d681SAndroid Build Coastguard Worker %s = shl <4 x i64> %a, <i64 2, i64 2, i64 2, i64 2> 92*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %s 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker;;; Logical Shift right 96*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrld 97*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vshift03(<8 x i32> %a) nounwind readnone { 98*9880d681SAndroid Build Coastguard Worker %s = lshr <8 x i32> %a, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 99*9880d681SAndroid Build Coastguard Worker2> 100*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %s 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlw 104*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vshift04(<16 x i16> %a) nounwind readnone { 105*9880d681SAndroid Build Coastguard Worker %s = lshr <16 x i16> %a, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2> 106*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %s 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlq 110*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vshift05(<4 x i64> %a) nounwind readnone { 111*9880d681SAndroid Build Coastguard Worker %s = lshr <4 x i64> %a, <i64 2, i64 2, i64 2, i64 2> 112*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %s 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Worker;;; Arithmetic Shift right 116*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrad 117*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vshift06(<8 x i32> %a) nounwind readnone { 118*9880d681SAndroid Build Coastguard Worker %s = ashr <8 x i32> %a, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 119*9880d681SAndroid Build Coastguard Worker2> 120*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %s 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker; CHECK: vpsraw 124*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vshift07(<16 x i16> %a) nounwind readnone { 125*9880d681SAndroid Build Coastguard Worker %s = ashr <16 x i16> %a, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2> 126*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %s 127*9880d681SAndroid Build Coastguard Worker} 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker; CHECK: variable_sra0_load 130*9880d681SAndroid Build Coastguard Worker; CHECK: vpsravd (% 131*9880d681SAndroid Build Coastguard Worker; CHECK: ret 132*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @variable_sra0_load(<4 x i32> %x, <4 x i32>* %y) { 133*9880d681SAndroid Build Coastguard Worker %y1 = load <4 x i32>, <4 x i32>* %y 134*9880d681SAndroid Build Coastguard Worker %k = ashr <4 x i32> %x, %y1 135*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %k 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker; CHECK: variable_sra1_load 139*9880d681SAndroid Build Coastguard Worker; CHECK: vpsravd (% 140*9880d681SAndroid Build Coastguard Worker; CHECK: ret 141*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @variable_sra1_load(<8 x i32> %x, <8 x i32>* %y) { 142*9880d681SAndroid Build Coastguard Worker %y1 = load <8 x i32>, <8 x i32>* %y 143*9880d681SAndroid Build Coastguard Worker %k = ashr <8 x i32> %x, %y1 144*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %k 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl0_load 148*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllvd (% 149*9880d681SAndroid Build Coastguard Worker; CHECK: ret 150*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @variable_shl0_load(<4 x i32> %x, <4 x i32>* %y) { 151*9880d681SAndroid Build Coastguard Worker %y1 = load <4 x i32>, <4 x i32>* %y 152*9880d681SAndroid Build Coastguard Worker %k = shl <4 x i32> %x, %y1 153*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %k 154*9880d681SAndroid Build Coastguard Worker} 155*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl1_load 156*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllvd (% 157*9880d681SAndroid Build Coastguard Worker; CHECK: ret 158*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @variable_shl1_load(<8 x i32> %x, <8 x i32>* %y) { 159*9880d681SAndroid Build Coastguard Worker %y1 = load <8 x i32>, <8 x i32>* %y 160*9880d681SAndroid Build Coastguard Worker %k = shl <8 x i32> %x, %y1 161*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %k 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl2_load 164*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllvq (% 165*9880d681SAndroid Build Coastguard Worker; CHECK: ret 166*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @variable_shl2_load(<2 x i64> %x, <2 x i64>* %y) { 167*9880d681SAndroid Build Coastguard Worker %y1 = load <2 x i64>, <2 x i64>* %y 168*9880d681SAndroid Build Coastguard Worker %k = shl <2 x i64> %x, %y1 169*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %k 170*9880d681SAndroid Build Coastguard Worker} 171*9880d681SAndroid Build Coastguard Worker; CHECK: variable_shl3_load 172*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllvq (% 173*9880d681SAndroid Build Coastguard Worker; CHECK: ret 174*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @variable_shl3_load(<4 x i64> %x, <4 x i64>* %y) { 175*9880d681SAndroid Build Coastguard Worker %y1 = load <4 x i64>, <4 x i64>* %y 176*9880d681SAndroid Build Coastguard Worker %k = shl <4 x i64> %x, %y1 177*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %k 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl0_load 180*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlvd (% 181*9880d681SAndroid Build Coastguard Worker; CHECK: ret 182*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @variable_srl0_load(<4 x i32> %x, <4 x i32>* %y) { 183*9880d681SAndroid Build Coastguard Worker %y1 = load <4 x i32>, <4 x i32>* %y 184*9880d681SAndroid Build Coastguard Worker %k = lshr <4 x i32> %x, %y1 185*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %k 186*9880d681SAndroid Build Coastguard Worker} 187*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl1_load 188*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlvd (% 189*9880d681SAndroid Build Coastguard Worker; CHECK: ret 190*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @variable_srl1_load(<8 x i32> %x, <8 x i32>* %y) { 191*9880d681SAndroid Build Coastguard Worker %y1 = load <8 x i32>, <8 x i32>* %y 192*9880d681SAndroid Build Coastguard Worker %k = lshr <8 x i32> %x, %y1 193*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %k 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl2_load 196*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlvq (% 197*9880d681SAndroid Build Coastguard Worker; CHECK: ret 198*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @variable_srl2_load(<2 x i64> %x, <2 x i64>* %y) { 199*9880d681SAndroid Build Coastguard Worker %y1 = load <2 x i64>, <2 x i64>* %y 200*9880d681SAndroid Build Coastguard Worker %k = lshr <2 x i64> %x, %y1 201*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %k 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker; CHECK: variable_srl3_load 204*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlvq (% 205*9880d681SAndroid Build Coastguard Worker; CHECK: ret 206*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @variable_srl3_load(<4 x i64> %x, <4 x i64>* %y) { 207*9880d681SAndroid Build Coastguard Worker %y1 = load <4 x i64>, <4 x i64>* %y 208*9880d681SAndroid Build Coastguard Worker %k = lshr <4 x i64> %x, %y1 209*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %k 210*9880d681SAndroid Build Coastguard Worker} 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @shl9(<32 x i8> %A) nounwind { 213*9880d681SAndroid Build Coastguard Worker %B = shl <32 x i8> %A, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 214*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %B 215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl9: 216*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllw $3 217*9880d681SAndroid Build Coastguard Worker; CHECK: vpand 218*9880d681SAndroid Build Coastguard Worker; CHECK: ret 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @shr9(<32 x i8> %A) nounwind { 222*9880d681SAndroid Build Coastguard Worker %B = lshr <32 x i8> %A, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 223*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %B 224*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shr9: 225*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlw $3 226*9880d681SAndroid Build Coastguard Worker; CHECK: vpand 227*9880d681SAndroid Build Coastguard Worker; CHECK: ret 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @sra_v32i8_7(<32 x i8> %A) nounwind { 231*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> 232*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %B 233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sra_v32i8_7: 234*9880d681SAndroid Build Coastguard Worker; CHECK: vpxor 235*9880d681SAndroid Build Coastguard Worker; CHECK: vpcmpgtb 236*9880d681SAndroid Build Coastguard Worker; CHECK: ret 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @sra_v32i8(<32 x i8> %A) nounwind { 240*9880d681SAndroid Build Coastguard Worker %B = ashr <32 x i8> %A, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 241*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %B 242*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sra_v32i8: 243*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlw $3 244*9880d681SAndroid Build Coastguard Worker; CHECK: vpand 245*9880d681SAndroid Build Coastguard Worker; CHECK: vpxor 246*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubb 247*9880d681SAndroid Build Coastguard Worker; CHECK: ret 248*9880d681SAndroid Build Coastguard Worker} 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Worker; CHECK: _sext_v16i16 251*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllw 252*9880d681SAndroid Build Coastguard Worker; CHECK: vpsraw 253*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vinsertf128 254*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @sext_v16i16(<16 x i16> %a) nounwind { 255*9880d681SAndroid Build Coastguard Worker %b = trunc <16 x i16> %a to <16 x i8> 256*9880d681SAndroid Build Coastguard Worker %c = sext <16 x i8> %b to <16 x i16> 257*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %c 258*9880d681SAndroid Build Coastguard Worker} 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Worker; CHECK: _sext_v8i32 261*9880d681SAndroid Build Coastguard Worker; CHECK: vpslld 262*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrad 263*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vinsertf128 264*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @sext_v8i32(<8 x i32> %a) nounwind { 265*9880d681SAndroid Build Coastguard Worker %b = trunc <8 x i32> %a to <8 x i16> 266*9880d681SAndroid Build Coastguard Worker %c = sext <8 x i16> %b to <8 x i32> 267*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %c 268*9880d681SAndroid Build Coastguard Worker} 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @variable_shl16(<8 x i16> %lhs, <8 x i16> %rhs) { 271*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: variable_shl16: 272*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpmovzxwd %xmm1, [[AMT:%ymm[0-9]+]] 273*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpmovzxwd %xmm0, [[LHS:%ymm[0-9]+]] 274*9880d681SAndroid Build Coastguard Worker; CHECK: vpsllvd [[AMT]], [[LHS]], {{%ymm[0-9]+}} 275*9880d681SAndroid Build Coastguard Worker; CHECK: vpshufb 276*9880d681SAndroid Build Coastguard Worker; CHECK: vpermq 277*9880d681SAndroid Build Coastguard Worker %res = shl <8 x i16> %lhs, %rhs 278*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @variable_ashr16(<8 x i16> %lhs, <8 x i16> %rhs) { 282*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: variable_ashr16: 283*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpmovzxwd %xmm1, [[AMT:%ymm[0-9]+]] 284*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpmovsxwd %xmm0, [[LHS:%ymm[0-9]+]] 285*9880d681SAndroid Build Coastguard Worker; CHECK: vpsravd [[AMT]], [[LHS]], {{%ymm[0-9]+}} 286*9880d681SAndroid Build Coastguard Worker; CHECK: vpshufb 287*9880d681SAndroid Build Coastguard Worker; CHECK: vpermq 288*9880d681SAndroid Build Coastguard Worker %res = ashr <8 x i16> %lhs, %rhs 289*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @variable_lshr16(<8 x i16> %lhs, <8 x i16> %rhs) { 293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: variable_lshr16: 294*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpmovzxwd %xmm1, [[AMT:%ymm[0-9]+]] 295*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vpmovzxwd %xmm0, [[LHS:%ymm[0-9]+]] 296*9880d681SAndroid Build Coastguard Worker; CHECK: vpsrlvd [[AMT]], [[LHS]], {{%ymm[0-9]+}} 297*9880d681SAndroid Build Coastguard Worker; CHECK: vpshufb 298*9880d681SAndroid Build Coastguard Worker; CHECK: vpermq 299*9880d681SAndroid Build Coastguard Worker %res = lshr <8 x i16> %lhs, %rhs 300*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 301*9880d681SAndroid Build Coastguard Worker}