Flush optimization info after synthesizing methods and outlining.
Also assure that there are no more optimization info left at the end of
IR processing.
Bug: 141457484
Change-Id: I62336080baf07e7ef1ccce2c3af7a46dd25b1678
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 7989ddf..d068677 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -736,6 +736,9 @@
builder.addSynthesizedClass(serviceLoaderRewriter.getSynthesizedClass(), true);
}
+ // Update optimization info for all synthesized methods at once.
+ feedback.updateVisibleOptimizationInfo();
+
if (outliner != null) {
printPhase("Outlining");
timing.begin("IR conversion phase 3");
@@ -756,6 +759,7 @@
printMethod(code, "IR after outlining (SSA)", null);
finalizeIR(method, code, OptimizationFeedbackIgnore.getInstance());
});
+ feedback.updateVisibleOptimizationInfo();
assert outliner.checkAllOutlineSitesFoundAgain();
builder.addSynthesizedClass(outlineClass, true);
clearDexMethodCompilationState(outlineClass);
@@ -790,6 +794,8 @@
}
}
+ assert feedback.noUpdatesLeft();
+
// Check if what we've added to the application builder as synthesized classes are same as
// what we've added and used through AppInfo.
assert appView
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java
index a994f5d..2a80ce4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/OptimizationFeedbackDelayed.java
@@ -15,6 +15,7 @@
import com.android.tools.r8.ir.analysis.type.TypeLatticeElement;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
import com.android.tools.r8.utils.IteratorUtils;
+import com.android.tools.r8.utils.StringUtils;
import java.util.BitSet;
import java.util.IdentityHashMap;
import java.util.Map;
@@ -82,6 +83,16 @@
processed.clear();
}
+ public boolean noUpdatesLeft() {
+ assert fieldOptimizationInfos.isEmpty()
+ : StringUtils.join(fieldOptimizationInfos.keySet(), ", ");
+ assert methodOptimizationInfos.isEmpty()
+ : StringUtils.join(methodOptimizationInfos.keySet(), ", ");
+ assert processed.isEmpty()
+ : StringUtils.join(processed.keySet(), ", ");
+ return true;
+ }
+
// FIELD OPTIMIZATION INFO:
@Override