Reland "Disable redundant load elimination in debug mode"

Bug: b/316744331
Bug: b/218282718
Change-Id: I1c4fba711609183130735f8b93d0dbe627dec1c1
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java
index 1610454..bb62066 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/CodeRewriterPassCollection.java
@@ -39,7 +39,9 @@
     passes.add(new BranchSimplifier(appView));
     passes.add(new SplitBranch(appView));
     passes.add(new RedundantConstNumberRemover(appView));
-    passes.add(new RedundantFieldLoadAndStoreElimination(appView));
+    if (!appView.options().debug) {
+      passes.add(new RedundantFieldLoadAndStoreElimination(appView));
+    }
     passes.add(new BinopRewriter(appView));
     return new CodeRewriterPassCollection(passes);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
index 898bd66..064c4b2 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
@@ -233,7 +233,7 @@
     private final ProgramMethod method;
     private final IRCode code;
     private final int maxCapacityPerBlock;
-    private final boolean release;
+    private final boolean release = true;
 
     // Values that may require type propagation.
     private final AffectedValues affectedValues = new AffectedValues();
@@ -254,7 +254,7 @@
       this.code = code;
       this.maxCapacityPerBlock =
           Math.max(MIN_CAPACITY_PER_BLOCK, MAX_CAPACITY / code.blocks.size());
-      this.release = !appView.options().debug;
+      assert !appView.options().debug;
     }
 
     class ExistingValue implements FieldValue {
diff --git a/src/test/java/com/android/tools/r8/regress/b316744331/Regress316744331Test.java b/src/test/java/com/android/tools/r8/regress/b316744331/Regress316744331Test.java
index e3e6058..2bcf2f7 100644
--- a/src/test/java/com/android/tools/r8/regress/b316744331/Regress316744331Test.java
+++ b/src/test/java/com/android/tools/r8/regress/b316744331/Regress316744331Test.java
@@ -86,8 +86,7 @@
         breakpoint(fooMethod, IN_STREAM_IS_NULL_LINE),
         breakpoint(fooMethod, NORMAL_EXIT_LINE),
         run(),
-        // TODO(b/316744331): D8 incorrectly optimizing out the code after the null check.
-        checkLine(parameters.isCfRuntime() ? IN_STREAM_IS_NULL_LINE : NORMAL_EXIT_LINE),
+        checkLine(IN_STREAM_IS_NULL_LINE),
         run());
   }
 
@@ -105,8 +104,7 @@
         breakpoint(fooMethod, OUT_STREAM_IS_NULL_LINE),
         breakpoint(fooMethod, NORMAL_EXIT_LINE),
         run(),
-        // TODO(b/316744331): D8 incorrectly optimizing out the code after the null check.
-        checkLine(parameters.isCfRuntime() ? OUT_STREAM_IS_NULL_LINE : NORMAL_EXIT_LINE),
+        checkLine(OUT_STREAM_IS_NULL_LINE),
         run());
   }
 }