Fix for no redundant blocks check

The check was introduced as part of the code rewritings update in
commit 6cc0aed3.

Change-Id: I58fae282a06582649ab107d2b8c0d922236f2738
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingRewriter.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingRewriter.java
index 48312bd..7d25797 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingRewriter.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingRewriter.java
@@ -69,6 +69,7 @@
     // Rewrite field instructions that reference a pruned field.
     Set<Value> affectedValues = Sets.newIdentityHashSet();
     BasicBlockIterator blockIterator = code.listIterator();
+    boolean hasChanged = false;
     while (blockIterator.hasNext()) {
       BasicBlock block = blockIterator.next();
       InstructionListIterator instructionIterator = block.listIterator(code);
@@ -76,34 +77,38 @@
         Instruction instruction = instructionIterator.next();
         switch (instruction.opcode()) {
           case INSTANCE_GET:
-            rewriteInstanceGet(
-                code,
-                instructionIterator,
-                instruction.asInstanceGet(),
-                affectedValues,
-                prunedFields);
+            hasChanged |=
+                rewriteInstanceGet(
+                    code,
+                    instructionIterator,
+                    instruction.asInstanceGet(),
+                    affectedValues,
+                    prunedFields);
             break;
           case INSTANCE_PUT:
-            rewriteInstancePut(instructionIterator, instruction.asInstancePut(), prunedFields);
+            hasChanged |=
+                rewriteInstancePut(instructionIterator, instruction.asInstancePut(), prunedFields);
             break;
           case STATIC_GET:
-            rewriteStaticGet(
-                code,
-                instructionIterator,
-                instruction.asStaticGet(),
-                affectedValues,
-                context,
-                initializedClassesWithContexts,
-                prunedFields);
+            hasChanged |=
+                rewriteStaticGet(
+                    code,
+                    instructionIterator,
+                    instruction.asStaticGet(),
+                    affectedValues,
+                    context,
+                    initializedClassesWithContexts,
+                    prunedFields);
             break;
           case STATIC_PUT:
-            rewriteStaticPut(
-                code,
-                instructionIterator,
-                instruction.asStaticPut(),
-                context,
-                initializedClassesWithContexts,
-                prunedFields);
+            hasChanged |=
+                rewriteStaticPut(
+                    code,
+                    instructionIterator,
+                    instruction.asStaticPut(),
+                    context,
+                    initializedClassesWithContexts,
+                    prunedFields);
             break;
           default:
             break;
@@ -113,9 +118,12 @@
     if (!affectedValues.isEmpty()) {
       new TypeAnalysis(appView).narrowing(affectedValues);
     }
+    if (hasChanged) {
+      code.removeRedundantBlocks();
+    }
   }
 
-  private void rewriteInstanceGet(
+  private boolean rewriteInstanceGet(
       IRCode code,
       InstructionListIterator instructionIterator,
       InstanceGet instanceGet,
@@ -123,27 +131,29 @@
       Map<DexField, ProgramField> prunedFields) {
     ProgramField prunedField = prunedFields.get(instanceGet.getField());
     if (prunedField == null) {
-      return;
+      return false;
     }
 
     insertDefaultValueForFieldGet(
         code, instructionIterator, instanceGet, affectedValues, prunedField);
     removeOrReplaceInstanceFieldInstructionWithNullCheck(instructionIterator, instanceGet);
+    return true;
   }
 
-  private void rewriteInstancePut(
+  private boolean rewriteInstancePut(
       InstructionListIterator instructionIterator,
       InstancePut instancePut,
       Map<DexField, ProgramField> prunedFields) {
     ProgramField prunedField = prunedFields.get(instancePut.getField());
     if (prunedField == null) {
-      return;
+      return false;
     }
 
     removeOrReplaceInstanceFieldInstructionWithNullCheck(instructionIterator, instancePut);
+    return true;
   }
 
-  private void rewriteStaticGet(
+  private boolean rewriteStaticGet(
       IRCode code,
       InstructionListIterator instructionIterator,
       StaticGet staticGet,
@@ -153,16 +163,17 @@
       Map<DexField, ProgramField> prunedFields) {
     ProgramField prunedField = prunedFields.get(staticGet.getField());
     if (prunedField == null) {
-      return;
+      return false;
     }
 
     insertDefaultValueForFieldGet(
         code, instructionIterator, staticGet, affectedValues, prunedField);
     removeOrReplaceStaticFieldInstructionByInitClass(
         code, instructionIterator, context, initializedClassesWithContexts, prunedField);
+    return true;
   }
 
-  private void rewriteStaticPut(
+  private boolean rewriteStaticPut(
       IRCode code,
       InstructionListIterator instructionIterator,
       StaticPut staticPut,
@@ -171,11 +182,12 @@
       Map<DexField, ProgramField> prunedFields) {
     ProgramField prunedField = prunedFields.get(staticPut.getField());
     if (prunedField == null) {
-      return;
+      return false;
     }
 
     removeOrReplaceStaticFieldInstructionByInitClass(
         code, instructionIterator, context, initializedClassesWithContexts, prunedField);
+    return true;
   }
 
   private void insertDefaultValueForFieldGet(