[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / ARM / fp16-vminmaxnm-vector.ll
blob6a61bb594b430835c58c3e2b41026ff138c2e1ce
1 ; RUN: llc < %s -mtriple=arm-eabi -mattr=+v8.2a,+neon,+fullfp16 -float-abi=hard | FileCheck %s
2 ; RUN: llc < %s -mtriple=thumbv7a -mattr=+v8.2a,+neon,+fullfp16 -float-abi=hard | FileCheck %s
4 ; 4-element vector
6 ; Ordered
8 define <4 x half> @test1(<4 x half> %A, <4 x half> %B) {
9 ; CHECK-LABEL: test1:
10 ; CHECK:         vmaxnm.f16 d0, d0, d1
11 ; CHECK-NEXT:    bx lr
12   %tmp3 = fcmp fast ogt <4 x half> %A, %B
13   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
14   ret <4 x half> %tmp4
17 define <4 x half> @test2(<4 x half> %A, <4 x half> %B) {
18 ; CHECK-LABEL: test2:
19 ; CHECK:         vminnm.f16 d0, d0, d1
20 ; CHECK-NEXT:    bx lr
21   %tmp3 = fcmp fast ogt <4 x half> %A, %B
22   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
23   ret <4 x half> %tmp4
26 define <4 x half> @test3(<4 x half> %A, <4 x half> %B) {
27 ; CHECK-LABEL: test3:
28 ; CHECK:         vminnm.f16 d0, d0, d1
29 ; CHECK-NEXT:    bx lr
30   %tmp3 = fcmp fast oge <4 x half> %A, %B
31   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
32   ret <4 x half> %tmp4
35 define <4 x half> @test4(<4 x half> %A, <4 x half> %B) {
36 ; CHECK-LABEL: test4:
37 ; CHECK:         vmaxnm.f16 d0, d0, d1
38 ; CHECK-NEXT:    bx lr
39   %tmp3 = fcmp fast oge <4 x half> %A, %B
40   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
41   ret <4 x half> %tmp4
44 define <4 x half> @test5(<4 x half> %A, <4 x half> %B) {
45 ; CHECK-LABEL: test5:
46 ; CHECK:         vminnm.f16 d0, d0, d1
47 ; CHECK-NEXT:    bx lr
48   %tmp3 = fcmp fast olt <4 x half> %A, %B
49   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
50   ret <4 x half> %tmp4
53 define <4 x half> @test6(<4 x half> %A, <4 x half> %B) {
54 ; CHECK-LABEL: test6:
55 ; CHECK:         vmaxnm.f16 d0, d0, d1
56 ; CHECK-NEXT:    bx lr
57   %tmp3 = fcmp fast olt <4 x half> %A, %B
58   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
59   ret <4 x half> %tmp4
62 define <4 x half> @test7(<4 x half> %A, <4 x half> %B) {
63 ; CHECK-LABEL: test7:
64 ; CHECK:         vminnm.f16 d0, d0, d1
65 ; CHECK-NEXT:    bx lr
66   %tmp3 = fcmp fast ole <4 x half> %A, %B
67   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
68   ret <4 x half> %tmp4
71 define <4 x half> @test8(<4 x half> %A, <4 x half> %B) {
72 ; CHECK-LABEL: test8:
73 ; CHECK:         vmaxnm.f16 d0, d0, d1
74 ; CHECK-NEXT:    bx lr
75   %tmp3 = fcmp fast ole <4 x half> %A, %B
76   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
77   ret <4 x half> %tmp4
80 ; Unordered
82 define <4 x half> @test11(<4 x half> %A, <4 x half> %B) {
83 ; CHECK-LABEL: test11:
84 ; CHECK:         vmaxnm.f16 d0, d0, d1
85 ; CHECK-NEXT:    bx lr
86   %tmp3 = fcmp fast ugt <4 x half> %A, %B
87   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
88   ret <4 x half> %tmp4
91 define <4 x half> @test12(<4 x half> %A, <4 x half> %B) {
92 ; CHECK-LABEL: test12:
93 ; CHECK:         vminnm.f16 d0, d0, d1
94 ; CHECK-NEXT:    bx lr
95   %tmp3 = fcmp fast ugt <4 x half> %A, %B
96   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
97   ret <4 x half> %tmp4
100 define <4 x half> @test13(<4 x half> %A, <4 x half> %B) {
101 ; CHECK-LABEL: test13:
102 ; CHECK:         vminnm.f16 d0, d0, d1
103 ; CHECK-NEXT:    bx lr
104   %tmp3 = fcmp fast uge <4 x half> %A, %B
105   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
106   ret <4 x half> %tmp4
109 define <4 x half> @test14(<4 x half> %A, <4 x half> %B) {
110 ; CHECK-LABEL: test14:
111 ; CHECK:         vmaxnm.f16 d0, d0, d1
112 ; CHECK-NEXT:    bx lr
113   %tmp3 = fcmp fast uge <4 x half> %A, %B
114   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
115   ret <4 x half> %tmp4
118 define <4 x half> @test15(<4 x half> %A, <4 x half> %B) {
119 ; CHECK-LABEL: test15:
120 ; CHECK:         vminnm.f16 d0, d0, d1
121 ; CHECK-NEXT:    bx lr
122   %tmp3 = fcmp fast ult <4 x half> %A, %B
123   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
124   ret <4 x half> %tmp4
127 define <4 x half> @test16(<4 x half> %A, <4 x half> %B) {
128 ; CHECK-LABEL: test16:
129 ; CHECK:         vmaxnm.f16 d0, d0, d1
130 ; CHECK-NEXT:    bx lr
131   %tmp3 = fcmp fast ult <4 x half> %A, %B
132   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
133   ret <4 x half> %tmp4
136 define <4 x half> @test17(<4 x half> %A, <4 x half> %B) {
137 ; CHECK-LABEL: test17:
138 ; CHECK:         vminnm.f16 d0, d0, d1
139 ; CHECK-NEXT:    bx lr
140   %tmp3 = fcmp fast ule <4 x half> %A, %B
141   %tmp4 = select <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B
142   ret <4 x half> %tmp4
145 define <4 x half> @test18(<4 x half> %A, <4 x half> %B) {
146 ; CHECK-LABEL: test18:
147 ; CHECK:         vmaxnm.f16 d0, d0, d1
148 ; CHECK-NEXT:    bx lr
149   %tmp3 = fcmp fast ule <4 x half> %A, %B
150   %tmp4 = select <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A
151   ret <4 x half> %tmp4
154 ; 8-element vector
156 ; Ordered
158 define <8 x half> @test201(<8 x half> %A, <8 x half> %B) {
159 ; CHECK-LABEL: test201:
160 ; CHECK:         vmaxnm.f16 q0, q0, q1
161 ; CHECK-NEXT:    bx lr
162   %tmp3 = fcmp fast ogt <8 x half> %A, %B
163   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
164   ret <8 x half> %tmp4
167 define <8 x half> @test202(<8 x half> %A, <8 x half> %B) {
168 ; CHECK-LABEL: test202:
169 ; CHECK:         vminnm.f16 q0, q0, q1
170 ; CHECK-NEXT:    bx lr
171   %tmp3 = fcmp fast ogt <8 x half> %A, %B
172   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
173   ret <8 x half> %tmp4
176 define <8 x half> @test203(<8 x half> %A, <8 x half> %B) {
177 ; CHECK-LABEL: test203:
178 ; CHECK:         vmaxnm.f16 q0, q0, q1
179 ; CHECK-NEXT:    bx lr
180   %tmp3 = fcmp fast oge <8 x half> %A, %B
181   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
182   ret <8 x half> %tmp4
185 define <8 x half> @test204(<8 x half> %A, <8 x half> %B) {
186 ; CHECK-LABEL: test204:
187 ; CHECK:         vminnm.f16 q0, q0, q1
188 ; CHECK-NEXT:    bx lr
189   %tmp3 = fcmp fast oge <8 x half> %A, %B
190   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
191   ret <8 x half> %tmp4
194 define <8 x half> @test205(<8 x half> %A, <8 x half> %B) {
195 ; CHECK-LABEL: test205:
196 ; CHECK:         vminnm.f16 q0, q0, q1
197 ; CHECK-NEXT:    bx lr
198   %tmp3 = fcmp fast olt <8 x half> %A, %B
199   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
200   ret <8 x half> %tmp4
203 define <8 x half> @test206(<8 x half> %A, <8 x half> %B) {
204 ; CHECK-LABEL: test206:
205 ; CHECK:         vmaxnm.f16 q0, q0, q1
206 ; CHECK-NEXT:    bx lr
207   %tmp3 = fcmp fast olt <8 x half> %A, %B
208   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
209   ret <8 x half> %tmp4
212 define <8 x half> @test207(<8 x half> %A, <8 x half> %B) {
213 ; CHECK-LABEL: test207:
214 ; CHECK:         vminnm.f16 q0, q0, q1
215 ; CHECK-NEXT:    bx lr
216   %tmp3 = fcmp fast ole <8 x half> %A, %B
217   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
218   ret <8 x half> %tmp4
221 define <8 x half> @test208(<8 x half> %A, <8 x half> %B) {
222 ; CHECK-LABEL: test208:
223 ; CHECK:         vmaxnm.f16 q0, q0, q1
224 ; CHECK-NEXT:    bx lr
225   %tmp3 = fcmp fast ole <8 x half> %A, %B
226   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
227   ret <8 x half> %tmp4
230 ; Unordered
232 define <8 x half> @test209(<8 x half> %A, <8 x half> %B) {
233 ; CHECK-LABEL: test209:
234 ; CHECK:         vmaxnm.f16 q0, q0, q1
235 ; CHECK-NEXT:    bx lr
236   %tmp3 = fcmp fast ugt <8 x half> %A, %B
237   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
238   ret <8 x half> %tmp4
241 define <8 x half> @test210(<8 x half> %A, <8 x half> %B) {
242 ; CHECK-LABEL: test210:
243 ; CHECK:         vminnm.f16 q0, q0, q1
244 ; CHECK-NEXT:    bx lr
245   %tmp3 = fcmp fast ugt <8 x half> %A, %B
246   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
247   ret <8 x half> %tmp4
250 define <8 x half> @test211(<8 x half> %A, <8 x half> %B) {
251 ; CHECK-LABEL: test211:
252 ; CHECK:         vmaxnm.f16 q0, q0, q1
253 ; CHECK-NEXT:    bx lr
254   %tmp3 = fcmp fast uge <8 x half> %A, %B
255   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
256   ret <8 x half> %tmp4
259 define <8 x half> @test214(<8 x half> %A, <8 x half> %B) {
260 ; CHECK-LABEL: test214:
261 ; CHECK:         vminnm.f16 q0, q0, q1
262 ; CHECK-NEXT:    bx lr
263   %tmp3 = fcmp fast uge <8 x half> %A, %B
264   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
265   ret <8 x half> %tmp4
268 define <8 x half> @test215(<8 x half> %A, <8 x half> %B) {
269 ; CHECK-LABEL: test215:
270 ; CHECK:         vminnm.f16 q0, q0, q1
271 ; CHECK-NEXT:    bx lr
272   %tmp3 = fcmp fast ult <8 x half> %A, %B
273   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
274   ret <8 x half> %tmp4
277 define <8 x half> @test216(<8 x half> %A, <8 x half> %B) {
278 ; CHECK-LABEL: test216:
279 ; CHECK:         vmaxnm.f16 q0, q0, q1
280 ; CHECK-NEXT:    bx lr
281   %tmp3 = fcmp fast ult <8 x half> %A, %B
282   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
283   ret <8 x half> %tmp4
286 define <8 x half> @test217(<8 x half> %A, <8 x half> %B) {
287 ; CHECK-LABEL: test217:
288 ; CHECK:         vminnm.f16 q0, q0, q1
289 ; CHECK-NEXT:    bx lr
290   %tmp3 = fcmp fast ule <8 x half> %A, %B
291   %tmp4 = select <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B
292   ret <8 x half> %tmp4
295 define <8 x half> @test218(<8 x half> %A, <8 x half> %B) {
296 ; CHECK-LABEL: test218:
297 ; CHECK:         vmaxnm.f16 q0, q0, q1
298 ; CHECK-NEXT:    bx lr
299   %tmp3 = fcmp fast ule <8 x half> %A, %B
300   %tmp4 = select <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A
301   ret <8 x half> %tmp4