diff --git a/src/main/java/com/android/tools/r8/ir/code/Value.java b/src/main/java/com/android/tools/r8/ir/code/Value.java
index 618c879..44bd9d4 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Value.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Value.java
@@ -71,7 +71,7 @@
   private boolean isThis = false;
   private boolean isArgument = false;
   private LongInterval valueRange;
-  private DebugData debugData;
+  private final DebugData debugData;
 
   public Value(int number, MoveType type, DebugInfo debugInfo) {
     this.number = number;
@@ -95,12 +95,6 @@
     return type.requiredRegisters();
   }
 
-  public void setDebugInfo(DebugInfo info) {
-    assert info != null;
-    assert debugData == null;
-    debugData = new DebugData(info);
-  }
-
   public DebugInfo getDebugInfo() {
     return debugData == null ? null : new DebugInfo(debugData.local, debugData.previousLocalValue);
   }
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 a68f29b..fad378e 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
@@ -438,10 +438,6 @@
     printC1VisualizerHeader(method);
     printMethod(code, "Initial IR (SSA)");
 
-    if (options.debug) {
-      codeRewriter.simplifyDebugLocals(code);
-    }
-
     if (!method.isProcessed()) {
       if (protoLiteRewriter != null && protoLiteRewriter.appliesTo(method)) {
         protoLiteRewriter.rewriteProtoLiteSpecialMethod(code, method);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index b4aaa86..78d8369 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -37,7 +37,6 @@
 import com.android.tools.r8.ir.code.ConstInstruction;
 import com.android.tools.r8.ir.code.ConstNumber;
 import com.android.tools.r8.ir.code.ConstString;
-import com.android.tools.r8.ir.code.DebugLocalWrite;
 import com.android.tools.r8.ir.code.DominatorTree;
 import com.android.tools.r8.ir.code.Goto;
 import com.android.tools.r8.ir.code.IRCode;
@@ -1147,37 +1146,6 @@
     }
   }
 
-  public void simplifyDebugLocals(IRCode code) {
-    for (BasicBlock block : code.blocks) {
-      for (Phi phi : block.getPhis()) {
-        if (phi.getDebugInfo() == null && phi.numberOfUsers() == 1 && phi.numberOfAllUsers() == 1) {
-          Instruction instruction = phi.uniqueUsers().iterator().next();
-          if (instruction.isDebugLocalWrite()) {
-            removeDebugWriteOfPhi(phi, instruction.asDebugLocalWrite());
-          }
-        }
-      }
-    }
-  }
-
-  private void removeDebugWriteOfPhi(Phi phi, DebugLocalWrite write) {
-    assert write.src() == phi;
-    Value previousLocalValue = write.getPreviousLocalValue();
-    if (previousLocalValue != null) {
-      if (phi.getOperands().contains(previousLocalValue)) {
-        // The phi is explicitly redefining the local already.
-        previousLocalValue.removeDebugUser(write);
-      } else {
-        // If the phi would redefine a local the debug-write instruction must remain.
-        return;
-      }
-    }
-    phi.setDebugInfo(write.getDebugInfo());
-    phi.removeUser(write);
-    write.outValue().replaceUsers(phi);
-    write.getBlock().removeInstruction(write);
-  }
-
   private static class ExpressionEquivalence extends Equivalence<Instruction> {
 
     @Override
