[llvm] [SPIR-V] Move structurizer to ISel prepare (PR #157886)
Nathan Gauër via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 10 08:48:46 PDT 2025
https://github.com/Keenuts created https://github.com/llvm/llvm-project/pull/157886
Some passes like LoopSimplify/SimplifyCFF are running between IRPasses and ISelPrepare. This is an issue because the structurizer generates OpSelectionMerge/OpLoopMerge instructions at specific places, and those passes are moving them.
Moving the structurizer later solves this issue.
>From 9ee7f91d756d7c0fc87e46e5d2ce8c19d60c8d5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nathan=20Gau=C3=ABr?= <brioche at google.com>
Date: Wed, 10 Sep 2025 17:29:06 +0200
Subject: [PATCH] [SPIR-V] Move structurizer to ISel prepare
Some passes like LoopSimplify/SimplifyCFF are running between
IRPasses and ISelPrepare. This is an issue because the structurizer
generates OpSelectionMerge/OpLoopMerge instructions at specific places,
and those passes are moving them.
Moving the structurizer later solves this issue.
---
llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
index e0bfb77f4b530..9c58f468c9bd6 100644
--- a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp
@@ -189,6 +189,11 @@ TargetPassConfig *SPIRVTargetMachine::createPassConfig(PassManagerBase &PM) {
void SPIRVPassConfig::addIRPasses() {
TargetPassConfig::addIRPasses();
+ addPass(createSPIRVRegularizerPass());
+ addPass(createSPIRVPrepareFunctionsPass(TM));
+}
+
+void SPIRVPassConfig::addISelPrepare() {
if (TM.getSubtargetImpl()->isShader()) {
// Vulkan does not allow address space casts. This pass is run to remove
// address space casts that can be removed.
@@ -220,12 +225,7 @@ void SPIRVPassConfig::addIRPasses() {
addPass(createPromoteMemoryToRegisterPass());
}
- addPass(createSPIRVRegularizerPass());
- addPass(createSPIRVPrepareFunctionsPass(TM));
addPass(createSPIRVStripConvergenceIntrinsicsPass());
-}
-
-void SPIRVPassConfig::addISelPrepare() {
addPass(createSPIRVLegalizeImplicitBindingPass());
addPass(createSPIRVEmitIntrinsicsPass(&getTM<SPIRVTargetMachine>()));
if (TM.getSubtargetImpl()->isLogicalSPIRV())
More information about the llvm-commits
mailing list