[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / AArch64 / vector_splat-const-shift-of-constmasked.ll
blobd286c32d2712aaea5eefa83ae734c1bd58f19755
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
4 ; The mask is all-ones, potentially shifted.
6 ;------------------------------------------------------------------------------;
7 ; 128-bit vector; 8-bit elements = 16 elements
8 ;------------------------------------------------------------------------------;
10 ; lshr
12 define <16 x i8> @test_128_i8_x_16_7_mask_lshr_1(<16 x i8> %a0) {
13 ; CHECK-LABEL: test_128_i8_x_16_7_mask_lshr_1:
14 ; CHECK:       // %bb.0:
15 ; CHECK-NEXT:    movi v1.16b, #7
16 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
17 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #1
18 ; CHECK-NEXT:    ret
19   %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>
20   %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>
21   ret <16 x i8> %t1
24 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_1(<16 x i8> %a0) {
25 ; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_1:
26 ; CHECK:       // %bb.0:
27 ; CHECK-NEXT:    movi v1.16b, #28
28 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
29 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #1
30 ; CHECK-NEXT:    ret
31   %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>
32   %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>
33   ret <16 x i8> %t1
35 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_2(<16 x i8> %a0) {
36 ; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_2:
37 ; CHECK:       // %bb.0:
38 ; CHECK-NEXT:    movi v1.16b, #28
39 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
40 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #2
41 ; CHECK-NEXT:    ret
42   %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>
43   %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>
44   ret <16 x i8> %t1
46 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_3(<16 x i8> %a0) {
47 ; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_3:
48 ; CHECK:       // %bb.0:
49 ; CHECK-NEXT:    movi v1.16b, #28
50 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
51 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #3
52 ; CHECK-NEXT:    ret
53   %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>
54   %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>
55   ret <16 x i8> %t1
57 define <16 x i8> @test_128_i8_x_16_28_mask_lshr_4(<16 x i8> %a0) {
58 ; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_4:
59 ; CHECK:       // %bb.0:
60 ; CHECK-NEXT:    movi v1.16b, #28
61 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
62 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #4
63 ; CHECK-NEXT:    ret
64   %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>
65   %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>
66   ret <16 x i8> %t1
69 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_1(<16 x i8> %a0) {
70 ; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_1:
71 ; CHECK:       // %bb.0:
72 ; CHECK-NEXT:    movi v1.16b, #224
73 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
74 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #1
75 ; CHECK-NEXT:    ret
76   %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>
77   %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>
78   ret <16 x i8> %t1
80 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_4(<16 x i8> %a0) {
81 ; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_4:
82 ; CHECK:       // %bb.0:
83 ; CHECK-NEXT:    movi v1.16b, #224
84 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
85 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #4
86 ; CHECK-NEXT:    ret
87   %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>
88   %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>
89   ret <16 x i8> %t1
91 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_5(<16 x i8> %a0) {
92 ; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_5:
93 ; CHECK:       // %bb.0:
94 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #5
95 ; CHECK-NEXT:    ret
96   %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>
97   %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>
98   ret <16 x i8> %t1
100 define <16 x i8> @test_128_i8_x_16_224_mask_lshr_6(<16 x i8> %a0) {
101 ; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_6:
102 ; CHECK:       // %bb.0:
103 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #6
104 ; CHECK-NEXT:    ret
105   %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>
106   %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>
107   ret <16 x i8> %t1
110 ; ashr
112 define <16 x i8> @test_128_i8_x_16_7_mask_ashr_1(<16 x i8> %a0) {
113 ; CHECK-LABEL: test_128_i8_x_16_7_mask_ashr_1:
114 ; CHECK:       // %bb.0:
115 ; CHECK-NEXT:    movi v1.16b, #7
116 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
117 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #1
118 ; CHECK-NEXT:    ret
119   %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>
120   %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>
121   ret <16 x i8> %t1
124 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_1(<16 x i8> %a0) {
125 ; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_1:
126 ; CHECK:       // %bb.0:
127 ; CHECK-NEXT:    movi v1.16b, #28
128 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
129 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #1
130 ; CHECK-NEXT:    ret
131   %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>
132   %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>
133   ret <16 x i8> %t1
135 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_2(<16 x i8> %a0) {
136 ; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_2:
137 ; CHECK:       // %bb.0:
138 ; CHECK-NEXT:    movi v1.16b, #28
139 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
140 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #2
141 ; CHECK-NEXT:    ret
142   %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>
143   %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>
144   ret <16 x i8> %t1
146 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_3(<16 x i8> %a0) {
147 ; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_3:
148 ; CHECK:       // %bb.0:
149 ; CHECK-NEXT:    movi v1.16b, #28
150 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
151 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #3
152 ; CHECK-NEXT:    ret
153   %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>
154   %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>
155   ret <16 x i8> %t1
157 define <16 x i8> @test_128_i8_x_16_28_mask_ashr_4(<16 x i8> %a0) {
158 ; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_4:
159 ; CHECK:       // %bb.0:
160 ; CHECK-NEXT:    movi v1.16b, #28
161 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
162 ; CHECK-NEXT:    ushr v0.16b, v0.16b, #4
163 ; CHECK-NEXT:    ret
164   %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>
165   %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>
166   ret <16 x i8> %t1
169 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_1(<16 x i8> %a0) {
170 ; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_1:
171 ; CHECK:       // %bb.0:
172 ; CHECK-NEXT:    movi v1.16b, #224
173 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
174 ; CHECK-NEXT:    sshr v0.16b, v0.16b, #1
175 ; CHECK-NEXT:    ret
176   %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>
177   %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>
178   ret <16 x i8> %t1
180 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_4(<16 x i8> %a0) {
181 ; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_4:
182 ; CHECK:       // %bb.0:
183 ; CHECK-NEXT:    movi v1.16b, #224
184 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
185 ; CHECK-NEXT:    sshr v0.16b, v0.16b, #4
186 ; CHECK-NEXT:    ret
187   %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>
188   %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>
189   ret <16 x i8> %t1
191 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_5(<16 x i8> %a0) {
192 ; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_5:
193 ; CHECK:       // %bb.0:
194 ; CHECK-NEXT:    sshr v0.16b, v0.16b, #5
195 ; CHECK-NEXT:    ret
196   %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>
197   %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>
198   ret <16 x i8> %t1
200 define <16 x i8> @test_128_i8_x_16_224_mask_ashr_6(<16 x i8> %a0) {
201 ; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_6:
202 ; CHECK:       // %bb.0:
203 ; CHECK-NEXT:    sshr v0.16b, v0.16b, #6
204 ; CHECK-NEXT:    ret
205   %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>
206   %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>
207   ret <16 x i8> %t1
210 ; shl
212 define <16 x i8> @test_128_i8_x_16_7_mask_shl_1(<16 x i8> %a0) {
213 ; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_1:
214 ; CHECK:       // %bb.0:
215 ; CHECK-NEXT:    movi v1.16b, #7
216 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
217 ; CHECK-NEXT:    shl v0.16b, v0.16b, #1
218 ; CHECK-NEXT:    ret
219   %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>
220   %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>
221   ret <16 x i8> %t1
223 define <16 x i8> @test_128_i8_x_16_7_mask_shl_4(<16 x i8> %a0) {
224 ; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_4:
225 ; CHECK:       // %bb.0:
226 ; CHECK-NEXT:    movi v1.16b, #7
227 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
228 ; CHECK-NEXT:    shl v0.16b, v0.16b, #4
229 ; CHECK-NEXT:    ret
230   %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>
231   %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>
232   ret <16 x i8> %t1
234 define <16 x i8> @test_128_i8_x_16_7_mask_shl_5(<16 x i8> %a0) {
235 ; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_5:
236 ; CHECK:       // %bb.0:
237 ; CHECK-NEXT:    shl v0.16b, v0.16b, #5
238 ; CHECK-NEXT:    ret
239   %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>
240   %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>
241   ret <16 x i8> %t1
243 define <16 x i8> @test_128_i8_x_16_7_mask_shl_6(<16 x i8> %a0) {
244 ; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_6:
245 ; CHECK:       // %bb.0:
246 ; CHECK-NEXT:    shl v0.16b, v0.16b, #6
247 ; CHECK-NEXT:    ret
248   %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>
249   %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>
250   ret <16 x i8> %t1
253 define <16 x i8> @test_128_i8_x_16_28_mask_shl_1(<16 x i8> %a0) {
254 ; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_1:
255 ; CHECK:       // %bb.0:
256 ; CHECK-NEXT:    movi v1.16b, #28
257 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
258 ; CHECK-NEXT:    shl v0.16b, v0.16b, #1
259 ; CHECK-NEXT:    ret
260   %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>
261   %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>
262   ret <16 x i8> %t1
264 define <16 x i8> @test_128_i8_x_16_28_mask_shl_2(<16 x i8> %a0) {
265 ; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_2:
266 ; CHECK:       // %bb.0:
267 ; CHECK-NEXT:    movi v1.16b, #28
268 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
269 ; CHECK-NEXT:    shl v0.16b, v0.16b, #2
270 ; CHECK-NEXT:    ret
271   %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>
272   %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>
273   ret <16 x i8> %t1
275 define <16 x i8> @test_128_i8_x_16_28_mask_shl_3(<16 x i8> %a0) {
276 ; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_3:
277 ; CHECK:       // %bb.0:
278 ; CHECK-NEXT:    movi v1.16b, #28
279 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
280 ; CHECK-NEXT:    shl v0.16b, v0.16b, #3
281 ; CHECK-NEXT:    ret
282   %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>
283   %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>
284   ret <16 x i8> %t1
286 define <16 x i8> @test_128_i8_x_16_28_mask_shl_4(<16 x i8> %a0) {
287 ; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_4:
288 ; CHECK:       // %bb.0:
289 ; CHECK-NEXT:    movi v1.16b, #28
290 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
291 ; CHECK-NEXT:    shl v0.16b, v0.16b, #4
292 ; CHECK-NEXT:    ret
293   %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>
294   %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>
295   ret <16 x i8> %t1
298 define <16 x i8> @test_128_i8_x_16_224_mask_shl_1(<16 x i8> %a0) {
299 ; CHECK-LABEL: test_128_i8_x_16_224_mask_shl_1:
300 ; CHECK:       // %bb.0:
301 ; CHECK-NEXT:    movi v1.16b, #224
302 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
303 ; CHECK-NEXT:    shl v0.16b, v0.16b, #1
304 ; CHECK-NEXT:    ret
305   %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>
306   %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>
307   ret <16 x i8> %t1
310 ;------------------------------------------------------------------------------;
311 ; 128-bit vector; 16-bit elements = 8 elements
312 ;------------------------------------------------------------------------------;
314 ; lshr
316 define <8 x i16> @test_128_i16_x_8_127_mask_lshr_1(<8 x i16> %a0) {
317 ; CHECK-LABEL: test_128_i16_x_8_127_mask_lshr_1:
318 ; CHECK:       // %bb.0:
319 ; CHECK-NEXT:    movi v1.8h, #127
320 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
321 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #1
322 ; CHECK-NEXT:    ret
323   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
324   %t1 = lshr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
325   ret <8 x i16> %t1
328 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_3(<8 x i16> %a0) {
329 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_3:
330 ; CHECK:       // %bb.0:
331 ; CHECK-NEXT:    mov w8, #2032
332 ; CHECK-NEXT:    dup v1.8h, w8
333 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
334 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #3
335 ; CHECK-NEXT:    ret
336   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
337   %t1 = lshr <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
338   ret <8 x i16> %t1
340 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_4(<8 x i16> %a0) {
341 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_4:
342 ; CHECK:       // %bb.0:
343 ; CHECK-NEXT:    mov w8, #2032
344 ; CHECK-NEXT:    dup v1.8h, w8
345 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
346 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #4
347 ; CHECK-NEXT:    ret
348   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
349   %t1 = lshr <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
350   ret <8 x i16> %t1
352 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_5(<8 x i16> %a0) {
353 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_5:
354 ; CHECK:       // %bb.0:
355 ; CHECK-NEXT:    mov w8, #2032
356 ; CHECK-NEXT:    dup v1.8h, w8
357 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
358 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #5
359 ; CHECK-NEXT:    ret
360   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
361   %t1 = lshr <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
362   ret <8 x i16> %t1
364 define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_6(<8 x i16> %a0) {
365 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_6:
366 ; CHECK:       // %bb.0:
367 ; CHECK-NEXT:    mov w8, #2032
368 ; CHECK-NEXT:    dup v1.8h, w8
369 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
370 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #6
371 ; CHECK-NEXT:    ret
372   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
373   %t1 = lshr <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
374   ret <8 x i16> %t1
377 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_1(<8 x i16> %a0) {
378 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_1:
379 ; CHECK:       // %bb.0:
380 ; CHECK-NEXT:    movi v1.8h, #254, lsl #8
381 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
382 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #1
383 ; CHECK-NEXT:    ret
384   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
385   %t1 = lshr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
386   ret <8 x i16> %t1
388 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_8(<8 x i16> %a0) {
389 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_8:
390 ; CHECK:       // %bb.0:
391 ; CHECK-NEXT:    movi v1.8h, #254, lsl #8
392 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
393 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #8
394 ; CHECK-NEXT:    ret
395   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
396   %t1 = lshr <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
397   ret <8 x i16> %t1
399 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_9(<8 x i16> %a0) {
400 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_9:
401 ; CHECK:       // %bb.0:
402 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #9
403 ; CHECK-NEXT:    ret
404   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
405   %t1 = lshr <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
406   ret <8 x i16> %t1
408 define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_10(<8 x i16> %a0) {
409 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_10:
410 ; CHECK:       // %bb.0:
411 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #10
412 ; CHECK-NEXT:    ret
413   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
414   %t1 = lshr <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
415   ret <8 x i16> %t1
418 ; ashr
420 define <8 x i16> @test_128_i16_x_8_127_mask_ashr_1(<8 x i16> %a0) {
421 ; CHECK-LABEL: test_128_i16_x_8_127_mask_ashr_1:
422 ; CHECK:       // %bb.0:
423 ; CHECK-NEXT:    movi v1.8h, #127
424 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
425 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #1
426 ; CHECK-NEXT:    ret
427   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
428   %t1 = ashr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
429   ret <8 x i16> %t1
432 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_3(<8 x i16> %a0) {
433 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_3:
434 ; CHECK:       // %bb.0:
435 ; CHECK-NEXT:    mov w8, #2032
436 ; CHECK-NEXT:    dup v1.8h, w8
437 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
438 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #3
439 ; CHECK-NEXT:    ret
440   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
441   %t1 = ashr <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
442   ret <8 x i16> %t1
444 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_4(<8 x i16> %a0) {
445 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_4:
446 ; CHECK:       // %bb.0:
447 ; CHECK-NEXT:    mov w8, #2032
448 ; CHECK-NEXT:    dup v1.8h, w8
449 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
450 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #4
451 ; CHECK-NEXT:    ret
452   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
453   %t1 = ashr <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
454   ret <8 x i16> %t1
456 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_5(<8 x i16> %a0) {
457 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_5:
458 ; CHECK:       // %bb.0:
459 ; CHECK-NEXT:    mov w8, #2032
460 ; CHECK-NEXT:    dup v1.8h, w8
461 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
462 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #5
463 ; CHECK-NEXT:    ret
464   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
465   %t1 = ashr <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
466   ret <8 x i16> %t1
468 define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_6(<8 x i16> %a0) {
469 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_6:
470 ; CHECK:       // %bb.0:
471 ; CHECK-NEXT:    mov w8, #2032
472 ; CHECK-NEXT:    dup v1.8h, w8
473 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
474 ; CHECK-NEXT:    ushr v0.8h, v0.8h, #6
475 ; CHECK-NEXT:    ret
476   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
477   %t1 = ashr <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
478   ret <8 x i16> %t1
481 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_1(<8 x i16> %a0) {
482 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_1:
483 ; CHECK:       // %bb.0:
484 ; CHECK-NEXT:    movi v1.8h, #254, lsl #8
485 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
486 ; CHECK-NEXT:    sshr v0.8h, v0.8h, #1
487 ; CHECK-NEXT:    ret
488   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
489   %t1 = ashr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
490   ret <8 x i16> %t1
492 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_8(<8 x i16> %a0) {
493 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_8:
494 ; CHECK:       // %bb.0:
495 ; CHECK-NEXT:    movi v1.8h, #254, lsl #8
496 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
497 ; CHECK-NEXT:    sshr v0.8h, v0.8h, #8
498 ; CHECK-NEXT:    ret
499   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
500   %t1 = ashr <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
501   ret <8 x i16> %t1
503 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_9(<8 x i16> %a0) {
504 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_9:
505 ; CHECK:       // %bb.0:
506 ; CHECK-NEXT:    sshr v0.8h, v0.8h, #9
507 ; CHECK-NEXT:    ret
508   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
509   %t1 = ashr <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
510   ret <8 x i16> %t1
512 define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_10(<8 x i16> %a0) {
513 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_10:
514 ; CHECK:       // %bb.0:
515 ; CHECK-NEXT:    sshr v0.8h, v0.8h, #10
516 ; CHECK-NEXT:    ret
517   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
518   %t1 = ashr <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
519   ret <8 x i16> %t1
522 ; shl
524 define <8 x i16> @test_128_i16_x_8_127_mask_shl_1(<8 x i16> %a0) {
525 ; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_1:
526 ; CHECK:       // %bb.0:
527 ; CHECK-NEXT:    movi v1.8h, #127
528 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
529 ; CHECK-NEXT:    shl v0.8h, v0.8h, #1
530 ; CHECK-NEXT:    ret
531   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
532   %t1 = shl <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
533   ret <8 x i16> %t1
535 define <8 x i16> @test_128_i16_x_8_127_mask_shl_8(<8 x i16> %a0) {
536 ; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_8:
537 ; CHECK:       // %bb.0:
538 ; CHECK-NEXT:    movi v1.8h, #127
539 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
540 ; CHECK-NEXT:    shl v0.8h, v0.8h, #8
541 ; CHECK-NEXT:    ret
542   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
543   %t1 = shl <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
544   ret <8 x i16> %t1
546 define <8 x i16> @test_128_i16_x_8_127_mask_shl_9(<8 x i16> %a0) {
547 ; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_9:
548 ; CHECK:       // %bb.0:
549 ; CHECK-NEXT:    shl v0.8h, v0.8h, #9
550 ; CHECK-NEXT:    ret
551   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
552   %t1 = shl <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
553   ret <8 x i16> %t1
555 define <8 x i16> @test_128_i16_x_8_127_mask_shl_10(<8 x i16> %a0) {
556 ; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_10:
557 ; CHECK:       // %bb.0:
558 ; CHECK-NEXT:    shl v0.8h, v0.8h, #10
559 ; CHECK-NEXT:    ret
560   %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127>
561   %t1 = shl <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
562   ret <8 x i16> %t1
565 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_3(<8 x i16> %a0) {
566 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_3:
567 ; CHECK:       // %bb.0:
568 ; CHECK-NEXT:    mov w8, #2032
569 ; CHECK-NEXT:    dup v1.8h, w8
570 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
571 ; CHECK-NEXT:    shl v0.8h, v0.8h, #3
572 ; CHECK-NEXT:    ret
573   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
574   %t1 = shl <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
575   ret <8 x i16> %t1
577 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_4(<8 x i16> %a0) {
578 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_4:
579 ; CHECK:       // %bb.0:
580 ; CHECK-NEXT:    mov w8, #2032
581 ; CHECK-NEXT:    dup v1.8h, w8
582 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
583 ; CHECK-NEXT:    shl v0.8h, v0.8h, #4
584 ; CHECK-NEXT:    ret
585   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
586   %t1 = shl <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
587   ret <8 x i16> %t1
589 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_5(<8 x i16> %a0) {
590 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_5:
591 ; CHECK:       // %bb.0:
592 ; CHECK-NEXT:    mov w8, #2032
593 ; CHECK-NEXT:    dup v1.8h, w8
594 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
595 ; CHECK-NEXT:    shl v0.8h, v0.8h, #5
596 ; CHECK-NEXT:    ret
597   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
598   %t1 = shl <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
599   ret <8 x i16> %t1
601 define <8 x i16> @test_128_i16_x_8_2032_mask_shl_6(<8 x i16> %a0) {
602 ; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_6:
603 ; CHECK:       // %bb.0:
604 ; CHECK-NEXT:    mov w8, #2032
605 ; CHECK-NEXT:    dup v1.8h, w8
606 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
607 ; CHECK-NEXT:    shl v0.8h, v0.8h, #6
608 ; CHECK-NEXT:    ret
609   %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032>
610   %t1 = shl <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
611   ret <8 x i16> %t1
614 define <8 x i16> @test_128_i16_x_8_65024_mask_shl_1(<8 x i16> %a0) {
615 ; CHECK-LABEL: test_128_i16_x_8_65024_mask_shl_1:
616 ; CHECK:       // %bb.0:
617 ; CHECK-NEXT:    movi v1.8h, #254, lsl #8
618 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
619 ; CHECK-NEXT:    shl v0.8h, v0.8h, #1
620 ; CHECK-NEXT:    ret
621   %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024>
622   %t1 = shl <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
623   ret <8 x i16> %t1
626 ;------------------------------------------------------------------------------;
627 ; 128-bit vector; 32-bit elements = 4 elements
628 ;------------------------------------------------------------------------------;
630 ; lshr
632 define <4 x i32> @test_128_i32_x_4_32767_mask_lshr_1(<4 x i32> %a0) {
633 ; CHECK-LABEL: test_128_i32_x_4_32767_mask_lshr_1:
634 ; CHECK:       // %bb.0:
635 ; CHECK-NEXT:    movi v1.4s, #127, msl #8
636 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
637 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #1
638 ; CHECK-NEXT:    ret
639   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
640   %t1 = lshr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
641   ret <4 x i32> %t1
644 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_7(<4 x i32> %a0) {
645 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_7:
646 ; CHECK:       // %bb.0:
647 ; CHECK-NEXT:    mov w8, #8388352
648 ; CHECK-NEXT:    dup v1.4s, w8
649 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
650 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #7
651 ; CHECK-NEXT:    ret
652   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
653   %t1 = lshr <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7>
654   ret <4 x i32> %t1
656 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_8(<4 x i32> %a0) {
657 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_8:
658 ; CHECK:       // %bb.0:
659 ; CHECK-NEXT:    mov w8, #8388352
660 ; CHECK-NEXT:    dup v1.4s, w8
661 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
662 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #8
663 ; CHECK-NEXT:    ret
664   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
665   %t1 = lshr <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8>
666   ret <4 x i32> %t1
668 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_9(<4 x i32> %a0) {
669 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_9:
670 ; CHECK:       // %bb.0:
671 ; CHECK-NEXT:    mov w8, #8388352
672 ; CHECK-NEXT:    dup v1.4s, w8
673 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
674 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #9
675 ; CHECK-NEXT:    ret
676   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
677   %t1 = lshr <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9>
678   ret <4 x i32> %t1
680 define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_10(<4 x i32> %a0) {
681 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_10:
682 ; CHECK:       // %bb.0:
683 ; CHECK-NEXT:    mov w8, #8388352
684 ; CHECK-NEXT:    dup v1.4s, w8
685 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
686 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #10
687 ; CHECK-NEXT:    ret
688   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
689   %t1 = lshr <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10>
690   ret <4 x i32> %t1
693 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_1(<4 x i32> %a0) {
694 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1:
695 ; CHECK:       // %bb.0:
696 ; CHECK-NEXT:    mvni v1.4s, #1, msl #16
697 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
698 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #1
699 ; CHECK-NEXT:    ret
700   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
701   %t1 = lshr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
702   ret <4 x i32> %t1
704 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_16(<4 x i32> %a0) {
705 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16:
706 ; CHECK:       // %bb.0:
707 ; CHECK-NEXT:    mvni v1.4s, #1, msl #16
708 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
709 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #16
710 ; CHECK-NEXT:    ret
711   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
712   %t1 = lshr <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16>
713   ret <4 x i32> %t1
715 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_17(<4 x i32> %a0) {
716 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_17:
717 ; CHECK:       // %bb.0:
718 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #17
719 ; CHECK-NEXT:    ret
720   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
721   %t1 = lshr <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17>
722   ret <4 x i32> %t1
724 define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_18(<4 x i32> %a0) {
725 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_18:
726 ; CHECK:       // %bb.0:
727 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #18
728 ; CHECK-NEXT:    ret
729   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
730   %t1 = lshr <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18>
731   ret <4 x i32> %t1
734 ; ashr
736 define <4 x i32> @test_128_i32_x_4_32767_mask_ashr_1(<4 x i32> %a0) {
737 ; CHECK-LABEL: test_128_i32_x_4_32767_mask_ashr_1:
738 ; CHECK:       // %bb.0:
739 ; CHECK-NEXT:    movi v1.4s, #127, msl #8
740 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
741 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #1
742 ; CHECK-NEXT:    ret
743   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
744   %t1 = ashr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
745   ret <4 x i32> %t1
748 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_7(<4 x i32> %a0) {
749 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_7:
750 ; CHECK:       // %bb.0:
751 ; CHECK-NEXT:    mov w8, #8388352
752 ; CHECK-NEXT:    dup v1.4s, w8
753 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
754 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #7
755 ; CHECK-NEXT:    ret
756   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
757   %t1 = ashr <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7>
758   ret <4 x i32> %t1
760 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_8(<4 x i32> %a0) {
761 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_8:
762 ; CHECK:       // %bb.0:
763 ; CHECK-NEXT:    mov w8, #8388352
764 ; CHECK-NEXT:    dup v1.4s, w8
765 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
766 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #8
767 ; CHECK-NEXT:    ret
768   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
769   %t1 = ashr <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8>
770   ret <4 x i32> %t1
772 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_9(<4 x i32> %a0) {
773 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_9:
774 ; CHECK:       // %bb.0:
775 ; CHECK-NEXT:    mov w8, #8388352
776 ; CHECK-NEXT:    dup v1.4s, w8
777 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
778 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #9
779 ; CHECK-NEXT:    ret
780   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
781   %t1 = ashr <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9>
782   ret <4 x i32> %t1
784 define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_10(<4 x i32> %a0) {
785 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_10:
786 ; CHECK:       // %bb.0:
787 ; CHECK-NEXT:    mov w8, #8388352
788 ; CHECK-NEXT:    dup v1.4s, w8
789 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
790 ; CHECK-NEXT:    ushr v0.4s, v0.4s, #10
791 ; CHECK-NEXT:    ret
792   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
793   %t1 = ashr <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10>
794   ret <4 x i32> %t1
797 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_1(<4 x i32> %a0) {
798 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1:
799 ; CHECK:       // %bb.0:
800 ; CHECK-NEXT:    mvni v1.4s, #1, msl #16
801 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
802 ; CHECK-NEXT:    sshr v0.4s, v0.4s, #1
803 ; CHECK-NEXT:    ret
804   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
805   %t1 = ashr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
806   ret <4 x i32> %t1
808 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_16(<4 x i32> %a0) {
809 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16:
810 ; CHECK:       // %bb.0:
811 ; CHECK-NEXT:    mvni v1.4s, #1, msl #16
812 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
813 ; CHECK-NEXT:    sshr v0.4s, v0.4s, #16
814 ; CHECK-NEXT:    ret
815   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
816   %t1 = ashr <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16>
817   ret <4 x i32> %t1
819 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_17(<4 x i32> %a0) {
820 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_17:
821 ; CHECK:       // %bb.0:
822 ; CHECK-NEXT:    sshr v0.4s, v0.4s, #17
823 ; CHECK-NEXT:    ret
824   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
825   %t1 = ashr <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17>
826   ret <4 x i32> %t1
828 define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_18(<4 x i32> %a0) {
829 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_18:
830 ; CHECK:       // %bb.0:
831 ; CHECK-NEXT:    sshr v0.4s, v0.4s, #18
832 ; CHECK-NEXT:    ret
833   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
834   %t1 = ashr <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18>
835   ret <4 x i32> %t1
838 ; shl
840 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_1(<4 x i32> %a0) {
841 ; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_1:
842 ; CHECK:       // %bb.0:
843 ; CHECK-NEXT:    movi v1.4s, #127, msl #8
844 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
845 ; CHECK-NEXT:    shl v0.4s, v0.4s, #1
846 ; CHECK-NEXT:    ret
847   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
848   %t1 = shl <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
849   ret <4 x i32> %t1
851 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_16(<4 x i32> %a0) {
852 ; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_16:
853 ; CHECK:       // %bb.0:
854 ; CHECK-NEXT:    movi v1.4s, #127, msl #8
855 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
856 ; CHECK-NEXT:    shl v0.4s, v0.4s, #16
857 ; CHECK-NEXT:    ret
858   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
859   %t1 = shl <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16>
860   ret <4 x i32> %t1
862 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_17(<4 x i32> %a0) {
863 ; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_17:
864 ; CHECK:       // %bb.0:
865 ; CHECK-NEXT:    shl v0.4s, v0.4s, #17
866 ; CHECK-NEXT:    ret
867   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
868   %t1 = shl <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17>
869   ret <4 x i32> %t1
871 define <4 x i32> @test_128_i32_x_4_32767_mask_shl_18(<4 x i32> %a0) {
872 ; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_18:
873 ; CHECK:       // %bb.0:
874 ; CHECK-NEXT:    shl v0.4s, v0.4s, #18
875 ; CHECK-NEXT:    ret
876   %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767>
877   %t1 = shl <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18>
878   ret <4 x i32> %t1
881 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_7(<4 x i32> %a0) {
882 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_7:
883 ; CHECK:       // %bb.0:
884 ; CHECK-NEXT:    mov w8, #8388352
885 ; CHECK-NEXT:    dup v1.4s, w8
886 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
887 ; CHECK-NEXT:    shl v0.4s, v0.4s, #7
888 ; CHECK-NEXT:    ret
889   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
890   %t1 = shl <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7>
891   ret <4 x i32> %t1
893 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_8(<4 x i32> %a0) {
894 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_8:
895 ; CHECK:       // %bb.0:
896 ; CHECK-NEXT:    mov w8, #8388352
897 ; CHECK-NEXT:    dup v1.4s, w8
898 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
899 ; CHECK-NEXT:    shl v0.4s, v0.4s, #8
900 ; CHECK-NEXT:    ret
901   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
902   %t1 = shl <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8>
903   ret <4 x i32> %t1
905 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_9(<4 x i32> %a0) {
906 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_9:
907 ; CHECK:       // %bb.0:
908 ; CHECK-NEXT:    mov w8, #8388352
909 ; CHECK-NEXT:    dup v1.4s, w8
910 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
911 ; CHECK-NEXT:    shl v0.4s, v0.4s, #9
912 ; CHECK-NEXT:    ret
913   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
914   %t1 = shl <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9>
915   ret <4 x i32> %t1
917 define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_10(<4 x i32> %a0) {
918 ; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_10:
919 ; CHECK:       // %bb.0:
920 ; CHECK-NEXT:    mov w8, #8388352
921 ; CHECK-NEXT:    dup v1.4s, w8
922 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
923 ; CHECK-NEXT:    shl v0.4s, v0.4s, #10
924 ; CHECK-NEXT:    ret
925   %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352>
926   %t1 = shl <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10>
927   ret <4 x i32> %t1
930 define <4 x i32> @test_128_i32_x_4_4294836224_mask_shl_1(<4 x i32> %a0) {
931 ; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_shl_1:
932 ; CHECK:       // %bb.0:
933 ; CHECK-NEXT:    mvni v1.4s, #1, msl #16
934 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
935 ; CHECK-NEXT:    shl v0.4s, v0.4s, #1
936 ; CHECK-NEXT:    ret
937   %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224>
938   %t1 = shl <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
939   ret <4 x i32> %t1
942 ;------------------------------------------------------------------------------;
943 ; 128-bit vector; 64-bit elements = 2 elements
944 ;------------------------------------------------------------------------------;
946 ; lshr
948 define <2 x i64> @test_128_i64_x_2_2147483647_mask_lshr_1(<2 x i64> %a0) {
949 ; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_lshr_1:
950 ; CHECK:       // %bb.0:
951 ; CHECK-NEXT:    mov w8, #2147483647
952 ; CHECK-NEXT:    dup v1.2d, x8
953 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
954 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #1
955 ; CHECK-NEXT:    ret
956   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
957   %t1 = lshr <2 x i64> %t0, <i64 1, i64 1>
958   ret <2 x i64> %t1
961 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_15(<2 x i64> %a0) {
962 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_15:
963 ; CHECK:       // %bb.0:
964 ; CHECK-NEXT:    mov x8, #140737488289792
965 ; CHECK-NEXT:    dup v1.2d, x8
966 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
967 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #15
968 ; CHECK-NEXT:    ret
969   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
970   %t1 = lshr <2 x i64> %t0, <i64 15, i64 15>
971   ret <2 x i64> %t1
973 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_16(<2 x i64> %a0) {
974 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_16:
975 ; CHECK:       // %bb.0:
976 ; CHECK-NEXT:    mov x8, #140737488289792
977 ; CHECK-NEXT:    dup v1.2d, x8
978 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
979 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #16
980 ; CHECK-NEXT:    ret
981   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
982   %t1 = lshr <2 x i64> %t0, <i64 16, i64 16>
983   ret <2 x i64> %t1
985 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_17(<2 x i64> %a0) {
986 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_17:
987 ; CHECK:       // %bb.0:
988 ; CHECK-NEXT:    mov x8, #140737488289792
989 ; CHECK-NEXT:    dup v1.2d, x8
990 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
991 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #17
992 ; CHECK-NEXT:    ret
993   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
994   %t1 = lshr <2 x i64> %t0, <i64 17, i64 17>
995   ret <2 x i64> %t1
997 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_18(<2 x i64> %a0) {
998 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_18:
999 ; CHECK:       // %bb.0:
1000 ; CHECK-NEXT:    mov x8, #140737488289792
1001 ; CHECK-NEXT:    dup v1.2d, x8
1002 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1003 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #18
1004 ; CHECK-NEXT:    ret
1005   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1006   %t1 = lshr <2 x i64> %t0, <i64 18, i64 18>
1007   ret <2 x i64> %t1
1010 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_1(<2 x i64> %a0) {
1011 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_1:
1012 ; CHECK:       // %bb.0:
1013 ; CHECK-NEXT:    mov x8, #-8589934592
1014 ; CHECK-NEXT:    dup v1.2d, x8
1015 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1016 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #1
1017 ; CHECK-NEXT:    ret
1018   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1019   %t1 = lshr <2 x i64> %t0, <i64 1, i64 1>
1020   ret <2 x i64> %t1
1022 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_32(<2 x i64> %a0) {
1023 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_32:
1024 ; CHECK:       // %bb.0:
1025 ; CHECK-NEXT:    mov x8, #-8589934592
1026 ; CHECK-NEXT:    dup v1.2d, x8
1027 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1028 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #32
1029 ; CHECK-NEXT:    ret
1030   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1031   %t1 = lshr <2 x i64> %t0, <i64 32, i64 32>
1032   ret <2 x i64> %t1
1034 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_33(<2 x i64> %a0) {
1035 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_33:
1036 ; CHECK:       // %bb.0:
1037 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #33
1038 ; CHECK-NEXT:    ret
1039   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1040   %t1 = lshr <2 x i64> %t0, <i64 33, i64 33>
1041   ret <2 x i64> %t1
1043 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_34(<2 x i64> %a0) {
1044 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_34:
1045 ; CHECK:       // %bb.0:
1046 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #34
1047 ; CHECK-NEXT:    ret
1048   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1049   %t1 = lshr <2 x i64> %t0, <i64 34, i64 34>
1050   ret <2 x i64> %t1
1053 ; ashr
1055 define <2 x i64> @test_128_i64_x_2_2147483647_mask_ashr_1(<2 x i64> %a0) {
1056 ; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_ashr_1:
1057 ; CHECK:       // %bb.0:
1058 ; CHECK-NEXT:    mov w8, #2147483647
1059 ; CHECK-NEXT:    dup v1.2d, x8
1060 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1061 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #1
1062 ; CHECK-NEXT:    ret
1063   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
1064   %t1 = ashr <2 x i64> %t0, <i64 1, i64 1>
1065   ret <2 x i64> %t1
1068 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_15(<2 x i64> %a0) {
1069 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_15:
1070 ; CHECK:       // %bb.0:
1071 ; CHECK-NEXT:    mov x8, #140737488289792
1072 ; CHECK-NEXT:    dup v1.2d, x8
1073 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1074 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #15
1075 ; CHECK-NEXT:    ret
1076   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1077   %t1 = ashr <2 x i64> %t0, <i64 15, i64 15>
1078   ret <2 x i64> %t1
1080 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_16(<2 x i64> %a0) {
1081 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_16:
1082 ; CHECK:       // %bb.0:
1083 ; CHECK-NEXT:    mov x8, #140737488289792
1084 ; CHECK-NEXT:    dup v1.2d, x8
1085 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1086 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #16
1087 ; CHECK-NEXT:    ret
1088   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1089   %t1 = ashr <2 x i64> %t0, <i64 16, i64 16>
1090   ret <2 x i64> %t1
1092 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_17(<2 x i64> %a0) {
1093 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_17:
1094 ; CHECK:       // %bb.0:
1095 ; CHECK-NEXT:    mov x8, #140737488289792
1096 ; CHECK-NEXT:    dup v1.2d, x8
1097 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1098 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #17
1099 ; CHECK-NEXT:    ret
1100   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1101   %t1 = ashr <2 x i64> %t0, <i64 17, i64 17>
1102   ret <2 x i64> %t1
1104 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_18(<2 x i64> %a0) {
1105 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_18:
1106 ; CHECK:       // %bb.0:
1107 ; CHECK-NEXT:    mov x8, #140737488289792
1108 ; CHECK-NEXT:    dup v1.2d, x8
1109 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1110 ; CHECK-NEXT:    ushr v0.2d, v0.2d, #18
1111 ; CHECK-NEXT:    ret
1112   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1113   %t1 = ashr <2 x i64> %t0, <i64 18, i64 18>
1114   ret <2 x i64> %t1
1117 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_1(<2 x i64> %a0) {
1118 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1:
1119 ; CHECK:       // %bb.0:
1120 ; CHECK-NEXT:    mov x8, #-8589934592
1121 ; CHECK-NEXT:    dup v1.2d, x8
1122 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1123 ; CHECK-NEXT:    sshr v0.2d, v0.2d, #1
1124 ; CHECK-NEXT:    ret
1125   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1126   %t1 = ashr <2 x i64> %t0, <i64 1, i64 1>
1127   ret <2 x i64> %t1
1129 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_32(<2 x i64> %a0) {
1130 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32:
1131 ; CHECK:       // %bb.0:
1132 ; CHECK-NEXT:    mov x8, #-8589934592
1133 ; CHECK-NEXT:    dup v1.2d, x8
1134 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1135 ; CHECK-NEXT:    sshr v0.2d, v0.2d, #32
1136 ; CHECK-NEXT:    ret
1137   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1138   %t1 = ashr <2 x i64> %t0, <i64 32, i64 32>
1139   ret <2 x i64> %t1
1141 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_33(<2 x i64> %a0) {
1142 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33:
1143 ; CHECK:       // %bb.0:
1144 ; CHECK-NEXT:    sshr v0.2d, v0.2d, #33
1145 ; CHECK-NEXT:    ret
1146   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1147   %t1 = ashr <2 x i64> %t0, <i64 33, i64 33>
1148   ret <2 x i64> %t1
1150 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_34(<2 x i64> %a0) {
1151 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34:
1152 ; CHECK:       // %bb.0:
1153 ; CHECK-NEXT:    sshr v0.2d, v0.2d, #34
1154 ; CHECK-NEXT:    ret
1155   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1156   %t1 = ashr <2 x i64> %t0, <i64 34, i64 34>
1157   ret <2 x i64> %t1
1160 ; shl
1162 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_1(<2 x i64> %a0) {
1163 ; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_1:
1164 ; CHECK:       // %bb.0:
1165 ; CHECK-NEXT:    mov w8, #2147483647
1166 ; CHECK-NEXT:    dup v1.2d, x8
1167 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1168 ; CHECK-NEXT:    shl v0.2d, v0.2d, #1
1169 ; CHECK-NEXT:    ret
1170   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
1171   %t1 = shl <2 x i64> %t0, <i64 1, i64 1>
1172   ret <2 x i64> %t1
1174 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_32(<2 x i64> %a0) {
1175 ; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_32:
1176 ; CHECK:       // %bb.0:
1177 ; CHECK-NEXT:    mov w8, #2147483647
1178 ; CHECK-NEXT:    dup v1.2d, x8
1179 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1180 ; CHECK-NEXT:    shl v0.2d, v0.2d, #32
1181 ; CHECK-NEXT:    ret
1182   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
1183   %t1 = shl <2 x i64> %t0, <i64 32, i64 32>
1184   ret <2 x i64> %t1
1186 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_33(<2 x i64> %a0) {
1187 ; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_33:
1188 ; CHECK:       // %bb.0:
1189 ; CHECK-NEXT:    shl v0.2d, v0.2d, #33
1190 ; CHECK-NEXT:    ret
1191   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
1192   %t1 = shl <2 x i64> %t0, <i64 33, i64 33>
1193   ret <2 x i64> %t1
1195 define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_34(<2 x i64> %a0) {
1196 ; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_34:
1197 ; CHECK:       // %bb.0:
1198 ; CHECK-NEXT:    shl v0.2d, v0.2d, #34
1199 ; CHECK-NEXT:    ret
1200   %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647>
1201   %t1 = shl <2 x i64> %t0, <i64 34, i64 34>
1202   ret <2 x i64> %t1
1205 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_15(<2 x i64> %a0) {
1206 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_15:
1207 ; CHECK:       // %bb.0:
1208 ; CHECK-NEXT:    mov x8, #140737488289792
1209 ; CHECK-NEXT:    dup v1.2d, x8
1210 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1211 ; CHECK-NEXT:    shl v0.2d, v0.2d, #15
1212 ; CHECK-NEXT:    ret
1213   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1214   %t1 = shl <2 x i64> %t0, <i64 15, i64 15>
1215   ret <2 x i64> %t1
1217 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_16(<2 x i64> %a0) {
1218 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_16:
1219 ; CHECK:       // %bb.0:
1220 ; CHECK-NEXT:    mov x8, #140737488289792
1221 ; CHECK-NEXT:    dup v1.2d, x8
1222 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1223 ; CHECK-NEXT:    shl v0.2d, v0.2d, #16
1224 ; CHECK-NEXT:    ret
1225   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1226   %t1 = shl <2 x i64> %t0, <i64 16, i64 16>
1227   ret <2 x i64> %t1
1229 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_17(<2 x i64> %a0) {
1230 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_17:
1231 ; CHECK:       // %bb.0:
1232 ; CHECK-NEXT:    mov x8, #140737488289792
1233 ; CHECK-NEXT:    dup v1.2d, x8
1234 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1235 ; CHECK-NEXT:    shl v0.2d, v0.2d, #17
1236 ; CHECK-NEXT:    ret
1237   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1238   %t1 = shl <2 x i64> %t0, <i64 17, i64 17>
1239   ret <2 x i64> %t1
1241 define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_18(<2 x i64> %a0) {
1242 ; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_18:
1243 ; CHECK:       // %bb.0:
1244 ; CHECK-NEXT:    mov x8, #140737488289792
1245 ; CHECK-NEXT:    dup v1.2d, x8
1246 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1247 ; CHECK-NEXT:    shl v0.2d, v0.2d, #18
1248 ; CHECK-NEXT:    ret
1249   %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792>
1250   %t1 = shl <2 x i64> %t0, <i64 18, i64 18>
1251   ret <2 x i64> %t1
1254 define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_shl_1(<2 x i64> %a0) {
1255 ; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_shl_1:
1256 ; CHECK:       // %bb.0:
1257 ; CHECK-NEXT:    mov x8, #-8589934592
1258 ; CHECK-NEXT:    dup v1.2d, x8
1259 ; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
1260 ; CHECK-NEXT:    shl v0.2d, v0.2d, #1
1261 ; CHECK-NEXT:    ret
1262   %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024>
1263   %t1 = shl <2 x i64> %t0, <i64 1, i64 1>
1264   ret <2 x i64> %t1