[llvm] 5748dcd - [CodeGen] Update break-false-deps to track updates to the machine function (#202081)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 9 21:13:30 PDT 2026


Author: juan.vazquez
Date: 2026-06-10T04:13:26Z
New Revision: 5748dcd89b907d3df745069298ad8c93bfde925a

URL: https://github.com/llvm/llvm-project/commit/5748dcd89b907d3df745069298ad8c93bfde925a
DIFF: https://github.com/llvm/llvm-project/commit/5748dcd89b907d3df745069298ad8c93bfde925a.diff

LOG: [CodeGen] Update break-false-deps to track updates to the machine function (#202081)

Added: 
    

Modified: 
    llvm/lib/CodeGen/BreakFalseDeps.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/BreakFalseDeps.cpp b/llvm/lib/CodeGen/BreakFalseDeps.cpp
index 59558516df2cc..f4d5b443154ee 100644
--- a/llvm/lib/CodeGen/BreakFalseDeps.cpp
+++ b/llvm/lib/CodeGen/BreakFalseDeps.cpp
@@ -49,6 +49,10 @@ class BreakFalseDeps {
 
   ReachingDefInfo *RDI = nullptr;
 
+  /// True if the pass insert instructions or updates registers, false
+  /// otherwise.
+  bool Changed = false;
+
 public:
   BreakFalseDeps(ReachingDefInfo *RDI) : RDI(RDI) {}
 
@@ -89,7 +93,7 @@ class BreakFalseDepsLegacy : public MachineFunctionPass {
   BreakFalseDepsLegacy() : MachineFunctionPass(ID) {}
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
-    AU.setPreservesAll();
+    AU.setPreservesCFG();
     AU.addRequired<ReachingDefInfoWrapperPass>();
     MachineFunctionPass::getAnalysisUsage(AU);
   }
@@ -154,6 +158,7 @@ bool BreakFalseDeps::pickBestRegisterForUndef(MachineInstr *MI, unsigned OpIdx,
     // We found a true dependency - replace the undef register with the true
     // dependency.
     MO.setReg(CurrMO.getReg());
+    Changed = true;
     return true;
   }
 
@@ -174,8 +179,10 @@ bool BreakFalseDeps::pickBestRegisterForUndef(MachineInstr *MI, unsigned OpIdx,
   }
 
   // Update the operand if we found a register with better clearance.
-  if (MaxClearanceReg != OriginalReg)
+  if (MaxClearanceReg != OriginalReg) {
     MO.setReg(MaxClearanceReg);
+    Changed = true;
+  }
 
   return false;
 }
@@ -232,8 +239,10 @@ void BreakFalseDeps::processDefs(MachineInstr *MI) {
       continue;
     // Check clearance before partial register updates.
     unsigned Pref = TII->getPartialRegUpdateClearance(*MI, i, TRI);
-    if (Pref && shouldBreakDependence(MI, i, Pref))
+    if (Pref && shouldBreakDependence(MI, i, Pref)) {
       TII->breakPartialRegDependency(*MI, i, TRI);
+      Changed = true;
+    }
   }
 }
 
@@ -260,8 +269,10 @@ void BreakFalseDeps::processUndefReads(MachineBasicBlock *MBB) {
     LiveRegSet.stepBackward(I);
 
     if (UndefMI == &I) {
-      if (!LiveRegSet.contains(UndefMI->getOperand(OpIdx).getReg()))
+      if (!LiveRegSet.contains(UndefMI->getOperand(OpIdx).getReg())) {
         TII->breakPartialRegDependency(*UndefMI, OpIdx, TRI);
+        Changed = true;
+      }
 
       UndefReads.pop_back();
       if (UndefReads.empty())
@@ -306,7 +317,7 @@ bool BreakFalseDeps::run(MachineFunction &CurMF) {
     if (Reachable.count(&MBB))
       processBasicBlock(&MBB);
 
-  return false;
+  return Changed;
 }
 
 bool BreakFalseDepsLegacy::runOnMachineFunction(MachineFunction &MF) {
@@ -323,10 +334,10 @@ BreakFalseDepsPass::run(MachineFunction &MF,
                         MachineFunctionAnalysisManager &MFAM) {
   MFPropsModifier _(*this, MF);
   ReachingDefInfo *RDI = &MFAM.getResult<ReachingDefAnalysis>(MF);
-  BreakFalseDeps(RDI).run(MF);
-  // TODO: breakPartialRegDependency() may insert instructions, propagate when
-  // the pass made a change and return PreservedAnalyses::all() otherwise.
-  PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses();
-  PA.preserveSet<CFGAnalyses>();
-  return PA;
+  if (BreakFalseDeps(RDI).run(MF)) {
+    PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses();
+    PA.preserveSet<CFGAnalyses>();
+    return PA;
+  }
+  return PreservedAnalyses::all();
 }


        


More information about the llvm-commits mailing list