[llvm] [GlobalISel] Improve bf16 converts with fast-math flags. (PR #200741)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 3 05:49:12 PDT 2026


================
@@ -2160,13 +2160,30 @@ Register LegalizerHelper::coerceToScalar(Register Val) {
   return MIRBuilder.buildBitcast(NewTy, NewVal).getReg(0);
 }
 
+// Extract just the fast-math flags from Flags
+static uint32_t extractFMF(uint32_t Flags) {
+  return Flags &
+         (MachineInstr::MIFlag::FmNoNans | MachineInstr::MIFlag::FmNoInfs |
+          MachineInstr::MIFlag::FmNsz | MachineInstr::MIFlag::FmArcp |
+          MachineInstr::MIFlag::FmContract | MachineInstr::MIFlag::FmAfn |
+          MachineInstr::MIFlag::FmReassoc);
+}
+
 void LegalizerHelper::widenScalarSrc(MachineInstr &MI, LLT WideTy,
                                      unsigned OpIdx, unsigned ExtOpcode) {
   MachineOperand &MO = MI.getOperand(OpIdx);
   auto ExtB = MIRBuilder.buildInstr(ExtOpcode, {WideTy}, {MO});
   MO.setReg(ExtB.getReg(0));
 }
 
+void LegalizerHelper::widenScalarSrcUsingFPExt(MachineInstr &MI, LLT WideTy,
+                                               unsigned OpIdx) {
+  MachineOperand &MO = MI.getOperand(OpIdx);
+  auto ExtB = MIRBuilder.buildInstr(TargetOpcode::G_FPEXT, {WideTy}, {MO},
+                                    extractFMF(MI.getFlags()));
----------------
arsenm wrote:

extractFMF seems unnecessary. It's only clearing flags that shouldn't be present in the first place 

https://github.com/llvm/llvm-project/pull/200741


More information about the llvm-commits mailing list