xref: /llvm-project/llvm/test/CodeGen/Thumb2/mve-intrinsics/vornq.ll (revision 228c74076d5168a35274b04505f99e373f74f65f)
1a048bf87SMark Murray; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2a048bf87SMark Murray; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s
3a048bf87SMark Murray
4a048bf87SMark Murraydefine arm_aapcs_vfpcc <16 x i8> @test_vornq_u8(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 {
5a048bf87SMark Murray; CHECK-LABEL: test_vornq_u8:
6a048bf87SMark Murray; CHECK:       @ %bb.0: @ %entry
7a048bf87SMark Murray; CHECK-NEXT:    vorn q0, q0, q1
8a048bf87SMark Murray; CHECK-NEXT:    bx lr
9a048bf87SMark Murrayentry:
10a048bf87SMark Murray  %0 = xor <16 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
11a048bf87SMark Murray  %1 = or <16 x i8> %0, %a
12a048bf87SMark Murray  ret <16 x i8> %1
13a048bf87SMark Murray}
14a048bf87SMark Murray
15a048bf87SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vornq_s16(<8 x i16> %a, <8 x i16> %b) local_unnamed_addr #0 {
16a048bf87SMark Murray; CHECK-LABEL: test_vornq_s16:
17a048bf87SMark Murray; CHECK:       @ %bb.0: @ %entry
18a048bf87SMark Murray; CHECK-NEXT:    vorn q0, q0, q1
19a048bf87SMark Murray; CHECK-NEXT:    bx lr
20a048bf87SMark Murrayentry:
21a048bf87SMark Murray  %0 = xor <8 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
22a048bf87SMark Murray  %1 = or <8 x i16> %0, %a
23a048bf87SMark Murray  ret <8 x i16> %1
24a048bf87SMark Murray}
25a048bf87SMark Murray
26*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vornq_u32(<4 x i32> %a, <4 x i32> %b) local_unnamed_addr #0 {
27*228c7407SMark Murray; CHECK-LABEL: test_vornq_u32:
28*228c7407SMark Murray; CHECK:       @ %bb.0: @ %entry
29*228c7407SMark Murray; CHECK-NEXT:    vorn q0, q0, q1
30*228c7407SMark Murray; CHECK-NEXT:    bx lr
31*228c7407SMark Murrayentry:
32*228c7407SMark Murray  %0 = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1>
33*228c7407SMark Murray  %1 = or <4 x i32> %0, %a
34*228c7407SMark Murray  ret <4 x i32> %1
35*228c7407SMark Murray}
36*228c7407SMark Murray
37a048bf87SMark Murraydefine arm_aapcs_vfpcc <4 x float> @test_vornq_f32(<4 x float> %a, <4 x float> %b) local_unnamed_addr #0 {
38a048bf87SMark Murray; CHECK-LABEL: test_vornq_f32:
39a048bf87SMark Murray; CHECK:       @ %bb.0: @ %entry
40a048bf87SMark Murray; CHECK-NEXT:    vorn q0, q0, q1
41a048bf87SMark Murray; CHECK-NEXT:    bx lr
42a048bf87SMark Murrayentry:
43a048bf87SMark Murray  %0 = bitcast <4 x float> %a to <4 x i32>
44a048bf87SMark Murray  %1 = bitcast <4 x float> %b to <4 x i32>
45a048bf87SMark Murray  %2 = xor <4 x i32> %1, <i32 -1, i32 -1, i32 -1, i32 -1>
46a048bf87SMark Murray  %3 = or <4 x i32> %2, %0
47a048bf87SMark Murray  %4 = bitcast <4 x i32> %3 to <4 x float>
48a048bf87SMark Murray  ret <4 x float> %4
49a048bf87SMark Murray}
50a048bf87SMark Murray
51a048bf87SMark Murraydefine arm_aapcs_vfpcc <16 x i8> @test_vornq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) local_unnamed_addr #1 {
52a048bf87SMark Murray; CHECK-LABEL: test_vornq_m_s8:
53a048bf87SMark Murray; CHECK:       @ %bb.0: @ %entry
54a048bf87SMark Murray; CHECK-NEXT:    vmsr p0, r0
55a048bf87SMark Murray; CHECK-NEXT:    vpst
56a048bf87SMark Murray; CHECK-NEXT:    vornt q0, q1, q2
57a048bf87SMark Murray; CHECK-NEXT:    bx lr
58a048bf87SMark Murrayentry:
59a048bf87SMark Murray  %0 = zext i16 %p to i32
60a048bf87SMark Murray  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
61a048bf87SMark Murray  %2 = tail call <16 x i8> @llvm.arm.mve.orn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, <16 x i1> %1, <16 x i8> %inactive)
62a048bf87SMark Murray  ret <16 x i8> %2
63a048bf87SMark Murray}
64a048bf87SMark Murray
65a048bf87SMark Murraydeclare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32) #2
66a048bf87SMark Murray
67a048bf87SMark Murraydeclare <16 x i8> @llvm.arm.mve.orn.predicated.v16i8.v16i1(<16 x i8>, <16 x i8>, <16 x i1>, <16 x i8>) #2
68a048bf87SMark Murray
69a048bf87SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vornq_m_u16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) local_unnamed_addr #1 {
70a048bf87SMark Murray; CHECK-LABEL: test_vornq_m_u16:
71a048bf87SMark Murray; CHECK:       @ %bb.0: @ %entry
72a048bf87SMark Murray; CHECK-NEXT:    vmsr p0, r0
73a048bf87SMark Murray; CHECK-NEXT:    vpst
74a048bf87SMark Murray; CHECK-NEXT:    vornt q0, q1, q2
75a048bf87SMark Murray; CHECK-NEXT:    bx lr
76a048bf87SMark Murrayentry:
77a048bf87SMark Murray  %0 = zext i16 %p to i32
78a048bf87SMark Murray  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
79a048bf87SMark Murray  %2 = tail call <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, <8 x i1> %1, <8 x i16> %inactive)
80a048bf87SMark Murray  ret <8 x i16> %2
81a048bf87SMark Murray}
82a048bf87SMark Murray
83a048bf87SMark Murraydeclare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32) #2
84a048bf87SMark Murray
85a048bf87SMark Murraydeclare <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16>, <8 x i16>, <8 x i1>, <8 x i16>) #2
86a048bf87SMark Murray
87*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vornq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) local_unnamed_addr #1 {
88*228c7407SMark Murray; CHECK-LABEL: test_vornq_m_s32:
89a048bf87SMark Murray; CHECK:       @ %bb.0: @ %entry
90a048bf87SMark Murray; CHECK-NEXT:    vmsr p0, r0
91a048bf87SMark Murray; CHECK-NEXT:    vpst
92a048bf87SMark Murray; CHECK-NEXT:    vornt q0, q1, q2
93a048bf87SMark Murray; CHECK-NEXT:    bx lr
94a048bf87SMark Murrayentry:
95*228c7407SMark Murray  %0 = zext i16 %p to i32
96*228c7407SMark Murray  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
97*228c7407SMark Murray  %2 = tail call <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i1> %1, <4 x i32> %inactive)
98*228c7407SMark Murray  ret <4 x i32> %2
99a048bf87SMark Murray}
100a048bf87SMark Murray
101a048bf87SMark Murraydeclare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32) #2
102a048bf87SMark Murray
103a048bf87SMark Murraydeclare <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i1>, <4 x i32>) #2
104*228c7407SMark Murray
105*228c7407SMark Murraydefine arm_aapcs_vfpcc <8 x half> @test_vornq_m_f16(<8 x half> %inactive, <8 x half> %a, <8 x half> %b, i16 zeroext %p) local_unnamed_addr #1 {
106*228c7407SMark Murray; CHECK-LABEL: test_vornq_m_f16:
107*228c7407SMark Murray; CHECK:       @ %bb.0: @ %entry
108*228c7407SMark Murray; CHECK-NEXT:    vmsr p0, r0
109*228c7407SMark Murray; CHECK-NEXT:    vpst
110*228c7407SMark Murray; CHECK-NEXT:    vornt q0, q1, q2
111*228c7407SMark Murray; CHECK-NEXT:    bx lr
112*228c7407SMark Murrayentry:
113*228c7407SMark Murray  %0 = bitcast <8 x half> %a to <8 x i16>
114*228c7407SMark Murray  %1 = bitcast <8 x half> %b to <8 x i16>
115*228c7407SMark Murray  %2 = zext i16 %p to i32
116*228c7407SMark Murray  %3 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %2)
117*228c7407SMark Murray  %4 = bitcast <8 x half> %inactive to <8 x i16>
118*228c7407SMark Murray  %5 = tail call <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16> %0, <8 x i16> %1, <8 x i1> %3, <8 x i16> %4)
119*228c7407SMark Murray  %6 = bitcast <8 x i16> %5 to <8 x half>
120*228c7407SMark Murray  ret <8 x half> %6
121*228c7407SMark Murray}
122*228c7407SMark Murray
123*228c7407SMark Murraydefine arm_aapcs_vfpcc <16 x i8> @test_vornq_x_u8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) local_unnamed_addr #1 {
124*228c7407SMark Murray; CHECK-LABEL: test_vornq_x_u8:
125*228c7407SMark Murray; CHECK:       @ %bb.0: @ %entry
126*228c7407SMark Murray; CHECK-NEXT:    vmsr p0, r0
127*228c7407SMark Murray; CHECK-NEXT:    vpst
128*228c7407SMark Murray; CHECK-NEXT:    vornt q0, q0, q1
129*228c7407SMark Murray; CHECK-NEXT:    bx lr
130*228c7407SMark Murrayentry:
131*228c7407SMark Murray  %0 = zext i16 %p to i32
132*228c7407SMark Murray  %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0)
133*228c7407SMark Murray  %2 = tail call <16 x i8> @llvm.arm.mve.orn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, <16 x i1> %1, <16 x i8> undef)
134*228c7407SMark Murray  ret <16 x i8> %2
135*228c7407SMark Murray}
136*228c7407SMark Murray
137*228c7407SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vornq_x_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) local_unnamed_addr #1 {
138*228c7407SMark Murray; CHECK-LABEL: test_vornq_x_s16:
139*228c7407SMark Murray; CHECK:       @ %bb.0: @ %entry
140*228c7407SMark Murray; CHECK-NEXT:    vmsr p0, r0
141*228c7407SMark Murray; CHECK-NEXT:    vpst
142*228c7407SMark Murray; CHECK-NEXT:    vornt q0, q0, q1
143*228c7407SMark Murray; CHECK-NEXT:    bx lr
144*228c7407SMark Murrayentry:
145*228c7407SMark Murray  %0 = zext i16 %p to i32
146*228c7407SMark Murray  %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)
147*228c7407SMark Murray  %2 = tail call <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, <8 x i1> %1, <8 x i16> undef)
148*228c7407SMark Murray  ret <8 x i16> %2
149*228c7407SMark Murray}
150*228c7407SMark Murray
151*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vornq_x_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) local_unnamed_addr #1 {
152*228c7407SMark Murray; CHECK-LABEL: test_vornq_x_u32:
153*228c7407SMark Murray; CHECK:       @ %bb.0: @ %entry
154*228c7407SMark Murray; CHECK-NEXT:    vmsr p0, r0
155*228c7407SMark Murray; CHECK-NEXT:    vpst
156*228c7407SMark Murray; CHECK-NEXT:    vornt q0, q0, q1
157*228c7407SMark Murray; CHECK-NEXT:    bx lr
158*228c7407SMark Murrayentry:
159*228c7407SMark Murray  %0 = zext i16 %p to i32
160*228c7407SMark Murray  %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)
161*228c7407SMark Murray  %2 = tail call <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i1> %1, <4 x i32> undef)
162*228c7407SMark Murray  ret <4 x i32> %2
163*228c7407SMark Murray}
164*228c7407SMark Murray
165*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x float> @test_vornq_m_f32(<4 x float> %a, <4 x float> %b, i16 zeroext %p) local_unnamed_addr #1 {
166*228c7407SMark Murray; CHECK-LABEL: test_vornq_m_f32:
167*228c7407SMark Murray; CHECK:       @ %bb.0: @ %entry
168*228c7407SMark Murray; CHECK-NEXT:    vmsr p0, r0
169*228c7407SMark Murray; CHECK-NEXT:    vpst
170*228c7407SMark Murray; CHECK-NEXT:    vornt q0, q0, q1
171*228c7407SMark Murray; CHECK-NEXT:    bx lr
172*228c7407SMark Murrayentry:
173*228c7407SMark Murray  %0 = bitcast <4 x float> %a to <4 x i32>
174*228c7407SMark Murray  %1 = bitcast <4 x float> %b to <4 x i32>
175*228c7407SMark Murray  %2 = zext i16 %p to i32
176*228c7407SMark Murray  %3 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %2)
177*228c7407SMark Murray  %4 = tail call <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32> %0, <4 x i32> %1, <4 x i1> %3, <4 x i32> undef)
178*228c7407SMark Murray  %5 = bitcast <4 x i32> %4 to <4 x float>
179*228c7407SMark Murray  ret <4 x float> %5
180*228c7407SMark Murray}
181*228c7407SMark Murray
182