xref: /llvm-project/llvm/test/CodeGen/ARM/frem-power2.ll (revision a284bdb31146160352da905a888da738f2661b50)
19e1a49cbSDavid Green; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
29e1a49cbSDavid Green; RUN: llc -mtriple=thumbv8m.main-none-eabi %s -o - | FileCheck %s --check-prefix=CHECK-SOFT
39e1a49cbSDavid Green; RUN: llc -mtriple=thumbv8m.main-none-eabi -mattr=+fp-armv8 %s -o - | FileCheck %s --check-prefix=CHECK-FP
49e1a49cbSDavid Green; RUN: llc -mtriple=thumbv8m.main-none-eabi -mattr=+fp-armv8,+slowfpvfmx %s -o - | FileCheck %s --check-prefix=CHECK-M33
59e1a49cbSDavid Green
69e1a49cbSDavid Greendefine float @frem4(float %x) {
79e1a49cbSDavid Green; CHECK-SOFT-LABEL: frem4:
89e1a49cbSDavid Green; CHECK-SOFT:       @ %bb.0: @ %entry
99e1a49cbSDavid Green; CHECK-SOFT-NEXT:    .save {r7, lr}
109e1a49cbSDavid Green; CHECK-SOFT-NEXT:    push {r7, lr}
119e1a49cbSDavid Green; CHECK-SOFT-NEXT:    mov.w r1, #1082130432
129e1a49cbSDavid Green; CHECK-SOFT-NEXT:    bl fmodf
139e1a49cbSDavid Green; CHECK-SOFT-NEXT:    pop {r7, pc}
149e1a49cbSDavid Green;
159e1a49cbSDavid Green; CHECK-FP-LABEL: frem4:
169e1a49cbSDavid Green; CHECK-FP:       @ %bb.0: @ %entry
17*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov.f32 s0, #2.500000e-01
18*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov.f32 s2, #-4.000000e+00
19*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov s4, r0
204c98f5b4SDavid Green; CHECK-FP-NEXT:    lsrs r0, r0, #31
21*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmul.f32 s0, s4, s0
22*a284bdb3SDavid Green; CHECK-FP-NEXT:    vrintz.f32 s0, s0
23*a284bdb3SDavid Green; CHECK-FP-NEXT:    vfma.f32 s4, s0, s2
24*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov r1, s4
254c98f5b4SDavid Green; CHECK-FP-NEXT:    bfi r1, r0, #31, #1
264c98f5b4SDavid Green; CHECK-FP-NEXT:    mov r0, r1
274c98f5b4SDavid Green; CHECK-FP-NEXT:    bx lr
289e1a49cbSDavid Green;
299e1a49cbSDavid Green; CHECK-M33-LABEL: frem4:
309e1a49cbSDavid Green; CHECK-M33:       @ %bb.0: @ %entry
31*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov.f32 s0, #2.500000e-01
32*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov.f32 s2, #-4.000000e+00
33*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov s4, r0
344c98f5b4SDavid Green; CHECK-M33-NEXT:    lsrs r0, r0, #31
35*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmul.f32 s0, s4, s0
36*a284bdb3SDavid Green; CHECK-M33-NEXT:    vrintz.f32 s0, s0
37*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmla.f32 s4, s0, s2
38*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov r1, s4
394c98f5b4SDavid Green; CHECK-M33-NEXT:    bfi r1, r0, #31, #1
404c98f5b4SDavid Green; CHECK-M33-NEXT:    mov r0, r1
414c98f5b4SDavid Green; CHECK-M33-NEXT:    bx lr
429e1a49cbSDavid Greenentry:
439e1a49cbSDavid Green  %fmod = frem float %x, 4.0
449e1a49cbSDavid Green  ret float %fmod
459e1a49cbSDavid Green}
469e1a49cbSDavid Green
479e1a49cbSDavid Greendefine float @frem4_nsz(float %x) {
489e1a49cbSDavid Green; CHECK-SOFT-LABEL: frem4_nsz:
499e1a49cbSDavid Green; CHECK-SOFT:       @ %bb.0: @ %entry
509e1a49cbSDavid Green; CHECK-SOFT-NEXT:    .save {r7, lr}
519e1a49cbSDavid Green; CHECK-SOFT-NEXT:    push {r7, lr}
529e1a49cbSDavid Green; CHECK-SOFT-NEXT:    mov.w r1, #1082130432
539e1a49cbSDavid Green; CHECK-SOFT-NEXT:    bl fmodf
549e1a49cbSDavid Green; CHECK-SOFT-NEXT:    pop {r7, pc}
559e1a49cbSDavid Green;
569e1a49cbSDavid Green; CHECK-FP-LABEL: frem4_nsz:
579e1a49cbSDavid Green; CHECK-FP:       @ %bb.0: @ %entry
58*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov.f32 s0, #2.500000e-01
59*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov.f32 s2, #-4.000000e+00
60*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov s4, r0
61*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmul.f32 s0, s4, s0
62*a284bdb3SDavid Green; CHECK-FP-NEXT:    vrintz.f32 s0, s0
63*a284bdb3SDavid Green; CHECK-FP-NEXT:    vfma.f32 s4, s0, s2
64*a284bdb3SDavid Green; CHECK-FP-NEXT:    vmov r0, s4
658fc9e3d5SDavid Green; CHECK-FP-NEXT:    bx lr
669e1a49cbSDavid Green;
679e1a49cbSDavid Green; CHECK-M33-LABEL: frem4_nsz:
689e1a49cbSDavid Green; CHECK-M33:       @ %bb.0: @ %entry
69*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov.f32 s0, #2.500000e-01
70*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov.f32 s2, #-4.000000e+00
71*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov s4, r0
72*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmul.f32 s0, s4, s0
73*a284bdb3SDavid Green; CHECK-M33-NEXT:    vrintz.f32 s0, s0
74*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmla.f32 s4, s0, s2
75*a284bdb3SDavid Green; CHECK-M33-NEXT:    vmov r0, s4
768fc9e3d5SDavid Green; CHECK-M33-NEXT:    bx lr
779e1a49cbSDavid Greenentry:
789e1a49cbSDavid Green  %fmod = frem nsz float %x, 4.0
799e1a49cbSDavid Green  ret float %fmod
809e1a49cbSDavid Green}
81