Use optInfo to find dead fields in enum unboxer

Bug:160535629
Change-Id: Ie3afb26ca7dfcea0ce2d60aedf56e850b4899f94
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 0621d6f..6c1f24f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -757,15 +757,15 @@
     if (inliner != null) {
       postMethodProcessorBuilder.put(inliner);
     }
+    if (!options.debug) {
+      new TrivialFieldAccessReprocessor(appView.withLiveness(), postMethodProcessorBuilder)
+          .run(executorService, feedback, timing);
+    }
     if (enumUnboxer != null) {
       enumUnboxer.unboxEnums(postMethodProcessorBuilder, executorService, feedback);
     } else {
       appView.setUnboxedEnums(EnumDataMap.empty());
     }
-    if (!options.debug) {
-      new TrivialFieldAccessReprocessor(appView.withLiveness(), postMethodProcessorBuilder)
-          .run(executorService, feedback, timing);
-    }
 
     timing.begin("IR conversion phase 2");
     graphLensForIR = appView.graphLens();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
index cf0ecb5..44e1a21 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
@@ -495,11 +495,11 @@
         ObjectState enumState =
             enumStaticFieldValues.getObjectStateForPossiblyPinnedField(staticField.field);
         if (enumState == null) {
-          if (!isFinalFieldInitialized(staticField, enumClass)) {
+          if (staticField.getOptimizationInfo().isDead()) {
+            // We don't care about unused field data.
             continue;
           }
-          // Tracking the content of the field yielded either an empty object state, or something
-          // incoherent. We bail out.
+          // We could not track the content of that field. We bail out.
           return null;
         }
         OptionalInt optionalOrdinal = getOrdinal(enumState);
@@ -513,7 +513,8 @@
         ObjectState valuesState =
             enumStaticFieldValues.getObjectStateForPossiblyPinnedField(staticField.field);
         if (valuesState == null) {
-          if (!isFinalFieldInitialized(staticField, enumClass)) {
+          if (staticField.getOptimizationInfo().isDead()) {
+            // We don't care about unused field data.
             continue;
           }
           // We could not track the content of that field, and the field could be a values field.
@@ -566,13 +567,6 @@
         valuesContents == null ? EnumData.INVALID_VALUES_SIZE : valuesContents.getEnumValuesSize());
   }
 
-  private boolean isFinalFieldInitialized(DexEncodedField staticField, DexProgramClass enumClass) {
-    assert staticField.isFinal();
-    return appView
-        .appInfo()
-        .isFieldOnlyWrittenInMethodIgnoringPinning(staticField, enumClass.getClassInitializer());
-  }
-
   private EnumInstanceFieldData computeEnumFieldData(
       DexField instanceField,
       DexProgramClass enumClass,