Version 1.4.93

Cherry pick: Account for IINC instruction when collecting arg uses in jar code.
CL: https://r8-review.googlesource.com/c/r8/+/37740

Bug: 131140696, 131207184, 131443760, 130789358
Change-Id: Ic36eacad6f11d821b3207c42b9fecfc40375c2d2
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 4b0f4b8..a20897f 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.4.92";
+  public static final String LABEL = "1.4.93";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java b/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
index 9bcb635..df0c835 100644
--- a/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
+++ b/src/main/java/com/android/tools/r8/jar/JarArgumentUseVisitor.java
@@ -59,6 +59,13 @@
   }
 
   @Override
+  public void visitIincInsn(final int var, final int increment) {
+    if (var < arguments) {
+      registry.register(slotToArgument == null ? var : slotToArgument.get(var));
+    }
+  }
+
+  @Override
   public void visitVarInsn(final int opcode, final int var) {
     switch (opcode) {
       case ILOAD:
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
index 62a5677..06f665d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
@@ -8,7 +8,9 @@
 
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
+import java.util.Set;
 import org.junit.Assert;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -16,6 +18,7 @@
 
 @RunWith(Parameterized.class)
 public class UnusedArgumentsIntTest extends UnusedArgumentsTestBase {
+  private static final Set<String> methodsThatWontBeOptimized = ImmutableSet.of("main", "iinc");
 
   public UnusedArgumentsIntTest(boolean minification) {
     super(minification);
@@ -39,6 +42,12 @@
     }
 
     @NeverInline
+    public static int iinc(int a, int b) {
+      b++;
+      return a;
+    }
+
+    @NeverInline
     public static int a(int a, int b, int c) {
       return a;
     }
@@ -47,6 +56,7 @@
       System.out.print(a(1));
       System.out.print(a(2, 3));
       System.out.print(a(4, 5, 6));
+      System.out.print(iinc(8, 3));
     }
   }
 
@@ -57,16 +67,16 @@
 
   @Override
   public String getExpectedResult() {
-    return "124";
+    return "1248";
   }
 
   @Override
   public void inspectTestClass(ClassSubject clazz) {
-    assertEquals(4, clazz.allMethods().size());
+    assertEquals(5, clazz.allMethods().size());
     clazz.forAllMethods(
         method -> {
           Assert.assertTrue(
-              method.getFinalName().equals("main")
+              methodsThatWontBeOptimized.contains(method.getOriginalName())
                   || (method.getFinalSignature().parameters.length == 1
                       && method.getFinalSignature().parameters[0].equals("int")));
         });
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java
index 0a5d8e9..3871fa4 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.ir.optimize.unusedarguments;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;