xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-neon-simd-shift.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vshr_n_s8(<8 x i8> %a) {
4*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshr_n_s8
5*9880d681SAndroid Build Coastguard Worker; CHECK: sshr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #3
6*9880d681SAndroid Build Coastguard Worker  %vshr_n = ashr <8 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
7*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vshr_n
8*9880d681SAndroid Build Coastguard Worker}
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vshr_n_s16(<4 x i16> %a) {
11*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshr_n_s16
12*9880d681SAndroid Build Coastguard Worker; CHECK: sshr {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #3
13*9880d681SAndroid Build Coastguard Worker  %vshr_n = ashr <4 x i16> %a, <i16 3, i16 3, i16 3, i16 3>
14*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vshr_n
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vshr_n_s32(<2 x i32> %a) {
18*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshr_n_s32
19*9880d681SAndroid Build Coastguard Worker; CHECK: sshr {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #3
20*9880d681SAndroid Build Coastguard Worker  %vshr_n = ashr <2 x i32> %a, <i32 3, i32 3>
21*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vshr_n
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vshrq_n_s8(<16 x i8> %a) {
25*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_s8
26*9880d681SAndroid Build Coastguard Worker; CHECK: sshr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #3
27*9880d681SAndroid Build Coastguard Worker  %vshr_n = ashr <16 x i8> %a, <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>
28*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vshr_n
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vshrq_n_s16(<8 x i16> %a) {
32*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_s16
33*9880d681SAndroid Build Coastguard Worker; CHECK: sshr {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #3
34*9880d681SAndroid Build Coastguard Worker  %vshr_n = ashr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
35*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vshr_n
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vshrq_n_s32(<4 x i32> %a) {
39*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_s32
40*9880d681SAndroid Build Coastguard Worker; CHECK: sshr {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #3
41*9880d681SAndroid Build Coastguard Worker  %vshr_n = ashr <4 x i32> %a, <i32 3, i32 3, i32 3, i32 3>
42*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vshr_n
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vshrq_n_s64(<2 x i64> %a) {
46*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_s64
47*9880d681SAndroid Build Coastguard Worker; CHECK: sshr {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #3
48*9880d681SAndroid Build Coastguard Worker  %vshr_n = ashr <2 x i64> %a, <i64 3, i64 3>
49*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vshr_n
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vshr_n_u8(<8 x i8> %a) {
53*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshr_n_u8
54*9880d681SAndroid Build Coastguard Worker; CHECK: ushr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #3
55*9880d681SAndroid Build Coastguard Worker  %vshr_n = lshr <8 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
56*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vshr_n
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vshr_n_u16(<4 x i16> %a) {
60*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshr_n_u16
61*9880d681SAndroid Build Coastguard Worker; CHECK: ushr {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #3
62*9880d681SAndroid Build Coastguard Worker  %vshr_n = lshr <4 x i16> %a, <i16 3, i16 3, i16 3, i16 3>
63*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vshr_n
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vshr_n_u32(<2 x i32> %a) {
67*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshr_n_u32
68*9880d681SAndroid Build Coastguard Worker; CHECK: ushr {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #3
69*9880d681SAndroid Build Coastguard Worker  %vshr_n = lshr <2 x i32> %a, <i32 3, i32 3>
70*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vshr_n
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vshrq_n_u8(<16 x i8> %a) {
74*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_u8
75*9880d681SAndroid Build Coastguard Worker; CHECK: ushr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #3
76*9880d681SAndroid Build Coastguard Worker  %vshr_n = lshr <16 x i8> %a, <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>
77*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %vshr_n
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vshrq_n_u16(<8 x i16> %a) {
81*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_u16
82*9880d681SAndroid Build Coastguard Worker; CHECK: ushr {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #3
83*9880d681SAndroid Build Coastguard Worker  %vshr_n = lshr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
84*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %vshr_n
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vshrq_n_u32(<4 x i32> %a) {
88*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_u32
89*9880d681SAndroid Build Coastguard Worker; CHECK: ushr {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #3
90*9880d681SAndroid Build Coastguard Worker  %vshr_n = lshr <4 x i32> %a, <i32 3, i32 3, i32 3, i32 3>
91*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vshr_n
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vshrq_n_u64(<2 x i64> %a) {
95*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrq_n_u64
96*9880d681SAndroid Build Coastguard Worker; CHECK: ushr {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #3
97*9880d681SAndroid Build Coastguard Worker  %vshr_n = lshr <2 x i64> %a, <i64 3, i64 3>
98*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vshr_n
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vsra_n_s8(<8 x i8> %a, <8 x i8> %b) {
102*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsra_n_s8
103*9880d681SAndroid Build Coastguard Worker; CHECK: ssra {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #3
104*9880d681SAndroid Build Coastguard Worker  %vsra_n = ashr <8 x i8> %b, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
105*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i8> %vsra_n, %a
106*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %1
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vsra_n_s16(<4 x i16> %a, <4 x i16> %b) {
110*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsra_n_s16
111*9880d681SAndroid Build Coastguard Worker; CHECK: ssra {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #3
112*9880d681SAndroid Build Coastguard Worker  %vsra_n = ashr <4 x i16> %b, <i16 3, i16 3, i16 3, i16 3>
113*9880d681SAndroid Build Coastguard Worker  %1 = add <4 x i16> %vsra_n, %a
114*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %1
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vsra_n_s32(<2 x i32> %a, <2 x i32> %b) {
118*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsra_n_s32
119*9880d681SAndroid Build Coastguard Worker; CHECK: ssra {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #3
120*9880d681SAndroid Build Coastguard Worker  %vsra_n = ashr <2 x i32> %b, <i32 3, i32 3>
121*9880d681SAndroid Build Coastguard Worker  %1 = add <2 x i32> %vsra_n, %a
122*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %1
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsraq_n_s8(<16 x i8> %a, <16 x i8> %b) {
126*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_s8
127*9880d681SAndroid Build Coastguard Worker; CHECK: ssra {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #3
128*9880d681SAndroid Build Coastguard Worker  %vsra_n = ashr <16 x i8> %b, <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>
129*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i8> %vsra_n, %a
130*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %1
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vsraq_n_s16(<8 x i16> %a, <8 x i16> %b) {
134*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_s16
135*9880d681SAndroid Build Coastguard Worker; CHECK: ssra {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #3
136*9880d681SAndroid Build Coastguard Worker  %vsra_n = ashr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
137*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i16> %vsra_n, %a
138*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %1
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vsraq_n_s32(<4 x i32> %a, <4 x i32> %b) {
142*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_s32
143*9880d681SAndroid Build Coastguard Worker; CHECK: ssra {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #3
144*9880d681SAndroid Build Coastguard Worker  %vsra_n = ashr <4 x i32> %b, <i32 3, i32 3, i32 3, i32 3>
145*9880d681SAndroid Build Coastguard Worker  %1 = add <4 x i32> %vsra_n, %a
146*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %1
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vsraq_n_s64(<2 x i64> %a, <2 x i64> %b) {
150*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_s64
151*9880d681SAndroid Build Coastguard Worker; CHECK: ssra {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #3
152*9880d681SAndroid Build Coastguard Worker  %vsra_n = ashr <2 x i64> %b, <i64 3, i64 3>
153*9880d681SAndroid Build Coastguard Worker  %1 = add <2 x i64> %vsra_n, %a
154*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %1
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vsra_n_u8(<8 x i8> %a, <8 x i8> %b) {
158*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsra_n_u8
159*9880d681SAndroid Build Coastguard Worker; CHECK: usra {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #3
160*9880d681SAndroid Build Coastguard Worker  %vsra_n = lshr <8 x i8> %b, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
161*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i8> %vsra_n, %a
162*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %1
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vsra_n_u16(<4 x i16> %a, <4 x i16> %b) {
166*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsra_n_u16
167*9880d681SAndroid Build Coastguard Worker; CHECK: usra {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #3
168*9880d681SAndroid Build Coastguard Worker  %vsra_n = lshr <4 x i16> %b, <i16 3, i16 3, i16 3, i16 3>
169*9880d681SAndroid Build Coastguard Worker  %1 = add <4 x i16> %vsra_n, %a
170*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %1
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vsra_n_u32(<2 x i32> %a, <2 x i32> %b) {
174*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsra_n_u32
175*9880d681SAndroid Build Coastguard Worker; CHECK: usra {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #3
176*9880d681SAndroid Build Coastguard Worker  %vsra_n = lshr <2 x i32> %b, <i32 3, i32 3>
177*9880d681SAndroid Build Coastguard Worker  %1 = add <2 x i32> %vsra_n, %a
178*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %1
179*9880d681SAndroid Build Coastguard Worker}
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsraq_n_u8(<16 x i8> %a, <16 x i8> %b) {
182*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_u8
183*9880d681SAndroid Build Coastguard Worker; CHECK: usra {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #3
184*9880d681SAndroid Build Coastguard Worker  %vsra_n = lshr <16 x i8> %b, <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>
185*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i8> %vsra_n, %a
186*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %1
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vsraq_n_u16(<8 x i16> %a, <8 x i16> %b) {
190*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_u16
191*9880d681SAndroid Build Coastguard Worker; CHECK: usra {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #3
192*9880d681SAndroid Build Coastguard Worker  %vsra_n = lshr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
193*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i16> %vsra_n, %a
194*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %1
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vsraq_n_u32(<4 x i32> %a, <4 x i32> %b) {
198*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_u32
199*9880d681SAndroid Build Coastguard Worker; CHECK: usra {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #3
200*9880d681SAndroid Build Coastguard Worker  %vsra_n = lshr <4 x i32> %b, <i32 3, i32 3, i32 3, i32 3>
201*9880d681SAndroid Build Coastguard Worker  %1 = add <4 x i32> %vsra_n, %a
202*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %1
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vsraq_n_u64(<2 x i64> %a, <2 x i64> %b) {
206*9880d681SAndroid Build Coastguard Worker; CHECK: test_vsraq_n_u64
207*9880d681SAndroid Build Coastguard Worker; CHECK: usra {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #3
208*9880d681SAndroid Build Coastguard Worker  %vsra_n = lshr <2 x i64> %b, <i64 3, i64 3>
209*9880d681SAndroid Build Coastguard Worker  %1 = add <2 x i64> %vsra_n, %a
210*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %1
211*9880d681SAndroid Build Coastguard Worker}
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vshrn_n_s16(<8 x i16> %a) {
214*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_n_s16
215*9880d681SAndroid Build Coastguard Worker; CHECK: shrn {{v[0-9]+}}.8b, {{v[0-9]+}}.8h, #3
216*9880d681SAndroid Build Coastguard Worker  %1 = ashr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
217*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <8 x i16> %1 to <8 x i8>
218*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vshrn_n
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vshrn_n_s32(<4 x i32> %a) {
222*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_n_s32
223*9880d681SAndroid Build Coastguard Worker; CHECK: shrn {{v[0-9]+}}.4h, {{v[0-9]+}}.4s, #9
224*9880d681SAndroid Build Coastguard Worker  %1 = ashr <4 x i32> %a, <i32 9, i32 9, i32 9, i32 9>
225*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <4 x i32> %1 to <4 x i16>
226*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vshrn_n
227*9880d681SAndroid Build Coastguard Worker}
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vshrn_n_s64(<2 x i64> %a) {
230*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_n_s64
231*9880d681SAndroid Build Coastguard Worker; CHECK: shrn {{v[0-9]+}}.2s, {{v[0-9]+}}.2d, #19
232*9880d681SAndroid Build Coastguard Worker  %1 = ashr <2 x i64> %a, <i64 19, i64 19>
233*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <2 x i64> %1 to <2 x i32>
234*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vshrn_n
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vshrn_n_u16(<8 x i16> %a) {
238*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_n_u16
239*9880d681SAndroid Build Coastguard Worker; CHECK: shrn {{v[0-9]+}}.8b, {{v[0-9]+}}.8h, #3
240*9880d681SAndroid Build Coastguard Worker  %1 = lshr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
241*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <8 x i16> %1 to <8 x i8>
242*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %vshrn_n
243*9880d681SAndroid Build Coastguard Worker}
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vshrn_n_u32(<4 x i32> %a) {
246*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_n_u32
247*9880d681SAndroid Build Coastguard Worker; CHECK: shrn {{v[0-9]+}}.4h, {{v[0-9]+}}.4s, #9
248*9880d681SAndroid Build Coastguard Worker  %1 = lshr <4 x i32> %a, <i32 9, i32 9, i32 9, i32 9>
249*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <4 x i32> %1 to <4 x i16>
250*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %vshrn_n
251*9880d681SAndroid Build Coastguard Worker}
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vshrn_n_u64(<2 x i64> %a) {
254*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_n_u64
255*9880d681SAndroid Build Coastguard Worker; CHECK: shrn {{v[0-9]+}}.2s, {{v[0-9]+}}.2d, #19
256*9880d681SAndroid Build Coastguard Worker  %1 = lshr <2 x i64> %a, <i64 19, i64 19>
257*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <2 x i64> %1 to <2 x i32>
258*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %vshrn_n
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) {
262*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_high_n_s16
263*9880d681SAndroid Build Coastguard Worker; CHECK: shrn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
264*9880d681SAndroid Build Coastguard Worker  %1 = ashr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
265*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <8 x i16> %1 to <8 x i8>
266*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %a to <1 x i64>
267*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <8 x i8> %vshrn_n to <1 x i64>
268*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1>
269*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i64> %shuffle.i to <16 x i8>
270*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %4
271*9880d681SAndroid Build Coastguard Worker}
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) {
274*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_high_n_s32
275*9880d681SAndroid Build Coastguard Worker; CHECK: shrn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
276*9880d681SAndroid Build Coastguard Worker  %1 = ashr <4 x i32> %b, <i32 9, i32 9, i32 9, i32 9>
277*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <4 x i32> %1 to <4 x i16>
278*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %a to <1 x i64>
279*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <4 x i16> %vshrn_n to <1 x i64>
280*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1>
281*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i64> %shuffle.i to <8 x i16>
282*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %4
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) {
286*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_high_n_s64
287*9880d681SAndroid Build Coastguard Worker; CHECK: shrn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
288*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
289*9880d681SAndroid Build Coastguard Worker  %2 = ashr <2 x i64> %b, <i64 19, i64 19>
290*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <2 x i64> %2 to <2 x i32>
291*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i32> %vshrn_n to <1 x i64>
292*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %3, <2 x i32> <i32 0, i32 1>
293*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i64> %shuffle.i to <4 x i32>
294*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %4
295*9880d681SAndroid Build Coastguard Worker}
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vshrn_high_n_u16(<8 x i8> %a, <8 x i16> %b) {
298*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_high_n_u16
299*9880d681SAndroid Build Coastguard Worker; CHECK: shrn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
300*9880d681SAndroid Build Coastguard Worker  %1 = lshr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
301*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <8 x i16> %1 to <8 x i8>
302*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %a to <1 x i64>
303*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <8 x i8> %vshrn_n to <1 x i64>
304*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1>
305*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i64> %shuffle.i to <16 x i8>
306*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %4
307*9880d681SAndroid Build Coastguard Worker}
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vshrn_high_n_u32(<4 x i16> %a, <4 x i32> %b) {
310*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_high_n_u32
311*9880d681SAndroid Build Coastguard Worker; CHECK: shrn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
312*9880d681SAndroid Build Coastguard Worker  %1 = lshr <4 x i32> %b, <i32 9, i32 9, i32 9, i32 9>
313*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <4 x i32> %1 to <4 x i16>
314*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %a to <1 x i64>
315*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <4 x i16> %vshrn_n to <1 x i64>
316*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1>
317*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i64> %shuffle.i to <8 x i16>
318*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %4
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vshrn_high_n_u64(<2 x i32> %a, <2 x i64> %b) {
322*9880d681SAndroid Build Coastguard Worker; CHECK: test_vshrn_high_n_u64
323*9880d681SAndroid Build Coastguard Worker; CHECK: shrn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
324*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
325*9880d681SAndroid Build Coastguard Worker  %2 = lshr <2 x i64> %b, <i64 19, i64 19>
326*9880d681SAndroid Build Coastguard Worker  %vshrn_n = trunc <2 x i64> %2 to <2 x i32>
327*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i32> %vshrn_n to <1 x i64>
328*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %3, <2 x i32> <i32 0, i32 1>
329*9880d681SAndroid Build Coastguard Worker  %4 = bitcast <2 x i64> %shuffle.i to <4 x i32>
330*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %4
331*9880d681SAndroid Build Coastguard Worker}
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vqshrun_high_n_s16(<8 x i8> %a, <8 x i16> %b) {
334*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrun_high_n_s16
335*9880d681SAndroid Build Coastguard Worker; CHECK: sqshrun2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
336*9880d681SAndroid Build Coastguard Worker  %vqshrun = tail call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> %b, i32 3)
337*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %a to <1 x i64>
338*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %vqshrun to <1 x i64>
339*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
340*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <16 x i8>
341*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %3
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqshrun_high_n_s32(<4 x i16> %a, <4 x i32> %b) {
345*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrun_high_n_s32
346*9880d681SAndroid Build Coastguard Worker; CHECK: sqshrun2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
347*9880d681SAndroid Build Coastguard Worker  %vqshrun = tail call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> %b, i32 9)
348*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <1 x i64>
349*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %vqshrun to <1 x i64>
350*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
351*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <8 x i16>
352*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
353*9880d681SAndroid Build Coastguard Worker}
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqshrun_high_n_s64(<2 x i32> %a, <2 x i64> %b) {
356*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrun_high_n_s64
357*9880d681SAndroid Build Coastguard Worker; CHECK: sqshrun2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
358*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
359*9880d681SAndroid Build Coastguard Worker  %vqshrun = tail call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> %b, i32 19)
360*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i32> %vqshrun to <1 x i64>
361*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
362*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <4 x i32>
363*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
364*9880d681SAndroid Build Coastguard Worker}
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vrshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) {
367*9880d681SAndroid Build Coastguard Worker; CHECK: test_vrshrn_high_n_s16
368*9880d681SAndroid Build Coastguard Worker; CHECK: rshrn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
369*9880d681SAndroid Build Coastguard Worker  %vrshrn = tail call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> %b, i32 3)
370*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %a to <1 x i64>
371*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %vrshrn to <1 x i64>
372*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
373*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <16 x i8>
374*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %3
375*9880d681SAndroid Build Coastguard Worker}
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vrshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) {
378*9880d681SAndroid Build Coastguard Worker; CHECK: test_vrshrn_high_n_s32
379*9880d681SAndroid Build Coastguard Worker; CHECK: rshrn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
380*9880d681SAndroid Build Coastguard Worker  %vrshrn = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> %b, i32 9)
381*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <1 x i64>
382*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %vrshrn to <1 x i64>
383*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
384*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <8 x i16>
385*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vrshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) {
389*9880d681SAndroid Build Coastguard Worker; CHECK: test_vrshrn_high_n_s64
390*9880d681SAndroid Build Coastguard Worker; CHECK: rshrn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
391*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
392*9880d681SAndroid Build Coastguard Worker  %vrshrn = tail call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> %b, i32 19)
393*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i32> %vrshrn to <1 x i64>
394*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
395*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <4 x i32>
396*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
397*9880d681SAndroid Build Coastguard Worker}
398*9880d681SAndroid Build Coastguard Worker
399*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vqrshrun_high_n_s16(<8 x i8> %a, <8 x i16> %b) {
400*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrun_high_n_s16
401*9880d681SAndroid Build Coastguard Worker; CHECK: sqrshrun2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
402*9880d681SAndroid Build Coastguard Worker  %vqrshrun = tail call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> %b, i32 3)
403*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %a to <1 x i64>
404*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %vqrshrun to <1 x i64>
405*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
406*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <16 x i8>
407*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %3
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqrshrun_high_n_s32(<4 x i16> %a, <4 x i32> %b) {
411*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrun_high_n_s32
412*9880d681SAndroid Build Coastguard Worker; CHECK: sqrshrun2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
413*9880d681SAndroid Build Coastguard Worker  %vqrshrun = tail call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> %b, i32 9)
414*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <1 x i64>
415*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %vqrshrun to <1 x i64>
416*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
417*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <8 x i16>
418*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqrshrun_high_n_s64(<2 x i32> %a, <2 x i64> %b) {
422*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrun_high_n_s64
423*9880d681SAndroid Build Coastguard Worker; CHECK: sqrshrun2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
424*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
425*9880d681SAndroid Build Coastguard Worker  %vqrshrun = tail call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> %b, i32 19)
426*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i32> %vqrshrun to <1 x i64>
427*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
428*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <4 x i32>
429*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
430*9880d681SAndroid Build Coastguard Worker}
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vqshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) {
433*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrn_high_n_s16
434*9880d681SAndroid Build Coastguard Worker; CHECK: sqshrn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
435*9880d681SAndroid Build Coastguard Worker  %vqshrn = tail call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> %b, i32 3)
436*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %a to <1 x i64>
437*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %vqshrn to <1 x i64>
438*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
439*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <16 x i8>
440*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %3
441*9880d681SAndroid Build Coastguard Worker}
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) {
444*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrn_high_n_s32
445*9880d681SAndroid Build Coastguard Worker; CHECK: sqshrn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
446*9880d681SAndroid Build Coastguard Worker  %vqshrn = tail call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> %b, i32 9)
447*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <1 x i64>
448*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %vqshrn to <1 x i64>
449*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
450*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <8 x i16>
451*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
452*9880d681SAndroid Build Coastguard Worker}
453*9880d681SAndroid Build Coastguard Worker
454*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) {
455*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrn_high_n_s64
456*9880d681SAndroid Build Coastguard Worker; CHECK: sqshrn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
457*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
458*9880d681SAndroid Build Coastguard Worker  %vqshrn = tail call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> %b, i32 19)
459*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i32> %vqshrn to <1 x i64>
460*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
461*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <4 x i32>
462*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
463*9880d681SAndroid Build Coastguard Worker}
464*9880d681SAndroid Build Coastguard Worker
465*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vqshrn_high_n_u16(<8 x i8> %a, <8 x i16> %b) {
466*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrn_high_n_u16
467*9880d681SAndroid Build Coastguard Worker; CHECK: uqshrn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
468*9880d681SAndroid Build Coastguard Worker  %vqshrn = tail call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> %b, i32 3)
469*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %a to <1 x i64>
470*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %vqshrn to <1 x i64>
471*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
472*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <16 x i8>
473*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %3
474*9880d681SAndroid Build Coastguard Worker}
475*9880d681SAndroid Build Coastguard Worker
476*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqshrn_high_n_u32(<4 x i16> %a, <4 x i32> %b) {
477*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrn_high_n_u32
478*9880d681SAndroid Build Coastguard Worker; CHECK: uqshrn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
479*9880d681SAndroid Build Coastguard Worker  %vqshrn = tail call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> %b, i32 9)
480*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <1 x i64>
481*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %vqshrn to <1 x i64>
482*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
483*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <8 x i16>
484*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
485*9880d681SAndroid Build Coastguard Worker}
486*9880d681SAndroid Build Coastguard Worker
487*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqshrn_high_n_u64(<2 x i32> %a, <2 x i64> %b) {
488*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqshrn_high_n_u64
489*9880d681SAndroid Build Coastguard Worker; CHECK: uqshrn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
490*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
491*9880d681SAndroid Build Coastguard Worker  %vqshrn = tail call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> %b, i32 19)
492*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i32> %vqshrn to <1 x i64>
493*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
494*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <4 x i32>
495*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
496*9880d681SAndroid Build Coastguard Worker}
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vqrshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) {
499*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrn_high_n_s16
500*9880d681SAndroid Build Coastguard Worker; CHECK: sqrshrn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
501*9880d681SAndroid Build Coastguard Worker  %vqrshrn = tail call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> %b, i32 3)
502*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %a to <1 x i64>
503*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %vqrshrn to <1 x i64>
504*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
505*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <16 x i8>
506*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %3
507*9880d681SAndroid Build Coastguard Worker}
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqrshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) {
510*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrn_high_n_s32
511*9880d681SAndroid Build Coastguard Worker; CHECK: sqrshrn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
512*9880d681SAndroid Build Coastguard Worker  %vqrshrn = tail call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> %b, i32 9)
513*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <1 x i64>
514*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %vqrshrn to <1 x i64>
515*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
516*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <8 x i16>
517*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
518*9880d681SAndroid Build Coastguard Worker}
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqrshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) {
521*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrn_high_n_s64
522*9880d681SAndroid Build Coastguard Worker; CHECK: sqrshrn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
523*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
524*9880d681SAndroid Build Coastguard Worker  %vqrshrn = tail call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> %b, i32 19)
525*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i32> %vqrshrn to <1 x i64>
526*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
527*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <4 x i32>
528*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
529*9880d681SAndroid Build Coastguard Worker}
530*9880d681SAndroid Build Coastguard Worker
531*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vqrshrn_high_n_u16(<8 x i8> %a, <8 x i16> %b) {
532*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrn_high_n_u16
533*9880d681SAndroid Build Coastguard Worker; CHECK: uqrshrn2 {{v[0-9]+}}.16b, {{v[0-9]+}}.8h, #3
534*9880d681SAndroid Build Coastguard Worker  %vqrshrn = tail call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> %b, i32 3)
535*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i8> %a to <1 x i64>
536*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i8> %vqrshrn to <1 x i64>
537*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
538*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <16 x i8>
539*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %3
540*9880d681SAndroid Build Coastguard Worker}
541*9880d681SAndroid Build Coastguard Worker
542*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqrshrn_high_n_u32(<4 x i16> %a, <4 x i32> %b) {
543*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrn_high_n_u32
544*9880d681SAndroid Build Coastguard Worker; CHECK: uqrshrn2 {{v[0-9]+}}.8h, {{v[0-9]+}}.4s, #9
545*9880d681SAndroid Build Coastguard Worker  %vqrshrn = tail call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> %b, i32 9)
546*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <1 x i64>
547*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i16> %vqrshrn to <1 x i64>
548*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
549*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <8 x i16>
550*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %3
551*9880d681SAndroid Build Coastguard Worker}
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqrshrn_high_n_u64(<2 x i32> %a, <2 x i64> %b) {
554*9880d681SAndroid Build Coastguard Worker; CHECK: test_vqrshrn_high_n_u64
555*9880d681SAndroid Build Coastguard Worker; CHECK: uqrshrn2 {{v[0-9]+}}.4s, {{v[0-9]+}}.2d, #19
556*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <1 x i64>
557*9880d681SAndroid Build Coastguard Worker  %vqrshrn = tail call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> %b, i32 19)
558*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <2 x i32> %vqrshrn to <1 x i64>
559*9880d681SAndroid Build Coastguard Worker  %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1>
560*9880d681SAndroid Build Coastguard Worker  %3 = bitcast <2 x i64> %shuffle.i to <4 x i32>
561*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %3
562*9880d681SAndroid Build Coastguard Worker}
563*9880d681SAndroid Build Coastguard Worker
564*9880d681SAndroid Build Coastguard Worker
565*9880d681SAndroid Build Coastguard Worker
566*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16>, i32)
567*9880d681SAndroid Build Coastguard Worker
568*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32>, i32)
569*9880d681SAndroid Build Coastguard Worker
570*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64>, i32)
571*9880d681SAndroid Build Coastguard Worker
572*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16>, i32)
573*9880d681SAndroid Build Coastguard Worker
574*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32>, i32)
575*9880d681SAndroid Build Coastguard Worker
576*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64>, i32)
577*9880d681SAndroid Build Coastguard Worker
578*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16>, i32)
579*9880d681SAndroid Build Coastguard Worker
580*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32>, i32)
581*9880d681SAndroid Build Coastguard Worker
582*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64>, i32)
583*9880d681SAndroid Build Coastguard Worker
584*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16>, i32)
585*9880d681SAndroid Build Coastguard Worker
586*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32>, i32)
587*9880d681SAndroid Build Coastguard Worker
588*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64>, i32)
589*9880d681SAndroid Build Coastguard Worker
590*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16>, i32)
591*9880d681SAndroid Build Coastguard Worker
592*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32>, i32)
593*9880d681SAndroid Build Coastguard Worker
594*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64>, i32)
595*9880d681SAndroid Build Coastguard Worker
596*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16>, i32)
597*9880d681SAndroid Build Coastguard Worker
598*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32>, i32)
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64>, i32)
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16>, i32)
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32>, i32)
605*9880d681SAndroid Build Coastguard Worker
606*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64>, i32)
607*9880d681SAndroid Build Coastguard Worker
608*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32>, i32)
609*9880d681SAndroid Build Coastguard Worker
610*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32>, i32)
611*9880d681SAndroid Build Coastguard Worker
612*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64>, i32)
613*9880d681SAndroid Build Coastguard Worker
614*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32>, i32)
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32>, i32)
617*9880d681SAndroid Build Coastguard Worker
618*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64>, i32)
619*9880d681SAndroid Build Coastguard Worker
620*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float>, i32)
621*9880d681SAndroid Build Coastguard Worker
622*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float>, i32)
623*9880d681SAndroid Build Coastguard Worker
624*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double>, i32)
625*9880d681SAndroid Build Coastguard Worker
626*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float>, i32)
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float>, i32)
629*9880d681SAndroid Build Coastguard Worker
630*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double>, i32)
631*9880d681SAndroid Build Coastguard Worker
632*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vcvt_n_s64_f64(<1 x double> %a) {
633*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcvt_n_s64_f64
634*9880d681SAndroid Build Coastguard Worker; CHECK: fcvtzs d{{[0-9]+}}, d{{[0-9]+}}, #64
635*9880d681SAndroid Build Coastguard Worker  %1 = tail call <1 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v1i64.v1f64(<1 x double> %a, i32 64)
636*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %1
637*9880d681SAndroid Build Coastguard Worker}
638*9880d681SAndroid Build Coastguard Worker
639*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vcvt_n_u64_f64(<1 x double> %a) {
640*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcvt_n_u64_f64
641*9880d681SAndroid Build Coastguard Worker; CHECK: fcvtzu d{{[0-9]+}}, d{{[0-9]+}}, #64
642*9880d681SAndroid Build Coastguard Worker  %1 = tail call <1 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v1i64.v1f64(<1 x double> %a, i32 64)
643*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %1
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_vcvt_n_f64_s64(<1 x i64> %a) {
647*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcvt_n_f64_s64
648*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf d{{[0-9]+}}, d{{[0-9]+}}, #64
649*9880d681SAndroid Build Coastguard Worker  %1 = tail call <1 x double> @llvm.aarch64.neon.vcvtfxs2fp.v1f64.v1i64(<1 x i64> %a, i32 64)
650*9880d681SAndroid Build Coastguard Worker  ret <1 x double> %1
651*9880d681SAndroid Build Coastguard Worker}
652*9880d681SAndroid Build Coastguard Worker
653*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_vcvt_n_f64_u64(<1 x i64> %a) {
654*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcvt_n_f64_u64
655*9880d681SAndroid Build Coastguard Worker; CHECK: ucvtf d{{[0-9]+}}, d{{[0-9]+}}, #64
656*9880d681SAndroid Build Coastguard Worker  %1 = tail call <1 x double> @llvm.aarch64.neon.vcvtfxu2fp.v1f64.v1i64(<1 x i64> %a, i32 64)
657*9880d681SAndroid Build Coastguard Worker  ret <1 x double> %1
658*9880d681SAndroid Build Coastguard Worker}
659*9880d681SAndroid Build Coastguard Worker
660*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v1i64.v1f64(<1 x double>, i32)
661*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v1i64.v1f64(<1 x double>, i32)
662*9880d681SAndroid Build Coastguard Workerdeclare <1 x double> @llvm.aarch64.neon.vcvtfxs2fp.v1f64.v1i64(<1 x i64>, i32)
663*9880d681SAndroid Build Coastguard Workerdeclare <1 x double> @llvm.aarch64.neon.vcvtfxu2fp.v1f64.v1i64(<1 x i64>, i32)
664