[llvm-branch-commits] [RISCV] Port RISCVLateBranchOpt to NewPM (PR #235195)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Oct 23 20:00:45 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-risc-v

Author: Aiden Grossman (boomanaiden154)

<details>
<summary>Changes</summary>

Standard NewPM pass porting.


---
Full diff: https://github.com/llvm/llvm-project/pull/235195.diff


4 Files Affected:

- (modified) llvm/lib/Target/RISCV/RISCV.h (+8-2) 
- (modified) llvm/lib/Target/RISCV/RISCVLateBranchOpt.cpp (+28-18) 
- (modified) llvm/lib/Target/RISCV/RISCVPassRegistry.def (+1) 
- (modified) llvm/lib/Target/RISCV/RISCVTargetMachine.cpp (+2-2) 


``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCV.h b/llvm/lib/Target/RISCV/RISCV.h
index a0036a1abb9fa..2e8671f1f9782 100644
--- a/llvm/lib/Target/RISCV/RISCV.h
+++ b/llvm/lib/Target/RISCV/RISCV.h
@@ -77,8 +77,14 @@ class RISCVISelDAGToDAGPass : public SelectionDAGISelPass {
   RISCVISelDAGToDAGPass(RISCVTargetMachine &TM, CodeGenOptLevel OptLevel);
 };
 
-FunctionPass *createRISCVLateBranchOptPass();
-void initializeRISCVLateBranchOptPass(PassRegistry &);
+class RISCVLateBranchOptPass
+    : public OptionalPassInfoMixin<RISCVLateBranchOptPass> {
+public:
+  PreservedAnalyses run(MachineFunction &MF,
+                        MachineFunctionAnalysisManager &MFAM);
+};
+FunctionPass *createRISCVLateBranchOptLegacyPass();
+void initializeRISCVLateBranchOptLegacyPass(PassRegistry &);
 
 FunctionPass *createRISCVMakeCompressibleOptPass();
 void initializeRISCVMakeCompressibleOptPass(PassRegistry &);
diff --git a/llvm/lib/Target/RISCV/RISCVLateBranchOpt.cpp b/llvm/lib/Target/RISCV/RISCVLateBranchOpt.cpp
index 28fb0b2da09d5..fb6b05c0fa416 100644
--- a/llvm/lib/Target/RISCV/RISCVLateBranchOpt.cpp
+++ b/llvm/lib/Target/RISCV/RISCVLateBranchOpt.cpp
@@ -12,8 +12,12 @@
 ///
 //===----------------------------------------------------------------------===//
 
+#include "RISCV.h"
 #include "RISCVInstrInfo.h"
 #include "RISCVSubtarget.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/CodeGen/MachinePassManager.h"
+#include "llvm/IR/Analysis.h"
 
 using namespace llvm;
 
@@ -21,10 +25,10 @@ using namespace llvm;
 
 namespace {
 
-struct RISCVLateBranchOpt : public MachineFunctionPass {
+struct RISCVLateBranchOptLegacy : public MachineFunctionPass {
   static char ID;
 
-  RISCVLateBranchOpt() : MachineFunctionPass(ID) {}
+  RISCVLateBranchOptLegacy() : MachineFunctionPass(ID) {}
 
   StringRef getPassName() const override { return RISCV_LATE_BRANCH_OPT_NAME; }
 
@@ -33,19 +37,15 @@ struct RISCVLateBranchOpt : public MachineFunctionPass {
   }
 
   bool runOnMachineFunction(MachineFunction &Fn) override;
-
-private:
-  bool runOnBasicBlock(MachineBasicBlock &MBB) const;
-
-  const RISCVInstrInfo *RII = nullptr;
 };
 } // namespace
 
-char RISCVLateBranchOpt::ID = 0;
-INITIALIZE_PASS(RISCVLateBranchOpt, "riscv-late-branch-opt",
+char RISCVLateBranchOptLegacy::ID = 0;
+INITIALIZE_PASS(RISCVLateBranchOptLegacy, "riscv-late-branch-opt",
                 RISCV_LATE_BRANCH_OPT_NAME, false, false)
 
-bool RISCVLateBranchOpt::runOnBasicBlock(MachineBasicBlock &MBB) const {
+static bool runLateBranchOptOnMBB(MachineBasicBlock &MBB,
+                                  const RISCVInstrInfo *RII) {
   MachineBasicBlock *TBB, *FBB;
   SmallVector<MachineOperand, 4> Cond;
   if (RII->analyzeBranch(MBB, TBB, FBB, Cond, /*AllowModify=*/false))
@@ -93,19 +93,29 @@ bool RISCVLateBranchOpt::runOnBasicBlock(MachineBasicBlock &MBB) const {
   return true;
 }
 
-bool RISCVLateBranchOpt::runOnMachineFunction(MachineFunction &Fn) {
-  if (skipFunction(Fn.getFunction()))
-    return false;
-
+static bool runLateBranchOptOnMF(MachineFunction &Fn) {
   auto &ST = Fn.getSubtarget<RISCVSubtarget>();
-  RII = ST.getInstrInfo();
+  const RISCVInstrInfo *RII = ST.getInstrInfo();
 
   bool Changed = false;
   for (MachineBasicBlock &MBB : Fn)
-    Changed |= runOnBasicBlock(MBB);
+    Changed |= runLateBranchOptOnMBB(MBB, RII);
   return Changed;
 }
 
-FunctionPass *llvm::createRISCVLateBranchOptPass() {
-  return new RISCVLateBranchOpt();
+FunctionPass *llvm::createRISCVLateBranchOptLegacyPass() {
+  return new RISCVLateBranchOptLegacy();
+}
+
+bool RISCVLateBranchOptLegacy::runOnMachineFunction(MachineFunction &MF) {
+  if (skipFunction(MF.getFunction()))
+    return false;
+  return runLateBranchOptOnMF(MF);
+}
+
+PreservedAnalyses
+RISCVLateBranchOptPass::run(MachineFunction &MF,
+                            MachineFunctionAnalysisManager &MFAM) {
+  return runLateBranchOptOnMF(MF) ? getMachineFunctionPassPreservedAnalyses()
+                                  : PreservedAnalyses::all();
 }
diff --git a/llvm/lib/Target/RISCV/RISCVPassRegistry.def b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
index c970960792efd..f38af93ac5b86 100644
--- a/llvm/lib/Target/RISCV/RISCVPassRegistry.def
+++ b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
@@ -46,6 +46,7 @@ MACHINE_FUNCTION_PASS("riscv-fold-mem-offset", RISCVFoldMemOffsetPass())
 MACHINE_FUNCTION_PASS("riscv-indirect-branch-tracking",
                       RISCVIndirectBranchTrackingPass())
 MACHINE_FUNCTION_PASS("riscv-isel", RISCVISelDAGToDAGPass(*this, getOptLevel()))
+MACHINE_FUNCTION_PASS("riscv-late-branch-opt", RISCVLateBranchOptPass())
 MACHINE_FUNCTION_PASS("riscv-lpad-setup", RISCVLandingPadSetupPass())
 MACHINE_FUNCTION_PASS("riscv-opt-w-instrs", RISCVOptWInstrsPass())
 MACHINE_FUNCTION_PASS("riscv-vector-peephole", RISCVVectorPeepholePass())
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
index 62fdcd1860528..adb059ab58978 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
@@ -54,7 +54,7 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeRISCVTarget() {
   initializeRISCVPostLegalizerCombinerPass(*PR);
   initializeMachineKCFILegacyPass(*PR);
   initializeRISCVDeadRegisterDefinitionsLegacyPass(*PR);
-  initializeRISCVLateBranchOptPass(*PR);
+  initializeRISCVLateBranchOptLegacyPass(*PR);
   initializeRISCVMakeCompressibleOptPass(*PR);
   initializeRISCVQCRelaxMarkingPass(*PR);
   initializeRISCVGatherScatterLoweringLegacyPass(*PR);
@@ -504,7 +504,7 @@ void RISCVPassConfig::addPreEmitPass() {
       CLOpts.enable_copy_propagation)
     addPass(createMachineCopyPropagationPass(true));
   if (TM->getOptLevel() >= CodeGenOptLevel::Default)
-    addPass(createRISCVLateBranchOptPass());
+    addPass(createRISCVLateBranchOptLegacyPass());
   // The IndirectBranchTrackingPass inserts lpad and could have changed the
   // basic block alignment. It must be done before Branch Relaxation to
   // prevent the adjusted offset exceeding the branch range.

``````````

</details>


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


More information about the llvm-branch-commits mailing list