[llvm] [X86][GlobalISel] Support fp80 for G_FPTRUNC and G_FPEXT (PR #141611)
Evgenii Kudriashov via llvm-commits
llvm-commits at lists.llvm.org
Wed May 28 06:43:52 PDT 2025
================
@@ -781,6 +789,33 @@ bool X86LegalizerInfo::legalizeNarrowingStore(MachineInstr &MI,
return true;
}
+bool X86LegalizerInfo::legalizeFPExtAndTrunc(MachineInstr &MI,
+ MachineRegisterInfo &MRI,
+ LegalizerHelper &Helper) const {
+ assert((MI.getOpcode() == TargetOpcode::G_FPEXT ||
+ MI.getOpcode() == TargetOpcode::G_FPTRUNC) &&
+ "Only G_FPEXT and G_FPTRUNC are expected");
+ auto [DstReg, DstTy, SrcReg, SrcTy] = MI.getFirst2RegLLTs();
+ MachinePointerInfo PtrInfo;
+ LLT StackTy = MI.getOpcode() == TargetOpcode::G_FPEXT ? SrcTy : DstTy;
+ Align StackTyAlign = Helper.getStackTemporaryAlignment(StackTy);
+ auto StackTemp = Helper.createStackTemporary(StackTy.getSizeInBytes(),
+ StackTyAlign, PtrInfo);
+
+ MachineIRBuilder &MIRBuilder = Helper.MIRBuilder;
+ MachineFunction &MF = MIRBuilder.getMF();
+ auto *StoreMMO = MF.getMachineMemOperand(PtrInfo, MachineMemOperand::MOStore,
+ StackTy, StackTyAlign);
+ MIRBuilder.buildStore(SrcReg, StackTemp, *StoreMMO);
+
+ auto *LoadMMO = MF.getMachineMemOperand(PtrInfo, MachineMemOperand::MOLoad,
+ StackTy, StackTyAlign);
+ MIRBuilder.buildLoad(DstReg, StackTemp, *LoadMMO);
----------------
e-kud wrote:
@arsenm we have conflicting FP64->FP16 lowering
https://github.com/llvm/llvm-project/blob/59b7b5b6b5c032ed21049d631eb5d67091f3a21c/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp#L8010-L8019
It doesn't hurt X86 but is it ok for the generic lowering to have FP64->FP16 conversion through scalars but for others using memory?
https://github.com/llvm/llvm-project/pull/141611
More information about the llvm-commits
mailing list