[llvm-branch-commits] [RISCV] Port RISCVVMV0Elimination to NewPM (PR #235254)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Oct 24 00:39:38 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/235254.diff
4 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCV.h (+13-2)
- (modified) llvm/lib/Target/RISCV/RISCVPassRegistry.def (+1)
- (modified) llvm/lib/Target/RISCV/RISCVTargetMachine.cpp (+2-2)
- (modified) llvm/lib/Target/RISCV/RISCVVMV0Elimination.cpp (+24-8)
``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCV.h b/llvm/lib/Target/RISCV/RISCV.h
index 1d6ff8ebea62f..22f25b331b6ec 100644
--- a/llvm/lib/Target/RISCV/RISCV.h
+++ b/llvm/lib/Target/RISCV/RISCV.h
@@ -257,8 +257,19 @@ class RISCVVLOptimizerPass
FunctionPass *createRISCVVLOptimizerLegacyPass();
void initializeRISCVVLOptimizerLegacyPass(PassRegistry &);
-FunctionPass *createRISCVVMV0EliminationPass();
-void initializeRISCVVMV0EliminationPass(PassRegistry &);
+class RISCVVMV0EliminationPass
+ : public RequiredPassInfoMixin<RISCVVMV0EliminationPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+
+ MachineFunctionProperties getRequiredProperties() const {
+ return MachineFunctionProperties().setIsSSA();
+ }
+};
+
+FunctionPass *createRISCVVMV0EliminationLegacyPass();
+void initializeRISCVVMV0EliminationLegacyPass(PassRegistry &);
class RISCVQCRelaxMarkingPass
: public OptionalPassInfoMixin<RISCVQCRelaxMarkingPass> {
diff --git a/llvm/lib/Target/RISCV/RISCVPassRegistry.def b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
index 2d130e380b5a1..09da40b7d3bc5 100644
--- a/llvm/lib/Target/RISCV/RISCVPassRegistry.def
+++ b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
@@ -54,4 +54,5 @@ 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())
+MACHINE_FUNCTION_PASS("risv-vmv0-elimination", RISCVVMV0EliminationPass())
#undef MACHINE_FUNCTION_PASS
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
index b236b94a449d4..59ad1c2e21516 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
@@ -68,7 +68,7 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeRISCVTarget() {
initializeRISCVExpandPseudoPreEmitLegacyPass(*PR);
initializeRISCVVectorPeepholeLegacyPass(*PR);
initializeRISCVVLOptimizerLegacyPass(*PR);
- initializeRISCVVMV0EliminationPass(*PR);
+ initializeRISCVVMV0EliminationLegacyPass(*PR);
initializeRISCVInsertVSETVLIPass(*PR);
initializeRISCVInsertReadWriteCSRPass(*PR);
initializeRISCVInsertWriteVXRMPass(*PR);
@@ -580,7 +580,7 @@ void RISCVPassConfig::addPreRegAlloc() {
if (TM->getOptLevel() != CodeGenOptLevel::None && CLOpts.enable_pipeliner)
addPass(&MachinePipelinerID);
- addPass(createRISCVVMV0EliminationPass());
+ addPass(createRISCVVMV0EliminationLegacyPass());
}
void RISCVPassConfig::addFastRegAlloc() {
diff --git a/llvm/lib/Target/RISCV/RISCVVMV0Elimination.cpp b/llvm/lib/Target/RISCV/RISCVVMV0Elimination.cpp
index d72d27c983ada..947ba970f1ad7 100644
--- a/llvm/lib/Target/RISCV/RISCVVMV0Elimination.cpp
+++ b/llvm/lib/Target/RISCV/RISCVVMV0Elimination.cpp
@@ -31,6 +31,9 @@
#include "RISCV.h"
#include "RISCVSubtarget.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/CodeGen/MachinePassManager.h"
+#include "llvm/IR/Analysis.h"
#ifndef NDEBUG
#include "llvm/ADT/PostOrderIterator.h"
#endif
@@ -42,10 +45,10 @@ using namespace llvm;
namespace {
-class RISCVVMV0Elimination : public MachineFunctionPass {
+class RISCVVMV0EliminationLegacy : public MachineFunctionPass {
public:
static char ID;
- RISCVVMV0Elimination() : MachineFunctionPass(ID) {}
+ RISCVVMV0EliminationLegacy() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &MF) override;
@@ -64,20 +67,20 @@ class RISCVVMV0Elimination : public MachineFunctionPass {
} // namespace
-char RISCVVMV0Elimination::ID = 0;
+char RISCVVMV0EliminationLegacy::ID = 0;
-INITIALIZE_PASS(RISCVVMV0Elimination, DEBUG_TYPE, "RISC-V VMV0 Elimination",
- false, false)
+INITIALIZE_PASS(RISCVVMV0EliminationLegacy, DEBUG_TYPE,
+ "RISC-V VMV0 Elimination", false, false)
-FunctionPass *llvm::createRISCVVMV0EliminationPass() {
- return new RISCVVMV0Elimination();
+FunctionPass *llvm::createRISCVVMV0EliminationLegacyPass() {
+ return new RISCVVMV0EliminationLegacy();
}
static bool isVMV0(const MCOperandInfo &MCOI) {
return MCOI.RegClass == RISCV::VMV0RegClassID;
}
-bool RISCVVMV0Elimination::runOnMachineFunction(MachineFunction &MF) {
+static bool runVMV0Elimination(MachineFunction &MF) {
// Skip if the vector extension is not enabled.
const RISCVSubtarget *ST = &MF.getSubtarget<RISCVSubtarget>();
if (!ST->hasVInstructions())
@@ -173,3 +176,16 @@ bool RISCVVMV0Elimination::runOnMachineFunction(MachineFunction &MF) {
return true;
}
+
+bool RISCVVMV0EliminationLegacy::runOnMachineFunction(MachineFunction &MF) {
+ return runVMV0Elimination(MF);
+}
+
+PreservedAnalyses
+RISCVVMV0EliminationPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ MFPropsModifier _(*this, MF);
+ return runVMV0Elimination(MF) ? getMachineFunctionPassPreservedAnalyses()
+ .preserveSet<CFGAnalyses>()
+ : PreservedAnalyses::all();
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/235254
More information about the llvm-branch-commits
mailing list