[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