[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / vector_splat-const-shift-of-constmasked.ll
blobce9ed0d21baf25cc6429fd5bff8ee4a9c04a6049
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse2              | FileCheck %s --check-prefixes=ALL,X32,X32-SSE2,X32-SSE2ONLY
3 ; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse2,+avx         | FileCheck %s --check-prefixes=ALL,X32,X32-SSE2,X32-SSE2AVX,X32-SSE2AVX1
4 ; RUN: llc < %s -mtriple=i686-unknown -mattr=+sse2,+avx,+avx2   | FileCheck %s --check-prefixes=ALL,X32,X32-SSE2,X32-SSE2AVX,X32-SSE2AVX1AVX2
5 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2            | FileCheck %s --check-prefixes=ALL,X64,X64-SSE2,X64-SSE2ONLY
6 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2,+avx       | FileCheck %s --check-prefixes=ALL,X64,X64-SSE2,X64-SSE2AVX,X64-SSE2AVX1
7 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2,+avx,+avx2 | FileCheck %s --check-prefixes=ALL,X64,X64-SSE2,X64-SSE2AVX,X64-SSE2AVX1AVX2
9 ; The mask is all-ones, potentially shifted.
11 ;------------------------------------------------------------------------------;
12 ; 128-bit vector; 8-bit elements = 16 elements
13 ;------------------------------------------------------------------------------;
15 ; lshr
17 define <16 x i8> @test_128_i8_x_16_7_mask_lshr_1(<16 x i8> %a0) {
18 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_lshr_1:
19 ; X32-SSE2ONLY:       # %bb.0:
20 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
21 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
22 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
23 ; X32-SSE2ONLY-NEXT:    retl
25 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_lshr_1:
26 ; X32-SSE2AVX:       # %bb.0:
27 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
28 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
29 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
30 ; X32-SSE2AVX-NEXT:    retl
32 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_lshr_1:
33 ; X64-SSE2ONLY:       # %bb.0:
34 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
35 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
36 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
37 ; X64-SSE2ONLY-NEXT:    retq
39 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_lshr_1:
40 ; X64-SSE2AVX:       # %bb.0:
41 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
42 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
43 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
44 ; X64-SSE2AVX-NEXT:    retq
45   %t0 = and <16 x i8> %a0, <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>
46   %t1 = lshr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
47   ret <16 x i8> %t1
50 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_1(<16 x i8> %a0) {
51 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_1:
52 ; X32-SSE2ONLY:       # %bb.0:
53 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
54 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
55 ; X32-SSE2ONLY-NEXT:    retl
57 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_1:
58 ; X32-SSE2AVX:       # %bb.0:
59 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
60 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
61 ; X32-SSE2AVX-NEXT:    retl
63 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_1:
64 ; X64-SSE2ONLY:       # %bb.0:
65 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
66 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
67 ; X64-SSE2ONLY-NEXT:    retq
69 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_1:
70 ; X64-SSE2AVX:       # %bb.0:
71 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
72 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
73 ; X64-SSE2AVX-NEXT:    retq
74   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
75   %t1 = lshr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
76   ret <16 x i8> %t1
78 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_2(<16 x i8> %a0) {
79 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_2:
80 ; X32-SSE2ONLY:       # %bb.0:
81 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
82 ; X32-SSE2ONLY-NEXT:    psrlw $2, %xmm0
83 ; X32-SSE2ONLY-NEXT:    retl
85 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_2:
86 ; X32-SSE2AVX:       # %bb.0:
87 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
88 ; X32-SSE2AVX-NEXT:    vpsrlw $2, %xmm0, %xmm0
89 ; X32-SSE2AVX-NEXT:    retl
91 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_2:
92 ; X64-SSE2ONLY:       # %bb.0:
93 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
94 ; X64-SSE2ONLY-NEXT:    psrlw $2, %xmm0
95 ; X64-SSE2ONLY-NEXT:    retq
97 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_2:
98 ; X64-SSE2AVX:       # %bb.0:
99 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
100 ; X64-SSE2AVX-NEXT:    vpsrlw $2, %xmm0, %xmm0
101 ; X64-SSE2AVX-NEXT:    retq
102   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
103   %t1 = lshr <16 x i8> %t0, <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>
104   ret <16 x i8> %t1
106 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_3(<16 x i8> %a0) {
107 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_3:
108 ; X32-SSE2ONLY:       # %bb.0:
109 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
110 ; X32-SSE2ONLY-NEXT:    psrlw $3, %xmm0
111 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
112 ; X32-SSE2ONLY-NEXT:    retl
114 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_3:
115 ; X32-SSE2AVX:       # %bb.0:
116 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
117 ; X32-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
118 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
119 ; X32-SSE2AVX-NEXT:    retl
121 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_3:
122 ; X64-SSE2ONLY:       # %bb.0:
123 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
124 ; X64-SSE2ONLY-NEXT:    psrlw $3, %xmm0
125 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
126 ; X64-SSE2ONLY-NEXT:    retq
128 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_3:
129 ; X64-SSE2AVX:       # %bb.0:
130 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
131 ; X64-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
132 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
133 ; X64-SSE2AVX-NEXT:    retq
134   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
135   %t1 = lshr <16 x i8> %t0, <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>
136   ret <16 x i8> %t1
138 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_4(<16 x i8> %a0) {
139 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_4:
140 ; X32-SSE2ONLY:       # %bb.0:
141 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
142 ; X32-SSE2ONLY-NEXT:    psrlw $4, %xmm0
143 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
144 ; X32-SSE2ONLY-NEXT:    retl
146 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_4:
147 ; X32-SSE2AVX:       # %bb.0:
148 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
149 ; X32-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
150 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
151 ; X32-SSE2AVX-NEXT:    retl
153 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_lshr_4:
154 ; X64-SSE2ONLY:       # %bb.0:
155 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
156 ; X64-SSE2ONLY-NEXT:    psrlw $4, %xmm0
157 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
158 ; X64-SSE2ONLY-NEXT:    retq
160 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_lshr_4:
161 ; X64-SSE2AVX:       # %bb.0:
162 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
163 ; X64-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
164 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
165 ; X64-SSE2AVX-NEXT:    retq
166   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
167   %t1 = lshr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
168   ret <16 x i8> %t1
171 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_1(<16 x i8> %a0) {
172 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_1:
173 ; X32-SSE2ONLY:       # %bb.0:
174 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
175 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
176 ; X32-SSE2ONLY-NEXT:    retl
178 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_1:
179 ; X32-SSE2AVX:       # %bb.0:
180 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
181 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
182 ; X32-SSE2AVX-NEXT:    retl
184 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_1:
185 ; X64-SSE2ONLY:       # %bb.0:
186 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
187 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
188 ; X64-SSE2ONLY-NEXT:    retq
190 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_1:
191 ; X64-SSE2AVX:       # %bb.0:
192 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
193 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
194 ; X64-SSE2AVX-NEXT:    retq
195   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
196   %t1 = lshr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
197   ret <16 x i8> %t1
199 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_4(<16 x i8> %a0) {
200 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_4:
201 ; X32-SSE2ONLY:       # %bb.0:
202 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
203 ; X32-SSE2ONLY-NEXT:    psrlw $4, %xmm0
204 ; X32-SSE2ONLY-NEXT:    retl
206 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_4:
207 ; X32-SSE2AVX:       # %bb.0:
208 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
209 ; X32-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
210 ; X32-SSE2AVX-NEXT:    retl
212 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_4:
213 ; X64-SSE2ONLY:       # %bb.0:
214 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
215 ; X64-SSE2ONLY-NEXT:    psrlw $4, %xmm0
216 ; X64-SSE2ONLY-NEXT:    retq
218 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_4:
219 ; X64-SSE2AVX:       # %bb.0:
220 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
221 ; X64-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
222 ; X64-SSE2AVX-NEXT:    retq
223   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
224   %t1 = lshr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
225   ret <16 x i8> %t1
227 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_5(<16 x i8> %a0) {
228 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_5:
229 ; X32-SSE2ONLY:       # %bb.0:
230 ; X32-SSE2ONLY-NEXT:    psrlw $5, %xmm0
231 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
232 ; X32-SSE2ONLY-NEXT:    retl
234 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_5:
235 ; X32-SSE2AVX:       # %bb.0:
236 ; X32-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
237 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
238 ; X32-SSE2AVX-NEXT:    retl
240 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_5:
241 ; X64-SSE2ONLY:       # %bb.0:
242 ; X64-SSE2ONLY-NEXT:    psrlw $5, %xmm0
243 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
244 ; X64-SSE2ONLY-NEXT:    retq
246 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_5:
247 ; X64-SSE2AVX:       # %bb.0:
248 ; X64-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
249 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
250 ; X64-SSE2AVX-NEXT:    retq
251   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
252   %t1 = lshr <16 x i8> %t0, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
253   ret <16 x i8> %t1
255 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_6(<16 x i8> %a0) {
256 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_6:
257 ; X32-SSE2ONLY:       # %bb.0:
258 ; X32-SSE2ONLY-NEXT:    psrlw $6, %xmm0
259 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
260 ; X32-SSE2ONLY-NEXT:    retl
262 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_6:
263 ; X32-SSE2AVX:       # %bb.0:
264 ; X32-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
265 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
266 ; X32-SSE2AVX-NEXT:    retl
268 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_lshr_6:
269 ; X64-SSE2ONLY:       # %bb.0:
270 ; X64-SSE2ONLY-NEXT:    psrlw $6, %xmm0
271 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
272 ; X64-SSE2ONLY-NEXT:    retq
274 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_lshr_6:
275 ; X64-SSE2AVX:       # %bb.0:
276 ; X64-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
277 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
278 ; X64-SSE2AVX-NEXT:    retq
279   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
280   %t1 = lshr <16 x i8> %t0, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
281   ret <16 x i8> %t1
284 ; ashr
286 define <16 x i8> @test_128_i8_x_16_7_mask_ashr_1(<16 x i8> %a0) {
287 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_ashr_1:
288 ; X32-SSE2ONLY:       # %bb.0:
289 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
290 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
291 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
292 ; X32-SSE2ONLY-NEXT:    retl
294 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_ashr_1:
295 ; X32-SSE2AVX:       # %bb.0:
296 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
297 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
298 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
299 ; X32-SSE2AVX-NEXT:    retl
301 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_ashr_1:
302 ; X64-SSE2ONLY:       # %bb.0:
303 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
304 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
305 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
306 ; X64-SSE2ONLY-NEXT:    retq
308 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_ashr_1:
309 ; X64-SSE2AVX:       # %bb.0:
310 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
311 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
312 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
313 ; X64-SSE2AVX-NEXT:    retq
314   %t0 = and <16 x i8> %a0, <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>
315   %t1 = ashr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
316   ret <16 x i8> %t1
319 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_1(<16 x i8> %a0) {
320 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_1:
321 ; X32-SSE2ONLY:       # %bb.0:
322 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
323 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
324 ; X32-SSE2ONLY-NEXT:    retl
326 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_1:
327 ; X32-SSE2AVX:       # %bb.0:
328 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
329 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
330 ; X32-SSE2AVX-NEXT:    retl
332 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_1:
333 ; X64-SSE2ONLY:       # %bb.0:
334 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
335 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
336 ; X64-SSE2ONLY-NEXT:    retq
338 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_1:
339 ; X64-SSE2AVX:       # %bb.0:
340 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
341 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
342 ; X64-SSE2AVX-NEXT:    retq
343   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
344   %t1 = ashr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
345   ret <16 x i8> %t1
347 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_2(<16 x i8> %a0) {
348 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_2:
349 ; X32-SSE2ONLY:       # %bb.0:
350 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
351 ; X32-SSE2ONLY-NEXT:    psrlw $2, %xmm0
352 ; X32-SSE2ONLY-NEXT:    retl
354 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_2:
355 ; X32-SSE2AVX:       # %bb.0:
356 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
357 ; X32-SSE2AVX-NEXT:    vpsrlw $2, %xmm0, %xmm0
358 ; X32-SSE2AVX-NEXT:    retl
360 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_2:
361 ; X64-SSE2ONLY:       # %bb.0:
362 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
363 ; X64-SSE2ONLY-NEXT:    psrlw $2, %xmm0
364 ; X64-SSE2ONLY-NEXT:    retq
366 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_2:
367 ; X64-SSE2AVX:       # %bb.0:
368 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
369 ; X64-SSE2AVX-NEXT:    vpsrlw $2, %xmm0, %xmm0
370 ; X64-SSE2AVX-NEXT:    retq
371   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
372   %t1 = ashr <16 x i8> %t0, <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>
373   ret <16 x i8> %t1
375 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_3(<16 x i8> %a0) {
376 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_3:
377 ; X32-SSE2ONLY:       # %bb.0:
378 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
379 ; X32-SSE2ONLY-NEXT:    psrlw $3, %xmm0
380 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
381 ; X32-SSE2ONLY-NEXT:    retl
383 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_3:
384 ; X32-SSE2AVX:       # %bb.0:
385 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
386 ; X32-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
387 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
388 ; X32-SSE2AVX-NEXT:    retl
390 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_3:
391 ; X64-SSE2ONLY:       # %bb.0:
392 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
393 ; X64-SSE2ONLY-NEXT:    psrlw $3, %xmm0
394 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
395 ; X64-SSE2ONLY-NEXT:    retq
397 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_3:
398 ; X64-SSE2AVX:       # %bb.0:
399 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
400 ; X64-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
401 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
402 ; X64-SSE2AVX-NEXT:    retq
403   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
404   %t1 = ashr <16 x i8> %t0, <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>
405   ret <16 x i8> %t1
407 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_4(<16 x i8> %a0) {
408 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_4:
409 ; X32-SSE2ONLY:       # %bb.0:
410 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
411 ; X32-SSE2ONLY-NEXT:    psrlw $4, %xmm0
412 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
413 ; X32-SSE2ONLY-NEXT:    retl
415 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_4:
416 ; X32-SSE2AVX:       # %bb.0:
417 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
418 ; X32-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
419 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
420 ; X32-SSE2AVX-NEXT:    retl
422 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_ashr_4:
423 ; X64-SSE2ONLY:       # %bb.0:
424 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
425 ; X64-SSE2ONLY-NEXT:    psrlw $4, %xmm0
426 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
427 ; X64-SSE2ONLY-NEXT:    retq
429 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_ashr_4:
430 ; X64-SSE2AVX:       # %bb.0:
431 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
432 ; X64-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
433 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
434 ; X64-SSE2AVX-NEXT:    retq
435   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
436   %t1 = ashr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
437   ret <16 x i8> %t1
440 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_1(<16 x i8> %a0) {
441 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_1:
442 ; X32-SSE2ONLY:       # %bb.0:
443 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
444 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
445 ; X32-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
446 ; X32-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
447 ; X32-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
448 ; X32-SSE2ONLY-NEXT:    retl
450 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_1:
451 ; X32-SSE2AVX:       # %bb.0:
452 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
453 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
454 ; X32-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
455 ; X32-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
456 ; X32-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
457 ; X32-SSE2AVX-NEXT:    retl
459 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_1:
460 ; X64-SSE2ONLY:       # %bb.0:
461 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
462 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
463 ; X64-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
464 ; X64-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
465 ; X64-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
466 ; X64-SSE2ONLY-NEXT:    retq
468 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_1:
469 ; X64-SSE2AVX:       # %bb.0:
470 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
471 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
472 ; X64-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]
473 ; X64-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
474 ; X64-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
475 ; X64-SSE2AVX-NEXT:    retq
476   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
477   %t1 = ashr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
478   ret <16 x i8> %t1
480 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_4(<16 x i8> %a0) {
481 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_4:
482 ; X32-SSE2ONLY:       # %bb.0:
483 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
484 ; X32-SSE2ONLY-NEXT:    psrlw $4, %xmm0
485 ; X32-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
486 ; X32-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
487 ; X32-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
488 ; X32-SSE2ONLY-NEXT:    retl
490 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_4:
491 ; X32-SSE2AVX:       # %bb.0:
492 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
493 ; X32-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
494 ; X32-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
495 ; X32-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
496 ; X32-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
497 ; X32-SSE2AVX-NEXT:    retl
499 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_4:
500 ; X64-SSE2ONLY:       # %bb.0:
501 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
502 ; X64-SSE2ONLY-NEXT:    psrlw $4, %xmm0
503 ; X64-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
504 ; X64-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
505 ; X64-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
506 ; X64-SSE2ONLY-NEXT:    retq
508 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_4:
509 ; X64-SSE2AVX:       # %bb.0:
510 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
511 ; X64-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
512 ; X64-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]
513 ; X64-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
514 ; X64-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
515 ; X64-SSE2AVX-NEXT:    retq
516   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
517   %t1 = ashr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
518   ret <16 x i8> %t1
520 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_5(<16 x i8> %a0) {
521 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_5:
522 ; X32-SSE2ONLY:       # %bb.0:
523 ; X32-SSE2ONLY-NEXT:    psrlw $5, %xmm0
524 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
525 ; X32-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
526 ; X32-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
527 ; X32-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
528 ; X32-SSE2ONLY-NEXT:    retl
530 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_5:
531 ; X32-SSE2AVX:       # %bb.0:
532 ; X32-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
533 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
534 ; X32-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
535 ; X32-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
536 ; X32-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
537 ; X32-SSE2AVX-NEXT:    retl
539 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_5:
540 ; X64-SSE2ONLY:       # %bb.0:
541 ; X64-SSE2ONLY-NEXT:    psrlw $5, %xmm0
542 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
543 ; X64-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
544 ; X64-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
545 ; X64-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
546 ; X64-SSE2ONLY-NEXT:    retq
548 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_5:
549 ; X64-SSE2AVX:       # %bb.0:
550 ; X64-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
551 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
552 ; X64-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
553 ; X64-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
554 ; X64-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
555 ; X64-SSE2AVX-NEXT:    retq
556   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
557   %t1 = ashr <16 x i8> %t0, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
558   ret <16 x i8> %t1
560 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_6(<16 x i8> %a0) {
561 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_6:
562 ; X32-SSE2ONLY:       # %bb.0:
563 ; X32-SSE2ONLY-NEXT:    psrlw $6, %xmm0
564 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
565 ; X32-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
566 ; X32-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
567 ; X32-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
568 ; X32-SSE2ONLY-NEXT:    retl
570 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_6:
571 ; X32-SSE2AVX:       # %bb.0:
572 ; X32-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
573 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
574 ; X32-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
575 ; X32-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
576 ; X32-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
577 ; X32-SSE2AVX-NEXT:    retl
579 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_ashr_6:
580 ; X64-SSE2ONLY:       # %bb.0:
581 ; X64-SSE2ONLY-NEXT:    psrlw $6, %xmm0
582 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
583 ; X64-SSE2ONLY-NEXT:    movdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
584 ; X64-SSE2ONLY-NEXT:    pxor %xmm1, %xmm0
585 ; X64-SSE2ONLY-NEXT:    psubb %xmm1, %xmm0
586 ; X64-SSE2ONLY-NEXT:    retq
588 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_ashr_6:
589 ; X64-SSE2AVX:       # %bb.0:
590 ; X64-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
591 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
592 ; X64-SSE2AVX-NEXT:    vmovdqa {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
593 ; X64-SSE2AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
594 ; X64-SSE2AVX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0
595 ; X64-SSE2AVX-NEXT:    retq
596   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
597   %t1 = ashr <16 x i8> %t0, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
598   ret <16 x i8> %t1
601 ; shl
603 define <16 x i8> @test_128_i8_x_16_7_mask_shl_1(<16 x i8> %a0) {
604 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_1:
605 ; X32-SSE2ONLY:       # %bb.0:
606 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
607 ; X32-SSE2ONLY-NEXT:    paddb %xmm0, %xmm0
608 ; X32-SSE2ONLY-NEXT:    retl
610 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_1:
611 ; X32-SSE2AVX:       # %bb.0:
612 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
613 ; X32-SSE2AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
614 ; X32-SSE2AVX-NEXT:    retl
616 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_1:
617 ; X64-SSE2ONLY:       # %bb.0:
618 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
619 ; X64-SSE2ONLY-NEXT:    paddb %xmm0, %xmm0
620 ; X64-SSE2ONLY-NEXT:    retq
622 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_1:
623 ; X64-SSE2AVX:       # %bb.0:
624 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
625 ; X64-SSE2AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
626 ; X64-SSE2AVX-NEXT:    retq
627   %t0 = and <16 x i8> %a0, <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>
628   %t1 = shl <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
629   ret <16 x i8> %t1
631 define <16 x i8> @test_128_i8_x_16_7_mask_shl_4(<16 x i8> %a0) {
632 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_4:
633 ; X32-SSE2ONLY:       # %bb.0:
634 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
635 ; X32-SSE2ONLY-NEXT:    psllw $4, %xmm0
636 ; X32-SSE2ONLY-NEXT:    retl
638 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_4:
639 ; X32-SSE2AVX:       # %bb.0:
640 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
641 ; X32-SSE2AVX-NEXT:    vpsllw $4, %xmm0, %xmm0
642 ; X32-SSE2AVX-NEXT:    retl
644 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_4:
645 ; X64-SSE2ONLY:       # %bb.0:
646 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
647 ; X64-SSE2ONLY-NEXT:    psllw $4, %xmm0
648 ; X64-SSE2ONLY-NEXT:    retq
650 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_4:
651 ; X64-SSE2AVX:       # %bb.0:
652 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
653 ; X64-SSE2AVX-NEXT:    vpsllw $4, %xmm0, %xmm0
654 ; X64-SSE2AVX-NEXT:    retq
655   %t0 = and <16 x i8> %a0, <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>
656   %t1 = shl <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
657   ret <16 x i8> %t1
659 define <16 x i8> @test_128_i8_x_16_7_mask_shl_5(<16 x i8> %a0) {
660 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_5:
661 ; X32-SSE2ONLY:       # %bb.0:
662 ; X32-SSE2ONLY-NEXT:    psllw $5, %xmm0
663 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
664 ; X32-SSE2ONLY-NEXT:    retl
666 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_5:
667 ; X32-SSE2AVX:       # %bb.0:
668 ; X32-SSE2AVX-NEXT:    vpsllw $5, %xmm0, %xmm0
669 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
670 ; X32-SSE2AVX-NEXT:    retl
672 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_5:
673 ; X64-SSE2ONLY:       # %bb.0:
674 ; X64-SSE2ONLY-NEXT:    psllw $5, %xmm0
675 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
676 ; X64-SSE2ONLY-NEXT:    retq
678 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_5:
679 ; X64-SSE2AVX:       # %bb.0:
680 ; X64-SSE2AVX-NEXT:    vpsllw $5, %xmm0, %xmm0
681 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
682 ; X64-SSE2AVX-NEXT:    retq
683   %t0 = and <16 x i8> %a0, <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>
684   %t1 = shl <16 x i8> %t0, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
685   ret <16 x i8> %t1
687 define <16 x i8> @test_128_i8_x_16_7_mask_shl_6(<16 x i8> %a0) {
688 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_6:
689 ; X32-SSE2ONLY:       # %bb.0:
690 ; X32-SSE2ONLY-NEXT:    psllw $6, %xmm0
691 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
692 ; X32-SSE2ONLY-NEXT:    retl
694 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_6:
695 ; X32-SSE2AVX:       # %bb.0:
696 ; X32-SSE2AVX-NEXT:    vpsllw $6, %xmm0, %xmm0
697 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
698 ; X32-SSE2AVX-NEXT:    retl
700 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_7_mask_shl_6:
701 ; X64-SSE2ONLY:       # %bb.0:
702 ; X64-SSE2ONLY-NEXT:    psllw $6, %xmm0
703 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
704 ; X64-SSE2ONLY-NEXT:    retq
706 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_7_mask_shl_6:
707 ; X64-SSE2AVX:       # %bb.0:
708 ; X64-SSE2AVX-NEXT:    vpsllw $6, %xmm0, %xmm0
709 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
710 ; X64-SSE2AVX-NEXT:    retq
711   %t0 = and <16 x i8> %a0, <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>
712   %t1 = shl <16 x i8> %t0, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
713   ret <16 x i8> %t1
716 define <16 x i8> @test_128_i8_x_16_28_mask_shl_1(<16 x i8> %a0) {
717 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_1:
718 ; X32-SSE2ONLY:       # %bb.0:
719 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
720 ; X32-SSE2ONLY-NEXT:    paddb %xmm0, %xmm0
721 ; X32-SSE2ONLY-NEXT:    retl
723 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_1:
724 ; X32-SSE2AVX:       # %bb.0:
725 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
726 ; X32-SSE2AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
727 ; X32-SSE2AVX-NEXT:    retl
729 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_1:
730 ; X64-SSE2ONLY:       # %bb.0:
731 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
732 ; X64-SSE2ONLY-NEXT:    paddb %xmm0, %xmm0
733 ; X64-SSE2ONLY-NEXT:    retq
735 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_1:
736 ; X64-SSE2AVX:       # %bb.0:
737 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
738 ; X64-SSE2AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
739 ; X64-SSE2AVX-NEXT:    retq
740   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
741   %t1 = shl <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
742   ret <16 x i8> %t1
744 define <16 x i8> @test_128_i8_x_16_28_mask_shl_2(<16 x i8> %a0) {
745 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_2:
746 ; X32-SSE2ONLY:       # %bb.0:
747 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
748 ; X32-SSE2ONLY-NEXT:    psllw $2, %xmm0
749 ; X32-SSE2ONLY-NEXT:    retl
751 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_2:
752 ; X32-SSE2AVX:       # %bb.0:
753 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
754 ; X32-SSE2AVX-NEXT:    vpsllw $2, %xmm0, %xmm0
755 ; X32-SSE2AVX-NEXT:    retl
757 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_2:
758 ; X64-SSE2ONLY:       # %bb.0:
759 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
760 ; X64-SSE2ONLY-NEXT:    psllw $2, %xmm0
761 ; X64-SSE2ONLY-NEXT:    retq
763 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_2:
764 ; X64-SSE2AVX:       # %bb.0:
765 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
766 ; X64-SSE2AVX-NEXT:    vpsllw $2, %xmm0, %xmm0
767 ; X64-SSE2AVX-NEXT:    retq
768   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
769   %t1 = shl <16 x i8> %t0, <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>
770   ret <16 x i8> %t1
772 define <16 x i8> @test_128_i8_x_16_28_mask_shl_3(<16 x i8> %a0) {
773 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_3:
774 ; X32-SSE2ONLY:       # %bb.0:
775 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
776 ; X32-SSE2ONLY-NEXT:    psllw $3, %xmm0
777 ; X32-SSE2ONLY-NEXT:    retl
779 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_3:
780 ; X32-SSE2AVX:       # %bb.0:
781 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
782 ; X32-SSE2AVX-NEXT:    vpsllw $3, %xmm0, %xmm0
783 ; X32-SSE2AVX-NEXT:    retl
785 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_3:
786 ; X64-SSE2ONLY:       # %bb.0:
787 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
788 ; X64-SSE2ONLY-NEXT:    psllw $3, %xmm0
789 ; X64-SSE2ONLY-NEXT:    retq
791 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_3:
792 ; X64-SSE2AVX:       # %bb.0:
793 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
794 ; X64-SSE2AVX-NEXT:    vpsllw $3, %xmm0, %xmm0
795 ; X64-SSE2AVX-NEXT:    retq
796   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
797   %t1 = shl <16 x i8> %t0, <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>
798   ret <16 x i8> %t1
800 define <16 x i8> @test_128_i8_x_16_28_mask_shl_4(<16 x i8> %a0) {
801 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_4:
802 ; X32-SSE2ONLY:       # %bb.0:
803 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
804 ; X32-SSE2ONLY-NEXT:    psllw $4, %xmm0
805 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
806 ; X32-SSE2ONLY-NEXT:    retl
808 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_4:
809 ; X32-SSE2AVX:       # %bb.0:
810 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
811 ; X32-SSE2AVX-NEXT:    vpsllw $4, %xmm0, %xmm0
812 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
813 ; X32-SSE2AVX-NEXT:    retl
815 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_28_mask_shl_4:
816 ; X64-SSE2ONLY:       # %bb.0:
817 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
818 ; X64-SSE2ONLY-NEXT:    psllw $4, %xmm0
819 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
820 ; X64-SSE2ONLY-NEXT:    retq
822 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_28_mask_shl_4:
823 ; X64-SSE2AVX:       # %bb.0:
824 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
825 ; X64-SSE2AVX-NEXT:    vpsllw $4, %xmm0, %xmm0
826 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
827 ; X64-SSE2AVX-NEXT:    retq
828   %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28>
829   %t1 = shl <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
830   ret <16 x i8> %t1
833 define <16 x i8> @test_128_i8_x_16_224_mask_shl_1(<16 x i8> %a0) {
834 ; X32-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_shl_1:
835 ; X32-SSE2ONLY:       # %bb.0:
836 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
837 ; X32-SSE2ONLY-NEXT:    paddb %xmm0, %xmm0
838 ; X32-SSE2ONLY-NEXT:    retl
840 ; X32-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_shl_1:
841 ; X32-SSE2AVX:       # %bb.0:
842 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
843 ; X32-SSE2AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
844 ; X32-SSE2AVX-NEXT:    retl
846 ; X64-SSE2ONLY-LABEL: test_128_i8_x_16_224_mask_shl_1:
847 ; X64-SSE2ONLY:       # %bb.0:
848 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
849 ; X64-SSE2ONLY-NEXT:    paddb %xmm0, %xmm0
850 ; X64-SSE2ONLY-NEXT:    retq
852 ; X64-SSE2AVX-LABEL: test_128_i8_x_16_224_mask_shl_1:
853 ; X64-SSE2AVX:       # %bb.0:
854 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
855 ; X64-SSE2AVX-NEXT:    vpaddb %xmm0, %xmm0, %xmm0
856 ; X64-SSE2AVX-NEXT:    retq
857   %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224>
858   %t1 = shl <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
859   ret <16 x i8> %t1
862 ;------------------------------------------------------------------------------;
863 ; 128-bit vector; 16-bit elements = 8 elements
864 ;------------------------------------------------------------------------------;
866 ; lshr
868 define <8 x i16> @test_128_i16_x_8_127_mask_lshr_1(<8 x i16> %a0) {
869 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_lshr_1:
870 ; X32-SSE2ONLY:       # %bb.0:
871 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
872 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
873 ; X32-SSE2ONLY-NEXT:    retl
875 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_lshr_1:
876 ; X32-SSE2AVX:       # %bb.0:
877 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
878 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
879 ; X32-SSE2AVX-NEXT:    retl
881 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_lshr_1:
882 ; X64-SSE2ONLY:       # %bb.0:
883 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
884 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
885 ; X64-SSE2ONLY-NEXT:    retq
887 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_lshr_1:
888 ; X64-SSE2AVX:       # %bb.0:
889 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
890 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
891 ; X64-SSE2AVX-NEXT:    retq
892   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
893   %t1 = lshr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
894   ret <8 x i16> %t1
897 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_3(<8 x i16> %a0) {
898 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_3:
899 ; X32-SSE2ONLY:       # %bb.0:
900 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
901 ; X32-SSE2ONLY-NEXT:    psrlw $3, %xmm0
902 ; X32-SSE2ONLY-NEXT:    retl
904 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_3:
905 ; X32-SSE2AVX:       # %bb.0:
906 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
907 ; X32-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
908 ; X32-SSE2AVX-NEXT:    retl
910 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_3:
911 ; X64-SSE2ONLY:       # %bb.0:
912 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
913 ; X64-SSE2ONLY-NEXT:    psrlw $3, %xmm0
914 ; X64-SSE2ONLY-NEXT:    retq
916 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_3:
917 ; X64-SSE2AVX:       # %bb.0:
918 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
919 ; X64-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
920 ; X64-SSE2AVX-NEXT:    retq
921   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
922   %t1 = lshr <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
923   ret <8 x i16> %t1
925 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_4(<8 x i16> %a0) {
926 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_4:
927 ; X32-SSE2ONLY:       # %bb.0:
928 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
929 ; X32-SSE2ONLY-NEXT:    psrlw $4, %xmm0
930 ; X32-SSE2ONLY-NEXT:    retl
932 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_4:
933 ; X32-SSE2AVX:       # %bb.0:
934 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
935 ; X32-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
936 ; X32-SSE2AVX-NEXT:    retl
938 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_4:
939 ; X64-SSE2ONLY:       # %bb.0:
940 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
941 ; X64-SSE2ONLY-NEXT:    psrlw $4, %xmm0
942 ; X64-SSE2ONLY-NEXT:    retq
944 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_4:
945 ; X64-SSE2AVX:       # %bb.0:
946 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
947 ; X64-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
948 ; X64-SSE2AVX-NEXT:    retq
949   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
950   %t1 = lshr <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
951   ret <8 x i16> %t1
953 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_5(<8 x i16> %a0) {
954 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_5:
955 ; X32-SSE2ONLY:       # %bb.0:
956 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
957 ; X32-SSE2ONLY-NEXT:    psrlw $5, %xmm0
958 ; X32-SSE2ONLY-NEXT:    retl
960 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_5:
961 ; X32-SSE2AVX:       # %bb.0:
962 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
963 ; X32-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
964 ; X32-SSE2AVX-NEXT:    retl
966 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_5:
967 ; X64-SSE2ONLY:       # %bb.0:
968 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
969 ; X64-SSE2ONLY-NEXT:    psrlw $5, %xmm0
970 ; X64-SSE2ONLY-NEXT:    retq
972 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_5:
973 ; X64-SSE2AVX:       # %bb.0:
974 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
975 ; X64-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
976 ; X64-SSE2AVX-NEXT:    retq
977   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
978   %t1 = lshr <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
979   ret <8 x i16> %t1
981 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_6(<8 x i16> %a0) {
982 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_6:
983 ; X32-SSE2ONLY:       # %bb.0:
984 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
985 ; X32-SSE2ONLY-NEXT:    psrlw $6, %xmm0
986 ; X32-SSE2ONLY-NEXT:    retl
988 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_6:
989 ; X32-SSE2AVX:       # %bb.0:
990 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
991 ; X32-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
992 ; X32-SSE2AVX-NEXT:    retl
994 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_lshr_6:
995 ; X64-SSE2ONLY:       # %bb.0:
996 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
997 ; X64-SSE2ONLY-NEXT:    psrlw $6, %xmm0
998 ; X64-SSE2ONLY-NEXT:    retq
1000 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_lshr_6:
1001 ; X64-SSE2AVX:       # %bb.0:
1002 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1003 ; X64-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
1004 ; X64-SSE2AVX-NEXT:    retq
1005   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1006   %t1 = lshr <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
1007   ret <8 x i16> %t1
1010 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_1(<8 x i16> %a0) {
1011 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_1:
1012 ; X32-SSE2ONLY:       # %bb.0:
1013 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1014 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
1015 ; X32-SSE2ONLY-NEXT:    retl
1017 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_1:
1018 ; X32-SSE2AVX:       # %bb.0:
1019 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1020 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
1021 ; X32-SSE2AVX-NEXT:    retl
1023 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_1:
1024 ; X64-SSE2ONLY:       # %bb.0:
1025 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1026 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
1027 ; X64-SSE2ONLY-NEXT:    retq
1029 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_1:
1030 ; X64-SSE2AVX:       # %bb.0:
1031 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1032 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
1033 ; X64-SSE2AVX-NEXT:    retq
1034   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1035   %t1 = lshr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1036   ret <8 x i16> %t1
1038 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_8(<8 x i16> %a0) {
1039 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_8:
1040 ; X32-SSE2ONLY:       # %bb.0:
1041 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1042 ; X32-SSE2ONLY-NEXT:    psrlw $8, %xmm0
1043 ; X32-SSE2ONLY-NEXT:    retl
1045 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_8:
1046 ; X32-SSE2AVX:       # %bb.0:
1047 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1048 ; X32-SSE2AVX-NEXT:    vpsrlw $8, %xmm0, %xmm0
1049 ; X32-SSE2AVX-NEXT:    retl
1051 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_8:
1052 ; X64-SSE2ONLY:       # %bb.0:
1053 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1054 ; X64-SSE2ONLY-NEXT:    psrlw $8, %xmm0
1055 ; X64-SSE2ONLY-NEXT:    retq
1057 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_8:
1058 ; X64-SSE2AVX:       # %bb.0:
1059 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1060 ; X64-SSE2AVX-NEXT:    vpsrlw $8, %xmm0, %xmm0
1061 ; X64-SSE2AVX-NEXT:    retq
1062   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1063   %t1 = lshr <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
1064   ret <8 x i16> %t1
1066 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_9(<8 x i16> %a0) {
1067 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_9:
1068 ; X32-SSE2ONLY:       # %bb.0:
1069 ; X32-SSE2ONLY-NEXT:    psrlw $9, %xmm0
1070 ; X32-SSE2ONLY-NEXT:    retl
1072 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_9:
1073 ; X32-SSE2AVX:       # %bb.0:
1074 ; X32-SSE2AVX-NEXT:    vpsrlw $9, %xmm0, %xmm0
1075 ; X32-SSE2AVX-NEXT:    retl
1077 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_9:
1078 ; X64-SSE2ONLY:       # %bb.0:
1079 ; X64-SSE2ONLY-NEXT:    psrlw $9, %xmm0
1080 ; X64-SSE2ONLY-NEXT:    retq
1082 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_9:
1083 ; X64-SSE2AVX:       # %bb.0:
1084 ; X64-SSE2AVX-NEXT:    vpsrlw $9, %xmm0, %xmm0
1085 ; X64-SSE2AVX-NEXT:    retq
1086   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1087   %t1 = lshr <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
1088   ret <8 x i16> %t1
1090 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_10(<8 x i16> %a0) {
1091 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_10:
1092 ; X32-SSE2ONLY:       # %bb.0:
1093 ; X32-SSE2ONLY-NEXT:    psrlw $10, %xmm0
1094 ; X32-SSE2ONLY-NEXT:    retl
1096 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_10:
1097 ; X32-SSE2AVX:       # %bb.0:
1098 ; X32-SSE2AVX-NEXT:    vpsrlw $10, %xmm0, %xmm0
1099 ; X32-SSE2AVX-NEXT:    retl
1101 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_lshr_10:
1102 ; X64-SSE2ONLY:       # %bb.0:
1103 ; X64-SSE2ONLY-NEXT:    psrlw $10, %xmm0
1104 ; X64-SSE2ONLY-NEXT:    retq
1106 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_lshr_10:
1107 ; X64-SSE2AVX:       # %bb.0:
1108 ; X64-SSE2AVX-NEXT:    vpsrlw $10, %xmm0, %xmm0
1109 ; X64-SSE2AVX-NEXT:    retq
1110   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1111   %t1 = lshr <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
1112   ret <8 x i16> %t1
1115 ; ashr
1117 define <8 x i16> @test_128_i16_x_8_127_mask_ashr_1(<8 x i16> %a0) {
1118 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_ashr_1:
1119 ; X32-SSE2ONLY:       # %bb.0:
1120 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1121 ; X32-SSE2ONLY-NEXT:    psrlw $1, %xmm0
1122 ; X32-SSE2ONLY-NEXT:    retl
1124 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_ashr_1:
1125 ; X32-SSE2AVX:       # %bb.0:
1126 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1127 ; X32-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
1128 ; X32-SSE2AVX-NEXT:    retl
1130 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_ashr_1:
1131 ; X64-SSE2ONLY:       # %bb.0:
1132 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1133 ; X64-SSE2ONLY-NEXT:    psrlw $1, %xmm0
1134 ; X64-SSE2ONLY-NEXT:    retq
1136 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_ashr_1:
1137 ; X64-SSE2AVX:       # %bb.0:
1138 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1139 ; X64-SSE2AVX-NEXT:    vpsrlw $1, %xmm0, %xmm0
1140 ; X64-SSE2AVX-NEXT:    retq
1141   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
1142   %t1 = ashr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1143   ret <8 x i16> %t1
1146 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_3(<8 x i16> %a0) {
1147 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_3:
1148 ; X32-SSE2ONLY:       # %bb.0:
1149 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1150 ; X32-SSE2ONLY-NEXT:    psrlw $3, %xmm0
1151 ; X32-SSE2ONLY-NEXT:    retl
1153 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_3:
1154 ; X32-SSE2AVX:       # %bb.0:
1155 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1156 ; X32-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
1157 ; X32-SSE2AVX-NEXT:    retl
1159 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_3:
1160 ; X64-SSE2ONLY:       # %bb.0:
1161 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1162 ; X64-SSE2ONLY-NEXT:    psrlw $3, %xmm0
1163 ; X64-SSE2ONLY-NEXT:    retq
1165 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_3:
1166 ; X64-SSE2AVX:       # %bb.0:
1167 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1168 ; X64-SSE2AVX-NEXT:    vpsrlw $3, %xmm0, %xmm0
1169 ; X64-SSE2AVX-NEXT:    retq
1170   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1171   %t1 = ashr <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1172   ret <8 x i16> %t1
1174 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_4(<8 x i16> %a0) {
1175 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_4:
1176 ; X32-SSE2ONLY:       # %bb.0:
1177 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1178 ; X32-SSE2ONLY-NEXT:    psrlw $4, %xmm0
1179 ; X32-SSE2ONLY-NEXT:    retl
1181 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_4:
1182 ; X32-SSE2AVX:       # %bb.0:
1183 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1184 ; X32-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1185 ; X32-SSE2AVX-NEXT:    retl
1187 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_4:
1188 ; X64-SSE2ONLY:       # %bb.0:
1189 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1190 ; X64-SSE2ONLY-NEXT:    psrlw $4, %xmm0
1191 ; X64-SSE2ONLY-NEXT:    retq
1193 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_4:
1194 ; X64-SSE2AVX:       # %bb.0:
1195 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1196 ; X64-SSE2AVX-NEXT:    vpsrlw $4, %xmm0, %xmm0
1197 ; X64-SSE2AVX-NEXT:    retq
1198   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1199   %t1 = ashr <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
1200   ret <8 x i16> %t1
1202 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_5(<8 x i16> %a0) {
1203 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_5:
1204 ; X32-SSE2ONLY:       # %bb.0:
1205 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1206 ; X32-SSE2ONLY-NEXT:    psrlw $5, %xmm0
1207 ; X32-SSE2ONLY-NEXT:    retl
1209 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_5:
1210 ; X32-SSE2AVX:       # %bb.0:
1211 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1212 ; X32-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
1213 ; X32-SSE2AVX-NEXT:    retl
1215 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_5:
1216 ; X64-SSE2ONLY:       # %bb.0:
1217 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1218 ; X64-SSE2ONLY-NEXT:    psrlw $5, %xmm0
1219 ; X64-SSE2ONLY-NEXT:    retq
1221 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_5:
1222 ; X64-SSE2AVX:       # %bb.0:
1223 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1224 ; X64-SSE2AVX-NEXT:    vpsrlw $5, %xmm0, %xmm0
1225 ; X64-SSE2AVX-NEXT:    retq
1226   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1227   %t1 = ashr <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
1228   ret <8 x i16> %t1
1230 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_6(<8 x i16> %a0) {
1231 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_6:
1232 ; X32-SSE2ONLY:       # %bb.0:
1233 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1234 ; X32-SSE2ONLY-NEXT:    psrlw $6, %xmm0
1235 ; X32-SSE2ONLY-NEXT:    retl
1237 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_6:
1238 ; X32-SSE2AVX:       # %bb.0:
1239 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1240 ; X32-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
1241 ; X32-SSE2AVX-NEXT:    retl
1243 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_ashr_6:
1244 ; X64-SSE2ONLY:       # %bb.0:
1245 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1246 ; X64-SSE2ONLY-NEXT:    psrlw $6, %xmm0
1247 ; X64-SSE2ONLY-NEXT:    retq
1249 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_ashr_6:
1250 ; X64-SSE2AVX:       # %bb.0:
1251 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1252 ; X64-SSE2AVX-NEXT:    vpsrlw $6, %xmm0, %xmm0
1253 ; X64-SSE2AVX-NEXT:    retq
1254   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1255   %t1 = ashr <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
1256   ret <8 x i16> %t1
1259 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_1(<8 x i16> %a0) {
1260 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_1:
1261 ; X32-SSE2ONLY:       # %bb.0:
1262 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1263 ; X32-SSE2ONLY-NEXT:    psraw $1, %xmm0
1264 ; X32-SSE2ONLY-NEXT:    retl
1266 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_1:
1267 ; X32-SSE2AVX:       # %bb.0:
1268 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1269 ; X32-SSE2AVX-NEXT:    vpsraw $1, %xmm0, %xmm0
1270 ; X32-SSE2AVX-NEXT:    retl
1272 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_1:
1273 ; X64-SSE2ONLY:       # %bb.0:
1274 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1275 ; X64-SSE2ONLY-NEXT:    psraw $1, %xmm0
1276 ; X64-SSE2ONLY-NEXT:    retq
1278 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_1:
1279 ; X64-SSE2AVX:       # %bb.0:
1280 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1281 ; X64-SSE2AVX-NEXT:    vpsraw $1, %xmm0, %xmm0
1282 ; X64-SSE2AVX-NEXT:    retq
1283   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1284   %t1 = ashr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1285   ret <8 x i16> %t1
1287 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_8(<8 x i16> %a0) {
1288 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_8:
1289 ; X32-SSE2ONLY:       # %bb.0:
1290 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1291 ; X32-SSE2ONLY-NEXT:    psraw $8, %xmm0
1292 ; X32-SSE2ONLY-NEXT:    retl
1294 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_8:
1295 ; X32-SSE2AVX:       # %bb.0:
1296 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1297 ; X32-SSE2AVX-NEXT:    vpsraw $8, %xmm0, %xmm0
1298 ; X32-SSE2AVX-NEXT:    retl
1300 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_8:
1301 ; X64-SSE2ONLY:       # %bb.0:
1302 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1303 ; X64-SSE2ONLY-NEXT:    psraw $8, %xmm0
1304 ; X64-SSE2ONLY-NEXT:    retq
1306 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_8:
1307 ; X64-SSE2AVX:       # %bb.0:
1308 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1309 ; X64-SSE2AVX-NEXT:    vpsraw $8, %xmm0, %xmm0
1310 ; X64-SSE2AVX-NEXT:    retq
1311   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1312   %t1 = ashr <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
1313   ret <8 x i16> %t1
1315 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_9(<8 x i16> %a0) {
1316 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_9:
1317 ; X32-SSE2ONLY:       # %bb.0:
1318 ; X32-SSE2ONLY-NEXT:    psraw $9, %xmm0
1319 ; X32-SSE2ONLY-NEXT:    retl
1321 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_9:
1322 ; X32-SSE2AVX:       # %bb.0:
1323 ; X32-SSE2AVX-NEXT:    vpsraw $9, %xmm0, %xmm0
1324 ; X32-SSE2AVX-NEXT:    retl
1326 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_9:
1327 ; X64-SSE2ONLY:       # %bb.0:
1328 ; X64-SSE2ONLY-NEXT:    psraw $9, %xmm0
1329 ; X64-SSE2ONLY-NEXT:    retq
1331 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_9:
1332 ; X64-SSE2AVX:       # %bb.0:
1333 ; X64-SSE2AVX-NEXT:    vpsraw $9, %xmm0, %xmm0
1334 ; X64-SSE2AVX-NEXT:    retq
1335   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1336   %t1 = ashr <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
1337   ret <8 x i16> %t1
1339 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_10(<8 x i16> %a0) {
1340 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_10:
1341 ; X32-SSE2ONLY:       # %bb.0:
1342 ; X32-SSE2ONLY-NEXT:    psraw $10, %xmm0
1343 ; X32-SSE2ONLY-NEXT:    retl
1345 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_10:
1346 ; X32-SSE2AVX:       # %bb.0:
1347 ; X32-SSE2AVX-NEXT:    vpsraw $10, %xmm0, %xmm0
1348 ; X32-SSE2AVX-NEXT:    retl
1350 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_ashr_10:
1351 ; X64-SSE2ONLY:       # %bb.0:
1352 ; X64-SSE2ONLY-NEXT:    psraw $10, %xmm0
1353 ; X64-SSE2ONLY-NEXT:    retq
1355 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_ashr_10:
1356 ; X64-SSE2AVX:       # %bb.0:
1357 ; X64-SSE2AVX-NEXT:    vpsraw $10, %xmm0, %xmm0
1358 ; X64-SSE2AVX-NEXT:    retq
1359   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1360   %t1 = ashr <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
1361   ret <8 x i16> %t1
1364 ; shl
1366 define <8 x i16> @test_128_i16_x_8_127_mask_shl_1(<8 x i16> %a0) {
1367 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_1:
1368 ; X32-SSE2ONLY:       # %bb.0:
1369 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1370 ; X32-SSE2ONLY-NEXT:    paddw %xmm0, %xmm0
1371 ; X32-SSE2ONLY-NEXT:    retl
1373 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_1:
1374 ; X32-SSE2AVX:       # %bb.0:
1375 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1376 ; X32-SSE2AVX-NEXT:    vpaddw %xmm0, %xmm0, %xmm0
1377 ; X32-SSE2AVX-NEXT:    retl
1379 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_1:
1380 ; X64-SSE2ONLY:       # %bb.0:
1381 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1382 ; X64-SSE2ONLY-NEXT:    paddw %xmm0, %xmm0
1383 ; X64-SSE2ONLY-NEXT:    retq
1385 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_1:
1386 ; X64-SSE2AVX:       # %bb.0:
1387 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1388 ; X64-SSE2AVX-NEXT:    vpaddw %xmm0, %xmm0, %xmm0
1389 ; X64-SSE2AVX-NEXT:    retq
1390   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
1391   %t1 = shl <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1392   ret <8 x i16> %t1
1394 define <8 x i16> @test_128_i16_x_8_127_mask_shl_8(<8 x i16> %a0) {
1395 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_8:
1396 ; X32-SSE2ONLY:       # %bb.0:
1397 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1398 ; X32-SSE2ONLY-NEXT:    psllw $8, %xmm0
1399 ; X32-SSE2ONLY-NEXT:    retl
1401 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_8:
1402 ; X32-SSE2AVX:       # %bb.0:
1403 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1404 ; X32-SSE2AVX-NEXT:    vpsllw $8, %xmm0, %xmm0
1405 ; X32-SSE2AVX-NEXT:    retl
1407 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_8:
1408 ; X64-SSE2ONLY:       # %bb.0:
1409 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1410 ; X64-SSE2ONLY-NEXT:    psllw $8, %xmm0
1411 ; X64-SSE2ONLY-NEXT:    retq
1413 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_8:
1414 ; X64-SSE2AVX:       # %bb.0:
1415 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1416 ; X64-SSE2AVX-NEXT:    vpsllw $8, %xmm0, %xmm0
1417 ; X64-SSE2AVX-NEXT:    retq
1418   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
1419   %t1 = shl <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
1420   ret <8 x i16> %t1
1422 define <8 x i16> @test_128_i16_x_8_127_mask_shl_9(<8 x i16> %a0) {
1423 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_9:
1424 ; X32-SSE2ONLY:       # %bb.0:
1425 ; X32-SSE2ONLY-NEXT:    psllw $9, %xmm0
1426 ; X32-SSE2ONLY-NEXT:    retl
1428 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_9:
1429 ; X32-SSE2AVX:       # %bb.0:
1430 ; X32-SSE2AVX-NEXT:    vpsllw $9, %xmm0, %xmm0
1431 ; X32-SSE2AVX-NEXT:    retl
1433 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_9:
1434 ; X64-SSE2ONLY:       # %bb.0:
1435 ; X64-SSE2ONLY-NEXT:    psllw $9, %xmm0
1436 ; X64-SSE2ONLY-NEXT:    retq
1438 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_9:
1439 ; X64-SSE2AVX:       # %bb.0:
1440 ; X64-SSE2AVX-NEXT:    vpsllw $9, %xmm0, %xmm0
1441 ; X64-SSE2AVX-NEXT:    retq
1442   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
1443   %t1 = shl <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
1444   ret <8 x i16> %t1
1446 define <8 x i16> @test_128_i16_x_8_127_mask_shl_10(<8 x i16> %a0) {
1447 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_10:
1448 ; X32-SSE2ONLY:       # %bb.0:
1449 ; X32-SSE2ONLY-NEXT:    psllw $10, %xmm0
1450 ; X32-SSE2ONLY-NEXT:    retl
1452 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_10:
1453 ; X32-SSE2AVX:       # %bb.0:
1454 ; X32-SSE2AVX-NEXT:    vpsllw $10, %xmm0, %xmm0
1455 ; X32-SSE2AVX-NEXT:    retl
1457 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_127_mask_shl_10:
1458 ; X64-SSE2ONLY:       # %bb.0:
1459 ; X64-SSE2ONLY-NEXT:    psllw $10, %xmm0
1460 ; X64-SSE2ONLY-NEXT:    retq
1462 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_127_mask_shl_10:
1463 ; X64-SSE2AVX:       # %bb.0:
1464 ; X64-SSE2AVX-NEXT:    vpsllw $10, %xmm0, %xmm0
1465 ; X64-SSE2AVX-NEXT:    retq
1466   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
1467   %t1 = shl <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
1468   ret <8 x i16> %t1
1471 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_3(<8 x i16> %a0) {
1472 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_3:
1473 ; X32-SSE2ONLY:       # %bb.0:
1474 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1475 ; X32-SSE2ONLY-NEXT:    psllw $3, %xmm0
1476 ; X32-SSE2ONLY-NEXT:    retl
1478 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_3:
1479 ; X32-SSE2AVX:       # %bb.0:
1480 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1481 ; X32-SSE2AVX-NEXT:    vpsllw $3, %xmm0, %xmm0
1482 ; X32-SSE2AVX-NEXT:    retl
1484 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_3:
1485 ; X64-SSE2ONLY:       # %bb.0:
1486 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1487 ; X64-SSE2ONLY-NEXT:    psllw $3, %xmm0
1488 ; X64-SSE2ONLY-NEXT:    retq
1490 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_3:
1491 ; X64-SSE2AVX:       # %bb.0:
1492 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1493 ; X64-SSE2AVX-NEXT:    vpsllw $3, %xmm0, %xmm0
1494 ; X64-SSE2AVX-NEXT:    retq
1495   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1496   %t1 = shl <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1497   ret <8 x i16> %t1
1499 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_4(<8 x i16> %a0) {
1500 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_4:
1501 ; X32-SSE2ONLY:       # %bb.0:
1502 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1503 ; X32-SSE2ONLY-NEXT:    psllw $4, %xmm0
1504 ; X32-SSE2ONLY-NEXT:    retl
1506 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_4:
1507 ; X32-SSE2AVX:       # %bb.0:
1508 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1509 ; X32-SSE2AVX-NEXT:    vpsllw $4, %xmm0, %xmm0
1510 ; X32-SSE2AVX-NEXT:    retl
1512 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_4:
1513 ; X64-SSE2ONLY:       # %bb.0:
1514 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1515 ; X64-SSE2ONLY-NEXT:    psllw $4, %xmm0
1516 ; X64-SSE2ONLY-NEXT:    retq
1518 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_4:
1519 ; X64-SSE2AVX:       # %bb.0:
1520 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1521 ; X64-SSE2AVX-NEXT:    vpsllw $4, %xmm0, %xmm0
1522 ; X64-SSE2AVX-NEXT:    retq
1523   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1524   %t1 = shl <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
1525   ret <8 x i16> %t1
1527 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_5(<8 x i16> %a0) {
1528 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_5:
1529 ; X32-SSE2ONLY:       # %bb.0:
1530 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1531 ; X32-SSE2ONLY-NEXT:    psllw $5, %xmm0
1532 ; X32-SSE2ONLY-NEXT:    retl
1534 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_5:
1535 ; X32-SSE2AVX:       # %bb.0:
1536 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1537 ; X32-SSE2AVX-NEXT:    vpsllw $5, %xmm0, %xmm0
1538 ; X32-SSE2AVX-NEXT:    retl
1540 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_5:
1541 ; X64-SSE2ONLY:       # %bb.0:
1542 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1543 ; X64-SSE2ONLY-NEXT:    psllw $5, %xmm0
1544 ; X64-SSE2ONLY-NEXT:    retq
1546 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_5:
1547 ; X64-SSE2AVX:       # %bb.0:
1548 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1549 ; X64-SSE2AVX-NEXT:    vpsllw $5, %xmm0, %xmm0
1550 ; X64-SSE2AVX-NEXT:    retq
1551   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1552   %t1 = shl <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
1553   ret <8 x i16> %t1
1555 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_6(<8 x i16> %a0) {
1556 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_6:
1557 ; X32-SSE2ONLY:       # %bb.0:
1558 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1559 ; X32-SSE2ONLY-NEXT:    psllw $6, %xmm0
1560 ; X32-SSE2ONLY-NEXT:    retl
1562 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_6:
1563 ; X32-SSE2AVX:       # %bb.0:
1564 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1565 ; X32-SSE2AVX-NEXT:    vpsllw $6, %xmm0, %xmm0
1566 ; X32-SSE2AVX-NEXT:    retl
1568 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_2032_mask_shl_6:
1569 ; X64-SSE2ONLY:       # %bb.0:
1570 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1571 ; X64-SSE2ONLY-NEXT:    psllw $6, %xmm0
1572 ; X64-SSE2ONLY-NEXT:    retq
1574 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_2032_mask_shl_6:
1575 ; X64-SSE2AVX:       # %bb.0:
1576 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1577 ; X64-SSE2AVX-NEXT:    vpsllw $6, %xmm0, %xmm0
1578 ; X64-SSE2AVX-NEXT:    retq
1579   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
1580   %t1 = shl <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
1581   ret <8 x i16> %t1
1584 define <8 x i16> @test_128_i16_x_8_65024_mask_shl_1(<8 x i16> %a0) {
1585 ; X32-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_shl_1:
1586 ; X32-SSE2ONLY:       # %bb.0:
1587 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1588 ; X32-SSE2ONLY-NEXT:    paddw %xmm0, %xmm0
1589 ; X32-SSE2ONLY-NEXT:    retl
1591 ; X32-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_shl_1:
1592 ; X32-SSE2AVX:       # %bb.0:
1593 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1594 ; X32-SSE2AVX-NEXT:    vpaddw %xmm0, %xmm0, %xmm0
1595 ; X32-SSE2AVX-NEXT:    retl
1597 ; X64-SSE2ONLY-LABEL: test_128_i16_x_8_65024_mask_shl_1:
1598 ; X64-SSE2ONLY:       # %bb.0:
1599 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1600 ; X64-SSE2ONLY-NEXT:    paddw %xmm0, %xmm0
1601 ; X64-SSE2ONLY-NEXT:    retq
1603 ; X64-SSE2AVX-LABEL: test_128_i16_x_8_65024_mask_shl_1:
1604 ; X64-SSE2AVX:       # %bb.0:
1605 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1606 ; X64-SSE2AVX-NEXT:    vpaddw %xmm0, %xmm0, %xmm0
1607 ; X64-SSE2AVX-NEXT:    retq
1608   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
1609   %t1 = shl <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1610   ret <8 x i16> %t1
1613 ;------------------------------------------------------------------------------;
1614 ; 128-bit vector; 32-bit elements = 4 elements
1615 ;------------------------------------------------------------------------------;
1617 ; lshr
1619 define <4 x i32> @test_128_i32_x_4_32767_mask_lshr_1(<4 x i32> %a0) {
1620 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_lshr_1:
1621 ; X32-SSE2ONLY:       # %bb.0:
1622 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1623 ; X32-SSE2ONLY-NEXT:    psrld $1, %xmm0
1624 ; X32-SSE2ONLY-NEXT:    retl
1626 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_lshr_1:
1627 ; X32-SSE2AVX1:       # %bb.0:
1628 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1629 ; X32-SSE2AVX1-NEXT:    vpsrld $1, %xmm0, %xmm0
1630 ; X32-SSE2AVX1-NEXT:    retl
1632 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_lshr_1:
1633 ; X32-SSE2AVX1AVX2:       # %bb.0:
1634 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
1635 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1636 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $1, %xmm0, %xmm0
1637 ; X32-SSE2AVX1AVX2-NEXT:    retl
1639 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_lshr_1:
1640 ; X64-SSE2ONLY:       # %bb.0:
1641 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1642 ; X64-SSE2ONLY-NEXT:    psrld $1, %xmm0
1643 ; X64-SSE2ONLY-NEXT:    retq
1645 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_lshr_1:
1646 ; X64-SSE2AVX1:       # %bb.0:
1647 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1648 ; X64-SSE2AVX1-NEXT:    vpsrld $1, %xmm0, %xmm0
1649 ; X64-SSE2AVX1-NEXT:    retq
1651 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_lshr_1:
1652 ; X64-SSE2AVX1AVX2:       # %bb.0:
1653 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
1654 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1655 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $1, %xmm0, %xmm0
1656 ; X64-SSE2AVX1AVX2-NEXT:    retq
1657   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
1658   %t1 = lshr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
1659   ret <4 x i32> %t1
1662 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_7(<4 x i32> %a0) {
1663 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_7:
1664 ; X32-SSE2ONLY:       # %bb.0:
1665 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1666 ; X32-SSE2ONLY-NEXT:    psrld $7, %xmm0
1667 ; X32-SSE2ONLY-NEXT:    retl
1669 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_7:
1670 ; X32-SSE2AVX1:       # %bb.0:
1671 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1672 ; X32-SSE2AVX1-NEXT:    vpsrld $7, %xmm0, %xmm0
1673 ; X32-SSE2AVX1-NEXT:    retl
1675 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_7:
1676 ; X32-SSE2AVX1AVX2:       # %bb.0:
1677 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1678 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1679 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $7, %xmm0, %xmm0
1680 ; X32-SSE2AVX1AVX2-NEXT:    retl
1682 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_7:
1683 ; X64-SSE2ONLY:       # %bb.0:
1684 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1685 ; X64-SSE2ONLY-NEXT:    psrld $7, %xmm0
1686 ; X64-SSE2ONLY-NEXT:    retq
1688 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_7:
1689 ; X64-SSE2AVX1:       # %bb.0:
1690 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1691 ; X64-SSE2AVX1-NEXT:    vpsrld $7, %xmm0, %xmm0
1692 ; X64-SSE2AVX1-NEXT:    retq
1694 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_7:
1695 ; X64-SSE2AVX1AVX2:       # %bb.0:
1696 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1697 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1698 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $7, %xmm0, %xmm0
1699 ; X64-SSE2AVX1AVX2-NEXT:    retq
1700   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
1701   %t1 = lshr <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7>
1702   ret <4 x i32> %t1
1704 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_8(<4 x i32> %a0) {
1705 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_8:
1706 ; X32-SSE2ONLY:       # %bb.0:
1707 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1708 ; X32-SSE2ONLY-NEXT:    psrld $8, %xmm0
1709 ; X32-SSE2ONLY-NEXT:    retl
1711 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_8:
1712 ; X32-SSE2AVX1:       # %bb.0:
1713 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1714 ; X32-SSE2AVX1-NEXT:    vpsrld $8, %xmm0, %xmm0
1715 ; X32-SSE2AVX1-NEXT:    retl
1717 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_8:
1718 ; X32-SSE2AVX1AVX2:       # %bb.0:
1719 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1720 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1721 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $8, %xmm0, %xmm0
1722 ; X32-SSE2AVX1AVX2-NEXT:    retl
1724 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_8:
1725 ; X64-SSE2ONLY:       # %bb.0:
1726 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1727 ; X64-SSE2ONLY-NEXT:    psrld $8, %xmm0
1728 ; X64-SSE2ONLY-NEXT:    retq
1730 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_8:
1731 ; X64-SSE2AVX1:       # %bb.0:
1732 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1733 ; X64-SSE2AVX1-NEXT:    vpsrld $8, %xmm0, %xmm0
1734 ; X64-SSE2AVX1-NEXT:    retq
1736 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_8:
1737 ; X64-SSE2AVX1AVX2:       # %bb.0:
1738 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1739 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1740 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $8, %xmm0, %xmm0
1741 ; X64-SSE2AVX1AVX2-NEXT:    retq
1742   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
1743   %t1 = lshr <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8>
1744   ret <4 x i32> %t1
1746 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_9(<4 x i32> %a0) {
1747 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_9:
1748 ; X32-SSE2ONLY:       # %bb.0:
1749 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1750 ; X32-SSE2ONLY-NEXT:    psrld $9, %xmm0
1751 ; X32-SSE2ONLY-NEXT:    retl
1753 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_9:
1754 ; X32-SSE2AVX1:       # %bb.0:
1755 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1756 ; X32-SSE2AVX1-NEXT:    vpsrld $9, %xmm0, %xmm0
1757 ; X32-SSE2AVX1-NEXT:    retl
1759 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_9:
1760 ; X32-SSE2AVX1AVX2:       # %bb.0:
1761 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1762 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1763 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $9, %xmm0, %xmm0
1764 ; X32-SSE2AVX1AVX2-NEXT:    retl
1766 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_9:
1767 ; X64-SSE2ONLY:       # %bb.0:
1768 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1769 ; X64-SSE2ONLY-NEXT:    psrld $9, %xmm0
1770 ; X64-SSE2ONLY-NEXT:    retq
1772 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_9:
1773 ; X64-SSE2AVX1:       # %bb.0:
1774 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1775 ; X64-SSE2AVX1-NEXT:    vpsrld $9, %xmm0, %xmm0
1776 ; X64-SSE2AVX1-NEXT:    retq
1778 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_9:
1779 ; X64-SSE2AVX1AVX2:       # %bb.0:
1780 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1781 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1782 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $9, %xmm0, %xmm0
1783 ; X64-SSE2AVX1AVX2-NEXT:    retq
1784   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
1785   %t1 = lshr <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9>
1786   ret <4 x i32> %t1
1788 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_10(<4 x i32> %a0) {
1789 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_10:
1790 ; X32-SSE2ONLY:       # %bb.0:
1791 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1792 ; X32-SSE2ONLY-NEXT:    psrld $10, %xmm0
1793 ; X32-SSE2ONLY-NEXT:    retl
1795 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_10:
1796 ; X32-SSE2AVX1:       # %bb.0:
1797 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1798 ; X32-SSE2AVX1-NEXT:    vpsrld $10, %xmm0, %xmm0
1799 ; X32-SSE2AVX1-NEXT:    retl
1801 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_10:
1802 ; X32-SSE2AVX1AVX2:       # %bb.0:
1803 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1804 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1805 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $10, %xmm0, %xmm0
1806 ; X32-SSE2AVX1AVX2-NEXT:    retl
1808 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_lshr_10:
1809 ; X64-SSE2ONLY:       # %bb.0:
1810 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1811 ; X64-SSE2ONLY-NEXT:    psrld $10, %xmm0
1812 ; X64-SSE2ONLY-NEXT:    retq
1814 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_lshr_10:
1815 ; X64-SSE2AVX1:       # %bb.0:
1816 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1817 ; X64-SSE2AVX1-NEXT:    vpsrld $10, %xmm0, %xmm0
1818 ; X64-SSE2AVX1-NEXT:    retq
1820 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_lshr_10:
1821 ; X64-SSE2AVX1AVX2:       # %bb.0:
1822 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
1823 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1824 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $10, %xmm0, %xmm0
1825 ; X64-SSE2AVX1AVX2-NEXT:    retq
1826   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
1827   %t1 = lshr <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10>
1828   ret <4 x i32> %t1
1831 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_1(<4 x i32> %a0) {
1832 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1:
1833 ; X32-SSE2ONLY:       # %bb.0:
1834 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1835 ; X32-SSE2ONLY-NEXT:    psrld $1, %xmm0
1836 ; X32-SSE2ONLY-NEXT:    retl
1838 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1:
1839 ; X32-SSE2AVX1:       # %bb.0:
1840 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1841 ; X32-SSE2AVX1-NEXT:    vpsrld $1, %xmm0, %xmm0
1842 ; X32-SSE2AVX1-NEXT:    retl
1844 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1:
1845 ; X32-SSE2AVX1AVX2:       # %bb.0:
1846 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
1847 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1848 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $1, %xmm0, %xmm0
1849 ; X32-SSE2AVX1AVX2-NEXT:    retl
1851 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1:
1852 ; X64-SSE2ONLY:       # %bb.0:
1853 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1854 ; X64-SSE2ONLY-NEXT:    psrld $1, %xmm0
1855 ; X64-SSE2ONLY-NEXT:    retq
1857 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1:
1858 ; X64-SSE2AVX1:       # %bb.0:
1859 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1860 ; X64-SSE2AVX1-NEXT:    vpsrld $1, %xmm0, %xmm0
1861 ; X64-SSE2AVX1-NEXT:    retq
1863 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1:
1864 ; X64-SSE2AVX1AVX2:       # %bb.0:
1865 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
1866 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1867 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $1, %xmm0, %xmm0
1868 ; X64-SSE2AVX1AVX2-NEXT:    retq
1869   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
1870   %t1 = lshr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
1871   ret <4 x i32> %t1
1873 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_16(<4 x i32> %a0) {
1874 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16:
1875 ; X32-SSE2ONLY:       # %bb.0:
1876 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1877 ; X32-SSE2ONLY-NEXT:    psrld $16, %xmm0
1878 ; X32-SSE2ONLY-NEXT:    retl
1880 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16:
1881 ; X32-SSE2AVX1:       # %bb.0:
1882 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1883 ; X32-SSE2AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0
1884 ; X32-SSE2AVX1-NEXT:    retl
1886 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16:
1887 ; X32-SSE2AVX1AVX2:       # %bb.0:
1888 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
1889 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1890 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0
1891 ; X32-SSE2AVX1AVX2-NEXT:    retl
1893 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16:
1894 ; X64-SSE2ONLY:       # %bb.0:
1895 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1896 ; X64-SSE2ONLY-NEXT:    psrld $16, %xmm0
1897 ; X64-SSE2ONLY-NEXT:    retq
1899 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16:
1900 ; X64-SSE2AVX1:       # %bb.0:
1901 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1902 ; X64-SSE2AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0
1903 ; X64-SSE2AVX1-NEXT:    retq
1905 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16:
1906 ; X64-SSE2AVX1AVX2:       # %bb.0:
1907 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
1908 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1909 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $16, %xmm0, %xmm0
1910 ; X64-SSE2AVX1AVX2-NEXT:    retq
1911   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
1912   %t1 = lshr <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16>
1913   ret <4 x i32> %t1
1915 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_17(<4 x i32> %a0) {
1916 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_17:
1917 ; X32-SSE2ONLY:       # %bb.0:
1918 ; X32-SSE2ONLY-NEXT:    psrld $17, %xmm0
1919 ; X32-SSE2ONLY-NEXT:    retl
1921 ; X32-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_lshr_17:
1922 ; X32-SSE2AVX:       # %bb.0:
1923 ; X32-SSE2AVX-NEXT:    vpsrld $17, %xmm0, %xmm0
1924 ; X32-SSE2AVX-NEXT:    retl
1926 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_17:
1927 ; X64-SSE2ONLY:       # %bb.0:
1928 ; X64-SSE2ONLY-NEXT:    psrld $17, %xmm0
1929 ; X64-SSE2ONLY-NEXT:    retq
1931 ; X64-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_lshr_17:
1932 ; X64-SSE2AVX:       # %bb.0:
1933 ; X64-SSE2AVX-NEXT:    vpsrld $17, %xmm0, %xmm0
1934 ; X64-SSE2AVX-NEXT:    retq
1935   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
1936   %t1 = lshr <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17>
1937   ret <4 x i32> %t1
1939 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_18(<4 x i32> %a0) {
1940 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_18:
1941 ; X32-SSE2ONLY:       # %bb.0:
1942 ; X32-SSE2ONLY-NEXT:    psrld $18, %xmm0
1943 ; X32-SSE2ONLY-NEXT:    retl
1945 ; X32-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_lshr_18:
1946 ; X32-SSE2AVX:       # %bb.0:
1947 ; X32-SSE2AVX-NEXT:    vpsrld $18, %xmm0, %xmm0
1948 ; X32-SSE2AVX-NEXT:    retl
1950 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_lshr_18:
1951 ; X64-SSE2ONLY:       # %bb.0:
1952 ; X64-SSE2ONLY-NEXT:    psrld $18, %xmm0
1953 ; X64-SSE2ONLY-NEXT:    retq
1955 ; X64-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_lshr_18:
1956 ; X64-SSE2AVX:       # %bb.0:
1957 ; X64-SSE2AVX-NEXT:    vpsrld $18, %xmm0, %xmm0
1958 ; X64-SSE2AVX-NEXT:    retq
1959   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
1960   %t1 = lshr <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18>
1961   ret <4 x i32> %t1
1964 ; ashr
1966 define <4 x i32> @test_128_i32_x_4_32767_mask_ashr_1(<4 x i32> %a0) {
1967 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_ashr_1:
1968 ; X32-SSE2ONLY:       # %bb.0:
1969 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
1970 ; X32-SSE2ONLY-NEXT:    psrld $1, %xmm0
1971 ; X32-SSE2ONLY-NEXT:    retl
1973 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_ashr_1:
1974 ; X32-SSE2AVX1:       # %bb.0:
1975 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
1976 ; X32-SSE2AVX1-NEXT:    vpsrld $1, %xmm0, %xmm0
1977 ; X32-SSE2AVX1-NEXT:    retl
1979 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_ashr_1:
1980 ; X32-SSE2AVX1AVX2:       # %bb.0:
1981 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
1982 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1983 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $1, %xmm0, %xmm0
1984 ; X32-SSE2AVX1AVX2-NEXT:    retl
1986 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_ashr_1:
1987 ; X64-SSE2ONLY:       # %bb.0:
1988 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
1989 ; X64-SSE2ONLY-NEXT:    psrld $1, %xmm0
1990 ; X64-SSE2ONLY-NEXT:    retq
1992 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_ashr_1:
1993 ; X64-SSE2AVX1:       # %bb.0:
1994 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
1995 ; X64-SSE2AVX1-NEXT:    vpsrld $1, %xmm0, %xmm0
1996 ; X64-SSE2AVX1-NEXT:    retq
1998 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_ashr_1:
1999 ; X64-SSE2AVX1AVX2:       # %bb.0:
2000 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
2001 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2002 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $1, %xmm0, %xmm0
2003 ; X64-SSE2AVX1AVX2-NEXT:    retq
2004   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
2005   %t1 = ashr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
2006   ret <4 x i32> %t1
2009 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_7(<4 x i32> %a0) {
2010 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_7:
2011 ; X32-SSE2ONLY:       # %bb.0:
2012 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2013 ; X32-SSE2ONLY-NEXT:    psrld $7, %xmm0
2014 ; X32-SSE2ONLY-NEXT:    retl
2016 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_7:
2017 ; X32-SSE2AVX1:       # %bb.0:
2018 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2019 ; X32-SSE2AVX1-NEXT:    vpsrld $7, %xmm0, %xmm0
2020 ; X32-SSE2AVX1-NEXT:    retl
2022 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_7:
2023 ; X32-SSE2AVX1AVX2:       # %bb.0:
2024 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2025 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2026 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $7, %xmm0, %xmm0
2027 ; X32-SSE2AVX1AVX2-NEXT:    retl
2029 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_7:
2030 ; X64-SSE2ONLY:       # %bb.0:
2031 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2032 ; X64-SSE2ONLY-NEXT:    psrld $7, %xmm0
2033 ; X64-SSE2ONLY-NEXT:    retq
2035 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_7:
2036 ; X64-SSE2AVX1:       # %bb.0:
2037 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2038 ; X64-SSE2AVX1-NEXT:    vpsrld $7, %xmm0, %xmm0
2039 ; X64-SSE2AVX1-NEXT:    retq
2041 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_7:
2042 ; X64-SSE2AVX1AVX2:       # %bb.0:
2043 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2044 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2045 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $7, %xmm0, %xmm0
2046 ; X64-SSE2AVX1AVX2-NEXT:    retq
2047   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2048   %t1 = ashr <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7>
2049   ret <4 x i32> %t1
2051 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_8(<4 x i32> %a0) {
2052 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_8:
2053 ; X32-SSE2ONLY:       # %bb.0:
2054 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2055 ; X32-SSE2ONLY-NEXT:    psrld $8, %xmm0
2056 ; X32-SSE2ONLY-NEXT:    retl
2058 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_8:
2059 ; X32-SSE2AVX1:       # %bb.0:
2060 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2061 ; X32-SSE2AVX1-NEXT:    vpsrld $8, %xmm0, %xmm0
2062 ; X32-SSE2AVX1-NEXT:    retl
2064 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_8:
2065 ; X32-SSE2AVX1AVX2:       # %bb.0:
2066 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2067 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2068 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $8, %xmm0, %xmm0
2069 ; X32-SSE2AVX1AVX2-NEXT:    retl
2071 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_8:
2072 ; X64-SSE2ONLY:       # %bb.0:
2073 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2074 ; X64-SSE2ONLY-NEXT:    psrld $8, %xmm0
2075 ; X64-SSE2ONLY-NEXT:    retq
2077 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_8:
2078 ; X64-SSE2AVX1:       # %bb.0:
2079 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2080 ; X64-SSE2AVX1-NEXT:    vpsrld $8, %xmm0, %xmm0
2081 ; X64-SSE2AVX1-NEXT:    retq
2083 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_8:
2084 ; X64-SSE2AVX1AVX2:       # %bb.0:
2085 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2086 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2087 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $8, %xmm0, %xmm0
2088 ; X64-SSE2AVX1AVX2-NEXT:    retq
2089   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2090   %t1 = ashr <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8>
2091   ret <4 x i32> %t1
2093 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_9(<4 x i32> %a0) {
2094 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_9:
2095 ; X32-SSE2ONLY:       # %bb.0:
2096 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2097 ; X32-SSE2ONLY-NEXT:    psrld $9, %xmm0
2098 ; X32-SSE2ONLY-NEXT:    retl
2100 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_9:
2101 ; X32-SSE2AVX1:       # %bb.0:
2102 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2103 ; X32-SSE2AVX1-NEXT:    vpsrld $9, %xmm0, %xmm0
2104 ; X32-SSE2AVX1-NEXT:    retl
2106 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_9:
2107 ; X32-SSE2AVX1AVX2:       # %bb.0:
2108 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2109 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2110 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $9, %xmm0, %xmm0
2111 ; X32-SSE2AVX1AVX2-NEXT:    retl
2113 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_9:
2114 ; X64-SSE2ONLY:       # %bb.0:
2115 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2116 ; X64-SSE2ONLY-NEXT:    psrld $9, %xmm0
2117 ; X64-SSE2ONLY-NEXT:    retq
2119 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_9:
2120 ; X64-SSE2AVX1:       # %bb.0:
2121 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2122 ; X64-SSE2AVX1-NEXT:    vpsrld $9, %xmm0, %xmm0
2123 ; X64-SSE2AVX1-NEXT:    retq
2125 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_9:
2126 ; X64-SSE2AVX1AVX2:       # %bb.0:
2127 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2128 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2129 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $9, %xmm0, %xmm0
2130 ; X64-SSE2AVX1AVX2-NEXT:    retq
2131   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2132   %t1 = ashr <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9>
2133   ret <4 x i32> %t1
2135 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_10(<4 x i32> %a0) {
2136 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_10:
2137 ; X32-SSE2ONLY:       # %bb.0:
2138 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2139 ; X32-SSE2ONLY-NEXT:    psrld $10, %xmm0
2140 ; X32-SSE2ONLY-NEXT:    retl
2142 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_10:
2143 ; X32-SSE2AVX1:       # %bb.0:
2144 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2145 ; X32-SSE2AVX1-NEXT:    vpsrld $10, %xmm0, %xmm0
2146 ; X32-SSE2AVX1-NEXT:    retl
2148 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_10:
2149 ; X32-SSE2AVX1AVX2:       # %bb.0:
2150 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2151 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2152 ; X32-SSE2AVX1AVX2-NEXT:    vpsrld $10, %xmm0, %xmm0
2153 ; X32-SSE2AVX1AVX2-NEXT:    retl
2155 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_ashr_10:
2156 ; X64-SSE2ONLY:       # %bb.0:
2157 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2158 ; X64-SSE2ONLY-NEXT:    psrld $10, %xmm0
2159 ; X64-SSE2ONLY-NEXT:    retq
2161 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_ashr_10:
2162 ; X64-SSE2AVX1:       # %bb.0:
2163 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2164 ; X64-SSE2AVX1-NEXT:    vpsrld $10, %xmm0, %xmm0
2165 ; X64-SSE2AVX1-NEXT:    retq
2167 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_ashr_10:
2168 ; X64-SSE2AVX1AVX2:       # %bb.0:
2169 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2170 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2171 ; X64-SSE2AVX1AVX2-NEXT:    vpsrld $10, %xmm0, %xmm0
2172 ; X64-SSE2AVX1AVX2-NEXT:    retq
2173   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2174   %t1 = ashr <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10>
2175   ret <4 x i32> %t1
2178 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_1(<4 x i32> %a0) {
2179 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1:
2180 ; X32-SSE2ONLY:       # %bb.0:
2181 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2182 ; X32-SSE2ONLY-NEXT:    psrad $1, %xmm0
2183 ; X32-SSE2ONLY-NEXT:    retl
2185 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1:
2186 ; X32-SSE2AVX1:       # %bb.0:
2187 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2188 ; X32-SSE2AVX1-NEXT:    vpsrad $1, %xmm0, %xmm0
2189 ; X32-SSE2AVX1-NEXT:    retl
2191 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1:
2192 ; X32-SSE2AVX1AVX2:       # %bb.0:
2193 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
2194 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2195 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $1, %xmm0, %xmm0
2196 ; X32-SSE2AVX1AVX2-NEXT:    retl
2198 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1:
2199 ; X64-SSE2ONLY:       # %bb.0:
2200 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2201 ; X64-SSE2ONLY-NEXT:    psrad $1, %xmm0
2202 ; X64-SSE2ONLY-NEXT:    retq
2204 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1:
2205 ; X64-SSE2AVX1:       # %bb.0:
2206 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2207 ; X64-SSE2AVX1-NEXT:    vpsrad $1, %xmm0, %xmm0
2208 ; X64-SSE2AVX1-NEXT:    retq
2210 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1:
2211 ; X64-SSE2AVX1AVX2:       # %bb.0:
2212 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
2213 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2214 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $1, %xmm0, %xmm0
2215 ; X64-SSE2AVX1AVX2-NEXT:    retq
2216   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
2217   %t1 = ashr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
2218   ret <4 x i32> %t1
2220 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_16(<4 x i32> %a0) {
2221 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16:
2222 ; X32-SSE2ONLY:       # %bb.0:
2223 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2224 ; X32-SSE2ONLY-NEXT:    psrad $16, %xmm0
2225 ; X32-SSE2ONLY-NEXT:    retl
2227 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16:
2228 ; X32-SSE2AVX1:       # %bb.0:
2229 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2230 ; X32-SSE2AVX1-NEXT:    vpsrad $16, %xmm0, %xmm0
2231 ; X32-SSE2AVX1-NEXT:    retl
2233 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16:
2234 ; X32-SSE2AVX1AVX2:       # %bb.0:
2235 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
2236 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2237 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $16, %xmm0, %xmm0
2238 ; X32-SSE2AVX1AVX2-NEXT:    retl
2240 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16:
2241 ; X64-SSE2ONLY:       # %bb.0:
2242 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2243 ; X64-SSE2ONLY-NEXT:    psrad $16, %xmm0
2244 ; X64-SSE2ONLY-NEXT:    retq
2246 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16:
2247 ; X64-SSE2AVX1:       # %bb.0:
2248 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2249 ; X64-SSE2AVX1-NEXT:    vpsrad $16, %xmm0, %xmm0
2250 ; X64-SSE2AVX1-NEXT:    retq
2252 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16:
2253 ; X64-SSE2AVX1AVX2:       # %bb.0:
2254 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
2255 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2256 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $16, %xmm0, %xmm0
2257 ; X64-SSE2AVX1AVX2-NEXT:    retq
2258   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
2259   %t1 = ashr <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16>
2260   ret <4 x i32> %t1
2262 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_17(<4 x i32> %a0) {
2263 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_17:
2264 ; X32-SSE2ONLY:       # %bb.0:
2265 ; X32-SSE2ONLY-NEXT:    psrad $17, %xmm0
2266 ; X32-SSE2ONLY-NEXT:    retl
2268 ; X32-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_ashr_17:
2269 ; X32-SSE2AVX:       # %bb.0:
2270 ; X32-SSE2AVX-NEXT:    vpsrad $17, %xmm0, %xmm0
2271 ; X32-SSE2AVX-NEXT:    retl
2273 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_17:
2274 ; X64-SSE2ONLY:       # %bb.0:
2275 ; X64-SSE2ONLY-NEXT:    psrad $17, %xmm0
2276 ; X64-SSE2ONLY-NEXT:    retq
2278 ; X64-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_ashr_17:
2279 ; X64-SSE2AVX:       # %bb.0:
2280 ; X64-SSE2AVX-NEXT:    vpsrad $17, %xmm0, %xmm0
2281 ; X64-SSE2AVX-NEXT:    retq
2282   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
2283   %t1 = ashr <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17>
2284   ret <4 x i32> %t1
2286 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_18(<4 x i32> %a0) {
2287 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_18:
2288 ; X32-SSE2ONLY:       # %bb.0:
2289 ; X32-SSE2ONLY-NEXT:    psrad $18, %xmm0
2290 ; X32-SSE2ONLY-NEXT:    retl
2292 ; X32-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_ashr_18:
2293 ; X32-SSE2AVX:       # %bb.0:
2294 ; X32-SSE2AVX-NEXT:    vpsrad $18, %xmm0, %xmm0
2295 ; X32-SSE2AVX-NEXT:    retl
2297 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_ashr_18:
2298 ; X64-SSE2ONLY:       # %bb.0:
2299 ; X64-SSE2ONLY-NEXT:    psrad $18, %xmm0
2300 ; X64-SSE2ONLY-NEXT:    retq
2302 ; X64-SSE2AVX-LABEL: test_128_i32_x_4_4294836224_mask_ashr_18:
2303 ; X64-SSE2AVX:       # %bb.0:
2304 ; X64-SSE2AVX-NEXT:    vpsrad $18, %xmm0, %xmm0
2305 ; X64-SSE2AVX-NEXT:    retq
2306   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
2307   %t1 = ashr <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18>
2308   ret <4 x i32> %t1
2311 ; shl
2313 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_1(<4 x i32> %a0) {
2314 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_1:
2315 ; X32-SSE2ONLY:       # %bb.0:
2316 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2317 ; X32-SSE2ONLY-NEXT:    paddd %xmm0, %xmm0
2318 ; X32-SSE2ONLY-NEXT:    retl
2320 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_shl_1:
2321 ; X32-SSE2AVX1:       # %bb.0:
2322 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2323 ; X32-SSE2AVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2324 ; X32-SSE2AVX1-NEXT:    retl
2326 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_shl_1:
2327 ; X32-SSE2AVX1AVX2:       # %bb.0:
2328 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
2329 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2330 ; X32-SSE2AVX1AVX2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2331 ; X32-SSE2AVX1AVX2-NEXT:    retl
2333 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_1:
2334 ; X64-SSE2ONLY:       # %bb.0:
2335 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2336 ; X64-SSE2ONLY-NEXT:    paddd %xmm0, %xmm0
2337 ; X64-SSE2ONLY-NEXT:    retq
2339 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_shl_1:
2340 ; X64-SSE2AVX1:       # %bb.0:
2341 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2342 ; X64-SSE2AVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2343 ; X64-SSE2AVX1-NEXT:    retq
2345 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_shl_1:
2346 ; X64-SSE2AVX1AVX2:       # %bb.0:
2347 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
2348 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2349 ; X64-SSE2AVX1AVX2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2350 ; X64-SSE2AVX1AVX2-NEXT:    retq
2351   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
2352   %t1 = shl <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
2353   ret <4 x i32> %t1
2355 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_16(<4 x i32> %a0) {
2356 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_16:
2357 ; X32-SSE2ONLY:       # %bb.0:
2358 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2359 ; X32-SSE2ONLY-NEXT:    pslld $16, %xmm0
2360 ; X32-SSE2ONLY-NEXT:    retl
2362 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_shl_16:
2363 ; X32-SSE2AVX1:       # %bb.0:
2364 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2365 ; X32-SSE2AVX1-NEXT:    vpslld $16, %xmm0, %xmm0
2366 ; X32-SSE2AVX1-NEXT:    retl
2368 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_shl_16:
2369 ; X32-SSE2AVX1AVX2:       # %bb.0:
2370 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
2371 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2372 ; X32-SSE2AVX1AVX2-NEXT:    vpslld $16, %xmm0, %xmm0
2373 ; X32-SSE2AVX1AVX2-NEXT:    retl
2375 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_16:
2376 ; X64-SSE2ONLY:       # %bb.0:
2377 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2378 ; X64-SSE2ONLY-NEXT:    pslld $16, %xmm0
2379 ; X64-SSE2ONLY-NEXT:    retq
2381 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_32767_mask_shl_16:
2382 ; X64-SSE2AVX1:       # %bb.0:
2383 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2384 ; X64-SSE2AVX1-NEXT:    vpslld $16, %xmm0, %xmm0
2385 ; X64-SSE2AVX1-NEXT:    retq
2387 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_32767_mask_shl_16:
2388 ; X64-SSE2AVX1AVX2:       # %bb.0:
2389 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [32767,32767,32767,32767]
2390 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2391 ; X64-SSE2AVX1AVX2-NEXT:    vpslld $16, %xmm0, %xmm0
2392 ; X64-SSE2AVX1AVX2-NEXT:    retq
2393   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
2394   %t1 = shl <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16>
2395   ret <4 x i32> %t1
2397 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_17(<4 x i32> %a0) {
2398 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_17:
2399 ; X32-SSE2ONLY:       # %bb.0:
2400 ; X32-SSE2ONLY-NEXT:    pslld $17, %xmm0
2401 ; X32-SSE2ONLY-NEXT:    retl
2403 ; X32-SSE2AVX-LABEL: test_128_i32_x_4_32767_mask_shl_17:
2404 ; X32-SSE2AVX:       # %bb.0:
2405 ; X32-SSE2AVX-NEXT:    vpslld $17, %xmm0, %xmm0
2406 ; X32-SSE2AVX-NEXT:    retl
2408 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_17:
2409 ; X64-SSE2ONLY:       # %bb.0:
2410 ; X64-SSE2ONLY-NEXT:    pslld $17, %xmm0
2411 ; X64-SSE2ONLY-NEXT:    retq
2413 ; X64-SSE2AVX-LABEL: test_128_i32_x_4_32767_mask_shl_17:
2414 ; X64-SSE2AVX:       # %bb.0:
2415 ; X64-SSE2AVX-NEXT:    vpslld $17, %xmm0, %xmm0
2416 ; X64-SSE2AVX-NEXT:    retq
2417   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
2418   %t1 = shl <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17>
2419   ret <4 x i32> %t1
2421 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_18(<4 x i32> %a0) {
2422 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_18:
2423 ; X32-SSE2ONLY:       # %bb.0:
2424 ; X32-SSE2ONLY-NEXT:    pslld $18, %xmm0
2425 ; X32-SSE2ONLY-NEXT:    retl
2427 ; X32-SSE2AVX-LABEL: test_128_i32_x_4_32767_mask_shl_18:
2428 ; X32-SSE2AVX:       # %bb.0:
2429 ; X32-SSE2AVX-NEXT:    vpslld $18, %xmm0, %xmm0
2430 ; X32-SSE2AVX-NEXT:    retl
2432 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_32767_mask_shl_18:
2433 ; X64-SSE2ONLY:       # %bb.0:
2434 ; X64-SSE2ONLY-NEXT:    pslld $18, %xmm0
2435 ; X64-SSE2ONLY-NEXT:    retq
2437 ; X64-SSE2AVX-LABEL: test_128_i32_x_4_32767_mask_shl_18:
2438 ; X64-SSE2AVX:       # %bb.0:
2439 ; X64-SSE2AVX-NEXT:    vpslld $18, %xmm0, %xmm0
2440 ; X64-SSE2AVX-NEXT:    retq
2441   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
2442   %t1 = shl <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18>
2443   ret <4 x i32> %t1
2446 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_7(<4 x i32> %a0) {
2447 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_7:
2448 ; X32-SSE2ONLY:       # %bb.0:
2449 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2450 ; X32-SSE2ONLY-NEXT:    pslld $7, %xmm0
2451 ; X32-SSE2ONLY-NEXT:    retl
2453 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_7:
2454 ; X32-SSE2AVX1:       # %bb.0:
2455 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2456 ; X32-SSE2AVX1-NEXT:    vpslld $7, %xmm0, %xmm0
2457 ; X32-SSE2AVX1-NEXT:    retl
2459 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_7:
2460 ; X32-SSE2AVX1AVX2:       # %bb.0:
2461 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2462 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2463 ; X32-SSE2AVX1AVX2-NEXT:    vpslld $7, %xmm0, %xmm0
2464 ; X32-SSE2AVX1AVX2-NEXT:    retl
2466 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_7:
2467 ; X64-SSE2ONLY:       # %bb.0:
2468 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2469 ; X64-SSE2ONLY-NEXT:    pslld $7, %xmm0
2470 ; X64-SSE2ONLY-NEXT:    retq
2472 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_7:
2473 ; X64-SSE2AVX1:       # %bb.0:
2474 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2475 ; X64-SSE2AVX1-NEXT:    vpslld $7, %xmm0, %xmm0
2476 ; X64-SSE2AVX1-NEXT:    retq
2478 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_7:
2479 ; X64-SSE2AVX1AVX2:       # %bb.0:
2480 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2481 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2482 ; X64-SSE2AVX1AVX2-NEXT:    vpslld $7, %xmm0, %xmm0
2483 ; X64-SSE2AVX1AVX2-NEXT:    retq
2484   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2485   %t1 = shl <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7>
2486   ret <4 x i32> %t1
2488 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_8(<4 x i32> %a0) {
2489 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_8:
2490 ; X32-SSE2ONLY:       # %bb.0:
2491 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2492 ; X32-SSE2ONLY-NEXT:    pslld $8, %xmm0
2493 ; X32-SSE2ONLY-NEXT:    retl
2495 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_8:
2496 ; X32-SSE2AVX1:       # %bb.0:
2497 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2498 ; X32-SSE2AVX1-NEXT:    vpslld $8, %xmm0, %xmm0
2499 ; X32-SSE2AVX1-NEXT:    retl
2501 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_8:
2502 ; X32-SSE2AVX1AVX2:       # %bb.0:
2503 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2504 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2505 ; X32-SSE2AVX1AVX2-NEXT:    vpslld $8, %xmm0, %xmm0
2506 ; X32-SSE2AVX1AVX2-NEXT:    retl
2508 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_8:
2509 ; X64-SSE2ONLY:       # %bb.0:
2510 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2511 ; X64-SSE2ONLY-NEXT:    pslld $8, %xmm0
2512 ; X64-SSE2ONLY-NEXT:    retq
2514 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_8:
2515 ; X64-SSE2AVX1:       # %bb.0:
2516 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2517 ; X64-SSE2AVX1-NEXT:    vpslld $8, %xmm0, %xmm0
2518 ; X64-SSE2AVX1-NEXT:    retq
2520 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_8:
2521 ; X64-SSE2AVX1AVX2:       # %bb.0:
2522 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2523 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2524 ; X64-SSE2AVX1AVX2-NEXT:    vpslld $8, %xmm0, %xmm0
2525 ; X64-SSE2AVX1AVX2-NEXT:    retq
2526   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2527   %t1 = shl <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8>
2528   ret <4 x i32> %t1
2530 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_9(<4 x i32> %a0) {
2531 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_9:
2532 ; X32-SSE2ONLY:       # %bb.0:
2533 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2534 ; X32-SSE2ONLY-NEXT:    pslld $9, %xmm0
2535 ; X32-SSE2ONLY-NEXT:    retl
2537 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_9:
2538 ; X32-SSE2AVX1:       # %bb.0:
2539 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2540 ; X32-SSE2AVX1-NEXT:    vpslld $9, %xmm0, %xmm0
2541 ; X32-SSE2AVX1-NEXT:    retl
2543 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_9:
2544 ; X32-SSE2AVX1AVX2:       # %bb.0:
2545 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2546 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2547 ; X32-SSE2AVX1AVX2-NEXT:    vpslld $9, %xmm0, %xmm0
2548 ; X32-SSE2AVX1AVX2-NEXT:    retl
2550 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_9:
2551 ; X64-SSE2ONLY:       # %bb.0:
2552 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2553 ; X64-SSE2ONLY-NEXT:    pslld $9, %xmm0
2554 ; X64-SSE2ONLY-NEXT:    retq
2556 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_9:
2557 ; X64-SSE2AVX1:       # %bb.0:
2558 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2559 ; X64-SSE2AVX1-NEXT:    vpslld $9, %xmm0, %xmm0
2560 ; X64-SSE2AVX1-NEXT:    retq
2562 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_9:
2563 ; X64-SSE2AVX1AVX2:       # %bb.0:
2564 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2565 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2566 ; X64-SSE2AVX1AVX2-NEXT:    vpslld $9, %xmm0, %xmm0
2567 ; X64-SSE2AVX1AVX2-NEXT:    retq
2568   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2569   %t1 = shl <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9>
2570   ret <4 x i32> %t1
2572 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_10(<4 x i32> %a0) {
2573 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_10:
2574 ; X32-SSE2ONLY:       # %bb.0:
2575 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2576 ; X32-SSE2ONLY-NEXT:    pslld $10, %xmm0
2577 ; X32-SSE2ONLY-NEXT:    retl
2579 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_10:
2580 ; X32-SSE2AVX1:       # %bb.0:
2581 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2582 ; X32-SSE2AVX1-NEXT:    vpslld $10, %xmm0, %xmm0
2583 ; X32-SSE2AVX1-NEXT:    retl
2585 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_10:
2586 ; X32-SSE2AVX1AVX2:       # %bb.0:
2587 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2588 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2589 ; X32-SSE2AVX1AVX2-NEXT:    vpslld $10, %xmm0, %xmm0
2590 ; X32-SSE2AVX1AVX2-NEXT:    retl
2592 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_8388352_mask_shl_10:
2593 ; X64-SSE2ONLY:       # %bb.0:
2594 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2595 ; X64-SSE2ONLY-NEXT:    pslld $10, %xmm0
2596 ; X64-SSE2ONLY-NEXT:    retq
2598 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_8388352_mask_shl_10:
2599 ; X64-SSE2AVX1:       # %bb.0:
2600 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2601 ; X64-SSE2AVX1-NEXT:    vpslld $10, %xmm0, %xmm0
2602 ; X64-SSE2AVX1-NEXT:    retq
2604 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_8388352_mask_shl_10:
2605 ; X64-SSE2AVX1AVX2:       # %bb.0:
2606 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8388352,8388352,8388352,8388352]
2607 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2608 ; X64-SSE2AVX1AVX2-NEXT:    vpslld $10, %xmm0, %xmm0
2609 ; X64-SSE2AVX1AVX2-NEXT:    retq
2610   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
2611   %t1 = shl <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10>
2612   ret <4 x i32> %t1
2615 define <4 x i32> @test_128_i32_x_4_4294836224_mask_shl_1(<4 x i32> %a0) {
2616 ; X32-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_shl_1:
2617 ; X32-SSE2ONLY:       # %bb.0:
2618 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2619 ; X32-SSE2ONLY-NEXT:    paddd %xmm0, %xmm0
2620 ; X32-SSE2ONLY-NEXT:    retl
2622 ; X32-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_shl_1:
2623 ; X32-SSE2AVX1:       # %bb.0:
2624 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2625 ; X32-SSE2AVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2626 ; X32-SSE2AVX1-NEXT:    retl
2628 ; X32-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_shl_1:
2629 ; X32-SSE2AVX1AVX2:       # %bb.0:
2630 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
2631 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2632 ; X32-SSE2AVX1AVX2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2633 ; X32-SSE2AVX1AVX2-NEXT:    retl
2635 ; X64-SSE2ONLY-LABEL: test_128_i32_x_4_4294836224_mask_shl_1:
2636 ; X64-SSE2ONLY:       # %bb.0:
2637 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2638 ; X64-SSE2ONLY-NEXT:    paddd %xmm0, %xmm0
2639 ; X64-SSE2ONLY-NEXT:    retq
2641 ; X64-SSE2AVX1-LABEL: test_128_i32_x_4_4294836224_mask_shl_1:
2642 ; X64-SSE2AVX1:       # %bb.0:
2643 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2644 ; X64-SSE2AVX1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2645 ; X64-SSE2AVX1-NEXT:    retq
2647 ; X64-SSE2AVX1AVX2-LABEL: test_128_i32_x_4_4294836224_mask_shl_1:
2648 ; X64-SSE2AVX1AVX2:       # %bb.0:
2649 ; X64-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294836224,4294836224,4294836224,4294836224]
2650 ; X64-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2651 ; X64-SSE2AVX1AVX2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0
2652 ; X64-SSE2AVX1AVX2-NEXT:    retq
2653   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
2654   %t1 = shl <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
2655   ret <4 x i32> %t1
2658 ;------------------------------------------------------------------------------;
2659 ; 128-bit vector; 64-bit elements = 2 elements
2660 ;------------------------------------------------------------------------------;
2662 ; lshr
2664 define <2 x i64> @test_128_i64_x_2_2147483647_mask_lshr_1(<2 x i64> %a0) {
2665 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_lshr_1:
2666 ; X32-SSE2ONLY:       # %bb.0:
2667 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2668 ; X32-SSE2ONLY-NEXT:    psrlq $1, %xmm0
2669 ; X32-SSE2ONLY-NEXT:    retl
2671 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_lshr_1:
2672 ; X32-SSE2AVX:       # %bb.0:
2673 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2674 ; X32-SSE2AVX-NEXT:    vpsrlq $1, %xmm0, %xmm0
2675 ; X32-SSE2AVX-NEXT:    retl
2677 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_lshr_1:
2678 ; X64-SSE2ONLY:       # %bb.0:
2679 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2680 ; X64-SSE2ONLY-NEXT:    psrlq $1, %xmm0
2681 ; X64-SSE2ONLY-NEXT:    retq
2683 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_lshr_1:
2684 ; X64-SSE2AVX:       # %bb.0:
2685 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2686 ; X64-SSE2AVX-NEXT:    vpsrlq $1, %xmm0, %xmm0
2687 ; X64-SSE2AVX-NEXT:    retq
2688   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
2689   %t1 = lshr <2 x i64> %t0, <i64 1, i64 1>
2690   ret <2 x i64> %t1
2693 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_15(<2 x i64> %a0) {
2694 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_15:
2695 ; X32-SSE2ONLY:       # %bb.0:
2696 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2697 ; X32-SSE2ONLY-NEXT:    psrlq $15, %xmm0
2698 ; X32-SSE2ONLY-NEXT:    retl
2700 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_15:
2701 ; X32-SSE2AVX:       # %bb.0:
2702 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2703 ; X32-SSE2AVX-NEXT:    vpsrlq $15, %xmm0, %xmm0
2704 ; X32-SSE2AVX-NEXT:    retl
2706 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_15:
2707 ; X64-SSE2ONLY:       # %bb.0:
2708 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2709 ; X64-SSE2ONLY-NEXT:    psrlq $15, %xmm0
2710 ; X64-SSE2ONLY-NEXT:    retq
2712 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_15:
2713 ; X64-SSE2AVX:       # %bb.0:
2714 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2715 ; X64-SSE2AVX-NEXT:    vpsrlq $15, %xmm0, %xmm0
2716 ; X64-SSE2AVX-NEXT:    retq
2717   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
2718   %t1 = lshr <2 x i64> %t0, <i64 15, i64 15>
2719   ret <2 x i64> %t1
2721 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_16(<2 x i64> %a0) {
2722 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_16:
2723 ; X32-SSE2ONLY:       # %bb.0:
2724 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2725 ; X32-SSE2ONLY-NEXT:    psrlq $16, %xmm0
2726 ; X32-SSE2ONLY-NEXT:    retl
2728 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_16:
2729 ; X32-SSE2AVX:       # %bb.0:
2730 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2731 ; X32-SSE2AVX-NEXT:    vpsrlq $16, %xmm0, %xmm0
2732 ; X32-SSE2AVX-NEXT:    retl
2734 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_16:
2735 ; X64-SSE2ONLY:       # %bb.0:
2736 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2737 ; X64-SSE2ONLY-NEXT:    psrlq $16, %xmm0
2738 ; X64-SSE2ONLY-NEXT:    retq
2740 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_16:
2741 ; X64-SSE2AVX:       # %bb.0:
2742 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2743 ; X64-SSE2AVX-NEXT:    vpsrlq $16, %xmm0, %xmm0
2744 ; X64-SSE2AVX-NEXT:    retq
2745   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
2746   %t1 = lshr <2 x i64> %t0, <i64 16, i64 16>
2747   ret <2 x i64> %t1
2749 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_17(<2 x i64> %a0) {
2750 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_17:
2751 ; X32-SSE2ONLY:       # %bb.0:
2752 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2753 ; X32-SSE2ONLY-NEXT:    psrlq $17, %xmm0
2754 ; X32-SSE2ONLY-NEXT:    retl
2756 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_17:
2757 ; X32-SSE2AVX:       # %bb.0:
2758 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2759 ; X32-SSE2AVX-NEXT:    vpsrlq $17, %xmm0, %xmm0
2760 ; X32-SSE2AVX-NEXT:    retl
2762 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_17:
2763 ; X64-SSE2ONLY:       # %bb.0:
2764 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2765 ; X64-SSE2ONLY-NEXT:    psrlq $17, %xmm0
2766 ; X64-SSE2ONLY-NEXT:    retq
2768 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_17:
2769 ; X64-SSE2AVX:       # %bb.0:
2770 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2771 ; X64-SSE2AVX-NEXT:    vpsrlq $17, %xmm0, %xmm0
2772 ; X64-SSE2AVX-NEXT:    retq
2773   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
2774   %t1 = lshr <2 x i64> %t0, <i64 17, i64 17>
2775   ret <2 x i64> %t1
2777 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_18(<2 x i64> %a0) {
2778 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_18:
2779 ; X32-SSE2ONLY:       # %bb.0:
2780 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2781 ; X32-SSE2ONLY-NEXT:    psrlq $18, %xmm0
2782 ; X32-SSE2ONLY-NEXT:    retl
2784 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_18:
2785 ; X32-SSE2AVX:       # %bb.0:
2786 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2787 ; X32-SSE2AVX-NEXT:    vpsrlq $18, %xmm0, %xmm0
2788 ; X32-SSE2AVX-NEXT:    retl
2790 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_18:
2791 ; X64-SSE2ONLY:       # %bb.0:
2792 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2793 ; X64-SSE2ONLY-NEXT:    psrlq $18, %xmm0
2794 ; X64-SSE2ONLY-NEXT:    retq
2796 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_18:
2797 ; X64-SSE2AVX:       # %bb.0:
2798 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2799 ; X64-SSE2AVX-NEXT:    vpsrlq $18, %xmm0, %xmm0
2800 ; X64-SSE2AVX-NEXT:    retq
2801   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
2802   %t1 = lshr <2 x i64> %t0, <i64 18, i64 18>
2803   ret <2 x i64> %t1
2806 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_1(<2 x i64> %a0) {
2807 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_1:
2808 ; X32-SSE2ONLY:       # %bb.0:
2809 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2810 ; X32-SSE2ONLY-NEXT:    psrlq $1, %xmm0
2811 ; X32-SSE2ONLY-NEXT:    retl
2813 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_1:
2814 ; X32-SSE2AVX:       # %bb.0:
2815 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2816 ; X32-SSE2AVX-NEXT:    vpsrlq $1, %xmm0, %xmm0
2817 ; X32-SSE2AVX-NEXT:    retl
2819 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_1:
2820 ; X64-SSE2ONLY:       # %bb.0:
2821 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2822 ; X64-SSE2ONLY-NEXT:    psrlq $1, %xmm0
2823 ; X64-SSE2ONLY-NEXT:    retq
2825 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_1:
2826 ; X64-SSE2AVX:       # %bb.0:
2827 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2828 ; X64-SSE2AVX-NEXT:    vpsrlq $1, %xmm0, %xmm0
2829 ; X64-SSE2AVX-NEXT:    retq
2830   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
2831   %t1 = lshr <2 x i64> %t0, <i64 1, i64 1>
2832   ret <2 x i64> %t1
2834 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_32(<2 x i64> %a0) {
2835 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_32:
2836 ; X32-SSE2ONLY:       # %bb.0:
2837 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2838 ; X32-SSE2ONLY-NEXT:    psrlq $32, %xmm0
2839 ; X32-SSE2ONLY-NEXT:    retl
2841 ; X32-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_32:
2842 ; X32-SSE2AVX1:       # %bb.0:
2843 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2844 ; X32-SSE2AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
2845 ; X32-SSE2AVX1-NEXT:    retl
2847 ; X32-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_32:
2848 ; X32-SSE2AVX1AVX2:       # %bb.0:
2849 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294967294,4294967294,4294967294,4294967294]
2850 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2851 ; X32-SSE2AVX1AVX2-NEXT:    vpsrlq $32, %xmm0, %xmm0
2852 ; X32-SSE2AVX1AVX2-NEXT:    retl
2854 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_32:
2855 ; X64-SSE2ONLY:       # %bb.0:
2856 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2857 ; X64-SSE2ONLY-NEXT:    psrlq $32, %xmm0
2858 ; X64-SSE2ONLY-NEXT:    retq
2860 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_32:
2861 ; X64-SSE2AVX:       # %bb.0:
2862 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2863 ; X64-SSE2AVX-NEXT:    vpsrlq $32, %xmm0, %xmm0
2864 ; X64-SSE2AVX-NEXT:    retq
2865   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
2866   %t1 = lshr <2 x i64> %t0, <i64 32, i64 32>
2867   ret <2 x i64> %t1
2869 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_33(<2 x i64> %a0) {
2870 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_33:
2871 ; X32-SSE2ONLY:       # %bb.0:
2872 ; X32-SSE2ONLY-NEXT:    psrlq $33, %xmm0
2873 ; X32-SSE2ONLY-NEXT:    retl
2875 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_33:
2876 ; X32-SSE2AVX:       # %bb.0:
2877 ; X32-SSE2AVX-NEXT:    vpsrlq $33, %xmm0, %xmm0
2878 ; X32-SSE2AVX-NEXT:    retl
2880 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_33:
2881 ; X64-SSE2ONLY:       # %bb.0:
2882 ; X64-SSE2ONLY-NEXT:    psrlq $33, %xmm0
2883 ; X64-SSE2ONLY-NEXT:    retq
2885 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_33:
2886 ; X64-SSE2AVX:       # %bb.0:
2887 ; X64-SSE2AVX-NEXT:    vpsrlq $33, %xmm0, %xmm0
2888 ; X64-SSE2AVX-NEXT:    retq
2889   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
2890   %t1 = lshr <2 x i64> %t0, <i64 33, i64 33>
2891   ret <2 x i64> %t1
2893 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_34(<2 x i64> %a0) {
2894 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_34:
2895 ; X32-SSE2ONLY:       # %bb.0:
2896 ; X32-SSE2ONLY-NEXT:    psrlq $34, %xmm0
2897 ; X32-SSE2ONLY-NEXT:    retl
2899 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_34:
2900 ; X32-SSE2AVX:       # %bb.0:
2901 ; X32-SSE2AVX-NEXT:    vpsrlq $34, %xmm0, %xmm0
2902 ; X32-SSE2AVX-NEXT:    retl
2904 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_34:
2905 ; X64-SSE2ONLY:       # %bb.0:
2906 ; X64-SSE2ONLY-NEXT:    psrlq $34, %xmm0
2907 ; X64-SSE2ONLY-NEXT:    retq
2909 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_34:
2910 ; X64-SSE2AVX:       # %bb.0:
2911 ; X64-SSE2AVX-NEXT:    vpsrlq $34, %xmm0, %xmm0
2912 ; X64-SSE2AVX-NEXT:    retq
2913   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
2914   %t1 = lshr <2 x i64> %t0, <i64 34, i64 34>
2915   ret <2 x i64> %t1
2918 ; ashr
2920 define <2 x i64> @test_128_i64_x_2_2147483647_mask_ashr_1(<2 x i64> %a0) {
2921 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_ashr_1:
2922 ; X32-SSE2ONLY:       # %bb.0:
2923 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2924 ; X32-SSE2ONLY-NEXT:    psrlq $1, %xmm0
2925 ; X32-SSE2ONLY-NEXT:    retl
2927 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_ashr_1:
2928 ; X32-SSE2AVX:       # %bb.0:
2929 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2930 ; X32-SSE2AVX-NEXT:    vpsrlq $1, %xmm0, %xmm0
2931 ; X32-SSE2AVX-NEXT:    retl
2933 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_ashr_1:
2934 ; X64-SSE2ONLY:       # %bb.0:
2935 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2936 ; X64-SSE2ONLY-NEXT:    psrlq $1, %xmm0
2937 ; X64-SSE2ONLY-NEXT:    retq
2939 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_ashr_1:
2940 ; X64-SSE2AVX:       # %bb.0:
2941 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2942 ; X64-SSE2AVX-NEXT:    vpsrlq $1, %xmm0, %xmm0
2943 ; X64-SSE2AVX-NEXT:    retq
2944   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
2945   %t1 = ashr <2 x i64> %t0, <i64 1, i64 1>
2946   ret <2 x i64> %t1
2949 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_15(<2 x i64> %a0) {
2950 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_15:
2951 ; X32-SSE2ONLY:       # %bb.0:
2952 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2953 ; X32-SSE2ONLY-NEXT:    psrlq $15, %xmm0
2954 ; X32-SSE2ONLY-NEXT:    retl
2956 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_15:
2957 ; X32-SSE2AVX:       # %bb.0:
2958 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2959 ; X32-SSE2AVX-NEXT:    vpsrlq $15, %xmm0, %xmm0
2960 ; X32-SSE2AVX-NEXT:    retl
2962 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_15:
2963 ; X64-SSE2ONLY:       # %bb.0:
2964 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2965 ; X64-SSE2ONLY-NEXT:    psrlq $15, %xmm0
2966 ; X64-SSE2ONLY-NEXT:    retq
2968 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_15:
2969 ; X64-SSE2AVX:       # %bb.0:
2970 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2971 ; X64-SSE2AVX-NEXT:    vpsrlq $15, %xmm0, %xmm0
2972 ; X64-SSE2AVX-NEXT:    retq
2973   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
2974   %t1 = ashr <2 x i64> %t0, <i64 15, i64 15>
2975   ret <2 x i64> %t1
2977 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_16(<2 x i64> %a0) {
2978 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_16:
2979 ; X32-SSE2ONLY:       # %bb.0:
2980 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
2981 ; X32-SSE2ONLY-NEXT:    psrlq $16, %xmm0
2982 ; X32-SSE2ONLY-NEXT:    retl
2984 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_16:
2985 ; X32-SSE2AVX:       # %bb.0:
2986 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
2987 ; X32-SSE2AVX-NEXT:    vpsrlq $16, %xmm0, %xmm0
2988 ; X32-SSE2AVX-NEXT:    retl
2990 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_16:
2991 ; X64-SSE2ONLY:       # %bb.0:
2992 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
2993 ; X64-SSE2ONLY-NEXT:    psrlq $16, %xmm0
2994 ; X64-SSE2ONLY-NEXT:    retq
2996 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_16:
2997 ; X64-SSE2AVX:       # %bb.0:
2998 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
2999 ; X64-SSE2AVX-NEXT:    vpsrlq $16, %xmm0, %xmm0
3000 ; X64-SSE2AVX-NEXT:    retq
3001   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
3002   %t1 = ashr <2 x i64> %t0, <i64 16, i64 16>
3003   ret <2 x i64> %t1
3005 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_17(<2 x i64> %a0) {
3006 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_17:
3007 ; X32-SSE2ONLY:       # %bb.0:
3008 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3009 ; X32-SSE2ONLY-NEXT:    psrlq $17, %xmm0
3010 ; X32-SSE2ONLY-NEXT:    retl
3012 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_17:
3013 ; X32-SSE2AVX:       # %bb.0:
3014 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3015 ; X32-SSE2AVX-NEXT:    vpsrlq $17, %xmm0, %xmm0
3016 ; X32-SSE2AVX-NEXT:    retl
3018 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_17:
3019 ; X64-SSE2ONLY:       # %bb.0:
3020 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3021 ; X64-SSE2ONLY-NEXT:    psrlq $17, %xmm0
3022 ; X64-SSE2ONLY-NEXT:    retq
3024 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_17:
3025 ; X64-SSE2AVX:       # %bb.0:
3026 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3027 ; X64-SSE2AVX-NEXT:    vpsrlq $17, %xmm0, %xmm0
3028 ; X64-SSE2AVX-NEXT:    retq
3029   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
3030   %t1 = ashr <2 x i64> %t0, <i64 17, i64 17>
3031   ret <2 x i64> %t1
3033 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_18(<2 x i64> %a0) {
3034 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_18:
3035 ; X32-SSE2ONLY:       # %bb.0:
3036 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3037 ; X32-SSE2ONLY-NEXT:    psrlq $18, %xmm0
3038 ; X32-SSE2ONLY-NEXT:    retl
3040 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_18:
3041 ; X32-SSE2AVX:       # %bb.0:
3042 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3043 ; X32-SSE2AVX-NEXT:    vpsrlq $18, %xmm0, %xmm0
3044 ; X32-SSE2AVX-NEXT:    retl
3046 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_18:
3047 ; X64-SSE2ONLY:       # %bb.0:
3048 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3049 ; X64-SSE2ONLY-NEXT:    psrlq $18, %xmm0
3050 ; X64-SSE2ONLY-NEXT:    retq
3052 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_18:
3053 ; X64-SSE2AVX:       # %bb.0:
3054 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3055 ; X64-SSE2AVX-NEXT:    vpsrlq $18, %xmm0, %xmm0
3056 ; X64-SSE2AVX-NEXT:    retq
3057   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
3058   %t1 = ashr <2 x i64> %t0, <i64 18, i64 18>
3059   ret <2 x i64> %t1
3062 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_1(<2 x i64> %a0) {
3063 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1:
3064 ; X32-SSE2ONLY:       # %bb.0:
3065 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3066 ; X32-SSE2ONLY-NEXT:    psrad $1, %xmm0
3067 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3068 ; X32-SSE2ONLY-NEXT:    retl
3070 ; X32-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1:
3071 ; X32-SSE2AVX1:       # %bb.0:
3072 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3073 ; X32-SSE2AVX1-NEXT:    vpsrad $1, %xmm0, %xmm0
3074 ; X32-SSE2AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3075 ; X32-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3],xmm1[4,5],xmm0[6,7]
3076 ; X32-SSE2AVX1-NEXT:    retl
3078 ; X32-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1:
3079 ; X32-SSE2AVX1AVX2:       # %bb.0:
3080 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4294967294,4294967294,4294967294,4294967294]
3081 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3082 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $1, %xmm0, %xmm0
3083 ; X32-SSE2AVX1AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3084 ; X32-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1],xmm1[2],xmm0[3]
3085 ; X32-SSE2AVX1AVX2-NEXT:    retl
3087 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1:
3088 ; X64-SSE2ONLY:       # %bb.0:
3089 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3090 ; X64-SSE2ONLY-NEXT:    psrad $1, %xmm0
3091 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3092 ; X64-SSE2ONLY-NEXT:    retq
3094 ; X64-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1:
3095 ; X64-SSE2AVX1:       # %bb.0:
3096 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3097 ; X64-SSE2AVX1-NEXT:    vpsrad $1, %xmm0, %xmm0
3098 ; X64-SSE2AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3099 ; X64-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3],xmm1[4,5],xmm0[6,7]
3100 ; X64-SSE2AVX1-NEXT:    retq
3102 ; X64-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1:
3103 ; X64-SSE2AVX1AVX2:       # %bb.0:
3104 ; X64-SSE2AVX1AVX2-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3105 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $1, %xmm0, %xmm0
3106 ; X64-SSE2AVX1AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
3107 ; X64-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1],xmm1[2],xmm0[3]
3108 ; X64-SSE2AVX1AVX2-NEXT:    retq
3109   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
3110   %t1 = ashr <2 x i64> %t0, <i64 1, i64 1>
3111   ret <2 x i64> %t1
3113 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_32(<2 x i64> %a0) {
3114 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
3115 ; X32-SSE2ONLY:       # %bb.0:
3116 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3117 ; X32-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,3,2,3]
3118 ; X32-SSE2ONLY-NEXT:    psrad $31, %xmm0
3119 ; X32-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
3120 ; X32-SSE2ONLY-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
3121 ; X32-SSE2ONLY-NEXT:    movdqa %xmm1, %xmm0
3122 ; X32-SSE2ONLY-NEXT:    retl
3124 ; X32-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
3125 ; X32-SSE2AVX1:       # %bb.0:
3126 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3127 ; X32-SSE2AVX1-NEXT:    vpsrad $31, %xmm0, %xmm1
3128 ; X32-SSE2AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3129 ; X32-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
3130 ; X32-SSE2AVX1-NEXT:    retl
3132 ; X32-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
3133 ; X32-SSE2AVX1AVX2:       # %bb.0:
3134 ; X32-SSE2AVX1AVX2-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3135 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $31, %xmm0, %xmm1
3136 ; X32-SSE2AVX1AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3137 ; X32-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
3138 ; X32-SSE2AVX1AVX2-NEXT:    retl
3140 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
3141 ; X64-SSE2ONLY:       # %bb.0:
3142 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3143 ; X64-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,3,2,3]
3144 ; X64-SSE2ONLY-NEXT:    psrad $31, %xmm0
3145 ; X64-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
3146 ; X64-SSE2ONLY-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
3147 ; X64-SSE2ONLY-NEXT:    movdqa %xmm1, %xmm0
3148 ; X64-SSE2ONLY-NEXT:    retq
3150 ; X64-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
3151 ; X64-SSE2AVX1:       # %bb.0:
3152 ; X64-SSE2AVX1-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3153 ; X64-SSE2AVX1-NEXT:    vpsrad $31, %xmm0, %xmm1
3154 ; X64-SSE2AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3155 ; X64-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
3156 ; X64-SSE2AVX1-NEXT:    retq
3158 ; X64-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
3159 ; X64-SSE2AVX1AVX2:       # %bb.0:
3160 ; X64-SSE2AVX1AVX2-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3161 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $31, %xmm0, %xmm1
3162 ; X64-SSE2AVX1AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3163 ; X64-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
3164 ; X64-SSE2AVX1AVX2-NEXT:    retq
3165   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
3166   %t1 = ashr <2 x i64> %t0, <i64 32, i64 32>
3167   ret <2 x i64> %t1
3169 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_33(<2 x i64> %a0) {
3170 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33:
3171 ; X32-SSE2ONLY:       # %bb.0:
3172 ; X32-SSE2ONLY-NEXT:    movdqa %xmm0, %xmm1
3173 ; X32-SSE2ONLY-NEXT:    psrad $31, %xmm1
3174 ; X32-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
3175 ; X32-SSE2ONLY-NEXT:    psrad $1, %xmm0
3176 ; X32-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
3177 ; X32-SSE2ONLY-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
3178 ; X32-SSE2ONLY-NEXT:    retl
3180 ; X32-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33:
3181 ; X32-SSE2AVX1:       # %bb.0:
3182 ; X32-SSE2AVX1-NEXT:    vpsrad $31, %xmm0, %xmm1
3183 ; X32-SSE2AVX1-NEXT:    vpsrad $1, %xmm0, %xmm0
3184 ; X32-SSE2AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3185 ; X32-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
3186 ; X32-SSE2AVX1-NEXT:    retl
3188 ; X32-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33:
3189 ; X32-SSE2AVX1AVX2:       # %bb.0:
3190 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $31, %xmm0, %xmm1
3191 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $1, %xmm0, %xmm0
3192 ; X32-SSE2AVX1AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3193 ; X32-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
3194 ; X32-SSE2AVX1AVX2-NEXT:    retl
3196 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33:
3197 ; X64-SSE2ONLY:       # %bb.0:
3198 ; X64-SSE2ONLY-NEXT:    movdqa %xmm0, %xmm1
3199 ; X64-SSE2ONLY-NEXT:    psrad $31, %xmm1
3200 ; X64-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
3201 ; X64-SSE2ONLY-NEXT:    psrad $1, %xmm0
3202 ; X64-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
3203 ; X64-SSE2ONLY-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
3204 ; X64-SSE2ONLY-NEXT:    retq
3206 ; X64-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33:
3207 ; X64-SSE2AVX1:       # %bb.0:
3208 ; X64-SSE2AVX1-NEXT:    vpsrad $31, %xmm0, %xmm1
3209 ; X64-SSE2AVX1-NEXT:    vpsrad $1, %xmm0, %xmm0
3210 ; X64-SSE2AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3211 ; X64-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
3212 ; X64-SSE2AVX1-NEXT:    retq
3214 ; X64-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33:
3215 ; X64-SSE2AVX1AVX2:       # %bb.0:
3216 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $31, %xmm0, %xmm1
3217 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $1, %xmm0, %xmm0
3218 ; X64-SSE2AVX1AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3219 ; X64-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
3220 ; X64-SSE2AVX1AVX2-NEXT:    retq
3221   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
3222   %t1 = ashr <2 x i64> %t0, <i64 33, i64 33>
3223   ret <2 x i64> %t1
3225 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_34(<2 x i64> %a0) {
3226 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34:
3227 ; X32-SSE2ONLY:       # %bb.0:
3228 ; X32-SSE2ONLY-NEXT:    movdqa %xmm0, %xmm1
3229 ; X32-SSE2ONLY-NEXT:    psrad $31, %xmm1
3230 ; X32-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
3231 ; X32-SSE2ONLY-NEXT:    psrad $2, %xmm0
3232 ; X32-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
3233 ; X32-SSE2ONLY-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
3234 ; X32-SSE2ONLY-NEXT:    retl
3236 ; X32-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34:
3237 ; X32-SSE2AVX1:       # %bb.0:
3238 ; X32-SSE2AVX1-NEXT:    vpsrad $31, %xmm0, %xmm1
3239 ; X32-SSE2AVX1-NEXT:    vpsrad $2, %xmm0, %xmm0
3240 ; X32-SSE2AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3241 ; X32-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
3242 ; X32-SSE2AVX1-NEXT:    retl
3244 ; X32-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34:
3245 ; X32-SSE2AVX1AVX2:       # %bb.0:
3246 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $31, %xmm0, %xmm1
3247 ; X32-SSE2AVX1AVX2-NEXT:    vpsrad $2, %xmm0, %xmm0
3248 ; X32-SSE2AVX1AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3249 ; X32-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
3250 ; X32-SSE2AVX1AVX2-NEXT:    retl
3252 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34:
3253 ; X64-SSE2ONLY:       # %bb.0:
3254 ; X64-SSE2ONLY-NEXT:    movdqa %xmm0, %xmm1
3255 ; X64-SSE2ONLY-NEXT:    psrad $31, %xmm1
3256 ; X64-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,3,2,3]
3257 ; X64-SSE2ONLY-NEXT:    psrad $2, %xmm0
3258 ; X64-SSE2ONLY-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,3,2,3]
3259 ; X64-SSE2ONLY-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
3260 ; X64-SSE2ONLY-NEXT:    retq
3262 ; X64-SSE2AVX1-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34:
3263 ; X64-SSE2AVX1:       # %bb.0:
3264 ; X64-SSE2AVX1-NEXT:    vpsrad $31, %xmm0, %xmm1
3265 ; X64-SSE2AVX1-NEXT:    vpsrad $2, %xmm0, %xmm0
3266 ; X64-SSE2AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3267 ; X64-SSE2AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
3268 ; X64-SSE2AVX1-NEXT:    retq
3270 ; X64-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34:
3271 ; X64-SSE2AVX1AVX2:       # %bb.0:
3272 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $31, %xmm0, %xmm1
3273 ; X64-SSE2AVX1AVX2-NEXT:    vpsrad $2, %xmm0, %xmm0
3274 ; X64-SSE2AVX1AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
3275 ; X64-SSE2AVX1AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
3276 ; X64-SSE2AVX1AVX2-NEXT:    retq
3277   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
3278   %t1 = ashr <2 x i64> %t0, <i64 34, i64 34>
3279   ret <2 x i64> %t1
3282 ; shl
3284 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_1(<2 x i64> %a0) {
3285 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_1:
3286 ; X32-SSE2ONLY:       # %bb.0:
3287 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3288 ; X32-SSE2ONLY-NEXT:    paddq %xmm0, %xmm0
3289 ; X32-SSE2ONLY-NEXT:    retl
3291 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_shl_1:
3292 ; X32-SSE2AVX:       # %bb.0:
3293 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3294 ; X32-SSE2AVX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0
3295 ; X32-SSE2AVX-NEXT:    retl
3297 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_1:
3298 ; X64-SSE2ONLY:       # %bb.0:
3299 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3300 ; X64-SSE2ONLY-NEXT:    paddq %xmm0, %xmm0
3301 ; X64-SSE2ONLY-NEXT:    retq
3303 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_shl_1:
3304 ; X64-SSE2AVX:       # %bb.0:
3305 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3306 ; X64-SSE2AVX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0
3307 ; X64-SSE2AVX-NEXT:    retq
3308   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
3309   %t1 = shl <2 x i64> %t0, <i64 1, i64 1>
3310   ret <2 x i64> %t1
3312 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_32(<2 x i64> %a0) {
3313 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_32:
3314 ; X32-SSE2ONLY:       # %bb.0:
3315 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3316 ; X32-SSE2ONLY-NEXT:    psllq $32, %xmm0
3317 ; X32-SSE2ONLY-NEXT:    retl
3319 ; X32-SSE2AVX1-LABEL: test_128_i64_x_2_2147483647_mask_shl_32:
3320 ; X32-SSE2AVX1:       # %bb.0:
3321 ; X32-SSE2AVX1-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3322 ; X32-SSE2AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
3323 ; X32-SSE2AVX1-NEXT:    retl
3325 ; X32-SSE2AVX1AVX2-LABEL: test_128_i64_x_2_2147483647_mask_shl_32:
3326 ; X32-SSE2AVX1AVX2:       # %bb.0:
3327 ; X32-SSE2AVX1AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2147483647,2147483647,2147483647,2147483647]
3328 ; X32-SSE2AVX1AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3329 ; X32-SSE2AVX1AVX2-NEXT:    vpsllq $32, %xmm0, %xmm0
3330 ; X32-SSE2AVX1AVX2-NEXT:    retl
3332 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_32:
3333 ; X64-SSE2ONLY:       # %bb.0:
3334 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3335 ; X64-SSE2ONLY-NEXT:    psllq $32, %xmm0
3336 ; X64-SSE2ONLY-NEXT:    retq
3338 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_shl_32:
3339 ; X64-SSE2AVX:       # %bb.0:
3340 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3341 ; X64-SSE2AVX-NEXT:    vpsllq $32, %xmm0, %xmm0
3342 ; X64-SSE2AVX-NEXT:    retq
3343   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
3344   %t1 = shl <2 x i64> %t0, <i64 32, i64 32>
3345   ret <2 x i64> %t1
3347 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_33(<2 x i64> %a0) {
3348 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_33:
3349 ; X32-SSE2ONLY:       # %bb.0:
3350 ; X32-SSE2ONLY-NEXT:    psllq $33, %xmm0
3351 ; X32-SSE2ONLY-NEXT:    retl
3353 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_shl_33:
3354 ; X32-SSE2AVX:       # %bb.0:
3355 ; X32-SSE2AVX-NEXT:    vpsllq $33, %xmm0, %xmm0
3356 ; X32-SSE2AVX-NEXT:    retl
3358 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_33:
3359 ; X64-SSE2ONLY:       # %bb.0:
3360 ; X64-SSE2ONLY-NEXT:    psllq $33, %xmm0
3361 ; X64-SSE2ONLY-NEXT:    retq
3363 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_shl_33:
3364 ; X64-SSE2AVX:       # %bb.0:
3365 ; X64-SSE2AVX-NEXT:    vpsllq $33, %xmm0, %xmm0
3366 ; X64-SSE2AVX-NEXT:    retq
3367   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
3368   %t1 = shl <2 x i64> %t0, <i64 33, i64 33>
3369   ret <2 x i64> %t1
3371 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_34(<2 x i64> %a0) {
3372 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_34:
3373 ; X32-SSE2ONLY:       # %bb.0:
3374 ; X32-SSE2ONLY-NEXT:    psllq $34, %xmm0
3375 ; X32-SSE2ONLY-NEXT:    retl
3377 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_shl_34:
3378 ; X32-SSE2AVX:       # %bb.0:
3379 ; X32-SSE2AVX-NEXT:    vpsllq $34, %xmm0, %xmm0
3380 ; X32-SSE2AVX-NEXT:    retl
3382 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_2147483647_mask_shl_34:
3383 ; X64-SSE2ONLY:       # %bb.0:
3384 ; X64-SSE2ONLY-NEXT:    psllq $34, %xmm0
3385 ; X64-SSE2ONLY-NEXT:    retq
3387 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_2147483647_mask_shl_34:
3388 ; X64-SSE2AVX:       # %bb.0:
3389 ; X64-SSE2AVX-NEXT:    vpsllq $34, %xmm0, %xmm0
3390 ; X64-SSE2AVX-NEXT:    retq
3391   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
3392   %t1 = shl <2 x i64> %t0, <i64 34, i64 34>
3393   ret <2 x i64> %t1
3396 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_15(<2 x i64> %a0) {
3397 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_15:
3398 ; X32-SSE2ONLY:       # %bb.0:
3399 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3400 ; X32-SSE2ONLY-NEXT:    psllq $15, %xmm0
3401 ; X32-SSE2ONLY-NEXT:    retl
3403 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_15:
3404 ; X32-SSE2AVX:       # %bb.0:
3405 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3406 ; X32-SSE2AVX-NEXT:    vpsllq $15, %xmm0, %xmm0
3407 ; X32-SSE2AVX-NEXT:    retl
3409 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_15:
3410 ; X64-SSE2ONLY:       # %bb.0:
3411 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3412 ; X64-SSE2ONLY-NEXT:    psllq $15, %xmm0
3413 ; X64-SSE2ONLY-NEXT:    retq
3415 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_15:
3416 ; X64-SSE2AVX:       # %bb.0:
3417 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3418 ; X64-SSE2AVX-NEXT:    vpsllq $15, %xmm0, %xmm0
3419 ; X64-SSE2AVX-NEXT:    retq
3420   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
3421   %t1 = shl <2 x i64> %t0, <i64 15, i64 15>
3422   ret <2 x i64> %t1
3424 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_16(<2 x i64> %a0) {
3425 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_16:
3426 ; X32-SSE2ONLY:       # %bb.0:
3427 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3428 ; X32-SSE2ONLY-NEXT:    psllq $16, %xmm0
3429 ; X32-SSE2ONLY-NEXT:    retl
3431 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_16:
3432 ; X32-SSE2AVX:       # %bb.0:
3433 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3434 ; X32-SSE2AVX-NEXT:    vpsllq $16, %xmm0, %xmm0
3435 ; X32-SSE2AVX-NEXT:    retl
3437 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_16:
3438 ; X64-SSE2ONLY:       # %bb.0:
3439 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3440 ; X64-SSE2ONLY-NEXT:    psllq $16, %xmm0
3441 ; X64-SSE2ONLY-NEXT:    retq
3443 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_16:
3444 ; X64-SSE2AVX:       # %bb.0:
3445 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3446 ; X64-SSE2AVX-NEXT:    vpsllq $16, %xmm0, %xmm0
3447 ; X64-SSE2AVX-NEXT:    retq
3448   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
3449   %t1 = shl <2 x i64> %t0, <i64 16, i64 16>
3450   ret <2 x i64> %t1
3452 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_17(<2 x i64> %a0) {
3453 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_17:
3454 ; X32-SSE2ONLY:       # %bb.0:
3455 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3456 ; X32-SSE2ONLY-NEXT:    psllq $17, %xmm0
3457 ; X32-SSE2ONLY-NEXT:    retl
3459 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_17:
3460 ; X32-SSE2AVX:       # %bb.0:
3461 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3462 ; X32-SSE2AVX-NEXT:    vpsllq $17, %xmm0, %xmm0
3463 ; X32-SSE2AVX-NEXT:    retl
3465 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_17:
3466 ; X64-SSE2ONLY:       # %bb.0:
3467 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3468 ; X64-SSE2ONLY-NEXT:    psllq $17, %xmm0
3469 ; X64-SSE2ONLY-NEXT:    retq
3471 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_17:
3472 ; X64-SSE2AVX:       # %bb.0:
3473 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3474 ; X64-SSE2AVX-NEXT:    vpsllq $17, %xmm0, %xmm0
3475 ; X64-SSE2AVX-NEXT:    retq
3476   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
3477   %t1 = shl <2 x i64> %t0, <i64 17, i64 17>
3478   ret <2 x i64> %t1
3480 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_18(<2 x i64> %a0) {
3481 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_18:
3482 ; X32-SSE2ONLY:       # %bb.0:
3483 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3484 ; X32-SSE2ONLY-NEXT:    psllq $18, %xmm0
3485 ; X32-SSE2ONLY-NEXT:    retl
3487 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_18:
3488 ; X32-SSE2AVX:       # %bb.0:
3489 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3490 ; X32-SSE2AVX-NEXT:    vpsllq $18, %xmm0, %xmm0
3491 ; X32-SSE2AVX-NEXT:    retl
3493 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_140737488289792_mask_shl_18:
3494 ; X64-SSE2ONLY:       # %bb.0:
3495 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3496 ; X64-SSE2ONLY-NEXT:    psllq $18, %xmm0
3497 ; X64-SSE2ONLY-NEXT:    retq
3499 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_140737488289792_mask_shl_18:
3500 ; X64-SSE2AVX:       # %bb.0:
3501 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3502 ; X64-SSE2AVX-NEXT:    vpsllq $18, %xmm0, %xmm0
3503 ; X64-SSE2AVX-NEXT:    retq
3504   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
3505   %t1 = shl <2 x i64> %t0, <i64 18, i64 18>
3506   ret <2 x i64> %t1
3509 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_shl_1(<2 x i64> %a0) {
3510 ; X32-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_shl_1:
3511 ; X32-SSE2ONLY:       # %bb.0:
3512 ; X32-SSE2ONLY-NEXT:    pand {{\.LCPI.*}}, %xmm0
3513 ; X32-SSE2ONLY-NEXT:    paddq %xmm0, %xmm0
3514 ; X32-SSE2ONLY-NEXT:    retl
3516 ; X32-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_shl_1:
3517 ; X32-SSE2AVX:       # %bb.0:
3518 ; X32-SSE2AVX-NEXT:    vpand {{\.LCPI.*}}, %xmm0, %xmm0
3519 ; X32-SSE2AVX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0
3520 ; X32-SSE2AVX-NEXT:    retl
3522 ; X64-SSE2ONLY-LABEL: test_128_i64_x_2_18446744065119617024_mask_shl_1:
3523 ; X64-SSE2ONLY:       # %bb.0:
3524 ; X64-SSE2ONLY-NEXT:    pand {{.*}}(%rip), %xmm0
3525 ; X64-SSE2ONLY-NEXT:    paddq %xmm0, %xmm0
3526 ; X64-SSE2ONLY-NEXT:    retq
3528 ; X64-SSE2AVX-LABEL: test_128_i64_x_2_18446744065119617024_mask_shl_1:
3529 ; X64-SSE2AVX:       # %bb.0:
3530 ; X64-SSE2AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
3531 ; X64-SSE2AVX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0
3532 ; X64-SSE2AVX-NEXT:    retq
3533   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
3534   %t1 = shl <2 x i64> %t0, <i64 1, i64 1>
3535   ret <2 x i64> %t1