Remove sorting of targeted methods in liveness info.

Bug: 132593519
Change-Id: Ic958cabb812c581245d96324e5f5b5e5eec9d9a8
diff --git a/src/main/java/com/android/tools/r8/graph/GraphLens.java b/src/main/java/com/android/tools/r8/graph/GraphLens.java
index c788a1a..87cea9c 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -536,7 +536,15 @@
     return result;
   }
 
-  public ImmutableSortedSet<DexMethod> rewriteMethods(Set<DexMethod> methods) {
+  public ImmutableSet<DexMethod> rewriteMethods(Set<DexMethod> methods) {
+    ImmutableSet.Builder<DexMethod> builder = ImmutableSet.builder();
+    for (DexMethod method : methods) {
+      builder.add(getRenamedMethodSignature(method));
+    }
+    return builder.build();
+  }
+
+  public ImmutableSortedSet<DexMethod> rewriteMethodsSorted(Set<DexMethod> methods) {
     ImmutableSortedSet.Builder<DexMethod> builder =
         new ImmutableSortedSet.Builder<>(PresortedComparable::slowCompare);
     for (DexMethod method : methods) {
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 6922939..88665e0 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -99,7 +99,7 @@
    * contained in {@link #liveMethods}, it may be marked as abstract and its implementation may be
    * removed.
    */
-  final SortedSet<DexMethod> targetedMethods;
+  private final Set<DexMethod> targetedMethods;
 
   /** Set of targets that lead to resolution errors, such as non-existing or invalid targets. */
   public final Set<DexMethod> failedResolutionTargets;
@@ -205,7 +205,7 @@
       Set<DexType> missingTypes,
       Set<DexType> liveTypes,
       Set<DexType> instantiatedAppServices,
-      SortedSet<DexMethod> targetedMethods,
+      Set<DexMethod> targetedMethods,
       Set<DexMethod> failedResolutionTargets,
       SortedSet<DexMethod> bootstrapMethods,
       SortedSet<DexMethod> methodsTargetedByInvokeDynamic,
@@ -288,7 +288,7 @@
       Set<DexType> missingTypes,
       Set<DexType> liveTypes,
       Set<DexType> instantiatedAppServices,
-      SortedSet<DexMethod> targetedMethods,
+      Set<DexMethod> targetedMethods,
       Set<DexMethod> failedResolutionTargets,
       SortedSet<DexMethod> bootstrapMethods,
       SortedSet<DexMethod> methodsTargetedByInvokeDynamic,
@@ -626,6 +626,10 @@
     return clazz == null || !clazz.isProgramClass();
   }
 
+  public boolean isTargetedMethod(DexMethod method) {
+    return targetedMethods.contains(method);
+  }
+
   public Collection<DexClass> computeReachableInterfaces() {
     Set<DexClass> interfaces = Sets.newIdentityHashSet();
     WorkList<DexType> worklist = WorkList.newIdentityWorkList();
@@ -1020,11 +1024,11 @@
         lens.rewriteTypes(liveTypes),
         lens.rewriteTypes(instantiatedAppServices),
         lens.rewriteMethods(targetedMethods),
-        lens.rewriteMethods(failedResolutionTargets),
-        lens.rewriteMethods(bootstrapMethods),
-        lens.rewriteMethods(methodsTargetedByInvokeDynamic),
-        lens.rewriteMethods(virtualMethodsTargetedByInvokeDirect),
-        lens.rewriteMethods(liveMethods),
+        lens.rewriteMethodsSorted(failedResolutionTargets),
+        lens.rewriteMethodsSorted(bootstrapMethods),
+        lens.rewriteMethodsSorted(methodsTargetedByInvokeDynamic),
+        lens.rewriteMethodsSorted(virtualMethodsTargetedByInvokeDirect),
+        lens.rewriteMethodsSorted(liveMethods),
         fieldAccessInfoCollection.rewrittenWithLens(definitionSupplier, lens),
         methodAccessInfoCollection.rewrittenWithLens(definitionSupplier, lens),
         objectAllocationInfoCollection.rewrittenWithLens(definitionSupplier, lens),
@@ -1033,14 +1037,14 @@
         lens.rewriteReferenceKeys(mayHaveSideEffects),
         lens.rewriteReferenceKeys(noSideEffects),
         lens.rewriteReferenceKeys(assumedValues),
-        lens.rewriteMethods(alwaysInline),
-        lens.rewriteMethods(forceInline),
-        lens.rewriteMethods(neverInline),
-        lens.rewriteMethods(whyAreYouNotInlining),
-        lens.rewriteMethods(keepConstantArguments),
-        lens.rewriteMethods(keepUnusedArguments),
-        lens.rewriteMethods(reprocess),
-        lens.rewriteMethods(neverReprocess),
+        lens.rewriteMethodsSorted(alwaysInline),
+        lens.rewriteMethodsSorted(forceInline),
+        lens.rewriteMethodsSorted(neverInline),
+        lens.rewriteMethodsSorted(whyAreYouNotInlining),
+        lens.rewriteMethodsSorted(keepConstantArguments),
+        lens.rewriteMethodsSorted(keepUnusedArguments),
+        lens.rewriteMethodsSorted(reprocess),
+        lens.rewriteMethodsSorted(neverReprocess),
         alwaysClassInline.rewriteItems(lens::lookupType),
         lens.rewriteTypes(neverClassInline),
         lens.rewriteTypes(noUnusedInterfaceRemoval),
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 4e342be..7624a67 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -3174,7 +3174,7 @@
                 : missingTypes,
             SetUtils.mapIdentityHashSet(liveTypes.getItems(), DexProgramClass::getType),
             Collections.unmodifiableSet(instantiatedAppServices),
-            Enqueuer.toSortedDescriptorSet(targetedMethods.getItems()),
+            Enqueuer.toDescriptorSet(targetedMethods.getItems()),
             Collections.unmodifiableSet(failedResolutionTargets),
             ImmutableSortedSet.copyOf(DexMethod::slowCompareTo, bootstrapMethods),
             ImmutableSortedSet.copyOf(DexMethod::slowCompareTo, methodsTargetedByInvokeDynamic),
@@ -3358,6 +3358,15 @@
     return builder.build();
   }
 
+  private static <D extends DexEncodedMember<D, R>, R extends DexMember<D, R>>
+      Set<R> toDescriptorSet(Set<D> set) {
+    ImmutableSet.Builder<R> builder = new ImmutableSet.Builder<>();
+    for (D item : set) {
+      builder.add(item.getReference());
+    }
+    return builder.build();
+  }
+
   private static Object2BooleanMap<DexReference> joinIdentifierNameStrings(
       Set<DexReference> explicit, Set<DexReference> implicit) {
     Object2BooleanMap<DexReference> result = new Object2BooleanArrayMap<>();
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
index 5199435..8b623e3 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
@@ -1970,7 +1970,7 @@
     public boolean verifyKeptMethodsAreTargetedAndLive(AppInfoWithLiveness appInfo) {
       noShrinking.forEachMethod(
           reference -> {
-            assert appInfo.targetedMethods.contains(reference)
+            assert appInfo.isTargetedMethod(reference)
                 : "Expected kept method `" + reference.toSourceString() + "` to be targeted";
             DexEncodedMethod method =
                 appInfo.definitionForHolder(reference).lookupMethod(reference);
diff --git a/src/main/java/com/android/tools/r8/shaking/TreePruner.java b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
index caade38..67680af 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -299,7 +299,7 @@
                 ? method
                 : method.toMethodThatLogsError(appView));
         methodsToKeepForConfigurationDebugging.add(method.method);
-      } else if (appInfo.targetedMethods.contains(method.getReference())) {
+      } else if (appInfo.isTargetedMethod(method.getReference())) {
         // If the method is already abstract, and doesn't have code, let it be.
         if (method.shouldNotHaveCode() && !method.hasCode()) {
           reachableMethods.add(method);