Minor fixes for new argument propagation
Change-Id: Id7e4972bec9836742c1492eee1ec11608825dbd7
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java b/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
index 0ac4558..8cc4fa7 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
@@ -82,24 +82,17 @@
@Override
public String toString() {
- return "Method Signature " + getName() + " " + getProto();
- }
-
- private String toSourceString() {
- return toSourceString(false);
- }
-
- private String toSourceString(boolean includeReturnType) {
- StringBuilder builder = new StringBuilder();
- if (includeReturnType) {
- builder.append(getReturnType().toSourceString()).append(" ");
- }
- builder.append(getName()).append("(");
+ StringBuilder builder =
+ new StringBuilder()
+ .append(getReturnType().getTypeName())
+ .append(" ")
+ .append(getName())
+ .append("(");
for (int i = 0; i < getArity(); i++) {
if (i != 0) {
builder.append(", ");
}
- builder.append(getProto().parameters.values[i].toSourceString());
+ builder.append(getParameter(i).getTypeName());
}
return builder.append(")").toString();
}
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
index 758ad2f..b3e2027 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
@@ -47,7 +47,7 @@
assert !affectedClasses.isEmpty();
ThreadUtils.processItems(affectedClasses, this::fixupClass, executorService);
- appView.setGraphLens(graphLens);
+ appView.rewriteWithLens(graphLens);
}
private void fixupClass(DexProgramClass clazz) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
index 77beb56..6288a63 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
@@ -163,6 +163,13 @@
return;
}
+ if (invoke.isInvokeInterface()) {
+ if (!resolutionResult.getInitialResolutionHolder().isInterface()) {
+ // Nothing to propagate; the invoke instruction fails.
+ return;
+ }
+ }
+
if (invoke.isInvokeSuper()) {
// Use the super target instead of the resolved method to ensure that we propagate the
// argument information to the targeted method.
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
index 53876ab..69f9e86 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
@@ -203,11 +203,15 @@
return;
}
+ // Do not optimize @KeepConstantArgument methods.
+ if (appView.appInfo().isKeepConstantArgumentsMethod(method)) {
+ return;
+ }
+
method
.getDefinition()
- .joinCallSiteOptimizationInfo(
+ .setCallSiteOptimizationInfo(
ConcreteCallSiteOptimizationInfo.fromMethodState(
- appView, method, monomorphicMethodState),
- appView);
+ appView, method, monomorphicMethodState));
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index acc8410..a46bf38 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -651,6 +651,10 @@
return whyAreYouNotInlining.isEmpty();
}
+ public boolean isKeepConstantArgumentsMethod(ProgramMethod method) {
+ return isKeepConstantArgumentsMethod(method.getReference());
+ }
+
public boolean isKeepConstantArgumentsMethod(DexMethod method) {
return keepConstantArguments.contains(method);
}
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 afe3c4c..9694a13 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1244,7 +1244,7 @@
}
public boolean isEnabled() {
- if (!isOptimizing()) {
+ if (!isOptimizing() || !isShrinking()) {
return false;
}
return enableLegacyConstantPropagation || enableDynamicTypePropagation;