1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=armv8-eabi | FileCheck %s
3
4declare float @llvm.minnum.f32(float, float)
5declare float @llvm.maxnum.f32(float, float)
6declare float @llvm.minimum.f32(float, float)
7declare float @llvm.maximum.f32(float, float)
8declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>)
9declare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>)
10declare <2 x float> @llvm.minimum.v2f32(<2 x float>, <2 x float>)
11declare <2 x float> @llvm.maximum.v2f32(<2 x float>, <2 x float>)
12
13define float @test_minnum_const_nan(float %x) {
14; CHECK-LABEL: test_minnum_const_nan:
15; CHECK:       @ %bb.0:
16; CHECK-NEXT:    bx lr
17  %r = call float @llvm.minnum.f32(float %x, float 0x7fff000000000000)
18  ret float %r
19}
20
21define float @test_maxnum_const_nan(float %x) {
22; CHECK-LABEL: test_maxnum_const_nan:
23; CHECK:       @ %bb.0:
24; CHECK-NEXT:    bx lr
25  %r = call float @llvm.maxnum.f32(float %x, float 0x7fff000000000000)
26  ret float %r
27}
28
29define float @test_maximum_const_nan(float %x) {
30; CHECK-LABEL: test_maximum_const_nan:
31; CHECK:       @ %bb.0:
32; CHECK-NEXT:    movw r0, #0
33; CHECK-NEXT:    movt r0, #32760
34; CHECK-NEXT:    bx lr
35  %r = call float @llvm.maximum.f32(float %x, float 0x7fff000000000000)
36  ret float %r
37}
38
39define float @test_minimum_const_nan(float %x) {
40; CHECK-LABEL: test_minimum_const_nan:
41; CHECK:       @ %bb.0:
42; CHECK-NEXT:    movw r0, #0
43; CHECK-NEXT:    movt r0, #32760
44; CHECK-NEXT:    bx lr
45  %r = call float @llvm.minimum.f32(float %x, float 0x7fff000000000000)
46  ret float %r
47}
48
49define float @test_minnum_const_inf(float %x) {
50; CHECK-LABEL: test_minnum_const_inf:
51; CHECK:       @ %bb.0:
52; CHECK-NEXT:    vldr s0, .LCPI4_0
53; CHECK-NEXT:    vmov s2, r0
54; CHECK-NEXT:    vminnm.f32 s0, s2, s0
55; CHECK-NEXT:    vmov r0, s0
56; CHECK-NEXT:    bx lr
57; CHECK-NEXT:    .p2align 2
58; CHECK-NEXT:  @ %bb.1:
59; CHECK-NEXT:  .LCPI4_0:
60; CHECK-NEXT:    .long 0x7f800000 @ float +Inf
61  %r = call float @llvm.minnum.f32(float %x, float 0x7ff0000000000000)
62  ret float %r
63}
64
65define float @test_maxnum_const_inf(float %x) {
66; CHECK-LABEL: test_maxnum_const_inf:
67; CHECK:       @ %bb.0:
68; CHECK-NEXT:    movw r0, #0
69; CHECK-NEXT:    movt r0, #32640
70; CHECK-NEXT:    bx lr
71  %r = call float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000)
72  ret float %r
73}
74
75define float @test_maximum_const_inf(float %x) {
76; CHECK-LABEL: test_maximum_const_inf:
77; CHECK:       @ %bb.0:
78; CHECK-NEXT:    vldr s0, .LCPI6_0
79; CHECK-NEXT:    vmov s2, r0
80; CHECK-NEXT:    vmax.f32 d0, d1, d0
81; CHECK-NEXT:    vmov r0, s0
82; CHECK-NEXT:    bx lr
83; CHECK-NEXT:    .p2align 2
84; CHECK-NEXT:  @ %bb.1:
85; CHECK-NEXT:  .LCPI6_0:
86; CHECK-NEXT:    .long 0x7f800000 @ float +Inf
87  %r = call float @llvm.maximum.f32(float %x, float 0x7ff0000000000000)
88  ret float %r
89}
90
91define float @test_minimum_const_inf(float %x) {
92; CHECK-LABEL: test_minimum_const_inf:
93; CHECK:       @ %bb.0:
94; CHECK-NEXT:    bx lr
95  %r = call float @llvm.minimum.f32(float %x, float 0x7ff0000000000000)
96  ret float %r
97}
98
99define float @test_minnum_const_neg_inf(float %x) {
100; CHECK-LABEL: test_minnum_const_neg_inf:
101; CHECK:       @ %bb.0:
102; CHECK-NEXT:    movw r0, #0
103; CHECK-NEXT:    movt r0, #65408
104; CHECK-NEXT:    bx lr
105  %r = call float @llvm.minnum.f32(float %x, float 0xfff0000000000000)
106  ret float %r
107}
108
109define float @test_maxnum_const_neg_inf(float %x) {
110; CHECK-LABEL: test_maxnum_const_neg_inf:
111; CHECK:       @ %bb.0:
112; CHECK-NEXT:    vldr s0, .LCPI9_0
113; CHECK-NEXT:    vmov s2, r0
114; CHECK-NEXT:    vmaxnm.f32 s0, s2, s0
115; CHECK-NEXT:    vmov r0, s0
116; CHECK-NEXT:    bx lr
117; CHECK-NEXT:    .p2align 2
118; CHECK-NEXT:  @ %bb.1:
119; CHECK-NEXT:  .LCPI9_0:
120; CHECK-NEXT:    .long 0xff800000 @ float -Inf
121  %r = call float @llvm.maxnum.f32(float %x, float 0xfff0000000000000)
122  ret float %r
123}
124
125define float @test_maximum_const_neg_inf(float %x) {
126; CHECK-LABEL: test_maximum_const_neg_inf:
127; CHECK:       @ %bb.0:
128; CHECK-NEXT:    bx lr
129  %r = call float @llvm.maximum.f32(float %x, float 0xfff0000000000000)
130  ret float %r
131}
132
133define float @test_minimum_const_neg_inf(float %x) {
134; CHECK-LABEL: test_minimum_const_neg_inf:
135; CHECK:       @ %bb.0:
136; CHECK-NEXT:    vldr s0, .LCPI11_0
137; CHECK-NEXT:    vmov s2, r0
138; CHECK-NEXT:    vmin.f32 d0, d1, d0
139; CHECK-NEXT:    vmov r0, s0
140; CHECK-NEXT:    bx lr
141; CHECK-NEXT:    .p2align 2
142; CHECK-NEXT:  @ %bb.1:
143; CHECK-NEXT:  .LCPI11_0:
144; CHECK-NEXT:    .long 0xff800000 @ float -Inf
145  %r = call float @llvm.minimum.f32(float %x, float 0xfff0000000000000)
146  ret float %r
147}
148
149define float @test_minnum_const_inf_nnan(float %x) {
150; CHECK-LABEL: test_minnum_const_inf_nnan:
151; CHECK:       @ %bb.0:
152; CHECK-NEXT:    bx lr
153  %r = call nnan float @llvm.minnum.f32(float %x, float 0x7ff0000000000000)
154  ret float %r
155}
156
157define float @test_maxnum_const_inf_nnan(float %x) {
158; CHECK-LABEL: test_maxnum_const_inf_nnan:
159; CHECK:       @ %bb.0:
160; CHECK-NEXT:    movw r0, #0
161; CHECK-NEXT:    movt r0, #32640
162; CHECK-NEXT:    bx lr
163  %r = call nnan float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000)
164  ret float %r
165}
166
167define float @test_maximum_const_inf_nnan(float %x) {
168; CHECK-LABEL: test_maximum_const_inf_nnan:
169; CHECK:       @ %bb.0:
170; CHECK-NEXT:    movw r0, #0
171; CHECK-NEXT:    movt r0, #32640
172; CHECK-NEXT:    bx lr
173  %r = call nnan float @llvm.maximum.f32(float %x, float 0x7ff0000000000000)
174  ret float %r
175}
176
177define float @test_minimum_const_inf_nnan(float %x) {
178; CHECK-LABEL: test_minimum_const_inf_nnan:
179; CHECK:       @ %bb.0:
180; CHECK-NEXT:    bx lr
181  %r = call nnan float @llvm.minimum.f32(float %x, float 0x7ff0000000000000)
182  ret float %r
183}
184
185define float @test_minnum_const_inf_nnan_comm(float %x) {
186; CHECK-LABEL: test_minnum_const_inf_nnan_comm:
187; CHECK:       @ %bb.0:
188; CHECK-NEXT:    bx lr
189  %r = call nnan float @llvm.minnum.f32(float 0x7ff0000000000000, float %x)
190  ret float %r
191}
192
193define float @test_maxnum_const_inf_nnan_comm(float %x) {
194; CHECK-LABEL: test_maxnum_const_inf_nnan_comm:
195; CHECK:       @ %bb.0:
196; CHECK-NEXT:    movw r0, #0
197; CHECK-NEXT:    movt r0, #32640
198; CHECK-NEXT:    bx lr
199  %r = call nnan float @llvm.maxnum.f32(float 0x7ff0000000000000, float %x)
200  ret float %r
201}
202
203define float @test_maximum_const_inf_nnan_comm(float %x) {
204; CHECK-LABEL: test_maximum_const_inf_nnan_comm:
205; CHECK:       @ %bb.0:
206; CHECK-NEXT:    movw r0, #0
207; CHECK-NEXT:    movt r0, #32640
208; CHECK-NEXT:    bx lr
209  %r = call nnan float @llvm.maximum.f32(float 0x7ff0000000000000, float %x)
210  ret float %r
211}
212
213define float @test_minimum_const_inf_nnan_comm(float %x) {
214; CHECK-LABEL: test_minimum_const_inf_nnan_comm:
215; CHECK:       @ %bb.0:
216; CHECK-NEXT:    bx lr
217  %r = call nnan float @llvm.minimum.f32(float 0x7ff0000000000000, float %x)
218  ret float %r
219}
220
221define <2 x float> @test_minnum_const_inf_nnan_comm_vec(<2 x float> %x) {
222; CHECK-LABEL: test_minnum_const_inf_nnan_comm_vec:
223; CHECK:       @ %bb.0:
224; CHECK-NEXT:    bx lr
225  %r = call nnan <2 x float> @llvm.minnum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x)
226  ret <2 x float> %r
227}
228
229define <2 x float> @test_maxnum_const_inf_nnan_comm_vec(<2 x float> %x) {
230; CHECK-LABEL: test_maxnum_const_inf_nnan_comm_vec:
231; CHECK:       @ %bb.0:
232; CHECK-NEXT:    vldr d16, .LCPI21_0
233; CHECK-NEXT:    vmov r0, r1, d16
234; CHECK-NEXT:    bx lr
235; CHECK-NEXT:    .p2align 3
236; CHECK-NEXT:  @ %bb.1:
237; CHECK-NEXT:  .LCPI21_0:
238; CHECK-NEXT:    .long 0x7f800000 @ float +Inf
239; CHECK-NEXT:    .long 0x7f800000 @ float +Inf
240  %r = call nnan <2 x float> @llvm.maxnum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x)
241  ret <2 x float> %r
242}
243
244define <2 x float> @test_maximum_const_inf_nnan_comm_vec(<2 x float> %x) {
245; CHECK-LABEL: test_maximum_const_inf_nnan_comm_vec:
246; CHECK:       @ %bb.0:
247; CHECK-NEXT:    vldr d16, .LCPI22_0
248; CHECK-NEXT:    vmov r0, r1, d16
249; CHECK-NEXT:    bx lr
250; CHECK-NEXT:    .p2align 3
251; CHECK-NEXT:  @ %bb.1:
252; CHECK-NEXT:  .LCPI22_0:
253; CHECK-NEXT:    .long 0x7f800000 @ float +Inf
254; CHECK-NEXT:    .long 0x7f800000 @ float +Inf
255  %r = call nnan <2 x float> @llvm.maximum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x)
256  ret <2 x float> %r
257}
258
259define <2 x float> @test_minimum_const_inf_nnan_comm_vec(<2 x float> %x) {
260; CHECK-LABEL: test_minimum_const_inf_nnan_comm_vec:
261; CHECK:       @ %bb.0:
262; CHECK-NEXT:    bx lr
263  %r = call nnan <2 x float> @llvm.minimum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x)
264  ret <2 x float> %r
265}
266
267define float @test_minnum_const_neg_inf_nnan(float %x) {
268; CHECK-LABEL: test_minnum_const_neg_inf_nnan:
269; CHECK:       @ %bb.0:
270; CHECK-NEXT:    movw r0, #0
271; CHECK-NEXT:    movt r0, #65408
272; CHECK-NEXT:    bx lr
273  %r = call nnan float @llvm.minnum.f32(float %x, float 0xfff0000000000000)
274  ret float %r
275}
276
277define float @test_maxnum_const_neg_inf_nnan(float %x) {
278; CHECK-LABEL: test_maxnum_const_neg_inf_nnan:
279; CHECK:       @ %bb.0:
280; CHECK-NEXT:    bx lr
281  %r = call nnan float @llvm.maxnum.f32(float %x, float 0xfff0000000000000)
282  ret float %r
283}
284
285define float @test_maximum_const_neg_inf_nnan(float %x) {
286; CHECK-LABEL: test_maximum_const_neg_inf_nnan:
287; CHECK:       @ %bb.0:
288; CHECK-NEXT:    bx lr
289  %r = call nnan float @llvm.maximum.f32(float %x, float 0xfff0000000000000)
290  ret float %r
291}
292
293define float @test_minimum_const_neg_inf_nnan(float %x) {
294; CHECK-LABEL: test_minimum_const_neg_inf_nnan:
295; CHECK:       @ %bb.0:
296; CHECK-NEXT:    movw r0, #0
297; CHECK-NEXT:    movt r0, #65408
298; CHECK-NEXT:    bx lr
299  %r = call nnan float @llvm.minimum.f32(float %x, float 0xfff0000000000000)
300  ret float %r
301}
302
303define float @test_minnum_const_max(float %x) {
304; CHECK-LABEL: test_minnum_const_max:
305; CHECK:       @ %bb.0:
306; CHECK-NEXT:    vldr s0, .LCPI28_0
307; CHECK-NEXT:    vmov s2, r0
308; CHECK-NEXT:    vminnm.f32 s0, s2, s0
309; CHECK-NEXT:    vmov r0, s0
310; CHECK-NEXT:    bx lr
311; CHECK-NEXT:    .p2align 2
312; CHECK-NEXT:  @ %bb.1:
313; CHECK-NEXT:  .LCPI28_0:
314; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
315  %r = call float @llvm.minnum.f32(float %x, float 0x47efffffe0000000)
316  ret float %r
317}
318
319define float @test_maxnum_const_max(float %x) {
320; CHECK-LABEL: test_maxnum_const_max:
321; CHECK:       @ %bb.0:
322; CHECK-NEXT:    vldr s0, .LCPI29_0
323; CHECK-NEXT:    vmov s2, r0
324; CHECK-NEXT:    vmaxnm.f32 s0, s2, s0
325; CHECK-NEXT:    vmov r0, s0
326; CHECK-NEXT:    bx lr
327; CHECK-NEXT:    .p2align 2
328; CHECK-NEXT:  @ %bb.1:
329; CHECK-NEXT:  .LCPI29_0:
330; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
331  %r = call float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000)
332  ret float %r
333}
334
335define float @test_maximum_const_max(float %x) {
336; CHECK-LABEL: test_maximum_const_max:
337; CHECK:       @ %bb.0:
338; CHECK-NEXT:    vldr s0, .LCPI30_0
339; CHECK-NEXT:    vmov s2, r0
340; CHECK-NEXT:    vmax.f32 d0, d1, d0
341; CHECK-NEXT:    vmov r0, s0
342; CHECK-NEXT:    bx lr
343; CHECK-NEXT:    .p2align 2
344; CHECK-NEXT:  @ %bb.1:
345; CHECK-NEXT:  .LCPI30_0:
346; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
347  %r = call float @llvm.maximum.f32(float %x, float 0x47efffffe0000000)
348  ret float %r
349}
350
351define float @test_minimum_const_max(float %x) {
352; CHECK-LABEL: test_minimum_const_max:
353; CHECK:       @ %bb.0:
354; CHECK-NEXT:    vldr s0, .LCPI31_0
355; CHECK-NEXT:    vmov s2, r0
356; CHECK-NEXT:    vmin.f32 d0, d1, d0
357; CHECK-NEXT:    vmov r0, s0
358; CHECK-NEXT:    bx lr
359; CHECK-NEXT:    .p2align 2
360; CHECK-NEXT:  @ %bb.1:
361; CHECK-NEXT:  .LCPI31_0:
362; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
363  %r = call float @llvm.minimum.f32(float %x, float 0x47efffffe0000000)
364  ret float %r
365}
366
367define float @test_minnum_const_neg_max(float %x) {
368; CHECK-LABEL: test_minnum_const_neg_max:
369; CHECK:       @ %bb.0:
370; CHECK-NEXT:    vldr s0, .LCPI32_0
371; CHECK-NEXT:    vmov s2, r0
372; CHECK-NEXT:    vminnm.f32 s0, s2, s0
373; CHECK-NEXT:    vmov r0, s0
374; CHECK-NEXT:    bx lr
375; CHECK-NEXT:    .p2align 2
376; CHECK-NEXT:  @ %bb.1:
377; CHECK-NEXT:  .LCPI32_0:
378; CHECK-NEXT:    .long 0xff7fffff @ float -3.40282347E+38
379  %r = call float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000)
380  ret float %r
381}
382
383define float @test_maxnum_const_neg_max(float %x) {
384; CHECK-LABEL: test_maxnum_const_neg_max:
385; CHECK:       @ %bb.0:
386; CHECK-NEXT:    vldr s0, .LCPI33_0
387; CHECK-NEXT:    vmov s2, r0
388; CHECK-NEXT:    vmaxnm.f32 s0, s2, s0
389; CHECK-NEXT:    vmov r0, s0
390; CHECK-NEXT:    bx lr
391; CHECK-NEXT:    .p2align 2
392; CHECK-NEXT:  @ %bb.1:
393; CHECK-NEXT:  .LCPI33_0:
394; CHECK-NEXT:    .long 0xff7fffff @ float -3.40282347E+38
395  %r = call float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000)
396  ret float %r
397}
398
399define float @test_maximum_const_neg_max(float %x) {
400; CHECK-LABEL: test_maximum_const_neg_max:
401; CHECK:       @ %bb.0:
402; CHECK-NEXT:    vldr s0, .LCPI34_0
403; CHECK-NEXT:    vmov s2, r0
404; CHECK-NEXT:    vmax.f32 d0, d1, d0
405; CHECK-NEXT:    vmov r0, s0
406; CHECK-NEXT:    bx lr
407; CHECK-NEXT:    .p2align 2
408; CHECK-NEXT:  @ %bb.1:
409; CHECK-NEXT:  .LCPI34_0:
410; CHECK-NEXT:    .long 0xff7fffff @ float -3.40282347E+38
411  %r = call float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000)
412  ret float %r
413}
414
415define float @test_minimum_const_neg_max(float %x) {
416; CHECK-LABEL: test_minimum_const_neg_max:
417; CHECK:       @ %bb.0:
418; CHECK-NEXT:    vldr s0, .LCPI35_0
419; CHECK-NEXT:    vmov s2, r0
420; CHECK-NEXT:    vmin.f32 d0, d1, d0
421; CHECK-NEXT:    vmov r0, s0
422; CHECK-NEXT:    bx lr
423; CHECK-NEXT:    .p2align 2
424; CHECK-NEXT:  @ %bb.1:
425; CHECK-NEXT:  .LCPI35_0:
426; CHECK-NEXT:    .long 0xff7fffff @ float -3.40282347E+38
427  %r = call float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000)
428  ret float %r
429}
430
431define float @test_minnum_const_max_ninf(float %x) {
432; CHECK-LABEL: test_minnum_const_max_ninf:
433; CHECK:       @ %bb.0:
434; CHECK-NEXT:    vldr s0, .LCPI36_0
435; CHECK-NEXT:    vmov s2, r0
436; CHECK-NEXT:    vminnm.f32 s0, s2, s0
437; CHECK-NEXT:    vmov r0, s0
438; CHECK-NEXT:    bx lr
439; CHECK-NEXT:    .p2align 2
440; CHECK-NEXT:  @ %bb.1:
441; CHECK-NEXT:  .LCPI36_0:
442; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
443  %r = call ninf float @llvm.minnum.f32(float %x, float 0x47efffffe0000000)
444  ret float %r
445}
446
447define float @test_maxnum_const_max_ninf(float %x) {
448; CHECK-LABEL: test_maxnum_const_max_ninf:
449; CHECK:       @ %bb.0:
450; CHECK-NEXT:    movw r0, #65535
451; CHECK-NEXT:    movt r0, #32639
452; CHECK-NEXT:    bx lr
453  %r = call ninf float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000)
454  ret float %r
455}
456
457define float @test_maximum_const_max_ninf(float %x) {
458; CHECK-LABEL: test_maximum_const_max_ninf:
459; CHECK:       @ %bb.0:
460; CHECK-NEXT:    vldr s0, .LCPI38_0
461; CHECK-NEXT:    vmov s2, r0
462; CHECK-NEXT:    vmax.f32 d0, d1, d0
463; CHECK-NEXT:    vmov r0, s0
464; CHECK-NEXT:    bx lr
465; CHECK-NEXT:    .p2align 2
466; CHECK-NEXT:  @ %bb.1:
467; CHECK-NEXT:  .LCPI38_0:
468; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
469  %r = call ninf float @llvm.maximum.f32(float %x, float 0x47efffffe0000000)
470  ret float %r
471}
472
473define float @test_minimum_const_max_ninf(float %x) {
474; CHECK-LABEL: test_minimum_const_max_ninf:
475; CHECK:       @ %bb.0:
476; CHECK-NEXT:    bx lr
477  %r = call ninf float @llvm.minimum.f32(float %x, float 0x47efffffe0000000)
478  ret float %r
479}
480
481define float @test_minnum_const_neg_max_ninf(float %x) {
482; CHECK-LABEL: test_minnum_const_neg_max_ninf:
483; CHECK:       @ %bb.0:
484; CHECK-NEXT:    mvn r0, #8388608
485; CHECK-NEXT:    bx lr
486  %r = call ninf float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000)
487  ret float %r
488}
489
490define float @test_maxnum_const_neg_max_ninf(float %x) {
491; CHECK-LABEL: test_maxnum_const_neg_max_ninf:
492; CHECK:       @ %bb.0:
493; CHECK-NEXT:    vldr s0, .LCPI41_0
494; CHECK-NEXT:    vmov s2, r0
495; CHECK-NEXT:    vmaxnm.f32 s0, s2, s0
496; CHECK-NEXT:    vmov r0, s0
497; CHECK-NEXT:    bx lr
498; CHECK-NEXT:    .p2align 2
499; CHECK-NEXT:  @ %bb.1:
500; CHECK-NEXT:  .LCPI41_0:
501; CHECK-NEXT:    .long 0xff7fffff @ float -3.40282347E+38
502  %r = call ninf float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000)
503  ret float %r
504}
505
506define float @test_maximum_const_neg_max_ninf(float %x) {
507; CHECK-LABEL: test_maximum_const_neg_max_ninf:
508; CHECK:       @ %bb.0:
509; CHECK-NEXT:    bx lr
510  %r = call ninf float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000)
511  ret float %r
512}
513
514define float @test_minimum_const_neg_max_ninf(float %x) {
515; CHECK-LABEL: test_minimum_const_neg_max_ninf:
516; CHECK:       @ %bb.0:
517; CHECK-NEXT:    vldr s0, .LCPI43_0
518; CHECK-NEXT:    vmov s2, r0
519; CHECK-NEXT:    vmin.f32 d0, d1, d0
520; CHECK-NEXT:    vmov r0, s0
521; CHECK-NEXT:    bx lr
522; CHECK-NEXT:    .p2align 2
523; CHECK-NEXT:  @ %bb.1:
524; CHECK-NEXT:  .LCPI43_0:
525; CHECK-NEXT:    .long 0xff7fffff @ float -3.40282347E+38
526  %r = call ninf float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000)
527  ret float %r
528}
529
530define float @test_minnum_const_max_nnan_ninf(float %x) {
531; CHECK-LABEL: test_minnum_const_max_nnan_ninf:
532; CHECK:       @ %bb.0:
533; CHECK-NEXT:    bx lr
534  %r = call nnan ninf float @llvm.minnum.f32(float %x, float 0x47efffffe0000000)
535  ret float %r
536}
537
538define float @test_maxnum_const_max_nnan_ninf(float %x) {
539; CHECK-LABEL: test_maxnum_const_max_nnan_ninf:
540; CHECK:       @ %bb.0:
541; CHECK-NEXT:    movw r0, #65535
542; CHECK-NEXT:    movt r0, #32639
543; CHECK-NEXT:    bx lr
544  %r = call nnan ninf float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000)
545  ret float %r
546}
547
548define float @test_maximum_const_max_nnan_ninf(float %x) {
549; CHECK-LABEL: test_maximum_const_max_nnan_ninf:
550; CHECK:       @ %bb.0:
551; CHECK-NEXT:    movw r0, #65535
552; CHECK-NEXT:    movt r0, #32639
553; CHECK-NEXT:    bx lr
554  %r = call nnan ninf float @llvm.maximum.f32(float %x, float 0x47efffffe0000000)
555  ret float %r
556}
557
558define float @test_minimum_const_max_nnan_ninf(float %x) {
559; CHECK-LABEL: test_minimum_const_max_nnan_ninf:
560; CHECK:       @ %bb.0:
561; CHECK-NEXT:    bx lr
562  %r = call nnan ninf float @llvm.minimum.f32(float %x, float 0x47efffffe0000000)
563  ret float %r
564}
565
566define float @test_minnum_const_neg_max_nnan_ninf(float %x) {
567; CHECK-LABEL: test_minnum_const_neg_max_nnan_ninf:
568; CHECK:       @ %bb.0:
569; CHECK-NEXT:    mvn r0, #8388608
570; CHECK-NEXT:    bx lr
571  %r = call nnan ninf float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000)
572  ret float %r
573}
574
575define float @test_maxnum_const_neg_max_nnan_ninf(float %x) {
576; CHECK-LABEL: test_maxnum_const_neg_max_nnan_ninf:
577; CHECK:       @ %bb.0:
578; CHECK-NEXT:    bx lr
579  %r = call nnan ninf float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000)
580  ret float %r
581}
582
583define float @test_maximum_const_neg_max_nnan_ninf(float %x) {
584; CHECK-LABEL: test_maximum_const_neg_max_nnan_ninf:
585; CHECK:       @ %bb.0:
586; CHECK-NEXT:    bx lr
587  %r = call nnan ninf float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000)
588  ret float %r
589}
590
591define float @test_minimum_const_neg_max_nnan_ninf(float %x) {
592; CHECK-LABEL: test_minimum_const_neg_max_nnan_ninf:
593; CHECK:       @ %bb.0:
594; CHECK-NEXT:    mvn r0, #8388608
595; CHECK-NEXT:    bx lr
596  %r = call nnan ninf float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000)
597  ret float %r
598}
599