xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-neon-2velem-high.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-none-linux-gnu -mattr=+neon -fp-contract=fast \
2*9880d681SAndroid Build Coastguard Worker; RUN:     < %s -verify-machineinstrs -asm-verbose=false | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_s16(<8 x i16> %a, i16 %b) #0 {
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s16:
6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
9*9880d681SAndroid Build Coastguard Workerentry:
10*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
11*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %b, i32 0
12*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %b, i32 1
13*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %b, i32 2
14*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %b, i32 3
15*9880d681SAndroid Build Coastguard Worker  %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
16*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vmull15.i.i
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_s16_imm(<8 x i16> %a) #0 {
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s16_imm:
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
24*9880d681SAndroid Build Coastguard Workerentry:
25*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
26*9880d681SAndroid Build Coastguard Worker  %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>)
27*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vmull15.i.i
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_s32(<4 x i32> %a, i32 %b) #0 {
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s32:
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
37*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %b, i32 0
38*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %b, i32 1
39*9880d681SAndroid Build Coastguard Worker  %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
40*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vmull9.i.i
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_s32_imm(<4 x i32> %a) #0 {
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s32_imm:
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #1, msl #8
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
48*9880d681SAndroid Build Coastguard Workerentry:
49*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
50*9880d681SAndroid Build Coastguard Worker  %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 511, i32 511>)
51*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vmull9.i.i
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_u16(<8 x i16> %a, i16 %b) #0 {
55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u16:
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
59*9880d681SAndroid Build Coastguard Workerentry:
60*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
61*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %b, i32 0
62*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %b, i32 1
63*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %b, i32 2
64*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %b, i32 3
65*9880d681SAndroid Build Coastguard Worker  %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
66*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vmull15.i.i
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_u16_imm(<8 x i16> %a) #0 {
70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u16_imm:
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #17, lsl #8
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
74*9880d681SAndroid Build Coastguard Workerentry:
75*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
76*9880d681SAndroid Build Coastguard Worker  %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 4352, i16 4352, i16 4352, i16 4352>)
77*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vmull15.i.i
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_u32(<4 x i32> %a, i32 %b) #0 {
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u32:
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
85*9880d681SAndroid Build Coastguard Workerentry:
86*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
87*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %b, i32 0
88*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %b, i32 1
89*9880d681SAndroid Build Coastguard Worker  %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
90*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vmull9.i.i
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_u32_imm(<4 x i32> %a) #0 {
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u32_imm:
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mvni [[REPLICATE:v[0-9]+]].4s, #1, msl #8
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
98*9880d681SAndroid Build Coastguard Workerentry:
99*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
100*9880d681SAndroid Build Coastguard Worker  %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 4294966784, i32 4294966784>)
101*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vmull9.i.i
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_n_s16(<8 x i16> %a, i16 %b) #0 {
105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s16:
106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
109*9880d681SAndroid Build Coastguard Workerentry:
110*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
111*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %b, i32 0
112*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %b, i32 1
113*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %b, i32 2
114*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %b, i32 3
115*9880d681SAndroid Build Coastguard Worker  %vqdmull15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
116*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vqdmull15.i.i
117*9880d681SAndroid Build Coastguard Worker}
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_n_s16_imm(<8 x i16> %a) #0 {
120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s16_imm:
121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mvni [[REPLICATE:v[0-9]+]].8h, #17, lsl #8
122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
124*9880d681SAndroid Build Coastguard Workerentry:
125*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
126*9880d681SAndroid Build Coastguard Worker  %vqdmull15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 61183, i16 61183, i16 61183, i16 61183>)
127*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vqdmull15.i.i
128*9880d681SAndroid Build Coastguard Worker}
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_n_s32(<4 x i32> %a, i32 %b) #0 {
131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s32:
132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
135*9880d681SAndroid Build Coastguard Workerentry:
136*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
137*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %b, i32 0
138*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %b, i32 1
139*9880d681SAndroid Build Coastguard Worker  %vqdmull9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
140*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vqdmull9.i.i
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_n_s32_imm(<4 x i32> %a) #0 {
144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s32_imm:
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
148*9880d681SAndroid Build Coastguard Workerentry:
149*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
150*9880d681SAndroid Build Coastguard Worker  %vqdmull9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>)
151*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vqdmull9.i.i
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 {
155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s16:
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
159*9880d681SAndroid Build Coastguard Workerentry:
160*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
161*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0
162*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1
163*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2
164*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3
165*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
166*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <4 x i32> %vmull2.i.i.i, %a
167*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %add.i.i
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 {
171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s16_imm:
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29
173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
175*9880d681SAndroid Build Coastguard Workerentry:
176*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
177*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>)
178*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <4 x i32> %vmull2.i.i.i, %a
179*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %add.i.i
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 {
183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s32:
184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
187*9880d681SAndroid Build Coastguard Workerentry:
188*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
189*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0
190*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1
191*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
192*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <2 x i64> %vmull2.i.i.i, %a
193*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %add.i.i
194*9880d681SAndroid Build Coastguard Worker}
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 {
197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s32_imm:
198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29
199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
201*9880d681SAndroid Build Coastguard Workerentry:
202*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
203*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>)
204*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <2 x i64> %vmull2.i.i.i, %a
205*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %add.i.i
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_u16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 {
209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u16:
210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
213*9880d681SAndroid Build Coastguard Workerentry:
214*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
215*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0
216*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1
217*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2
218*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3
219*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
220*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <4 x i32> %vmull2.i.i.i, %a
221*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %add.i.i
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_u16_imm(<4 x i32> %a, <8 x i16> %b) #0 {
225*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u16_imm:
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29
227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
229*9880d681SAndroid Build Coastguard Workerentry:
230*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
231*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>)
232*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <4 x i32> %vmull2.i.i.i, %a
233*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %add.i.i
234*9880d681SAndroid Build Coastguard Worker}
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_u32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 {
237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u32:
238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
241*9880d681SAndroid Build Coastguard Workerentry:
242*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
243*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0
244*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1
245*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
246*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <2 x i64> %vmull2.i.i.i, %a
247*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %add.i.i
248*9880d681SAndroid Build Coastguard Worker}
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_u32_imm(<2 x i64> %a, <4 x i32> %b) #0 {
251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u32_imm:
252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29
253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
255*9880d681SAndroid Build Coastguard Workerentry:
256*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
257*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>)
258*9880d681SAndroid Build Coastguard Worker  %add.i.i = add <2 x i64> %vmull2.i.i.i, %a
259*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %add.i.i
260*9880d681SAndroid Build Coastguard Worker}
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 {
263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s16:
264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
267*9880d681SAndroid Build Coastguard Workerentry:
268*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
269*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0
270*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1
271*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2
272*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3
273*9880d681SAndroid Build Coastguard Worker  %vqdmlal15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
274*9880d681SAndroid Build Coastguard Worker  %vqdmlal17.i.i = call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal15.i.i)
275*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vqdmlal17.i.i
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 {
279*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s16_imm:
280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29
281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
283*9880d681SAndroid Build Coastguard Workerentry:
284*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
285*9880d681SAndroid Build Coastguard Worker  %vqdmlal15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>)
286*9880d681SAndroid Build Coastguard Worker  %vqdmlal17.i.i = call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal15.i.i)
287*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vqdmlal17.i.i
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 {
291*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s32:
292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
295*9880d681SAndroid Build Coastguard Workerentry:
296*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
297*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0
298*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1
299*9880d681SAndroid Build Coastguard Worker  %vqdmlal9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
300*9880d681SAndroid Build Coastguard Worker  %vqdmlal11.i.i = call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal9.i.i)
301*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vqdmlal11.i.i
302*9880d681SAndroid Build Coastguard Worker}
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 {
305*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s32_imm:
306*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29
307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
309*9880d681SAndroid Build Coastguard Workerentry:
310*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
311*9880d681SAndroid Build Coastguard Worker  %vqdmlal9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>)
312*9880d681SAndroid Build Coastguard Worker  %vqdmlal11.i.i = call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal9.i.i)
313*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vqdmlal11.i.i
314*9880d681SAndroid Build Coastguard Worker}
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 {
317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s16:
318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
321*9880d681SAndroid Build Coastguard Workerentry:
322*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
323*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0
324*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1
325*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2
326*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3
327*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
328*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i
329*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %sub.i.i
330*9880d681SAndroid Build Coastguard Worker}
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 {
333*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s16_imm:
334*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29
335*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
336*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
337*9880d681SAndroid Build Coastguard Workerentry:
338*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
339*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>)
340*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i
341*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %sub.i.i
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 {
345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s32:
346*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
347*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
348*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
349*9880d681SAndroid Build Coastguard Workerentry:
350*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
351*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0
352*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1
353*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
354*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i
355*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sub.i.i
356*9880d681SAndroid Build Coastguard Worker}
357*9880d681SAndroid Build Coastguard Worker
358*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 {
359*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s32_imm:
360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29
361*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
362*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
363*9880d681SAndroid Build Coastguard Workerentry:
364*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
365*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>)
366*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i
367*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sub.i.i
368*9880d681SAndroid Build Coastguard Worker}
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_u16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 {
371*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u16:
372*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
373*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
374*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
375*9880d681SAndroid Build Coastguard Workerentry:
376*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
377*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0
378*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1
379*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2
380*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3
381*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
382*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i
383*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %sub.i.i
384*9880d681SAndroid Build Coastguard Worker}
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_u16_imm(<4 x i32> %a, <8 x i16> %b) #0 {
387*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u16_imm:
388*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29
389*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
391*9880d681SAndroid Build Coastguard Workerentry:
392*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
393*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>)
394*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i
395*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %sub.i.i
396*9880d681SAndroid Build Coastguard Worker}
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_u32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 {
399*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u32:
400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
401*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
402*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
403*9880d681SAndroid Build Coastguard Workerentry:
404*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
405*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0
406*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1
407*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
408*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i
409*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sub.i.i
410*9880d681SAndroid Build Coastguard Worker}
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_u32_imm(<2 x i64> %a, <4 x i32> %b) #0 {
413*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u32_imm:
414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29
415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
417*9880d681SAndroid Build Coastguard Workerentry:
418*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
419*9880d681SAndroid Build Coastguard Worker  %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>)
420*9880d681SAndroid Build Coastguard Worker  %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i
421*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %sub.i.i
422*9880d681SAndroid Build Coastguard Worker}
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 {
425*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s16:
426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0
427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
428*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
429*9880d681SAndroid Build Coastguard Workerentry:
430*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
431*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0
432*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1
433*9880d681SAndroid Build Coastguard Worker  %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2
434*9880d681SAndroid Build Coastguard Worker  %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3
435*9880d681SAndroid Build Coastguard Worker  %vqdmlsl15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i)
436*9880d681SAndroid Build Coastguard Worker  %vqdmlsl17.i.i = call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl15.i.i)
437*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vqdmlsl17.i.i
438*9880d681SAndroid Build Coastguard Worker}
439*9880d681SAndroid Build Coastguard Worker
440*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 {
441*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s16_imm:
442*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29
443*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h
444*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
445*9880d681SAndroid Build Coastguard Workerentry:
446*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
447*9880d681SAndroid Build Coastguard Worker  %vqdmlsl15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>)
448*9880d681SAndroid Build Coastguard Worker  %vqdmlsl17.i.i = call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl15.i.i)
449*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %vqdmlsl17.i.i
450*9880d681SAndroid Build Coastguard Worker}
451*9880d681SAndroid Build Coastguard Worker
452*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 {
453*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s32:
454*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0
455*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
456*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
457*9880d681SAndroid Build Coastguard Workerentry:
458*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
459*9880d681SAndroid Build Coastguard Worker  %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0
460*9880d681SAndroid Build Coastguard Worker  %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1
461*9880d681SAndroid Build Coastguard Worker  %vqdmlsl9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i)
462*9880d681SAndroid Build Coastguard Worker  %vqdmlsl11.i.i = call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl9.i.i)
463*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vqdmlsl11.i.i
464*9880d681SAndroid Build Coastguard Worker}
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 {
467*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s32_imm:
468*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29
469*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s
470*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
471*9880d681SAndroid Build Coastguard Workerentry:
472*9880d681SAndroid Build Coastguard Worker  %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
473*9880d681SAndroid Build Coastguard Worker  %vqdmlsl9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>)
474*9880d681SAndroid Build Coastguard Worker  %vqdmlsl11.i.i = call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl9.i.i)
475*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %vqdmlsl11.i.i
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmul_n_f32(<2 x float> %a, float %b) #0 {
479*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_n_f32:
480*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0]
481*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
482*9880d681SAndroid Build Coastguard Workerentry:
483*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x float> undef, float %b, i32 0
484*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x float> %vecinit.i, float %b, i32 1
485*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <2 x float> %vecinit1.i, %a
486*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %mul.i
487*9880d681SAndroid Build Coastguard Worker}
488*9880d681SAndroid Build Coastguard Worker
489*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulq_n_f32(<4 x float> %a, float %b) #0 {
490*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_n_f32:
491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0]
492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
493*9880d681SAndroid Build Coastguard Workerentry:
494*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x float> undef, float %b, i32 0
495*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x float> %vecinit.i, float %b, i32 1
496*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x float> %vecinit1.i, float %b, i32 2
497*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x float> %vecinit2.i, float %b, i32 3
498*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <4 x float> %vecinit3.i, %a
499*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %mul.i
500*9880d681SAndroid Build Coastguard Worker}
501*9880d681SAndroid Build Coastguard Worker
502*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulq_n_f64(<2 x double> %a, double %b) #0 {
503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_n_f64:
504*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
505*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
506*9880d681SAndroid Build Coastguard Workerentry:
507*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x double> undef, double %b, i32 0
508*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x double> %vecinit.i, double %b, i32 1
509*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <2 x double> %vecinit1.i, %a
510*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %mul.i
511*9880d681SAndroid Build Coastguard Worker}
512*9880d681SAndroid Build Coastguard Worker
513*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfma_n_f32(<2 x float> %a, <2 x float> %b, float %n) #0 {
514*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfma_n_f32:
515*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[{{[0-9]+}}]
516*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
517*9880d681SAndroid Build Coastguard Workerentry:
518*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x float> undef, float %n, i32 0
519*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x float> %vecinit.i, float %n, i32 1
520*9880d681SAndroid Build Coastguard Worker  %0 = call <2 x float> @llvm.fma.v2f32(<2 x float> %b, <2 x float> %vecinit1.i, <2 x float> %a)
521*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %0
522*9880d681SAndroid Build Coastguard Worker}
523*9880d681SAndroid Build Coastguard Worker
524*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmaq_n_f32(<4 x float> %a, <4 x float> %b, float %n) #0 {
525*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_n_f32:
526*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[{{[0-9]+}}]
527*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
528*9880d681SAndroid Build Coastguard Workerentry:
529*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x float> undef, float %n, i32 0
530*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x float> %vecinit.i, float %n, i32 1
531*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x float> %vecinit1.i, float %n, i32 2
532*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x float> %vecinit2.i, float %n, i32 3
533*9880d681SAndroid Build Coastguard Worker  %0 = call <4 x float> @llvm.fma.v4f32(<4 x float> %b, <4 x float> %vecinit3.i, <4 x float> %a)
534*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %0
535*9880d681SAndroid Build Coastguard Worker}
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfms_n_f32(<2 x float> %a, <2 x float> %b, float %n) #0 {
538*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfms_n_f32:
539*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[{{[0-9]+}}]
540*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
541*9880d681SAndroid Build Coastguard Workerentry:
542*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <2 x float> undef, float %n, i32 0
543*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <2 x float> %vecinit.i, float %n, i32 1
544*9880d681SAndroid Build Coastguard Worker  %0 = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %b
545*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x float> @llvm.fma.v2f32(<2 x float> %0, <2 x float> %vecinit1.i, <2 x float> %a)
546*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %1
547*9880d681SAndroid Build Coastguard Worker}
548*9880d681SAndroid Build Coastguard Worker
549*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmsq_n_f32(<4 x float> %a, <4 x float> %b, float %n) #0 {
550*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_n_f32:
551*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[{{[0-9]+}}]
552*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
553*9880d681SAndroid Build Coastguard Workerentry:
554*9880d681SAndroid Build Coastguard Worker  %vecinit.i = insertelement <4 x float> undef, float %n, i32 0
555*9880d681SAndroid Build Coastguard Worker  %vecinit1.i = insertelement <4 x float> %vecinit.i, float %n, i32 1
556*9880d681SAndroid Build Coastguard Worker  %vecinit2.i = insertelement <4 x float> %vecinit1.i, float %n, i32 2
557*9880d681SAndroid Build Coastguard Worker  %vecinit3.i = insertelement <4 x float> %vecinit2.i, float %n, i32 3
558*9880d681SAndroid Build Coastguard Worker  %0 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %b
559*9880d681SAndroid Build Coastguard Worker  %1 = call <4 x float> @llvm.fma.v4f32(<4 x float> %0, <4 x float> %vecinit3.i, <4 x float> %a)
560*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
561*9880d681SAndroid Build Coastguard Worker}
562*9880d681SAndroid Build Coastguard Worker
563*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
564*9880d681SAndroid Build Coastguard Worker
565*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16>, <4 x i16>)
566*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32>, <2 x i32>)
567*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16>, <4 x i16>)
568*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32>, <2 x i32>)
569*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16>, <4 x i16>)
570*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32>, <2 x i32>)
571*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32>, <4 x i32>)
572*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64>, <2 x i64>)
573*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32>, <4 x i32>)
574*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64>, <2 x i64>)
575*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)
576*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.fma.v2f32(<2 x float>, <2 x float>, <2 x float>)
577