Disable store after store elimination in debug mode

Change-Id: Id0d6641b0eab8d184e63ee857f3eb0725929c6cc
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 f6350d4..afb7003 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
@@ -63,6 +63,7 @@
   private final ProgramMethod method;
   private final IRCode code;
   private final int maxCapacityPerBlock;
+  private final boolean release;
 
   // Values that may require type propagation.
   private final Set<Value> affectedValues = Sets.newIdentityHashSet();
@@ -81,6 +82,7 @@
     this.method = code.context();
     this.code = code;
     this.maxCapacityPerBlock = Math.max(MIN_CAPACITY_PER_BLOCK, MAX_CAPACITY / code.blocks.size());
+    this.release = !appView.options().debug;
   }
 
   public static boolean shouldRun(AppView<?> appView, IRCode code) {
@@ -448,13 +450,15 @@
       activeState.putNonFinalInstanceField(fieldAndObject, value);
 
       // Record that this field is now most recently written by the current instruction.
-      InstancePut mostRecentInstanceFieldWrite =
-          activeState.putMostRecentInstanceFieldWrite(fieldAndObject, instancePut);
-      if (mostRecentInstanceFieldWrite != null) {
-        instructionsToRemove
-            .computeIfAbsent(
-                mostRecentInstanceFieldWrite.getBlock(), ignoreKey(Sets::newIdentityHashSet))
-            .add(mostRecentInstanceFieldWrite);
+      if (release) {
+        InstancePut mostRecentInstanceFieldWrite =
+            activeState.putMostRecentInstanceFieldWrite(fieldAndObject, instancePut);
+        if (mostRecentInstanceFieldWrite != null) {
+          instructionsToRemove
+              .computeIfAbsent(
+                  mostRecentInstanceFieldWrite.getBlock(), ignoreKey(Sets::newIdentityHashSet))
+              .add(mostRecentInstanceFieldWrite);
+        }
       }
     }
   }
@@ -521,13 +525,15 @@
     } else {
       activeState.putNonFinalStaticField(field.getReference(), value);
 
-      StaticPut mostRecentStaticFieldWrite =
-          activeState.putMostRecentStaticFieldWrite(field.getReference(), staticPut);
-      if (mostRecentStaticFieldWrite != null) {
-        instructionsToRemove
-            .computeIfAbsent(
-                mostRecentStaticFieldWrite.getBlock(), ignoreKey(Sets::newIdentityHashSet))
-            .add(mostRecentStaticFieldWrite);
+      if (release) {
+        StaticPut mostRecentStaticFieldWrite =
+            activeState.putMostRecentStaticFieldWrite(field.getReference(), staticPut);
+        if (mostRecentStaticFieldWrite != null) {
+          instructionsToRemove
+              .computeIfAbsent(
+                  mostRecentStaticFieldWrite.getBlock(), ignoreKey(Sets::newIdentityHashSet))
+              .add(mostRecentStaticFieldWrite);
+        }
       }
     }
   }