diff options
author | Tim Northover <tnorthover@apple.com> | 2017-02-08 23:23:39 +0000 |
---|---|---|
committer | Tim Northover <tnorthover@apple.com> | 2017-02-08 23:23:39 +0000 |
commit | e0418418116ec089d11091bff0820694c20a7954 (patch) | |
tree | d04649e45b1bcb0e015eaaf2188dc958045780c3 /llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | |
parent | b38b4e2464c9c88b332ca11914be73c50736ee86 (diff) | |
download | bcm5719-llvm-e0418418116ec089d11091bff0820694c20a7954.tar.gz bcm5719-llvm-e0418418116ec089d11091bff0820694c20a7954.zip |
GlobalISel: legalize G_FPOW to a libcall on AArch64.
There's no instruction to implement it.
llvm-svn: 294531
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index f41af0547a3..1f78243e115 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -92,6 +92,16 @@ void LegalizerHelper::extractParts(unsigned Reg, LLT Ty, int NumParts, MIRBuilder.buildExtract(VRegs, Indexes, Reg); } +static RTLIB::Libcall getRTLibDesc(unsigned Opcode, unsigned Size) { + switch (Opcode) { + case TargetOpcode::G_FREM: + return Size == 64 ? RTLIB::REM_F64 : RTLIB::REM_F32; + case TargetOpcode::G_FPOW: + return Size == 64 ? RTLIB::POW_F64 : RTLIB::POW_F32; + } + llvm_unreachable("Unknown libcall function"); +} + LegalizerHelper::LegalizeResult LegalizerHelper::libcall(MachineInstr &MI) { LLT Ty = MRI.getType(MI.getOperand(0).getReg()); @@ -101,14 +111,13 @@ LegalizerHelper::libcall(MachineInstr &MI) { switch (MI.getOpcode()) { default: return UnableToLegalize; + case TargetOpcode::G_FPOW: case TargetOpcode::G_FREM: { auto &Ctx = MIRBuilder.getMF().getFunction()->getContext(); Type *Ty = Size == 64 ? Type::getDoubleTy(Ctx) : Type::getFloatTy(Ctx); auto &CLI = *MIRBuilder.getMF().getSubtarget().getCallLowering(); auto &TLI = *MIRBuilder.getMF().getSubtarget().getTargetLowering(); - const char *Name = - TLI.getLibcallName(Size == 64 ? RTLIB::REM_F64 : RTLIB::REM_F32); - + const char *Name = TLI.getLibcallName(getRTLibDesc(MI.getOpcode(), Size)); CLI.lowerCall( MIRBuilder, MachineOperand::CreateES(Name), {MI.getOperand(0).getReg(), Ty}, |