Take constant instructions in entry to be source of canonicalization

Bug: b/235319568
Change-Id: If4f0c15b2445ea61ff48cb393805cd9da95ce2fc
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
index bf34207..6551955 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
@@ -218,43 +218,47 @@
       Instruction canonicalizedConstant = entry.getKey();
       assert canonicalizedConstant.instructionTypeCanBeCanonicalized();
       Instruction newConst;
-      switch (canonicalizedConstant.opcode()) {
-        case CONST_CLASS:
-          if (Log.ENABLED) {
-            numberOfConstClassCanonicalization++;
-          }
-          newConst = ConstClass.copyOf(code, canonicalizedConstant.asConstClass());
-          break;
-        case CONST_NUMBER:
-          if (Log.ENABLED) {
-            numberOfConstNumberCanonicalization++;
-          }
-          newConst = ConstNumber.copyOf(code, canonicalizedConstant.asConstNumber());
-          break;
-        case CONST_STRING:
-          if (Log.ENABLED) {
-            numberOfConstStringCanonicalization++;
-          }
-          newConst = ConstString.copyOf(code, canonicalizedConstant.asConstString());
-          break;
-        case DEX_ITEM_BASED_CONST_STRING:
-          if (Log.ENABLED) {
-            numberOfDexItemBasedConstStringCanonicalization++;
-          }
-          newConst =
-              DexItemBasedConstString.copyOf(
-                  code, canonicalizedConstant.asDexItemBasedConstString());
-          break;
-        case STATIC_GET:
-          if (Log.ENABLED) {
-            numberOfEffectivelyFinalFieldCanonicalization++;
-          }
-          newConst = StaticGet.copyOf(code, canonicalizedConstant.asStaticGet());
-          break;
-        default:
-          throw new Unreachable();
+      if (canonicalizedConstant.getBlock().isEntry()) {
+        newConst = canonicalizedConstant;
+      } else {
+        switch (canonicalizedConstant.opcode()) {
+          case CONST_CLASS:
+            if (Log.ENABLED) {
+              numberOfConstClassCanonicalization++;
+            }
+            newConst = ConstClass.copyOf(code, canonicalizedConstant.asConstClass());
+            break;
+          case CONST_NUMBER:
+            if (Log.ENABLED) {
+              numberOfConstNumberCanonicalization++;
+            }
+            newConst = ConstNumber.copyOf(code, canonicalizedConstant.asConstNumber());
+            break;
+          case CONST_STRING:
+            if (Log.ENABLED) {
+              numberOfConstStringCanonicalization++;
+            }
+            newConst = ConstString.copyOf(code, canonicalizedConstant.asConstString());
+            break;
+          case DEX_ITEM_BASED_CONST_STRING:
+            if (Log.ENABLED) {
+              numberOfDexItemBasedConstStringCanonicalization++;
+            }
+            newConst =
+                DexItemBasedConstString.copyOf(
+                    code, canonicalizedConstant.asDexItemBasedConstString());
+            break;
+          case STATIC_GET:
+            if (Log.ENABLED) {
+              numberOfEffectivelyFinalFieldCanonicalization++;
+            }
+            newConst = StaticGet.copyOf(code, canonicalizedConstant.asStaticGet());
+            break;
+          default:
+            throw new Unreachable();
+        }
+        insertCanonicalizedConstant(code, newConst);
       }
-      insertCanonicalizedConstant(code, newConst);
       for (Value outValue : entry.getValue()) {
         outValue.replaceUsers(newConst.outValue());
       }
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index b148604..14dd120 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -945,7 +945,7 @@
   // If non null it must be and passed to the consumer.
   public StringConsumer mainDexListConsumer = null;
 
-  // If null, no proguad map needs to be computed.
+  // If null, no proguard map needs to be computed.
   // If non null it must be and passed to the consumer.
   public StringConsumer proguardMapConsumer = null;
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java
index f0901e8..7d99b55 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/ConstClassCanonicalizationMonitorTest.java
@@ -6,7 +6,6 @@
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.NeverInline;
@@ -61,8 +60,7 @@
                       .filter(InstructionSubject::isMonitorEnter)
                       .findFirst();
               assertTrue(insertedMonitor.isPresent());
-              // TODO(b/235319568): Should not be line number 0.
-              assertEquals(0, testSubject.getLineNumberForInstruction(insertedMonitor.get()));
+              assertTrue(testSubject.getLineNumberForInstruction(insertedMonitor.get()) > 0);
             });
   }