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-pc-linux -mattr=+sse2 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; SSE2 Logical Shift Left 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_sllw_1(<8 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 <8 x i16> %InVec, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0> 12*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_sllw_2(<8 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: paddw %xmm0, %xmm0 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 20*9880d681SAndroid Build Coastguard Workerentry: 21*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i16> %InVec, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 22*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_sllw_3(<8 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: psllw $15, %xmm0 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i16> %InVec, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 32*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_slld_1(<4 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 <4 x i32> %InVec, <i32 0, i32 0, i32 0, i32 0> 41*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_slld_2(<4 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: paddd %xmm0, %xmm0 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 49*9880d681SAndroid Build Coastguard Workerentry: 50*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i32> %InVec, <i32 1, i32 1, i32 1, i32 1> 51*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_slld_3(<4 x i32> %InVec) { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_slld_3: 56*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslld $31, %xmm0 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 59*9880d681SAndroid Build Coastguard Workerentry: 60*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i32> %InVec, <i32 31, i32 31, i32 31, i32 31> 61*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_sllq_1(<2 x i64> %InVec) { 65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllq_1: 66*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 68*9880d681SAndroid Build Coastguard Workerentry: 69*9880d681SAndroid Build Coastguard Worker %shl = shl <2 x i64> %InVec, <i64 0, i64 0> 70*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shl 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_sllq_2(<2 x i64> %InVec) { 74*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllq_2: 75*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: paddq %xmm0, %xmm0 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 78*9880d681SAndroid Build Coastguard Workerentry: 79*9880d681SAndroid Build Coastguard Worker %shl = shl <2 x i64> %InVec, <i64 1, i64 1> 80*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shl 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_sllq_3(<2 x i64> %InVec) { 84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sllq_3: 85*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psllq $63, %xmm0 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker %shl = shl <2 x i64> %InVec, <i64 63, i64 63> 90*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shl 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker; SSE2 Arithmetic Shift 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_sraw_1(<8 x i16> %InVec) { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sraw_1: 97*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 99*9880d681SAndroid Build Coastguard Workerentry: 100*9880d681SAndroid Build Coastguard Worker %shl = ashr <8 x i16> %InVec, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0> 101*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_sraw_2(<8 x i16> %InVec) { 105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sraw_2: 106*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psraw $1, %xmm0 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 109*9880d681SAndroid Build Coastguard Workerentry: 110*9880d681SAndroid Build Coastguard Worker %shl = ashr <8 x i16> %InVec, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 111*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_sraw_3(<8 x i16> %InVec) { 115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sraw_3: 116*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psraw $15, %xmm0 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 119*9880d681SAndroid Build Coastguard Workerentry: 120*9880d681SAndroid Build Coastguard Worker %shl = ashr <8 x i16> %InVec, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 121*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_srad_1(<4 x i32> %InVec) { 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srad_1: 126*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 128*9880d681SAndroid Build Coastguard Workerentry: 129*9880d681SAndroid Build Coastguard Worker %shl = ashr <4 x i32> %InVec, <i32 0, i32 0, i32 0, i32 0> 130*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_srad_2(<4 x i32> %InVec) { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srad_2: 135*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrad $1, %xmm0 137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 138*9880d681SAndroid Build Coastguard Workerentry: 139*9880d681SAndroid Build Coastguard Worker %shl = ashr <4 x i32> %InVec, <i32 1, i32 1, i32 1, i32 1> 140*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_srad_3(<4 x i32> %InVec) { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srad_3: 145*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrad $31, %xmm0 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 148*9880d681SAndroid Build Coastguard Workerentry: 149*9880d681SAndroid Build Coastguard Worker %shl = ashr <4 x i32> %InVec, <i32 31, i32 31, i32 31, i32 31> 150*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 151*9880d681SAndroid Build Coastguard Worker} 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker; SSE Logical Shift Right 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_srlw_1(<8 x i16> %InVec) { 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlw_1: 157*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 159*9880d681SAndroid Build Coastguard Workerentry: 160*9880d681SAndroid Build Coastguard Worker %shl = lshr <8 x i16> %InVec, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0> 161*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_srlw_2(<8 x i16> %InVec) { 165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlw_2: 166*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrlw $1, %xmm0 168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 169*9880d681SAndroid Build Coastguard Workerentry: 170*9880d681SAndroid Build Coastguard Worker %shl = lshr <8 x i16> %InVec, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 171*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 172*9880d681SAndroid Build Coastguard Worker} 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_srlw_3(<8 x i16> %InVec) { 175*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlw_3: 176*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrlw $15, %xmm0 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 179*9880d681SAndroid Build Coastguard Workerentry: 180*9880d681SAndroid Build Coastguard Worker %shl = lshr <8 x i16> %InVec, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> 181*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shl 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_srld_1(<4 x i32> %InVec) { 185*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srld_1: 186*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 188*9880d681SAndroid Build Coastguard Workerentry: 189*9880d681SAndroid Build Coastguard Worker %shl = lshr <4 x i32> %InVec, <i32 0, i32 0, i32 0, i32 0> 190*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 191*9880d681SAndroid Build Coastguard Worker} 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_srld_2(<4 x i32> %InVec) { 194*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srld_2: 195*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrld $1, %xmm0 197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 198*9880d681SAndroid Build Coastguard Workerentry: 199*9880d681SAndroid Build Coastguard Worker %shl = lshr <4 x i32> %InVec, <i32 1, i32 1, i32 1, i32 1> 200*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_srld_3(<4 x i32> %InVec) { 204*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srld_3: 205*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrld $31, %xmm0 207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 208*9880d681SAndroid Build Coastguard Workerentry: 209*9880d681SAndroid Build Coastguard Worker %shl = lshr <4 x i32> %InVec, <i32 31, i32 31, i32 31, i32 31> 210*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_srlq_1(<2 x i64> %InVec) { 214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlq_1: 215*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 217*9880d681SAndroid Build Coastguard Workerentry: 218*9880d681SAndroid Build Coastguard Worker %shl = lshr <2 x i64> %InVec, <i64 0, i64 0> 219*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shl 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_srlq_2(<2 x i64> %InVec) { 223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlq_2: 224*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrlq $1, %xmm0 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 227*9880d681SAndroid Build Coastguard Workerentry: 228*9880d681SAndroid Build Coastguard Worker %shl = lshr <2 x i64> %InVec, <i64 1, i64 1> 229*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shl 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_srlq_3(<2 x i64> %InVec) { 233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srlq_3: 234*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: # %entry 235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrlq $63, %xmm0 236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 237*9880d681SAndroid Build Coastguard Workerentry: 238*9880d681SAndroid Build Coastguard Worker %shl = lshr <2 x i64> %InVec, <i64 63, i64 63> 239*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shl 240*9880d681SAndroid Build Coastguard Worker} 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sra_sra_v4i32(<4 x i32> %x) nounwind { 243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sra_sra_v4i32: 244*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrad $6, %xmm0 246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 247*9880d681SAndroid Build Coastguard Worker %sra0 = ashr <4 x i32> %x, <i32 2, i32 2, i32 2, i32 2> 248*9880d681SAndroid Build Coastguard Worker %sra1 = ashr <4 x i32> %sra0, <i32 4, i32 4, i32 4, i32 4> 249*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sra1 250*9880d681SAndroid Build Coastguard Worker} 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @srl_srl_v4i32(<4 x i32> %x) nounwind { 253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srl_srl_v4i32: 254*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrld $6, %xmm0 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 257*9880d681SAndroid Build Coastguard Worker %srl0 = lshr <4 x i32> %x, <i32 2, i32 2, i32 2, i32 2> 258*9880d681SAndroid Build Coastguard Worker %srl1 = lshr <4 x i32> %srl0, <i32 4, i32 4, i32 4, i32 4> 259*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %srl1 260*9880d681SAndroid Build Coastguard Worker} 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @srl_shl_v4i32(<4 x i32> %x) nounwind { 263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srl_shl_v4i32: 264*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andps {{.*}}(%rip), %xmm0 266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 267*9880d681SAndroid Build Coastguard Worker %srl0 = shl <4 x i32> %x, <i32 4, i32 4, i32 4, i32 4> 268*9880d681SAndroid Build Coastguard Worker %srl1 = lshr <4 x i32> %srl0, <i32 4, i32 4, i32 4, i32 4> 269*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %srl1 270*9880d681SAndroid Build Coastguard Worker} 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @srl_sra_31_v4i32(<4 x i32> %x, <4 x i32> %y) nounwind { 273*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srl_sra_31_v4i32: 274*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrld $31, %xmm0 276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 277*9880d681SAndroid Build Coastguard Worker %sra = ashr <4 x i32> %x, %y 278*9880d681SAndroid Build Coastguard Worker %srl1 = lshr <4 x i32> %sra, <i32 31, i32 31, i32 31, i32 31> 279*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %srl1 280*9880d681SAndroid Build Coastguard Worker} 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_shl_v4i32(<4 x i32> %x) nounwind { 283*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_shl_v4i32: 284*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 285*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslld $6, %xmm0 286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 287*9880d681SAndroid Build Coastguard Worker %shl0 = shl <4 x i32> %x, <i32 2, i32 2, i32 2, i32 2> 288*9880d681SAndroid Build Coastguard Worker %shl1 = shl <4 x i32> %shl0, <i32 4, i32 4, i32 4, i32 4> 289*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl1 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_sra_v4i32(<4 x i32> %x) nounwind { 293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_sra_v4i32: 294*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andps {{.*}}(%rip), %xmm0 296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 297*9880d681SAndroid Build Coastguard Worker %shl0 = ashr <4 x i32> %x, <i32 4, i32 4, i32 4, i32 4> 298*9880d681SAndroid Build Coastguard Worker %shl1 = shl <4 x i32> %shl0, <i32 4, i32 4, i32 4, i32 4> 299*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl1 300*9880d681SAndroid Build Coastguard Worker} 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_srl_v4i32(<4 x i32> %x) nounwind { 303*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_srl_v4i32: 304*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 305*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslld $3, %xmm0 306*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pand {{.*}}(%rip), %xmm0 307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 308*9880d681SAndroid Build Coastguard Worker %shl0 = lshr <4 x i32> %x, <i32 2, i32 2, i32 2, i32 2> 309*9880d681SAndroid Build Coastguard Worker %shl1 = shl <4 x i32> %shl0, <i32 5, i32 5, i32 5, i32 5> 310*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl1 311*9880d681SAndroid Build Coastguard Worker} 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_zext_srl_v4i32(<4 x i16> %x) nounwind { 314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_zext_srl_v4i32: 315*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 316*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andps {{.*}}(%rip), %xmm0 317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andps {{.*}}(%rip), %xmm0 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 319*9880d681SAndroid Build Coastguard Worker %srl = lshr <4 x i16> %x, <i16 2, i16 2, i16 2, i16 2> 320*9880d681SAndroid Build Coastguard Worker %zext = zext <4 x i16> %srl to <4 x i32> 321*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i32> %zext, <i32 2, i32 2, i32 2, i32 2> 322*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @sra_trunc_srl_v4i32(<4 x i32> %x) nounwind { 326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sra_trunc_srl_v4i32: 327*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrad $19, %xmm0 329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 330*9880d681SAndroid Build Coastguard Worker %srl = lshr <4 x i32> %x, <i32 16, i32 16, i32 16, i32 16> 331*9880d681SAndroid Build Coastguard Worker %trunc = trunc <4 x i32> %srl to <4 x i16> 332*9880d681SAndroid Build Coastguard Worker %sra = ashr <4 x i16> %trunc, <i16 3, i16 3, i16 3, i16 3> 333*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %sra 334*9880d681SAndroid Build Coastguard Worker} 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_zext_shl_v4i32(<4 x i16> %x) nounwind { 337*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_zext_shl_v4i32: 338*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pand {{.*}}(%rip), %xmm0 340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslld $19, %xmm0 341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 342*9880d681SAndroid Build Coastguard Worker %shl0 = shl <4 x i16> %x, <i16 2, i16 2, i16 2, i16 2> 343*9880d681SAndroid Build Coastguard Worker %ext = zext <4 x i16> %shl0 to <4 x i32> 344*9880d681SAndroid Build Coastguard Worker %shl1 = shl <4 x i32> %ext, <i32 17, i32 17, i32 17, i32 17> 345*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shl1 346*9880d681SAndroid Build Coastguard Worker} 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sra_v4i32(<4 x i32> %x) nounwind { 349*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sra_v4i32: 350*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 351*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrad $3, %xmm0 352*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 353*9880d681SAndroid Build Coastguard Worker %sra = ashr <4 x i32> %x, <i32 3, i32 3, i32 3, i32 3> 354*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sra 355*9880d681SAndroid Build Coastguard Worker} 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @srl_v4i32(<4 x i32> %x) nounwind { 358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srl_v4i32: 359*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: psrld $3, %xmm0 361*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 362*9880d681SAndroid Build Coastguard Worker %sra = lshr <4 x i32> %x, <i32 3, i32 3, i32 3, i32 3> 363*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sra 364*9880d681SAndroid Build Coastguard Worker} 365*9880d681SAndroid Build Coastguard Worker 366*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_v4i32(<4 x i32> %x) nounwind { 367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl_v4i32: 368*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 369*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pslld $3, %xmm0 370*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 371*9880d681SAndroid Build Coastguard Worker %sra = shl <4 x i32> %x, <i32 3, i32 3, i32 3, i32 3> 372*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sra 373*9880d681SAndroid Build Coastguard Worker} 374