[llvm-branch-commits] [RISCV] Port RISCVInsertReadWriteCSR to NewPM (PR #235409)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Oct 25 00:01:41 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. Plumb TII through static helper functions
given an Impl class seems overkill for this purpose.
---
Full diff: https://github.com/llvm/llvm-project/pull/235409.diff
5 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCV.h (+9-2)
- (modified) llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp (+30-18)
- (modified) llvm/lib/Target/RISCV/RISCVPassRegistry.def (+2)
- (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 42145c031ee2c..8409404a23076 100644
--- a/llvm/lib/Target/RISCV/RISCV.h
+++ b/llvm/lib/Target/RISCV/RISCV.h
@@ -204,8 +204,15 @@ FunctionPass *createRISCVInsertVSETVLILegacyPass();
void initializeRISCVInsertVSETVLILegacyPass(PassRegistry &);
extern char &RISCVInsertVSETVLILegacyID;
-FunctionPass *createRISCVInsertReadWriteCSRPass();
-void initializeRISCVInsertReadWriteCSRPass(PassRegistry &);
+class RISCVInsertReadWriteCSRPass
+ : public RequiredPassInfoMixin<RISCVInsertReadWriteCSRPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createRISCVInsertReadWriteCSRLegacyPass();
+void initializeRISCVInsertReadWriteCSRLegacyPass(PassRegistry &);
FunctionPass *createRISCVInsertWriteVXRMPass();
void initializeRISCVInsertWriteVXRMPass(PassRegistry &);
diff --git a/llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp b/llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp
index c565928afd509..50905bed72483 100644
--- a/llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInsertReadWriteCSR.cpp
@@ -17,7 +17,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"
using namespace llvm;
#define DEBUG_TYPE "riscv-insert-read-write-csr"
@@ -25,13 +28,11 @@ using namespace llvm;
namespace {
-class RISCVInsertReadWriteCSR : public MachineFunctionPass {
- const TargetInstrInfo *TII;
-
+class RISCVInsertReadWriteCSRLegacy : public MachineFunctionPass {
public:
static char ID;
- RISCVInsertReadWriteCSR() : MachineFunctionPass(ID) {}
+ RISCVInsertReadWriteCSRLegacy() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &MF) override;
@@ -43,21 +44,18 @@ class RISCVInsertReadWriteCSR : public MachineFunctionPass {
StringRef getPassName() const override {
return RISCV_INSERT_READ_WRITE_CSR_NAME;
}
-
-private:
- bool emitWriteRoundingMode(MachineBasicBlock &MBB);
- bool emitWriteRoundingModeOpt(MachineBasicBlock &MBB);
};
} // end anonymous namespace
-char RISCVInsertReadWriteCSR::ID = 0;
+char RISCVInsertReadWriteCSRLegacy::ID = 0;
-INITIALIZE_PASS(RISCVInsertReadWriteCSR, DEBUG_TYPE,
+INITIALIZE_PASS(RISCVInsertReadWriteCSRLegacy, DEBUG_TYPE,
RISCV_INSERT_READ_WRITE_CSR_NAME, false, false)
// TODO: Use more accurate rounding mode at the start of MBB.
-bool RISCVInsertReadWriteCSR::emitWriteRoundingModeOpt(MachineBasicBlock &MBB) {
+static bool emitWriteRoundingModeOpt(MachineBasicBlock &MBB,
+ const TargetInstrInfo *TII) {
bool Changed = false;
MachineInstr *LastFRMChanger = nullptr;
unsigned CurrentRM = RISCVFPRndMode::DYN;
@@ -135,7 +133,8 @@ bool RISCVInsertReadWriteCSR::emitWriteRoundingModeOpt(MachineBasicBlock &MBB) {
// This function also swaps frm and restores it when encountering an RVV
// floating point instruction with a static rounding mode.
-bool RISCVInsertReadWriteCSR::emitWriteRoundingMode(MachineBasicBlock &MBB) {
+static bool emitWriteRoundingMode(MachineBasicBlock &MBB,
+ const TargetInstrInfo *TII) {
bool Changed = false;
for (MachineInstr &MI : MBB) {
int FRMIdx = RISCVII::getFRMOpNum(MI.getDesc());
@@ -167,26 +166,39 @@ bool RISCVInsertReadWriteCSR::emitWriteRoundingMode(MachineBasicBlock &MBB) {
return Changed;
}
-bool RISCVInsertReadWriteCSR::runOnMachineFunction(MachineFunction &MF) {
+static bool insertReadWriteCSROnMachineFunction(MachineFunction &MF) {
// Skip if the vector extension is not enabled.
const RISCVSubtarget &ST = MF.getSubtarget<RISCVSubtarget>();
if (!ST.hasVInstructions())
return false;
- TII = ST.getInstrInfo();
+ const TargetInstrInfo *TII = ST.getInstrInfo();
bool Changed = false;
for (MachineBasicBlock &MBB : MF) {
if (!ST.getCLOpts().frm_insert_opt)
- Changed |= emitWriteRoundingMode(MBB);
+ Changed |= emitWriteRoundingMode(MBB, TII);
else
- Changed |= emitWriteRoundingModeOpt(MBB);
+ Changed |= emitWriteRoundingModeOpt(MBB, TII);
}
return Changed;
}
-FunctionPass *llvm::createRISCVInsertReadWriteCSRPass() {
- return new RISCVInsertReadWriteCSR();
+FunctionPass *llvm::createRISCVInsertReadWriteCSRLegacyPass() {
+ return new RISCVInsertReadWriteCSRLegacy();
+}
+
+bool RISCVInsertReadWriteCSRLegacy::runOnMachineFunction(MachineFunction &MF) {
+ return insertReadWriteCSROnMachineFunction(MF);
+}
+
+PreservedAnalyses
+RISCVInsertReadWriteCSRPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ return insertReadWriteCSROnMachineFunction(MF)
+ ? getMachineFunctionPassPreservedAnalyses()
+ .preserveSet<CFGAnalyses>()
+ : PreservedAnalyses::all();
}
diff --git a/llvm/lib/Target/RISCV/RISCVPassRegistry.def b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
index 42a12818db6e0..1d8787ad7643d 100644
--- a/llvm/lib/Target/RISCV/RISCVPassRegistry.def
+++ b/llvm/lib/Target/RISCV/RISCVPassRegistry.def
@@ -46,6 +46,8 @@ MACHINE_FUNCTION_PASS("riscv-expand-pseudo-pre-ra",
MACHINE_FUNCTION_PASS("riscv-fold-mem-offset", RISCVFoldMemOffsetPass())
MACHINE_FUNCTION_PASS("riscv-indirect-branch-tracking",
RISCVIndirectBranchTrackingPass())
+MACHINE_FUNCTION_PASS("riscv-insert-read-write-csr",
+ RISCVInsertReadWriteCSRPass())
MACHINE_FUNCTION_PASS("riscv-insert-vsetvli", RISCVInsertVSETVLIPass())
MACHINE_FUNCTION_PASS("riscv-isel", RISCVISelDAGToDAGPass(*this, getOptLevel()))
MACHINE_FUNCTION_PASS("riscv-late-branch-opt", RISCVLateBranchOptPass())
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
index 62a2e76347bd0..16c8bca119be2 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
@@ -70,7 +70,7 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeRISCVTarget() {
initializeRISCVVLOptimizerLegacyPass(*PR);
initializeRISCVVMV0EliminationLegacyPass(*PR);
initializeRISCVInsertVSETVLILegacyPass(*PR);
- initializeRISCVInsertReadWriteCSRPass(*PR);
+ initializeRISCVInsertReadWriteCSRLegacyPass(*PR);
initializeRISCVInsertWriteVXRMPass(*PR);
initializeRISCVDAGToDAGISelLegacyPass(*PR);
initializeRISCVMoveMergePass(*PR);
@@ -573,7 +573,7 @@ void RISCVPassConfig::addPreRegAlloc() {
addPass(createRISCVPreAllocZilsdOptPass());
}
- addPass(createRISCVInsertReadWriteCSRPass());
+ addPass(createRISCVInsertReadWriteCSRLegacyPass());
addPass(createRISCVInsertWriteVXRMPass());
addPass(createRISCVLandingPadSetupLegacyPass());
diff --git a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
index 2ade1277f2009..8743a12f6a79e 100644
--- a/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
+++ b/llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp
@@ -741,7 +741,7 @@ class ExegesisRISCVTarget : public ExegesisTarget {
PM.add(exegesis::createRISCVPreprocessingPass());
PM.add(createRISCVInsertVSETVLILegacyPass());
// Setting up the correct FRM.
- PM.add(createRISCVInsertReadWriteCSRPass());
+ PM.add(createRISCVInsertReadWriteCSRLegacyPass());
PM.add(createRISCVInsertWriteVXRMPass());
// This will assign physical register to the result of VSETVLI instructions
// that produce VLMAX.
``````````
</details>
https://github.com/llvm/llvm-project/pull/235409
More information about the llvm-branch-commits
mailing list