diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/MachineLegalizeHelper.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp index aa64be5a4c3..5ad75889723 100644 --- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp +++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp @@ -211,6 +211,11 @@ MachineInstrBuilder MachineIRBuilder::buildTrunc(LLT Ty, unsigned Res, return buildInstr(TargetOpcode::G_TRUNC, Ty).addDef(Res).addUse(Op); } +MachineInstrBuilder MachineIRBuilder::buildFPTrunc(LLT Ty, unsigned Res, + unsigned Op) { + return buildInstr(TargetOpcode::G_FPTRUNC, Ty).addDef(Res).addUse(Op); +} + MachineInstrBuilder MachineIRBuilder::buildICmp(ArrayRef<LLT> Tys, CmpInst::Predicate Pred, unsigned Res, unsigned Op0, diff --git a/llvm/lib/CodeGen/GlobalISel/MachineLegalizeHelper.cpp b/llvm/lib/CodeGen/GlobalISel/MachineLegalizeHelper.cpp index 632d6292f9c..9dc2bf8864e 100644 --- a/llvm/lib/CodeGen/GlobalISel/MachineLegalizeHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/MachineLegalizeHelper.cpp @@ -141,6 +141,14 @@ MachineLegalizeHelper::widenScalar(MachineInstr &MI, LLT WideTy) { MI.eraseFromParent(); return Legalized; } + case TargetOpcode::G_FCONSTANT: { + MIRBuilder.setInstr(MI); + unsigned DstExt = MRI.createGenericVirtualRegister(WideSize); + MIRBuilder.buildFConstant(WideTy, DstExt, *MI.getOperand(1).getFPImm()); + MIRBuilder.buildFPTrunc(MI.getType(), MI.getOperand(0).getReg(), DstExt); + MI.eraseFromParent(); + return Legalized; + } } } diff --git a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp index a06eee0973e..b91d6040bb6 100644 --- a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp +++ b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp @@ -63,6 +63,7 @@ AArch64MachineLegalizer::AArch64MachineLegalizer() { for (auto Ty : {s1, s8, s16}) setAction(TargetOpcode::G_CONSTANT, Ty, WidenScalar); + setAction(TargetOpcode::G_FCONSTANT, s16, WidenScalar); setAction(G_BR, LLT::unsized(), Legal); |