Merge "Change benchmarking output format s/Runtime/RunTime"
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 8b86ca8..e21b00a 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -3,6 +3,11 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_INLINING_CANDIDATE_PACKAGE_PRIVATE;
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_INLINING_CANDIDATE_PRIVATE;
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_INLINING_CANDIDATE_PUBLIC;
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_NOT_INLINING_CANDIDATE;
+
import com.android.tools.r8.code.Const;
import com.android.tools.r8.code.ConstString;
import com.android.tools.r8.code.ConstStringJumbo;
@@ -90,19 +95,23 @@
}
}
+ public boolean isPublicInlining() {
+ return compilationState == PROCESSED_INLINING_CANDIDATE_PUBLIC;
+ }
+
public void markProcessed(InliningConstraint state) {
switch (state) {
case ALWAYS:
- compilationState = CompilationState.PROCESSED_INLINING_CANDIDATE_PUBLIC;
+ compilationState = PROCESSED_INLINING_CANDIDATE_PUBLIC;
break;
case PACKAGE:
- compilationState = CompilationState.PROCESSED_INLINING_CANDIDATE_PACKAGE_PRIVATE;
+ compilationState = PROCESSED_INLINING_CANDIDATE_PACKAGE_PRIVATE;
break;
case PRIVATE:
- compilationState = CompilationState.PROCESSED_INLINING_CANDIDATE_PRIVATE;
+ compilationState = PROCESSED_INLINING_CANDIDATE_PRIVATE;
break;
case NEVER:
- compilationState = CompilationState.PROCESSED_NOT_INLINING_CANDIDATE;
+ compilationState = PROCESSED_NOT_INLINING_CANDIDATE;
break;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
index e93f3a5..ba1e0e9 100644
--- a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
@@ -49,9 +49,6 @@
DexEncodedField target = info.lookupInstanceTarget(fieldHolder, field);
DexClass fieldClass = info.definitionFor(fieldHolder);
if ((target != null) && (fieldClass != null) && !fieldClass.isLibraryClass()) {
- if (isInstanceGet() || isInstancePut()) {
- return Inliner.InliningConstraint.PRIVATE;
- }
DexAccessFlags flags = target.accessFlags;
if (flags.isPublic()) {
return Inliner.InliningConstraint.ALWAYS;
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 bc9b95e..f677637 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
@@ -257,6 +257,12 @@
if (target.accessFlags.isConstructor() && !legalConstructorInline(method, inlinee)) {
continue;
}
+ // Ensure the container is compatible with the target.
+ if (!forceInline
+ && !result.target.isPublicInlining()
+ && (method.method.getHolder() != result.target.method.getHolder())) {
+ continue;
+ }
DexType downcast = null;
if (invoke.isInvokeMethodWithReceiver()) {
// If the invoke has a receiver but the declared method holder is different
diff --git a/src/test/examples/shaking1/print-mapping.ref b/src/test/examples/shaking1/print-mapping.ref
index d9e7f7b..8382304 100644
--- a/src/test/examples/shaking1/print-mapping.ref
+++ b/src/test/examples/shaking1/print-mapping.ref
@@ -1,3 +1,4 @@
shaking1.Shaking -> shaking1.Shaking:
shaking1.Used -> shaking1.a:
java.lang.String name -> a
+ java.lang.String method() -> a