81 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=thumbv8m.main-none-eabi %s -o - | FileCheck %s --check-prefix=CHECK-SOFT3; RUN: llc -mtriple=thumbv8m.main-none-eabi -mattr=+fp-armv8 %s -o - | FileCheck %s --check-prefix=CHECK-FP4; RUN: llc -mtriple=thumbv8m.main-none-eabi -mattr=+fp-armv8,+slowfpvfmx %s -o - | FileCheck %s --check-prefix=CHECK-M335 6define float @frem4(float %x) {7; CHECK-SOFT-LABEL: frem4:8; CHECK-SOFT: @ %bb.0: @ %entry9; CHECK-SOFT-NEXT: .save {r7, lr}10; CHECK-SOFT-NEXT: push {r7, lr}11; CHECK-SOFT-NEXT: mov.w r1, #108213043212; CHECK-SOFT-NEXT: bl fmodf13; CHECK-SOFT-NEXT: pop {r7, pc}14;15; CHECK-FP-LABEL: frem4:16; CHECK-FP: @ %bb.0: @ %entry17; CHECK-FP-NEXT: vmov.f32 s0, #2.500000e-0118; CHECK-FP-NEXT: vmov.f32 s2, #-4.000000e+0019; CHECK-FP-NEXT: vmov s4, r020; CHECK-FP-NEXT: lsrs r0, r0, #3121; CHECK-FP-NEXT: vmul.f32 s0, s4, s022; CHECK-FP-NEXT: vrintz.f32 s0, s023; CHECK-FP-NEXT: vfma.f32 s4, s0, s224; CHECK-FP-NEXT: vmov r1, s425; CHECK-FP-NEXT: bfi r1, r0, #31, #126; CHECK-FP-NEXT: mov r0, r127; CHECK-FP-NEXT: bx lr28;29; CHECK-M33-LABEL: frem4:30; CHECK-M33: @ %bb.0: @ %entry31; CHECK-M33-NEXT: vmov.f32 s0, #2.500000e-0132; CHECK-M33-NEXT: vmov.f32 s2, #-4.000000e+0033; CHECK-M33-NEXT: vmov s4, r034; CHECK-M33-NEXT: lsrs r0, r0, #3135; CHECK-M33-NEXT: vmul.f32 s0, s4, s036; CHECK-M33-NEXT: vrintz.f32 s0, s037; CHECK-M33-NEXT: vmla.f32 s4, s0, s238; CHECK-M33-NEXT: vmov r1, s439; CHECK-M33-NEXT: bfi r1, r0, #31, #140; CHECK-M33-NEXT: mov r0, r141; CHECK-M33-NEXT: bx lr42entry:43 %fmod = frem float %x, 4.044 ret float %fmod45}46 47define float @frem4_nsz(float %x) {48; CHECK-SOFT-LABEL: frem4_nsz:49; CHECK-SOFT: @ %bb.0: @ %entry50; CHECK-SOFT-NEXT: .save {r7, lr}51; CHECK-SOFT-NEXT: push {r7, lr}52; CHECK-SOFT-NEXT: mov.w r1, #108213043253; CHECK-SOFT-NEXT: bl fmodf54; CHECK-SOFT-NEXT: pop {r7, pc}55;56; CHECK-FP-LABEL: frem4_nsz:57; CHECK-FP: @ %bb.0: @ %entry58; CHECK-FP-NEXT: vmov.f32 s0, #2.500000e-0159; CHECK-FP-NEXT: vmov.f32 s2, #-4.000000e+0060; CHECK-FP-NEXT: vmov s4, r061; CHECK-FP-NEXT: vmul.f32 s0, s4, s062; CHECK-FP-NEXT: vrintz.f32 s0, s063; CHECK-FP-NEXT: vfma.f32 s4, s0, s264; CHECK-FP-NEXT: vmov r0, s465; CHECK-FP-NEXT: bx lr66;67; CHECK-M33-LABEL: frem4_nsz:68; CHECK-M33: @ %bb.0: @ %entry69; CHECK-M33-NEXT: vmov.f32 s0, #2.500000e-0170; CHECK-M33-NEXT: vmov.f32 s2, #-4.000000e+0071; CHECK-M33-NEXT: vmov s4, r072; CHECK-M33-NEXT: vmul.f32 s0, s4, s073; CHECK-M33-NEXT: vrintz.f32 s0, s074; CHECK-M33-NEXT: vmla.f32 s4, s0, s275; CHECK-M33-NEXT: vmov r0, s476; CHECK-M33-NEXT: bx lr77entry:78 %fmod = frem nsz float %x, 4.079 ret float %fmod80}81