@@ -70,53 +70,54 @@ public void doInlining() {
7070 public int inlineLuaDivModHelpersWithinLocalBudget () {
7171 return new ImInliner (trans ).inlineLuaDivModHelpersWithinLocalBudget ();
7272 }
73-
74- private int optCount = 1 ;
75-
7673 public void localOptimizations () {
7774 totalCount .clear ();
78- optCount = 1 ;
7975
8076 removeGarbage ();
8177
82- int finalItr = 0 ;
83- for (int i = 1 ; i <= 10 && optCount > 0 ; i ++) {
84- optCount = 0 ;
85- LocalPlayerContextAnalyzer localPlayerContextAnalyzer = null ;
86- for (OptimizerPass pass : localPasses ) {
87- int count ;
88- if (pass instanceof LocalPlayerAwareOptimizerPass ) {
89- if (localPlayerContextAnalyzer == null ) {
90- localPlayerContextAnalyzer =
91- new LocalPlayerContextAnalyzer (trans .getImProg ());
92- }
93- LocalPlayerContextAnalyzer analyzer = localPlayerContextAnalyzer ;
94- LocalPlayerAwareOptimizerPass localPlayerAwarePass =
95- (LocalPlayerAwareOptimizerPass ) pass ;
96- count = timeTaker .measure (
97- pass .getName (),
98- () -> localPlayerAwarePass .optimize (trans , analyzer ));
99- } else {
100- count = timeTaker .measure (pass .getName (), () -> pass .optimize (trans ));
101- // A general mutating pass may invalidate dependency edges.
102- localPlayerContextAnalyzer = null ;
103- }
104- optCount += count ;
105- totalCount .put (pass .getName (), totalCount .getOrDefault (pass .getName (), 0 ) + count );
106- }
107-
108- if (optCount > 0 ) {
109- removeGarbage ();
110- trans .getImProg ().flatten (trans );
111- }
78+ int optCount = runLocalOptimizationSweep ();
79+ if (optCount > 0 ) {
80+ removeGarbage ();
81+ trans .getImProg ().flatten (trans );
82+ }
11283
113- finalItr = i ;
114- WLogger .info ("=== Optimization pass: " + i + " opts: " + optCount + " ===" );
84+ int cleanupCount = runLocalOptimizationSweep ();
85+ if (cleanupCount > 0 ) {
86+ removeGarbage ();
87+ trans .getImProg ().flatten (trans );
11588 }
116- WLogger .info ("=== Local optimizations done! Ran " + finalItr + " passes. ===" );
89+
90+ WLogger .info ("=== Local optimization passes done! Opts: " + (optCount + cleanupCount ) + " ===" );
11791 totalCount .forEach ((k , v ) -> WLogger .info ("== " + k + ": " + v ));
11892 }
11993
94+ private int runLocalOptimizationSweep () {
95+ int optCount = 0 ;
96+ LocalPlayerContextAnalyzer localPlayerContextAnalyzer = null ;
97+ for (OptimizerPass pass : localPasses ) {
98+ int count ;
99+ if (pass instanceof LocalPlayerAwareOptimizerPass ) {
100+ if (localPlayerContextAnalyzer == null ) {
101+ localPlayerContextAnalyzer =
102+ new LocalPlayerContextAnalyzer (trans .getImProg ());
103+ }
104+ LocalPlayerContextAnalyzer analyzer = localPlayerContextAnalyzer ;
105+ LocalPlayerAwareOptimizerPass localPlayerAwarePass =
106+ (LocalPlayerAwareOptimizerPass ) pass ;
107+ count = timeTaker .measure (
108+ pass .getName (),
109+ () -> localPlayerAwarePass .optimize (trans , analyzer ));
110+ } else {
111+ count = timeTaker .measure (pass .getName (), () -> pass .optimize (trans ));
112+ // A general mutating pass may invalidate dependency edges.
113+ localPlayerContextAnalyzer = null ;
114+ }
115+ optCount += count ;
116+ totalCount .put (pass .getName (), totalCount .getOrDefault (pass .getName (), 0 ) + count );
117+ }
118+ return optCount ;
119+ }
120+
120121 public void doNullsetting () {
121122 NullSetter ns = new NullSetter (trans );
122123 ns .optimize ();
0 commit comments