BUILD FIX: restore draftCompile to its former (working) glory.
Review by: spoon
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5350 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index fd30397..c8539a9 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -492,7 +492,7 @@
* Don't bother optimizing early if there's only one permutation.
*/
if (!singlePermutation) {
- draftOptimize(jprogram);
+ optimizeLoop(jprogram, false);
}
Set<String> rebindRequests = new HashSet<String>();
@@ -515,15 +515,14 @@
*/
jprogram.beginOptimizations();
- PerfLogger.start("draft optimize");
- Pruner.exec(jprogram, true);
+ optimizeLoop(jprogram, false);
+
/*
* Ensure that references to dead clinits are removed. Otherwise, the
* application won't run reliably.
*/
jprogram.typeOracle.recomputeAfterOptimizations();
DeadCodeElimination.exec(jprogram);
- PerfLogger.end();
}
protected static void optimize(JJSOptions options, JProgram jprogram)
@@ -536,54 +535,56 @@
jprogram.beginOptimizations();
PerfLogger.start("optimize");
- boolean didChange;
do {
if (Thread.interrupted()) {
PerfLogger.end();
throw new InterruptedException();
}
-
maybeDumpAST(jprogram);
-
- PerfLogger.start("optimize loop");
-
- // Recompute clinits each time, they can become empty.
- jprogram.typeOracle.recomputeAfterOptimizations();
- didChange = false;
-
- // Remove unreferenced types, fields, methods, [params, locals]
- didChange = Pruner.exec(jprogram, true) || didChange;
- // finalize locals, params, fields, methods, classes
- didChange = Finalizer.exec(jprogram) || didChange;
- // rewrite non-polymorphic calls as static calls; update all call sites
- didChange = MakeCallsStatic.exec(jprogram) || didChange;
-
- // type flow tightening
- // - fields, locals based on assignment
- // - params based on assignment and call sites
- // - method bodies based on return statements
- // - polymorphic methods based on return types of all implementors
- // - optimize casts and instance of
- didChange = TypeTightener.exec(jprogram) || didChange;
-
- // tighten method call bindings
- didChange = MethodCallTightener.exec(jprogram) || didChange;
-
- // dead code removal??
- didChange = DeadCodeElimination.exec(jprogram) || didChange;
-
- if (options.isAggressivelyOptimize()) {
- // inlining
- didChange = MethodInliner.exec(jprogram) || didChange;
- }
- // prove that any types that have been culled from the main tree are
- // unreferenced due to type tightening?
-
- PerfLogger.end();
- } while (didChange);
+ } while (optimizeLoop(jprogram, options.isAggressivelyOptimize()));
PerfLogger.end();
}
+ protected static boolean optimizeLoop(JProgram jprogram,
+ boolean isAggressivelyOptimize) {
+ PerfLogger.start("optimize loop");
+
+ // Recompute clinits each time, they can become empty.
+ jprogram.typeOracle.recomputeAfterOptimizations();
+ boolean didChange = false;
+
+ // Remove unreferenced types, fields, methods, [params, locals]
+ didChange = Pruner.exec(jprogram, true) || didChange;
+ // finalize locals, params, fields, methods, classes
+ didChange = Finalizer.exec(jprogram) || didChange;
+ // rewrite non-polymorphic calls as static calls; update all call sites
+ didChange = MakeCallsStatic.exec(jprogram) || didChange;
+
+ // type flow tightening
+ // - fields, locals based on assignment
+ // - params based on assignment and call sites
+ // - method bodies based on return statements
+ // - polymorphic methods based on return types of all implementors
+ // - optimize casts and instance of
+ didChange = TypeTightener.exec(jprogram) || didChange;
+
+ // tighten method call bindings
+ didChange = MethodCallTightener.exec(jprogram) || didChange;
+
+ // dead code removal??
+ didChange = DeadCodeElimination.exec(jprogram) || didChange;
+
+ if (isAggressivelyOptimize) {
+ // inlining
+ didChange = MethodInliner.exec(jprogram) || didChange;
+ }
+ // prove that any types that have been culled from the main tree are
+ // unreferenced due to type tightening?
+
+ PerfLogger.end();
+ return didChange;
+ }
+
private static JavaToJavaScriptMap addStringLiteralMap(
final JavaToJavaScriptMap map, final Map<JsName, String> stringLiteralMap) {
JavaToJavaScriptMap postStringInterningMap = new JavaToJavaScriptMap() {