Account for invoke-interface instructions in StringMethodOptimizer
Bug: b/230821936
Change-Id: Ic5990fd7ce6e83100501011ca6c3239637f92026
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
index e5483db..6e4abef 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
@@ -19,8 +19,8 @@
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.InstructionListIterator;
import com.android.tools.r8.ir.code.InvokeMethod;
+import com.android.tools.r8.ir.code.InvokeMethodWithReceiver;
import com.android.tools.r8.ir.code.InvokeStatic;
-import com.android.tools.r8.ir.code.InvokeVirtual;
import com.android.tools.r8.ir.code.Value;
import java.util.Set;
@@ -50,14 +50,14 @@
Set<BasicBlock> blocksToRemove) {
DexMethod singleTargetReference = singleTarget.getReference();
if (singleTargetReference == dexItemFactory.stringMembers.equals) {
- optimizeEquals(code, instructionIterator, invoke.asInvokeVirtual());
+ optimizeEquals(code, instructionIterator, invoke.asInvokeMethodWithReceiver());
} else if (singleTargetReference == dexItemFactory.stringMembers.valueOf) {
optimizeValueOf(code, instructionIterator, invoke.asInvokeStatic(), affectedValues);
}
}
private void optimizeEquals(
- IRCode code, InstructionListIterator instructionIterator, InvokeVirtual invoke) {
+ IRCode code, InstructionListIterator instructionIterator, InvokeMethodWithReceiver invoke) {
if (appView.appInfo().hasLiveness()) {
ProgramMethod context = code.context();
Value first = invoke.getReceiver().getAliasedValue();