Revert "Use optInfo to find dead fields in enum unboxer"

This reverts commit 56695d8ed9fa19b81c55ab19af0d20cf691e80ca.

Reason for revert: Internal bot failures

Change-Id: I3a568580b036b7c05b76806a9ed894b15e6c1945
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 6c1f24f..0621d6f 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 44e1a21..cf0ecb5 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 (staticField.getOptimizationInfo().isDead()) {
-            // We don't care about unused field data.
+          if (!isFinalFieldInitialized(staticField, enumClass)) {
             continue;
           }
-          // We could not track the content of that field. We bail out.
+          // Tracking the content of the field yielded either an empty object state, or something
+          // incoherent. We bail out.
           return null;
         }
         OptionalInt optionalOrdinal = getOrdinal(enumState);
@@ -513,8 +513,7 @@
         ObjectState valuesState =
             enumStaticFieldValues.getObjectStateForPossiblyPinnedField(staticField.field);
         if (valuesState == null) {
-          if (staticField.getOptimizationInfo().isDead()) {
-            // We don't care about unused field data.
+          if (!isFinalFieldInitialized(staticField, enumClass)) {
             continue;
           }
           // We could not track the content of that field, and the field could be a values field.
@@ -567,6 +566,13 @@
         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,