Support for -whyareyounotinlining in InliningStrategy.stillHasBudget()
Bug: 142108662
Change-Id: I64d9d331f244265937e8dcf61625491aae13d818
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index 1b51071..f308b8c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -541,7 +541,14 @@
@Override
public boolean stillHasBudget(
InlineAction action, WhyAreYouNotInliningReporter whyAreYouNotInliningReporter) {
- return instructionAllowance > 0 || action.reason.mustBeInlined();
+ if (action.reason.mustBeInlined()) {
+ return true;
+ }
+ boolean stillHasBudget = instructionAllowance > 0;
+ if (!stillHasBudget) {
+ whyAreYouNotInliningReporter.reportInstructionBudgetIsExceeded();
+ }
+ return stillHasBudget;
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 27c3831..816c40c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -746,8 +746,7 @@
continue;
}
if (!strategy.stillHasBudget(action, whyAreYouNotInliningReporter)) {
- // TODO(b/142108662): Enable assertion once reporting is complete.
- // assert whyAreYouNotInliningReporter.verifyReasonHasBeenReported();
+ assert whyAreYouNotInliningReporter.verifyReasonHasBeenReported();
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java
index 56f97b1..dce73a6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotKeepingReporter.java
@@ -16,6 +16,9 @@
}
@Override
+ public void reportInstructionBudgetIsExceeded() {}
+
+ @Override
public void reportPotentialExplosionInExceptionalControlFlowResolutionBlocks(
int estimatedNumberOfControlFlowResolutionBlocks, int threshold) {}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
index a86ab56..6b5d786 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
@@ -41,6 +41,8 @@
}
}
+ public abstract void reportInstructionBudgetIsExceeded();
+
public abstract void reportPotentialExplosionInExceptionalControlFlowResolutionBlocks(
int estimatedNumberOfControlFlowResolutionBlocks, int threshold);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
index 9d469d0..c59ddba 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
@@ -38,6 +38,11 @@
}
@Override
+ public void reportInstructionBudgetIsExceeded() {
+ print("caller's instruction budget is exceeded.");
+ }
+
+ @Override
public void reportPotentialExplosionInExceptionalControlFlowResolutionBlocks(
int estimatedNumberOfControlFlowResolutionBlocks, int threshold) {
printWithExceededThreshold(