@@ -189,36 +189,36 @@ Optimizer& Optimizer::RegisterLegalizationPasses(bool preserve_interface) {
189189}
190190
191191Optimizer& Optimizer::RegisterPerformancePasses (bool preserve_interface) {
192- auto & optimizer = RegisterPass (CreateWrapOpKillPass ())
192+ return RegisterPass (CreateWrapOpKillPass ())
193193 .RegisterPass (CreateDeadBranchElimPass ())
194194 .RegisterPass (CreateMergeReturnPass ())
195195 .RegisterPass (CreateInlineExhaustivePass ())
196196 .RegisterPass (CreateEliminateDeadFunctionsPass ())
197+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
197198 .RegisterPass (CreatePrivateToLocalPass ())
198199 .RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
199200 .RegisterPass (CreateLocalSingleStoreElimPass ())
200201 .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
201202 .RegisterPass (CreateScalarReplacementPass (0 ))
202- .RegisterPass (CreateLocalAccessChainConvertPass ());
203- optimizer .RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
203+ .RegisterPass (CreateLocalAccessChainConvertPass ())
204+ .RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
204205 .RegisterPass (CreateLocalSingleStoreElimPass ())
205- .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.
212- optimizer.RegisterPass (CreateDeadBranchElimPass ());
213- optimizer.RegisterPass (CreateLocalRedundancyEliminationPass ());
214- optimizer.RegisterPass (CreateCombineAccessChainsPass ())
206+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
207+ .RegisterPass (CreateLocalMultiStoreElimPass ())
208+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
209+ .RegisterPass (CreateCCPPass ())
210+ .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
211+ .RegisterPass (CreateLoopUnrollPass (true ))
212+ .RegisterPass (CreateDeadBranchElimPass ())
213+ .RegisterPass (CreateRedundancyEliminationPass ())
214+ .RegisterPass (CreateCombineAccessChainsPass ())
215215 .RegisterPass (CreateSimplificationPass ())
216216 .RegisterPass (CreateScalarReplacementPass (0 ))
217217 .RegisterPass (CreateLocalAccessChainConvertPass ())
218218 .RegisterPass (CreateLocalSingleBlockLoadStoreElimPass ())
219219 .RegisterPass (CreateLocalSingleStoreElimPass ())
220220 .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
221- .RegisterPass (CreateSSARewritePass (SSARewriteMode::SpecialTypes ))
221+ .RegisterPass (CreateSSARewritePass ())
222222 .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
223223 .RegisterPass (CreateVectorDCEPass ())
224224 .RegisterPass (CreateDeadInsertElimPass ())
@@ -228,9 +228,9 @@ Optimizer& Optimizer::RegisterPerformancePasses(bool preserve_interface) {
228228 .RegisterPass (CreateCopyPropagateArraysPass ())
229229 .RegisterPass (CreateReduceLoadSizePass ())
230230 .RegisterPass (CreateAggressiveDCEPass (preserve_interface))
231- .RegisterPass (CreateBlockMergePass ());
232- optimizer .RegisterPass (CreateLocalRedundancyEliminationPass ());
233- return optimizer .RegisterPass (CreateDeadBranchElimPass ())
231+ .RegisterPass (CreateBlockMergePass ())
232+ .RegisterPass (CreateRedundancyEliminationPass ())
233+ .RegisterPass (CreateDeadBranchElimPass ())
234234 .RegisterPass (CreateBlockMergePass ())
235235 .RegisterPass (CreateSimplificationPass ());
236236}
0 commit comments