xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx-shift.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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-unknown -mattr=+avx | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker;;; Shift left
5*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vshift00(<8 x i32> %a) {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift00:
7*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $2, %xmm0, %xmm1
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $2, %xmm0, %xmm0
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
13*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 2>
14*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %s
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vshift01(<16 x i16> %a) {
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift01:
19*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $2, %xmm0, %xmm1
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $2, %xmm0, %xmm0
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
25*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>
26*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %s
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vshift02(<4 x i64> %a) {
30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift02:
31*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $2, %xmm0, %xmm1
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $2, %xmm0, %xmm0
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
37*9880d681SAndroid Build Coastguard Worker  %s = shl <4 x i64> %a, <i64 2, i64 2, i64 2, i64 2>
38*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %s
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker;;; Logical Shift right
42*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vshift03(<8 x i32> %a) {
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift03:
44*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrld $2, %xmm0, %xmm1
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrld $2, %xmm0, %xmm0
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
50*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 2>
51*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %s
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vshift04(<16 x i16> %a) {
55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift04:
56*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlw $2, %xmm0, %xmm1
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlw $2, %xmm0, %xmm0
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
62*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>
63*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %s
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vshift05(<4 x i64> %a) {
67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift05:
68*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlq $2, %xmm0, %xmm1
70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlq $2, %xmm0, %xmm0
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
74*9880d681SAndroid Build Coastguard Worker  %s = lshr <4 x i64> %a, <i64 2, i64 2, i64 2, i64 2>
75*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %s
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker;;; Arithmetic Shift right
79*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vshift06(<8 x i32> %a) {
80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift06:
81*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $2, %xmm0, %xmm1
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $2, %xmm0, %xmm0
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
87*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 2>
88*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %s
89*9880d681SAndroid Build Coastguard Worker}
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vshift07(<16 x i16> %a) {
92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift07:
93*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsraw $2, %xmm0, %xmm1
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsraw $2, %xmm0, %xmm0
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
99*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>
100*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %s
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @vshift09(<32 x i8> %a) {
104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift09:
105*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlw $2, %xmm1, %xmm1
108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpand %xmm2, %xmm1, %xmm1
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm3 = [32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32]
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxor %xmm3, %xmm1, %xmm1
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsubb %xmm3, %xmm1, %xmm1
113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlw $2, %xmm0, %xmm0
114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpand %xmm2, %xmm0, %xmm0
115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxor %xmm3, %xmm0, %xmm0
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsubb %xmm3, %xmm0, %xmm0
117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
119*9880d681SAndroid Build Coastguard Worker  %s = ashr <32 x i8> %a, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
120*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %s
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @vshift10(<32 x i8> %a) {
124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift10:
125*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxor %xmm2, %xmm2, %xmm2
128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpgtb %xmm1, %xmm2, %xmm1
129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm0
130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
132*9880d681SAndroid Build Coastguard Worker  %s = 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>
133*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %s
134*9880d681SAndroid Build Coastguard Worker}
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @vshift11(<32 x i8> %a) {
137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift11:
138*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlw $2, %xmm1, %xmm1
141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63]
142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpand %xmm2, %xmm1, %xmm1
143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlw $2, %xmm0, %xmm0
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpand %xmm2, %xmm0, %xmm0
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
147*9880d681SAndroid Build Coastguard Worker  %s = lshr <32 x i8> %a, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
148*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %s
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @vshift12(<32 x i8> %a) {
152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift12:
153*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm1
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $2, %xmm1, %xmm1
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252]
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpand %xmm2, %xmm1, %xmm1
158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $2, %xmm0, %xmm0
159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpand %xmm2, %xmm0, %xmm0
160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
162*9880d681SAndroid Build Coastguard Worker  %s = shl <32 x i8> %a, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
163*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %s
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker;;; Support variable shifts
167*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @vshift08(<8 x i32> %a)  {
168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift08:
169*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $23, %xmm0, %xmm1
171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa {{.*#+}} xmm2 = [1065353216,1065353216,1065353216,1065353216]
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %xmm2, %xmm1, %xmm1
173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttps2dq %xmm1, %xmm1
174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $23, %xmm0, %xmm0
176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttps2dq %xmm0, %xmm0
178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
180*9880d681SAndroid Build Coastguard Worker  %bitop = shl <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, %a
181*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %bitop
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker; PR15141
185*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @vshift13(<4 x i32> %in) {
186*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vshift13:
187*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmulld {{.*}}(%rip), %xmm0, %xmm0
189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
190*9880d681SAndroid Build Coastguard Worker  %T = shl <4 x i32> %in, <i32 0, i32 1, i32 2, i32 4>
191*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %T
192*9880d681SAndroid Build Coastguard Worker}
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker;;; Uses shifts for sign extension
195*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @sext_v16i16(<16 x i16> %a)  {
196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sext_v16i16:
197*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $8, %xmm0, %xmm1
199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsraw $8, %xmm1, %xmm1
200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $8, %xmm0, %xmm0
202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsraw $8, %xmm0, %xmm0
203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
205*9880d681SAndroid Build Coastguard Worker  %b = trunc <16 x i16> %a to <16 x i8>
206*9880d681SAndroid Build Coastguard Worker  %c = sext <16 x i8> %b to <16 x i16>
207*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %c
208*9880d681SAndroid Build Coastguard Worker}
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @sext_v8i32(<8 x i32> %a)  {
211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sext_v8i32:
212*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $16, %xmm0, %xmm1
214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $16, %xmm1, %xmm1
215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vextractf128 $1, %ymm0, %xmm0
216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $16, %xmm0, %xmm0
217*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $16, %xmm0, %xmm0
218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
220*9880d681SAndroid Build Coastguard Worker  %b = trunc <8 x i32> %a to <8 x i16>
221*9880d681SAndroid Build Coastguard Worker  %c = sext <8 x i16> %b to <8 x i32>
222*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %c
223*9880d681SAndroid Build Coastguard Worker}
224