Skip to content

Commit 6cfbc3a

Browse files
committed
[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.
1 parent 61f7f9b commit 6cfbc3a

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,11 @@ TargetPassConfig *SPIRVTargetMachine::createPassConfig(PassManagerBase &PM) {
189189
void SPIRVPassConfig::addIRPasses() {
190190
TargetPassConfig::addIRPasses();
191191

192+
addPass(createSPIRVRegularizerPass());
193+
addPass(createSPIRVPrepareFunctionsPass(TM));
194+
}
195+
196+
void SPIRVPassConfig::addISelPrepare() {
192197
if (TM.getSubtargetImpl()->isShader()) {
193198
// Vulkan does not allow address space casts. This pass is run to remove
194199
// address space casts that can be removed.
@@ -220,12 +225,7 @@ void SPIRVPassConfig::addIRPasses() {
220225
addPass(createPromoteMemoryToRegisterPass());
221226
}
222227

223-
addPass(createSPIRVRegularizerPass());
224-
addPass(createSPIRVPrepareFunctionsPass(TM));
225228
addPass(createSPIRVStripConvergenceIntrinsicsPass());
226-
}
227-
228-
void SPIRVPassConfig::addISelPrepare() {
229229
addPass(createSPIRVLegalizeImplicitBindingPass());
230230
addPass(createSPIRVEmitIntrinsicsPass(&getTM<SPIRVTargetMachine>()));
231231
if (TM.getSubtargetImpl()->isLogicalSPIRV())

0 commit comments

Comments
 (0)