[llvm-branch-commits] [llvm] [DAGCombiner][GlobalISel] Extend allMulUsesCanBeContracted with FPEXT pattern (PR #188116)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Apr 10 03:49:35 PDT 2026


================
@@ -6329,13 +6334,66 @@ bool CombinerHelper::allMulUsesCanBeContracted(const MachineInstr &MI) const {
     if (Opcode == TargetOpcode::G_FADD || Opcode == TargetOpcode::G_FSUB)
       continue;
 
-    // G_FNEG use - contractable if all users of the fneg are G_FSUB.
+    // FNEG --> FSUB pattern
+    // Also handles FNEG --> FPEXT --> FSUB
     if (Opcode == TargetOpcode::G_FNEG) {
       Register FNegReg = UseMI.getOperand(0).getReg();
-      for (const MachineInstr &FNegUser : MRI.use_nodbg_instructions(FNegReg)) {
-        unsigned FNegUserOp = FNegUser.getOpcode();
-        if (FNegUserOp != TargetOpcode::G_FSUB)
+      // ALL users of the FNEG must be contractable FSUBs or FPEXTs leading to
+      // FSUBs
+      for (const MachineInstr &FNegUseMI :
----------------
arsenm wrote:

Does this really need a loop over all uses, over all uses?

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


More information about the llvm-branch-commits mailing list