Fix issues manifesting in R8GMSCoreLatestTreeShakeJarVerifcationTest
Change-Id: Idff122ed2b092fd8397f90dcce22ef218ded17b3
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
index f94b7a7..968b0ec 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
@@ -35,11 +35,12 @@
}
public void run(IRCode code) {
- removeUnneededCatchHandlers(code);
+ codeRewriter.rewriteMoveResult(code);
+
+ // We may encounter unneeded catch handlers after each iteration, e.g., if a dead instruction
+ // is the only throwing instruction in a block. Removing unneeded catch handlers can lead to
+ // more dead instructions.
Deque<BasicBlock> worklist = new ArrayDeque<>();
- // We may encounter unneeded catch handlers again, e.g., if a dead instruction (due to
- // const-string canonicalization for example) is the only throwing instruction in a block.
- // Removing unneeded catch handlers can lead to more dead instructions.
do {
worklist.addAll(code.topologicallySortedBlocks());
while (!worklist.isEmpty()) {
@@ -49,7 +50,6 @@
}
} while (removeUnneededCatchHandlers(code));
assert code.isConsistentSSA();
- codeRewriter.rewriteMoveResult(code);
}
// Add the block from where the value originates to the worklist.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
index be8c939..c9d3f22 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -889,6 +889,9 @@
if (!isEligibleSingleTarget(singleTarget)) {
return false;
}
+ if (singleTarget.isLibraryMethodOverride().isTrue()) {
+ return false;
+ }
return isEligibleVirtualMethodCall(
null,
invokedMethod,