xref: /llvm-project/llvm/test/CodeGen/Thumb2/mve-intrinsics/absneg-predicated.ll (revision 9eb3cc10b2c6f78ccf033cb264113fc904651cd0)
1*9eb3cc10SSimon Tatham; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9eb3cc10SSimon Tatham; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s
3*9eb3cc10SSimon Tatham; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s
4*9eb3cc10SSimon Tatham
5*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vmvnq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) {
6*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_s8:
7*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
8*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
9*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
10*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmvnt q0, q1
11*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
12*9eb3cc10SSimon Tathamentry:
13*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
14*9eb3cc10SSimon Tatham  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
15*9eb3cc10SSimon Tatham  %2 = tail call <16 x i8> @llvm.arm.mve.mvn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive)
16*9eb3cc10SSimon Tatham  ret <16 x i8> %2
17*9eb3cc10SSimon Tatham}
18*9eb3cc10SSimon Tatham
19*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vmvnq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) {
20*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_s16:
21*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
22*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
23*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
24*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmvnt q0, q1
25*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
26*9eb3cc10SSimon Tathamentry:
27*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
28*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
29*9eb3cc10SSimon Tatham  %2 = tail call <8 x i16> @llvm.arm.mve.mvn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive)
30*9eb3cc10SSimon Tatham  ret <8 x i16> %2
31*9eb3cc10SSimon Tatham}
32*9eb3cc10SSimon Tatham
33*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vmvnq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) {
34*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_s32:
35*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
36*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
37*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
38*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmvnt q0, q1
39*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
40*9eb3cc10SSimon Tathamentry:
41*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
42*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
43*9eb3cc10SSimon Tatham  %2 = tail call <4 x i32> @llvm.arm.mve.mvn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive)
44*9eb3cc10SSimon Tatham  ret <4 x i32> %2
45*9eb3cc10SSimon Tatham}
46*9eb3cc10SSimon Tatham
47*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vmvnq_m_u8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) {
48*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_u8:
49*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
50*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
51*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
52*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmvnt q0, q1
53*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
54*9eb3cc10SSimon Tathamentry:
55*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
56*9eb3cc10SSimon Tatham  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
57*9eb3cc10SSimon Tatham  %2 = tail call <16 x i8> @llvm.arm.mve.mvn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive)
58*9eb3cc10SSimon Tatham  ret <16 x i8> %2
59*9eb3cc10SSimon Tatham}
60*9eb3cc10SSimon Tatham
61*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vmvnq_m_u16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) {
62*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_u16:
63*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
64*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
65*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
66*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmvnt q0, q1
67*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
68*9eb3cc10SSimon Tathamentry:
69*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
70*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
71*9eb3cc10SSimon Tatham  %2 = tail call <8 x i16> @llvm.arm.mve.mvn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive)
72*9eb3cc10SSimon Tatham  ret <8 x i16> %2
73*9eb3cc10SSimon Tatham}
74*9eb3cc10SSimon Tatham
75*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vmvnq_m_u32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) {
76*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vmvnq_m_u32:
77*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
78*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
79*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
80*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmvnt q0, q1
81*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
82*9eb3cc10SSimon Tathamentry:
83*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
84*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
85*9eb3cc10SSimon Tatham  %2 = tail call <4 x i32> @llvm.arm.mve.mvn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive)
86*9eb3cc10SSimon Tatham  ret <4 x i32> %2
87*9eb3cc10SSimon Tatham}
88*9eb3cc10SSimon Tatham
89*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x half> @test_vnegq_m_f16(<8 x half> %inactive, <8 x half> %a, i16 zeroext %p) {
90*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_f16:
91*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
92*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
93*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
94*9eb3cc10SSimon Tatham; CHECK-NEXT:    vnegt.f16 q0, q1
95*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
96*9eb3cc10SSimon Tathamentry:
97*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
98*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
99*9eb3cc10SSimon Tatham  %2 = tail call <8 x half> @llvm.arm.mve.neg.predicated.v8f16.v8i1(<8 x half> %a, <8 x i1> %1, <8 x half> %inactive)
100*9eb3cc10SSimon Tatham  ret <8 x half> %2
101*9eb3cc10SSimon Tatham}
102*9eb3cc10SSimon Tatham
103*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x float> @test_vnegq_m_f32(<4 x float> %inactive, <4 x float> %a, i16 zeroext %p) {
104*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_f32:
105*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
106*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
107*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
108*9eb3cc10SSimon Tatham; CHECK-NEXT:    vnegt.f32 q0, q1
109*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
110*9eb3cc10SSimon Tathamentry:
111*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
112*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
113*9eb3cc10SSimon Tatham  %2 = tail call <4 x float> @llvm.arm.mve.neg.predicated.v4f32.v4i1(<4 x float> %a, <4 x i1> %1, <4 x float> %inactive)
114*9eb3cc10SSimon Tatham  ret <4 x float> %2
115*9eb3cc10SSimon Tatham}
116*9eb3cc10SSimon Tatham
117*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vnegq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) {
118*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_s8:
119*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
120*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
121*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
122*9eb3cc10SSimon Tatham; CHECK-NEXT:    vnegt.s8 q0, q1
123*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
124*9eb3cc10SSimon Tathamentry:
125*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
126*9eb3cc10SSimon Tatham  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
127*9eb3cc10SSimon Tatham  %2 = tail call <16 x i8> @llvm.arm.mve.neg.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive)
128*9eb3cc10SSimon Tatham  ret <16 x i8> %2
129*9eb3cc10SSimon Tatham}
130*9eb3cc10SSimon Tatham
131*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vnegq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) {
132*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_s16:
133*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
134*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
135*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
136*9eb3cc10SSimon Tatham; CHECK-NEXT:    vnegt.s16 q0, q1
137*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
138*9eb3cc10SSimon Tathamentry:
139*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
140*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
141*9eb3cc10SSimon Tatham  %2 = tail call <8 x i16> @llvm.arm.mve.neg.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive)
142*9eb3cc10SSimon Tatham  ret <8 x i16> %2
143*9eb3cc10SSimon Tatham}
144*9eb3cc10SSimon Tatham
145*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vnegq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) {
146*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vnegq_m_s32:
147*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
148*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
149*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
150*9eb3cc10SSimon Tatham; CHECK-NEXT:    vnegt.s32 q0, q1
151*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
152*9eb3cc10SSimon Tathamentry:
153*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
154*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
155*9eb3cc10SSimon Tatham  %2 = tail call <4 x i32> @llvm.arm.mve.neg.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive)
156*9eb3cc10SSimon Tatham  ret <4 x i32> %2
157*9eb3cc10SSimon Tatham}
158*9eb3cc10SSimon Tatham
159*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x half> @test_vabsq_m_f16(<8 x half> %inactive, <8 x half> %a, i16 zeroext %p) {
160*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_f16:
161*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
162*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
163*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
164*9eb3cc10SSimon Tatham; CHECK-NEXT:    vabst.f16 q0, q1
165*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
166*9eb3cc10SSimon Tathamentry:
167*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
168*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
169*9eb3cc10SSimon Tatham  %2 = tail call <8 x half> @llvm.arm.mve.abs.predicated.v8f16.v8i1(<8 x half> %a, <8 x i1> %1, <8 x half> %inactive)
170*9eb3cc10SSimon Tatham  ret <8 x half> %2
171*9eb3cc10SSimon Tatham}
172*9eb3cc10SSimon Tatham
173*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x float> @test_vabsq_m_f32(<4 x float> %inactive, <4 x float> %a, i16 zeroext %p) {
174*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_f32:
175*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
176*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
177*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
178*9eb3cc10SSimon Tatham; CHECK-NEXT:    vabst.f32 q0, q1
179*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
180*9eb3cc10SSimon Tathamentry:
181*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
182*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
183*9eb3cc10SSimon Tatham  %2 = tail call <4 x float> @llvm.arm.mve.abs.predicated.v4f32.v4i1(<4 x float> %a, <4 x i1> %1, <4 x float> %inactive)
184*9eb3cc10SSimon Tatham  ret <4 x float> %2
185*9eb3cc10SSimon Tatham}
186*9eb3cc10SSimon Tatham
187*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vabsq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) {
188*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_s8:
189*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
190*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
191*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
192*9eb3cc10SSimon Tatham; CHECK-NEXT:    vabst.s8 q0, q1
193*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
194*9eb3cc10SSimon Tathamentry:
195*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
196*9eb3cc10SSimon Tatham  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
197*9eb3cc10SSimon Tatham  %2 = tail call <16 x i8> @llvm.arm.mve.abs.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive)
198*9eb3cc10SSimon Tatham  ret <16 x i8> %2
199*9eb3cc10SSimon Tatham}
200*9eb3cc10SSimon Tatham
201*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vabsq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) {
202*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_s16:
203*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
204*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
205*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
206*9eb3cc10SSimon Tatham; CHECK-NEXT:    vabst.s16 q0, q1
207*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
208*9eb3cc10SSimon Tathamentry:
209*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
210*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
211*9eb3cc10SSimon Tatham  %2 = tail call <8 x i16> @llvm.arm.mve.abs.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive)
212*9eb3cc10SSimon Tatham  ret <8 x i16> %2
213*9eb3cc10SSimon Tatham}
214*9eb3cc10SSimon Tatham
215*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vabsq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) {
216*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vabsq_m_s32:
217*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
218*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
219*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
220*9eb3cc10SSimon Tatham; CHECK-NEXT:    vabst.s32 q0, q1
221*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
222*9eb3cc10SSimon Tathamentry:
223*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
224*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
225*9eb3cc10SSimon Tatham  %2 = tail call <4 x i32> @llvm.arm.mve.abs.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive)
226*9eb3cc10SSimon Tatham  ret <4 x i32> %2
227*9eb3cc10SSimon Tatham}
228*9eb3cc10SSimon Tatham
229*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vqnegq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) {
230*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqnegq_m_s8:
231*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
232*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
233*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
234*9eb3cc10SSimon Tatham; CHECK-NEXT:    vqnegt.s8 q0, q1
235*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
236*9eb3cc10SSimon Tathamentry:
237*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
238*9eb3cc10SSimon Tatham  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
239*9eb3cc10SSimon Tatham  %2 = tail call <16 x i8> @llvm.arm.mve.qneg.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive)
240*9eb3cc10SSimon Tatham  ret <16 x i8> %2
241*9eb3cc10SSimon Tatham}
242*9eb3cc10SSimon Tatham
243*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vqnegq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) {
244*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqnegq_m_s16:
245*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
246*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
247*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
248*9eb3cc10SSimon Tatham; CHECK-NEXT:    vqnegt.s16 q0, q1
249*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
250*9eb3cc10SSimon Tathamentry:
251*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
252*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
253*9eb3cc10SSimon Tatham  %2 = tail call <8 x i16> @llvm.arm.mve.qneg.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive)
254*9eb3cc10SSimon Tatham  ret <8 x i16> %2
255*9eb3cc10SSimon Tatham}
256*9eb3cc10SSimon Tatham
257*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vqnegq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) {
258*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqnegq_m_s32:
259*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
260*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
261*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
262*9eb3cc10SSimon Tatham; CHECK-NEXT:    vqnegt.s32 q0, q1
263*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
264*9eb3cc10SSimon Tathamentry:
265*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
266*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
267*9eb3cc10SSimon Tatham  %2 = tail call <4 x i32> @llvm.arm.mve.qneg.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive)
268*9eb3cc10SSimon Tatham  ret <4 x i32> %2
269*9eb3cc10SSimon Tatham}
270*9eb3cc10SSimon Tatham
271*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <16 x i8> @test_vqabsq_m_s8(<16 x i8> %inactive, <16 x i8> %a, i16 zeroext %p) {
272*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqabsq_m_s8:
273*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
274*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
275*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
276*9eb3cc10SSimon Tatham; CHECK-NEXT:    vqabst.s8 q0, q1
277*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
278*9eb3cc10SSimon Tathamentry:
279*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
280*9eb3cc10SSimon Tatham  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
281*9eb3cc10SSimon Tatham  %2 = tail call <16 x i8> @llvm.arm.mve.qabs.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i1> %1, <16 x i8> %inactive)
282*9eb3cc10SSimon Tatham  ret <16 x i8> %2
283*9eb3cc10SSimon Tatham}
284*9eb3cc10SSimon Tatham
285*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <8 x i16> @test_vqabsq_m_s16(<8 x i16> %inactive, <8 x i16> %a, i16 zeroext %p) {
286*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqabsq_m_s16:
287*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
288*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
289*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
290*9eb3cc10SSimon Tatham; CHECK-NEXT:    vqabst.s16 q0, q1
291*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
292*9eb3cc10SSimon Tathamentry:
293*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
294*9eb3cc10SSimon Tatham  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
295*9eb3cc10SSimon Tatham  %2 = tail call <8 x i16> @llvm.arm.mve.qabs.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i1> %1, <8 x i16> %inactive)
296*9eb3cc10SSimon Tatham  ret <8 x i16> %2
297*9eb3cc10SSimon Tatham}
298*9eb3cc10SSimon Tatham
299*9eb3cc10SSimon Tathamdefine arm_aapcs_vfpcc <4 x i32> @test_vqabsq_m_s32(<4 x i32> %inactive, <4 x i32> %a, i16 zeroext %p) {
300*9eb3cc10SSimon Tatham; CHECK-LABEL: test_vqabsq_m_s32:
301*9eb3cc10SSimon Tatham; CHECK:       @ %bb.0: @ %entry
302*9eb3cc10SSimon Tatham; CHECK-NEXT:    vmsr p0, r0
303*9eb3cc10SSimon Tatham; CHECK-NEXT:    vpst
304*9eb3cc10SSimon Tatham; CHECK-NEXT:    vqabst.s32 q0, q1
305*9eb3cc10SSimon Tatham; CHECK-NEXT:    bx lr
306*9eb3cc10SSimon Tathamentry:
307*9eb3cc10SSimon Tatham  %0 = zext i16 %p to i32
308*9eb3cc10SSimon Tatham  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
309*9eb3cc10SSimon Tatham  %2 = tail call <4 x i32> @llvm.arm.mve.qabs.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i1> %1, <4 x i32> %inactive)
310*9eb3cc10SSimon Tatham  ret <4 x i32> %2
311*9eb3cc10SSimon Tatham}
312*9eb3cc10SSimon Tatham
313*9eb3cc10SSimon Tathamdeclare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32)
314*9eb3cc10SSimon Tathamdeclare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
315*9eb3cc10SSimon Tathamdeclare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
316*9eb3cc10SSimon Tatham
317*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.mvn.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>)
318*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.mvn.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>)
319*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.mvn.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>)
320*9eb3cc10SSimon Tathamdeclare <8 x half> @llvm.arm.mve.neg.predicated.v8f16.v8i1(<8 x half>, <8 x i1>, <8 x half>)
321*9eb3cc10SSimon Tathamdeclare <4 x float> @llvm.arm.mve.neg.predicated.v4f32.v4i1(<4 x float>, <4 x i1>, <4 x float>)
322*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.neg.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>)
323*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.neg.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>)
324*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.neg.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>)
325*9eb3cc10SSimon Tathamdeclare <8 x half> @llvm.arm.mve.abs.predicated.v8f16.v8i1(<8 x half>, <8 x i1>, <8 x half>)
326*9eb3cc10SSimon Tathamdeclare <4 x float> @llvm.arm.mve.abs.predicated.v4f32.v4i1(<4 x float>, <4 x i1>, <4 x float>)
327*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.abs.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>)
328*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.abs.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>)
329*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.abs.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>)
330*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.qneg.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>)
331*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.qneg.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>)
332*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.qneg.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>)
333*9eb3cc10SSimon Tathamdeclare <16 x i8> @llvm.arm.mve.qabs.predicated.v16i8.v16i1(<16 x i8>, <16 x i1>, <16 x i8>)
334*9eb3cc10SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.qabs.predicated.v8i16.v8i1(<8 x i16>, <8 x i1>, <8 x i16>)
335*9eb3cc10SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.qabs.predicated.v4i32.v4i1(<4 x i32>, <4 x i1>, <4 x i32>)
336