[llvm-branch-commits] [RISCV] Port InsertWriteVXRM to NewPM (PR #235412)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Oct 25 00:30:30 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-tools-llvm-exegesis
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
Standard NewPM pass porting.
---
Full diff: https://github.com/llvm/llvm-project/pull/235412.diff
5 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCV.h (+9-2)
- (modified) llvm/lib/Target/RISCV/RISCVInsertWriteVXRM.cpp (+43-18)
- (modified) llvm/lib/Target/RISCV/RISCVPassRegistry.def (+1)
- (modified) llvm/lib/Target/RISCV/RISCVTargetMachine.cpp (+2-2)
- (modified) llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp (+1-1)
``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCV.h b/llvm/lib/Target/RISCV/RISCV.h
index 8409404a23076..9e1df92cbbf99 100644
--- a/llvm/lib/Target/RISCV/RISCV.h
+++ b/llvm/lib/Target/RISCV/RISCV.h
@@ -214,8 +214,15 @@ class RISCVInsertReadWriteCSRPass
FunctionPass *createRISCVInsertReadWriteCSRLegacyPass();
void initializeRISCVInsertReadWriteCSRLegacyPass(PassRegistry &);
-FunctionPass *createRISCVInsertWriteVXRMPass();
-void initializeRISCVInsertWriteVXRMPass(PassRegistry &);
+class RISCVInsertWriteVXRMPass
+ : public RequiredPassInfoMixin<RISCVInsertWriteVXRMPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createRISCVInsertWriteVXRMLegacyPass();
+void initializeRISCVInsertWriteVXRMLegacyPass(PassRegistry &);
FunctionPass *createRISCVRedundantCopyEliminationPass();
void initializeRISCVRedundantCopyEliminationPass(PassRegistry &);
diff --git a/llvm/lib/Target/RISCV/RISCVInsertWriteVXRM.cpp b/llvm/lib/Target/RISCV/RISCVInsertWriteVXRM.cpp
index c58a5c07a34f7..a2012807061f7 100644
--- a/llvm/lib/Target/RISCV/RISCVInsertWriteVXRM.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInsertWriteVXRM.cpp
@@ -28,7 +28,10 @@
#include "MCTargetDesc/RISCVBaseInfo.h"
#include "RISCV.h"
#include "RISCVSubtarget.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachinePassManager.h"
+#include "llvm/IR/Analysis.h"
#include <queue>
using namespace llvm;
@@ -191,16 +194,27 @@ struct BlockData {
BlockData() = default;
};
-class RISCVInsertWriteVXRM : public MachineFunctionPass {
+class RISCVInsertWriteVXRMImpl {
const TargetInstrInfo *TII;
std::vector<BlockData> BlockInfo;
std::queue<const MachineBasicBlock *> WorkList;
+ bool computeVXRMChanges(const MachineBasicBlock &MBB);
+ void computeAvailable(const MachineBasicBlock &MBB);
+ void computeAnticipated(const MachineFunction &MF,
+ const MachineBasicBlock &MBB);
+ void emitWriteVXRM(MachineBasicBlock &MBB);
+
+public:
+ bool runOnMachineFunction(MachineFunction &MF);
+};
+
+class RISCVInsertWriteVXRMLegacy : public MachineFunctionPass {
public:
static char ID;
- RISCVInsertWriteVXRM() : MachineFunctionPass(ID) {}
+ RISCVInsertWriteVXRMLegacy() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &MF) override;
@@ -212,22 +226,17 @@ class RISCVInsertWriteVXRM : public MachineFunctionPass {
StringRef getPassName() const override {
return RISCV_INSERT_WRITE_VXRM_NAME;
}
-
-private:
- bool computeVXRMChanges(const MachineBasicBlock &MBB);
- void computeAvailable(const MachineBasicBlock &MBB);
- void computeAnticipated(const MachineFunction &MF, const MachineBasicBlock &MBB);
- void emitWriteVXRM(MachineBasicBlock &MBB);
};
} // end anonymous namespace
-char RISCVInsertWriteVXRM::ID = 0;
+char RISCVInsertWriteVXRMLegacy::ID = 0;
-INITIALIZE_PASS(RISCVInsertWriteVXRM, DEBUG_TYPE, RISCV_INSERT_WRITE_VXRM_NAME,
- false, false)
+INITIALIZE_PASS(RISCVInsertWriteVXRMLegacy, DEBUG_TYPE,
+ RISCV_INSERT_WRITE_VXRM_NAME, false, false)
-bool RISCVInsertWriteVXRM::computeVXRMChanges(const MachineBasicBlock &MBB) {
+bool RISCVInsertWriteVXRMImpl::computeVXRMChanges(
+ const MachineBasicBlock &MBB) {
BlockData &BBInfo = BlockInfo[MBB.getNumber()];
bool NeedVXRMWrite = false;
@@ -256,7 +265,7 @@ bool RISCVInsertWriteVXRM::computeVXRMChanges(const MachineBasicBlock &MBB) {
return NeedVXRMWrite;
}
-void RISCVInsertWriteVXRM::computeAvailable(const MachineBasicBlock &MBB) {
+void RISCVInsertWriteVXRMImpl::computeAvailable(const MachineBasicBlock &MBB) {
BlockData &BBInfo = BlockInfo[MBB.getNumber()];
BBInfo.InQueue = false;
@@ -298,7 +307,8 @@ void RISCVInsertWriteVXRM::computeAvailable(const MachineBasicBlock &MBB) {
}
}
-void RISCVInsertWriteVXRM::computeAnticipated(const MachineFunction &MF, const MachineBasicBlock &MBB) {
+void RISCVInsertWriteVXRMImpl::computeAnticipated(
+ const MachineFunction &MF, const MachineBasicBlock &MBB) {
BlockData &BBInfo = BlockInfo[MBB.getNumber()];
const RISCVSubtarget &ST = MF.getSubtarget<RISCVSubtarget>();
@@ -347,7 +357,7 @@ void RISCVInsertWriteVXRM::computeAnticipated(const MachineFunction &MF, const M
}
}
-void RISCVInsertWriteVXRM::emitWriteVXRM(MachineBasicBlock &MBB) {
+void RISCVInsertWriteVXRMImpl::emitWriteVXRM(MachineBasicBlock &MBB) {
const BlockData &BBInfo = BlockInfo[MBB.getNumber()];
VXRMInfo Info = BBInfo.AvailableIn;
@@ -437,7 +447,7 @@ void RISCVInsertWriteVXRM::emitWriteVXRM(MachineBasicBlock &MBB) {
}
}
-bool RISCVInsertWriteVXRM::runOnMachineFunction(MachineFunction &MF) {
+bool RISCVInsertWriteVXRMImpl::runOnMachineFunction(MachineFunction &MF) {
// Skip if the vector extension is not enabled.
const RISCVSubtarget &ST = MF.getSubtarget<RISCVSubtarget>();
if (!ST.hasVInstructions())
@@ -489,6 +499,21 @@ bool RISCVInsertWriteVXRM::runOnMachineFunction(MachineFunction &MF) {
return true;
}
-FunctionPass *llvm::createRISCVInsertWriteVXRMPass() {
- return new RISCVInsertWriteVXRM();
+FunctionPass *llvm::createRISCVInsertWriteVXRMLegacyPass() {
+ return new RISCVInsertWriteVXRMLegacy();
+}
+
+bool RISCVInsertWriteVXRMLegacy::runOnMachineFunction(MachineFunction &MF) {
+ RISCVInsertWriteVXRMImpl Impl;
+ return Impl.runOnMachineFunction(MF);
+}
+
+PreservedAnalyses
+RISCVInsertWriteVXRMPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ RISCVInsertWriteVXRMImpl Impl;
+ return Impl.runOnMachineFunction(MF)
+ ? getMachineFunctionPassPreservedAnalyses()
+ .preserveSet<CFGAnalyses>()
+ : PreservedAnalyses::all();
}
diff --git a/llvm/lib/Target/RISCV/RISCVPassRegistry.def b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
index 1d8787ad7643d..b6003a9c29f02 100644
--- a/llvm/lib/Target/RISCV/RISCVPassRegistry.def
+++ b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
@@ -49,6 +49,7 @@ MACHINE_FUNCTION_PASS("riscv-indirect-branch-tracking",
MACHINE_FUNCTION_PASS("riscv-insert-read-write-csr",
RISCVInsertReadWriteCSRPass())
MACHINE_FUNCTION_PASS("riscv-insert-vsetvli", RISCVInsertVSETVLIPass())
+MACHINE_FUNCTION_PASS("riscv-insert-write-vxrm", RISCVInsertWriteVXRMPass())
MACHINE_FUNCTION_PASS("riscv-isel", RISCVISelDAGToDAGPass(*this, getOptLevel()))
MACHINE_FUNCTION_PASS("riscv-late-branch-opt", RISCVLateBranchOptPass())
MACHINE_FUNCTION_PASS("riscv-lpad-setup", RISCVLandingPadSetupPass())
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
index 16c8bca119be2..394014d6c1e7c 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
@@ -71,7 +71,7 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeRISCVTarget() {
initializeRISCVVMV0EliminationLegacyPass(*PR);
initializeRISCVInsertVSETVLILegacyPass(*PR);
initializeRISCVInsertReadWriteCSRLegacyPass(*PR);
- initializeRISCVInsertWriteVXRMPass(*PR);
+ initializeRISCVInsertWriteVXRMLegacyPass(*PR);
initializeRISCVDAGToDAGISelLegacyPass(*PR);
initializeRISCVMoveMergePass(*PR);
initializeRISCVPushPopOptPass(*PR);
@@ -574,7 +574,7 @@ void RISCVPassConfig::addPreRegAlloc() {
}
addPass(createRISCVInsertReadWriteCSRLegacyPass());
- addPass(createRISCVInsertWriteVXRMPass());
+ addPass(createRISCVInsertWriteVXRMLegacyPass());
addPass(createRISCVLandingPadSetupLegacyPass());
if (TM->getOptLevel() != CodeGenOptLevel::None && CLOpts.enable_pipeliner)
diff --git a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
index 8743a12f6a79e..ca7ddd1ab0a69 100644
--- a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
@@ -742,7 +742,7 @@ class ExegesisRISCVTarget : public ExegesisTarget {
PM.add(createRISCVInsertVSETVLILegacyPass());
// Setting up the correct FRM.
PM.add(createRISCVInsertReadWriteCSRLegacyPass());
- PM.add(createRISCVInsertWriteVXRMPass());
+ PM.add(createRISCVInsertWriteVXRMLegacyPass());
// This will assign physical register to the result of VSETVLI instructions
// that produce VLMAX.
PM.add(exegesis::createRISCVPostprocessingPass());
``````````
</details>
https://github.com/llvm/llvm-project/pull/235412
More information about the llvm-branch-commits
mailing list