Account for constant argument removal in enum unboxer

Bug: 199864962
Change-Id: I98c4b074c0d1112c48b26a338a3cc8e38d14c0c3
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index fc6c47d..13fc08e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -648,6 +648,13 @@
         checkNotNullMethodsBuilder
             .rewrittenWithLens(appView, (enumClasses, appliedGraphLens) -> enumClasses)
             .build(appView, builder -> builder.build(appView));
+    checkNotNullMethods.removeIf(
+        (checkNotNullMethod, ignore) ->
+            !checkNotNullMethod
+                .getOptimizationInfo()
+                .getEnumUnboxerMethodClassification()
+                .isCheckNotNullClassification());
+
     EnumUnboxingTreeFixer.Result treeFixerResult =
         new EnumUnboxingTreeFixer(
                 appView, checkNotNullMethods, enumDataMap, enumClassesToUnbox, utilityClasses)
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
index d7b13ab..b0a4ed5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
@@ -22,6 +22,7 @@
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.ConstNumber;
 import com.android.tools.r8.ir.code.IRCode;
+import com.android.tools.r8.ir.code.If;
 import com.android.tools.r8.ir.code.InstanceGet;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionListIterator;
@@ -138,6 +139,27 @@
           continue;
         }
 
+        if (instruction.isIf()) {
+          If ifInstruction = instruction.asIf();
+          if (!ifInstruction.isZeroTest()) {
+            for (int operandIndex = 0; operandIndex < 2; operandIndex++) {
+              Value operand = ifInstruction.getOperand(operandIndex);
+              DexType enumType = getEnumTypeOrNull(operand, convertedEnums);
+              if (enumType != null) {
+                int otherOperandIndex = 1 - operandIndex;
+                Value otherOperand = ifInstruction.getOperand(otherOperandIndex);
+                if (otherOperand.getType().isNullType()) {
+                  iterator.previous();
+                  ifInstruction.replaceValue(
+                      otherOperandIndex, iterator.insertConstIntInstruction(code, options, 0));
+                  iterator.next();
+                  break;
+                }
+              }
+            }
+          }
+        }
+
         // Rewrites specific enum methods, such as ordinal, into their corresponding enum unboxed
         // counterpart. The rewriting (== or match) is based on the following:
         // - name, ordinal and compareTo are final and implemented only on java.lang.Enum,