diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index 4529112..a5d3e4a 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -376,7 +376,7 @@
       for (Phi phi : block.getPhis()) {
         assert !phi.isTrivialPhi();
         assert phi.getOperands().size() == predecessorCount;
-        assert phi.outType().isPreciseType();
+        assert phi.outType() != ValueType.INT_OR_FLOAT_OR_NULL;
         values.add(phi);
         for (Value value : phi.getOperands()) {
           values.add(value);
@@ -393,7 +393,7 @@
         if (outValue != null) {
           values.add(outValue);
           assert outValue.definition == instruction;
-          assert outValue.outType().isPreciseType();
+          assert outValue.outType() != ValueType.INT_OR_FLOAT_OR_NULL;
         }
         for (Value value : instruction.inValues()) {
           values.add(value);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
index 3b2be1f..4c6d9c1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
@@ -60,6 +60,9 @@
             merge(ifInstruction.inValues().get(0), ifInstruction.inValues().get(1));
           }
         }
+
+        // TODO(zerny): Once we have detailed value types we must join the array element-type with
+        // the value/dest for array-put/get instructions.
       }
     }
     for (Value value : impreciseValues) {
@@ -73,15 +76,7 @@
 
   private ValueType getPreciseType(Value value) {
     ValueType type = canonical(value).outType();
-    if (type.isPreciseType()) {
-      return type;
-    }
-    // If the type is still imprecise, then there are no constraints forcing its type and we
-    // arbitrarily choose long for wide values and int for single values.
-    if (type.isWide()) {
-      return ValueType.LONG;
-    }
-    return ValueType.INT;
+    return type != ValueType.INT_OR_FLOAT_OR_NULL ? type : ValueType.INT_OR_FLOAT;
   }
 
   private void link(Value canonical1, Value canonical2) {
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 9cff141..3ea434a 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
@@ -1034,7 +1034,7 @@
                 if (argumentIndex != -1 && checkArgumentType(invoke, target.method,
                     argumentIndex)) {
                   Value argument = invoke.arguments().get(argumentIndex);
-                  assert invoke.outType() == argument.outType();
+                  assert invoke.outType().verifyCompatible(argument.outType());
                   invoke.outValue().replaceUsers(argument);
                   invoke.setOutValue(null);
                 }
