diff options
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.java | 12 |
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) { |