aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java')
-rw-r--r--src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java
index 4b93d8d77..446b75a63 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningOracle.java
@@ -66,6 +66,7 @@ public class InliningOracle {
assert !candidate.getOptimizationInfo().forceInline();
return null;
}
+
if (candidate.accessFlags.isSynchronized()) {
// Don't inline if target is synchronized.
if (info != null) {
@@ -73,6 +74,12 @@ public class InliningOracle {
}
return null;
}
+
+ if (callGraph.isBreaker(method, candidate)) {
+ // Cycle breaker so abort to preserve compilation order.
+ return null;
+ }
+
if (!inliner.hasInliningAccess(method, candidate)) {
if (info != null) {
info.exclude(invoke, "Inlinee candidate does not have right access flags");
@@ -154,6 +161,11 @@ public class InliningOracle {
return null;
}
+ if (callGraph.isBreaker(method, target)) {
+ // Cycle breaker so abort to preserve compilation order.
+ return null;
+ }
+
// Abort inlining attempt if method -> target access is not right.
if (!inliner.hasInliningAccess(method, target)) {
if (info != null) {