forked from OSchip/llvm-project
[RISCV] Promote f16 frem with Zfh.
Add riscv64 coverage for f32 and f64 frem. Reviewed By: luismarques Differential Revision: https://reviews.llvm.org/D113531
This commit is contained in:
parent
996d4ffe30
commit
4183522e80
|
@ -337,6 +337,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
|
|||
setOperationAction(ISD::BR_CC, MVT::f16, Expand);
|
||||
for (auto Op : FPOpToExpand)
|
||||
setOperationAction(Op, MVT::f16, Expand);
|
||||
|
||||
setOperationAction(ISD::FREM, MVT::f16, Promote);
|
||||
}
|
||||
|
||||
if (Subtarget.hasStdExtF()) {
|
||||
|
|
|
@ -1,16 +1,27 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
|
||||
; RUN: | FileCheck -check-prefix=RV32ID %s
|
||||
; RUN: | FileCheck -check-prefix=RV32IFD %s
|
||||
; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
|
||||
; RUN: | FileCheck -check-prefix=RV64IFD %s
|
||||
|
||||
define double @frem_f64(double %a, double %b) nounwind {
|
||||
; RV32ID-LABEL: frem_f64:
|
||||
; RV32ID: # %bb.0:
|
||||
; RV32ID-NEXT: addi sp, sp, -16
|
||||
; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
|
||||
; RV32ID-NEXT: call fmod@plt
|
||||
; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
|
||||
; RV32ID-NEXT: addi sp, sp, 16
|
||||
; RV32ID-NEXT: ret
|
||||
; RV32IFD-LABEL: frem_f64:
|
||||
; RV32IFD: # %bb.0:
|
||||
; RV32IFD-NEXT: addi sp, sp, -16
|
||||
; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
|
||||
; RV32IFD-NEXT: call fmod@plt
|
||||
; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
|
||||
; RV32IFD-NEXT: addi sp, sp, 16
|
||||
; RV32IFD-NEXT: ret
|
||||
;
|
||||
; RV64IFD-LABEL: frem_f64:
|
||||
; RV64IFD: # %bb.0:
|
||||
; RV64IFD-NEXT: addi sp, sp, -16
|
||||
; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
|
||||
; RV64IFD-NEXT: call fmod@plt
|
||||
; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
||||
; RV64IFD-NEXT: addi sp, sp, 16
|
||||
; RV64IFD-NEXT: ret
|
||||
%1 = frem double %a, %b
|
||||
ret double %1
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -mtriple=riscv32 -mattr=+f -verify-machineinstrs < %s \
|
||||
; RUN: | FileCheck -check-prefix=RV32IF %s
|
||||
; RUN: llc -mtriple=riscv64 -mattr=+f -verify-machineinstrs < %s \
|
||||
; RUN: | FileCheck -check-prefix=RV64IF %s
|
||||
|
||||
define float @frem_f32(float %a, float %b) nounwind {
|
||||
; RV32IF-LABEL: frem_f32:
|
||||
|
@ -11,6 +13,15 @@ define float @frem_f32(float %a, float %b) nounwind {
|
|||
; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
|
||||
; RV32IF-NEXT: addi sp, sp, 16
|
||||
; RV32IF-NEXT: ret
|
||||
;
|
||||
; RV64IF-LABEL: frem_f32:
|
||||
; RV64IF: # %bb.0:
|
||||
; RV64IF-NEXT: addi sp, sp, -16
|
||||
; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
|
||||
; RV64IF-NEXT: call fmodf@plt
|
||||
; RV64IF-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
||||
; RV64IF-NEXT: addi sp, sp, 16
|
||||
; RV64IF-NEXT: ret
|
||||
%1 = frem float %a, %b
|
||||
ret float %1
|
||||
}
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc -mtriple=riscv32 -mattr=+experimental-zfh -verify-machineinstrs \
|
||||
; RUN: -target-abi ilp32f < %s \
|
||||
; RUN: | FileCheck -check-prefix=RV32IZFH %s
|
||||
; RUN: llc -mtriple=riscv64 -mattr=+experimental-zfh -verify-machineinstrs \
|
||||
; RUN: -target-abi lp64f < %s \
|
||||
; RUN: | FileCheck -check-prefix=RV64IZFH %s
|
||||
|
||||
define half @frem_f16(half %a, half %b) nounwind {
|
||||
; RV32IZFH-LABEL: frem_f16:
|
||||
; RV32IZFH: # %bb.0:
|
||||
; RV32IZFH-NEXT: addi sp, sp, -16
|
||||
; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
|
||||
; RV32IZFH-NEXT: fcvt.s.h fa0, fa0
|
||||
; RV32IZFH-NEXT: fcvt.s.h fa1, fa1
|
||||
; RV32IZFH-NEXT: call fmodf@plt
|
||||
; RV32IZFH-NEXT: fcvt.h.s fa0, fa0
|
||||
; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
|
||||
; RV32IZFH-NEXT: addi sp, sp, 16
|
||||
; RV32IZFH-NEXT: ret
|
||||
;
|
||||
; RV64IZFH-LABEL: frem_f16:
|
||||
; RV64IZFH: # %bb.0:
|
||||
; RV64IZFH-NEXT: addi sp, sp, -16
|
||||
; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
|
||||
; RV64IZFH-NEXT: fcvt.s.h fa0, fa0
|
||||
; RV64IZFH-NEXT: fcvt.s.h fa1, fa1
|
||||
; RV64IZFH-NEXT: call fmodf@plt
|
||||
; RV64IZFH-NEXT: fcvt.h.s fa0, fa0
|
||||
; RV64IZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
||||
; RV64IZFH-NEXT: addi sp, sp, 16
|
||||
; RV64IZFH-NEXT: ret
|
||||
%1 = frem half %a, %b
|
||||
ret half %1
|
||||
}
|
Loading…
Reference in New Issue