[llvm-branch-commits] [SPIRV][NewPM] Port SPIRVPostLegalizer (PR #219109)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Aug 26 21:45:54 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-spir-v
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
Standard NewPM pass porting. Most of the implementation was already in
static functions so this was pretty simple.
---
Full diff: https://github.com/llvm/llvm-project/pull/219109.diff
5 Files Affected:
- (modified) llvm/lib/Target/SPIRV/SPIRV.h (+10-2)
- (modified) llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp (+1-1)
- (modified) llvm/lib/Target/SPIRV/SPIRVPassRegistry.def (+1)
- (modified) llvm/lib/Target/SPIRV/SPIRVPostLegalizer.cpp (+23-8)
- (modified) llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp (+2-2)
``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRV.h b/llvm/lib/Target/SPIRV/SPIRV.h
index cbf951443f0bf..8ac55ee28b13f 100644
--- a/llvm/lib/Target/SPIRV/SPIRV.h
+++ b/llvm/lib/Target/SPIRV/SPIRV.h
@@ -136,7 +136,15 @@ class SPIRVPreLegalizerCombinerPass
};
FunctionPass *createSPIRVPreLegalizerCombinerLegacyPass();
-FunctionPass *createSPIRVPostLegalizerPass();
+
+class SPIRVPostLegalizerPass
+ : public RequiredPassInfoMixin<SPIRVPostLegalizerPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createSPIRVPostLegalizerLegacyPass();
class SPIRVEmitIntrinsicsPass
: public RequiredPassInfoMixin<SPIRVEmitIntrinsicsPass> {
@@ -175,7 +183,7 @@ void initializeSPIRVAsmPrinterPass(PassRegistry &);
void initializeSPIRVConvergenceRegionAnalysisWrapperPassPass(PassRegistry &);
void initializeSPIRVPreLegalizerLegacyPass(PassRegistry &);
void initializeSPIRVPreLegalizerCombinerLegacyPass(PassRegistry &);
-void initializeSPIRVPostLegalizerPass(PassRegistry &);
+void initializeSPIRVPostLegalizerLegacyPass(PassRegistry &);
void initializeSPIRVStructurizerPass(PassRegistry &);
void initializeSPIRVCBufferAccessLegacyPass(PassRegistry &);
void initializeSPIRVPushConstantAccessLegacyPass(PassRegistry &);
diff --git a/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp b/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp
index e01b8c296f0d8..9f5afe9ca5c77 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp
@@ -157,7 +157,7 @@ void SPIRVCodeGenPassBuilder::addPreLegalizeMachineIR(PassManagerWrapper &PMW) {
Error SPIRVCodeGenPassBuilder::addLegalizeMachineIR(PassManagerWrapper &PMW) {
addMachineFunctionPass(LegalizerPass(), PMW);
- // TODO(boomanaiden154): Add SPIRVPostLegalizerPass when it has been ported.
+ addMachineFunctionPass(SPIRVPostLegalizerPass(), PMW);
return Error::success();
}
diff --git a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
index b759ab117f98c..070c8bfbc4898 100644
--- a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
+++ b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
@@ -45,6 +45,7 @@ FUNCTION_ANALYSIS("spirv-convergence-region", SPIRVConvergenceRegionAnalysis())
#ifndef MACHINE_FUNCTION_PASS
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
#endif
+MACHINE_FUNCTION_PASS("spirv-postlegalizer", SPIRVPostLegalizerPass())
MACHINE_FUNCTION_PASS("spirv-prelegalizer", SPIRVPreLegalizerPass())
MACHINE_FUNCTION_PASS("spirv-prelegalizer-combiner", SPIRVPreLegalizerCombinerPass())
#undef MACHINE_FUNCTION_PASS
diff --git a/llvm/lib/Target/SPIRV/SPIRVPostLegalizer.cpp b/llvm/lib/Target/SPIRV/SPIRVPostLegalizer.cpp
index 33abbe2eedaae..740ee7c128b8e 100644
--- a/llvm/lib/Target/SPIRV/SPIRVPostLegalizer.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVPostLegalizer.cpp
@@ -18,6 +18,10 @@
#include "SPIRVUtils.h"
#include "llvm/CodeGen/GlobalISel/GenericMachineInstrs.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/CodeGen/MachinePassManager.h"
+#include "llvm/IR/Analysis.h"
#include "llvm/IR/IntrinsicsSPIRV.h"
#include "llvm/Support/Debug.h"
#include <stack>
@@ -27,10 +31,10 @@
using namespace llvm;
namespace {
-class SPIRVPostLegalizer : public MachineFunctionPass {
+class SPIRVPostLegalizerLegacy : public MachineFunctionPass {
public:
static char ID;
- SPIRVPostLegalizer() : MachineFunctionPass(ID) {}
+ SPIRVPostLegalizerLegacy() : MachineFunctionPass(ID) {}
bool runOnMachineFunction(MachineFunction &MF) override;
};
} // namespace
@@ -553,7 +557,7 @@ static void ensureAssignTypeForTypeFolding(MachineFunction &MF,
}
}
-bool SPIRVPostLegalizer::runOnMachineFunction(MachineFunction &MF) {
+static bool runPostLegalizer(MachineFunction &MF) {
// Initialize the type registry.
const SPIRVSubtarget &ST = MF.getSubtarget<SPIRVSubtarget>();
SPIRVGlobalRegistry *GR = ST.getSPIRVGlobalRegistry();
@@ -563,11 +567,22 @@ bool SPIRVPostLegalizer::runOnMachineFunction(MachineFunction &MF) {
return true;
}
-INITIALIZE_PASS(SPIRVPostLegalizer, DEBUG_TYPE, "SPIRV post legalizer", false,
- false)
+INITIALIZE_PASS(SPIRVPostLegalizerLegacy, DEBUG_TYPE, "SPIRV post legalizer",
+ false, false)
-char SPIRVPostLegalizer::ID = 0;
+char SPIRVPostLegalizerLegacy::ID = 0;
-FunctionPass *llvm::createSPIRVPostLegalizerPass() {
- return new SPIRVPostLegalizer();
+FunctionPass *llvm::createSPIRVPostLegalizerLegacyPass() {
+ return new SPIRVPostLegalizerLegacy();
+}
+
+bool SPIRVPostLegalizerLegacy::runOnMachineFunction(MachineFunction &MF) {
+ return runPostLegalizer(MF);
+}
+
+PreservedAnalyses
+SPIRVPostLegalizerPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ return runPostLegalizer(MF) ? getMachineFunctionPassPreservedAnalyses()
+ : PreservedAnalyses::all();
}
diff --git a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
index e69eaab88c369..6999afbaf21be 100644
--- a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
@@ -57,7 +57,7 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeSPIRVTarget() {
initializeSPIRVLegalizeZeroSizeArraysLegacyPass(PR);
initializeSPIRVRegularizerLegacyPass(PR);
initializeSPIRVPreLegalizerLegacyPass(PR);
- initializeSPIRVPostLegalizerPass(PR);
+ initializeSPIRVPostLegalizerLegacyPass(PR);
initializeSPIRVMergeRegionExitTargetsLegacyPass(PR);
initializeSPIRVEmitIntrinsicsLegacyPass(PR);
initializeSPIRVPrepareFunctionsLegacyPass(PR);
@@ -247,7 +247,7 @@ void SPIRVPassConfig::addPreLegalizeMachineIR() {
// Use the default legalizer.
bool SPIRVPassConfig::addLegalizeMachineIR() {
addPass(new LegalizerLegacy());
- addPass(createSPIRVPostLegalizerPass());
+ addPass(createSPIRVPostLegalizerLegacyPass());
return false;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/219109
More information about the llvm-branch-commits
mailing list