@@ -9,23 +9,35 @@ target triple = "aarch64-unknown-linux-gnu"
99define double @t1 (double %x ) {
1010; CHECK-LABEL: t1:
1111; CHECK: // %bb.0: // %entry
12- ; CHECK-NEXT: ptrue p0.d
13- ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
14- ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d
15- ; CHECK-NEXT: scvtf z0.d, p0/m, z0.d
16- ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
12+ ; CHECK-NEXT: mov x8, #-4332462841530417152 // =0xc3e0000000000000
13+ ; CHECK-NEXT: fmov d1, x8
14+ ; CHECK-NEXT: mov x8, #4890909195324358655 // =0x43dfffffffffffff
15+ ; CHECK-NEXT: fmaxnm d0, d0, d1
16+ ; CHECK-NEXT: fmov d1, x8
17+ ; CHECK-NEXT: fminnm d0, d0, d1
18+ ; CHECK-NEXT: frintz d0, d0
1719; CHECK-NEXT: ret
1820;
1921; USE-NEON-NO-GPRS-LABEL: t1:
2022; USE-NEON-NO-GPRS: // %bb.0: // %entry
21- ; USE-NEON-NO-GPRS-NEXT: fcvtzs d0, d0
22- ; USE-NEON-NO-GPRS-NEXT: scvtf d0, d0
23+ ; USE-NEON-NO-GPRS-NEXT: mov x8, #-4332462841530417152 // =0xc3e0000000000000
24+ ; USE-NEON-NO-GPRS-NEXT: fmov d1, x8
25+ ; USE-NEON-NO-GPRS-NEXT: mov x8, #4890909195324358655 // =0x43dfffffffffffff
26+ ; USE-NEON-NO-GPRS-NEXT: fmaxnm d0, d0, d1
27+ ; USE-NEON-NO-GPRS-NEXT: fmov d1, x8
28+ ; USE-NEON-NO-GPRS-NEXT: fminnm d0, d0, d1
29+ ; USE-NEON-NO-GPRS-NEXT: frintz d0, d0
2330; USE-NEON-NO-GPRS-NEXT: ret
2431;
2532; NONEON-NOSVE-LABEL: t1:
2633; NONEON-NOSVE: // %bb.0: // %entry
27- ; NONEON-NOSVE-NEXT: fcvtzs x8, d0
28- ; NONEON-NOSVE-NEXT: scvtf d0, x8
34+ ; NONEON-NOSVE-NEXT: mov x8, #-4332462841530417152 // =0xc3e0000000000000
35+ ; NONEON-NOSVE-NEXT: fmov d1, x8
36+ ; NONEON-NOSVE-NEXT: mov x8, #4890909195324358655 // =0x43dfffffffffffff
37+ ; NONEON-NOSVE-NEXT: fmaxnm d0, d0, d1
38+ ; NONEON-NOSVE-NEXT: fmov d1, x8
39+ ; NONEON-NOSVE-NEXT: fminnm d0, d0, d1
40+ ; NONEON-NOSVE-NEXT: frintz d0, d0
2941; NONEON-NOSVE-NEXT: ret
3042entry:
3143 %conv = fptosi double %x to i64
@@ -36,23 +48,35 @@ entry:
3648define float @t2 (float %x ) {
3749; CHECK-LABEL: t2:
3850; CHECK: // %bb.0: // %entry
39- ; CHECK-NEXT: ptrue p0.s
40- ; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0
41- ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s
42- ; CHECK-NEXT: scvtf z0.s, p0/m, z0.s
43- ; CHECK-NEXT: // kill: def $s0 killed $s0 killed $z0
51+ ; CHECK-NEXT: mov w8, #-822083584 // =0xcf000000
52+ ; CHECK-NEXT: fmov s1, w8
53+ ; CHECK-NEXT: mov w8, #1325400063 // =0x4effffff
54+ ; CHECK-NEXT: fmaxnm s0, s0, s1
55+ ; CHECK-NEXT: fmov s1, w8
56+ ; CHECK-NEXT: fminnm s0, s0, s1
57+ ; CHECK-NEXT: frintz s0, s0
4458; CHECK-NEXT: ret
4559;
4660; USE-NEON-NO-GPRS-LABEL: t2:
4761; USE-NEON-NO-GPRS: // %bb.0: // %entry
48- ; USE-NEON-NO-GPRS-NEXT: fcvtzs s0, s0
49- ; USE-NEON-NO-GPRS-NEXT: scvtf s0, s0
62+ ; USE-NEON-NO-GPRS-NEXT: mov w8, #-822083584 // =0xcf000000
63+ ; USE-NEON-NO-GPRS-NEXT: fmov s1, w8
64+ ; USE-NEON-NO-GPRS-NEXT: mov w8, #1325400063 // =0x4effffff
65+ ; USE-NEON-NO-GPRS-NEXT: fmaxnm s0, s0, s1
66+ ; USE-NEON-NO-GPRS-NEXT: fmov s1, w8
67+ ; USE-NEON-NO-GPRS-NEXT: fminnm s0, s0, s1
68+ ; USE-NEON-NO-GPRS-NEXT: frintz s0, s0
5069; USE-NEON-NO-GPRS-NEXT: ret
5170;
5271; NONEON-NOSVE-LABEL: t2:
5372; NONEON-NOSVE: // %bb.0: // %entry
54- ; NONEON-NOSVE-NEXT: fcvtzs w8, s0
55- ; NONEON-NOSVE-NEXT: scvtf s0, w8
73+ ; NONEON-NOSVE-NEXT: mov w8, #-822083584 // =0xcf000000
74+ ; NONEON-NOSVE-NEXT: fmov s1, w8
75+ ; NONEON-NOSVE-NEXT: mov w8, #1325400063 // =0x4effffff
76+ ; NONEON-NOSVE-NEXT: fmaxnm s0, s0, s1
77+ ; NONEON-NOSVE-NEXT: fmov s1, w8
78+ ; NONEON-NOSVE-NEXT: fminnm s0, s0, s1
79+ ; NONEON-NOSVE-NEXT: frintz s0, s0
5680; NONEON-NOSVE-NEXT: ret
5781entry:
5882 %conv = fptosi float %x to i32
@@ -63,18 +87,36 @@ entry:
6387define half @t3 (half %x ) {
6488; CHECK-LABEL: t3:
6589; CHECK: // %bb.0: // %entry
66- ; CHECK-NEXT: ptrue p0.s
67- ; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0
68- ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h
69- ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s
70- ; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z0
90+ ; CHECK-NEXT: adrp x8, .LCPI2_0
91+ ; CHECK-NEXT: ldr h1, [x8, :lo12:.LCPI2_0]
92+ ; CHECK-NEXT: adrp x8, .LCPI2_1
93+ ; CHECK-NEXT: fmaxnm h0, h0, h1
94+ ; CHECK-NEXT: ldr h1, [x8, :lo12:.LCPI2_1]
95+ ; CHECK-NEXT: fminnm h0, h0, h1
96+ ; CHECK-NEXT: frintz h0, h0
7197; CHECK-NEXT: ret
7298;
99+ ; USE-NEON-NO-GPRS-LABEL: t3:
100+ ; USE-NEON-NO-GPRS: // %bb.0: // %entry
101+ ; USE-NEON-NO-GPRS-NEXT: adrp x8, .LCPI2_0
102+ ; USE-NEON-NO-GPRS-NEXT: ldr h1, [x8, :lo12:.LCPI2_0]
103+ ; USE-NEON-NO-GPRS-NEXT: adrp x8, .LCPI2_1
104+ ; USE-NEON-NO-GPRS-NEXT: fmaxnm h0, h0, h1
105+ ; USE-NEON-NO-GPRS-NEXT: ldr h1, [x8, :lo12:.LCPI2_1]
106+ ; USE-NEON-NO-GPRS-NEXT: fminnm h0, h0, h1
107+ ; USE-NEON-NO-GPRS-NEXT: frintz h0, h0
108+ ; USE-NEON-NO-GPRS-NEXT: ret
109+ ;
73110; NONEON-NOSVE-LABEL: t3:
74111; NONEON-NOSVE: // %bb.0: // %entry
75112; NONEON-NOSVE-NEXT: fcvt s0, h0
76- ; NONEON-NOSVE-NEXT: fcvtzs w8, s0
77- ; NONEON-NOSVE-NEXT: scvtf s0, w8
113+ ; NONEON-NOSVE-NEXT: mov w8, #-822083584 // =0xcf000000
114+ ; NONEON-NOSVE-NEXT: fmov s1, w8
115+ ; NONEON-NOSVE-NEXT: mov w8, #1325400063 // =0x4effffff
116+ ; NONEON-NOSVE-NEXT: fmaxnm s0, s0, s1
117+ ; NONEON-NOSVE-NEXT: fmov s1, w8
118+ ; NONEON-NOSVE-NEXT: fminnm s0, s0, s1
119+ ; NONEON-NOSVE-NEXT: frintz s0, s0
78120; NONEON-NOSVE-NEXT: fcvt h0, s0
79121; NONEON-NOSVE-NEXT: ret
80122entry:
@@ -147,6 +189,12 @@ define half @t6(half %x) {
147189; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z0
148190; CHECK-NEXT: ret
149191;
192+ ; USE-NEON-NO-GPRS-LABEL: t6:
193+ ; USE-NEON-NO-GPRS: // %bb.0: // %entry
194+ ; USE-NEON-NO-GPRS-NEXT: fcvtzu h0, h0
195+ ; USE-NEON-NO-GPRS-NEXT: ucvtf h0, h0
196+ ; USE-NEON-NO-GPRS-NEXT: ret
197+ ;
150198; NONEON-NOSVE-LABEL: t6:
151199; NONEON-NOSVE: // %bb.0: // %entry
152200; NONEON-NOSVE-NEXT: fcvt s0, h0
0 commit comments