55define float @frem2 (float %x ) {
66; CHECK-SD-LABEL: frem2:
77; CHECK-SD: // %bb.0: // %entry
8- ; CHECK-SD-NEXT: fmov s1, #2.00000000
8+ ; CHECK-SD-NEXT: fmov s1, #0.50000000
99; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
10- ; CHECK-SD-NEXT: fdiv s2, s0, s1
11- ; CHECK-SD-NEXT: frintz s2, s2
12- ; CHECK-SD-NEXT: fmsub s1, s2, s1, s0
10+ ; CHECK-SD-NEXT: fmov s2, #-2.00000000
11+ ; CHECK-SD-NEXT: fmul s1, s0, s1
12+ ; CHECK-SD-NEXT: frintz s1, s1
13+ ; CHECK-SD-NEXT: fmadd s1, s1, s2, s0
1314; CHECK-SD-NEXT: mvni v2.4s, #128, lsl #24
1415; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
1516; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
@@ -27,10 +28,11 @@ entry:
2728define float @frem2_nsz (float %x ) {
2829; CHECK-SD-LABEL: frem2_nsz:
2930; CHECK-SD: // %bb.0: // %entry
30- ; CHECK-SD-NEXT: fmov s1, #2.00000000
31- ; CHECK-SD-NEXT: fdiv s2, s0, s1
32- ; CHECK-SD-NEXT: frintz s2, s2
33- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
31+ ; CHECK-SD-NEXT: fmov s1, #0.50000000
32+ ; CHECK-SD-NEXT: fmov s2, #-2.00000000
33+ ; CHECK-SD-NEXT: fmul s1, s0, s1
34+ ; CHECK-SD-NEXT: frintz s1, s1
35+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
3436; CHECK-SD-NEXT: ret
3537;
3638; CHECK-GI-LABEL: frem2_nsz:
@@ -65,10 +67,11 @@ define float @frem2_abs(float %x) {
6567; CHECK-SD-LABEL: frem2_abs:
6668; CHECK-SD: // %bb.0: // %entry
6769; CHECK-SD-NEXT: fabs s0, s0
68- ; CHECK-SD-NEXT: fmov s1, #2.00000000
69- ; CHECK-SD-NEXT: fdiv s2, s0, s1
70- ; CHECK-SD-NEXT: frintz s2, s2
71- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
70+ ; CHECK-SD-NEXT: fmov s1, #0.50000000
71+ ; CHECK-SD-NEXT: fmov s2, #-2.00000000
72+ ; CHECK-SD-NEXT: fmul s1, s0, s1
73+ ; CHECK-SD-NEXT: frintz s1, s1
74+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
7275; CHECK-SD-NEXT: ret
7376;
7477; CHECK-GI-LABEL: frem2_abs:
8588define half @hrem2_nsz (half %x ) {
8689; CHECK-SD-LABEL: hrem2_nsz:
8790; CHECK-SD: // %bb.0: // %entry
88- ; CHECK-SD-NEXT: fmov h1, #2.00000000
91+ ; CHECK-SD-NEXT: fmov h1, #0.50000000
8992; CHECK-SD-NEXT: fmov h2, #-2.00000000
90- ; CHECK-SD-NEXT: fdiv h1, h0, h1
93+ ; CHECK-SD-NEXT: fmul h1, h0, h1
9194; CHECK-SD-NEXT: frintz h1, h1
9295; CHECK-SD-NEXT: fmadd h0, h1, h2, h0
9396; CHECK-SD-NEXT: ret
@@ -112,10 +115,11 @@ entry:
112115define double @drem2_nsz (double %x ) {
113116; CHECK-SD-LABEL: drem2_nsz:
114117; CHECK-SD: // %bb.0: // %entry
115- ; CHECK-SD-NEXT: fmov d1, #2.00000000
116- ; CHECK-SD-NEXT: fdiv d2, d0, d1
117- ; CHECK-SD-NEXT: frintz d2, d2
118- ; CHECK-SD-NEXT: fmsub d0, d2, d1, d0
118+ ; CHECK-SD-NEXT: fmov d1, #0.50000000
119+ ; CHECK-SD-NEXT: fmov d2, #-2.00000000
120+ ; CHECK-SD-NEXT: fmul d1, d0, d1
121+ ; CHECK-SD-NEXT: frintz d1, d1
122+ ; CHECK-SD-NEXT: fmadd d0, d1, d2, d0
119123; CHECK-SD-NEXT: ret
120124;
121125; CHECK-GI-LABEL: drem2_nsz:
@@ -176,10 +180,11 @@ entry:
176180define float @fremm2_nsz (float %x ) {
177181; CHECK-SD-LABEL: fremm2_nsz:
178182; CHECK-SD: // %bb.0: // %entry
179- ; CHECK-SD-NEXT: fmov s1, #-2.00000000
180- ; CHECK-SD-NEXT: fdiv s2, s0, s1
181- ; CHECK-SD-NEXT: frintz s2, s2
182- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
183+ ; CHECK-SD-NEXT: fmov s1, #-0.50000000
184+ ; CHECK-SD-NEXT: fmov s2, #2.00000000
185+ ; CHECK-SD-NEXT: fmul s1, s0, s1
186+ ; CHECK-SD-NEXT: frintz s1, s1
187+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
183188; CHECK-SD-NEXT: ret
184189;
185190; CHECK-GI-LABEL: fremm2_nsz:
@@ -195,10 +200,11 @@ define float @frem4_abs(float %x) {
195200; CHECK-SD-LABEL: frem4_abs:
196201; CHECK-SD: // %bb.0: // %entry
197202; CHECK-SD-NEXT: fabs s0, s0
198- ; CHECK-SD-NEXT: fmov s1, #4.00000000
199- ; CHECK-SD-NEXT: fdiv s2, s0, s1
200- ; CHECK-SD-NEXT: frintz s2, s2
201- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
203+ ; CHECK-SD-NEXT: fmov s1, #0.25000000
204+ ; CHECK-SD-NEXT: fmov s2, #-4.00000000
205+ ; CHECK-SD-NEXT: fmul s1, s0, s1
206+ ; CHECK-SD-NEXT: frintz s1, s1
207+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
202208; CHECK-SD-NEXT: ret
203209;
204210; CHECK-GI-LABEL: frem4_abs:
@@ -216,10 +222,12 @@ define float @frem16_abs(float %x) {
216222; CHECK-SD-LABEL: frem16_abs:
217223; CHECK-SD: // %bb.0: // %entry
218224; CHECK-SD-NEXT: fabs s0, s0
219- ; CHECK-SD-NEXT: fmov s1, #16.00000000
220- ; CHECK-SD-NEXT: fdiv s2, s0, s1
221- ; CHECK-SD-NEXT: frintz s2, s2
222- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
225+ ; CHECK-SD-NEXT: mov w8, #1031798784 // =0x3d800000
226+ ; CHECK-SD-NEXT: fmov s2, #-16.00000000
227+ ; CHECK-SD-NEXT: fmov s1, w8
228+ ; CHECK-SD-NEXT: fmul s1, s0, s1
229+ ; CHECK-SD-NEXT: frintz s1, s1
230+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
223231; CHECK-SD-NEXT: ret
224232;
225233; CHECK-GI-LABEL: frem16_abs:
@@ -237,11 +245,13 @@ define float @frem4294967296_abs(float %x) {
237245; CHECK-SD-LABEL: frem4294967296_abs:
238246; CHECK-SD: // %bb.0: // %entry
239247; CHECK-SD-NEXT: fabs s0, s0
240- ; CHECK-SD-NEXT: mov w8, #1333788672 // =0x4f800000
248+ ; CHECK-SD-NEXT: mov w8, #796917760 // =0x2f800000
241249; CHECK-SD-NEXT: fmov s1, w8
242- ; CHECK-SD-NEXT: fdiv s2, s0, s1
243- ; CHECK-SD-NEXT: frintz s2, s2
244- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
250+ ; CHECK-SD-NEXT: mov w8, #-813694976 // =0xcf800000
251+ ; CHECK-SD-NEXT: fmov s2, w8
252+ ; CHECK-SD-NEXT: fmul s1, s0, s1
253+ ; CHECK-SD-NEXT: frintz s1, s1
254+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
245255; CHECK-SD-NEXT: ret
246256;
247257; CHECK-GI-LABEL: frem4294967296_abs:
@@ -260,11 +270,13 @@ define float @frem1152921504606846976_abs(float %x) {
260270; CHECK-SD-LABEL: frem1152921504606846976_abs:
261271; CHECK-SD: // %bb.0: // %entry
262272; CHECK-SD-NEXT: fabs s0, s0
263- ; CHECK-SD-NEXT: mov w8, #1568669696 // =0x5d800000
273+ ; CHECK-SD-NEXT: mov w8, #562036736 // =0x21800000
264274; CHECK-SD-NEXT: fmov s1, w8
265- ; CHECK-SD-NEXT: fdiv s2, s0, s1
266- ; CHECK-SD-NEXT: frintz s2, s2
267- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
275+ ; CHECK-SD-NEXT: mov w8, #-578813952 // =0xdd800000
276+ ; CHECK-SD-NEXT: fmov s2, w8
277+ ; CHECK-SD-NEXT: fmul s1, s0, s1
278+ ; CHECK-SD-NEXT: frintz s1, s1
279+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
268280; CHECK-SD-NEXT: ret
269281;
270282; CHECK-GI-LABEL: frem1152921504606846976_abs:
@@ -283,11 +295,13 @@ define float @frem4611686018427387904_abs(float %x) {
283295; CHECK-SD-LABEL: frem4611686018427387904_abs:
284296; CHECK-SD: // %bb.0: // %entry
285297; CHECK-SD-NEXT: fabs s0, s0
286- ; CHECK-SD-NEXT: mov w8, #1585446912 // =0x5e800000
298+ ; CHECK-SD-NEXT: mov w8, #545259520 // =0x20800000
287299; CHECK-SD-NEXT: fmov s1, w8
288- ; CHECK-SD-NEXT: fdiv s2, s0, s1
289- ; CHECK-SD-NEXT: frintz s2, s2
290- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
300+ ; CHECK-SD-NEXT: mov w8, #-562036736 // =0xde800000
301+ ; CHECK-SD-NEXT: fmov s2, w8
302+ ; CHECK-SD-NEXT: fmul s1, s0, s1
303+ ; CHECK-SD-NEXT: frintz s1, s1
304+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
291305; CHECK-SD-NEXT: ret
292306;
293307; CHECK-GI-LABEL: frem4611686018427387904_abs:
@@ -305,11 +319,12 @@ entry:
305319define float @frem9223372036854775808_abs (float %x ) {
306320; CHECK-SD-LABEL: frem9223372036854775808_abs:
307321; CHECK-SD: // %bb.0: // %entry
308- ; CHECK-SD-NEXT: movi v1.2s, #95 , lsl #24
322+ ; CHECK-SD-NEXT: movi v1.2s, #32 , lsl #24
309323; CHECK-SD-NEXT: fabs s0, s0
310- ; CHECK-SD-NEXT: fdiv s2, s0, s1
311- ; CHECK-SD-NEXT: frintz s2, s2
312- ; CHECK-SD-NEXT: fmsub s0, s2, s1, s0
324+ ; CHECK-SD-NEXT: movi v2.2s, #223, lsl #24
325+ ; CHECK-SD-NEXT: fmul s1, s0, s1
326+ ; CHECK-SD-NEXT: frintz s1, s1
327+ ; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
313328; CHECK-SD-NEXT: ret
314329;
315330; CHECK-GI-LABEL: frem9223372036854775808_abs:
0 commit comments