[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