diff options
author | Diana Picus <diana.picus@linaro.org> | 2017-11-23 13:26:07 +0000 |
---|---|---|
committer | Diana Picus <diana.picus@linaro.org> | 2017-11-23 13:26:07 +0000 |
commit | c01f7f131bd82659fa484cfd6fc9b8a495b2e5ae (patch) | |
tree | d54fcdaf93a17e6c572f0f0ab51c69e1be3c8d03 /llvm/lib/CodeGen | |
parent | a0903c6e5d28378373943799b049bb656813c5dc (diff) | |
download | bcm5719-llvm-c01f7f131bd82659fa484cfd6fc9b8a495b2e5ae.tar.gz bcm5719-llvm-c01f7f131bd82659fa484cfd6fc9b8a495b2e5ae.zip |
[ARM GlobalISel] Support G_FDIV for s32 and s64
TableGen already generates code for selecting a G_FDIV, so we only need
to add a test.
For the legalizer and reg bank select, we do the same thing as for the
other floating point binary operations: either mark as legal if we have
a FP unit or lower to a libcall, and map to the floating point
registers.
llvm-svn: 318915
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index c54c715dc73..bb2e6158231 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -97,6 +97,9 @@ static RTLIB::Libcall getRTLibDesc(unsigned Opcode, unsigned Size) { case TargetOpcode::G_FMUL: assert((Size == 32 || Size == 64) && "Unsupported size"); return Size == 64 ? RTLIB::MUL_F64 : RTLIB::MUL_F32; + case TargetOpcode::G_FDIV: + assert((Size == 32 || Size == 64) && "Unsupported size"); + return Size == 64 ? RTLIB::DIV_F64 : RTLIB::DIV_F32; case TargetOpcode::G_FREM: return Size == 64 ? RTLIB::REM_F64 : RTLIB::REM_F32; case TargetOpcode::G_FPOW: @@ -154,6 +157,7 @@ LegalizerHelper::libcall(MachineInstr &MI) { case TargetOpcode::G_FADD: case TargetOpcode::G_FSUB: case TargetOpcode::G_FMUL: + case TargetOpcode::G_FDIV: case TargetOpcode::G_FPOW: case TargetOpcode::G_FREM: { Type *HLTy = Size == 64 ? Type::getDoubleTy(Ctx) : Type::getFloatTy(Ctx); |