Refactor various Type enums to qualified top-level enums.

This refactoring avoids the often unclear Type and the warning that
errorprone reports for unqualified usages.

Bug: b/270534077
Change-Id: Iaeb31e011972c834b72ca09ac08ef7cb69acabb4
diff --git a/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java b/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java
index f00f611..e3eb9da 100644
--- a/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java
@@ -60,9 +60,9 @@
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
-import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.utils.StringUtils;
@@ -267,7 +267,7 @@
     return irType("MemberType") + "." + type.name();
   }
 
-  private String ifTypeKind(Type kind) {
+  private String ifTypeKind(IfType kind) {
     return irType("If") + ".Type." + kind.name();
   }
 
@@ -360,7 +360,7 @@
     printNewInstruction(name, valueType(type), "" + index);
   }
 
-  private void printNewJumpInstruction(String name, Type kind, ValueType type, CfLabel target) {
+  private void printNewJumpInstruction(String name, IfType kind, ValueType type, CfLabel target) {
     printNewInstruction(name, ifTypeKind(kind), valueType(type), labelName(target));
   }
 
@@ -417,7 +417,7 @@
   public void print(CfMonitor monitor) {
     printNewInstruction(
         "CfMonitor",
-        monitor.getType() == Monitor.Type.ENTER
+        monitor.getType() == MonitorType.ENTER
             ? monitorType() + ".Type.ENTER"
             : monitorType() + ".Type.EXIT");
   }
diff --git a/src/main/java/com/android/tools/r8/cf/CfPrinter.java b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
index 65572c8..5bab5e9 100644
--- a/src/main/java/com/android/tools/r8/cf/CfPrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
@@ -69,9 +69,9 @@
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.DexValue;
 import com.android.tools.r8.ir.analysis.type.TypeElement;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
-import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.ValueType;
@@ -361,7 +361,7 @@
   }
 
   public void print(CfMonitor monitor) {
-    print(monitor.getType() == Monitor.Type.ENTER ? "monitorenter" : "monitorexit");
+    print(monitor.getType() == MonitorType.ENTER ? "monitorenter" : "monitorexit");
   }
 
   public void print(CfArithmeticBinop arithmeticBinop) {
@@ -596,14 +596,14 @@
     builder.append("goto ").append(getLabel(jump.getTarget()));
   }
 
-  private String ifPostfix(If.Type kind) {
+  private String ifPostfix(IfType kind) {
     return kind.toString().toLowerCase();
   }
 
   public void print(CfIf conditional) {
     indent();
     if (conditional.getType().isObject()) {
-      builder.append("if").append(conditional.getKind() == If.Type.EQ ? "null" : "nonnull");
+      builder.append("if").append(conditional.getKind() == IfType.EQ ? "null" : "nonnull");
     } else {
       builder.append("if").append(ifPostfix(conditional.getKind()));
     }
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConditionalJumpInstruction.java b/src/main/java/com/android/tools/r8/cf/code/CfConditionalJumpInstruction.java
index 38dd4f3..def3dd4 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConditionalJumpInstruction.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConditionalJumpInstruction.java
@@ -6,19 +6,18 @@
 
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
 import com.android.tools.r8.ir.optimize.InliningConstraints;
 
 public abstract class CfConditionalJumpInstruction extends CfJumpInstruction {
 
-  final If.Type kind;
+  final IfType kind;
   final ValueType type;
   final CfLabel target;
 
-  CfConditionalJumpInstruction(If.Type kind, ValueType type, CfLabel target) {
+  CfConditionalJumpInstruction(IfType kind, ValueType type, CfLabel target) {
     this.kind = kind;
     this.type = type;
     this.target = target;
@@ -45,7 +44,7 @@
     return true;
   }
 
-  public final Type getKind() {
+  public final IfType getKind() {
     return kind;
   }
 
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfIf.java b/src/main/java/com/android/tools/r8/cf/code/CfIf.java
index ffb1329..a12fd3ed 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfIf.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfIf.java
@@ -11,7 +11,7 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.CfSourceCode;
 import com.android.tools.r8.ir.conversion.CfState;
@@ -29,7 +29,7 @@
 
 public class CfIf extends CfConditionalJumpInstruction {
 
-  public CfIf(If.Type kind, ValueType type, CfLabel target) {
+  public CfIf(IfType kind, ValueType type, CfLabel target) {
     super(kind, type, target);
   }
 
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java b/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java
index 883ee0e..510975f 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java
@@ -11,7 +11,7 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.CfSourceCode;
 import com.android.tools.r8.ir.conversion.CfState;
@@ -29,7 +29,7 @@
 
 public class CfIfCmp extends CfConditionalJumpInstruction {
 
-  public CfIfCmp(If.Type kind, ValueType type, CfLabel target) {
+  public CfIfCmp(IfType kind, ValueType type, CfLabel target) {
     super(kind, type, target);
   }
 
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
index c4e0493..d18bcc7 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
@@ -21,8 +21,7 @@
 import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.CfSourceCode;
 import com.android.tools.r8.ir.conversion.CfState;
@@ -111,8 +110,8 @@
       NamingLens namingLens,
       LensCodeRewriterUtils rewriter,
       MethodVisitor visitor) {
-    Invoke.Type invokeType = Invoke.Type.fromCfOpcode(opcode, method, context, appView);
-    if (invokeType == Type.POLYMORPHIC) {
+    InvokeType invokeType = InvokeType.fromCfOpcode(opcode, method, context, appView);
+    if (invokeType == InvokeType.POLYMORPHIC) {
       assert dexItemFactory.polymorphicMethods.isPolymorphicInvoke(method);
       // The method is one of java.lang.MethodHandle.invoke/invokeExact.
       // Only the method signature (getProto()) is to be type rewritten.
@@ -126,7 +125,7 @@
     } else {
       MethodLookupResult lookup =
           graphLens.lookupMethod(method, context.getReference(), invokeType);
-      Invoke.Type rewrittenType = lookup.getType();
+      InvokeType rewrittenType = lookup.getType();
       DexMethod rewrittenMethod = lookup.getReference();
       String owner = namingLens.lookupInternalName(rewrittenMethod.holder);
       String name = namingLens.lookupName(rewrittenMethod).toString();
@@ -206,28 +205,28 @@
 
   @Override
   public void buildIR(IRBuilder builder, CfState state, CfSourceCode code) {
-    Invoke.Type type;
+    InvokeType type;
     DexMethod canonicalMethod;
     DexProto callSiteProto = null;
     switch (opcode) {
       case Opcodes.INVOKEINTERFACE:
         {
           canonicalMethod = method;
-          type = Type.INTERFACE;
+          type = InvokeType.INTERFACE;
           break;
         }
       case Opcodes.INVOKEVIRTUAL:
         {
           canonicalMethod = builder.dexItemFactory().polymorphicMethods.canonicalize(method);
           if (canonicalMethod == null) {
-            type = Type.VIRTUAL;
+            type = InvokeType.VIRTUAL;
             canonicalMethod = method;
           } else {
             if (builder.appView.options().shouldDesugarVarHandle()) {
-              type = Type.VIRTUAL;
+              type = InvokeType.VIRTUAL;
               canonicalMethod = method;
             } else {
-              type = Type.POLYMORPHIC;
+              type = InvokeType.POLYMORPHIC;
               callSiteProto = method.proto;
             }
           }
@@ -249,13 +248,13 @@
           AppView<?> appView = builder.appView;
           ProgramMethod context = builder.getProgramMethod();
           canonicalMethod = method;
-          type = Invoke.Type.fromInvokeSpecial(method, context, appView, builder.getCodeLens());
+          type = InvokeType.fromInvokeSpecial(method, context, appView, builder.getCodeLens());
           break;
         }
       case Opcodes.INVOKESTATIC:
         {
           canonicalMethod = method;
-          type = Type.STATIC;
+          type = InvokeType.STATIC;
           break;
         }
       default:
@@ -263,7 +262,7 @@
     }
 
     int parameterCount = method.getParameters().size();
-    if (type != Type.STATIC) {
+    if (type != InvokeType.STATIC) {
       parameterCount += 1;
     }
     ValueType[] types = new ValueType[parameterCount];
@@ -279,7 +278,7 @@
       builder.addMoveResult(state.push(method.getReturnType()).register);
     }
     assert type
-        == Invoke.Type.fromCfOpcode(
+        == InvokeType.fromCfOpcode(
             opcode, method, builder.getProgramMethod(), builder.appView, builder.getCodeLens());
   }
 
@@ -290,18 +289,19 @@
     AppView<?> appView = inliningConstraints.getAppView();
     DexMethod target = method;
     // Find the DEX invocation type.
-    Type type;
+    InvokeType type;
     switch (opcode) {
       case Opcodes.INVOKEINTERFACE:
         // Could have changed to an invoke-virtual instruction due to vertical class merging
         // (if an interface is merged into a class).
-        type = graphLens.lookupMethod(target, context.getReference(), Type.INTERFACE).getType();
-        assert type == Type.INTERFACE || type == Type.VIRTUAL;
+        type =
+            graphLens.lookupMethod(target, context.getReference(), InvokeType.INTERFACE).getType();
+        assert type == InvokeType.INTERFACE || type == InvokeType.VIRTUAL;
         break;
 
       case Opcodes.INVOKESPECIAL:
         {
-          Type actualInvokeType =
+          InvokeType actualInvokeType =
               computeInvokeTypeForInvokeSpecial(appView, method, context, code.getOriginalHolder());
           type = graphLens.lookupMethod(target, context.getReference(), actualInvokeType).getType();
         }
@@ -311,7 +311,7 @@
         {
           // Static invokes may have changed as a result of horizontal class merging.
           MethodLookupResult lookup =
-              graphLens.lookupMethod(target, context.getReference(), Type.STATIC);
+              graphLens.lookupMethod(target, context.getReference(), InvokeType.STATIC);
           target = lookup.getReference();
           type = lookup.getType();
         }
@@ -319,13 +319,13 @@
 
       case Opcodes.INVOKEVIRTUAL:
         {
-          type = Type.VIRTUAL;
+          type = InvokeType.VIRTUAL;
           // Instructions that target a private method in the same class translates to
           // invoke-direct.
           if (target.holder == context.getHolderType()) {
             DexClass clazz = appView.definitionFor(target.holder);
             if (clazz != null && clazz.lookupDirectMethod(target) != null) {
-              type = Type.DIRECT;
+              type = InvokeType.DIRECT;
             }
           }
 
@@ -368,31 +368,31 @@
     return frame.push(config, method.getReturnType());
   }
 
-  private Type computeInvokeTypeForInvokeSpecial(
+  private InvokeType computeInvokeTypeForInvokeSpecial(
       AppView<?> appView, DexMethod method, ProgramMethod context, DexType originalHolder) {
     if (appView.dexItemFactory().isConstructor(method)) {
-      return Type.DIRECT;
+      return InvokeType.DIRECT;
     }
     if (originalHolder != method.getHolderType()) {
-      return Type.SUPER;
+      return InvokeType.SUPER;
     }
     return invokeTypeForInvokeSpecialToNonInitMethodOnHolder(context, appView.graphLens());
   }
 
-  private Type invokeTypeForInvokeSpecialToNonInitMethodOnHolder(
+  private InvokeType invokeTypeForInvokeSpecialToNonInitMethodOnHolder(
       ProgramMethod context, GraphLens graphLens) {
     MethodLookupResult lookupResult =
-        graphLens.lookupMethod(method, context.getReference(), Type.DIRECT);
+        graphLens.lookupMethod(method, context.getReference(), InvokeType.DIRECT);
     DexEncodedMethod definition = context.getHolder().lookupMethod(lookupResult.getReference());
     if (definition == null) {
-      return Type.SUPER;
+      return InvokeType.SUPER;
     }
 
     if (context.getHolder().isInterface()) {
       // On interfaces invoke-special should be mapped to invoke-super if the invoke-special
       // instruction is used to target a default interface method.
       if (definition.belongsToVirtualPool()) {
-        return Type.SUPER;
+        return InvokeType.SUPER;
       }
     } else {
       // Due to desugaring of invoke-special instructions that target virtual methods, this invoke
@@ -401,6 +401,6 @@
       assert definition.isPrivate() || lookupResult.getType().isVirtual();
     }
 
-    return Type.DIRECT;
+    return InvokeType.DIRECT;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java b/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java
index 98a73e5..c0c62d9 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java
@@ -11,7 +11,7 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.InitClassLens;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Monitor.Type;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.conversion.CfSourceCode;
 import com.android.tools.r8.ir.conversion.CfState;
 import com.android.tools.r8.ir.conversion.CfState.Slot;
@@ -29,13 +29,13 @@
 
 public class CfMonitor extends CfInstruction {
 
-  private final Type type;
+  private final MonitorType type;
 
-  public CfMonitor(Type type) {
+  public CfMonitor(MonitorType type) {
     this.type = type;
   }
 
-  public Type getType() {
+  public MonitorType getType() {
     return type;
   }
 
@@ -74,7 +74,7 @@
   }
 
   private int getAsmOpcode() {
-    return type == Type.ENTER ? Opcodes.MONITORENTER : Opcodes.MONITOREXIT;
+    return type == MonitorType.ENTER ? Opcodes.MONITORENTER : Opcodes.MONITOREXIT;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
index c2fad2b..fa27f2c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat21t.java
@@ -9,7 +9,7 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
@@ -69,7 +69,7 @@
     visitor.visit(this, DexFormat21t::specify);
   }
 
-  public abstract Type getType();
+  public abstract IfType getType();
 
   protected abstract ValueTypeConstraint getOperandTypeConstraint();
 
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
index 4ca9fcf..37257b1 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat22t.java
@@ -9,7 +9,7 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
@@ -73,7 +73,7 @@
     visitor.visit(this, DexFormat22t::specify);
   }
 
-  public abstract Type getType();
+  public abstract IfType getType();
 
   public abstract ValueTypeConstraint getOperandTypeConstraint();
 
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
index 91657d8..3a9dff4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
@@ -13,7 +13,7 @@
 import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
 import com.android.tools.r8.utils.RetracerForCodePrinting;
 import com.android.tools.r8.utils.structural.CompareToVisitor;
@@ -106,8 +106,10 @@
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
-        appView.graphLens().lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC);
-    assert lookup.getType() == Type.POLYMORPHIC;
+        appView
+            .graphLens()
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC);
+    assert lookup.getType() == InvokeType.POLYMORPHIC;
     lookup.getReference().collectIndexedItems(appView, indexedItems);
 
     DexProto rewrittenProto = rewriter.rewriteProto(getProto());
@@ -127,7 +129,7 @@
     assert rewriter.dexItemFactory().polymorphicMethods.isPolymorphicInvoke(getMethod());
     assert getMethod()
         == graphLens
-            .lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC)
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC)
             .getReference();
     DexProto rewrittenProto = rewriter.rewriteProto(getProto());
     writeFirst(A, G, dest);
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
index 0bf1e92..7e887dc 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
@@ -13,7 +13,7 @@
 import com.android.tools.r8.graph.IndexedDexItem;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
 import com.android.tools.r8.utils.RetracerForCodePrinting;
 import com.android.tools.r8.utils.structural.CompareToVisitor;
@@ -65,7 +65,7 @@
     assert rewriter.dexItemFactory().polymorphicMethods.isPolymorphicInvoke(getMethod());
     assert getMethod()
         == graphLens
-            .lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC)
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC)
             .getReference();
     DexProto rewrittenProto = rewriter.rewriteProto(getProto());
     writeFirst(AA, dest);
@@ -119,8 +119,10 @@
       ProgramMethod context,
       LensCodeRewriterUtils rewriter) {
     MethodLookupResult lookup =
-        appView.graphLens().lookupMethod(getMethod(), context.getReference(), Type.POLYMORPHIC);
-    assert lookup.getType() == Type.POLYMORPHIC;
+        appView
+            .graphLens()
+            .lookupMethod(getMethod(), context.getReference(), InvokeType.POLYMORPHIC);
+    assert lookup.getType() == InvokeType.POLYMORPHIC;
     lookup.getReference().collectIndexedItems(appView, indexedItems);
 
     DexProto rewrittenProto = rewriter.rewriteProto(getProto());
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfEq.java b/src/main/java/com/android/tools/r8/dex/code/DexIfEq.java
index 345328f..1db067f 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfEq.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfEq.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfEq extends DexFormat22t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.EQ;
+  public IfType getType() {
+    return IfType.EQ;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfEqz.java b/src/main/java/com/android/tools/r8/dex/code/DexIfEqz.java
index 517576c..84b526e 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfEqz.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfEqz.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfEqz extends DexFormat21t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.EQ;
+  public IfType getType() {
+    return IfType.EQ;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfGe.java b/src/main/java/com/android/tools/r8/dex/code/DexIfGe.java
index 4c49892..ef38085 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfGe.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfGe.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfGe extends DexFormat22t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.GE;
+  public IfType getType() {
+    return IfType.GE;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfGez.java b/src/main/java/com/android/tools/r8/dex/code/DexIfGez.java
index 6a9b49e..4765685 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfGez.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfGez.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfGez extends DexFormat21t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.GE;
+  public IfType getType() {
+    return IfType.GE;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfGt.java b/src/main/java/com/android/tools/r8/dex/code/DexIfGt.java
index 20abfdc..ea24dc4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfGt.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfGt.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfGt extends DexFormat22t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.GT;
+  public IfType getType() {
+    return IfType.GT;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfGtz.java b/src/main/java/com/android/tools/r8/dex/code/DexIfGtz.java
index c3a8348..2b4854e 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfGtz.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfGtz.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfGtz extends DexFormat21t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.GT;
+  public IfType getType() {
+    return IfType.GT;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfLe.java b/src/main/java/com/android/tools/r8/dex/code/DexIfLe.java
index 9fde6a5..1410c10 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfLe.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfLe.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfLe extends DexFormat22t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.LE;
+  public IfType getType() {
+    return IfType.LE;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfLez.java b/src/main/java/com/android/tools/r8/dex/code/DexIfLez.java
index 04ebeff..3d24d4d 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfLez.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfLez.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfLez extends DexFormat21t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.LE;
+  public IfType getType() {
+    return IfType.LE;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfLt.java b/src/main/java/com/android/tools/r8/dex/code/DexIfLt.java
index 728ba10..cd9cbec 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfLt.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfLt.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfLt extends DexFormat22t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.LT;
+  public IfType getType() {
+    return IfType.LT;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfLtz.java b/src/main/java/com/android/tools/r8/dex/code/DexIfLtz.java
index 0aba44f..5ff2129 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfLtz.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfLtz.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfLtz extends DexFormat21t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.LT;
+  public IfType getType() {
+    return IfType.LT;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfNe.java b/src/main/java/com/android/tools/r8/dex/code/DexIfNe.java
index 9919538..d403a22 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfNe.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfNe.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfNe extends DexFormat22t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.NE;
+  public IfType getType() {
+    return IfType.NE;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexIfNez.java b/src/main/java/com/android/tools/r8/dex/code/DexIfNez.java
index cb74246..b2d79a9 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexIfNez.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexIfNez.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueTypeConstraint;
 
 public class DexIfNez extends DexFormat21t {
@@ -36,8 +36,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.NE;
+  public IfType getType() {
+    return IfType.NE;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirect.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirect.java
index b918754..00eff75 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirect.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirect.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeDirect extends DexInvokeMethod {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.DIRECT;
+  public InvokeType getInvokeType() {
+    return InvokeType.DIRECT;
   }
 
   @Override
@@ -50,7 +50,8 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRegisters(Type.DIRECT, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
+    builder.addInvokeRegisters(
+        InvokeType.DIRECT, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirectRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirectRange.java
index 9134e4a..82bb5d3 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirectRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeDirectRange.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeDirectRange extends DexInvokeMethodRange {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.DIRECT;
+  public InvokeType getInvokeType() {
+    return InvokeType.DIRECT;
   }
 
   @Override
@@ -50,7 +50,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRange(Type.DIRECT, getMethod(), getProto(), AA, CCCC);
+    builder.addInvokeRange(InvokeType.DIRECT, getMethod(), getProto(), AA, CCCC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterface.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterface.java
index d7a64be..d7db325 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterface.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterface.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeInterface extends DexInvokeMethod {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.INTERFACE;
+  public InvokeType getInvokeType() {
+    return InvokeType.INTERFACE;
   }
 
   @Override
@@ -51,7 +51,7 @@
   @Override
   public void buildIR(IRBuilder builder) {
     builder.addInvokeRegisters(
-        Type.INTERFACE, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
+        InvokeType.INTERFACE, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterfaceRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterfaceRange.java
index b8dfc7b..5313e9b 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterfaceRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeInterfaceRange.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeInterfaceRange extends DexInvokeMethodRange {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.INTERFACE;
+  public InvokeType getInvokeType() {
+    return InvokeType.INTERFACE;
   }
 
   @Override
@@ -50,7 +50,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRange(Type.INTERFACE, getMethod(), getProto(), AA, CCCC);
+    builder.addInvokeRange(InvokeType.INTERFACE, getMethod(), getProto(), AA, CCCC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java
index a390eff..c59579b 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethod.java
@@ -10,7 +10,7 @@
 import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
 import java.nio.ShortBuffer;
 
@@ -43,7 +43,7 @@
     return BBBB;
   }
 
-  public abstract Invoke.Type getInvokeType();
+  public abstract InvokeType getInvokeType();
 
   @Override
   public void write(
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java
index 3c1ffc7..7dc8a6c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeMethodRange.java
@@ -10,7 +10,7 @@
 import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
 import java.nio.ShortBuffer;
 
@@ -43,7 +43,7 @@
     return BBBB;
   }
 
-  public abstract Type getInvokeType();
+  public abstract InvokeType getInvokeType();
 
   @Override
   public void write(
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphic.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphic.java
index 72678f0..1857048 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphic.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphic.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 /**
@@ -31,7 +31,7 @@
   @Override
   public void buildIR(IRBuilder builder) {
     builder.addInvokeRegisters(
-        Type.POLYMORPHIC, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
+        InvokeType.POLYMORPHIC, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphicRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphicRange.java
index 186952b..629e73c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphicRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokePolymorphicRange.java
@@ -7,7 +7,7 @@
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 /** An invoke-polymorphic range instruction used to call method with polymorphic signature. */
@@ -53,7 +53,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRange(Type.POLYMORPHIC, getMethod(), getProto(), AA, CCCC);
+    builder.addInvokeRange(InvokeType.POLYMORPHIC, getMethod(), getProto(), AA, CCCC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeStatic.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeStatic.java
index b645556..7286ac4 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeStatic.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeStatic.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeStatic extends DexInvokeMethod {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.STATIC;
+  public InvokeType getInvokeType() {
+    return InvokeType.STATIC;
   }
 
   @Override
@@ -50,7 +50,8 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRegisters(Type.STATIC, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
+    builder.addInvokeRegisters(
+        InvokeType.STATIC, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeStaticRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeStaticRange.java
index 512632f..609e4e8 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeStaticRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeStaticRange.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeStaticRange extends DexInvokeMethodRange {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.STATIC;
+  public InvokeType getInvokeType() {
+    return InvokeType.STATIC;
   }
 
   @Override
@@ -50,7 +50,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRange(Type.STATIC, getMethod(), getProto(), AA, CCCC);
+    builder.addInvokeRange(InvokeType.STATIC, getMethod(), getProto(), AA, CCCC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuper.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuper.java
index 3be61ac..c9b605f 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuper.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuper.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeSuper extends DexInvokeMethod {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.SUPER;
+  public InvokeType getInvokeType() {
+    return InvokeType.SUPER;
   }
 
   @Override
@@ -50,7 +50,8 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRegisters(Type.SUPER, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
+    builder.addInvokeRegisters(
+        InvokeType.SUPER, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuperRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuperRange.java
index 206e74f..a34f0f1 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuperRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeSuperRange.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeSuperRange extends DexInvokeMethodRange {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.SUPER;
+  public InvokeType getInvokeType() {
+    return InvokeType.SUPER;
   }
 
   @Override
@@ -50,7 +50,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRange(Type.SUPER, getMethod(), getProto(), AA, CCCC);
+    builder.addInvokeRange(InvokeType.SUPER, getMethod(), getProto(), AA, CCCC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtual.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtual.java
index f1704e5..fbc844c 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtual.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtual.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeVirtual extends DexInvokeMethod {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.VIRTUAL;
+  public InvokeType getInvokeType() {
+    return InvokeType.VIRTUAL;
   }
 
   @Override
@@ -60,7 +60,8 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRegisters(Type.VIRTUAL, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
+    builder.addInvokeRegisters(
+        InvokeType.VIRTUAL, getMethod(), getProto(), A, new int[] {C, D, E, F, G});
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtualRange.java b/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtualRange.java
index 97a87f8..27662f8 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtualRange.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexInvokeVirtualRange.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.OffsetToObjectMapping;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexInvokeVirtualRange extends DexInvokeMethodRange {
@@ -24,8 +24,8 @@
   }
 
   @Override
-  public Type getInvokeType() {
-    return Type.VIRTUAL;
+  public InvokeType getInvokeType() {
+    return InvokeType.VIRTUAL;
   }
 
   @Override
@@ -60,7 +60,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addInvokeRange(Type.VIRTUAL, getMethod(), getProto(), AA, CCCC);
+    builder.addInvokeRange(InvokeType.VIRTUAL, getMethod(), getProto(), AA, CCCC);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexMonitorEnter.java b/src/main/java/com/android/tools/r8/dex/code/DexMonitorEnter.java
index 620c557..b8f8936 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexMonitorEnter.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexMonitorEnter.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.Monitor.Type;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexMonitorEnter extends DexFormat11x {
@@ -37,7 +37,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addMonitor(Type.ENTER, AA);
+    builder.addMonitor(MonitorType.ENTER, AA);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexMonitorExit.java b/src/main/java/com/android/tools/r8/dex/code/DexMonitorExit.java
index d001e32..9fb94cf 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexMonitorExit.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexMonitorExit.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.dex.code;
 
-import com.android.tools.r8.ir.code.Monitor.Type;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 
 public class DexMonitorExit extends DexFormat11x {
@@ -37,7 +37,7 @@
 
   @Override
   public void buildIR(IRBuilder builder) {
-    builder.addMonitor(Type.EXIT, AA);
+    builder.addMonitor(MonitorType.EXIT, AA);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
index 610a0c8..0e72940 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.structural.StructuralMapping;
 import com.android.tools.r8.utils.structural.StructuralSpecification;
@@ -165,21 +165,21 @@
       return this == MethodHandleType.INVOKE_CONSTRUCTOR;
     }
 
-    public Type toInvokeType() {
+    public InvokeType toInvokeType() {
       assert isMethodType();
       switch (this) {
         case INVOKE_STATIC:
-          return Type.STATIC;
+          return InvokeType.STATIC;
         case INVOKE_INSTANCE:
-          return Type.VIRTUAL;
+          return InvokeType.VIRTUAL;
         case INVOKE_CONSTRUCTOR:
-          return Type.DIRECT;
+          return InvokeType.DIRECT;
         case INVOKE_DIRECT:
-          return Type.DIRECT;
+          return InvokeType.DIRECT;
         case INVOKE_INTERFACE:
-          return Type.INTERFACE;
+          return InvokeType.INTERFACE;
         case INVOKE_SUPER:
-          return Type.SUPER;
+          return InvokeType.SUPER;
         default:
           throw new Unreachable(
               "Conversion to invoke type with unexpected method handle: " + this);
diff --git a/src/main/java/com/android/tools/r8/graph/GraphLens.java b/src/main/java/com/android/tools/r8/graph/GraphLens.java
index b43256b..95921b3 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLens.java
@@ -7,7 +7,7 @@
 
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
 import com.android.tools.r8.ir.optimize.enums.EnumUnboxingLens;
 import com.android.tools.r8.optimize.MemberRebindingIdentityLens;
@@ -202,13 +202,13 @@
    */
   public static class MethodLookupResult extends MemberLookupResult<DexMethod> {
 
-    private final Type type;
+    private final InvokeType type;
     private final RewrittenPrototypeDescription prototypeChanges;
 
     public MethodLookupResult(
         DexMethod reference,
         DexMethod reboundReference,
-        Type type,
+        InvokeType type,
         RewrittenPrototypeDescription prototypeChanges) {
       super(reference, reboundReference);
       this.type = type;
@@ -219,7 +219,7 @@
       return new Builder(lens);
     }
 
-    public Type getType() {
+    public InvokeType getType() {
       return type;
     }
 
@@ -231,7 +231,7 @@
 
       private final GraphLens lens;
       private RewrittenPrototypeDescription prototypeChanges = RewrittenPrototypeDescription.none();
-      private Type type;
+      private InvokeType type;
 
       private Builder(GraphLens lens) {
         this.lens = lens;
@@ -242,7 +242,7 @@
         return this;
       }
 
-      public Builder setType(Type type) {
+      public Builder setType(InvokeType type) {
         this.type = type;
         return this;
       }
@@ -440,51 +440,52 @@
   }
 
   public final MethodLookupResult lookupInvokeDirect(DexMethod method, ProgramMethod context) {
-    return lookupMethod(method, context.getReference(), Type.DIRECT);
+    return lookupMethod(method, context.getReference(), InvokeType.DIRECT);
   }
 
   public final MethodLookupResult lookupInvokeDirect(
       DexMethod method, ProgramMethod context, GraphLens codeLens) {
-    return lookupMethod(method, context.getReference(), Type.DIRECT, codeLens);
+    return lookupMethod(method, context.getReference(), InvokeType.DIRECT, codeLens);
   }
 
   public final MethodLookupResult lookupInvokeInterface(DexMethod method, ProgramMethod context) {
-    return lookupMethod(method, context.getReference(), Type.INTERFACE);
+    return lookupMethod(method, context.getReference(), InvokeType.INTERFACE);
   }
 
   public final MethodLookupResult lookupInvokeInterface(
       DexMethod method, ProgramMethod context, GraphLens codeLens) {
-    return lookupMethod(method, context.getReference(), Type.INTERFACE, codeLens);
+    return lookupMethod(method, context.getReference(), InvokeType.INTERFACE, codeLens);
   }
 
   public final MethodLookupResult lookupInvokeStatic(DexMethod method, ProgramMethod context) {
-    return lookupMethod(method, context.getReference(), Type.STATIC);
+    return lookupMethod(method, context.getReference(), InvokeType.STATIC);
   }
 
   public final MethodLookupResult lookupInvokeStatic(
       DexMethod method, ProgramMethod context, GraphLens codeLens) {
-    return lookupMethod(method, context.getReference(), Type.STATIC, codeLens);
+    return lookupMethod(method, context.getReference(), InvokeType.STATIC, codeLens);
   }
 
   public final MethodLookupResult lookupInvokeSuper(DexMethod method, ProgramMethod context) {
-    return lookupMethod(method, context.getReference(), Type.SUPER);
+    return lookupMethod(method, context.getReference(), InvokeType.SUPER);
   }
 
   public final MethodLookupResult lookupInvokeSuper(
       DexMethod method, ProgramMethod context, GraphLens codeLens) {
-    return lookupMethod(method, context.getReference(), Type.SUPER, codeLens);
+    return lookupMethod(method, context.getReference(), InvokeType.SUPER, codeLens);
   }
 
   public final MethodLookupResult lookupInvokeVirtual(DexMethod method, ProgramMethod context) {
-    return lookupMethod(method, context.getReference(), Type.VIRTUAL);
+    return lookupMethod(method, context.getReference(), InvokeType.VIRTUAL);
   }
 
   public final MethodLookupResult lookupInvokeVirtual(
       DexMethod method, ProgramMethod context, GraphLens codeLens) {
-    return lookupMethod(method, context.getReference(), Type.VIRTUAL, codeLens);
+    return lookupMethod(method, context.getReference(), InvokeType.VIRTUAL, codeLens);
   }
 
-  public final MethodLookupResult lookupMethod(DexMethod method, DexMethod context, Type type) {
+  public final MethodLookupResult lookupMethod(
+      DexMethod method, DexMethod context, InvokeType type) {
     return lookupMethod(method, context, type, null);
   }
 
@@ -500,12 +501,12 @@
    *     should generally use the result of calling {@link AppView#codeLens()}.
    */
   public abstract MethodLookupResult lookupMethod(
-      DexMethod method, DexMethod context, Type type, GraphLens codeLens);
+      DexMethod method, DexMethod context, InvokeType type, GraphLens codeLens);
 
   protected abstract MethodLookupResult internalLookupMethod(
       DexMethod reference,
       DexMethod context,
-      Type type,
+      InvokeType type,
       GraphLens codeLens,
       LookupMethodContinuation continuation);
 
@@ -898,7 +899,7 @@
 
     @Override
     public MethodLookupResult lookupMethod(
-        DexMethod method, DexMethod context, Type type, GraphLens codeLens) {
+        DexMethod method, DexMethod context, InvokeType type, GraphLens codeLens) {
       if (method.getHolderType().isArrayType()) {
         assert lookupType(method.getReturnType()) == method.getReturnType();
         assert method.getParameters().stream()
@@ -963,7 +964,7 @@
     protected MethodLookupResult internalLookupMethod(
         DexMethod reference,
         DexMethod context,
-        Type type,
+        InvokeType type,
         GraphLens codeLens,
         LookupMethodContinuation continuation) {
       if (this == codeLens) {
@@ -1078,7 +1079,7 @@
 
     @Override
     public MethodLookupResult lookupMethod(
-        DexMethod method, DexMethod context, Type type, GraphLens codeLens) {
+        DexMethod method, DexMethod context, InvokeType type, GraphLens codeLens) {
       assert codeLens == null || codeLens.isIdentityLens();
       return MethodLookupResult.builder(this).setReference(method).setType(type).build();
     }
@@ -1102,7 +1103,7 @@
     protected MethodLookupResult internalLookupMethod(
         DexMethod reference,
         DexMethod context,
-        Type type,
+        InvokeType type,
         GraphLens codeLens,
         LookupMethodContinuation continuation) {
       // Passes the method reference back to the next graph lens. The identity lens intentionally
@@ -1189,7 +1190,7 @@
     protected MethodLookupResult internalLookupMethod(
         DexMethod reference,
         DexMethod context,
-        Type type,
+        InvokeType type,
         GraphLens codeLens,
         LookupMethodContinuation continuation) {
       assert codeLens == null || codeLens == this;
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index c9d6437..45fed00 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -55,9 +55,9 @@
 import com.android.tools.r8.graph.JarClassFileReader.ReparseContext;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
 import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
-import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.SourcePosition;
@@ -736,10 +736,10 @@
           addInstruction(new CfThrow());
           break;
         case Opcodes.MONITORENTER:
-          addInstruction(new CfMonitor(Monitor.Type.ENTER));
+          addInstruction(new CfMonitor(MonitorType.ENTER));
           break;
         case Opcodes.MONITOREXIT:
-          addInstruction(new CfMonitor(Monitor.Type.EXIT));
+          addInstruction(new CfMonitor(MonitorType.EXIT));
           break;
         default:
           throw new Unreachable("Unknown instruction");
@@ -932,7 +932,7 @@
             break;
           case Opcodes.IFNULL:
           case Opcodes.IFNONNULL:
-            If.Type type = opcode == Opcodes.IFNULL ? If.Type.EQ : If.Type.NE;
+            IfType type = opcode == Opcodes.IFNULL ? IfType.EQ : IfType.NE;
             addInstruction(new CfIf(type, ValueType.OBJECT, target));
             break;
           case Opcodes.JSR:
@@ -943,28 +943,28 @@
       }
     }
 
-    private static If.Type ifType(int opcode) {
+    private static IfType ifType(int opcode) {
       switch (opcode) {
         case Opcodes.IFEQ:
         case Opcodes.IF_ICMPEQ:
         case Opcodes.IF_ACMPEQ:
-          return If.Type.EQ;
+          return IfType.EQ;
         case Opcodes.IFNE:
         case Opcodes.IF_ICMPNE:
         case Opcodes.IF_ACMPNE:
-          return If.Type.NE;
+          return IfType.NE;
         case Opcodes.IFLT:
         case Opcodes.IF_ICMPLT:
-          return If.Type.LT;
+          return IfType.LT;
         case Opcodes.IFGE:
         case Opcodes.IF_ICMPGE:
-          return If.Type.GE;
+          return IfType.GE;
         case Opcodes.IFGT:
         case Opcodes.IF_ICMPGT:
-          return If.Type.GT;
+          return IfType.GT;
         case Opcodes.IFLE:
         case Opcodes.IF_ICMPLE:
-          return If.Type.LE;
+          return IfType.LE;
         default:
           throw new Unreachable("Unexpected If instruction opcode: " + opcode);
       }
diff --git a/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java b/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
index f56cc34..d6efacb 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodAccessInfoCollection.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.graph;
 
 import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.utils.ConsumerUtils;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
 import com.google.common.collect.Sets;
@@ -91,11 +91,11 @@
   public MethodAccessInfoCollection rewrittenWithLens(
       DexDefinitionSupplier definitions, GraphLens lens) {
     MethodAccessInfoCollection.Builder<?> builder = identityBuilder();
-    rewriteInvokesWithLens(builder, directInvokes, definitions, lens, Type.DIRECT);
-    rewriteInvokesWithLens(builder, interfaceInvokes, definitions, lens, Type.INTERFACE);
-    rewriteInvokesWithLens(builder, staticInvokes, definitions, lens, Type.STATIC);
-    rewriteInvokesWithLens(builder, superInvokes, definitions, lens, Type.SUPER);
-    rewriteInvokesWithLens(builder, virtualInvokes, definitions, lens, Type.VIRTUAL);
+    rewriteInvokesWithLens(builder, directInvokes, definitions, lens, InvokeType.DIRECT);
+    rewriteInvokesWithLens(builder, interfaceInvokes, definitions, lens, InvokeType.INTERFACE);
+    rewriteInvokesWithLens(builder, staticInvokes, definitions, lens, InvokeType.STATIC);
+    rewriteInvokesWithLens(builder, superInvokes, definitions, lens, InvokeType.SUPER);
+    rewriteInvokesWithLens(builder, virtualInvokes, definitions, lens, InvokeType.VIRTUAL);
     return builder.build();
   }
 
@@ -104,7 +104,7 @@
       Map<DexMethod, ProgramMethodSet> invokes,
       DexDefinitionSupplier definitions,
       GraphLens lens,
-      Type type) {
+      InvokeType type) {
     invokes.forEach(
         (reference, contexts) -> {
           ProgramMethodSet newContexts = contexts.rewrittenWithLens(definitions, lens);
@@ -112,7 +112,7 @@
             MethodLookupResult methodLookupResult =
                 lens.lookupMethod(reference, newContext.getReference(), type);
             DexMethod newReference = methodLookupResult.getReference();
-            Type newType = methodLookupResult.getType();
+            InvokeType newType = methodLookupResult.getType();
             builder.registerInvokeInContext(newReference, newContext, newType);
           }
         });
@@ -160,7 +160,7 @@
     }
 
     public boolean registerInvokeInContext(
-        DexMethod invokedMethod, ProgramMethod context, Type type) {
+        DexMethod invokedMethod, ProgramMethod context, InvokeType type) {
       switch (type) {
         case DIRECT:
           return registerInvokeDirectInContext(invokedMethod, context);
diff --git a/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java b/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
index 4c61282..85bd133 100644
--- a/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/NestedGraphLens.java
@@ -6,7 +6,7 @@
 
 import com.android.tools.r8.graph.GraphLens.NonIdentityGraphLens;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.utils.IterableUtils;
 import com.android.tools.r8.utils.collections.BidirectionalManyToManyRepresentativeMap;
 import com.android.tools.r8.utils.collections.BidirectionalManyToOneRepresentativeMap;
@@ -23,8 +23,8 @@
  * <p>Subclasses can override the lookup methods.
  *
  * <p>For method mapping where invocation type can change just override {@link
- * #mapInvocationType(DexMethod, DexMethod, Type)} if the default name mapping applies, and only
- * invocation type might need to change.
+ * #mapInvocationType(DexMethod, DexMethod, InvokeType)} if the default name mapping applies, and
+ * only invocation type might need to change.
  */
 public class NestedGraphLens extends NonIdentityGraphLens {
 
@@ -266,9 +266,10 @@
    * Default invocation type mapping.
    *
    * <p>This is an identity mapping. If a subclass need invocation type mapping either override this
-   * method or {@link #lookupMethod(DexMethod, DexMethod, Type)}
+   * method or {@link #lookupMethod(DexMethod, DexMethod, InvokeType)}
    */
-  protected Type mapInvocationType(DexMethod newMethod, DexMethod originalMethod, Type type) {
+  protected InvokeType mapInvocationType(
+      DexMethod newMethod, DexMethod originalMethod, InvokeType type) {
     return type;
   }
 
@@ -277,9 +278,12 @@
    *
    * <p>Handle methods moved from interface to class or class to interface.
    */
-  public static Type mapVirtualInterfaceInvocationTypes(
-      DexDefinitionSupplier definitions, DexMethod newMethod, DexMethod originalMethod, Type type) {
-    if (type == Type.VIRTUAL || type == Type.INTERFACE) {
+  public static InvokeType mapVirtualInterfaceInvocationTypes(
+      DexDefinitionSupplier definitions,
+      DexMethod newMethod,
+      DexMethod originalMethod,
+      InvokeType type) {
+    if (type == InvokeType.VIRTUAL || type == InvokeType.INTERFACE) {
       // Get the invoke type of the actual definition.
       DexClass newTargetClass = definitions.definitionFor(newMethod.getHolderType());
       if (newTargetClass == null) {
@@ -287,12 +291,12 @@
       }
       DexClass originalTargetClass = definitions.definitionFor(originalMethod.getHolderType());
       if (originalTargetClass != null
-          && (originalTargetClass.isInterface() ^ (type == Type.INTERFACE))) {
+          && (originalTargetClass.isInterface() ^ (type == InvokeType.INTERFACE))) {
         // The invoke was wrong to start with, so we keep it wrong. This is to ensure we get
         // the IncompatibleClassChangeError the original invoke would have triggered.
-        return newTargetClass.accessFlags.isInterface() ? Type.VIRTUAL : Type.INTERFACE;
+        return newTargetClass.accessFlags.isInterface() ? InvokeType.VIRTUAL : InvokeType.INTERFACE;
       }
-      return newTargetClass.accessFlags.isInterface() ? Type.INTERFACE : Type.VIRTUAL;
+      return newTargetClass.accessFlags.isInterface() ? InvokeType.INTERFACE : InvokeType.VIRTUAL;
     }
     return type;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/UseRegistry.java b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
index 0b066d6..f5a1aad 100644
--- a/src/main/java/com/android/tools/r8/graph/UseRegistry.java
+++ b/src/main/java/com/android/tools/r8/graph/UseRegistry.java
@@ -6,7 +6,7 @@
 import com.android.tools.r8.dex.code.CfOrDexInstanceFieldRead;
 import com.android.tools.r8.dex.code.CfOrDexInstruction;
 import com.android.tools.r8.dex.code.CfOrDexStaticFieldRead;
-import com.android.tools.r8.ir.code.Invoke;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.utils.TraversalContinuation;
 import java.util.ListIterator;
 
@@ -74,7 +74,7 @@
 
   public void registerInvokeSpecial(DexMethod method) {
     DexClassAndMethod context = getMethodContext();
-    Invoke.Type type = Invoke.Type.fromInvokeSpecial(method, context, appView, getCodeLens());
+    InvokeType type = InvokeType.fromInvokeSpecial(method, context, appView, getCodeLens());
     if (type.isDirect()) {
       registerInvokeDirect(method);
     } else {
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java
index d650b17..d4cb598 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java
@@ -6,7 +6,7 @@
 
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Value;
 import com.android.tools.r8.ir.code.ValueType;
@@ -64,7 +64,8 @@
             arguments.add(builder.getArgumentValues().get(i));
           }
 
-          builder.addInvoke(Type.DIRECT, typeConstructor, typeConstructor.proto, arguments, false);
+          builder.addInvoke(
+              InvokeType.DIRECT, typeConstructor, typeConstructor.proto, arguments, false);
         });
   }
 
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
index b8782e2..299c516 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
@@ -16,7 +16,7 @@
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.PrunedItems;
 import com.android.tools.r8.horizontalclassmerging.code.SyntheticInitializerConverter;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.profile.art.ArtProfileCompletenessChecker;
 import com.android.tools.r8.profile.art.rewriting.ArtProfileCollectionAdditions;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -233,7 +233,7 @@
                     horizontalClassMergerGraphLens.lookupMethod(
                         representative,
                         null,
-                        Type.VIRTUAL,
+                        InvokeType.VIRTUAL,
                         horizontalClassMergerGraphLens.getPrevious());
                 ProgramMethod mergedMethod =
                     asProgramMethodOrNull(appView.definitionFor(lookupResult.getReference()));
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
index 3d74f82..49d5674 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/inlining/SimpleInliningConstraintAnalysis.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionIterator;
 import com.android.tools.r8.ir.code.Value;
@@ -167,7 +168,7 @@
   }
 
   private SimpleInliningConstraint computeConstraintFromIfTest(
-      int argumentIndex, DexType argumentType, Value otherOperand, If.Type type) {
+      int argumentIndex, DexType argumentType, Value otherOperand, IfType type) {
     boolean isZeroTest = otherOperand == null;
     switch (type) {
       case EQ:
diff --git a/src/main/java/com/android/tools/r8/ir/code/If.java b/src/main/java/com/android/tools/r8/ir/code/If.java
index 1cd76a4..a6a436e 100644
--- a/src/main/java/com/android/tools/r8/ir/code/If.java
+++ b/src/main/java/com/android/tools/r8/ir/code/If.java
@@ -21,62 +21,20 @@
 
 public class If extends JumpInstruction {
 
-  public enum Type {
-    EQ, GE, GT, LE, LT, NE;
-
-    // Returns the comparison type if the operands are swapped.
-    public Type forSwappedOperands() {
-      switch (this) {
-        case EQ:
-        case NE:
-          return this;
-        case GE:
-          return Type.LE;
-        case GT:
-          return Type.LT;
-        case LE:
-          return Type.GE;
-        case LT:
-          return Type.GT;
-        default:
-          throw new Unreachable("Unknown if condition type.");
-      }
-    }
-
-    public Type inverted() {
-      switch (this) {
-        case EQ:
-          return Type.NE;
-        case GE:
-          return Type.LT;
-        case GT:
-          return Type.LE;
-        case LE:
-          return Type.GT;
-        case LT:
-          return Type.GE;
-        case NE:
-          return Type.EQ;
-        default:
-          throw new Unreachable("Unknown if condition type.");
-      }
-    }
-  }
-
-  private static boolean verifyTypeCompatible(TypeElement valueType, If.Type ifType) {
+  private static boolean verifyTypeCompatible(TypeElement valueType, IfType ifType) {
     return valueType.isInt()
-        || (valueType.isFloat() && (ifType == Type.EQ || ifType == Type.NE))
-        || (valueType.isReferenceType() && (ifType == Type.EQ || ifType == Type.NE));
+        || (valueType.isFloat() && (ifType == IfType.EQ || ifType == IfType.NE))
+        || (valueType.isReferenceType() && (ifType == IfType.EQ || ifType == IfType.NE));
   }
 
-  private Type type;
+  private IfType type;
 
-  public If(Type type, Value value) {
+  public If(IfType type, Value value) {
     super(value);
     this.type = type;
   }
 
-  public If(Type type, List<Value> values) {
+  public If(IfType type, List<Value> values) {
     super(values);
     this.type = type;
   }
@@ -112,7 +70,7 @@
     return inValues.get(1);
   }
 
-  public Type getType() {
+  public IfType getType() {
     return type;
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/code/IfType.java b/src/main/java/com/android/tools/r8/ir/code/IfType.java
new file mode 100644
index 0000000..926eac3
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/code/IfType.java
@@ -0,0 +1,53 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.ir.code;
+
+import com.android.tools.r8.errors.Unreachable;
+
+public enum IfType {
+  EQ,
+  GE,
+  GT,
+  LE,
+  LT,
+  NE;
+
+  // Returns the comparison type if the operands are swapped.
+  public IfType forSwappedOperands() {
+    switch (this) {
+      case EQ:
+      case NE:
+        return this;
+      case GE:
+        return IfType.LE;
+      case GT:
+        return IfType.LT;
+      case LE:
+        return IfType.GE;
+      case LT:
+        return IfType.GT;
+      default:
+        throw new Unreachable("Unknown if condition type.");
+    }
+  }
+
+  public IfType inverted() {
+    switch (this) {
+      case EQ:
+        return IfType.NE;
+      case GE:
+        return IfType.LT;
+      case GT:
+        return IfType.LE;
+      case LE:
+        return IfType.GT;
+      case LT:
+        return IfType.GE;
+      case NE:
+        return IfType.EQ;
+      default:
+        throw new Unreachable("Unknown if condition type.");
+    }
+  }
+}
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 fb5d930..01f645b 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
@@ -5,240 +5,26 @@
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.dex.code.DexInstruction;
-import com.android.tools.r8.dex.code.DexInvokeCustom;
-import com.android.tools.r8.dex.code.DexInvokeCustomRange;
-import com.android.tools.r8.dex.code.DexInvokeDirect;
-import com.android.tools.r8.dex.code.DexInvokeDirectRange;
-import com.android.tools.r8.dex.code.DexInvokeInterface;
-import com.android.tools.r8.dex.code.DexInvokeInterfaceRange;
-import com.android.tools.r8.dex.code.DexInvokePolymorphic;
-import com.android.tools.r8.dex.code.DexInvokePolymorphicRange;
-import com.android.tools.r8.dex.code.DexInvokeStatic;
-import com.android.tools.r8.dex.code.DexInvokeStaticRange;
-import com.android.tools.r8.dex.code.DexInvokeSuper;
-import com.android.tools.r8.dex.code.DexInvokeSuperRange;
-import com.android.tools.r8.dex.code.DexInvokeVirtual;
-import com.android.tools.r8.dex.code.DexInvokeVirtualRange;
 import com.android.tools.r8.dex.code.DexMoveResult;
 import com.android.tools.r8.dex.code.DexMoveResultObject;
 import com.android.tools.r8.dex.code.DexMoveResultWide;
-import com.android.tools.r8.dex.code.DexNewArray;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexClassAndMethod;
-import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexItem;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexMethodHandle.MethodHandleType;
 import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
 import com.android.tools.r8.ir.analysis.type.Nullability;
 import com.android.tools.r8.ir.analysis.type.TypeElement;
 import com.android.tools.r8.ir.conversion.DexBuilder;
 import com.android.tools.r8.utils.BooleanUtils;
 import java.util.List;
 import java.util.Set;
-import org.objectweb.asm.Opcodes;
 
 public abstract class Invoke extends Instruction {
 
-  private static final int NO_SUCH_DEX_INSTRUCTION = -1;
-
-  public enum Type {
-    DIRECT(DexInvokeDirect.OPCODE, DexInvokeDirectRange.OPCODE),
-    INTERFACE(DexInvokeInterface.OPCODE, DexInvokeInterfaceRange.OPCODE),
-    STATIC(DexInvokeStatic.OPCODE, DexInvokeStaticRange.OPCODE),
-    SUPER(DexInvokeSuper.OPCODE, DexInvokeSuperRange.OPCODE),
-    VIRTUAL(DexInvokeVirtual.OPCODE, DexInvokeVirtualRange.OPCODE),
-    NEW_ARRAY(DexNewArray.OPCODE, NO_SUCH_DEX_INSTRUCTION),
-    MULTI_NEW_ARRAY(NO_SUCH_DEX_INSTRUCTION, NO_SUCH_DEX_INSTRUCTION),
-    CUSTOM(DexInvokeCustom.OPCODE, DexInvokeCustomRange.OPCODE),
-    POLYMORPHIC(DexInvokePolymorphic.OPCODE, DexInvokePolymorphicRange.OPCODE);
-
-    private final int dexOpcode;
-    private final int dexOpcodeRange;
-
-    Type(int dexOpcode, int dexOpcodeRange) {
-      this.dexOpcode = dexOpcode;
-      this.dexOpcodeRange = dexOpcodeRange;
-    }
-
-    public static Type fromCfOpcode(
-        int opcode, DexMethod invokedMethod, DexClassAndMethod context, AppView<?> appView) {
-      return fromCfOpcode(opcode, invokedMethod, context, appView, appView.codeLens());
-    }
-
-    public static Type fromCfOpcode(
-        int opcode,
-        DexMethod invokedMethod,
-        DexClassAndMethod context,
-        AppView<?> appView,
-        GraphLens codeLens) {
-      switch (opcode) {
-        case Opcodes.INVOKEINTERFACE:
-          return Type.INTERFACE;
-        case Opcodes.INVOKESPECIAL:
-          return fromInvokeSpecial(invokedMethod, context, appView, codeLens);
-        case Opcodes.INVOKESTATIC:
-          return Type.STATIC;
-        case Opcodes.INVOKEVIRTUAL:
-          return appView.dexItemFactory().polymorphicMethods.isPolymorphicInvoke(invokedMethod)
-                  && !appView.options().shouldDesugarVarHandle()
-              ? Type.POLYMORPHIC
-              : Type.VIRTUAL;
-        default:
-          throw new Unreachable("unknown CfInvoke opcode " + opcode);
-      }
-    }
-
-    public static Type fromInvokeSpecial(
-        DexMethod invokedMethod,
-        DexClassAndMethod context,
-        AppView<?> appView,
-        GraphLens codeLens) {
-      if (invokedMethod.isInstanceInitializer(appView.dexItemFactory())) {
-        return Type.DIRECT;
-      }
-
-      GraphLens graphLens = appView.graphLens();
-      DexMethod originalContext =
-          graphLens.getOriginalMethodSignature(context.getReference(), codeLens);
-      if (invokedMethod.getHolderType() != originalContext.getHolderType()) {
-        if (appView.options().isGeneratingDex()
-            && appView.options().canUseNestBasedAccess()
-            && context.getHolder().isInANest()) {
-          DexClass holderType = appView.definitionFor(invokedMethod.getHolderType());
-          if (holderType != null
-              && holderType.isInANest()
-              && holderType.isInSameNest(context.getHolder())) {
-            return Type.DIRECT;
-          }
-        }
-        return Type.SUPER;
-      }
-
-      MethodLookupResult lookupResult =
-          graphLens.lookupMethod(invokedMethod, context.getReference(), Type.DIRECT);
-      if (lookupResult.getType().isStatic()) {
-        // This method has been staticized. The original invoke-type is DIRECT.
-        return Type.DIRECT;
-      }
-      if (lookupResult.getType().isVirtual()) {
-        // This method has been publicized. The original invoke-type is DIRECT.
-        return Type.DIRECT;
-      }
-
-      DexEncodedMethod definition = context.getHolder().lookupMethod(lookupResult.getReference());
-      if (definition == null) {
-        return Type.SUPER;
-      }
-
-      // If the definition was moved to the current context from a super class due to vertical class
-      // merging, then this used to be an invoke-super.
-      DexType originalHolderOfDefinition =
-          graphLens.getOriginalMethodSignature(definition.getReference(), codeLens).getHolderType();
-      if (originalHolderOfDefinition != originalContext.getHolderType()) {
-        return Type.SUPER;
-      }
-
-      boolean originalContextIsInterface =
-          context.getHolder().isInterface()
-              || (appView.hasVerticallyMergedClasses()
-                  && appView
-                      .verticallyMergedClasses()
-                      .hasInterfaceBeenMergedIntoSubtype(originalContext.getHolderType()));
-      if (originalContextIsInterface) {
-        // On interfaces invoke-special should be mapped to invoke-super if the invoke-special
-        // instruction is used to target a default interface method.
-        if (definition.belongsToVirtualPool()) {
-          return Type.SUPER;
-        }
-      } else {
-        // Due to desugaring of invoke-special instructions that target virtual methods, this should
-        // never target a virtual method.
-        assert definition.isPrivate() || lookupResult.getType().isVirtual();
-      }
-
-      return Type.DIRECT;
-    }
-
-    public int getCfOpcode() {
-      switch (this) {
-        case DIRECT:
-          return Opcodes.INVOKESPECIAL;
-        case INTERFACE:
-          return Opcodes.INVOKEINTERFACE;
-        case POLYMORPHIC:
-          return Opcodes.INVOKEVIRTUAL;
-        case STATIC:
-          return Opcodes.INVOKESTATIC;
-        case SUPER:
-          return Opcodes.INVOKESPECIAL;
-        case VIRTUAL:
-          return Opcodes.INVOKEVIRTUAL;
-        case NEW_ARRAY:
-        case MULTI_NEW_ARRAY:
-        default:
-          throw new Unreachable();
-      }
-    }
-
-    public int getDexOpcode() {
-      assert dexOpcode >= 0;
-      return dexOpcode;
-    }
-
-    public int getDexOpcodeRange() {
-      assert dexOpcodeRange >= 0;
-      return dexOpcodeRange;
-    }
-
-    public boolean isDirect() {
-      return this == DIRECT;
-    }
-
-    public boolean isInterface() {
-      return this == INTERFACE;
-    }
-
-    public boolean isStatic() {
-      return this == STATIC;
-    }
-
-    public boolean isSuper() {
-      return this == SUPER;
-    }
-
-    public boolean isVirtual() {
-      return this == VIRTUAL;
-    }
-
-    public MethodHandleType toMethodHandle(DexMethod targetMethod) {
-      switch (this) {
-        case STATIC:
-          return MethodHandleType.INVOKE_STATIC;
-        case VIRTUAL:
-          return MethodHandleType.INVOKE_INSTANCE;
-        case DIRECT:
-          if (targetMethod.name.toString().equals("<init>")) {
-            return MethodHandleType.INVOKE_CONSTRUCTOR;
-          } else {
-            return MethodHandleType.INVOKE_DIRECT;
-          }
-        case INTERFACE:
-          return MethodHandleType.INVOKE_INTERFACE;
-        case SUPER:
-          return MethodHandleType.INVOKE_SUPER;
-        default:
-          throw new Unreachable(
-              "Conversion to method handle with unexpected invoke type: " + this);
-      }
-    }
-  }
+  static final int NO_SUCH_DEX_INSTRUCTION = -1;
 
   protected Invoke(Value result, List<Value> arguments) {
     super(result, arguments);
@@ -246,12 +32,17 @@
 
   @Deprecated
   public static Invoke create(
-      Type type, DexItem target, DexProto proto, Value result, List<Value> arguments) {
+      InvokeType type, DexItem target, DexProto proto, Value result, List<Value> arguments) {
     return create(type, target, proto, result, arguments, false);
   }
 
   public static Invoke create(
-      Type type, DexItem target, DexProto proto, Value result, List<Value> arguments, boolean itf) {
+      InvokeType type,
+      DexItem target,
+      DexProto proto,
+      Value result,
+      List<Value> arguments,
+      boolean itf) {
     switch (type) {
       case DIRECT:
         return new InvokeDirect((DexMethod) target, result, arguments, itf);
@@ -275,7 +66,7 @@
     throw new Unreachable("Unknown invoke type: " + type);
   }
 
-  abstract public Type getType();
+  public abstract InvokeType getType();
 
   abstract public DexType getReturnType();
 
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 75a13c9..4fa5742 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
@@ -111,8 +111,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.CUSTOM;
+  public InvokeType getType() {
+    return InvokeType.CUSTOM;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java b/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
index 14fdd11..e200a72 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeDirect.java
@@ -69,8 +69,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.DIRECT;
+  public InvokeType getType() {
+    return InvokeType.DIRECT;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeInterface.java b/src/main/java/com/android/tools/r8/ir/code/InvokeInterface.java
index 0f0deab..94ba6c4 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeInterface.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeInterface.java
@@ -51,8 +51,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.INTERFACE;
+  public InvokeType getType() {
+    return InvokeType.INTERFACE;
   }
 
   @Override
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 ec23162..7f5c809 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
@@ -51,7 +51,7 @@
   }
 
   public static InvokeMethod create(
-      Type type, DexMethod target, Value result, List<Value> arguments, boolean itf) {
+      InvokeType type, DexMethod target, Value result, List<Value> arguments, boolean itf) {
     switch (type) {
       case DIRECT:
         return new InvokeDirect(target, result, arguments, itf);
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
index de12658..47fc4f9 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
@@ -54,8 +54,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.MULTI_NEW_ARRAY;
+  public InvokeType getType() {
+    return InvokeType.MULTI_NEW_ARRAY;
   }
 
   public DexType getArrayType() {
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 f0715b5..52d38b3 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
@@ -57,8 +57,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.NEW_ARRAY;
+  public InvokeType getType() {
+    return InvokeType.NEW_ARRAY;
   }
 
   @Override
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 c09c441..08b3ab8 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
@@ -58,8 +58,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.POLYMORPHIC;
+  public InvokeType getType() {
+    return InvokeType.POLYMORPHIC;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java b/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
index ecc7327..1bf7eb7 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeStatic.java
@@ -66,8 +66,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.STATIC;
+  public InvokeType getType() {
+    return InvokeType.STATIC;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java b/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
index ae47eb6..0b7dce8 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
@@ -50,8 +50,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.SUPER;
+  public InvokeType getType() {
+    return InvokeType.SUPER;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeType.java b/src/main/java/com/android/tools/r8/ir/code/InvokeType.java
new file mode 100644
index 0000000..214b6db
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeType.java
@@ -0,0 +1,219 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.ir.code;
+
+import com.android.tools.r8.dex.code.DexInvokeCustom;
+import com.android.tools.r8.dex.code.DexInvokeCustomRange;
+import com.android.tools.r8.dex.code.DexInvokeDirect;
+import com.android.tools.r8.dex.code.DexInvokeDirectRange;
+import com.android.tools.r8.dex.code.DexInvokeInterface;
+import com.android.tools.r8.dex.code.DexInvokeInterfaceRange;
+import com.android.tools.r8.dex.code.DexInvokePolymorphic;
+import com.android.tools.r8.dex.code.DexInvokePolymorphicRange;
+import com.android.tools.r8.dex.code.DexInvokeStatic;
+import com.android.tools.r8.dex.code.DexInvokeStaticRange;
+import com.android.tools.r8.dex.code.DexInvokeSuper;
+import com.android.tools.r8.dex.code.DexInvokeSuperRange;
+import com.android.tools.r8.dex.code.DexInvokeVirtual;
+import com.android.tools.r8.dex.code.DexInvokeVirtualRange;
+import com.android.tools.r8.dex.code.DexNewArray;
+import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexClassAndMethod;
+import com.android.tools.r8.graph.DexEncodedMethod;
+import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexMethodHandle.MethodHandleType;
+import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.GraphLens;
+import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
+import org.objectweb.asm.Opcodes;
+
+public enum InvokeType {
+  DIRECT(DexInvokeDirect.OPCODE, DexInvokeDirectRange.OPCODE),
+  INTERFACE(DexInvokeInterface.OPCODE, DexInvokeInterfaceRange.OPCODE),
+  STATIC(DexInvokeStatic.OPCODE, DexInvokeStaticRange.OPCODE),
+  SUPER(DexInvokeSuper.OPCODE, DexInvokeSuperRange.OPCODE),
+  VIRTUAL(DexInvokeVirtual.OPCODE, DexInvokeVirtualRange.OPCODE),
+  NEW_ARRAY(DexNewArray.OPCODE, Invoke.NO_SUCH_DEX_INSTRUCTION),
+  MULTI_NEW_ARRAY(Invoke.NO_SUCH_DEX_INSTRUCTION, Invoke.NO_SUCH_DEX_INSTRUCTION),
+  CUSTOM(DexInvokeCustom.OPCODE, DexInvokeCustomRange.OPCODE),
+  POLYMORPHIC(DexInvokePolymorphic.OPCODE, DexInvokePolymorphicRange.OPCODE);
+
+  private final int dexOpcode;
+  private final int dexOpcodeRange;
+
+  InvokeType(int dexOpcode, int dexOpcodeRange) {
+    this.dexOpcode = dexOpcode;
+    this.dexOpcodeRange = dexOpcodeRange;
+  }
+
+  public static InvokeType fromCfOpcode(
+      int opcode, DexMethod invokedMethod, DexClassAndMethod context, AppView<?> appView) {
+    return fromCfOpcode(opcode, invokedMethod, context, appView, appView.codeLens());
+  }
+
+  public static InvokeType fromCfOpcode(
+      int opcode,
+      DexMethod invokedMethod,
+      DexClassAndMethod context,
+      AppView<?> appView,
+      GraphLens codeLens) {
+    switch (opcode) {
+      case org.objectweb.asm.Opcodes.INVOKEINTERFACE:
+        return InvokeType.INTERFACE;
+      case org.objectweb.asm.Opcodes.INVOKESPECIAL:
+        return fromInvokeSpecial(invokedMethod, context, appView, codeLens);
+      case org.objectweb.asm.Opcodes.INVOKESTATIC:
+        return InvokeType.STATIC;
+      case org.objectweb.asm.Opcodes.INVOKEVIRTUAL:
+        return appView.dexItemFactory().polymorphicMethods.isPolymorphicInvoke(invokedMethod)
+                && !appView.options().shouldDesugarVarHandle()
+            ? InvokeType.POLYMORPHIC
+            : InvokeType.VIRTUAL;
+      default:
+        throw new Unreachable("unknown CfInvoke opcode " + opcode);
+    }
+  }
+
+  public static InvokeType fromInvokeSpecial(
+      DexMethod invokedMethod, DexClassAndMethod context, AppView<?> appView, GraphLens codeLens) {
+    if (invokedMethod.isInstanceInitializer(appView.dexItemFactory())) {
+      return InvokeType.DIRECT;
+    }
+
+    GraphLens graphLens = appView.graphLens();
+    DexMethod originalContext =
+        graphLens.getOriginalMethodSignature(context.getReference(), codeLens);
+    if (invokedMethod.getHolderType() != originalContext.getHolderType()) {
+      if (appView.options().isGeneratingDex()
+          && appView.options().canUseNestBasedAccess()
+          && context.getHolder().isInANest()) {
+        DexClass holderType = appView.definitionFor(invokedMethod.getHolderType());
+        if (holderType != null
+            && holderType.isInANest()
+            && holderType.isInSameNest(context.getHolder())) {
+          return InvokeType.DIRECT;
+        }
+      }
+      return InvokeType.SUPER;
+    }
+
+    MethodLookupResult lookupResult =
+        graphLens.lookupMethod(invokedMethod, context.getReference(), InvokeType.DIRECT);
+    if (lookupResult.getType().isStatic()) {
+      // This method has been staticized. The original invoke-type is DIRECT.
+      return InvokeType.DIRECT;
+    }
+    if (lookupResult.getType().isVirtual()) {
+      // This method has been publicized. The original invoke-type is DIRECT.
+      return InvokeType.DIRECT;
+    }
+
+    DexEncodedMethod definition = context.getHolder().lookupMethod(lookupResult.getReference());
+    if (definition == null) {
+      return InvokeType.SUPER;
+    }
+
+    // If the definition was moved to the current context from a super class due to vertical class
+    // merging, then this used to be an invoke-super.
+    DexType originalHolderOfDefinition =
+        graphLens.getOriginalMethodSignature(definition.getReference(), codeLens).getHolderType();
+    if (originalHolderOfDefinition != originalContext.getHolderType()) {
+      return InvokeType.SUPER;
+    }
+
+    boolean originalContextIsInterface =
+        context.getHolder().isInterface()
+            || (appView.hasVerticallyMergedClasses()
+                && appView
+                    .verticallyMergedClasses()
+                    .hasInterfaceBeenMergedIntoSubtype(originalContext.getHolderType()));
+    if (originalContextIsInterface) {
+      // On interfaces invoke-special should be mapped to invoke-super if the invoke-special
+      // instruction is used to target a default interface method.
+      if (definition.belongsToVirtualPool()) {
+        return InvokeType.SUPER;
+      }
+    } else {
+      // Due to desugaring of invoke-special instructions that target virtual methods, this should
+      // never target a virtual method.
+      assert definition.isPrivate() || lookupResult.getType().isVirtual();
+    }
+
+    return InvokeType.DIRECT;
+  }
+
+  public int getCfOpcode() {
+    switch (this) {
+      case DIRECT:
+        return org.objectweb.asm.Opcodes.INVOKESPECIAL;
+      case INTERFACE:
+        return org.objectweb.asm.Opcodes.INVOKEINTERFACE;
+      case POLYMORPHIC:
+        return org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+      case STATIC:
+        return org.objectweb.asm.Opcodes.INVOKESTATIC;
+      case SUPER:
+        return org.objectweb.asm.Opcodes.INVOKESPECIAL;
+      case VIRTUAL:
+        return Opcodes.INVOKEVIRTUAL;
+      case NEW_ARRAY:
+      case MULTI_NEW_ARRAY:
+      default:
+        throw new Unreachable();
+    }
+  }
+
+  public int getDexOpcode() {
+    assert dexOpcode >= 0;
+    return dexOpcode;
+  }
+
+  public int getDexOpcodeRange() {
+    assert dexOpcodeRange >= 0;
+    return dexOpcodeRange;
+  }
+
+  public boolean isDirect() {
+    return this == DIRECT;
+  }
+
+  public boolean isInterface() {
+    return this == INTERFACE;
+  }
+
+  public boolean isStatic() {
+    return this == STATIC;
+  }
+
+  public boolean isSuper() {
+    return this == SUPER;
+  }
+
+  public boolean isVirtual() {
+    return this == VIRTUAL;
+  }
+
+  public MethodHandleType toMethodHandle(DexMethod targetMethod) {
+    switch (this) {
+      case STATIC:
+        return MethodHandleType.INVOKE_STATIC;
+      case VIRTUAL:
+        return MethodHandleType.INVOKE_INSTANCE;
+      case DIRECT:
+        if (targetMethod.name.toString().equals("<init>")) {
+          return MethodHandleType.INVOKE_CONSTRUCTOR;
+        } else {
+          return MethodHandleType.INVOKE_DIRECT;
+        }
+      case INTERFACE:
+        return MethodHandleType.INVOKE_INTERFACE;
+      case SUPER:
+        return MethodHandleType.INVOKE_SUPER;
+      default:
+        throw new Unreachable("Conversion to method handle with unexpected invoke type: " + this);
+    }
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java b/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
index 3cee2ff..8d77e02 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
@@ -57,8 +57,8 @@
   }
 
   @Override
-  public Type getType() {
-    return Type.VIRTUAL;
+  public InvokeType getType() {
+    return InvokeType.VIRTUAL;
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Monitor.java b/src/main/java/com/android/tools/r8/ir/code/Monitor.java
index 1e00e9b..3f5727b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Monitor.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Monitor.java
@@ -20,13 +20,9 @@
 
 public class Monitor extends Instruction {
 
-  public enum Type {
-    ENTER, EXIT
-  }
+  private final MonitorType type;
 
-  private final Type type;
-
-  public Monitor(Type type, Value object) {
+  public Monitor(MonitorType type, Value object) {
     super(null, object);
     this.type = type;
   }
@@ -46,11 +42,11 @@
   }
 
   public boolean isEnter() {
-    return type == Type.ENTER;
+    return type == MonitorType.ENTER;
   }
 
   public boolean isExit() {
-    return type == Type.EXIT;
+    return type == MonitorType.EXIT;
   }
 
   @Override
@@ -64,7 +60,7 @@
     if (object > maxInValueRegister()) {
       object = builder.allocatedRegister(object(), getNumber());
     }
-    if (type == Type.ENTER) {
+    if (type == MonitorType.ENTER) {
       builder.add(this, new DexMonitorEnter(object));
     } else {
       builder.add(this, new DexMonitorExit(object));
diff --git a/src/main/java/com/android/tools/r8/ir/code/MonitorType.java b/src/main/java/com/android/tools/r8/ir/code/MonitorType.java
new file mode 100644
index 0000000..5e6fa95
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/ir/code/MonitorType.java
@@ -0,0 +1,9 @@
+// Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.ir.code;
+
+public enum MonitorType {
+  ENTER,
+  EXIT
+}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index 60d5807..602effc 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -33,6 +33,7 @@
 import com.android.tools.r8.ir.code.CanonicalPositions;
 import com.android.tools.r8.ir.code.CatchHandlers;
 import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.Phi.RegisterReadType;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.ValueType;
@@ -444,7 +445,7 @@
       monitorRegister = state.read(0).register;
     }
     // Build the monitor enter and save it for when generating exits later.
-    monitorEnter = builder.addMonitor(Monitor.Type.ENTER, monitorRegister);
+    monitorEnter = builder.addMonitor(MonitorType.ENTER, monitorRegister);
     currentlyGeneratingMethodSynchronization = false;
   }
 
@@ -452,7 +453,7 @@
     assert needsGeneratedMethodSynchronization;
     currentlyGeneratingMethodSynchronization = true;
     state.setPosition(getCanonicalDebugPositionAtOffset(EXCEPTIONAL_SYNC_EXIT_OFFSET));
-    builder.add(new Monitor(Monitor.Type.EXIT, monitorEnter.inValues().get(0)));
+    builder.add(new Monitor(MonitorType.EXIT, monitorEnter.inValues().get(0)));
     builder.addThrow(getMoveExceptionRegister(0));
     currentlyGeneratingMethodSynchronization = false;
   }
@@ -461,7 +462,7 @@
   public void buildPostlude(IRBuilder builder) {
     if (needsGeneratedMethodSynchronization) {
       currentlyGeneratingMethodSynchronization = true;
-      builder.add(new Monitor(Monitor.Type.EXIT, monitorEnter.inValues().get(0)));
+      builder.add(new Monitor(MonitorType.EXIT, monitorEnter.inValues().get(0)));
       currentlyGeneratingMethodSynchronization = false;
     }
   }
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 a091553..a7aa00b 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
@@ -72,6 +72,7 @@
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ImpreciseMemberTypeInstruction;
 import com.android.tools.r8.ir.code.InitClass;
 import com.android.tools.r8.ir.code.InstanceGet;
@@ -81,11 +82,12 @@
 import com.android.tools.r8.ir.code.InstructionListIterator;
 import com.android.tools.r8.ir.code.IntSwitch;
 import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.Invoke.Type;
 import com.android.tools.r8.ir.code.InvokeCustom;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.JumpInstruction;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.MoveException;
 import com.android.tools.r8.ir.code.Mul;
 import com.android.tools.r8.ir.code.Neg;
@@ -1290,7 +1292,7 @@
     add(instruction);
   }
 
-  public Monitor addMonitor(Monitor.Type type, int monitor) {
+  public Monitor addMonitor(MonitorType type, int monitor) {
     Value in = readRegister(monitor, ValueTypeConstraint.OBJECT);
     Monitor monitorEnter = new Monitor(type, in);
     add(monitorEnter);
@@ -1404,8 +1406,13 @@
     closeCurrentBlock(instruction);
   }
 
-  public void addIf(If.Type type, ValueType operandType, int value1, int value2,
-      int trueTargetOffset, int falseTargetOffset) {
+  public void addIf(
+      IfType type,
+      ValueType operandType,
+      int value1,
+      int value2,
+      int trueTargetOffset,
+      int falseTargetOffset) {
     addIf(
         type,
         ValueTypeConstraint.fromValueType(operandType),
@@ -1416,7 +1423,7 @@
   }
 
   public void addIf(
-      If.Type type,
+      IfType type,
       ValueTypeConstraint operandConstraint,
       int value1,
       int value2,
@@ -1434,7 +1441,7 @@
   }
 
   public void addIfZero(
-      If.Type type, ValueType operandType, int value, int trueTargetOffset, int falseTargetOffset) {
+      IfType type, ValueType operandType, int value, int trueTargetOffset, int falseTargetOffset) {
     addIfZero(
         type,
         ValueTypeConstraint.fromValueType(operandType),
@@ -1444,7 +1451,7 @@
   }
 
   public void addIfZero(
-      If.Type type,
+      IfType type,
       ValueTypeConstraint operandConstraint,
       int value,
       int trueTargetOffset,
@@ -1498,8 +1505,8 @@
     add(new RecordFieldValues(fields, out, arguments));
   }
 
-  private boolean verifyRepresentablePolymorphicInvoke(Type type, DexItem item) {
-    if (type != Type.POLYMORPHIC) {
+  private boolean verifyRepresentablePolymorphicInvoke(InvokeType type, DexItem item) {
+    if (type != InvokeType.POLYMORPHIC) {
       return true;
     }
     assert item instanceof DexMethod;
@@ -1513,13 +1520,13 @@
   }
 
   public void addInvoke(
-      Type type, DexItem item, DexProto callSiteProto, List<Value> arguments, boolean itf) {
+      InvokeType type, DexItem item, DexProto callSiteProto, List<Value> arguments, boolean itf) {
     assert verifyRepresentablePolymorphicInvoke(type, item);
     add(Invoke.create(type, item, callSiteProto, null, arguments, itf));
   }
 
   public void addInvoke(
-      Type type,
+      InvokeType type,
       DexItem item,
       DexProto callSiteProto,
       List<ValueType> types,
@@ -1590,7 +1597,7 @@
   }
 
   public void addInvokeRegisters(
-      Invoke.Type type,
+      InvokeType type,
       DexMethod method,
       DexProto callSiteProto,
       int argumentRegisterCount,
@@ -1599,12 +1606,12 @@
     // but it is an upper bound on the number of arguments.
     List<Value> arguments = new ArrayList<>(argumentRegisterCount);
     int registerIndex = 0;
-    if (type != Invoke.Type.STATIC) {
+    if (type != InvokeType.STATIC) {
       arguments.add(readRegister(argumentRegisters[registerIndex], ValueTypeConstraint.OBJECT));
       registerIndex += ValueTypeConstraint.OBJECT.requiredRegisters();
     }
     DexString methodShorty;
-    if (type == Invoke.Type.POLYMORPHIC) {
+    if (type == InvokeType.POLYMORPHIC) {
       // The call site signature for invoke polymorphic must be take from call site and not from
       // the called method.
       methodShorty = callSiteProto.shorty;
@@ -1640,7 +1647,7 @@
       registerIndex += constraint.requiredRegisters();
     }
     checkInvokeArgumentRegisters(registerIndex, argumentCount);
-    addInvoke(Invoke.Type.NEW_ARRAY, type, null, arguments, false /* isInterface */);
+    addInvoke(InvokeType.NEW_ARRAY, type, null, arguments, false /* isInterface */);
   }
 
   public void addMultiNewArray(DexType type, int dest, int[] dimensions) {
@@ -1649,12 +1656,12 @@
     for (int dimension : dimensions) {
       arguments.add(readRegister(dimension, ValueTypeConstraint.INT));
     }
-    addInvoke(Invoke.Type.MULTI_NEW_ARRAY, type, null, arguments, false /* isInterface */);
+    addInvoke(InvokeType.MULTI_NEW_ARRAY, type, null, arguments, false /* isInterface */);
     addMoveResult(dest);
   }
 
   public void addInvokeRange(
-      Invoke.Type type,
+      InvokeType type,
       DexMethod method,
       DexProto callSiteProto,
       int argumentCount,
@@ -1663,12 +1670,12 @@
     // is an upper bound on the number of arguments.
     List<Value> arguments = new ArrayList<>(argumentCount);
     int register = firstArgumentRegister;
-    if (type != Invoke.Type.STATIC) {
+    if (type != InvokeType.STATIC) {
       arguments.add(readRegister(register, ValueTypeConstraint.OBJECT));
       register += ValueTypeConstraint.OBJECT.requiredRegisters();
     }
     DexString methodShorty;
-    if (type == Invoke.Type.POLYMORPHIC) {
+    if (type == InvokeType.POLYMORPHIC) {
       // The call site signature for invoke polymorphic must be take from call site and not from
       // the called method.
       methodShorty = callSiteProto.shorty;
@@ -1703,7 +1710,7 @@
     checkInvokeArgumentRegisters(register, firstArgumentRegister + argumentCount);
     // Note: We only call this register variant from DEX inputs where isInterface does not matter.
     assert appView.options().isGeneratingDex();
-    addInvoke(Invoke.Type.NEW_ARRAY, type, null, arguments, false /* isInterface */);
+    addInvoke(InvokeType.NEW_ARRAY, type, null, arguments, false /* isInterface */);
   }
 
   private void checkInvokeArgumentRegisters(int expected, int actual) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
index 173161f..80abf84 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -4,7 +4,7 @@
 package com.android.tools.r8.ir.conversion;
 
 import static com.android.tools.r8.graph.UseRegistry.MethodHandleUse.NOT_ARGUMENT_TO_LAMBDA_METAFACTORY;
-import static com.android.tools.r8.ir.code.Invoke.Type.VIRTUAL;
+import static com.android.tools.r8.ir.code.InvokeType.VIRTUAL;
 import static com.android.tools.r8.ir.code.Opcodes.ARGUMENT;
 import static com.android.tools.r8.ir.code.Opcodes.ASSUME;
 import static com.android.tools.r8.ir.code.Opcodes.CHECK_CAST;
@@ -89,6 +89,7 @@
 import com.android.tools.r8.ir.code.InvokeMultiNewArray;
 import com.android.tools.r8.ir.code.InvokeNewArray;
 import com.android.tools.r8.ir.code.InvokePolymorphic;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.MoveException;
 import com.android.tools.r8.ir.code.NewArrayEmpty;
 import com.android.tools.r8.ir.code.NewInstance;
@@ -374,7 +375,7 @@
                   graphLens.lookupMethod(
                       invokedMethod, method.getReference(), invoke.getType(), codeLens);
               DexMethod actualTarget = lensLookup.getReference();
-              Invoke.Type actualInvokeType = lensLookup.getType();
+              InvokeType actualInvokeType = lensLookup.getType();
               int numberOfArguments =
                   actualTarget.getNumberOfArguments(actualInvokeType.isStatic());
 
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java
index eb12093..aefb54d 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java
@@ -27,7 +27,7 @@
 import com.android.tools.r8.graph.GraphLens.MethodLookupResult;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.UseRegistry.MethodHandleUse;
-import com.android.tools.r8.ir.code.Invoke;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.desugar.LambdaDescriptor;
 import java.util.ArrayList;
 import java.util.List;
@@ -112,7 +112,7 @@
         LambdaDescriptor.getMainFunctionalInterfaceMethodReference(
             callSite, definitions.dexItemFactory());
     return graphLens
-        .lookupMethod(method, context.getReference(), Invoke.Type.INTERFACE, codeLens)
+        .lookupMethod(method, context.getReference(), InvokeType.INTERFACE, codeLens)
         .getReference()
         .getName();
   }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java
index a377238..f08253d 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.ir.code.Goto;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionIterator;
 import com.android.tools.r8.ir.code.IntSwitch;
@@ -432,7 +433,7 @@
       }
 
       private StringToIdMapping extendWithIf(StringToIdMapping toBeExtended, If theIf) {
-        if (theIf.getType() != If.Type.EQ && theIf.getType() != If.Type.NE) {
+        if (theIf.getType() != IfType.EQ && theIf.getType() != IfType.NE) {
           // Not an extension of `toBeExtended`.
           return toBeExtended;
         }
@@ -562,7 +563,7 @@
         if (theIf == null) {
           return false;
         }
-        if (theIf.getType() != If.Type.EQ && theIf.getType() != If.Type.NE) {
+        if (theIf.getType() != IfType.EQ && theIf.getType() != IfType.NE) {
           return false;
         }
 
@@ -713,8 +714,8 @@
 
       private IdToTargetMapping extendWithIf(
           IdToTargetMapping toBeExtended, If theIf, BasicBlock fallthroughBlock) {
-        If.Type type = theIf.getType();
-        if (type != If.Type.EQ && type != If.Type.NE) {
+        IfType type = theIf.getType();
+        if (type != IfType.EQ && type != IfType.NE) {
           // Not an extension of `toBeExtended`.
           return setFallthroughBlock(toBeExtended, fallthroughBlock);
         }
@@ -797,14 +798,14 @@
   static class Utils {
 
     static BasicBlock getTrueTarget(If theIf) {
-      assert theIf.getType() == If.Type.EQ || theIf.getType() == If.Type.NE;
-      return theIf.getType() == If.Type.EQ ? theIf.getTrueTarget() : theIf.fallthroughBlock();
+      assert theIf.getType() == IfType.EQ || theIf.getType() == IfType.NE;
+      return theIf.getType() == IfType.EQ ? theIf.getTrueTarget() : theIf.fallthroughBlock();
     }
 
     static BasicBlock fallthroughBlock(JumpInstruction exit) {
       if (exit.isIf()) {
         If theIf = exit.asIf();
-        return theIf.getType() == If.Type.EQ ? theIf.fallthroughBlock() : theIf.getTrueTarget();
+        return theIf.getType() == IfType.EQ ? theIf.fallthroughBlock() : theIf.getTrueTarget();
       }
       if (exit.isIntSwitch()) {
         return exit.asIntSwitch().fallthroughBlock();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java
index ab6e97d..8def4db 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java
@@ -18,7 +18,7 @@
 import com.android.tools.r8.ir.code.Goto;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionListIterator;
 import com.android.tools.r8.ir.code.IntSwitch;
@@ -227,7 +227,7 @@
                 code.createValue(PrimitiveTypeElement.getInt()),
                 ImmutableList.of(stringValue, constStringInstruction.outValue()));
         invokeInstruction.setPosition(position);
-        If ifInstruction = new If(If.Type.NE, invokeInstruction.outValue());
+        If ifInstruction = new If(IfType.NE, invokeInstruction.outValue());
         ifInstruction.setPosition(Position.none());
         BasicBlock targetBlock = entry.getValue();
         if (blocksTargetedByMultipleSwitchCases.contains(targetBlock)) {
@@ -458,7 +458,7 @@
 
           // Insert `if (equalsKey) goto <id-switch-block> else goto <continuation-block>`.
           instructionIterator.next();
-          instructionIterator.replaceCurrentInstruction(new If(Type.NE, equalsInvoke.outValue()));
+          instructionIterator.replaceCurrentInstruction(new If(IfType.NE, equalsInvoke.outValue()));
 
           current = continuationBlock;
         }
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 d9f8625..2c6e476 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
@@ -13,6 +13,7 @@
 import com.android.tools.r8.ir.code.BasicBlock;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ImpreciseMemberTypeInstruction;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.MemberType;
@@ -121,8 +122,8 @@
         if (instruction.isIf() && instruction.inValues().size() == 2) {
           If ifInstruction = instruction.asIf();
           assert !ifInstruction.isZeroTest();
-          If.Type type = ifInstruction.getType();
-          if (type == If.Type.EQ || type == If.Type.NE) {
+          IfType type = ifInstruction.getType();
+          if (type == IfType.EQ || type == IfType.NE) {
             merge(ifInstruction.inValues().get(0), ifInstruction.inValues().get(1));
           }
         }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
index 3fc7ad0..3c940a6 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
@@ -16,7 +16,7 @@
 import com.android.tools.r8.graph.MethodResolutionResult;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
 import java.util.Map;
@@ -67,18 +67,18 @@
     nodeFactory.apply(callee).addCallerConcurrently(currentMethod, likelySpuriousCallEdge);
   }
 
-  private void processInvoke(Invoke.Type originalType, DexMethod originalMethod) {
+  private void processInvoke(InvokeType originalType, DexMethod originalMethod) {
     ProgramMethod context = currentMethod.getProgramMethod();
     MethodLookupResult result =
         appView
             .graphLens()
             .lookupMethod(originalMethod, context.getReference(), originalType, getCodeLens());
     DexMethod method = result.getReference();
-    Invoke.Type type = result.getType();
-    if (type == Invoke.Type.INTERFACE || type == Invoke.Type.VIRTUAL) {
+    InvokeType type = result.getType();
+    if (type == InvokeType.INTERFACE || type == InvokeType.VIRTUAL) {
       // For virtual and interface calls add all potential targets that could be called.
       MethodResolutionResult resolutionResult =
-          appView.appInfo().resolveMethodLegacy(method, type == Invoke.Type.INTERFACE);
+          appView.appInfo().resolveMethodLegacy(method, type == InvokeType.INTERFACE);
       DexClassAndMethod target = resolutionResult.getResolutionPair();
       if (target != null) {
         processInvokeWithDynamicDispatch(type, target, context);
@@ -99,7 +99,7 @@
   }
 
   protected void processInvokeWithDynamicDispatch(
-      Invoke.Type type, DexClassAndMethod encodedTarget, ProgramMethod context) {
+      InvokeType type, DexClassAndMethod encodedTarget, ProgramMethod context) {
     DexMethod target = encodedTarget.getReference();
     DexClass clazz = encodedTarget.getHolder();
     if (!appView.options().testing.addCallEdgesForLibraryInvokes) {
@@ -109,7 +109,7 @@
       }
     }
 
-    boolean isInterface = type == Invoke.Type.INTERFACE;
+    boolean isInterface = type == InvokeType.INTERFACE;
     ProgramMethodSet possibleProgramTargets =
         possibleProgramTargetsCache.computeIfAbsent(
             target,
@@ -161,27 +161,27 @@
 
   @Override
   public void registerInvokeDirect(DexMethod method) {
-    processInvoke(Invoke.Type.DIRECT, method);
+    processInvoke(InvokeType.DIRECT, method);
   }
 
   @Override
   public void registerInvokeInterface(DexMethod method) {
-    processInvoke(Invoke.Type.INTERFACE, method);
+    processInvoke(InvokeType.INTERFACE, method);
   }
 
   @Override
   public void registerInvokeStatic(DexMethod method) {
-    processInvoke(Invoke.Type.STATIC, method);
+    processInvoke(InvokeType.STATIC, method);
   }
 
   @Override
   public void registerInvokeSuper(DexMethod method) {
-    processInvoke(Invoke.Type.SUPER, method);
+    processInvoke(InvokeType.SUPER, method);
   }
 
   @Override
   public void registerInvokeVirtual(DexMethod method) {
-    processInvoke(Invoke.Type.VIRTUAL, method);
+    processInvoke(InvokeType.VIRTUAL, method);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index f9d4355..8a9aa86 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -29,8 +29,7 @@
 import com.android.tools.r8.graph.MethodResolutionResult;
 import com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.desugar.lambda.ForcefullyMovedLambdaMethodConsumer;
 import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring;
 import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring.DesugarInvoke;
@@ -383,7 +382,7 @@
       if (resolution.isFailedResolution()) {
         return new InvalidLambdaImplTarget(
             implMethod,
-            Type.STATIC,
+            InvokeType.STATIC,
             appView.dexItemFactory().icceType,
             descriptor.implHandle.isInterface);
       }
@@ -536,12 +535,12 @@
   public abstract static class Target {
 
     final DexMethod callTarget;
-    final Invoke.Type invokeType;
+    final InvokeType invokeType;
     final boolean isInterface;
 
     private boolean hasEnsuredAccessibility;
 
-    Target(DexMethod callTarget, Type invokeType, boolean isInterface) {
+    Target(DexMethod callTarget, InvokeType invokeType, boolean isInterface) {
       assert callTarget != null;
       assert invokeType != null;
       this.callTarget = callTarget;
@@ -576,7 +575,7 @@
       return callTarget;
     }
 
-    public Type getInvokeType() {
+    public InvokeType getInvokeType() {
       return invokeType;
     }
 
@@ -586,7 +585,7 @@
   }
 
   public abstract static class D8SpecificTarget extends Target {
-    D8SpecificTarget(DexMethod callTarget, Type invokeType, boolean isInterface) {
+    D8SpecificTarget(DexMethod callTarget, InvokeType invokeType, boolean isInterface) {
       super(callTarget, invokeType, isInterface);
     }
   }
@@ -601,7 +600,7 @@
           descriptor.implHandle.isInterface);
     }
 
-    NoAccessorMethodTarget(DexMethod method, Type invokeType, boolean isInterface) {
+    NoAccessorMethodTarget(DexMethod method, InvokeType invokeType, boolean isInterface) {
       super(method, invokeType, isInterface);
     }
 
@@ -619,7 +618,7 @@
     final ProgramMethod target;
 
     StaticLambdaImplTarget(ProgramMethod target, boolean isInterface) {
-      super(target.getReference(), Invoke.Type.STATIC, isInterface);
+      super(target.getReference(), InvokeType.STATIC, isInterface);
       this.target = target;
     }
 
@@ -646,7 +645,7 @@
 
     InterfaceLambdaImplTarget(
         DexMethod implMethod, boolean isInterface, DexMethod staticMethod, AppView<?> appView) {
-      super(staticMethod, Type.STATIC, isInterface);
+      super(staticMethod, InvokeType.STATIC, isInterface);
       this.implMethod = implMethod;
       this.appView = appView;
     }
@@ -721,7 +720,7 @@
     final DexType exceptionType;
 
     public InvalidLambdaImplTarget(
-        DexMethod callTarget, Type invokeType, DexType exceptionType, boolean isInterface) {
+        DexMethod callTarget, InvokeType invokeType, DexType exceptionType, boolean isInterface) {
       super(callTarget, invokeType, isInterface);
       this.exceptionType = exceptionType;
     }
@@ -742,7 +741,7 @@
 
     InstanceLambdaImplTarget(
         DexMethod implMethod, boolean isInterface, DexMethod staticMethod, AppView<?> appView) {
-      super(staticMethod, Type.VIRTUAL, isInterface);
+      super(staticMethod, InvokeType.VIRTUAL, isInterface);
       this.implMethod = implMethod;
       this.appView = appView;
     }
@@ -838,7 +837,7 @@
         DexMethod accessorMethod,
         boolean accessorIsInterface,
         AppView<?> appView) {
-      super(accessorMethod, Invoke.Type.STATIC, accessorIsInterface);
+      super(accessorMethod, InvokeType.STATIC, accessorIsInterface);
       this.appView = appView;
       this.implMethod = implMethod;
       this.implMethodIsInterface = isInterface;
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 eb5a2eb..9be92a4 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
@@ -24,8 +24,7 @@
 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.code.Invoke;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.desugar.LambdaClass.InvalidLambdaImplTarget;
@@ -191,12 +190,12 @@
     // Only constructor call should use direct invoke type since super
     // and private methods require accessor methods.
     boolean constructorTarget = methodToCall.name == factory.constructorMethodName;
-    assert !constructorTarget || target.invokeType == Type.DIRECT;
+    assert !constructorTarget || target.invokeType == InvokeType.DIRECT;
 
     boolean targetWithReceiver =
-        target.invokeType == Invoke.Type.VIRTUAL
-            || target.invokeType == Invoke.Type.INTERFACE
-            || (target.invokeType == Type.DIRECT && !constructorTarget);
+        target.invokeType == InvokeType.VIRTUAL
+            || target.invokeType == InvokeType.INTERFACE
+            || (target.invokeType == InvokeType.DIRECT && !constructorTarget);
     List<DexType> implReceiverAndArgs = new ArrayList<>();
     if (targetWithReceiver) {
       implReceiverAndArgs.add(methodToCall.holder);
@@ -204,10 +203,10 @@
     implReceiverAndArgs.addAll(Lists.newArrayList(methodToCall.proto.parameters.values));
     DexType implReturnType = methodToCall.proto.returnType;
 
-    assert target.invokeType == Invoke.Type.STATIC
-        || target.invokeType == Invoke.Type.VIRTUAL
-        || target.invokeType == Invoke.Type.DIRECT
-        || target.invokeType == Invoke.Type.INTERFACE;
+    assert target.invokeType == InvokeType.STATIC
+        || target.invokeType == InvokeType.VIRTUAL
+        || target.invokeType == InvokeType.DIRECT
+        || target.invokeType == InvokeType.INTERFACE;
     assert checkSignatures(
         capturedTypes,
         enforcedParams,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java b/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java
index 48e5e20..99392e1 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java
@@ -43,7 +43,7 @@
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.ir.code.Cmp;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
@@ -252,7 +252,7 @@
                         factory.objectType),
                     factory.createString("compareAndSet")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfConstNumber(1, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -277,7 +277,7 @@
                     factory.createString("get")),
                 false),
             new CfLoad(ValueType.OBJECT, 2),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label0),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label0),
             label3,
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -325,7 +325,7 @@
                         factory.objectType),
                     factory.createString("compareAndSet")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfConstNumber(1, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -351,7 +351,7 @@
                     factory.createString("get")),
                 false),
             new CfLoad(ValueType.OBJECT, 2),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label0),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label0),
             label3,
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -393,7 +393,7 @@
                         factory.booleanType, factory.objectType, factory.objectType),
                     factory.createString("compareAndSet")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfConstNumber(1, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -416,7 +416,7 @@
                     factory.createString("get")),
                 false),
             new CfLoad(ValueType.OBJECT, 1),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label0),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label0),
             label3,
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -439,7 +439,7 @@
             label0,
             new CfLoad(ValueType.INT, 0),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label1),
+            new CfIfCmp(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(0, ValueType.INT),
             new CfGoto(label3),
             label1,
@@ -447,7 +447,7 @@
                 new Int2ObjectAVLTreeMap<>(
                     new int[] {0, 1}, new FrameType[] {FrameType.intType(), FrameType.intType()})),
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label3),
             label2,
@@ -478,7 +478,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfConstNumber(1231, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -615,7 +615,7 @@
             label2,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -656,7 +656,7 @@
                     })),
             new CfLoad(ValueType.INT, 4),
             new CfLoad(ValueType.INT, 5),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label12),
+            new CfIfCmp(IfType.GE, ValueType.INT, label12),
             label7,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 4),
@@ -682,7 +682,7 @@
             label9,
             new CfLoad(ValueType.INT, 6),
             new CfLoad(ValueType.INT, 7),
-            new CfIfCmp(If.Type.EQ, ValueType.INT, label11),
+            new CfIfCmp(IfType.EQ, ValueType.INT, label11),
             label10,
             new CfLoad(ValueType.INT, 6),
             new CfLoad(ValueType.INT, 7),
@@ -804,7 +804,7 @@
             label0,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.autoCloseableType),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
             new CfCheckCast(factory.autoCloseableType),
@@ -1037,7 +1037,7 @@
             new CfStore(ValueType.OBJECT, 2),
             label13,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label19),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label19),
             label14,
             new CfConstClass(factory.throwableType),
             new CfConstString(factory.createString("addSuppressed")),
@@ -1221,7 +1221,7 @@
                     })),
             new CfLoad(ValueType.INT, 4),
             new CfLoad(ValueType.INT, 3),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label5),
+            new CfIfCmp(IfType.GE, ValueType.INT, label5),
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.INT, 4),
             new CfArrayLoad(MemberType.OBJECT),
@@ -1372,7 +1372,7 @@
                     })),
             new CfLoad(ValueType.INT, 4),
             new CfLoad(ValueType.INT, 3),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label8),
+            new CfIfCmp(IfType.GE, ValueType.INT, label8),
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.INT, 4),
             new CfArrayLoad(MemberType.OBJECT),
@@ -1422,7 +1422,7 @@
                     factory.createProto(factory.objectType, factory.objectType, factory.objectType),
                     factory.createString("put")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label7),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label7),
             label6,
             new CfNew(factory.createType("Ljava/lang/IllegalArgumentException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -1559,7 +1559,7 @@
                     })),
             new CfLoad(ValueType.INT, 4),
             new CfLoad(ValueType.INT, 3),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label6),
+            new CfIfCmp(IfType.GE, ValueType.INT, label6),
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.INT, 4),
             new CfArrayLoad(MemberType.OBJECT),
@@ -1581,7 +1581,7 @@
                     factory.createProto(factory.booleanType, factory.objectType),
                     factory.createString("add")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label5),
+            new CfIf(IfType.NE, ValueType.INT, label5),
             label4,
             new CfNew(factory.createType("Ljava/lang/IllegalArgumentException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -1729,7 +1729,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("hasNext")),
                 true),
-            new CfIf(If.Type.EQ, ValueType.INT, label5),
+            new CfIf(IfType.EQ, ValueType.INT, label5),
             new CfLoad(ValueType.OBJECT, 2),
             new CfInvoke(
                 185,
@@ -1856,7 +1856,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("hasNext")),
                 true),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             new CfLoad(ValueType.OBJECT, 2),
             new CfInvoke(
                 185,
@@ -1999,7 +1999,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("hasNext")),
                 true),
-            new CfIf(If.Type.EQ, ValueType.INT, label5),
+            new CfIf(IfType.EQ, ValueType.INT, label5),
             new CfLoad(ValueType.OBJECT, 2),
             new CfInvoke(
                 185,
@@ -2191,7 +2191,7 @@
                     factory.createProto(factory.booleanType, factory.doubleType),
                     factory.createString("isInfinite")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfLoad(ValueType.DOUBLE, 0),
             new CfInvoke(
                 184,
@@ -2200,7 +2200,7 @@
                     factory.createProto(factory.booleanType, factory.doubleType),
                     factory.createString("isNaN")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -2240,7 +2240,7 @@
                     factory.createProto(factory.booleanType, factory.floatType),
                     factory.createString("isInfinite")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfLoad(ValueType.FLOAT, 0),
             new CfInvoke(
                 184,
@@ -2249,7 +2249,7 @@
                     factory.createProto(factory.booleanType, factory.floatType),
                     factory.createString("isNaN")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -2280,7 +2280,7 @@
             label0,
             new CfLoad(ValueType.INT, 0),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label1),
+            new CfIfCmp(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(0, ValueType.INT),
             new CfGoto(label3),
             label1,
@@ -2289,7 +2289,7 @@
                     new int[] {0, 1}, new FrameType[] {FrameType.intType(), FrameType.intType()})),
             new CfLoad(ValueType.INT, 0),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label2),
+            new CfIfCmp(IfType.GE, ValueType.INT, label2),
             new CfConstNumber(-1, ValueType.INT),
             new CfGoto(label3),
             label2,
@@ -2436,7 +2436,7 @@
             new CfLoad(ValueType.INT, 1),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.INT),
             new CfConstNumber(2, ValueType.INT),
-            new CfIfCmp(If.Type.LT, ValueType.INT, label4),
+            new CfIfCmp(IfType.LT, ValueType.INT, label4),
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
             label1,
@@ -2448,7 +2448,7 @@
                     factory.createString("charAt")),
                 true),
             new CfConstNumber(43, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label4),
+            new CfIfCmp(IfType.NE, ValueType.INT, label4),
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
             new CfConstNumber(1, ValueType.INT),
@@ -2469,7 +2469,7 @@
                     factory.createProto(factory.intType, factory.charType, factory.intType),
                     factory.createString("digit")),
                 false),
-            new CfIf(If.Type.LT, ValueType.INT, label4),
+            new CfIf(IfType.LT, ValueType.INT, label4),
             label3,
             new CfIinc(1, 1),
             label4,
@@ -2602,7 +2602,7 @@
                     factory.createString("length")),
                 false),
             new CfConstNumber(1, ValueType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label2),
+            new CfIfCmp(IfType.LE, ValueType.INT, label2),
             new CfLoad(ValueType.OBJECT, 0),
             new CfConstNumber(0, ValueType.INT),
             new CfInvoke(
@@ -2613,7 +2613,7 @@
                     factory.createString("charAt")),
                 false),
             new CfConstNumber(43, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label2),
+            new CfIfCmp(IfType.NE, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfConstNumber(1, ValueType.INT),
@@ -2648,7 +2648,7 @@
             new CfLogicalBinop(CfLogicalBinop.Opcode.And, NumericType.LONG),
             new CfLoad(ValueType.LONG, 2),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.EQ, ValueType.INT, label5),
+            new CfIf(IfType.EQ, ValueType.INT, label5),
             label4,
             new CfNew(factory.createType("Ljava/lang/NumberFormatException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -2904,7 +2904,7 @@
             new CfLoad(ValueType.LONG, 2),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GE, ValueType.INT, label6),
+            new CfIf(IfType.GE, ValueType.INT, label6),
             label1,
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(-9223372036854775808L, ValueType.LONG),
@@ -2919,7 +2919,7 @@
             new CfLoad(ValueType.LONG, 4),
             new CfLoad(ValueType.LONG, 6),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GE, ValueType.INT, label5),
+            new CfIf(IfType.GE, ValueType.INT, label5),
             label4,
             new CfConstNumber(0, ValueType.LONG),
             new CfReturn(ValueType.LONG),
@@ -2952,7 +2952,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label8),
+            new CfIf(IfType.LT, ValueType.INT, label8),
             label7,
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.LONG, 2),
@@ -2998,7 +2998,7 @@
             new CfLoad(ValueType.LONG, 8),
             new CfLoad(ValueType.LONG, 10),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label13),
+            new CfIf(IfType.LT, ValueType.INT, label13),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label14),
             label13,
@@ -3128,7 +3128,7 @@
             new CfLoad(ValueType.INT, 1),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.INT),
             new CfConstNumber(2, ValueType.INT),
-            new CfIfCmp(If.Type.LT, ValueType.INT, label4),
+            new CfIfCmp(IfType.LT, ValueType.INT, label4),
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
             label1,
@@ -3140,7 +3140,7 @@
                     factory.createString("charAt")),
                 true),
             new CfConstNumber(43, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label4),
+            new CfIfCmp(IfType.NE, ValueType.INT, label4),
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
             new CfConstNumber(1, ValueType.INT),
@@ -3161,7 +3161,7 @@
                     factory.createProto(factory.intType, factory.charType, factory.intType),
                     factory.createString("digit")),
                 false),
-            new CfIf(If.Type.LT, ValueType.INT, label4),
+            new CfIf(IfType.LT, ValueType.INT, label4),
             label3,
             new CfIinc(1, 1),
             label4,
@@ -3265,7 +3265,7 @@
             new CfStore(ValueType.INT, 4),
             label1,
             new CfLoad(ValueType.INT, 4),
-            new CfIf(If.Type.NE, ValueType.INT, label3),
+            new CfIf(IfType.NE, ValueType.INT, label3),
             label2,
             new CfNew(factory.createType("Ljava/lang/NumberFormatException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -3291,10 +3291,10 @@
                     })),
             new CfLoad(ValueType.INT, 3),
             new CfConstNumber(2, ValueType.INT),
-            new CfIfCmp(If.Type.LT, ValueType.INT, label4),
+            new CfIfCmp(IfType.LT, ValueType.INT, label4),
             new CfLoad(ValueType.INT, 3),
             new CfConstNumber(36, ValueType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label5),
+            new CfIfCmp(IfType.LE, ValueType.INT, label5),
             label4,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -3365,10 +3365,10 @@
                     factory.createString("charAt")),
                 true),
             new CfConstNumber(43, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label7),
+            new CfIfCmp(IfType.NE, ValueType.INT, label7),
             new CfLoad(ValueType.INT, 4),
             new CfConstNumber(1, ValueType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label7),
+            new CfIfCmp(IfType.LE, ValueType.INT, label7),
             new CfLoad(ValueType.INT, 1),
             new CfConstNumber(1, ValueType.INT),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Add, NumericType.INT),
@@ -3427,7 +3427,7 @@
                     })),
             new CfLoad(ValueType.INT, 10),
             new CfLoad(ValueType.INT, 2),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label20),
+            new CfIfCmp(IfType.GE, ValueType.INT, label20),
             label12,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 10),
@@ -3450,7 +3450,7 @@
             label13,
             new CfLoad(ValueType.INT, 11),
             new CfConstNumber(-1, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label15),
+            new CfIfCmp(IfType.NE, ValueType.INT, label15),
             label14,
             new CfNew(factory.createType("Ljava/lang/NumberFormatException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -3491,15 +3491,15 @@
             new CfLoad(ValueType.LONG, 8),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label17),
+            new CfIf(IfType.LT, ValueType.INT, label17),
             new CfLoad(ValueType.LONG, 8),
             new CfLoad(ValueType.LONG, 5),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GT, ValueType.INT, label17),
+            new CfIf(IfType.GT, ValueType.INT, label17),
             new CfLoad(ValueType.LONG, 8),
             new CfLoad(ValueType.LONG, 5),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label18),
+            new CfIf(IfType.NE, ValueType.INT, label18),
             new CfLoad(ValueType.INT, 11),
             new CfConstNumber(-1, ValueType.LONG),
             new CfLoad(ValueType.INT, 3),
@@ -3513,7 +3513,7 @@
                     factory.createString("remainderUnsigned")),
                 false),
             new CfNumberConversion(NumericType.LONG, NumericType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label18),
+            new CfIfCmp(IfType.LE, ValueType.INT, label18),
             label17,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -3675,7 +3675,7 @@
             new CfLoad(ValueType.LONG, 2),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GE, ValueType.INT, label6),
+            new CfIf(IfType.GE, ValueType.INT, label6),
             label1,
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(-9223372036854775808L, ValueType.LONG),
@@ -3690,7 +3690,7 @@
             new CfLoad(ValueType.LONG, 4),
             new CfLoad(ValueType.LONG, 6),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GE, ValueType.INT, label5),
+            new CfIf(IfType.GE, ValueType.INT, label5),
             label4,
             new CfLoad(ValueType.LONG, 0),
             new CfReturn(ValueType.LONG),
@@ -3725,7 +3725,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label8),
+            new CfIf(IfType.LT, ValueType.INT, label8),
             label7,
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.LONG, 2),
@@ -3771,7 +3771,7 @@
             new CfLoad(ValueType.LONG, 8),
             new CfLoad(ValueType.LONG, 10),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label13),
+            new CfIf(IfType.LT, ValueType.INT, label13),
             new CfLoad(ValueType.LONG, 2),
             new CfGoto(label14),
             label13,
@@ -3882,7 +3882,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfConstString(factory.createString("0")),
             new CfReturn(ValueType.OBJECT),
@@ -3896,7 +3896,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LE, ValueType.INT, label4),
+            new CfIf(IfType.LE, ValueType.INT, label4),
             label3,
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.INT, 2),
@@ -3917,10 +3917,10 @@
                     })),
             new CfLoad(ValueType.INT, 2),
             new CfConstNumber(2, ValueType.INT),
-            new CfIfCmp(If.Type.LT, ValueType.INT, label5),
+            new CfIfCmp(IfType.LT, ValueType.INT, label5),
             new CfLoad(ValueType.INT, 2),
             new CfConstNumber(36, ValueType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label6),
+            new CfIfCmp(IfType.LE, ValueType.INT, label6),
             label5,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -3950,7 +3950,7 @@
             new CfConstNumber(1, ValueType.INT),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.INT),
             new CfLogicalBinop(CfLogicalBinop.Opcode.And, NumericType.INT),
-            new CfIf(If.Type.NE, ValueType.INT, label15),
+            new CfIf(IfType.NE, ValueType.INT, label15),
             label9,
             new CfLoad(ValueType.INT, 2),
             new CfInvoke(
@@ -4004,7 +4004,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label11),
+            new CfIf(IfType.NE, ValueType.INT, label11),
             label14,
             new CfGoto(label25),
             label15,
@@ -4021,7 +4021,7 @@
             new CfLoad(ValueType.INT, 2),
             new CfConstNumber(1, ValueType.INT),
             new CfLogicalBinop(CfLogicalBinop.Opcode.And, NumericType.INT),
-            new CfIf(If.Type.NE, ValueType.INT, label18),
+            new CfIf(IfType.NE, ValueType.INT, label18),
             label16,
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(1, ValueType.INT),
@@ -4112,7 +4112,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LE, ValueType.INT, label25),
+            new CfIf(IfType.LE, ValueType.INT, label25),
             label23,
             new CfLoad(ValueType.OBJECT, 3),
             new CfIinc(4, -1),
@@ -4184,7 +4184,7 @@
             label0,
             new CfLoad(ValueType.INT, 0),
             new CfConstNumber(-2147483648, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label2),
+            new CfIfCmp(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -4227,7 +4227,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(-9223372036854775808L, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -4286,7 +4286,7 @@
             new CfLoad(ValueType.INT, 4),
             new CfNumberConversion(NumericType.INT, NumericType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label4),
+            new CfIf(IfType.NE, ValueType.INT, label4),
             label3,
             new CfLoad(ValueType.INT, 4),
             new CfReturn(ValueType.INT),
@@ -4342,7 +4342,7 @@
             new CfLogicalBinop(CfLogicalBinop.Opcode.Xor, NumericType.LONG),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GE, ValueType.INT, label2),
+            new CfIf(IfType.GE, ValueType.INT, label2),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label3),
             label2,
@@ -4376,7 +4376,7 @@
             new CfLogicalBinop(CfLogicalBinop.Opcode.Xor, NumericType.LONG),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label4),
+            new CfIf(IfType.LT, ValueType.INT, label4),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label5),
             label4,
@@ -4407,7 +4407,7 @@
                     }),
                 new ArrayDeque<>(Arrays.asList(FrameType.intType(), FrameType.intType()))),
             new CfLogicalBinop(CfLogicalBinop.Opcode.Or, NumericType.INT),
-            new CfIf(If.Type.EQ, ValueType.INT, label7),
+            new CfIf(IfType.EQ, ValueType.INT, label7),
             label6,
             new CfLoad(ValueType.LONG, 4),
             new CfReturn(ValueType.LONG),
@@ -4451,7 +4451,7 @@
             label0,
             new CfLoad(ValueType.INT, 0),
             new CfConstNumber(-2147483648, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label2),
+            new CfIfCmp(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -4489,7 +4489,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(-9223372036854775808L, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -4544,7 +4544,7 @@
             new CfStore(ValueType.INT, 3),
             label2,
             new CfLoad(ValueType.INT, 3),
-            new CfIf(If.Type.NE, ValueType.INT, label4),
+            new CfIf(IfType.NE, ValueType.INT, label4),
             label3,
             new CfLoad(ValueType.INT, 2),
             new CfReturn(ValueType.INT),
@@ -4568,7 +4568,7 @@
             new CfStore(ValueType.INT, 4),
             label5,
             new CfLoad(ValueType.INT, 4),
-            new CfIf(If.Type.GE, ValueType.INT, label6),
+            new CfIf(IfType.GE, ValueType.INT, label6),
             new CfLoad(ValueType.INT, 2),
             new CfConstNumber(1, ValueType.INT),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.INT),
@@ -4634,7 +4634,7 @@
             new CfLoad(ValueType.LONG, 6),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label4),
+            new CfIf(IfType.NE, ValueType.INT, label4),
             label3,
             new CfLoad(ValueType.LONG, 4),
             new CfReturn(ValueType.LONG),
@@ -4664,7 +4664,7 @@
             new CfLoad(ValueType.LONG, 8),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GE, ValueType.INT, label6),
+            new CfIf(IfType.GE, ValueType.INT, label6),
             new CfLoad(ValueType.LONG, 4),
             new CfConstNumber(1, ValueType.LONG),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.LONG),
@@ -4755,7 +4755,7 @@
             new CfStore(ValueType.INT, 2),
             label1,
             new CfLoad(ValueType.INT, 2),
-            new CfIf(If.Type.NE, ValueType.INT, label3),
+            new CfIf(IfType.NE, ValueType.INT, label3),
             label2,
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -4776,7 +4776,7 @@
             new CfStore(ValueType.INT, 3),
             label4,
             new CfLoad(ValueType.INT, 3),
-            new CfIf(If.Type.LE, ValueType.INT, label5),
+            new CfIf(IfType.LE, ValueType.INT, label5),
             new CfLoad(ValueType.INT, 2),
             new CfGoto(label6),
             label5,
@@ -4832,7 +4832,7 @@
             new CfLoad(ValueType.LONG, 4),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label3),
+            new CfIf(IfType.NE, ValueType.INT, label3),
             label2,
             new CfConstNumber(0, ValueType.LONG),
             new CfReturn(ValueType.LONG),
@@ -4860,7 +4860,7 @@
             new CfLoad(ValueType.LONG, 6),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LE, ValueType.INT, label5),
+            new CfIf(IfType.LE, ValueType.INT, label5),
             new CfLoad(ValueType.LONG, 4),
             new CfGoto(label6),
             label5,
@@ -4940,7 +4940,7 @@
             label0,
             new CfLoad(ValueType.INT, 0),
             new CfConstNumber(2147483647, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label2),
+            new CfIfCmp(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -4978,7 +4978,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(9223372036854775807L, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -5032,7 +5032,7 @@
             new CfLoad(ValueType.INT, 4),
             new CfNumberConversion(NumericType.INT, NumericType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label4),
+            new CfIf(IfType.NE, ValueType.INT, label4),
             label3,
             new CfLoad(ValueType.INT, 4),
             new CfReturn(ValueType.INT),
@@ -5133,7 +5133,7 @@
             label5,
             new CfLoad(ValueType.INT, 4),
             new CfConstNumber(65, ValueType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label7),
+            new CfIfCmp(IfType.LE, ValueType.INT, label7),
             label6,
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.LONG, 2),
@@ -5152,11 +5152,11 @@
                     })),
             new CfLoad(ValueType.INT, 4),
             new CfConstNumber(64, ValueType.INT),
-            new CfIfCmp(If.Type.LT, ValueType.INT, label15),
+            new CfIfCmp(IfType.LT, ValueType.INT, label15),
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label8),
+            new CfIf(IfType.LT, ValueType.INT, label8),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label9),
             label8,
@@ -5186,7 +5186,7 @@
             new CfLoad(ValueType.LONG, 2),
             new CfConstNumber(-9223372036854775808L, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label11),
             label10,
@@ -5215,7 +5215,7 @@
                     }),
                 new ArrayDeque<>(Arrays.asList(FrameType.intType(), FrameType.intType()))),
             new CfLogicalBinop(CfLogicalBinop.Opcode.Or, NumericType.INT),
-            new CfIf(If.Type.EQ, ValueType.INT, label15),
+            new CfIf(IfType.EQ, ValueType.INT, label15),
             label12,
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.LONG, 2),
@@ -5225,13 +5225,13 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.EQ, ValueType.INT, label14),
+            new CfIf(IfType.EQ, ValueType.INT, label14),
             new CfLoad(ValueType.LONG, 5),
             new CfLoad(ValueType.LONG, 0),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Div, NumericType.LONG),
             new CfLoad(ValueType.LONG, 2),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label15),
+            new CfIf(IfType.NE, ValueType.INT, label15),
             label14,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -5435,7 +5435,7 @@
             label0,
             new CfLoad(ValueType.INT, 0),
             new CfConstNumber(-2147483648, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label2),
+            new CfIfCmp(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -5472,7 +5472,7 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(-9223372036854775808L, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -5575,7 +5575,7 @@
             new CfLoad(ValueType.INT, 4),
             new CfNumberConversion(NumericType.INT, NumericType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.NE, ValueType.INT, label4),
+            new CfIf(IfType.NE, ValueType.INT, label4),
             label3,
             new CfLoad(ValueType.INT, 4),
             new CfReturn(ValueType.INT),
@@ -5631,7 +5631,7 @@
             new CfLogicalBinop(CfLogicalBinop.Opcode.Xor, NumericType.LONG),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label2),
+            new CfIf(IfType.LT, ValueType.INT, label2),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label3),
             label2,
@@ -5665,7 +5665,7 @@
             new CfLogicalBinop(CfLogicalBinop.Opcode.Xor, NumericType.LONG),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label4),
+            new CfIf(IfType.LT, ValueType.INT, label4),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label5),
             label4,
@@ -5696,7 +5696,7 @@
                     }),
                 new ArrayDeque<>(Arrays.asList(FrameType.intType(), FrameType.intType()))),
             new CfLogicalBinop(CfLogicalBinop.Opcode.Or, NumericType.INT),
-            new CfIf(If.Type.EQ, ValueType.INT, label7),
+            new CfIf(IfType.EQ, ValueType.INT, label7),
             label6,
             new CfLoad(ValueType.LONG, 4),
             new CfReturn(ValueType.LONG),
@@ -5747,7 +5747,7 @@
             new CfLoad(ValueType.INT, 2),
             new CfNumberConversion(NumericType.INT, NumericType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.EQ, ValueType.INT, label3),
+            new CfIf(IfType.EQ, ValueType.INT, label3),
             label2,
             new CfNew(factory.createType("Ljava/lang/ArithmeticException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -5785,16 +5785,16 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.INT, 1),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.INT, 2),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.INT, 0),
             new CfLoad(ValueType.INT, 2),
             new CfLoad(ValueType.INT, 1),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label2),
+            new CfIfCmp(IfType.LE, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -5921,21 +5921,21 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.LONG, 2),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.LONG, 4),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.LONG, 4),
             new CfLoad(ValueType.LONG, 2),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LE, ValueType.INT, label2),
+            new CfIf(IfType.LE, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -6069,13 +6069,13 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.INT, 0),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.GT, ValueType.INT, label1),
+            new CfIfCmp(IfType.GT, ValueType.INT, label1),
             new CfLoad(ValueType.INT, 1),
             new CfLoad(ValueType.INT, 2),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label2),
+            new CfIfCmp(IfType.LE, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -6186,15 +6186,15 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.LONG, 2),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.GT, ValueType.INT, label1),
+            new CfIf(IfType.GT, ValueType.INT, label1),
             new CfLoad(ValueType.LONG, 2),
             new CfLoad(ValueType.LONG, 4),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LE, ValueType.INT, label2),
+            new CfIf(IfType.LE, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -6312,10 +6312,10 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.INT, 0),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.LT, ValueType.INT, label2),
+            new CfIfCmp(IfType.LT, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -6403,11 +6403,11 @@
             new CfLoad(ValueType.LONG, 0),
             new CfConstNumber(0, ValueType.LONG),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label1),
+            new CfIf(IfType.LT, ValueType.INT, label1),
             new CfLoad(ValueType.LONG, 0),
             new CfLoad(ValueType.LONG, 2),
             new CfCmp(Cmp.Bias.NONE, NumericType.LONG),
-            new CfIf(If.Type.LT, ValueType.INT, label2),
+            new CfIf(IfType.LT, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -6506,7 +6506,7 @@
             label0,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label1),
             new CfConstNumber(0, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -6595,7 +6595,7 @@
             label0,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfReturn(ValueType.INT),
             label1,
@@ -6607,7 +6607,7 @@
                       FrameType.initializedNonNullReference(factory.objectType)
                     })),
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIf(IfType.NE, ValueType.OBJECT, label2),
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
             label2,
@@ -6620,11 +6620,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.booleanArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label6),
+            new CfIf(IfType.EQ, ValueType.INT, label6),
             label3,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.booleanArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label4),
+            new CfIf(IfType.EQ, ValueType.INT, label4),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.booleanArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6637,7 +6637,7 @@
                         factory.booleanType, factory.booleanArrayType, factory.booleanArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label4),
+            new CfIf(IfType.EQ, ValueType.INT, label4),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label5),
             label4,
@@ -6669,11 +6669,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.byteArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             label7,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.byteArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.byteArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6686,7 +6686,7 @@
                         factory.booleanType, factory.byteArrayType, factory.byteArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label9),
             label8,
@@ -6718,11 +6718,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.charArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label14),
+            new CfIf(IfType.EQ, ValueType.INT, label14),
             label11,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.charArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label12),
+            new CfIf(IfType.EQ, ValueType.INT, label12),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.charArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6735,7 +6735,7 @@
                         factory.booleanType, factory.charArrayType, factory.charArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label12),
+            new CfIf(IfType.EQ, ValueType.INT, label12),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label13),
             label12,
@@ -6767,11 +6767,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.doubleArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label18),
+            new CfIf(IfType.EQ, ValueType.INT, label18),
             label15,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.doubleArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label16),
+            new CfIf(IfType.EQ, ValueType.INT, label16),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.doubleArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6784,7 +6784,7 @@
                         factory.booleanType, factory.doubleArrayType, factory.doubleArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label16),
+            new CfIf(IfType.EQ, ValueType.INT, label16),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label17),
             label16,
@@ -6816,11 +6816,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.floatArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label22),
+            new CfIf(IfType.EQ, ValueType.INT, label22),
             label19,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.floatArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label20),
+            new CfIf(IfType.EQ, ValueType.INT, label20),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.floatArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6833,7 +6833,7 @@
                         factory.booleanType, factory.floatArrayType, factory.floatArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label20),
+            new CfIf(IfType.EQ, ValueType.INT, label20),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label21),
             label20,
@@ -6865,11 +6865,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.intArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label26),
+            new CfIf(IfType.EQ, ValueType.INT, label26),
             label23,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.intArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label24),
+            new CfIf(IfType.EQ, ValueType.INT, label24),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.intArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6882,7 +6882,7 @@
                         factory.booleanType, factory.intArrayType, factory.intArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label24),
+            new CfIf(IfType.EQ, ValueType.INT, label24),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label25),
             label24,
@@ -6914,11 +6914,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.longArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label30),
+            new CfIf(IfType.EQ, ValueType.INT, label30),
             label27,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.longArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label28),
+            new CfIf(IfType.EQ, ValueType.INT, label28),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.longArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6931,7 +6931,7 @@
                         factory.booleanType, factory.longArrayType, factory.longArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label28),
+            new CfIf(IfType.EQ, ValueType.INT, label28),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label29),
             label28,
@@ -6963,11 +6963,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.shortArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label34),
+            new CfIf(IfType.EQ, ValueType.INT, label34),
             label31,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.shortArrayType),
-            new CfIf(If.Type.EQ, ValueType.INT, label32),
+            new CfIf(IfType.EQ, ValueType.INT, label32),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.shortArrayType),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6980,7 +6980,7 @@
                         factory.booleanType, factory.shortArrayType, factory.shortArrayType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label32),
+            new CfIf(IfType.EQ, ValueType.INT, label32),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label33),
             label32,
@@ -7012,11 +7012,11 @@
                     })),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceOf(factory.createType("[Ljava/lang/Object;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label38),
+            new CfIf(IfType.EQ, ValueType.INT, label38),
             label35,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.createType("[Ljava/lang/Object;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label36),
+            new CfIf(IfType.EQ, ValueType.INT, label36),
             new CfLoad(ValueType.OBJECT, 0),
             new CfCheckCast(factory.createType("[Ljava/lang/Object;")),
             new CfLoad(ValueType.OBJECT, 1),
@@ -7031,7 +7031,7 @@
                         factory.createType("[Ljava/lang/Object;")),
                     factory.createString("deepEquals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label36),
+            new CfIf(IfType.EQ, ValueType.INT, label36),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label37),
             label36,
@@ -7090,9 +7090,9 @@
             label0,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label1),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label1),
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label2),
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
             new CfInvoke(
@@ -7102,7 +7102,7 @@
                     factory.createProto(factory.booleanType, factory.objectType),
                     factory.createString("equals")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -7149,7 +7149,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIf(IfType.NE, ValueType.OBJECT, label1),
             new CfConstNumber(0, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -7189,7 +7189,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIf(IfType.NE, ValueType.OBJECT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -7222,7 +7222,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label1),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -7254,7 +7254,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label1),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfReturn(ValueType.OBJECT),
             label1,
@@ -7293,7 +7293,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label1),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfReturn(ValueType.OBJECT),
             label1,
@@ -7352,7 +7352,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIf(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/NullPointerException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -7396,10 +7396,10 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIf(IfType.NE, ValueType.OBJECT, label5),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label2),
             new CfLoad(ValueType.OBJECT, 1),
             new CfInvoke(
                 185,
@@ -7496,7 +7496,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIf(IfType.NE, ValueType.OBJECT, label1),
             new CfLoad(ValueType.OBJECT, 1),
             new CfGoto(label2),
             label1,
@@ -7551,7 +7551,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
             new CfLoad(ValueType.OBJECT, 0),
@@ -7629,7 +7629,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
             new CfLoad(ValueType.OBJECT, 0),
@@ -7707,7 +7707,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
             new CfLoad(ValueType.OBJECT, 0),
@@ -7785,7 +7785,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
             new CfLoad(ValueType.OBJECT, 0),
@@ -7861,7 +7861,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -7907,7 +7907,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -7953,7 +7953,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -7999,7 +7999,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label2),
             label1,
@@ -8057,7 +8057,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label3),
+            new CfIf(IfType.EQ, ValueType.INT, label3),
             label2,
             new CfLoad(ValueType.OBJECT, 0),
             new CfReturn(ValueType.OBJECT),
@@ -8116,7 +8116,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -8175,7 +8175,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -8234,7 +8234,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -8293,7 +8293,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPresent")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -8445,7 +8445,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIf(IfType.NE, ValueType.OBJECT, label1),
             new CfInvoke(
                 184,
                 factory.createMethod(
@@ -8523,7 +8523,7 @@
                     })),
             new CfLoad(ValueType.INT, 1),
             new CfLoad(ValueType.INT, 2),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label8),
+            new CfIfCmp(IfType.GE, ValueType.INT, label8),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
@@ -8544,7 +8544,7 @@
                     factory.createProto(factory.booleanType, factory.intType),
                     factory.createString("isWhitespace")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label6),
+            new CfIf(IfType.NE, ValueType.INT, label6),
             label5,
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -8602,7 +8602,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIf(IfType.NE, ValueType.OBJECT, label1),
             new CfNew(factory.createType("Ljava/lang/NullPointerException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
             new CfConstString(factory.createString("delimiter")),
@@ -8636,7 +8636,7 @@
             label2,
             new CfLoad(ValueType.OBJECT, 1),
             new CfArrayLength(),
-            new CfIf(If.Type.LE, ValueType.INT, label9),
+            new CfIf(IfType.LE, ValueType.INT, label9),
             label3,
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.OBJECT, 1),
@@ -8667,7 +8667,7 @@
             new CfLoad(ValueType.INT, 3),
             new CfLoad(ValueType.OBJECT, 1),
             new CfArrayLength(),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label9),
+            new CfIfCmp(IfType.GE, ValueType.INT, label9),
             label6,
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.OBJECT, 0),
@@ -8737,7 +8737,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.NE, ValueType.OBJECT, label1),
+            new CfIf(IfType.NE, ValueType.OBJECT, label1),
             new CfNew(factory.createType("Ljava/lang/NullPointerException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
             new CfConstString(factory.createString("delimiter")),
@@ -8787,7 +8787,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("hasNext")),
                 true),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             label4,
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.OBJECT, 3),
@@ -8827,7 +8827,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("hasNext")),
                 true),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             label6,
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.OBJECT, 0),
@@ -8910,7 +8910,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 1),
-            new CfIf(If.Type.GE, ValueType.INT, label2),
+            new CfIf(IfType.GE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/IllegalArgumentException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -8972,9 +8972,9 @@
             new CfStore(ValueType.INT, 2),
             label3,
             new CfLoad(ValueType.INT, 1),
-            new CfIf(If.Type.EQ, ValueType.INT, label4),
+            new CfIf(IfType.EQ, ValueType.INT, label4),
             new CfLoad(ValueType.INT, 2),
-            new CfIf(If.Type.NE, ValueType.INT, label5),
+            new CfIf(IfType.NE, ValueType.INT, label5),
             label4,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -8997,7 +8997,7 @@
                     })),
             new CfLoad(ValueType.INT, 1),
             new CfConstNumber(1, ValueType.INT),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label7),
+            new CfIfCmp(IfType.NE, ValueType.INT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfReturn(ValueType.OBJECT),
@@ -9021,7 +9021,7 @@
             new CfConstNumber(2147483647, ValueType.INT),
             new CfLoad(ValueType.INT, 1),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Div, NumericType.INT),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label10),
+            new CfIfCmp(IfType.LE, ValueType.INT, label10),
             label8,
             new CfNew(factory.createType("Ljava/lang/OutOfMemoryError;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -9136,7 +9136,7 @@
                     })),
             new CfLoad(ValueType.INT, 4),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label15),
+            new CfIfCmp(IfType.GE, ValueType.INT, label15),
             label13,
             new CfLoad(ValueType.OBJECT, 3),
             new CfLoad(ValueType.OBJECT, 0),
@@ -9221,7 +9221,7 @@
                     })),
             new CfLoad(ValueType.INT, 1),
             new CfLoad(ValueType.INT, 2),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label8),
+            new CfIfCmp(IfType.GE, ValueType.INT, label8),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
@@ -9242,7 +9242,7 @@
                     factory.createProto(factory.booleanType, factory.intType),
                     factory.createString("isWhitespace")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label6),
+            new CfIf(IfType.NE, ValueType.INT, label6),
             label5,
             new CfGoto(label8),
             label6,
@@ -9279,7 +9279,7 @@
                     })),
             new CfLoad(ValueType.INT, 2),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.LE, ValueType.INT, label14),
+            new CfIfCmp(IfType.LE, ValueType.INT, label14),
             label9,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 2),
@@ -9300,7 +9300,7 @@
                     factory.createProto(factory.booleanType, factory.intType),
                     factory.createString("isWhitespace")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label12),
+            new CfIf(IfType.NE, ValueType.INT, label12),
             label11,
             new CfGoto(label14),
             label12,
@@ -9391,7 +9391,7 @@
                     })),
             new CfLoad(ValueType.INT, 1),
             new CfLoad(ValueType.INT, 2),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label8),
+            new CfIfCmp(IfType.GE, ValueType.INT, label8),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
@@ -9412,7 +9412,7 @@
                     factory.createProto(factory.booleanType, factory.intType),
                     factory.createString("isWhitespace")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label6),
+            new CfIf(IfType.NE, ValueType.INT, label6),
             label5,
             new CfGoto(label8),
             label6,
@@ -9496,7 +9496,7 @@
                       FrameType.initializedNonNullReference(factory.stringType), FrameType.intType()
                     })),
             new CfLoad(ValueType.INT, 1),
-            new CfIf(If.Type.LE, ValueType.INT, label7),
+            new CfIf(IfType.LE, ValueType.INT, label7),
             label2,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.INT, 1),
@@ -9517,7 +9517,7 @@
                     factory.createProto(factory.booleanType, factory.intType),
                     factory.createString("isWhitespace")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label5),
+            new CfIf(IfType.NE, ValueType.INT, label5),
             label4,
             new CfGoto(label7),
             label5,
@@ -9763,7 +9763,7 @@
                         factory.objectType),
                     factory.createString("compareAndSwapObject")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfConstNumber(1, ValueType.INT),
             new CfReturn(ValueType.INT),
@@ -9791,7 +9791,7 @@
                     factory.createString("getObject")),
                 false),
             new CfLoad(ValueType.OBJECT, 4),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label0),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label0),
             label3,
             new CfConstNumber(0, ValueType.INT),
             new CfReturn(ValueType.INT),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
index 161262d..d260a73 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
@@ -48,8 +48,8 @@
 import com.android.tools.r8.graph.MethodResolutionResult;
 import com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.IfType;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.desugar.FreshLocalProvider;
 import com.android.tools.r8.ir.desugar.LocalStackAllocator;
@@ -279,16 +279,16 @@
     CfLabel tryCatchEndFinally = new CfLabel();
 
     instructions.add(new CfStaticFieldRead(initializedValueField));
-    instructions.add(new CfIf(If.Type.NE, ValueType.INT, initializedTrue));
+    instructions.add(new CfIf(IfType.NE, ValueType.INT, initializedTrue));
 
     instructions.add(new CfConstClass(builder.getType()));
     instructions.add(new CfStackInstruction(Opcode.Dup));
     instructions.add(new CfStore(ValueType.OBJECT, 0));
-    instructions.add(new CfMonitor(Monitor.Type.ENTER));
+    instructions.add(new CfMonitor(MonitorType.ENTER));
     instructions.add(tryCatchStart);
 
     instructions.add(new CfStaticFieldRead(initializedValueField));
-    instructions.add(new CfIf(If.Type.NE, ValueType.INT, initializedTrueSecond));
+    instructions.add(new CfIf(IfType.NE, ValueType.INT, initializedTrueSecond));
 
     invokeBootstrapMethod(instructions);
     instructions.add(new CfStaticFieldWrite(constantValueField));
@@ -301,7 +301,7 @@
             .appendLocal(FrameType.initializedNonNullReference(builder.getFactory().objectType))
             .build());
     instructions.add(new CfLoad(ValueType.OBJECT, 0));
-    instructions.add(new CfMonitor(Monitor.Type.EXIT));
+    instructions.add(new CfMonitor(MonitorType.EXIT));
     instructions.add(tryCatchEnd);
     instructions.add(new CfGoto(initializedTrue));
 
@@ -313,7 +313,7 @@
             .build());
     instructions.add(new CfStore(ValueType.OBJECT, 1));
     instructions.add(new CfLoad(ValueType.OBJECT, 0));
-    instructions.add(new CfMonitor(Monitor.Type.EXIT));
+    instructions.add(new CfMonitor(MonitorType.EXIT));
     instructions.add(tryCatchEndFinally);
     instructions.add(new CfLoad(ValueType.OBJECT, 1));
     instructions.add(new CfThrow());
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java
index accc84e..3743f0c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java
@@ -30,7 +30,7 @@
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
@@ -110,7 +110,7 @@
                     factory.createProto(factory.intType),
                     factory.createString("length")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label1),
+            new CfIf(IfType.NE, ValueType.INT, label1),
             new CfConstNumber(0, ValueType.INT),
             new CfNewArray(factory.createType("[Ljava/lang/String;")),
             new CfGoto(label2),
@@ -206,7 +206,7 @@
             new CfLoad(ValueType.INT, 5),
             new CfLoad(ValueType.OBJECT, 3),
             new CfArrayLength(),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label11),
+            new CfIfCmp(IfType.GE, ValueType.INT, label11),
             label7,
             new CfLoad(ValueType.OBJECT, 4),
             new CfLoad(ValueType.OBJECT, 3),
@@ -244,7 +244,7 @@
             new CfArrayLength(),
             new CfConstNumber(1, ValueType.INT),
             new CfArithmeticBinop(CfArithmeticBinop.Opcode.Sub, NumericType.INT),
-            new CfIfCmp(If.Type.EQ, ValueType.INT, label10),
+            new CfIfCmp(IfType.EQ, ValueType.INT, label10),
             label9,
             new CfLoad(ValueType.OBJECT, 4),
             new CfConstString(factory.createString(", ")),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaringMethods.java b/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaringMethods.java
index cbbd51b..6d9d890 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaringMethods.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaringMethods.java
@@ -45,7 +45,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.FieldAccessFlags;
 import com.android.tools.r8.graph.MethodAccessFlags;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
@@ -1147,7 +1147,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label6),
+            new CfIf(IfType.NE, ValueType.INT, label6),
             label5,
             new CfNew(factory.createType("Ljava/lang/IllegalArgumentException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -1227,7 +1227,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             label8,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -1300,21 +1300,21 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPrimitive")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label14),
+            new CfIf(IfType.EQ, ValueType.INT, label14),
             new CfLoad(ValueType.OBJECT, 3),
             new CfStaticFieldRead(
                 factory.createField(
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label14),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label14),
             new CfLoad(ValueType.OBJECT, 3),
             new CfStaticFieldRead(
                 factory.createField(
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label14),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label14),
             label11,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -1595,21 +1595,21 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isPrimitive")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             new CfLoad(ValueType.OBJECT, 3),
             new CfStaticFieldRead(
                 factory.createField(
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label10),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label10),
             new CfLoad(ValueType.OBJECT, 3),
             new CfStaticFieldRead(
                 factory.createField(
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label10),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label10),
             label8,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -1771,7 +1771,7 @@
             label0,
             new CfLoad(ValueType.OBJECT, 2),
             new CfConstClass(factory.createType("Ljava/lang/Long;")),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.INT, 1),
             new CfNumberConversion(NumericType.INT, NumericType.LONG),
@@ -1795,7 +1795,7 @@
                     })),
             new CfLoad(ValueType.OBJECT, 2),
             new CfConstClass(factory.createType("Ljava/lang/Float;")),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.INT, 1),
             new CfNumberConversion(NumericType.INT, NumericType.FLOAT),
@@ -1819,7 +1819,7 @@
                     })),
             new CfLoad(ValueType.OBJECT, 2),
             new CfConstClass(factory.createType("Ljava/lang/Double;")),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label6),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label6),
             label5,
             new CfLoad(ValueType.INT, 1),
             new CfNumberConversion(NumericType.INT, NumericType.DOUBLE),
@@ -1872,7 +1872,7 @@
             label0,
             new CfLoad(ValueType.OBJECT, 3),
             new CfConstClass(factory.createType("Ljava/lang/Float;")),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.LONG, 1),
             new CfNumberConversion(NumericType.LONG, NumericType.FLOAT),
@@ -1897,7 +1897,7 @@
                     })),
             new CfLoad(ValueType.OBJECT, 3),
             new CfConstClass(factory.createType("Ljava/lang/Double;")),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.LONG, 1),
             new CfNumberConversion(NumericType.LONG, NumericType.DOUBLE),
@@ -1963,7 +1963,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2035,7 +2035,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label8),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label8),
             label5,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2165,7 +2165,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -2180,7 +2180,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -2240,7 +2240,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label8),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label8),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2307,7 +2307,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label13),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label13),
             label9,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2415,7 +2415,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -2505,7 +2505,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -2601,7 +2601,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2653,7 +2653,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2754,7 +2754,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2882,7 +2882,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -2932,7 +2932,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -3026,7 +3026,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -3041,7 +3041,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -3101,7 +3101,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label5),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -3149,7 +3149,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label7),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -3242,7 +3242,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -3257,7 +3257,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -3319,7 +3319,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label5),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -3370,7 +3370,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label7),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -3429,10 +3429,10 @@
             label8,
             new CfLoad(ValueType.OBJECT, 6),
             new CfInstanceOf(factory.createType("Ljava/lang/Integer;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             new CfLoad(ValueType.OBJECT, 3),
             new CfConstClass(factory.createType("Ljava/lang/Integer;")),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label10),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label10),
             label9,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 6),
@@ -3469,10 +3469,10 @@
                     })),
             new CfLoad(ValueType.OBJECT, 6),
             new CfInstanceOf(factory.createType("Ljava/lang/Long;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label12),
+            new CfIf(IfType.EQ, ValueType.INT, label12),
             new CfLoad(ValueType.OBJECT, 3),
             new CfConstClass(factory.createType("Ljava/lang/Long;")),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label12),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label12),
             label11,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 6),
@@ -3533,7 +3533,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -3613,7 +3613,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -3698,7 +3698,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -3751,7 +3751,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -3843,7 +3843,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -3886,7 +3886,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -3965,7 +3965,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -4008,7 +4008,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -4150,7 +4150,7 @@
                     })),
             new CfLoad(ValueType.INT, 4),
             new CfLoad(ValueType.INT, 3),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label9),
+            new CfIfCmp(IfType.GE, ValueType.INT, label9),
             new CfLoad(ValueType.OBJECT, 2),
             new CfLoad(ValueType.INT, 4),
             new CfArrayLoad(MemberType.OBJECT),
@@ -4171,7 +4171,7 @@
                     factory.createProto(factory.booleanType, factory.intType),
                     factory.createString("isStatic")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             new CfConstClass(factory.createType("Lsun/misc/Unsafe;")),
             new CfLoad(ValueType.OBJECT, 5),
             label6,
@@ -4189,7 +4189,7 @@
                     factory.createProto(factory.booleanType, factory.classType),
                     factory.createString("isAssignableFrom")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             label7,
             new CfLoad(ValueType.OBJECT, 5),
             new CfReturn(ValueType.OBJECT),
@@ -4266,7 +4266,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -4316,7 +4316,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -4410,7 +4410,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -4425,7 +4425,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -4485,7 +4485,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label5),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -4533,7 +4533,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label7),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -4627,7 +4627,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -4642,7 +4642,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -4704,7 +4704,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label5),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -4755,7 +4755,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label7),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -4814,10 +4814,10 @@
             label8,
             new CfLoad(ValueType.OBJECT, 6),
             new CfInstanceOf(factory.createType("Ljava/lang/Integer;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             new CfLoad(ValueType.OBJECT, 3),
             new CfConstClass(factory.createType("Ljava/lang/Integer;")),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label10),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label10),
             label9,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 6),
@@ -4854,10 +4854,10 @@
                     })),
             new CfLoad(ValueType.OBJECT, 6),
             new CfInstanceOf(factory.createType("Ljava/lang/Long;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label12),
+            new CfIf(IfType.EQ, ValueType.INT, label12),
             new CfLoad(ValueType.OBJECT, 3),
             new CfConstClass(factory.createType("Ljava/lang/Long;")),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label12),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label12),
             label11,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 6),
@@ -4919,7 +4919,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -5000,7 +5000,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -5085,7 +5085,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -5138,7 +5138,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 0),
@@ -5230,7 +5230,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -5273,7 +5273,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -5352,7 +5352,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -5395,7 +5395,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -5488,7 +5488,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
@@ -5531,7 +5531,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
@@ -5631,7 +5631,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -5646,7 +5646,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -5704,7 +5704,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label5),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -5753,7 +5753,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label7),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -5851,7 +5851,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -5936,7 +5936,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -6027,7 +6027,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -6073,7 +6073,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -6167,7 +6167,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -6214,7 +6214,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -6307,7 +6307,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6350,7 +6350,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
@@ -6450,7 +6450,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -6465,7 +6465,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -6523,7 +6523,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label5),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -6572,7 +6572,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label7),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -6671,7 +6671,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -6757,7 +6757,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -6848,7 +6848,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -6894,7 +6894,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -6988,7 +6988,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -7035,7 +7035,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -7128,7 +7128,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
@@ -7171,7 +7171,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
@@ -7271,7 +7271,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -7286,7 +7286,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -7344,7 +7344,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label5),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label5),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -7393,7 +7393,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label7),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label7),
             label6,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -7492,7 +7492,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -7578,7 +7578,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -7669,7 +7669,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -7715,7 +7715,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -7809,7 +7809,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -7856,7 +7856,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
@@ -7945,7 +7945,7 @@
             label0,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.createType("Ljava/lang/Integer;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
             new CfCheckCast(factory.createType("Ljava/lang/Integer;")),
@@ -7969,7 +7969,7 @@
                     })),
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.createType("Ljava/lang/Byte;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label4),
+            new CfIf(IfType.EQ, ValueType.INT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 1),
             new CfCheckCast(factory.createType("Ljava/lang/Byte;")),
@@ -7993,7 +7993,7 @@
                     })),
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.boxedCharType),
-            new CfIf(If.Type.EQ, ValueType.INT, label6),
+            new CfIf(IfType.EQ, ValueType.INT, label6),
             label5,
             new CfLoad(ValueType.OBJECT, 1),
             new CfCheckCast(factory.boxedCharType),
@@ -8017,7 +8017,7 @@
                     })),
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.createType("Ljava/lang/Short;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label8),
+            new CfIf(IfType.EQ, ValueType.INT, label8),
             label7,
             new CfLoad(ValueType.OBJECT, 1),
             new CfCheckCast(factory.createType("Ljava/lang/Short;")),
@@ -8040,7 +8040,7 @@
                       FrameType.intType()
                     })),
             new CfLoad(ValueType.INT, 2),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             label9,
             new CfNew(factory.createType("Ljava/lang/ClassCastException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -8089,7 +8089,7 @@
             label0,
             new CfLoad(ValueType.OBJECT, 1),
             new CfInstanceOf(factory.createType("Ljava/lang/Long;")),
-            new CfIf(If.Type.EQ, ValueType.INT, label2),
+            new CfIf(IfType.EQ, ValueType.INT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 1),
             new CfCheckCast(factory.createType("Ljava/lang/Long;")),
@@ -8157,7 +8157,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -8229,7 +8229,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label8),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label8),
             label5,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -8359,7 +8359,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("isArray")),
                 false),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
                 factory.createField(
@@ -8374,7 +8374,7 @@
                     factory.createProto(factory.classType),
                     factory.createString("getClass")),
                 false),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -8434,7 +8434,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label8),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label8),
             label4,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -8501,7 +8501,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label13),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label13),
             label9,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -8609,7 +8609,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.intArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -8699,7 +8699,7 @@
                     factory.classType,
                     factory.createString("recv"))),
             new CfConstClass(factory.longArrayType),
-            new CfIfCmp(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/UnsupportedOperationException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -8796,7 +8796,7 @@
                     factory.createType("Ljava/lang/Integer;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -8848,7 +8848,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label4),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label4),
             label3,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -8949,7 +8949,7 @@
                     factory.createType("Ljava/lang/Long;"),
                     factory.classType,
                     factory.createString("TYPE"))),
-            new CfIfCmp(If.Type.NE, ValueType.OBJECT, label2),
+            new CfIfCmp(IfType.NE, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
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 509d6c1..cd2c596 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
@@ -65,7 +65,7 @@
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.InstanceFieldInstruction;
 import com.android.tools.r8.ir.code.InstanceGet;
 import com.android.tools.r8.ir.code.InstanceOf;
@@ -619,10 +619,10 @@
       if (right != 0) {
         ConstNumber rightConst = code.createIntConstant(right);
         rightConst.setPosition(position);
-        newIf = new If(Type.EQ, ImmutableList.of(left, rightConst.dest()));
+        newIf = new If(IfType.EQ, ImmutableList.of(left, rightConst.dest()));
         ifBlock = BasicBlock.createIfBlock(blockNumber, newIf, code.metadata(), rightConst);
       } else {
-        newIf = new If(Type.EQ, left);
+        newIf = new If(IfType.EQ, left);
         ifBlock = BasicBlock.createIfBlock(blockNumber, newIf, code.metadata());
       }
       newIf.setPosition(position);
@@ -975,7 +975,7 @@
     }
     If replacement;
     if (theSwitch.isIntSwitch() && theSwitch.asIntSwitch().getFirstKey() == 0) {
-      replacement = new If(Type.EQ, theSwitch.value());
+      replacement = new If(IfType.EQ, theSwitch.value());
     } else {
       Instruction labelConst = theSwitch.materializeFirstKey(appView, code);
       labelConst.setPosition(theSwitch.getPosition());
@@ -983,7 +983,7 @@
       iterator.add(labelConst);
       Instruction dummy = iterator.next();
       assert dummy == theSwitch;
-      replacement = new If(Type.EQ, ImmutableList.of(theSwitch.value(), labelConst.outValue()));
+      replacement = new If(IfType.EQ, ImmutableList.of(theSwitch.value(), labelConst.outValue()));
     }
     iterator.replaceCurrentInstruction(replacement);
   }
@@ -2793,7 +2793,7 @@
     }
 
     if (theIf.isNullTest()) {
-      assert theIf.getType() == Type.EQ || theIf.getType() == Type.NE;
+      assert theIf.getType() == IfType.EQ || theIf.getType() == IfType.NE;
 
       if (lhs.isAlwaysNull(appView)) {
         simplifyIfWithKnownCondition(code, block, theIf, theIf.targetFromNullObject());
@@ -2806,7 +2806,7 @@
       }
     }
 
-    if (theIf.getType() == Type.EQ || theIf.getType() == Type.NE) {
+    if (theIf.getType() == IfType.EQ || theIf.getType() == IfType.NE) {
       AbstractValue lhsAbstractValue = lhs.getAbstractValue(appView, code.context());
       if (lhsAbstractValue.isConstantOrNonConstantNumberValue()
           && !lhsAbstractValue.asConstantOrNonConstantNumberValue().containsInt(0)) {
@@ -2874,7 +2874,7 @@
     if (lhsRoot.isDefinedByInstructionSatisfying(Instruction::isCreatingInstanceOrArray)
         && rhsRoot.isDefinedByInstructionSatisfying(Instruction::isCreatingInstanceOrArray)) {
       // Comparing two newly created objects.
-      assert theIf.getType() == Type.EQ || theIf.getType() == Type.NE;
+      assert theIf.getType() == IfType.EQ || theIf.getType() == IfType.NE;
       simplifyIfWithKnownCondition(code, block, theIf, theIf.targetFromCondition(1));
       return true;
     }
@@ -2888,7 +2888,7 @@
       return true;
     }
 
-    if (theIf.getType() == Type.EQ || theIf.getType() == Type.NE) {
+    if (theIf.getType() == IfType.EQ || theIf.getType() == IfType.NE) {
       AbstractValue lhsAbstractValue = lhs.getAbstractValue(appView, code.context());
       AbstractValue rhsAbstractValue = rhs.getAbstractValue(appView, code.context());
       if (lhsAbstractValue.isConstantOrNonConstantNumberValue()
@@ -2947,7 +2947,7 @@
       }
     }
 
-    if (theIf.getType() == Type.EQ || theIf.getType() == Type.NE) {
+    if (theIf.getType() == IfType.EQ || theIf.getType() == IfType.NE) {
       ProgramMethod context = code.context();
       AbstractValue abstractValue = lhs.getAbstractValue(appView, context);
       if (abstractValue.isSingleConstClassValue()) {
@@ -3046,7 +3046,7 @@
       }
 
       If ifInstruction = lastInstruction.asIf();
-      Type type = ifInstruction.getType();
+      IfType type = ifInstruction.getType();
 
       Value lhs = ifInstruction.inValues().get(0);
       Value rhs = !ifInstruction.isZeroTest() ? ifInstruction.inValues().get(1) : null;
@@ -3059,12 +3059,12 @@
 
       // If the type is neither EQ nor NE, we cannot conclude anything about any of the in-values
       // of the if-instruction from the outcome of the if-instruction.
-      if (type != Type.EQ && type != Type.NE) {
+      if (type != IfType.EQ && type != IfType.NE) {
         continue;
       }
 
       BasicBlock trueTarget, falseTarget;
-      if (type == Type.EQ) {
+      if (type == IfType.EQ) {
         trueTarget = ifInstruction.getTrueTarget();
         falseTarget = ifInstruction.fallthroughBlock();
       } else {
@@ -3538,20 +3538,20 @@
             if (trueValue.isConstNumber() && falseValue.isConstNumber()) {
               ConstNumber trueNumber = trueValue.getConstInstruction().asConstNumber();
               ConstNumber falseNumber = falseValue.getConstInstruction().asConstNumber();
-              if ((theIf.getType() == Type.EQ &&
-                  trueNumber.isIntegerZero() &&
-                  falseNumber.isIntegerOne()) ||
-                  (theIf.getType() == Type.NE &&
-                      trueNumber.isIntegerOne() &&
-                      falseNumber.isIntegerZero())) {
+              if ((theIf.getType() == IfType.EQ
+                      && trueNumber.isIntegerZero()
+                      && falseNumber.isIntegerOne())
+                  || (theIf.getType() == IfType.NE
+                      && trueNumber.isIntegerOne()
+                      && falseNumber.isIntegerZero())) {
                 phi.replaceUsers(testValue);
                 deadPhis++;
-              } else if ((theIf.getType() == Type.NE &&
-                           trueNumber.isIntegerZero() &&
-                           falseNumber.isIntegerOne()) ||
-                         (theIf.getType() == Type.EQ &&
-                           trueNumber.isIntegerOne() &&
-                           falseNumber.isIntegerZero())) {
+              } else if ((theIf.getType() == IfType.NE
+                      && trueNumber.isIntegerZero()
+                      && falseNumber.isIntegerOne())
+                  || (theIf.getType() == IfType.EQ
+                      && trueNumber.isIntegerOne()
+                      && falseNumber.isIntegerZero())) {
                 Value newOutValue = code.createValue(phi.getType(), phi.getLocalInfo());
                 ConstNumber cstToUse = trueNumber.isIntegerOne() ? trueNumber : falseNumber;
                 BasicBlock phiBlock = phi.getBlock();
@@ -3951,7 +3951,7 @@
       } else {
         // Insert "if (argument != null) ...".
         successor = block.unlinkSingleSuccessor();
-        If theIf = new If(Type.NE, argument);
+        If theIf = new If(IfType.NE, argument);
         theIf.setPosition(position);
         BasicBlock ifBlock =
             BasicBlock.createIfBlock(code.getNextBlockNumber(), theIf, code.metadata());
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 592b645..d19fa89 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -41,6 +41,7 @@
 import com.android.tools.r8.ir.code.InvokeMethod;
 import com.android.tools.r8.ir.code.InvokeVirtual;
 import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.MoveException;
 import com.android.tools.r8.ir.code.Phi;
 import com.android.tools.r8.ir.code.Position;
@@ -676,10 +677,10 @@
         }
 
         // Insert the monitor-enter and monitor-exit instructions.
-        monitorEnterBlockIterator.add(new Monitor(Monitor.Type.ENTER, lockValue));
+        monitorEnterBlockIterator.add(new Monitor(MonitorType.ENTER, lockValue));
         if (monitorExitBlockIterator != null) {
           monitorExitBlockIterator.previous();
-          monitorExitBlockIterator.add(new Monitor(Monitor.Type.EXIT, lockValue));
+          monitorExitBlockIterator.add(new Monitor(MonitorType.EXIT, lockValue));
           monitorExitBlock.close(null);
         }
 
@@ -693,7 +694,7 @@
             InstructionListIterator instructionIterator =
                 block.listIterator(code, block.getInstructions().size() - 1);
             instructionIterator.setInsertionPosition(Position.syntheticNone());
-            instructionIterator.add(new Monitor(Monitor.Type.EXIT, lockValue));
+            instructionIterator.add(new Monitor(MonitorType.EXIT, lockValue));
           }
         }
       }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
index 3801d7c..59c066f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
@@ -20,7 +20,7 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.MethodResolutionResult;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.optimize.Inliner.Constraint;
 import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -143,7 +143,7 @@
     return forFieldInstruction(field, context);
   }
 
-  public ConstraintWithTarget forInvoke(DexMethod method, Type type, ProgramMethod context) {
+  public ConstraintWithTarget forInvoke(DexMethod method, InvokeType type, ProgramMethod context) {
     switch (type) {
       case DIRECT:
         return forInvokeDirect(method, context);
@@ -171,7 +171,7 @@
 
   public ConstraintWithTarget forInvokeDirect(DexMethod method, ProgramMethod context) {
     DexMethod lookup =
-        graphLens.lookupMethod(method, context.getReference(), Type.DIRECT).getReference();
+        graphLens.lookupMethod(method, context.getReference(), InvokeType.DIRECT).getReference();
     if (lookup.holder.isArrayType()) {
       return ConstraintWithTarget.ALWAYS;
     }
@@ -185,7 +185,7 @@
 
   public ConstraintWithTarget forInvokeInterface(DexMethod method, ProgramMethod context) {
     DexMethod lookup =
-        graphLens.lookupMethod(method, context.getReference(), Type.INTERFACE).getReference();
+        graphLens.lookupMethod(method, context.getReference(), InvokeType.INTERFACE).getReference();
     return forVirtualInvoke(lookup, context, true);
   }
 
@@ -203,7 +203,7 @@
 
   public ConstraintWithTarget forInvokeStatic(DexMethod method, ProgramMethod context) {
     DexMethod lookup =
-        graphLens.lookupMethod(method, context.getReference(), Type.STATIC).getReference();
+        graphLens.lookupMethod(method, context.getReference(), InvokeType.STATIC).getReference();
     if (lookup.holder.isArrayType()) {
       return ConstraintWithTarget.ALWAYS;
     }
@@ -260,7 +260,7 @@
 
   public ConstraintWithTarget forInvokeVirtual(DexMethod method, ProgramMethod context) {
     DexMethod lookup =
-        graphLens.lookupMethod(method, context.getReference(), Type.VIRTUAL).getReference();
+        graphLens.lookupMethod(method, context.getReference(), InvokeType.VIRTUAL).getReference();
     return forVirtualInvoke(lookup, context, false);
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
index 543eeb7..72a2169 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -37,6 +37,7 @@
 import com.android.tools.r8.ir.code.CheckCast;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.InstanceGet;
 import com.android.tools.r8.ir.code.InstanceOf;
 import com.android.tools.r8.ir.code.InstancePut;
@@ -350,8 +351,8 @@
         // Allow some IF instructions.
         if (user.isIf()) {
           If ifInsn = user.asIf();
-          If.Type type = ifInsn.getType();
-          if (ifInsn.isZeroTest() && (type == If.Type.EQ || type == If.Type.NE)) {
+          IfType type = ifInsn.getType();
+          if (ifInsn.isZeroTest() && (type == IfType.EQ || type == IfType.NE)) {
             // Allow ==/!= null tests, we know that the instance is a non-null value.
             continue;
           }
@@ -637,13 +638,13 @@
         assert ifInsn.isZeroTest()
             : "Unexpected usage in non-zero-test IF instruction: " + user;
         BasicBlock block = user.getBlock();
-        If.Type type = ifInsn.getType();
-        assert type == If.Type.EQ || type == If.Type.NE
+        IfType type = ifInsn.getType();
+        assert type == IfType.EQ || type == IfType.NE
             : "Unexpected type in zero-test IF instruction: " + user;
-        BasicBlock newBlock = type == If.Type.EQ
-            ? ifInsn.fallthroughBlock() : ifInsn.getTrueTarget();
-        BasicBlock blockToRemove = type == If.Type.EQ
-            ? ifInsn.getTrueTarget() : ifInsn.fallthroughBlock();
+        BasicBlock newBlock =
+            type == IfType.EQ ? ifInsn.fallthroughBlock() : ifInsn.getTrueTarget();
+        BasicBlock blockToRemove =
+            type == IfType.EQ ? ifInsn.getTrueTarget() : ifInsn.fallthroughBlock();
         assert newBlock != blockToRemove;
 
         block.replaceSuccessor(blockToRemove, newBlock);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index 6fb553c..0f7e4bb 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -64,6 +64,7 @@
 import com.android.tools.r8.ir.code.FieldInstruction;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.InitClass;
 import com.android.tools.r8.ir.code.InstanceGet;
 import com.android.tools.r8.ir.code.Instruction;
@@ -1218,7 +1219,7 @@
   // or e == X with X of same enum type as e. Ex: if (e == MyEnum.A).
   private Reason analyzeIfUser(
       If theIf, IRCode code, ProgramMethod context, DexProgramClass enumClass, Value enumValue) {
-    assert (theIf.getType() == If.Type.EQ || theIf.getType() == If.Type.NE)
+    assert (theIf.getType() == IfType.EQ || theIf.getType() == IfType.NE)
         : "Comparing a reference with " + theIf.getType().toString();
     // e == null.
     if (theIf.isZeroTest()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java
index 8ab61f6..be89c4e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java
@@ -31,7 +31,7 @@
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
@@ -58,9 +58,9 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.EQ, ValueType.INT, label1),
+            new CfIf(IfType.EQ, ValueType.INT, label1),
             new CfLoad(ValueType.INT, 1),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfFrame(
                 new Int2ObjectAVLTreeMap<>(
@@ -102,7 +102,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/NullPointerException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -120,7 +120,7 @@
                     new int[] {0, 1}, new FrameType[] {FrameType.intType(), FrameType.intType()})),
             new CfLoad(ValueType.INT, 0),
             new CfLoad(ValueType.INT, 1),
-            new CfIfCmp(If.Type.NE, ValueType.INT, label3),
+            new CfIfCmp(IfType.NE, ValueType.INT, label3),
             new CfConstNumber(1, ValueType.INT),
             new CfGoto(label4),
             label3,
@@ -151,7 +151,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/NullPointerException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -207,7 +207,7 @@
             new CfLoad(ValueType.INT, 2),
             new CfLoad(ValueType.OBJECT, 1),
             new CfArrayLength(),
-            new CfIfCmp(If.Type.GE, ValueType.INT, label5),
+            new CfIfCmp(IfType.GE, ValueType.INT, label5),
             label3,
             new CfLoad(ValueType.OBJECT, 1),
             new CfLoad(ValueType.INT, 2),
@@ -245,7 +245,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/NullPointerException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -279,7 +279,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.INT, 0),
-            new CfIf(If.Type.NE, ValueType.INT, label2),
+            new CfIf(IfType.NE, ValueType.INT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/NullPointerException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java
index a76e4d9..fa272ca 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java
@@ -17,7 +17,7 @@
 import com.android.tools.r8.ir.analysis.value.AbstractValueFactory;
 import com.android.tools.r8.ir.analysis.value.SingleFieldValue;
 import com.android.tools.r8.ir.analysis.value.SingleValue;
-import com.android.tools.r8.ir.code.Invoke;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.ExtraUnusedNullParameter;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.BooleanUtils;
@@ -111,12 +111,12 @@
   }
 
   @Override
-  protected Invoke.Type mapInvocationType(
-      DexMethod newMethod, DexMethod originalMethod, Invoke.Type type) {
+  protected InvokeType mapInvocationType(
+      DexMethod newMethod, DexMethod originalMethod, InvokeType type) {
     if (typeMap.containsKey(originalMethod.getHolderType())) {
       // Methods moved from unboxed enums to the utility class are either static or statified.
       assert newMethod != originalMethod;
-      return Invoke.Type.STATIC;
+      return InvokeType.STATIC;
     }
     return type;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java
index 3d8bccc..1cedaf3 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java
@@ -15,7 +15,7 @@
 import com.android.tools.r8.ir.code.Argument;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionIterator;
 import com.android.tools.r8.ir.code.Value;
@@ -95,7 +95,7 @@
           {
             If ifUser = user.asIf();
             if (!ifUser.isZeroTest()
-                || (ifUser.getType() != Type.EQ && ifUser.getType() != Type.NE)) {
+                || (ifUser.getType() != IfType.EQ && ifUser.getType() != IfType.NE)) {
               return false;
             }
             seenIf = true;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
index ed89e93..f8e784e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
@@ -72,7 +72,7 @@
 import com.android.tools.r8.ir.code.DominatorTree;
 import com.android.tools.r8.ir.code.FieldInstruction;
 import com.android.tools.r8.ir.code.IRCode;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.InstancePut;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.Instruction.SideEffectAssumption;
@@ -714,9 +714,10 @@
   }
 
   private static boolean isNullCheck(Instruction instr, Value value) {
-    return instr.isIf() && instr.asIf().isZeroTest()
+    return instr.isIf()
+        && instr.asIf().isZeroTest()
         && instr.inValues().get(0).equals(value)
-        && (instr.asIf().getType() == If.Type.EQ || instr.asIf().getType() == If.Type.NE);
+        && (instr.asIf().getType() == IfType.EQ || instr.asIf().getType() == IfType.NE);
   }
 
   /**
@@ -1099,7 +1100,7 @@
 
       if (user.isIf()
           && user.asIf().isZeroTest()
-          && (user.asIf().getType() == If.Type.EQ || user.asIf().getType() == If.Type.NE)) {
+          && (user.asIf().getType() == IfType.EQ || user.asIf().getType() == IfType.NE)) {
         nullCheckedBlocks.add(user.asIf().targetFromNonNullObject());
       }
     }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/multicallerinliner/MultiCallerInlinerInvokeRegistry.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/multicallerinliner/MultiCallerInlinerInvokeRegistry.java
index e60c8b5..06dab92 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/multicallerinliner/MultiCallerInlinerInvokeRegistry.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/multicallerinliner/MultiCallerInlinerInvokeRegistry.java
@@ -11,7 +11,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.conversion.callgraph.InvokeExtractor;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
@@ -35,7 +35,7 @@
 
   @Override
   protected void processInvokeWithDynamicDispatch(
-      Type type, DexClassAndMethod resolutionResult, ProgramMethod context) {
+      InvokeType type, DexClassAndMethod resolutionResult, ProgramMethod context) {
     // Skip calls that dispatch to library methods or library method overrides.
     if (resolutionResult.isProgramMethod()
         && resolutionResult.getDefinition().isLibraryMethodOverride().isPossiblyFalse()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
index b56f246..7a888d8 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
@@ -41,9 +41,9 @@
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InstructionListIterator;
 import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.Invoke.Type;
 import com.android.tools.r8.ir.code.InvokeMethod;
 import com.android.tools.r8.ir.code.InvokeStatic;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.LinearFlowInstructionListIterator;
 import com.android.tools.r8.ir.code.Mul;
 import com.android.tools.r8.ir.code.NewInstance;
@@ -398,13 +398,17 @@
 
   private static class InvokeOutlineInstruction extends OutlineInstruction {
     private final DexMethod method;
-    private final Invoke.Type invokeType;
+    private final InvokeType invokeType;
     private final boolean hasOutValue;
     private final DexProto proto;
     private final boolean hasReceiver;
 
     private InvokeOutlineInstruction(
-        DexMethod method, Type type, boolean hasOutValue, ValueType[] inputTypes, DexProto proto) {
+        DexMethod method,
+        InvokeType type,
+        boolean hasOutValue,
+        ValueType[] inputTypes,
+        DexProto proto) {
       super(OutlineInstructionType.INVOKE);
       hasReceiver = inputTypes.length != method.proto.parameters.values.length;
       assert !hasReceiver || inputTypes[0].isObject();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
index f06beb7..3c80c65 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
@@ -21,7 +21,7 @@
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.google.common.collect.ImmutableList;
 import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap;
@@ -50,7 +50,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfNew(factory.createType("Ljava/lang/ClassCastException;")),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -183,7 +183,7 @@
         ImmutableList.of(
             label0,
             new CfLoad(ValueType.OBJECT, 0),
-            new CfIf(If.Type.EQ, ValueType.OBJECT, label2),
+            new CfIf(IfType.EQ, ValueType.OBJECT, label2),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInvoke(
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java
index 2852ce9..7b43ba8 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java
@@ -19,7 +19,7 @@
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueType;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -68,7 +68,7 @@
 
     instructions.add(new CfLoad(ValueType.fromDexType(receiverType), 0));
     instructions.add(new CfInstanceOf(interfaceMethod.holder));
-    instructions.add(new CfIf(If.Type.EQ, ValueType.INT, labels[nextLabel]));
+    instructions.add(new CfIf(IfType.EQ, ValueType.INT, labels[nextLabel]));
 
     // Branch with library call.
     instructions.add(new CfLoad(ValueType.fromDexType(receiverType), 0));
@@ -84,7 +84,7 @@
       instructions.add(frame);
       instructions.add(new CfLoad(ValueType.fromDexType(receiverType), 0));
       instructions.add(new CfInstanceOf(dispatch.getKey()));
-      instructions.add(new CfIf(If.Type.EQ, ValueType.INT, labels[nextLabel]));
+      instructions.add(new CfIf(IfType.EQ, ValueType.INT, labels[nextLabel]));
 
       // Call basic block.
       instructions.add(new CfLoad(ValueType.fromDexType(receiverType), 0));
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
index 34e3f71..941248a 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
@@ -30,7 +30,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.analysis.value.AbstractValue;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.optimize.enums.EnumDataMap.EnumData;
 import com.android.tools.r8.ir.optimize.enums.EnumInstanceFieldData.EnumInstanceFieldMappingData;
@@ -109,7 +109,7 @@
             CfLabel dest = new CfLabel();
             instructions.add(new CfLoad(ValueType.fromDexType(factory.intType), 0));
             instructions.add(new CfConstNumber(unboxedEnumValue, ValueType.INT));
-            instructions.add(new CfIfCmp(If.Type.NE, ValueType.INT, dest));
+            instructions.add(new CfIfCmp(IfType.NE, ValueType.INT, dest));
             addCfInstructionsForAbstractValue(instructions, value, returnType);
             instructions.add(new CfReturn(ValueType.fromDexType(returnType)));
             instructions.add(dest);
@@ -163,7 +163,7 @@
       // if (s == null) { throw npe("Name is null"); }
       CfLabel nullDest = new CfLabel();
       instructions.add(new CfLoad(ValueType.fromDexType(factory.stringType), 0));
-      instructions.add(new CfIf(If.Type.NE, ValueType.OBJECT, nullDest));
+      instructions.add(new CfIf(IfType.NE, ValueType.OBJECT, nullDest));
       instructions.add(new CfNew(factory.npeType));
       instructions.add(new CfStackInstruction(Opcode.Dup));
       instructions.add(new CfConstString(appView.dexItemFactory().createString("Name is null")));
@@ -182,7 +182,7 @@
             addCfInstructionsForAbstractValue(instructions, value, factory.stringType);
             instructions.add(
                 new CfInvoke(Opcodes.INVOKEVIRTUAL, factory.stringMembers.equals, false));
-            instructions.add(new CfIf(If.Type.EQ, ValueType.INT, dest));
+            instructions.add(new CfIf(IfType.EQ, ValueType.INT, dest));
             instructions.add(new CfConstNumber(unboxedEnumValue, ValueType.INT));
             instructions.add(new CfReturn(ValueType.INT));
             instructions.add(dest);
@@ -241,7 +241,7 @@
       List<CfInstruction> instructions = new ArrayList<>();
       CfLabel nullDest = new CfLabel();
       instructions.add(new CfStaticFieldRead(utilityField, utilityField));
-      instructions.add(new CfIf(If.Type.NE, ValueType.OBJECT, nullDest));
+      instructions.add(new CfIf(IfType.NE, ValueType.OBJECT, nullDest));
       instructions.add((new CfConstNumber(numEnumInstances, ValueType.INT)));
       assert initializationMethod.getArity() == 1;
       instructions.add(new CfInvoke(Opcodes.INVOKESTATIC, initializationMethod, false));
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 9e708cc..f79b740 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
@@ -8,8 +8,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.ProgramMethod;
-import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -32,7 +31,7 @@
     private DexMethod originalMethod;
     private DexType targetReceiver;
     private DexMethod target;
-    private Invoke.Type invokeType;
+    private InvokeType invokeType;
     private boolean castResult;
     private boolean isInterface;
     private boolean extraNullParameter;
@@ -67,7 +66,7 @@
       return this;
     }
 
-    public Builder setInvokeType(Type invokeType) {
+    public Builder setInvokeType(InvokeType invokeType) {
       this.invokeType = invokeType;
       return this;
     }
@@ -104,7 +103,7 @@
 
   private final DexType targetReceiver;
   private final DexMethod target;
-  private final Invoke.Type invokeType;
+  private final InvokeType invokeType;
   private final boolean castResult;
   private final boolean isInterface;
   private final boolean extraNullParameter;
@@ -115,13 +114,13 @@
       DexMethod originalMethod,
       DexType targetReceiver,
       DexMethod target,
-      Type invokeType,
+      InvokeType invokeType,
       Position callerPosition,
       boolean isInterface,
       boolean castResult,
       boolean extraNullParameter) {
     super(receiver, method, callerPosition, originalMethod);
-    assert (targetReceiver == null) == (invokeType == Invoke.Type.STATIC);
+    assert (targetReceiver == null) == (invokeType == InvokeType.STATIC);
 
     this.target = target;
     this.targetReceiver = targetReceiver;
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java
index f328c2c..6602826 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java
@@ -25,7 +25,7 @@
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.ValueType;
 import java.util.ArrayList;
@@ -168,7 +168,7 @@
       instructions.add(new CfInvoke(Opcodes.INVOKEVIRTUAL, factory.objectMembers.getClass, false));
       instructions.add(new CfLoad(objectType, 1));
       instructions.add(new CfInvoke(Opcodes.INVOKEVIRTUAL, factory.objectMembers.getClass, false));
-      instructions.add(new CfIfCmp(If.Type.EQ, ValueType.OBJECT, fieldCmp));
+      instructions.add(new CfIfCmp(IfType.EQ, ValueType.OBJECT, fieldCmp));
       instructions.add(new CfConstNumber(0, ValueType.INT));
       instructions.add(new CfReturn(ValueType.INT));
       instructions.add(fieldCmp);
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/EqualsCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/EqualsCfCodeProvider.java
index febbc58..02c7c9d 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/EqualsCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/EqualsCfCodeProvider.java
@@ -20,7 +20,7 @@
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.ir.synthetic.SyntheticCfCodeProvider;
 import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap;
@@ -57,7 +57,7 @@
     // other instanceof WrapperType
     instructions.add(new CfLoad(ValueType.OBJECT, 1));
     instructions.add(new CfInstanceOf(wrapperType));
-    instructions.add(new CfIf(If.Type.EQ, ValueType.INT, label1));
+    instructions.add(new CfIf(IfType.EQ, ValueType.INT, label1));
 
     // ((WrapperType) other).wrapperField
     instructions.add(new CfLoad(ValueType.OBJECT, 1));
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/NullableConversionCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/NullableConversionCfCodeProvider.java
index 8f0f2f4..cb117c5 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/NullableConversionCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/NullableConversionCfCodeProvider.java
@@ -36,7 +36,7 @@
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.MemberType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.ValueType;
@@ -55,7 +55,7 @@
   void generateNullCheck(List<CfInstruction> instructions) {
     CfLabel nullDest = new CfLabel();
     instructions.add(new CfLoad(ValueType.OBJECT, 0));
-    instructions.add(new CfIf(If.Type.NE, ValueType.OBJECT, nullDest));
+    instructions.add(new CfIf(IfType.NE, ValueType.OBJECT, nullDest));
     instructions.add(new CfConstNull());
     instructions.add(new CfReturn(ValueType.OBJECT));
     instructions.add(nullDest);
@@ -114,7 +114,7 @@
       instructions.add(frame);
       instructions.add(new CfLoad(ValueType.INT, 3));
       instructions.add(new CfLoad(ValueType.INT, 1));
-      instructions.add(new CfIfCmp(If.Type.GE, ValueType.INT, returnLabel));
+      instructions.add(new CfIfCmp(IfType.GE, ValueType.INT, returnLabel));
       // t2[t3] = convert(arg[t3]);
       instructions.add(new CfLoad(ValueType.fromDexType(convertedTypeArray), 2));
       instructions.add(new CfLoad(ValueType.INT, 3));
@@ -176,7 +176,7 @@
           instructions.add(new CfLoad(ValueType.fromDexType(enumType), 0));
           instructions.add(
               new CfStaticFieldRead(factory.createField(enumType, enumType, enumField.getName())));
-          instructions.add(new CfIfCmp(If.Type.NE, ValueType.OBJECT, notEqual));
+          instructions.add(new CfIfCmp(IfType.NE, ValueType.OBJECT, notEqual));
         }
         instructions.add(
             new CfStaticFieldRead(
@@ -225,7 +225,7 @@
       CfLabel unwrapDest = new CfLabel();
       instructions.add(new CfLoad(ValueType.fromDexType(argType), 0));
       instructions.add(new CfInstanceOf(reverseWrapperField.holder));
-      instructions.add(new CfIf(If.Type.EQ, ValueType.INT, unwrapDest));
+      instructions.add(new CfIf(IfType.EQ, ValueType.INT, unwrapDest));
       instructions.add(new CfLoad(ValueType.fromDexType(argType), 0));
       instructions.add(new CfCheckCast(reverseWrapperField.holder));
       instructions.add(new CfInstanceFieldRead(reverseWrapperField));
@@ -241,7 +241,7 @@
         DexType convertArgType = convert.getArgumentType(0, true);
         instructions.add(new CfLoad(ValueType.fromDexType(argType), 0));
         instructions.add(new CfInstanceOf(convertArgType));
-        instructions.add(new CfIf(If.Type.EQ, ValueType.INT, dest));
+        instructions.add(new CfIf(IfType.EQ, ValueType.INT, dest));
         instructions.add(new CfLoad(ValueType.fromDexType(argType), 0));
         instructions.add(new CfCheckCast(convertArgType));
         instructions.add(new CfInvoke(Opcodes.INVOKESTATIC, convert, false));
diff --git a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
index d0677f4..1f89cc6 100644
--- a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
@@ -23,7 +23,7 @@
 import com.android.tools.r8.ir.code.Goto;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InvokeDirect;
 import com.android.tools.r8.ir.code.InvokeVirtual;
@@ -315,7 +315,7 @@
     }
 
     @Override
-    public void onIf(Type ifKind, int blockIndex, int valueIndex) {
+    public void onIf(IfType ifKind, int blockIndex, int valueIndex) {
       BasicBlock targetBlock = getBasicBlock(blockIndex);
       Value value = getValue(valueIndex);
       addInstruction(new If(ifKind, value));
diff --git a/src/main/java/com/android/tools/r8/lightir/LirBuilder.java b/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
index 7ec7244..926d64f 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
@@ -15,7 +15,7 @@
 import com.android.tools.r8.ir.analysis.type.TypeElement;
 import com.android.tools.r8.ir.code.CatchHandlers;
 import com.android.tools.r8.ir.code.IRMetadata;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.Position;
 import com.android.tools.r8.ir.code.Position.SyntheticPosition;
@@ -345,7 +345,7 @@
     return this;
   }
 
-  public LirBuilder<V, B> addIf(Type ifKind, ValueType valueType, V value, B trueTarget) {
+  public LirBuilder<V, B> addIf(IfType ifKind, ValueType valueType, V value, B trueTarget) {
     int opcode;
     switch (ifKind) {
       case EQ:
@@ -380,7 +380,7 @@
   }
 
   public LirBuilder<V, B> addIfCmp(
-      Type ifKind, ValueType valueType, List<V> inValues, B trueTarget) {
+      IfType ifKind, ValueType valueType, List<V> inValues, B trueTarget) {
     int opcode;
     switch (ifKind) {
       case EQ:
diff --git a/src/main/java/com/android/tools/r8/lightir/LirParsedInstructionCallback.java b/src/main/java/com/android/tools/r8/lightir/LirParsedInstructionCallback.java
index dba40f8..5b72543 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirParsedInstructionCallback.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirParsedInstructionCallback.java
@@ -9,7 +9,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.If;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.NumericType;
 import it.unimi.dsi.fastutil.ints.IntArrayList;
 import it.unimi.dsi.fastutil.ints.IntList;
@@ -74,7 +74,7 @@
     onDiv(NumericType.INT, leftValueIndex, rightValueIndex);
   }
 
-  public void onIf(If.Type ifKind, int blockIndex, int valueIndex) {
+  public void onIf(IfType ifKind, int blockIndex, int valueIndex) {
     onInstruction();
   }
 
@@ -181,7 +181,7 @@
         {
           int blockIndex = view.getNextBlockOperand();
           int valueIndex = getNextValueOperand(view);
-          onIf(If.Type.NE, blockIndex, valueIndex);
+          onIf(IfType.NE, blockIndex, valueIndex);
           return;
         }
       case LirOpcodes.GOTO:
diff --git a/src/main/java/com/android/tools/r8/lightir/LirPrinter.java b/src/main/java/com/android/tools/r8/lightir/LirPrinter.java
index 93d117b..4e6e2d6 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirPrinter.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirPrinter.java
@@ -8,7 +8,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.utils.StringUtils;
 import it.unimi.dsi.fastutil.ints.IntList;
@@ -134,7 +134,7 @@
   }
 
   @Override
-  public void onIf(Type ifKind, int blockIndex, int valueIndex) {
+  public void onIf(IfType ifKind, int blockIndex, int valueIndex) {
     builder.append(fmtValueIndex(valueIndex)).append(' ').append(fmtInsnIndex(blockIndex));
   }
 
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
index b6abede..383c931 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
@@ -23,7 +23,7 @@
 import com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.BiForEachable;
@@ -68,7 +68,7 @@
       DexClassAndMethod resolvedMethod,
       SingleResolutionResult<?> resolutionResult,
       ProgramMethodSet contexts,
-      Type invokeType,
+      InvokeType invokeType,
       DexMethod original) {
     assert !resolvedMethod.isProgramMethod();
 
@@ -145,7 +145,7 @@
       DexClassAndMethod resolvedMethod,
       SingleResolutionResult<?> resolutionResult,
       ProgramMethodSet contexts,
-      Type invokeType,
+      InvokeType invokeType,
       DexMethod original) {
     // TODO(b/194422791): It could potentially be that `original.holder` is not a subtype of
     //  `original.holder` on all API levels, in which case it is not OK to rebind to the resolved
@@ -170,11 +170,11 @@
         context -> resolutionResult.isAccessibleFrom(context, appView.appInfo()).isTrue());
   }
 
-  private boolean isInvokeSuperToInterfaceMethod(DexClassAndMethod method, Type invokeType) {
+  private boolean isInvokeSuperToInterfaceMethod(DexClassAndMethod method, InvokeType invokeType) {
     return method.getHolder().isInterface() && invokeType.isSuper();
   }
 
-  private boolean isInvokeSuperToAbstractMethod(DexClassAndMethod method, Type invokeType) {
+  private boolean isInvokeSuperToAbstractMethod(DexClassAndMethod method, InvokeType invokeType) {
     return method.getAccessFlags().isAbstract() && invokeType.isSuper();
   }
 
@@ -264,24 +264,26 @@
   private void computeMethodRebinding(MethodAccessInfoCollection methodAccessInfoCollection) {
     // Virtual invokes are on classes, so use class resolution.
     computeMethodRebinding(
-        methodAccessInfoCollection::forEachVirtualInvoke, this::resolveMethodOnClass, Type.VIRTUAL);
+        methodAccessInfoCollection::forEachVirtualInvoke,
+        this::resolveMethodOnClass,
+        InvokeType.VIRTUAL);
     // Interface invokes are always on interfaces, so use interface resolution.
     computeMethodRebinding(
         methodAccessInfoCollection::forEachInterfaceInvoke,
         this::resolveMethodOnInterface,
-        Type.INTERFACE);
+        InvokeType.INTERFACE);
     // Super invokes can be on both kinds, decide using the holder class.
     computeMethodRebinding(
-        methodAccessInfoCollection::forEachSuperInvoke, this::resolveMethod, Type.SUPER);
+        methodAccessInfoCollection::forEachSuperInvoke, this::resolveMethod, InvokeType.SUPER);
     // Likewise static invokes.
     computeMethodRebinding(
-        methodAccessInfoCollection::forEachStaticInvoke, this::resolveMethod, Type.STATIC);
+        methodAccessInfoCollection::forEachStaticInvoke, this::resolveMethod, InvokeType.STATIC);
   }
 
   private void computeMethodRebinding(
       BiForEachable<DexMethod, ProgramMethodSet> methodsWithContexts,
       Function<DexMethod, MethodResolutionResult> resolver,
-      Type invokeType) {
+      InvokeType invokeType) {
     Map<DexProgramClass, List<Pair<DexMethod, DexClassAndMethod>>> bridges =
         new IdentityHashMap<>();
     TriConsumer<DexProgramClass, DexMethod, DexClassAndMethod> addBridge =
@@ -394,9 +396,9 @@
   }
 
   private boolean needsBridgeForInterfaceMethod(
-      DexClass originalClass, DexClassAndMethod method, Type invokeType) {
+      DexClass originalClass, DexClassAndMethod method, InvokeType invokeType) {
     return options.isGeneratingClassFiles()
-        && invokeType == Type.SUPER
+        && invokeType == InvokeType.SUPER
         && method.getHolder() != originalClass
         && method.getHolder().isInterface();
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
index 306d53e..367cd15 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
@@ -16,7 +16,7 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.GraphLens.NonIdentityGraphLens;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
-import com.android.tools.r8.ir.code.Invoke;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import java.util.Collections;
 import java.util.IdentityHashMap;
@@ -25,12 +25,12 @@
 public class MemberRebindingLens extends NonIdentityGraphLens {
 
   private final AppView<AppInfoWithLiveness> appView;
-  private final Map<Invoke.Type, Map<DexMethod, DexMethod>> methodMaps;
+  private final Map<InvokeType, Map<DexMethod, DexMethod>> methodMaps;
   private final Map<DexField, DexField> nonReboundFieldReferenceToDefinitionMap;
 
   public MemberRebindingLens(
       AppView<AppInfoWithLiveness> appView,
-      Map<Invoke.Type, Map<DexMethod, DexMethod>> methodMaps,
+      Map<InvokeType, Map<DexMethod, DexMethod>> methodMaps,
       Map<DexField, DexField> nonReboundFieldReferenceToDefinitionMap) {
     super(appView.dexItemFactory(), appView.graphLens());
     this.appView = appView;
@@ -167,7 +167,7 @@
   public static class Builder {
 
     private final AppView<AppInfoWithLiveness> appView;
-    private final Map<Invoke.Type, Map<DexMethod, DexMethod>> methodMaps = new IdentityHashMap<>();
+    private final Map<InvokeType, Map<DexMethod, DexMethod>> methodMaps = new IdentityHashMap<>();
     private final Map<DexField, DexField> nonReboundFieldReferenceToDefinitionMap =
         new IdentityHashMap<>();
 
@@ -175,7 +175,7 @@
       this.appView = appView;
     }
 
-    public void map(DexMethod from, DexMethod to, Invoke.Type type) {
+    public void map(DexMethod from, DexMethod to, InvokeType type) {
       if (from == to) {
         assert !methodMaps.containsKey(type) || methodMaps.get(type).getOrDefault(from, to) == to;
         return;
diff --git a/src/main/java/com/android/tools/r8/optimize/PublicizerLens.java b/src/main/java/com/android/tools/r8/optimize/PublicizerLens.java
index 322ccb1..a3365ce 100644
--- a/src/main/java/com/android/tools/r8/optimize/PublicizerLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/PublicizerLens.java
@@ -9,7 +9,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.NestedGraphLens;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.google.common.collect.Sets;
 import java.util.Set;
 
@@ -39,19 +39,21 @@
   @Override
   public MethodLookupResult internalDescribeLookupMethod(
       MethodLookupResult previous, DexMethod context) {
-    if (previous.getType() == Type.DIRECT && publicizedMethods.contains(previous.getReference())) {
+    if (previous.getType() == InvokeType.DIRECT
+        && publicizedMethods.contains(previous.getReference())) {
       assert publicizedMethodIsPresentOnHolder(previous.getReference(), context);
       return MethodLookupResult.builder(this)
           .setReference(previous.getReference())
           .setPrototypeChanges(previous.getPrototypeChanges())
-          .setType(Type.VIRTUAL)
+          .setType(InvokeType.VIRTUAL)
           .build();
     }
     return previous;
   }
 
   private boolean publicizedMethodIsPresentOnHolder(DexMethod method, DexMethod context) {
-    MethodLookupResult lookup = appView.graphLens().lookupMethod(method, context, Type.VIRTUAL);
+    MethodLookupResult lookup =
+        appView.graphLens().lookupMethod(method, context, InvokeType.VIRTUAL);
     DexMethod signatureInCurrentWorld = lookup.getReference();
     DexClass clazz = appView.definitionFor(signatureInCurrentWorld.holder);
     assert clazz != null;
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java
index fc48b5d..35b3a9c 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java
@@ -9,7 +9,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.NestedGraphLens;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.collections.BidirectionalOneToOneHashMap;
 import com.android.tools.r8.utils.collections.BidirectionalOneToOneMap;
@@ -100,12 +100,13 @@
   }
 
   @Override
-  protected Type mapInvocationType(DexMethod newMethod, DexMethod originalMethod, Type type) {
+  protected InvokeType mapInvocationType(
+      DexMethod newMethod, DexMethod originalMethod, InvokeType type) {
     return hasPrototypeChanges(newMethod)
             && getPrototypeChanges(newMethod)
                 .getArgumentInfoCollection()
                 .isConvertedToStaticMethod()
-        ? Type.STATIC
+        ? InvokeType.STATIC
         : super.mapInvocationType(newMethod, originalMethod, type);
   }
 
diff --git a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalLens.java b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalLens.java
index 042cc6a..343cece 100644
--- a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemovalLens.java
@@ -13,7 +13,7 @@
 import com.android.tools.r8.graph.GraphLens.NonIdentityGraphLens;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
-import com.android.tools.r8.ir.code.Invoke;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.google.common.collect.Sets;
 import java.util.IdentityHashMap;
 import java.util.Map;
@@ -91,7 +91,7 @@
           .setPrototypeChanges(previous.getPrototypeChanges())
           .setType(
               holderTypeIsInterface && previous.getType().isVirtual()
-                  ? Invoke.Type.INTERFACE
+                  ? InvokeType.INTERFACE
                   : previous.getType())
           .build();
     }
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index f7d7554..f0e4959 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -52,7 +52,7 @@
 import com.android.tools.r8.ir.analysis.type.DynamicType;
 import com.android.tools.r8.ir.analysis.type.TypeAnalysis;
 import com.android.tools.r8.ir.analysis.type.TypeElement;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.desugar.LambdaDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.apiconversion.DesugaredLibraryAPIConverter;
 import com.android.tools.r8.ir.desugar.itf.InterfaceDesugaringSyntheticHelper;
@@ -1258,7 +1258,7 @@
 
   public DexEncodedMethod lookupSingleTarget(
       AppView<? extends AppInfoWithClassHierarchy> appView,
-      Type type,
+      InvokeType type,
       DexMethod target,
       ProgramMethod context,
       LibraryModeledPredicate modeledPredicate) {
@@ -1285,7 +1285,7 @@
 
   public ProgramMethod lookupSingleProgramTarget(
       AppView<? extends AppInfoWithClassHierarchy> appView,
-      Type type,
+      InvokeType type,
       DexMethod target,
       ProgramMethod context,
       LibraryModeledPredicate modeledPredicate) {
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index dc4c7ea..4dd9d86 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -6,9 +6,9 @@
 import static com.android.tools.r8.dex.Constants.TEMPORARY_INSTANCE_INITIALIZER_PREFIX;
 import static com.android.tools.r8.graph.DexClassAndMethod.asProgramMethodOrNull;
 import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
-import static com.android.tools.r8.ir.code.Invoke.Type.DIRECT;
-import static com.android.tools.r8.ir.code.Invoke.Type.STATIC;
-import static com.android.tools.r8.ir.code.Invoke.Type.VIRTUAL;
+import static com.android.tools.r8.ir.code.InvokeType.DIRECT;
+import static com.android.tools.r8.ir.code.InvokeType.STATIC;
+import static com.android.tools.r8.ir.code.InvokeType.VIRTUAL;
 import static com.android.tools.r8.utils.AndroidApiLevelUtils.getApiReferenceLevelForMerging;
 
 import com.android.tools.r8.androidapi.AndroidApiLevelCompute;
@@ -64,7 +64,7 @@
 import com.android.tools.r8.graph.UseRegistryWithResult;
 import com.android.tools.r8.graph.classmerging.VerticallyMergedClasses;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.ir.code.Position.SyntheticPosition;
 import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
 import com.android.tools.r8.ir.optimize.MemberPoolCollection.MemberPool;
@@ -1451,7 +1451,7 @@
         DexEncodedMethod oldTarget, DexEncodedMethod newTarget) {
       DexMethod oldTargetReference = oldTarget.getReference();
       DexMethod newTargetReference = newTarget.getReference();
-      Type newTargetType = newTarget.isNonPrivateVirtualMethod() ? VIRTUAL : DIRECT;
+      InvokeType newTargetType = newTarget.isNonPrivateVirtualMethod() ? VIRTUAL : DIRECT;
       if (source.accessFlags.isInterface()) {
         // If we merge a default interface method from interface I to its subtype C, then we need
         // to rewrite invocations on the form "invoke-super I.m()" to "invoke-direct C.m$I()".
@@ -2064,7 +2064,7 @@
 
     @Override
     public MethodLookupResult lookupMethod(
-        DexMethod method, DexMethod context, Type type, GraphLens codeLens) {
+        DexMethod method, DexMethod context, InvokeType type, GraphLens codeLens) {
       // First look up the method using the existing graph lens (for example, the type will have
       // changed if the method was publicized by ClassAndMemberPublicizer).
       MethodLookupResult lookup = appView.graphLens().lookupMethod(method, context, type, codeLens);
@@ -2078,7 +2078,7 @@
               .setReference(newMethod)
               .setPrototypeChanges(lookup.getPrototypeChanges())
               .setType(lookup.getType());
-      if (lookup.getType() == Type.INTERFACE) {
+      if (lookup.getType() == InvokeType.INTERFACE) {
         // If an interface has been merged into a class, invoke-interface needs to be translated
         // to invoke-virtual.
         DexClass clazz = appInfo.definitionFor(newMethod.holder);
@@ -2359,14 +2359,14 @@
     private DexMethod method;
     private DexMethod originalMethod;
     private DexMethod invocationTarget;
-    private Type type;
+    private InvokeType type;
     private final boolean isInterface;
 
     public SynthesizedBridgeCode(
         DexMethod method,
         DexMethod originalMethod,
         DexMethod invocationTarget,
-        Type type,
+        InvokeType type,
         boolean isInterface) {
       this.method = method;
       this.originalMethod = originalMethod;
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
index d0f940b..259c35a 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
@@ -15,7 +15,7 @@
 import com.android.tools.r8.graph.classmerging.VerticallyMergedClasses;
 import com.android.tools.r8.graph.proto.ArgumentInfoCollection;
 import com.android.tools.r8.graph.proto.RewrittenPrototypeDescription;
-import com.android.tools.r8.ir.code.Invoke.Type;
+import com.android.tools.r8.ir.code.InvokeType;
 import com.android.tools.r8.utils.IterableUtils;
 import com.android.tools.r8.utils.collections.BidirectionalManyToOneRepresentativeHashMap;
 import com.android.tools.r8.utils.collections.BidirectionalManyToOneRepresentativeMap;
@@ -110,7 +110,7 @@
       MethodLookupResult previous, DexMethod context) {
     assert context != null || verifyIsContextFreeForMethod(previous.getReference());
     assert context == null || previous.getType() != null;
-    if (previous.getType() == Type.SUPER && !mergedMethods.contains(context)) {
+    if (previous.getType() == InvokeType.SUPER && !mergedMethods.contains(context)) {
       Map<DexMethod, GraphLensLookupResultProvider> virtualToDirectMethodMap =
           contextualVirtualToDirectMethodMaps.get(context.getHolderType());
       if (virtualToDirectMethodMap != null) {
@@ -159,7 +159,8 @@
   }
 
   @Override
-  protected Type mapInvocationType(DexMethod newMethod, DexMethod originalMethod, Type type) {
+  protected InvokeType mapInvocationType(
+      DexMethod newMethod, DexMethod originalMethod, InvokeType type) {
     return mapVirtualInterfaceInvocationTypes(appView, newMethod, originalMethod, type);
   }
 
diff --git a/src/main/java/com/android/tools/r8/startup/generated/InstrumentationServerImplFactory.java b/src/main/java/com/android/tools/r8/startup/generated/InstrumentationServerImplFactory.java
index fbe55a4..e971964 100644
--- a/src/main/java/com/android/tools/r8/startup/generated/InstrumentationServerImplFactory.java
+++ b/src/main/java/com/android/tools/r8/startup/generated/InstrumentationServerImplFactory.java
@@ -47,8 +47,8 @@
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.graph.MethodCollection.MethodCollectionFactory;
 import com.android.tools.r8.graph.NestHostClassAttribute;
-import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.Monitor;
+import com.android.tools.r8.ir.code.IfType;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.ValueType;
 import com.android.tools.r8.origin.Origin;
 import com.google.common.collect.ImmutableList;
@@ -340,7 +340,7 @@
                     factory.createString("lines"))),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
             new CfStore(ValueType.OBJECT, 2),
-            new CfMonitor(Monitor.Type.ENTER),
+            new CfMonitor(MonitorType.ENTER),
             label1,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -356,10 +356,10 @@
                     factory.createProto(factory.booleanType, factory.objectType),
                     factory.createString("add")),
                 false),
-            new CfIf(If.Type.NE, ValueType.INT, label4),
+            new CfIf(IfType.NE, ValueType.INT, label4),
             label2,
             new CfLoad(ValueType.OBJECT, 2),
-            new CfMonitor(Monitor.Type.EXIT),
+            new CfMonitor(MonitorType.EXIT),
             label3,
             new CfReturnVoid(),
             label4,
@@ -374,7 +374,7 @@
                       FrameType.initializedNonNullReference(factory.objectType)
                     })),
             new CfLoad(ValueType.OBJECT, 2),
-            new CfMonitor(Monitor.Type.EXIT),
+            new CfMonitor(MonitorType.EXIT),
             label5,
             new CfGoto(label8),
             label6,
@@ -392,7 +392,7 @@
                     Arrays.asList(FrameType.initializedNonNullReference(factory.throwableType)))),
             new CfStore(ValueType.OBJECT, 3),
             new CfLoad(ValueType.OBJECT, 2),
-            new CfMonitor(Monitor.Type.EXIT),
+            new CfMonitor(MonitorType.EXIT),
             label7,
             new CfLoad(ValueType.OBJECT, 3),
             new CfThrow(),
@@ -411,7 +411,7 @@
                     factory.createType("Lcom/android/tools/r8/startup/InstrumentationServerImpl;"),
                     factory.booleanType,
                     factory.createString("writeToLogcat"))),
-            new CfIf(If.Type.EQ, ValueType.INT, label10),
+            new CfIf(IfType.EQ, ValueType.INT, label10),
             label9,
             new CfLoad(ValueType.OBJECT, 0),
             new CfLoad(ValueType.OBJECT, 1),
@@ -542,7 +542,7 @@
                     factory.createString("lines"))),
             new CfStackInstruction(CfStackInstruction.Opcode.Dup),
             new CfStore(ValueType.OBJECT, 3),
-            new CfMonitor(Monitor.Type.ENTER),
+            new CfMonitor(MonitorType.ENTER),
             label2,
             new CfLoad(ValueType.OBJECT, 0),
             new CfInstanceFieldRead(
@@ -581,7 +581,7 @@
                     factory.createProto(factory.booleanType),
                     factory.createString("hasNext")),
                 true),
-            new CfIf(If.Type.EQ, ValueType.INT, label6),
+            new CfIf(IfType.EQ, ValueType.INT, label6),
             new CfLoad(ValueType.OBJECT, 4),
             new CfInvoke(
                 185,
@@ -618,7 +618,7 @@
                       FrameType.initializedNonNullReference(factory.objectType)
                     })),
             new CfLoad(ValueType.OBJECT, 3),
-            new CfMonitor(Monitor.Type.EXIT),
+            new CfMonitor(MonitorType.EXIT),
             label7,
             new CfGoto(label10),
             label8,
@@ -638,7 +638,7 @@
                     Arrays.asList(FrameType.initializedNonNullReference(factory.throwableType)))),
             new CfStore(ValueType.OBJECT, 6),
             new CfLoad(ValueType.OBJECT, 3),
-            new CfMonitor(Monitor.Type.EXIT),
+            new CfMonitor(MonitorType.EXIT),
             label9,
             new CfLoad(ValueType.OBJECT, 6),
             new CfThrow(),
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
index ea86918..019431d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
@@ -20,7 +20,7 @@
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.IRMetadata;
 import com.android.tools.r8.ir.code.If;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.NumberGenerator;
 import com.android.tools.r8.ir.code.Position;
@@ -164,7 +164,7 @@
     instruction = new Argument(value, 0, false);
     instruction.setPosition(position);
     block0.add(instruction, metadata);
-    instruction = new If(Type.EQ, value);
+    instruction = new If(IfType.EQ, value);
     instruction.setPosition(position);
     block0.add(instruction, metadata);
     block0.getMutableSuccessors().add(block2);
diff --git a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
index 54fe690..cdc2941 100644
--- a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
+++ b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
@@ -16,7 +16,7 @@
 import com.android.tools.r8.graph.DexCode;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.ir.code.Cmp.Bias;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.android.tools.r8.ir.code.SingleConstant;
 import com.android.tools.r8.ir.code.WideConstant;
 import com.android.tools.r8.utils.AndroidApp;
@@ -692,11 +692,11 @@
 
     final float a;
     final float b;
-    final Type type;
+    final IfType type;
     final Bias bias;
     final boolean expected;
 
-    FloatTestData(float a, float b, Type type, Bias bias) {
+    FloatTestData(float a, float b, IfType type, Bias bias) {
       this.a = a;
       this.b = b;
       this.type = type;
@@ -715,12 +715,12 @@
 
   private void cmpFloatMethodBuilder(SmaliBuilder builder, String name, Object parameters) {
     String[] ifOpcode = new String[6];
-    ifOpcode[Type.EQ.ordinal()] = "if-eqz";
-    ifOpcode[Type.NE.ordinal()] = "if-nez";
-    ifOpcode[Type.LE.ordinal()] = "if-lez";
-    ifOpcode[Type.GE.ordinal()] = "if-gez";
-    ifOpcode[Type.LT.ordinal()] = "if-ltz";
-    ifOpcode[Type.GT.ordinal()] = "if-gtz";
+    ifOpcode[IfType.EQ.ordinal()] = "if-eqz";
+    ifOpcode[IfType.NE.ordinal()] = "if-nez";
+    ifOpcode[IfType.LE.ordinal()] = "if-lez";
+    ifOpcode[IfType.GE.ordinal()] = "if-gez";
+    ifOpcode[IfType.LT.ordinal()] = "if-ltz";
+    ifOpcode[IfType.GT.ordinal()] = "if-gtz";
 
     FloatTestData test = (FloatTestData) parameters;
     String cmpInstruction;
@@ -765,7 +765,7 @@
     // Build the test configuration.
     for (int i = 0; i < testValues.length; i++) {
       for (int j = 0; j < testValues.length; j++) {
-        for (Type type : Type.values()) {
+        for (IfType type : IfType.values()) {
           for (Bias bias : Bias.values()) {
             if (bias == Bias.NONE) {
               // Bias NONE is only for long comparison.
@@ -779,10 +779,10 @@
               //
               // The numerical comparison operators <, <=, >, and >= return false if either or both
               // operands are NaN
-              if ((type == Type.GE || type == Type.GT) && bias == Bias.GT) {
+              if ((type == IfType.GE || type == IfType.GT) && bias == Bias.GT) {
                 continue;
               }
-              if ((type == Type.LE || type == Type.LT) && bias == Bias.LT) {
+              if ((type == IfType.LE || type == IfType.LT) && bias == Bias.LT) {
                 continue;
               }
             }
@@ -800,11 +800,11 @@
 
     final double a;
     final double b;
-    final Type type;
+    final IfType type;
     final Bias bias;
     final boolean expected;
 
-    DoubleTestData(double a, double b, Type type, Bias bias) {
+    DoubleTestData(double a, double b, IfType type, Bias bias) {
       this.a = a;
       this.b = b;
       this.type = type;
@@ -823,12 +823,12 @@
 
   private void cmpDoubleMethodBuilder(SmaliBuilder builder, String name, Object parameters) {
     String[] ifOpcode = new String[6];
-    ifOpcode[Type.EQ.ordinal()] = "if-eqz";
-    ifOpcode[Type.NE.ordinal()] = "if-nez";
-    ifOpcode[Type.LE.ordinal()] = "if-lez";
-    ifOpcode[Type.GE.ordinal()] = "if-gez";
-    ifOpcode[Type.LT.ordinal()] = "if-ltz";
-    ifOpcode[Type.GT.ordinal()] = "if-gtz";
+    ifOpcode[IfType.EQ.ordinal()] = "if-eqz";
+    ifOpcode[IfType.NE.ordinal()] = "if-nez";
+    ifOpcode[IfType.LE.ordinal()] = "if-lez";
+    ifOpcode[IfType.GE.ordinal()] = "if-gez";
+    ifOpcode[IfType.LT.ordinal()] = "if-ltz";
+    ifOpcode[IfType.GT.ordinal()] = "if-gtz";
 
     DoubleTestData test = (DoubleTestData) parameters;
     String cmpInstruction;
@@ -874,7 +874,7 @@
     // Build the test configuration.
     for (int i = 0; i < testValues.length; i++) {
       for (int j = 0; j < testValues.length; j++) {
-        for (Type type : Type.values()) {
+        for (IfType type : IfType.values()) {
           for (Bias bias : Bias.values()) {
             if (bias == Bias.NONE) {
               // Bias NONE is only for long comparison.
@@ -887,10 +887,10 @@
               //
               // The numerical comparison operators <, <=, >, and >= return false if either or both
               // operands are NaN
-              if ((type == Type.GE || type == Type.GT) && bias == Bias.GT) {
+              if ((type == IfType.GE || type == IfType.GT) && bias == Bias.GT) {
                 continue;
               }
-              if ((type == Type.LE || type == Type.LT) && bias == Bias.LT) {
+              if ((type == IfType.LE || type == IfType.LT) && bias == Bias.LT) {
                 continue;
               }
             }
diff --git a/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java b/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java
index fd50cd6..9642e4e 100644
--- a/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java
+++ b/src/test/java/com/android/tools/r8/smali/IfSimplificationTest.java
@@ -19,7 +19,7 @@
 import com.android.tools.r8.dex.code.DexReturnObject;
 import com.android.tools.r8.graph.DexCode;
 import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.ir.code.If.Type;
+import com.android.tools.r8.ir.code.IfType;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import java.util.ArrayList;
@@ -32,12 +32,12 @@
   static String[] ifOpcode;
   static {
     ifOpcode = new String[6];
-    ifOpcode[Type.EQ.ordinal()] = "if-eq";
-    ifOpcode[Type.NE.ordinal()] = "if-ne";
-    ifOpcode[Type.LE.ordinal()] = "if-le";
-    ifOpcode[Type.GE.ordinal()] = "if-ge";
-    ifOpcode[Type.LT.ordinal()] = "if-lt";
-    ifOpcode[Type.GT.ordinal()] = "if-gt";
+    ifOpcode[IfType.EQ.ordinal()] = "if-eq";
+    ifOpcode[IfType.NE.ordinal()] = "if-ne";
+    ifOpcode[IfType.LE.ordinal()] = "if-le";
+    ifOpcode[IfType.GE.ordinal()] = "if-ge";
+    ifOpcode[IfType.LT.ordinal()] = "if-lt";
+    ifOpcode[IfType.GT.ordinal()] = "if-gt";
   }
 
   @Test
@@ -216,12 +216,12 @@
         this.a = a;
         this.b = b;
         results = new boolean[6];
-        results[Type.EQ.ordinal()] = a == b;
-        results[Type.NE.ordinal()] = a != b;
-        results[Type.LE.ordinal()] = a <= b;
-        results[Type.GE.ordinal()] = a >= b;
-        results[Type.LT.ordinal()] = a < b;
-        results[Type.GT.ordinal()] = a > b;
+        results[IfType.EQ.ordinal()] = a == b;
+        results[IfType.NE.ordinal()] = a != b;
+        results[IfType.LE.ordinal()] = a <= b;
+        results[IfType.GE.ordinal()] = a >= b;
+        results[IfType.LT.ordinal()] = a < b;
+        results[IfType.GT.ordinal()] = a > b;
       }
     }
 
@@ -241,7 +241,7 @@
     }
 
     for (TestData test : tests) {
-      for (Type type : Type.values()) {
+      for (IfType type : IfType.values()) {
         DexEncodedMethod method = oneMethodApplication(
             "int",
             Collections.singletonList("int"),
@@ -265,7 +265,7 @@
     }
   }
 
-  public void runRewriteIfWithConstZeroTest(Type type, boolean zeroLeft, Class expected) {
+  public void runRewriteIfWithConstZeroTest(IfType type, boolean zeroLeft, Class expected) {
     String ifInstruction;
     if (zeroLeft) {
       ifInstruction = "  " + ifOpcode[type.ordinal()] + " v0, v1, :label_2";
@@ -293,19 +293,19 @@
 
   @Test
   public void testRewriteIfWithConstZero() {
-    runRewriteIfWithConstZeroTest(Type.EQ, true, DexIfEqz.class);
-    runRewriteIfWithConstZeroTest(Type.NE, true, DexIfNez.class);
-    runRewriteIfWithConstZeroTest(Type.LE, true, DexIfGez.class);
-    runRewriteIfWithConstZeroTest(Type.GE, true, DexIfLez.class);
-    runRewriteIfWithConstZeroTest(Type.LT, true, DexIfGtz.class);
-    runRewriteIfWithConstZeroTest(Type.GT, true, DexIfLtz.class);
+    runRewriteIfWithConstZeroTest(IfType.EQ, true, DexIfEqz.class);
+    runRewriteIfWithConstZeroTest(IfType.NE, true, DexIfNez.class);
+    runRewriteIfWithConstZeroTest(IfType.LE, true, DexIfGez.class);
+    runRewriteIfWithConstZeroTest(IfType.GE, true, DexIfLez.class);
+    runRewriteIfWithConstZeroTest(IfType.LT, true, DexIfGtz.class);
+    runRewriteIfWithConstZeroTest(IfType.GT, true, DexIfLtz.class);
 
-    runRewriteIfWithConstZeroTest(Type.EQ, false, DexIfEqz.class);
-    runRewriteIfWithConstZeroTest(Type.NE, false, DexIfNez.class);
-    runRewriteIfWithConstZeroTest(Type.LE, false, DexIfLez.class);
-    runRewriteIfWithConstZeroTest(Type.GE, false, DexIfGez.class);
-    runRewriteIfWithConstZeroTest(Type.LT, false, DexIfLtz.class);
-    runRewriteIfWithConstZeroTest(Type.GT, false, DexIfGtz.class);
+    runRewriteIfWithConstZeroTest(IfType.EQ, false, DexIfEqz.class);
+    runRewriteIfWithConstZeroTest(IfType.NE, false, DexIfNez.class);
+    runRewriteIfWithConstZeroTest(IfType.LE, false, DexIfLez.class);
+    runRewriteIfWithConstZeroTest(IfType.GE, false, DexIfGez.class);
+    runRewriteIfWithConstZeroTest(IfType.LT, false, DexIfLtz.class);
+    runRewriteIfWithConstZeroTest(IfType.GT, false, DexIfGtz.class);
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
index b56008f..2e2e926 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
@@ -38,7 +38,7 @@
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.ir.code.Monitor.Type;
+import com.android.tools.r8.ir.code.MonitorType;
 import com.android.tools.r8.ir.code.ValueType;
 import java.util.Iterator;
 import org.objectweb.asm.Opcodes;
@@ -351,7 +351,7 @@
       return false;
     }
     CfMonitor monitor = (CfMonitor) instruction;
-    return monitor.getType() == Type.ENTER;
+    return monitor.getType() == MonitorType.ENTER;
   }
 
   @Override
@@ -360,7 +360,7 @@
       return false;
     }
     CfMonitor monitor = (CfMonitor) instruction;
-    return monitor.getType() == Type.EXIT;
+    return monitor.getType() == MonitorType.EXIT;
   }
 
   @Override