1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; AVX2 Logical Shift Left 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_sllw_1(<16 x i16> %InVec) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllw_1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %InVec, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0> 12*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_sllw_2(<16 x i16> %InVec) { 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllw_2: 17*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddw %ymm0, %ymm0, %ymm0 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 20*9880d681SAndroid Build Coastguard Workerentry: 21*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %InVec, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 22*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_sllw_3(<16 x i16> %InVec) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllw_3: 27*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $15, %ymm0, %ymm0 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %InVec, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 32*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_slld_1(<8 x i32> %InVec) { 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_slld_1: 37*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i32> %InVec, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 41*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_slld_2(<8 x i32> %InVec) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_slld_2: 46*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %ymm0, %ymm0, %ymm0 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 49*9880d681SAndroid Build Coastguard Workerentry: 50*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i32> %InVec, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 51*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpslld_var(i32 %shift) { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpslld_var: 56*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovd %edi, %xmm0 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovdqa {{.*#+}} ymm1 = [192,193,194,195,196,197,198,199] 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld %xmm0, %ymm1, %ymm0 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 61*9880d681SAndroid Build Coastguard Worker %amt = insertelement <8 x i32> undef, i32 %shift, i32 0 62*9880d681SAndroid Build Coastguard Worker %tmp = shl <8 x i32> <i32 192, i32 193, i32 194, i32 195, i32 196, i32 197, i32 198, i32 199>, %amt 63*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %tmp 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_slld_3(<8 x i32> %InVec) { 67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_slld_3: 68*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld $31, %ymm0, %ymm0 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 71*9880d681SAndroid Build Coastguard Workerentry: 72*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i32> %InVec, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31> 73*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_sllq_1(<4 x i64> %InVec) { 77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllq_1: 78*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 80*9880d681SAndroid Build Coastguard Workerentry: 81*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i64> %InVec, <i64 0, i64 0, i64 0, i64 0> 82*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shl 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_sllq_2(<4 x i64> %InVec) { 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllq_2: 87*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq %ymm0, %ymm0, %ymm0 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 90*9880d681SAndroid Build Coastguard Workerentry: 91*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i64> %InVec, <i64 1, i64 1, i64 1, i64 1> 92*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shl 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_sllq_3(<4 x i64> %InVec) { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllq_3: 97*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %ymm0, %ymm0 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 100*9880d681SAndroid Build Coastguard Workerentry: 101*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i64> %InVec, <i64 63, i64 63, i64 63, i64 63> 102*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shl 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker; AVX2 Arithmetic Shift 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_sraw_1(<16 x i16> %InVec) { 108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sraw_1: 109*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 111*9880d681SAndroid Build Coastguard Workerentry: 112*9880d681SAndroid Build Coastguard Worker %shl = ashr <16 x i16> %InVec, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0> 113*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 114*9880d681SAndroid Build Coastguard Worker} 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_sraw_2(<16 x i16> %InVec) { 117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sraw_2: 118*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $1, %ymm0, %ymm0 120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 121*9880d681SAndroid Build Coastguard Workerentry: 122*9880d681SAndroid Build Coastguard Worker %shl = ashr <16 x i16> %InVec, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 123*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_sraw_3(<16 x i16> %InVec) { 127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sraw_3: 128*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $15, %ymm0, %ymm0 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 131*9880d681SAndroid Build Coastguard Workerentry: 132*9880d681SAndroid Build Coastguard Worker %shl = ashr <16 x i16> %InVec, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 133*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_srad_1(<8 x i32> %InVec) { 137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srad_1: 138*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 140*9880d681SAndroid Build Coastguard Workerentry: 141*9880d681SAndroid Build Coastguard Worker %shl = ashr <8 x i32> %InVec, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 142*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 143*9880d681SAndroid Build Coastguard Worker} 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_srad_2(<8 x i32> %InVec) { 146*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srad_2: 147*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrad $1, %ymm0, %ymm0 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 150*9880d681SAndroid Build Coastguard Workerentry: 151*9880d681SAndroid Build Coastguard Worker %shl = ashr <8 x i32> %InVec, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 152*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_srad_3(<8 x i32> %InVec) { 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srad_3: 157*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrad $31, %ymm0, %ymm0 159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 160*9880d681SAndroid Build Coastguard Workerentry: 161*9880d681SAndroid Build Coastguard Worker %shl = ashr <8 x i32> %InVec, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31> 162*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker; SSE Logical Shift Right 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_srlw_1(<16 x i16> %InVec) { 168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlw_1: 169*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 171*9880d681SAndroid Build Coastguard Workerentry: 172*9880d681SAndroid Build Coastguard Worker %shl = lshr <16 x i16> %InVec, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0> 173*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 174*9880d681SAndroid Build Coastguard Worker} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_srlw_2(<16 x i16> %InVec) { 177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlw_2: 178*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlw $1, %ymm0, %ymm0 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 181*9880d681SAndroid Build Coastguard Workerentry: 182*9880d681SAndroid Build Coastguard Worker %shl = lshr <16 x i16> %InVec, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 183*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 184*9880d681SAndroid Build Coastguard Worker} 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_srlw_3(<16 x i16> %InVec) { 187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlw_3: 188*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlw $15, %ymm0, %ymm0 190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 191*9880d681SAndroid Build Coastguard Workerentry: 192*9880d681SAndroid Build Coastguard Worker %shl = lshr <16 x i16> %InVec, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 193*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_srld_1(<8 x i32> %InVec) { 197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srld_1: 198*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 200*9880d681SAndroid Build Coastguard Workerentry: 201*9880d681SAndroid Build Coastguard Worker %shl = lshr <8 x i32> %InVec, <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 202*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_srld_2(<8 x i32> %InVec) { 206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srld_2: 207*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $1, %ymm0, %ymm0 209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 210*9880d681SAndroid Build Coastguard Workerentry: 211*9880d681SAndroid Build Coastguard Worker %shl = lshr <8 x i32> %InVec, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 212*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_srld_3(<8 x i32> %InVec) { 216*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srld_3: 217*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $31, %ymm0, %ymm0 219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 220*9880d681SAndroid Build Coastguard Workerentry: 221*9880d681SAndroid Build Coastguard Worker %shl = lshr <8 x i32> %InVec, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31> 222*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %shl 223*9880d681SAndroid Build Coastguard Worker} 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_srlq_1(<4 x i64> %InVec) { 226*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlq_1: 227*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 229*9880d681SAndroid Build Coastguard Workerentry: 230*9880d681SAndroid Build Coastguard Worker %shl = lshr <4 x i64> %InVec, <i64 0, i64 0, i64 0, i64 0> 231*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shl 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_srlq_2(<4 x i64> %InVec) { 235*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlq_2: 236*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 237*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlq $1, %ymm0, %ymm0 238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 239*9880d681SAndroid Build Coastguard Workerentry: 240*9880d681SAndroid Build Coastguard Worker %shl = lshr <4 x i64> %InVec, <i64 1, i64 1, i64 1, i64 1> 241*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shl 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_srlq_3(<4 x i64> %InVec) { 245*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlq_3: 246*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlq $63, %ymm0, %ymm0 248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 249*9880d681SAndroid Build Coastguard Workerentry: 250*9880d681SAndroid Build Coastguard Worker %shl = lshr <4 x i64> %InVec, <i64 63, i64 63, i64 63, i64 63> 251*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shl 252*9880d681SAndroid Build Coastguard Worker} 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @srl_trunc_and_v4i64(<4 x i32> %x, <4 x i64> %y) nounwind { 255*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srl_trunc_and_v4i64: 256*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastd {{.*}}(%rip), %xmm2 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand %xmm2, %xmm1, %xmm1 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlvd %xmm1, %xmm0, %xmm0 262*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vzeroupper 263*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 264*9880d681SAndroid Build Coastguard Worker %and = and <4 x i64> %y, <i64 8, i64 8, i64 8, i64 8> 265*9880d681SAndroid Build Coastguard Worker %trunc = trunc <4 x i64> %and to <4 x i32> 266*9880d681SAndroid Build Coastguard Worker %sra = lshr <4 x i32> %x, %trunc 267*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sra 268*9880d681SAndroid Build Coastguard Worker} 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Worker; 271*9880d681SAndroid Build Coastguard Worker; Vectorized byte shifts 272*9880d681SAndroid Build Coastguard Worker; 273*9880d681SAndroid Build Coastguard Worker 274*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @shl_8i16(<8 x i16> %r, <8 x i16> %a) nounwind { 275*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_8i16: 276*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 277*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero 278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllvd %ymm1, %ymm0, %ymm0 280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 283*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vzeroupper 284*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 285*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i16> %r, %a 286*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 287*9880d681SAndroid Build Coastguard Worker} 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shl_16i16(<16 x i16> %r, <16 x i16> %a) nounwind { 290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_16i16: 291*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxor %ymm2, %ymm2, %ymm2 293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] 295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllvd %ymm3, %ymm4, %ymm3 296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $16, %ymm3, %ymm3 297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11] 298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11] 299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllvd %ymm1, %ymm0, %ymm0 300*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $16, %ymm0, %ymm0 301*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpackusdw %ymm3, %ymm0, %ymm0 302*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 303*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %r, %a 304*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %shl 305*9880d681SAndroid Build Coastguard Worker} 306*9880d681SAndroid Build Coastguard Worker 307*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @shl_32i8(<32 x i8> %r, <32 x i8> %a) nounwind { 308*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_32i8: 309*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $5, %ymm1, %ymm1 311*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $4, %ymm0, %ymm2 312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 313*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0 314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $2, %ymm0, %ymm2 315*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 316*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %ymm1, %ymm1, %ymm1 317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %ymm0, %ymm0, %ymm2 319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %ymm1, %ymm1, %ymm1 320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0 321*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 322*9880d681SAndroid Build Coastguard Worker %shl = shl <32 x i8> %r, %a 323*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %shl 324*9880d681SAndroid Build Coastguard Worker} 325*9880d681SAndroid Build Coastguard Worker 326*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ashr_8i16(<8 x i16> %r, <8 x i16> %a) nounwind { 327*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ashr_8i16: 328*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero 330*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovsxwd %xmm0, %ymm0 331*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsravd %ymm1, %ymm0, %ymm0 332*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 333*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 334*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 335*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vzeroupper 336*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 337*9880d681SAndroid Build Coastguard Worker %ashr = ashr <8 x i16> %r, %a 338*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %ashr 339*9880d681SAndroid Build Coastguard Worker} 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @ashr_16i16(<16 x i16> %r, <16 x i16> %a) nounwind { 342*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ashr_16i16: 343*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 344*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxor %ymm2, %ymm2, %ymm2 345*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] 346*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] 347*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsravd %ymm3, %ymm4, %ymm3 348*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $16, %ymm3, %ymm3 349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11] 350*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11] 351*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsravd %ymm1, %ymm0, %ymm0 352*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $16, %ymm0, %ymm0 353*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpackusdw %ymm3, %ymm0, %ymm0 354*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 355*9880d681SAndroid Build Coastguard Worker %ashr = ashr <16 x i16> %r, %a 356*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %ashr 357*9880d681SAndroid Build Coastguard Worker} 358*9880d681SAndroid Build Coastguard Worker 359*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @ashr_32i8(<32 x i8> %r, <32 x i8> %a) nounwind { 360*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ashr_32i8: 361*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 362*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $5, %ymm1, %ymm1 363*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31] 364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31] 365*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $4, %ymm3, %ymm4 366*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 367*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $2, %ymm3, %ymm4 368*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddw %ymm2, %ymm2, %ymm2 369*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm3 370*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $1, %ymm3, %ymm4 371*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddw %ymm2, %ymm2, %ymm2 372*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm2, %ymm4, %ymm3, %ymm2 373*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlw $8, %ymm2, %ymm2 374*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23] 375*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23] 376*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $4, %ymm0, %ymm3 377*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 378*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $2, %ymm0, %ymm3 379*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddw %ymm1, %ymm1, %ymm1 380*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 381*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsraw $1, %ymm0, %ymm3 382*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddw %ymm1, %ymm1, %ymm1 383*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm0 384*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlw $8, %ymm0, %ymm0 385*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 386*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 387*9880d681SAndroid Build Coastguard Worker %ashr = ashr <32 x i8> %r, %a 388*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %ashr 389*9880d681SAndroid Build Coastguard Worker} 390*9880d681SAndroid Build Coastguard Worker 391*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @lshr_8i16(<8 x i16> %r, <8 x i16> %a) nounwind { 392*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lshr_8i16: 393*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 394*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero 395*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero 396*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlvd %ymm1, %ymm0, %ymm0 397*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 398*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 399*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vzeroupper 401*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 402*9880d681SAndroid Build Coastguard Worker %lshr = lshr <8 x i16> %r, %a 403*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %lshr 404*9880d681SAndroid Build Coastguard Worker} 405*9880d681SAndroid Build Coastguard Worker 406*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @lshr_16i16(<16 x i16> %r, <16 x i16> %a) nounwind { 407*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lshr_16i16: 408*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 409*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxor %ymm2, %ymm2, %ymm2 410*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] 411*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] 412*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlvd %ymm3, %ymm4, %ymm3 413*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $16, %ymm3, %ymm3 414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11] 415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11] 416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlvd %ymm1, %ymm0, %ymm0 417*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrld $16, %ymm0, %ymm0 418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpackusdw %ymm3, %ymm0, %ymm0 419*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 420*9880d681SAndroid Build Coastguard Worker %lshr = lshr <16 x i16> %r, %a 421*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %lshr 422*9880d681SAndroid Build Coastguard Worker} 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @lshr_32i8(<32 x i8> %r, <32 x i8> %a) nounwind { 425*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: lshr_32i8: 426*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $5, %ymm1, %ymm1 428*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlw $4, %ymm0, %ymm2 429*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 430*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0 431*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlw $2, %ymm0, %ymm2 432*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 433*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %ymm1, %ymm1, %ymm1 434*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0 435*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsrlw $1, %ymm0, %ymm2 436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %ymm1, %ymm1, %ymm1 438*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0 439*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 440*9880d681SAndroid Build Coastguard Worker %lshr = lshr <32 x i8> %r, %a 441*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %lshr 442*9880d681SAndroid Build Coastguard Worker} 443