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;
