Handle debug info in cast removal

Change-Id: I34255dd361a8820b23201b405c387142de984743
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
index e314d6461..8d61a94 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.CatchHandlers;
 import com.android.tools.r8.ir.code.CatchHandlers.CatchHandler;
+import com.android.tools.r8.ir.code.CheckCast;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionListIterator;
@@ -121,8 +122,12 @@
       Instruction current = iterator.previous();
       if (current.hasOutValue()) {
         // Replace unnecessary cast values.
-        if (current.isCheckCast() && !current.asCheckCast().isRefiningStaticType()) {
-          current.outValue().replaceUsers(current.asCheckCast().object());
+        if (current.isCheckCast()) {
+          CheckCast checkCast = current.asCheckCast();
+          if (!checkCast.isRefiningStaticType()
+              && checkCast.outValue().getLocalInfo() == checkCast.object().getLocalInfo()) {
+            checkCast.outValue().replaceUsers(checkCast.object());
+          }
         }
         // Remove unused invoke results.
         if (current.isInvoke() && !current.outValue().isUsed()) {