Skip to content

Commit 57007cf

Browse files
committed
Gate legalize SSA rewrite separately
1 parent 487ff84 commit 57007cf

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

include/spirv-tools/optimizer.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ class SPIRV_TOOLS_EXPORT Optimizer {
126126
Optimizer& RegisterLegalizationPasses();
127127
Optimizer& RegisterLegalizationPasses(bool preserve_interface);
128128
Optimizer& RegisterLegalizationPasses(bool preserve_interface,
129-
bool include_loop_unroll);
129+
bool include_loop_unroll,
130+
bool include_ssa_rewrite);
130131

131132
// Register passes specified in the list of |flags|. Each flag must be a
132133
// string of a form accepted by Optimizer::FlagHasValidForm().

source/opt/optimizer.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ Optimizer& Optimizer::RegisterPass(PassToken&& p) {
121121
// problem. The optimization we use are all used to either do copy propagation
122122
// or enable more copy propagation.
123123
Optimizer& Optimizer::RegisterLegalizationPasses(bool preserve_interface,
124-
bool include_loop_unroll) {
124+
bool include_loop_unroll,
125+
bool include_ssa_rewrite) {
125126
auto& optimizer =
126127
// Wrap OpKill instructions so all other code can be inlined.
127128
RegisterPass(CreateWrapOpKillPass())
@@ -148,11 +149,15 @@ Optimizer& Optimizer::RegisterLegalizationPasses(bool preserve_interface,
148149
// Takes care of copy propagation of non-members.
149150
.RegisterPass(CreateLocalSingleBlockLoadStoreElimPass())
150151
.RegisterPass(CreateLocalSingleStoreElimPass())
151-
.RegisterPass(CreateAggressiveDCEPass(preserve_interface))
152-
.RegisterPass(CreateLocalMultiStoreElimPass())
153-
.RegisterPass(CreateCombineAccessChainsPass())
154-
.RegisterPass(CreateAggressiveDCEPass(preserve_interface))
155-
.RegisterPass(CreateLegalizeMultidimArrayPass())
152+
.RegisterPass(CreateAggressiveDCEPass(preserve_interface));
153+
if (include_ssa_rewrite) {
154+
optimizer.RegisterPass(CreateLocalMultiStoreElimPass());
155+
}
156+
optimizer.RegisterPass(CreateCombineAccessChainsPass());
157+
if (include_ssa_rewrite) {
158+
optimizer.RegisterPass(CreateAggressiveDCEPass(preserve_interface));
159+
}
160+
optimizer.RegisterPass(CreateLegalizeMultidimArrayPass())
156161
// Propagate constants to get as many constant conditions on branches
157162
// as possible.
158163
.RegisterPass(CreateCCPPass());
@@ -181,11 +186,11 @@ Optimizer& Optimizer::RegisterLegalizationPasses(bool preserve_interface,
181186
}
182187

183188
Optimizer& Optimizer::RegisterLegalizationPasses() {
184-
return RegisterLegalizationPasses(false, true);
189+
return RegisterLegalizationPasses(false, true, true);
185190
}
186191

187192
Optimizer& Optimizer::RegisterLegalizationPasses(bool preserve_interface) {
188-
return RegisterLegalizationPasses(preserve_interface, true);
193+
return RegisterLegalizationPasses(preserve_interface, true, true);
189194
}
190195

191196
Optimizer& Optimizer::RegisterPerformancePasses(bool preserve_interface) {

0 commit comments

Comments
 (0)