diff --git a/src/main/java/com/android/tools/r8/code/Aget.java b/src/main/java/com/android/tools/r8/code/Aget.java
index db3d77c..063df5e 100644
--- a/src/main/java/com/android/tools/r8/code/Aget.java
+++ b/src/main/java/com/android/tools/r8/code/Aget.java
@@ -37,7 +37,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addArrayGet(MemberType.SINGLE, AA, BB, CC);
+    builder.addArrayGet(MemberType.INT_OR_FLOAT, AA, BB, CC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/AgetWide.java b/src/main/java/com/android/tools/r8/code/AgetWide.java
index 904b37c..64c645d 100644
--- a/src/main/java/com/android/tools/r8/code/AgetWide.java
+++ b/src/main/java/com/android/tools/r8/code/AgetWide.java
@@ -37,7 +37,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addArrayGet(MemberType.WIDE, AA, BB, CC);
+    builder.addArrayGet(MemberType.LONG_OR_DOUBLE, AA, BB, CC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/Aput.java b/src/main/java/com/android/tools/r8/code/Aput.java
index db12a55..65e0721 100644
--- a/src/main/java/com/android/tools/r8/code/Aput.java
+++ b/src/main/java/com/android/tools/r8/code/Aput.java
@@ -37,7 +37,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addArrayPut(MemberType.SINGLE, AA, BB, CC);
+    builder.addArrayPut(MemberType.INT_OR_FLOAT, AA, BB, CC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/AputWide.java b/src/main/java/com/android/tools/r8/code/AputWide.java
index eab00b9..286dfff 100644
--- a/src/main/java/com/android/tools/r8/code/AputWide.java
+++ b/src/main/java/com/android/tools/r8/code/AputWide.java
@@ -37,7 +37,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addArrayPut(MemberType.WIDE, AA, BB, CC);
+    builder.addArrayPut(MemberType.LONG_OR_DOUBLE, AA, BB, CC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/Iget.java b/src/main/java/com/android/tools/r8/code/Iget.java
index c08ec43..65ebb44 100644
--- a/src/main/java/com/android/tools/r8/code/Iget.java
+++ b/src/main/java/com/android/tools/r8/code/Iget.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class Iget extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstanceGet(MemberType.SINGLE, A, B, getField());
+    builder.addInstanceGet(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetBoolean.java b/src/main/java/com/android/tools/r8/code/IgetBoolean.java
index 02b3e27..756969c 100644
--- a/src/main/java/com/android/tools/r8/code/IgetBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/IgetBoolean.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IgetBoolean extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstanceGet(MemberType.BOOLEAN, A, B, getField());
+    builder.addInstanceGet(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetByte.java b/src/main/java/com/android/tools/r8/code/IgetByte.java
index 5ac4379..56a239a 100644
--- a/src/main/java/com/android/tools/r8/code/IgetByte.java
+++ b/src/main/java/com/android/tools/r8/code/IgetByte.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IgetByte extends Format22c {
@@ -49,7 +48,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstanceGet(MemberType.BYTE, A, B, getField());
+    builder.addInstanceGet(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetChar.java b/src/main/java/com/android/tools/r8/code/IgetChar.java
index ff57556..ad9c44e 100644
--- a/src/main/java/com/android/tools/r8/code/IgetChar.java
+++ b/src/main/java/com/android/tools/r8/code/IgetChar.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IgetChar extends Format22c {
@@ -49,7 +48,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstanceGet(MemberType.CHAR, A, B, getField());
+    builder.addInstanceGet(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetObject.java b/src/main/java/com/android/tools/r8/code/IgetObject.java
index 80b9557..d0c7c00 100644
--- a/src/main/java/com/android/tools/r8/code/IgetObject.java
+++ b/src/main/java/com/android/tools/r8/code/IgetObject.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IgetObject extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstanceGet(MemberType.OBJECT, A, B, getField());
+    builder.addInstanceGet(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetShort.java b/src/main/java/com/android/tools/r8/code/IgetShort.java
index bd38b45..75a9752 100644
--- a/src/main/java/com/android/tools/r8/code/IgetShort.java
+++ b/src/main/java/com/android/tools/r8/code/IgetShort.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IgetShort extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstanceGet(MemberType.SHORT, A, B, getField());
+    builder.addInstanceGet(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetWide.java b/src/main/java/com/android/tools/r8/code/IgetWide.java
index e3caef5..9893911 100644
--- a/src/main/java/com/android/tools/r8/code/IgetWide.java
+++ b/src/main/java/com/android/tools/r8/code/IgetWide.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IgetWide extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstanceGet(MemberType.WIDE, A, B, getField());
+    builder.addInstanceGet(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/Iput.java b/src/main/java/com/android/tools/r8/code/Iput.java
index 60aa07c..eabfb2b 100644
--- a/src/main/java/com/android/tools/r8/code/Iput.java
+++ b/src/main/java/com/android/tools/r8/code/Iput.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class Iput extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstancePut(MemberType.SINGLE, A, B, getField());
+    builder.addInstancePut(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IputBoolean.java b/src/main/java/com/android/tools/r8/code/IputBoolean.java
index 0841906..6276441 100644
--- a/src/main/java/com/android/tools/r8/code/IputBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/IputBoolean.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IputBoolean extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstancePut(MemberType.BOOLEAN, A, B, getField());
+    builder.addInstancePut(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IputByte.java b/src/main/java/com/android/tools/r8/code/IputByte.java
index 1efb7f4..e333a9f 100644
--- a/src/main/java/com/android/tools/r8/code/IputByte.java
+++ b/src/main/java/com/android/tools/r8/code/IputByte.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IputByte extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstancePut(MemberType.BYTE, A, B, getField());
+    builder.addInstancePut(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IputChar.java b/src/main/java/com/android/tools/r8/code/IputChar.java
index d2c3475..f4902ee 100644
--- a/src/main/java/com/android/tools/r8/code/IputChar.java
+++ b/src/main/java/com/android/tools/r8/code/IputChar.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IputChar extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstancePut(MemberType.CHAR, A, B, getField());
+    builder.addInstancePut(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IputObject.java b/src/main/java/com/android/tools/r8/code/IputObject.java
index 3cad323..7532340 100644
--- a/src/main/java/com/android/tools/r8/code/IputObject.java
+++ b/src/main/java/com/android/tools/r8/code/IputObject.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IputObject extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstancePut(MemberType.OBJECT, A, B, getField());
+    builder.addInstancePut(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IputShort.java b/src/main/java/com/android/tools/r8/code/IputShort.java
index dcbe3aa..f0d4308 100644
--- a/src/main/java/com/android/tools/r8/code/IputShort.java
+++ b/src/main/java/com/android/tools/r8/code/IputShort.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IputShort extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstancePut(MemberType.SHORT, A, B, getField());
+    builder.addInstancePut(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/IputWide.java b/src/main/java/com/android/tools/r8/code/IputWide.java
index 661d972..68d09a6 100644
--- a/src/main/java/com/android/tools/r8/code/IputWide.java
+++ b/src/main/java/com/android/tools/r8/code/IputWide.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class IputWide extends Format22c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInstancePut(MemberType.WIDE, A, B, getField());
+    builder.addInstancePut(A, B, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/MoveResult.java b/src/main/java/com/android/tools/r8/code/MoveResult.java
index 6b75941..cd9eb78 100644
--- a/src/main/java/com/android/tools/r8/code/MoveResult.java
+++ b/src/main/java/com/android/tools/r8/code/MoveResult.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.code;
 
-import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 public class MoveResult extends Format11x {
 
@@ -36,6 +35,6 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addMoveResult(ValueType.INT_OR_FLOAT, AA);
+    builder.addMoveResult(AA);
   }
 }
diff --git a/src/main/java/com/android/tools/r8/code/MoveResultObject.java b/src/main/java/com/android/tools/r8/code/MoveResultObject.java
index a3334b8..3210b71 100644
--- a/src/main/java/com/android/tools/r8/code/MoveResultObject.java
+++ b/src/main/java/com/android/tools/r8/code/MoveResultObject.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.code;
 
-import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class MoveResultObject extends Format11x {
@@ -37,6 +36,6 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addMoveResult(ValueType.OBJECT, AA);
+    builder.addMoveResult(AA);
   }
 }
diff --git a/src/main/java/com/android/tools/r8/code/MoveResultWide.java b/src/main/java/com/android/tools/r8/code/MoveResultWide.java
index 92dde3e..95b4350 100644
--- a/src/main/java/com/android/tools/r8/code/MoveResultWide.java
+++ b/src/main/java/com/android/tools/r8/code/MoveResultWide.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.code;
 
-import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class MoveResultWide extends Format11x {
@@ -37,6 +36,6 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addMoveResult(ValueType.LONG_OR_DOUBLE, AA);
+    builder.addMoveResult(AA);
   }
 }
diff --git a/src/main/java/com/android/tools/r8/code/Sget.java b/src/main/java/com/android/tools/r8/code/Sget.java
index 0a0f95b..3347fdd 100644
--- a/src/main/java/com/android/tools/r8/code/Sget.java
+++ b/src/main/java/com/android/tools/r8/code/Sget.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class Sget extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticGet(MemberType.SINGLE, AA, getField());
+    builder.addStaticGet(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetBoolean.java b/src/main/java/com/android/tools/r8/code/SgetBoolean.java
index c28b97c..27f18f2 100644
--- a/src/main/java/com/android/tools/r8/code/SgetBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/SgetBoolean.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SgetBoolean extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticGet(MemberType.BOOLEAN, AA, getField());
+    builder.addStaticGet(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetByte.java b/src/main/java/com/android/tools/r8/code/SgetByte.java
index 360fe32..3c0219b 100644
--- a/src/main/java/com/android/tools/r8/code/SgetByte.java
+++ b/src/main/java/com/android/tools/r8/code/SgetByte.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SgetByte extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticGet(MemberType.BYTE, AA, getField());
+    builder.addStaticGet(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetChar.java b/src/main/java/com/android/tools/r8/code/SgetChar.java
index 52f8fde..aa69c7f 100644
--- a/src/main/java/com/android/tools/r8/code/SgetChar.java
+++ b/src/main/java/com/android/tools/r8/code/SgetChar.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SgetChar extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticGet(MemberType.CHAR, AA, getField());
+    builder.addStaticGet(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetObject.java b/src/main/java/com/android/tools/r8/code/SgetObject.java
index d2bb253..f70da49 100644
--- a/src/main/java/com/android/tools/r8/code/SgetObject.java
+++ b/src/main/java/com/android/tools/r8/code/SgetObject.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SgetObject extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticGet(MemberType.OBJECT, AA, getField());
+    builder.addStaticGet(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetShort.java b/src/main/java/com/android/tools/r8/code/SgetShort.java
index 50ec9e4..0149fb4 100644
--- a/src/main/java/com/android/tools/r8/code/SgetShort.java
+++ b/src/main/java/com/android/tools/r8/code/SgetShort.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SgetShort extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticGet(MemberType.SHORT, AA, getField());
+    builder.addStaticGet(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetWide.java b/src/main/java/com/android/tools/r8/code/SgetWide.java
index 81f11a7..ea008ad 100644
--- a/src/main/java/com/android/tools/r8/code/SgetWide.java
+++ b/src/main/java/com/android/tools/r8/code/SgetWide.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SgetWide extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticGet(MemberType.WIDE, AA, getField());
+    builder.addStaticGet(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/Sput.java b/src/main/java/com/android/tools/r8/code/Sput.java
index da52b63..6885da6 100644
--- a/src/main/java/com/android/tools/r8/code/Sput.java
+++ b/src/main/java/com/android/tools/r8/code/Sput.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class Sput extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticPut(MemberType.SINGLE, AA, getField());
+    builder.addStaticPut(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SputBoolean.java b/src/main/java/com/android/tools/r8/code/SputBoolean.java
index 4777e90..041ba02 100644
--- a/src/main/java/com/android/tools/r8/code/SputBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/SputBoolean.java
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.code;
 
-import static com.android.tools.r8.ir.code.MemberType.BOOLEAN;
-
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
@@ -51,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticPut(BOOLEAN, AA, getField());
+    builder.addStaticPut(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SputByte.java b/src/main/java/com/android/tools/r8/code/SputByte.java
index 803a3ea..87b79bd 100644
--- a/src/main/java/com/android/tools/r8/code/SputByte.java
+++ b/src/main/java/com/android/tools/r8/code/SputByte.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SputByte extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticPut(MemberType.BYTE, AA, getField());
+    builder.addStaticPut(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SputChar.java b/src/main/java/com/android/tools/r8/code/SputChar.java
index 23a5ff4..5fcd836 100644
--- a/src/main/java/com/android/tools/r8/code/SputChar.java
+++ b/src/main/java/com/android/tools/r8/code/SputChar.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SputChar extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticPut(MemberType.CHAR, AA, getField());
+    builder.addStaticPut(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SputObject.java b/src/main/java/com/android/tools/r8/code/SputObject.java
index 016e80d..fa661ea 100644
--- a/src/main/java/com/android/tools/r8/code/SputObject.java
+++ b/src/main/java/com/android/tools/r8/code/SputObject.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SputObject extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticPut(MemberType.OBJECT, AA, getField());
+    builder.addStaticPut(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SputShort.java b/src/main/java/com/android/tools/r8/code/SputShort.java
index 641fdaf..d2b5f85 100644
--- a/src/main/java/com/android/tools/r8/code/SputShort.java
+++ b/src/main/java/com/android/tools/r8/code/SputShort.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SputShort extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticPut(MemberType.SHORT, AA, getField());
+    builder.addStaticPut(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/code/SputWide.java b/src/main/java/com/android/tools/r8/code/SputWide.java
index d9a743b..7e6aeaa 100644
--- a/src/main/java/com/android/tools/r8/code/SputWide.java
+++ b/src/main/java/com/android/tools/r8/code/SputWide.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class SputWide extends Format21c {
@@ -50,7 +49,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addStaticPut(MemberType.WIDE, AA, getField());
+    builder.addStaticPut(AA, getField());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexType.java b/src/main/java/com/android/tools/r8/graph/DexType.java
index 7aab880..5aaf308 100644
--- a/src/main/java/com/android/tools/r8/graph/DexType.java
+++ b/src/main/java/com/android/tools/r8/graph/DexType.java
@@ -303,6 +303,10 @@
     return (char) descriptor.content[0] == 'V';
   }
 
+  public boolean isBooleanType() {
+    return descriptor.content[0] == 'Z';
+  }
+
   public boolean isArrayType() {
     char firstChar = (char) descriptor.content[0];
     return firstChar == '[';
diff --git a/src/main/java/com/android/tools/r8/graph/DexValue.java b/src/main/java/com/android/tools/r8/graph/DexValue.java
index 48dc873..2b00623 100644
--- a/src/main/java/com/android/tools/r8/graph/DexValue.java
+++ b/src/main/java/com/android/tools/r8/graph/DexValue.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.dex.MixedSectionCollection;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.ir.code.ConstNumber;
-import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.utils.EncodedValueUtils;
@@ -232,9 +231,7 @@
 
     @Override
     public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
-      return (this == DEFAULT && hasClassInitializer)
-          ? null
-          : new ConstNumber(ValueType.INT, dest, value);
+      return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
     }
   }
 
@@ -280,9 +277,7 @@
 
     @Override
     public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
-      return (this == DEFAULT && hasClassInitializer)
-          ? null
-          : new ConstNumber(ValueType.INT, dest, value);
+      return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
     }
   }
 
@@ -332,9 +327,7 @@
 
     @Override
     public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
-      return (this == DEFAULT && hasClassInitializer)
-          ? null
-          : new ConstNumber(ValueType.INT, dest, value);
+      return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
     }
   }
 
@@ -380,9 +373,7 @@
 
     @Override
     public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
-      return (this == DEFAULT && hasClassInitializer)
-          ? null
-          : new ConstNumber(ValueType.INT, dest, value);
+      return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
     }
   }
 
@@ -428,9 +419,7 @@
 
     @Override
     public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
-      return (this == DEFAULT && hasClassInitializer)
-          ? null
-          : new ConstNumber(ValueType.LONG, dest, value);
+      return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
     }
   }
 
@@ -867,9 +856,7 @@
 
     @Override
     public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
-      return (this == DEFAULT && hasClassInitializer)
-          ? null
-          : new ConstNumber(ValueType.INT, dest, value ? 1 : 0);
+      return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value ? 1 : 0);
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java b/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
index 957c092..14a2a98 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
@@ -61,26 +61,26 @@
       int right = rightValue().getConstInstruction().asConstNumber().getIntValue();
       int result = foldIntegers(left, right);
       Value value = code.createValue(ValueType.INT, getLocalInfo());
-      return new ConstNumber(ValueType.INT, value, result);
+      return new ConstNumber(value, result);
     } else if (type == NumericType.LONG) {
       long left = leftValue().getConstInstruction().asConstNumber().getLongValue();
       long right = rightValue().getConstInstruction().asConstNumber().getLongValue();
       long result = foldLongs(left, right);
       Value value = code.createValue(ValueType.LONG, getLocalInfo());
-      return new ConstNumber(ValueType.LONG, value, result);
+      return new ConstNumber(value, result);
     } else if (type == NumericType.FLOAT) {
       float left = leftValue().getConstInstruction().asConstNumber().getFloatValue();
       float right = rightValue().getConstInstruction().asConstNumber().getFloatValue();
       float result = foldFloat(left, right);
       Value value = code.createValue(ValueType.FLOAT, getLocalInfo());
-      return new ConstNumber(ValueType.FLOAT, value, Float.floatToIntBits(result));
+      return new ConstNumber(value, Float.floatToIntBits(result));
     } else {
       assert type == NumericType.DOUBLE;
       double left = leftValue().getConstInstruction().asConstNumber().getDoubleValue();
       double right = rightValue().getConstInstruction().asConstNumber().getDoubleValue();
       double result = foldDouble(left, right);
       Value value = code.createValue(ValueType.DOUBLE, getLocalInfo());
-      return new ConstNumber(ValueType.DOUBLE, value, Double.doubleToLongBits(result));
+      return new ConstNumber(value, Double.doubleToLongBits(result));
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java b/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
index ee1db81..e0aa965 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
@@ -47,10 +47,14 @@
     int index = builder.allocatedRegister(index(), getNumber());
     com.android.tools.r8.code.Instruction instruction;
     switch (type) {
-      case SINGLE:
+      case INT:
+      case FLOAT:
+      case INT_OR_FLOAT:
         instruction = new Aget(dest, array, index);
         break;
-      case WIDE:
+      case LONG:
+      case DOUBLE:
+      case LONG_OR_DOUBLE:
         instruction = new AgetWide(dest, array, index);
         break;
       case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
index 32b03f4..55b71ec 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
@@ -49,10 +49,14 @@
     int index = builder.allocatedRegister(index(), getNumber());
     com.android.tools.r8.code.Instruction instruction;
     switch (type) {
-      case SINGLE:
+      case INT:
+      case FLOAT:
+      case INT_OR_FLOAT:
         instruction = new Aput(source, array, index);
         break;
-      case WIDE:
+      case LONG:
+      case DOUBLE:
+      case LONG_OR_DOUBLE:
         instruction = new AputWide(source, array, index);
         break;
       case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/Cmp.java b/src/main/java/com/android/tools/r8/ir/code/Cmp.java
index a39e268..dc77691 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Cmp.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Cmp.java
@@ -181,7 +181,7 @@
     }
     assert result == -1 || result == 0 || result == 1;
     Value value = code.createValue(ValueType.INT, getLocalInfo());
-    return new ConstNumber(ValueType.INT, value, result);
+    return new ConstNumber(value, result);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java b/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java
index fa49996..ba5c27f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java
@@ -20,27 +20,25 @@
 
 public class ConstNumber extends ConstInstruction {
 
-  public final ValueType type;
   private final long value;
 
-  public ConstNumber(ValueType type, Value dest, long value) {
+  public ConstNumber(Value dest, long value) {
     super(dest);
     // We create const numbers after register allocation for rematerialization of values. Those
     // are all for fixed register values. All other values that are used as the destination for
     // const number instructions should be marked as constants.
     assert dest.isFixedRegisterValue() || dest.definition.isConstNumber();
-    this.type = type;
     this.value = value;
   }
 
   public static ConstNumber copyOf(IRCode code, ConstNumber original) {
     Value newValue =
         new Value(code.valueNumberGenerator.next(), original.outType(), original.getLocalInfo());
-    return new ConstNumber(original.type, newValue, original.getRawValue());
+    return new ConstNumber(newValue, original.getRawValue());
   }
 
   private boolean preciseTypeUnknown() {
-    return type == ValueType.INT_OR_FLOAT || type == ValueType.LONG_OR_DOUBLE;
+    return outType() == ValueType.INT_OR_FLOAT || outType() == ValueType.LONG_OR_DOUBLE;
   }
 
   public Value dest() {
@@ -52,22 +50,24 @@
   }
 
   public int getIntValue() {
-    assert type == ValueType.INT || type == ValueType.INT_OR_FLOAT || type == ValueType.OBJECT;
+    assert outType() == ValueType.INT
+        || outType() == ValueType.INT_OR_FLOAT
+        || outType() == ValueType.OBJECT;
     return (int) value;
   }
 
   public long getLongValue() {
-    assert type == ValueType.LONG || type == ValueType.LONG_OR_DOUBLE;
+    assert outType() == ValueType.LONG || outType() == ValueType.LONG_OR_DOUBLE;
     return value;
   }
 
   public float getFloatValue() {
-    assert type == ValueType.FLOAT || type == ValueType.INT_OR_FLOAT;
+    assert outType() == ValueType.FLOAT || outType() == ValueType.INT_OR_FLOAT;
     return Float.intBitsToFloat((int) value);
   }
 
   public double getDoubleValue() {
-    assert type == ValueType.DOUBLE || type == ValueType.LONG_OR_DOUBLE;
+    assert outType() == ValueType.DOUBLE || outType() == ValueType.LONG_OR_DOUBLE;
     return Double.longBitsToDouble(value);
   }
 
@@ -80,11 +80,11 @@
   }
 
   public boolean isIntegerZero() {
-    return type == ValueType.INT && getIntValue() == 0;
+    return outType() == ValueType.INT && getIntValue() == 0;
   }
 
   public boolean isIntegerOne() {
-    return type == ValueType.INT && getIntValue() == 1;
+    return outType() == ValueType.INT && getIntValue() == 1;
   }
 
   public boolean isIntegerNegativeOne(NumericType type) {
@@ -104,7 +104,7 @@
     }
 
     int register = builder.allocatedRegister(dest(), getNumber());
-    if (type.isSingle() || type.isObject()) {
+    if (outType().isSingle() || outType().isObject()) {
       assert NumberUtils.is32Bit(value);
       if ((register & 0xf) == register && NumberUtils.is4Bit(value)) {
         builder.add(this, new Const4(register, (int) value));
@@ -116,7 +116,7 @@
         builder.add(this, new Const(register, (int) value));
       }
     } else {
-      assert type.isWide();
+      assert outType().isWide();
       if (NumberUtils.is16Bit(value)) {
         builder.add(this, new ConstWide16(register, (int) value));
       } else if ((value & 0x0000ffffffffffffL) == 0) {
@@ -179,7 +179,7 @@
 
   @Override
   public String toString() {
-    return super.toString() + " " + value + " (" + type + ")";
+    return super.toString() + " " + value + " (" + outType() + ")";
   }
 
   @Override
@@ -188,14 +188,14 @@
       return false;
     }
     ConstNumber o = other.asConstNumber();
-    return o.type == type && o.value == value;
+    return o.outType() == outType() && o.value == value;
   }
 
   @Override
   public int compareNonValueParts(Instruction other) {
     ConstNumber o = other.asConstNumber();
     int result;
-    result = type.ordinal() - o.type.ordinal();
+    result = outType().ordinal() - o.outType().ordinal();
     if (result != 0) {
       return result;
     }
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
index fb86708..565204f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
@@ -17,8 +17,8 @@
  */
 public class DebugLocalUninitialized extends ConstNumber {
 
-  public DebugLocalUninitialized(ValueType type, Value value) {
-    super(type == ValueType.OBJECT ? ValueType.INT : type, value, 0);
+  public DebugLocalUninitialized(Value value) {
+    super(value, 0);
   }
 
   @Override
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 490370e..95dd4ba 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
@@ -482,15 +482,15 @@
   }
 
   public ConstNumber createIntConstant(int value) {
-    return new ConstNumber(ValueType.INT, createValue(ValueType.INT), value);
+    return new ConstNumber(createValue(ValueType.INT), value);
   }
 
   public ConstNumber createTrue() {
-    return new ConstNumber(ValueType.INT, createValue(ValueType.INT), 1);
+    return new ConstNumber(createValue(ValueType.INT), 1);
   }
 
   public ConstNumber createFalse() {
-    return new ConstNumber(ValueType.INT, createValue(ValueType.INT), 0);
+    return new ConstNumber(createValue(ValueType.INT), 0);
   }
 
   public final int getHighestBlockNumber() {
@@ -498,8 +498,7 @@
   }
 
   public Instruction createConstNull(Instruction from) {
-    Value newValue = createValue(from.outType());
-    return new ConstNumber(from.outType(), newValue, 0);
+    return new ConstNumber(createValue(from.outType()), 0);
   }
 
   public boolean doAllThrowingInstructionsHavePositions() {
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
index bebbea1..e1bc063 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
@@ -40,10 +40,14 @@
     int objectRegister = builder.allocatedRegister(object(), getNumber());
     com.android.tools.r8.code.Instruction instruction;
     switch (type) {
-      case SINGLE:
+      case INT:
+      case FLOAT:
+      case INT_OR_FLOAT:
         instruction = new Iget(destRegister, objectRegister, field);
         break;
-      case WIDE:
+      case LONG:
+      case DOUBLE:
+      case LONG_OR_DOUBLE:
         instruction = new IgetWide(destRegister, objectRegister, field);
         break;
       case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
index 25cb64b..eae9e68 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
@@ -40,10 +40,14 @@
     int valueRegister = builder.allocatedRegister(value(), getNumber());
     int objectRegister = builder.allocatedRegister(object(), getNumber());
     switch (type) {
-      case SINGLE:
+      case INT:
+      case FLOAT:
+      case INT_OR_FLOAT:
         instruction = new Iput(valueRegister, objectRegister, field);
         break;
-      case WIDE:
+      case LONG:
+      case DOUBLE:
+      case LONG_OR_DOUBLE:
         instruction = new IputWide(valueRegister, objectRegister, field);
         break;
       case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/Invoke.java b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
index bdbcc5a..55d52dc 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Invoke.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
@@ -79,6 +79,8 @@
 
   abstract public Type getType();
 
+  abstract public DexType getReturnType();
+
   public List<Value> arguments() {
     return inValues;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
index adbb602..9db800a 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
@@ -22,6 +22,11 @@
     this.callSite = callSite;
   }
 
+  @Override
+  public DexType getReturnType() {
+    return callSite.methodProto.returnType;
+  }
+
   public DexCallSite getCallSite() {
     return callSite;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
index ff4d876..0fd4804 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
@@ -24,6 +24,11 @@
     this.method = target;
   }
 
+  @Override
+  public DexType getReturnType() {
+    return method.proto.returnType;
+  }
+
   public DexMethod getInvokedMethod() {
     return method;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java b/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
index 5251e20..17f06e7 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
@@ -21,6 +21,11 @@
     this.type = type;
   }
 
+  @Override
+  public DexType getReturnType() {
+    return getArrayType();
+  }
+
   public DexType getArrayType() {
     return type;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java b/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java
index 126bfd2..4b35d87 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProto;
+import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.conversion.DexBuilder;
 import com.android.tools.r8.ir.optimize.Inliner.InlineAction;
 import com.android.tools.r8.ir.optimize.InliningOracle;
@@ -24,6 +25,11 @@
   }
 
   @Override
+  public DexType getReturnType() {
+    return proto.returnType;
+  }
+
+  @Override
   public Type getType() {
     return Type.POLYMORPHIC;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java b/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
index 2481025..5b19aab 100644
--- a/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
@@ -38,7 +38,7 @@
       int right = rightValue().getConstInstruction().asConstNumber().getIntValue();
       int result = foldIntegers(left, right);
       Value value = code.createValue(ValueType.INT, getLocalInfo());
-      return new ConstNumber(ValueType.INT, value, result);
+      return new ConstNumber(value, result);
     } else {
       assert type == NumericType.LONG;
       long left = leftValue().getConstInstruction().asConstNumber().getLongValue();
@@ -51,7 +51,7 @@
       }
       long result = foldLongs(left, right);
       Value value = code.createValue(ValueType.LONG, getLocalInfo());
-      return new ConstNumber(ValueType.LONG, value, result);
+      return new ConstNumber(value, result);
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/code/MemberType.java b/src/main/java/com/android/tools/r8/ir/code/MemberType.java
index 28ae7ac..fc50049 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MemberType.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MemberType.java
@@ -9,50 +9,39 @@
 import com.android.tools.r8.graph.DexType;
 
 public enum MemberType {
-  SINGLE,
-  WIDE,
   OBJECT,
   BOOLEAN,
   BYTE,
   CHAR,
-  SHORT;
-
-  public static ValueType moveTypeFor(MemberType type) {
-    switch (type) {
-      case BOOLEAN:
-      case BYTE:
-      case CHAR:
-      case SHORT:
-        return ValueType.INT;
-      case SINGLE:
-        return ValueType.INT_OR_FLOAT;
-      case WIDE:
-        return ValueType.LONG_OR_DOUBLE;
-      case OBJECT:
-        return ValueType.OBJECT;
-    }
-    return null;
-  }
+  SHORT,
+  INT,
+  FLOAT,
+  LONG,
+  DOUBLE,
+  INT_OR_FLOAT,
+  LONG_OR_DOUBLE;
 
   public static MemberType fromTypeDescriptorChar(char descriptor) {
     switch (descriptor) {
-      case 'L':  // object
-      case '[':  // array
+      case 'L':
+      case '[':
         return MemberType.OBJECT;
-      case 'Z':  // boolean
+      case 'Z':
         return MemberType.BOOLEAN;
-      case 'B':  // byte
+      case 'B':
         return MemberType.BYTE;
-      case 'S':  // short
+      case 'S':
         return MemberType.SHORT;
-      case 'C':  // char
+      case 'C':
         return MemberType.CHAR;
-      case 'I':  // int
-      case 'F':  // float
-        return MemberType.SINGLE;
-      case 'J':  // long
-      case 'D':  // double
-        return MemberType.WIDE;
+      case 'I':
+        return MemberType.INT;
+      case 'F':
+        return MemberType.FLOAT;
+      case 'J':
+        return MemberType.LONG;
+      case 'D':
+        return MemberType.DOUBLE;
       case 'V':
         throw new InternalCompilerError("No member type for void type.");
       default:
diff --git a/src/main/java/com/android/tools/r8/ir/code/Neg.java b/src/main/java/com/android/tools/r8/ir/code/Neg.java
index 9fb215f..5dfe0e7 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Neg.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Neg.java
@@ -33,20 +33,20 @@
     if (type == NumericType.INT) {
       int result = -source().getConstInstruction().asConstNumber().getIntValue();
       Value value = code.createValue(valueType, getLocalInfo());
-      return new ConstNumber(valueType, value, result);
+      return new ConstNumber(value, result);
     } else if (type == NumericType.LONG) {
       long result = -source().getConstInstruction().asConstNumber().getLongValue();
       Value value = code.createValue(valueType, getLocalInfo());
-      return new ConstNumber(valueType, value, result);
+      return new ConstNumber(value, result);
     } else if (type == NumericType.FLOAT) {
       float result = -source().getConstInstruction().asConstNumber().getFloatValue();
       Value value = code.createValue(valueType, getLocalInfo());
-      return new ConstNumber(valueType, value, Float.floatToIntBits(result));
+      return new ConstNumber(value, Float.floatToIntBits(result));
     } else {
       assert type == NumericType.DOUBLE;
       double result = -source().getConstInstruction().asConstNumber().getDoubleValue();
       Value value = code.createValue(valueType, getLocalInfo());
-      return new ConstNumber(valueType, value, Double.doubleToLongBits(result));
+      return new ConstNumber(value, Double.doubleToLongBits(result));
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/code/Not.java b/src/main/java/com/android/tools/r8/ir/code/Not.java
index ec941c0..3333845 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Not.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Not.java
@@ -29,12 +29,12 @@
     if (type == NumericType.INT) {
       int result = ~(source().getConstInstruction().asConstNumber().getIntValue());
       Value value = code.createValue(valueType, getLocalInfo());
-      return new ConstNumber(valueType, value, result);
+      return new ConstNumber(value, result);
     } else {
       assert type == NumericType.LONG;
       long result = ~source().getConstInstruction().asConstNumber().getLongValue();
       Value value = code.createValue(valueType, getLocalInfo());
-      return new ConstNumber(valueType, value, result);
+      return new ConstNumber(value, result);
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
index af91d29..23069f2 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
@@ -36,10 +36,14 @@
     com.android.tools.r8.code.Instruction instruction;
     int dest = builder.allocatedRegister(dest(), getNumber());
     switch (type) {
-      case SINGLE:
+      case INT:
+      case FLOAT:
+      case INT_OR_FLOAT:
         instruction = new Sget(dest, field);
         break;
-      case WIDE:
+      case LONG:
+      case DOUBLE:
+      case LONG_OR_DOUBLE:
         instruction = new SgetWide(dest, field);
         break;
       case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
index 8a55361..fb3ab18 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
@@ -34,10 +34,14 @@
     com.android.tools.r8.code.Instruction instruction;
     int src = builder.allocatedRegister(inValue(), getNumber());
     switch (type) {
-      case SINGLE:
+      case INT:
+      case FLOAT:
+      case INT_OR_FLOAT:
         instruction = new Sput(src, field);
         break;
-      case WIDE:
+      case LONG:
+      case DOUBLE:
+      case LONG_OR_DOUBLE:
         instruction = new SputWide(src, field);
         break;
       case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/ValueType.java b/src/main/java/com/android/tools/r8/ir/code/ValueType.java
index 231a82f..dd058f0 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ValueType.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ValueType.java
@@ -45,10 +45,17 @@
       case BYTE:
       case CHAR:
       case SHORT:
+      case INT:
         return ValueType.INT;
-      case SINGLE:
+      case FLOAT:
+        return ValueType.FLOAT;
+      case INT_OR_FLOAT:
         return ValueType.INT_OR_FLOAT;
-      case WIDE:
+      case LONG:
+        return ValueType.LONG;
+      case DOUBLE:
+        return ValueType.DOUBLE;
+      case LONG_OR_DOUBLE:
         return ValueType.LONG_OR_DOUBLE;
       case OBJECT:
         return ValueType.OBJECT;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index 68c3f08..e8e689c 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -587,7 +587,7 @@
     }
     Value value = writeRegister(register, type, ThrowingInfo.NO_THROW, null);
     assert !value.hasLocalInfo();
-    addInstruction(new DebugLocalUninitialized(type, value));
+    addInstruction(new DebugLocalUninitialized(value));
   }
 
   private void addDebugLocalWrite(ValueType type, int dest, Value in) {
@@ -778,7 +778,7 @@
 
   public void addConst(ValueType type, int dest, long value) {
     Value out = writeRegister(dest, type, ThrowingInfo.NO_THROW);
-    ConstNumber instruction = new ConstNumber(type, out, value);
+    ConstNumber instruction = new ConstNumber(out, value);
     assert !instruction.instructionTypeCanThrow();
     add(instruction);
   }
@@ -793,7 +793,7 @@
       currentBlock.writeCurrentDefinition(dest, existing.outValue(), ThrowingInfo.NO_THROW);
     } else {
       Value out = writeRegister(dest, type, ThrowingInfo.NO_THROW);
-      ConstNumber instruction = new ConstNumber(type, out, value);
+      ConstNumber instruction = new ConstNumber(out, value);
       BasicBlock entryBlock = blocks.get(0);
       if (currentBlock != entryBlock) {
         // Insert the constant instruction at the start of the block right after the argument
@@ -1020,11 +1020,8 @@
     }
   }
 
-  public void addInstanceGet(
-      MemberType type,
-      int dest,
-      int object,
-      DexField field) {
+  public void addInstanceGet(int dest, int object, DexField field) {
+    MemberType type = MemberType.fromDexType(field.type);
     Value in = readRegister(object, ValueType.OBJECT);
     Value out = writeRegister(dest, ValueType.fromMemberType(type), ThrowingInfo.CAN_THROW);
     out.setKnownToBeBoolean(type == MemberType.BOOLEAN);
@@ -1041,11 +1038,8 @@
     addInstruction(instruction);
   }
 
-  public void addInstancePut(
-      MemberType type,
-      int value,
-      int object,
-      DexField field) {
+  public void addInstancePut(int value, int object, DexField field) {
+    MemberType type = MemberType.fromDexType(field.type);
     List<Value> values = new ArrayList<>(2);
     values.add(readRegister(value, ValueType.fromMemberType(type)));
     values.add(readRegister(object, ValueType.OBJECT));
@@ -1274,21 +1268,14 @@
     addInstruction(instruction);
   }
 
-  public void addMoveResult(ValueType type, int dest) {
+  public void addMoveResult(int dest) {
     List<Instruction> instructions = currentBlock.getInstructions();
     Invoke invoke = instructions.get(instructions.size() - 1).asInvoke();
     assert invoke.outValue() == null;
     assert invoke.instructionTypeCanThrow();
-    invoke.setOutValue(writeRegister(dest, type, ThrowingInfo.CAN_THROW));
-  }
-
-  public void addBooleanMoveResult(ValueType type, int dest) {
-    List<Instruction> instructions = currentBlock.getInstructions();
-    Invoke invoke = instructions.get(instructions.size() - 1).asInvoke();
-    assert invoke.outValue() == null;
-    assert invoke.instructionTypeCanThrow();
-    Value outValue = writeRegister(dest, type, ThrowingInfo.CAN_THROW);
-    outValue.setKnownToBeBoolean(true);
+    DexType outType = invoke.getReturnType();
+    Value outValue = writeRegister(dest, ValueType.fromDexType(outType), ThrowingInfo.CAN_THROW);
+    outValue.setKnownToBeBoolean(outType.isBooleanType());
     invoke.setOutValue(outValue);
   }
 
@@ -1345,7 +1332,8 @@
     closeCurrentBlock();
   }
 
-  public void addStaticGet(MemberType type, int dest, DexField field) {
+  public void addStaticGet(int dest, DexField field) {
+    MemberType type = MemberType.fromDexType(field.type);
     Value out = writeRegister(dest, ValueType.fromMemberType(type), ThrowingInfo.CAN_THROW);
     out.setKnownToBeBoolean(type == MemberType.BOOLEAN);
     StaticGet instruction = new StaticGet(type, out, field);
@@ -1353,7 +1341,8 @@
     addInstruction(instruction);
   }
 
-  public void addStaticPut(MemberType type, int value, DexField field) {
+  public void addStaticPut(int value, DexField field) {
+    MemberType type = MemberType.fromDexType(field.type);
     Value in = readRegister(value, ValueType.fromMemberType(type));
     add(new StaticPut(type, in, field));
   }
@@ -1660,7 +1649,7 @@
 
   public Value readLiteral(NumericType type, long constant) {
     Value value = new Value(valueNumberGenerator.next(), ValueType.fromNumericType(type), null);
-    add(new ConstNumber(ValueType.fromNumericType(type), value, constant));
+    add(new ConstNumber(value, constant));
     return value;
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
index c966690..3c102c1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -251,31 +251,43 @@
     // Initialize all non-argument locals to ensure safe insertion of debug-local instructions.
     for (Object o : node.localVariables) {
       LocalVariableNode local = (LocalVariableNode) o;
-      Type localType = Type.getType(local.desc);
-      int sort = localType.getSort();
-      switch (sort) {
+      Type localType;
+      ValueType localValueType;
+      switch (Type.getType(local.desc).getSort()) {
         case Type.OBJECT:
-        case Type.ARRAY:
+        case Type.ARRAY: {
           localType = JarState.NULL_TYPE;
+          localValueType = ValueType.OBJECT;
           break;
-        case Type.DOUBLE:
+        }
         case Type.LONG:
-        case Type.FLOAT:
+        case Type.DOUBLE: {
+          localType = Type.LONG_TYPE;
+          localValueType = ValueType.LONG_OR_DOUBLE;
           break;
+        }
+        case Type.BOOLEAN:
+        case Type.CHAR:
+        case Type.BYTE:
+        case Type.SHORT:
+        case Type.INT:
+        case Type.FLOAT: {
+          localType = Type.INT_TYPE;
+          localValueType = ValueType.INT_OR_FLOAT;
+          break;
+        }
         case Type.VOID:
         case Type.METHOD:
-          throw new Unreachable("Invalid local variable type: " + localType);
         default:
-          localType = Type.INT_TYPE;
-          break;
+          throw new Unreachable("Invalid local variable type: " );
       }
       int localRegister = state.getLocalRegister(local.index, localType);
       ValueType existingLocalType = initializedLocals.get(localRegister);
-      ValueType localValueType = valueType(localType);
       assert existingLocalType == null || existingLocalType.compatible(localValueType);
       if (existingLocalType == null) {
-        int localRegister2 = state.writeLocal(local.index, localType);
-        assert localRegister == localRegister2;
+        // For uninitialized entries write the local to ensure it exists in the local state.
+        int writeRegister = state.writeLocal(local.index, localType);
+        assert writeRegister == localRegister;
         initializedLocals.put(localRegister, localValueType);
         uninitializedLocals.put(localRegister, localValueType);
       }
@@ -842,11 +854,13 @@
       case Type.CHAR:
         return MemberType.CHAR;
       case Type.INT:
+        return MemberType.INT;
       case Type.FLOAT:
-        return MemberType.SINGLE;
+        return MemberType.FLOAT;
       case Type.LONG:
+        return MemberType.LONG;
       case Type.DOUBLE:
-        return MemberType.WIDE;
+        return MemberType.DOUBLE;
       case Type.VOID:
         // Illegal. Throws in fallthrough.
       default:
@@ -2438,24 +2452,23 @@
   private void build(FieldInsnNode insn, IRBuilder builder) {
     DexField field = application.getField(insn.owner, insn.name, insn.desc);
     Type type = Type.getType(insn.desc);
-    MemberType fieldType = memberType(insn.desc);
     switch (insn.getOpcode()) {
       case Opcodes.GETSTATIC:
-        builder.addStaticGet(fieldType, state.push(type), field);
+        builder.addStaticGet(state.push(type), field);
         break;
       case Opcodes.PUTSTATIC:
-        builder.addStaticPut(fieldType, state.pop(type).register, field);
+        builder.addStaticPut(state.pop(type).register, field);
         break;
       case Opcodes.GETFIELD: {
         Slot object = state.pop(JarState.OBJECT_TYPE);
         int dest = state.push(type);
-        builder.addInstanceGet(fieldType, dest, object.register, field);
+        builder.addInstanceGet(dest, object.register, field);
         break;
       }
       case Opcodes.PUTFIELD: {
         Slot value = state.pop(type);
         Slot object = state.pop(JarState.OBJECT_TYPE);
-        builder.addInstancePut(fieldType, value.register, object.register, field);
+        builder.addInstancePut(value.register, object.register, field);
         break;
       }
       default:
@@ -2516,11 +2529,7 @@
     // Move the result to the "top of stack".
     Type returnType = Type.getReturnType(methodDesc);
     if (returnType != Type.VOID_TYPE) {
-      if (returnType == Type.BOOLEAN_TYPE) {
-        builder.addBooleanMoveResult(valueType(returnType), state.push(returnType));
-      } else {
-        builder.addMoveResult(valueType(returnType), state.push(returnType));
-      }
+      builder.addMoveResult(state.push(returnType));
     }
   }
 
@@ -2765,7 +2774,7 @@
     }
     builder.addInvokeNewArray(dimArrayType, insn.dims, dimensions);
     int dimensionsDestTemp = state.push(INT_ARRAY_TYPE);
-    builder.addMoveResult(ValueType.OBJECT, dimensionsDestTemp);
+    builder.addMoveResult(dimensionsDestTemp);
     // Push the class object for the member type of the array.
     int classDestTemp = state.push(CLASS_TYPE);
     builder.ensureBlockForThrowingInstruction();
@@ -2782,7 +2791,7 @@
     state.pop(); // classDestTemp.
     state.pop(); // dimensionsDestTemp.
     int result = state.push(arrayType);
-    builder.addMoveResult(valueType(arrayType), result);
+    builder.addMoveResult(result);
     // Insert cast check to satisfy verification.
     builder.ensureBlockForThrowingInstruction();
     builder.addCheckCast(result, dexArrayType);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
index 551d629..56c3b9f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
@@ -119,7 +119,7 @@
     } else {
       ValueType valueType = ValueType.fromDexType(proto.returnType);
       int tempValue = nextRegister(valueType);
-      add(builder -> builder.addMoveResult(valueType, tempValue));
+      add(builder -> builder.addMoveResult(tempValue));
       add(builder -> builder.addReturn(valueType, tempValue));
     }
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java
index 20286a8..3fc6f67 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java
@@ -53,7 +53,7 @@
     } else {
       ValueType valueType = ValueType.fromDexType(proto.returnType);
       int tempValue = nextRegister(valueType);
-      add(builder -> builder.addMoveResult(valueType, tempValue));
+      add(builder -> builder.addMoveResult(tempValue));
       add(builder -> builder.addReturn(valueType, tempValue));
     }
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
index ea891ea..8e69359 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.ir.desugar;
 
 import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import java.util.Collections;
@@ -29,7 +28,7 @@
         Collections.singletonList(ValueType.OBJECT), Collections.singletonList(instance)));
 
     // Assign to a field.
-    add(builder -> builder.addStaticPut(MemberType.OBJECT, instance, lambda.instanceField));
+    add(builder -> builder.addStaticPut(instance, lambda.instanceField));
 
     // Final return.
     add(IRBuilder::addReturn);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
index b736403..3e268b8 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import java.util.Collections;
 
@@ -31,11 +30,9 @@
     int capturedValues = capturedTypes.length;
     if (capturedValues > 0) {
       for (int i = 0; i < capturedValues; i++) {
-        MemberType memberType = MemberType.fromDexType(capturedTypes[i]);
         DexField field = lambda.getCaptureField(i);
         int idx = i;
-        add(builder -> builder.addInstancePut(memberType,
-            getParamRegister(idx), getReceiverRegister(), field));
+        add(builder -> builder.addInstancePut(getParamRegister(idx), getReceiverRegister(), field));
       }
     }
 
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
index 40911e5..5f1109b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -227,8 +226,7 @@
     // Load captures if needed.
     int capturedValues = capturedTypes.length;
     for (int i = 0; i < capturedValues; i++) {
-      MemberType memberType = MemberType.fromDexType(capturedTypes[i]);
-      ValueType valueType = MemberType.moveTypeFor(memberType);
+      ValueType valueType = ValueType.fromDexType(capturedTypes[i]);
       int register = nextRegister(valueType);
 
       argValueTypes.add(valueType);
@@ -236,8 +234,7 @@
 
       // Read field into tmp local.
       DexField field = lambda.getCaptureField(i);
-      add(builder -> builder.addInstanceGet(
-          memberType, register, getReceiverRegister(), field));
+      add(builder -> builder.addInstanceGet(register, getReceiverRegister(), field));
     }
 
     // Prepare arguments.
@@ -265,7 +262,7 @@
     } else {
       ValueType implValueType = ValueType.fromDexType(implReturnType);
       int tempValue = nextRegister(implValueType);
-      add(builder -> builder.addMoveResult(implValueType, tempValue));
+      add(builder -> builder.addMoveResult(tempValue));
       int adjustedValue = prepareReturnValue(tempValue,
           erasedReturnType, enforcedReturnType, methodToCall.proto.returnType);
       ValueType adjustedValueType = ValueType.fromDexType(erasedReturnType);
@@ -469,7 +466,7 @@
 
     ValueType valueType = ValueType.fromDexType(primitiveType);
     int result = nextRegister(valueType);
-    add(builder -> builder.addMoveResult(valueType, result));
+    add(builder -> builder.addMoveResult(result));
     return result;
   }
 
@@ -491,7 +488,7 @@
         method, method.proto, argValueTypes, argRegisters));
 
     int result = nextRegister(ValueType.OBJECT);
-    add(builder -> builder.addMoveResult(ValueType.OBJECT, result));
+    add(builder -> builder.addMoveResult(result));
     return result;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
index bad56c1..8f09aaa 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
@@ -75,11 +75,12 @@
     if (rule != null && rule.hasReturnValue() && rule.getReturnValue().isSingleValue()) {
       assert valueType != ValueType.OBJECT;
       Value value = code.createValue(valueType, instruction.getLocalInfo());
-      replacement = new ConstNumber(valueType, value, rule.getReturnValue().getSingleValue());
+      replacement = new ConstNumber(value, rule.getReturnValue().getSingleValue());
     }
     if (replacement == null &&
         rule != null && rule.hasReturnValue() && rule.getReturnValue().isField()) {
       DexField field = rule.getReturnValue().getField();
+      assert ValueType.fromDexType(field.type) == valueType;
       DexEncodedField staticField = appInfo.lookupStaticTarget(field.clazz, field);
       if (staticField != null) {
         Value value = code.createValue(valueType, instruction.getLocalInfo());
@@ -165,8 +166,7 @@
               long constant = target.getOptimizationInfo().getReturnedConstant();
               ValueType valueType = invoke.outType();
               Value value = code.createValue(valueType);
-              // TODO(ager): Attempt to get a more precise const type from the method analysis?
-              Instruction knownConstReturn = new ConstNumber(valueType, value, constant);
+              Instruction knownConstReturn = new ConstNumber(value, constant);
               invoke.outValue().replaceUsers(value);
               knownConstReturn.setPosition(invoke.getPosition());
               iterator.add(knownConstReturn);
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java b/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java
index 49b46dd..2b96878 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java
@@ -136,7 +136,7 @@
         instruction = new Move(to, from);
       } else {
         ConstNumber number = move.definition.asConstNumber();
-        instruction = new ConstNumber(number.type, to, number.getRawValue());
+        instruction = new ConstNumber(to, number.getRawValue());
       }
     } else {
       Value from = new FixedRegisterValue(move.type, valueMap.get(move.src));
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
index 43e55ac..4c59686 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
@@ -98,7 +98,7 @@
     } else {
       ValueType valueType = ValueType.fromDexType(proto.returnType);
       int tempValue = nextRegister(valueType);
-      add(builder -> builder.addMoveResult(valueType, tempValue));
+      add(builder -> builder.addMoveResult(tempValue));
       add(builder -> builder.addReturn(valueType, tempValue));
     }
   }
diff --git a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
index 0b7dafb..5165432 100644
--- a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
+++ b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
@@ -367,7 +367,7 @@
       Value newReturnValue = new Value(test.valueNumberGenerator.next(), ValueType.INT, null);
       Value oldReturnValue = newReturnBlock.listIterator().next().asReturn().returnValue();
       newReturnBlock.listIterator().next().asReturn().returnValue().replaceUsers(newReturnValue);
-      Instruction constInstruction = new ConstNumber(ValueType.INT, newConstValue, 10);
+      Instruction constInstruction = new ConstNumber(newConstValue, 10);
       Instruction addInstruction =
           new Add(NumericType.INT, newReturnValue, oldReturnValue, newConstValue);
       iterator.previous();
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
index 726d6b1..2ea44eb 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
@@ -47,11 +47,11 @@
   public void equalityOfConstantOperands() {
     RegisterAllocator allocator = new MockRegisterAllocator();
     Value value0 = new Value(0, ValueType.INT, null);
-    ConstNumber const0 = new ConstNumber(ValueType.INT, value0, 0);
+    ConstNumber const0 = new ConstNumber(value0, 0);
     Value value1 = new Value(1, ValueType.INT, null);
-    ConstNumber const1 = new ConstNumber(ValueType.INT, value1, 1);
+    ConstNumber const1 = new ConstNumber(value1, 1);
     Value value2 = new Value(2, ValueType.INT, null);
-    ConstNumber const2 = new ConstNumber(ValueType.INT, value2, 2);
+    ConstNumber const2 = new ConstNumber(value2, 2);
     Value value3 = new Value(2, ValueType.INT, null);
     Add add0 = new Add(NumericType.INT, value3, value0, value1);
     add0.setPosition(Position.none());
