[llvm-branch-commits] [RISCV] Port RISCVQCRelaxMarking to NewPM (PR #235253)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Oct 24 00:33:01 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. Also mark the CFG as preserved in the
LegacyPM.
---
Full diff: https://github.com/llvm/llvm-project/pull/235253.diff
4 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCV.h (+9-2)
- (modified) llvm/lib/Target/RISCV/RISCVPassRegistry.def (+1)
- (modified) llvm/lib/Target/RISCV/RISCVQCRelaxMarking.cpp (+31-11)
- (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 b8dde46b23027..1d6ff8ebea62f 100644
--- a/llvm/lib/Target/RISCV/RISCV.h
+++ b/llvm/lib/Target/RISCV/RISCV.h
@@ -260,8 +260,15 @@ void initializeRISCVVLOptimizerLegacyPass(PassRegistry &);
FunctionPass *createRISCVVMV0EliminationPass();
void initializeRISCVVMV0EliminationPass(PassRegistry &);
-FunctionPass *createRISCVQCRelaxMarkingPass();
-void initializeRISCVQCRelaxMarkingPass(PassRegistry &);
+class RISCVQCRelaxMarkingPass
+ : public OptionalPassInfoMixin<RISCVQCRelaxMarkingPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createRISCVQCRelaxMarkingLegacyPass();
+void initializeRISCVQCRelaxMarkingLegacyPass(PassRegistry &);
void initializeRISCVAsmPrinterPass(PassRegistry &);
} // namespace llvm
diff --git a/llvm/lib/Target/RISCV/RISCVPassRegistry.def b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
index 13ce3c17913bf..2d130e380b5a1 100644
--- a/llvm/lib/Target/RISCV/RISCVPassRegistry.def
+++ b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
@@ -51,6 +51,7 @@ MACHINE_FUNCTION_PASS("riscv-lpad-setup", RISCVLandingPadSetupPass())
MACHINE_FUNCTION_PASS("riscv-make-compressible", RISCVMakeCompressiblePass())
MACHINE_FUNCTION_PASS("riscv-merge-base-offset", RISCVMergeBaseOffsetPass())
MACHINE_FUNCTION_PASS("riscv-opt-w-instrs", RISCVOptWInstrsPass())
+MACHINE_FUNCTION_PASS("riscv-qc-relax-marking", RISCVQCRelaxMarkingPass())
MACHINE_FUNCTION_PASS("riscv-vector-peephole", RISCVVectorPeepholePass())
MACHINE_FUNCTION_PASS("riscv-vl-optimizer", RISCVVLOptimizerPass())
#undef MACHINE_FUNCTION_PASS
diff --git a/llvm/lib/Target/RISCV/RISCVQCRelaxMarking.cpp b/llvm/lib/Target/RISCV/RISCVQCRelaxMarking.cpp
index 33851d60c479f..e06b7656f597b 100644
--- a/llvm/lib/Target/RISCV/RISCVQCRelaxMarking.cpp
+++ b/llvm/lib/Target/RISCV/RISCVQCRelaxMarking.cpp
@@ -33,9 +33,13 @@
#include "RISCV.h"
#include "RISCVSubtarget.h"
#include "llvm/ADT/Statistic.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/RegisterScavenging.h"
+#include "llvm/IR/Analysis.h"
#include "llvm/MC/TargetRegistry.h"
+#include "llvm/Pass.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
@@ -48,26 +52,31 @@ STATISTIC(NumMarked, "Number of Loads/Stores Marked");
namespace {
-struct RISCVQCRelaxMarking : public MachineFunctionPass {
+struct RISCVQCRelaxMarkingLegacy : public MachineFunctionPass {
static char ID;
bool runOnMachineFunction(MachineFunction &) override;
- RISCVQCRelaxMarking() : MachineFunctionPass(ID) {}
+ RISCVQCRelaxMarkingLegacy() : MachineFunctionPass(ID) {}
StringRef getPassName() const override { return RISCV_QC_RELAX_MARKING_NAME; }
+
+ void getAnalysisUsage(AnalysisUsage &AU) const override {
+ AU.setPreservesCFG();
+ MachineFunctionPass::getAnalysisUsage(AU);
+ }
};
} // end namespace
-char RISCVQCRelaxMarking::ID = 0;
+char RISCVQCRelaxMarkingLegacy::ID = 0;
-INITIALIZE_PASS(RISCVQCRelaxMarking, DEBUG_TYPE, RISCV_QC_RELAX_MARKING_NAME,
- false, false)
+INITIALIZE_PASS(RISCVQCRelaxMarkingLegacy, DEBUG_TYPE,
+ RISCV_QC_RELAX_MARKING_NAME, false, false)
/// Returns an instance of the Make Compressible Optimization pass.
-FunctionPass *llvm::createRISCVQCRelaxMarkingPass() {
- return new RISCVQCRelaxMarking();
+FunctionPass *llvm::createRISCVQCRelaxMarkingLegacyPass() {
+ return new RISCVQCRelaxMarkingLegacy();
}
static bool isUImm7LSB000(const MachineOperand &MO) {
@@ -133,10 +142,7 @@ static unsigned getQCMarkedOpcode(const MachineInstr &MI,
}
}
-bool RISCVQCRelaxMarking::runOnMachineFunction(MachineFunction &MF) {
- if (skipFunction(MF.getFunction()))
- return false;
-
+static bool runQCRelaxMarking(MachineFunction &MF) {
// This is only relevant for QC.E.LI with a symbol, which we only use in the
// small code model.
if (MF.getTarget().getCodeModel() != CodeModel::Small)
@@ -217,3 +223,17 @@ bool RISCVQCRelaxMarking::runOnMachineFunction(MachineFunction &MF) {
return Changed;
}
+
+bool RISCVQCRelaxMarkingLegacy::runOnMachineFunction(MachineFunction &MF) {
+ if (skipFunction(MF.getFunction()))
+ return false;
+ return runQCRelaxMarking(MF);
+}
+
+PreservedAnalyses
+RISCVQCRelaxMarkingPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ return runQCRelaxMarking(MF) ? getMachineFunctionPassPreservedAnalyses()
+ .preserveSet<CFGAnalyses>()
+ : PreservedAnalyses::all();
+}
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
index 5a80d882653e4..b236b94a449d4 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
@@ -56,7 +56,7 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeRISCVTarget() {
initializeRISCVDeadRegisterDefinitionsLegacyPass(*PR);
initializeRISCVLateBranchOptLegacyPass(*PR);
initializeRISCVMakeCompressibleLegacyPass(*PR);
- initializeRISCVQCRelaxMarkingPass(*PR);
+ initializeRISCVQCRelaxMarkingLegacyPass(*PR);
initializeRISCVGatherScatterLoweringLegacyPass(*PR);
initializeRISCVCodeGenPrepareLegacyPass(*PR);
initializeRISCVZacasABIFixLegacyPass(*PR);
@@ -525,7 +525,7 @@ void RISCVPassConfig::addPreEmitPass2() {
// Add QC Relaxation Markers as late as possible, and only for RV32
if (TM->getOptLevel() != CodeGenOptLevel::None &&
TM->getTargetTriple().isRISCV32())
- addPass(createRISCVQCRelaxMarkingPass());
+ addPass(createRISCVQCRelaxMarkingLegacyPass());
// Schedule the expansion of AMOs at the last possible moment, avoiding the
// possibility for other passes to break the requirements for forward
``````````
</details>
https://github.com/llvm/llvm-project/pull/235253
More information about the llvm-branch-commits
mailing list