Extend bridge hoisting to methods not declared as bridges
Change-Id: Id3dc082a127a121639a9c76f1d034b0f95d8b47b
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java b/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
index fe326c8..be806b4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
@@ -24,8 +24,7 @@
/** Returns a {@link BridgeInfo} object describing this method if it is recognized as a bridge. */
public static BridgeInfo analyzeMethod(DexEncodedMethod method, IRCode code) {
- // TODO(b/154263783): Consider computing BridgeInfo also for non-declared bridges.
- if (!method.isBridge() || code.blocks.size() > 1) {
+ if (code.blocks.size() > 1) {
return failure();
}
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
index d08bb2f..73f2712 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
@@ -294,7 +294,7 @@
// Cls1#foo and Cls2#bar should refer to Base#foo.
- MethodSubject barInCls2 = cls2Subject.method("void", "bar", "java.lang.String");
+ MethodSubject barInCls2 = baseSubject.method("void", "bar", "java.lang.String");
assertThat(barInCls2, isPresent());
// Cls1#foo has been moved to Base#foo as a result of bridge hoisting.
@@ -404,7 +404,7 @@
// DerivedString2#bar should refer to Base#foo.
- MethodSubject barInSub = subSubject.method("void", "bar", "java.lang.String");
+ MethodSubject barInSub = baseSubject.method("void", "bar", "java.lang.String");
assertThat(barInSub, isPresent());
if (parameters.isDexRuntime()) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeSuperToInvokeVirtualTest.java b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeSuperToInvokeVirtualTest.java
index b21bcab..e4b2d91 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeSuperToInvokeVirtualTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeSuperToInvokeVirtualTest.java
@@ -54,6 +54,9 @@
}
private void inspect(CodeInspector inspector) {
+ ClassSubject aClassSubject = inspector.clazz(A.class);
+ assertThat(aClassSubject, isPresent());
+
ClassSubject bClassSubject = inspector.clazz(B.class);
assertThat(bClassSubject, isPresent());
@@ -63,7 +66,8 @@
assertTrue(
negativeTestSubject.streamInstructions().noneMatch(InstructionSubject::isInvokeVirtual));
- MethodSubject positiveTestSubject = bClassSubject.uniqueMethodWithName("positiveTest");
+ // B.positiveTest() is moved to A as a result of bridge hoisting.
+ MethodSubject positiveTestSubject = aClassSubject.uniqueMethodWithName("positiveTest");
assertThat(positiveTestSubject, isPresent());
assertTrue(positiveTestSubject.streamInstructions().noneMatch(this::isInvokeSuper));
assertTrue(