@@ -199,16 +199,16 @@ Optimizer& Optimizer::RegisterPerformancePasses(bool preserve_interface) {
199199 .RegisterPass (CreateLocalSingleStoreElimPass ())
200200 .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
201201 .RegisterPass (CreateScalarReplacementPass (0 ))
202- .RegisterPass (CreateLocalAccessChainConvertPass ());
203- optimizer.RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
202+ .RegisterPass (CreateLocalAccessChainConvertPass ());
203+ optimizer.RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
204204 .RegisterPass (CreateLocalSingleStoreElimPass ())
205205 .RegisterPass (CreateAggressiveDCEPass (preserve_interface));
206- optimizer.RegisterPass (CreateCCPPass ())
207- .RegisterPass (CreateAggressiveDCEPass (preserve_interface));
208- // Preserve LoopControl::Unroll in the IR instead of always materializing
209- // it here. The optimizer-side full unroll is very costly on large modules
210- // with many tiny [unroll]-annotated loops, while the hint remains available
211- // to downstream consumers in the final SPIR-V.
206+ optimizer.RegisterPass (CreateCCPPass ())
207+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface));
208+ // Preserve LoopControl::Unroll in the IR instead of always materializing
209+ // it here. The optimizer-side full unroll is very costly on large modules
210+ // with many tiny [unroll]-annotated loops, while the hint remains available
211+ // to downstream consumers in the final SPIR-V.
212212 optimizer.RegisterPass (CreateDeadBranchElimPass ());
213213 optimizer.RegisterPass (CreateLocalRedundancyEliminationPass ());
214214 optimizer.RegisterPass (CreateCombineAccessChainsPass ())
@@ -218,7 +218,7 @@ Optimizer& Optimizer::RegisterPerformancePasses(bool preserve_interface) {
218218 .RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
219219 .RegisterPass (CreateLocalSingleStoreElimPass ())
220220 .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
221- .RegisterPass (CreateSSARewritePass (SSARewriteMode::SpecialTypes))
221+ .RegisterPass (CreateSSARewritePass (SSARewriteMode::SpecialTypes))
222222 .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
223223 .RegisterPass (CreateVectorDCEPass ())
224224 .RegisterPass (CreateDeadInsertElimPass ())
@@ -239,6 +239,58 @@ Optimizer& Optimizer::RegisterPerformancePasses() {
239239 return RegisterPerformancePasses (false );
240240}
241241
242+ Optimizer& Optimizer::RegisterPerformancePassesFastCompile (
243+ bool preserve_interface) {
244+ auto & optimizer = RegisterPass (CreateAggressiveDCEPass (preserve_interface))
245+ .RegisterPass (CreateDeadVariableEliminationPass ())
246+ .RegisterPass (CreateRemoveUnusedInterfaceVariablesPass ())
247+ .RegisterPass (CreateWrapOpKillPass ())
248+ .RegisterPass (CreateDeadBranchElimPass ())
249+ .RegisterPass (CreateMergeReturnPass ())
250+ .RegisterPass (CreateInlineExhaustivePass ())
251+ .RegisterPass (CreateEliminateDeadFunctionsPass ())
252+ .RegisterPass (CreatePrivateToLocalPass ())
253+ .RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
254+ .RegisterPass (CreateLocalSingleStoreElimPass ())
255+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
256+ .RegisterPass (CreateScalarReplacementPass (0 ))
257+ .RegisterPass (CreateLocalAccessChainConvertPass ());
258+ optimizer.RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
259+ .RegisterPass (CreateLocalSingleStoreElimPass ())
260+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface));
261+ optimizer.RegisterPass (CreateCCPPass ())
262+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface));
263+ optimizer.RegisterPass (CreateDeadBranchElimPass ());
264+ optimizer.RegisterPass (CreateLocalRedundancyEliminationPass ());
265+ optimizer.RegisterPass (CreateCombineAccessChainsPass ())
266+ .RegisterPass (CreateSimplificationPass ())
267+ .RegisterPass (CreateScalarReplacementPass (0 ))
268+ .RegisterPass (CreateLocalAccessChainConvertPass ())
269+ .RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
270+ .RegisterPass (CreateLocalSingleStoreElimPass ())
271+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
272+ .RegisterPass (CreateSSARewritePass (SSARewriteMode::SpecialTypes))
273+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
274+ .RegisterPass (CreateVectorDCEPass ())
275+ .RegisterPass (CreateDeadInsertElimPass ())
276+ .RegisterPass (CreateDeadBranchElimPass ())
277+ .RegisterPass (CreateSimplificationPass ())
278+ .RegisterPass (CreateIfConversionPass ())
279+ .RegisterPass (CreateCopyPropagateArraysPass ())
280+ .RegisterPass (CreateReduceLoadSizePass ())
281+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
282+ .RegisterPass (CreateBlockMergePass ());
283+ optimizer.RegisterPass (CreateLocalRedundancyEliminationPass ());
284+ return optimizer.RegisterPass (CreateAggressiveDCEPass (preserve_interface))
285+ .RegisterPass (CreateDeadBranchElimPass ())
286+ .RegisterPass (CreateBlockMergePass ())
287+ .RegisterPass (CreateSimplificationPass ());
288+ }
289+
290+ Optimizer& Optimizer::RegisterPerformancePassesFastCompile () {
291+ return RegisterPerformancePassesFastCompile (false );
292+ }
293+
242294Optimizer& Optimizer::RegisterSizePasses (bool preserve_interface) {
243295 return RegisterPass (CreateWrapOpKillPass ())
244296 .RegisterPass (CreateDeadBranchElimPass ())
0 commit comments