Minor cleanup of inliner
Change-Id: I6c1fbef7f66713c451df37742b868040d8a1e4bd
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 d8c4ea7..2784e8d 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
@@ -51,7 +51,6 @@
private final IRCode code;
private final CallSiteInformation callSiteInformation;
private final Predicate<DexEncodedMethod> isProcessedConcurrently;
- private final InliningInfo info;
private final int inliningInstructionLimit;
private int instructionAllowance;
@@ -70,7 +69,6 @@
this.code = code;
this.callSiteInformation = callSiteInformation;
this.isProcessedConcurrently = isProcessedConcurrently;
- info = Log.ENABLED ? new InliningInfo(method) : null;
this.inliningInstructionLimit = inliningInstructionLimit;
this.instructionAllowance = inliningInstructionAllowance;
}
@@ -80,13 +78,6 @@
return false;
}
- @Override
- public void finish() {
- if (Log.ENABLED && info != null) {
- Log.debug(getClass(), info.toString());
- }
- }
-
private boolean isSingleTargetInvalid(
InvokeMethod invoke,
DexEncodedMethod singleTarget,
@@ -96,17 +87,11 @@
}
if (!singleTarget.hasCode()) {
- if (info != null) {
- info.exclude(invoke, "No inlinee");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return true;
}
if (appView.definitionFor(singleTarget.method.holder).isNotProgramClass()) {
- if (info != null) {
- info.exclude(invoke, "No inlinee");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return true;
}
@@ -115,9 +100,6 @@
int numberOfArguments =
invoke.arguments().size() - BooleanUtils.intValue(invoke.isInvokeMethodWithReceiver());
if (numberOfArguments != singleTarget.method.getArity()) {
- if (info != null) {
- info.exclude(invoke, "Argument number mismatch");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return true;
}
@@ -233,9 +215,6 @@
// Cannot handle recursive inlining at this point.
// Force inlined method should never be recursive.
assert !candidate.getOptimizationInfo().forceInline();
- if (info != null) {
- info.exclude(invoke, "direct recursion");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return false;
}
@@ -246,9 +225,6 @@
// processes all relevant methods in parallel with the full optimization pipeline enabled.
// TODO(sgjesse): Add this assert "assert !isProcessedConcurrently.test(candidate);"
if (reason != Reason.FORCE && isProcessedConcurrently.test(candidate)) {
- if (info != null) {
- info.exclude(invoke, "is processed in parallel");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return false;
}
@@ -269,9 +245,6 @@
// Abort inlining attempt if method -> target access is not right.
if (!inliner.hasInliningAccess(method, candidate)) {
- if (info != null) {
- info.exclude(invoke, "target does not have right access");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return false;
}
@@ -281,9 +254,6 @@
if (holder.isInterface()) {
// Art978_virtual_interfaceTest correctly expects an IncompatibleClassChangeError exception at
// runtime.
- if (info != null) {
- info.exclude(invoke, "Do not inline target if method holder is an interface class");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return false;
}
@@ -295,9 +265,6 @@
// Don't inline if target is synchronized.
if (candidate.accessFlags.isSynchronized()) {
- if (info != null) {
- info.exclude(invoke, "target is synchronized");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return false;
}
@@ -311,9 +278,6 @@
inliner.recordDoubleInliningCandidate(method, candidate);
} else {
if (inliner.satisfiesRequirementsForDoubleInlining(method, candidate)) {
- if (info != null) {
- info.exclude(invoke, "target is not ready for double inlining");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return false;
}
@@ -330,9 +294,6 @@
if (inliner.mainDexClasses.getRoots().contains(method.method.holder)
&& MainDexDirectReferenceTracer.hasReferencesOutsideFromCode(
appView.appInfo(), candidate, inliner.mainDexClasses.getRoots())) {
- if (info != null) {
- info.exclude(invoke, "target has references beyond main dex");
- }
whyAreYouNotInliningReporter.reportUnknownReason();
return false;
}
@@ -350,14 +311,6 @@
if (code.estimatedSizeForInliningAtMost(instructionLimit)) {
return true;
}
- if (info != null) {
- info.exclude(
- invoke,
- "instruction limit exceeds: "
- + code.estimatedSizeForInlining()
- + " <= "
- + instructionLimit);
- }
return false;
}
@@ -404,10 +357,6 @@
Reason reason = computeInliningReason(singleTarget);
if (!singleTarget.isInliningCandidate(
method, reason, appView.appInfo(), whyAreYouNotInliningReporter)) {
- // Abort inlining attempt if the single target is not an inlining candidate.
- if (info != null) {
- info.exclude(invoke, "target is not identified for inlining");
- }
return null;
}
@@ -415,10 +364,6 @@
return null;
}
- if (info != null) {
- info.include(invoke.getType(), singleTarget);
- }
-
Value receiver = invoke.getReceiver();
if (receiver.getTypeLattice().isDefinitelyNull()) {
// A definitely null receiver will throw an error on call site.
@@ -439,19 +384,6 @@
whyAreYouNotInliningReporter.reportUnknownReason();
return null;
}
- if (!options.nullableReceiverInliningFilter.isEmpty()
- && !options.nullableReceiverInliningFilter.contains(
- invoke.getInvokedMethod().toSourceString())) {
- whyAreYouNotInliningReporter.reportUnknownReason();
- return null;
- }
- if (Log.ENABLED && Log.isLoggingEnabledFor(Inliner.class)) {
- Log.debug(
- Inliner.class,
- "Inlining method `%s` with nullable receiver into `%s`",
- invoke.getInvokedMethod().toSourceString(),
- invocationContext.toSourceString());
- }
action.setShouldSynthesizeNullCheckForReceiver();
}
}
@@ -477,19 +409,12 @@
// Determine if this should be inlined no matter how big it is.
if (!singleTarget.isInliningCandidate(
method, reason, appView.appInfo(), whyAreYouNotInliningReporter)) {
- // Abort inlining attempt if the single target is not an inlining candidate.
- if (info != null) {
- info.exclude(invoke, "target is not identified for inlining");
- }
return null;
}
// Abort inlining attempt if we can not guarantee class for static target has been initialized.
if (!canInlineStaticInvoke(
invoke, method, singleTarget, classInitializationAnalysis, whyAreYouNotInliningReporter)) {
- if (info != null) {
- info.exclude(invoke, "target is static but we cannot guarantee class has been initialized");
- }
return null;
}
@@ -497,9 +422,6 @@
return null;
}
- if (info != null) {
- info.include(invoke.getType(), singleTarget);
- }
return new InlineAction(singleTarget, invoke, reason);
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
index 6c93489..e29070d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
@@ -44,9 +44,6 @@
}
@Override
- public void finish() {}
-
- @Override
public DexEncodedMethod lookupSingleTarget(InvokeMethod invoke, DexType context) {
Inliner.InliningInfo info = invokesToInline.get(invoke);
if (info != null) {
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 074c6cd..f3bdff2 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
@@ -624,7 +624,7 @@
}
}
- public static class InlineeWithReason {
+ static class InlineeWithReason {
final Reason reason;
final IRCode code;
@@ -840,7 +840,6 @@
assumeDynamicTypeRemover.removeMarkedInstructions(blocksToRemove);
assumeDynamicTypeRemover.finish();
classInitializationAnalysis.finish();
- oracle.finish();
code.removeBlocks(blocksToRemove);
code.removeAllTrivialPhis();
assert code.isConsistentSSA();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningInfo.java
deleted file mode 100644
index f58cadd..0000000
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningInfo.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.ir.optimize;
-
-import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
-import com.android.tools.r8.ir.code.InvokeMethod;
-import java.util.ArrayList;
-import java.util.List;
-
-
-// Class for collecting inlining information for one compiled DexEncodedMethod.
-public class InliningInfo {
-
- static class Edge {
- final Type type;
- final DexMethod declared;
- final Node inlinee;
-
- public Edge(Type type, DexMethod declared, Node inlinee) {
- this.type = type;
- this.declared = declared;
- this.inlinee = inlinee;
- }
-
- void appendOn(StringBuffer buffer) {
- if (declared != null) {
- buffer.append(declared.toSourceString());
- buffer.append(' ');
- }
- inlinee.appendOn(buffer);
- }
- }
-
- static abstract class Node {
- abstract void appendOn(StringBuffer buffer);
- }
-
- static class Inlining extends Node {
- final DexEncodedMethod target;
-
- Inlining(DexEncodedMethod target) {
- this.target = target;
- }
-
- @Override
- void appendOn(StringBuffer buffer) {
- buffer.append("<< INLINED");
- }
- }
-
- static class NotInlining extends Node {
-
- final String reason;
-
- NotInlining(String reason) {
- this.reason = reason;
- }
-
- @Override
- public void appendOn(StringBuffer buffer) {
- buffer.append("-- no inlining: ");
- buffer.append(reason);
- }
- }
-
- final DexEncodedMethod method;
- final List<Edge> edges = new ArrayList<>();
-
- public InliningInfo(DexEncodedMethod method) {
- this.method = method;
- }
-
- public void include(Type type, DexEncodedMethod target) {
- edges.add(new Edge(type, target.method, new Inlining(target)));
- }
-
- public void exclude(InvokeMethod invoke, String reason) {
- edges.add(new Edge(invoke.getType(), invoke.getInvokedMethod(), new NotInlining(reason)));
- }
-
- @Override
- public String toString() {
- StringBuffer buffer = new StringBuffer(method.method.toSourceString());
- buffer.append(" {\n");
- for (Edge edge : edges) {
- buffer.append(" ");
- edge.appendOn(buffer);
- buffer.append(".\n");
- }
- buffer.append("}\n");
- return buffer.toString();
- }
-}
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 2cbc5a0..f75f3ff 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
@@ -21,8 +21,6 @@
boolean isForcedInliningOracle();
- void finish();
-
// TODO(b/142116551): This should be equivalent to invoke.lookupSingleTarget(appView, context)!
DexEncodedMethod lookupSingleTarget(InvokeMethod invoke, DexType context);
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 763ab39..ad82955 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -369,10 +369,8 @@
}
public Set<String> extensiveLoggingFilter = getExtensiveLoggingFilter();
- public Set<String> extensiveFieldMinifierLoggingFilter = getExtensiveFieldMinifierLoggingFilter();
public Set<String> extensiveInterfaceMethodMinifierLoggingFilter =
getExtensiveInterfaceMethodMinifierLoggingFilter();
- public Set<String> nullableReceiverInliningFilter = getNullableReceiverInliningFilter();
public List<String> methodsFilter = ImmutableList.of();
public int minApiLevel = AndroidApiLevel.getDefault().getLevel();