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 08b3ab8..5e80e07ef 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
@@ -24,6 +24,7 @@
 import com.android.tools.r8.ir.optimize.Inliner.Reason;
 import com.android.tools.r8.ir.optimize.InliningConstraints;
 import com.android.tools.r8.ir.optimize.inliner.WhyAreYouNotInliningReporter;
+import com.android.tools.r8.lightir.LirBuilder;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
 import java.util.List;
@@ -112,6 +113,11 @@
   }
 
   @Override
+  public void buildLir(LirBuilder<Value, ?> builder) {
+    builder.addInvokePolymorphic(getInvokedMethod(), getProto(), arguments());
+  }
+
+  @Override
   public boolean identicalNonValueNonPositionParts(Instruction other) {
     return other.isInvokePolymorphic()
         && proto.equals(other.asInvokePolymorphic().proto)
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 ef76924..421be9b 100644
--- a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
@@ -51,6 +51,7 @@
 import com.android.tools.r8.ir.code.InvokeInterface;
 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.InvokeStatic;
 import com.android.tools.r8.ir.code.InvokeSuper;
 import com.android.tools.r8.ir.code.InvokeVirtual;
@@ -631,6 +632,14 @@
       addInstruction(instruction);
     }
 
+    @Override
+    public void onInvokePolymorphic(DexMethod target, DexProto proto, List<EV> arguments) {
+      Value dest = getInvokeInstructionOutputValue(target);
+      List<Value> ssaArgumentValues = getValues(arguments);
+      InvokePolymorphic instruction = new InvokePolymorphic(target, proto, dest, ssaArgumentValues);
+      addInstruction(instruction);
+    }
+
     private Value getInvokeInstructionOutputValue(DexMethod target) {
       return getInvokeInstructionOutputValue(target.getProto());
     }
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 bfd9541..60df1eb 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
@@ -16,6 +16,7 @@
 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.DexProto;
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
@@ -532,6 +533,12 @@
     return addInvokeInstruction(LirOpcodes.INVOKEDYNAMIC, callSite, arguments);
   }
 
+  public LirBuilder<V, EV> addInvokePolymorphic(
+      DexMethod invokedMethod, DexProto proto, List<V> arguments) {
+    return addInstructionTemplate(
+        LirOpcodes.INVOKEPOLYMORPHIC, ImmutableList.of(invokedMethod, proto), arguments);
+  }
+
   public LirBuilder<V, EV> addNewInstance(DexType clazz) {
     return addOneItemInstruction(LirOpcodes.NEW, clazz);
   }
diff --git a/src/main/java/com/android/tools/r8/lightir/LirOpcodes.java b/src/main/java/com/android/tools/r8/lightir/LirOpcodes.java
index 7df9b5a..0f0811d 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirOpcodes.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirOpcodes.java
@@ -206,6 +206,7 @@
   int LNOT = 219;
   int DEBUGLOCALREAD = 220;
   int INITCLASS = 221;
+  int INVOKEPOLYMORPHIC = 222;
 
   static String toString(int opcode) {
     switch (opcode) {
@@ -534,6 +535,8 @@
         return "DEBUGLOCALREAD";
       case INITCLASS:
         return "INITCLASS";
+      case INVOKEPOLYMORPHIC:
+        return "INVOKEPOLYMORPHIC";
 
       default:
         throw new Unreachable("Unexpected LIR opcode: " + opcode);
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 9761ef4..781db23 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirParsedInstructionCallback.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirParsedInstructionCallback.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexItem;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
@@ -417,6 +418,10 @@
     onInstruction();
   }
 
+  public void onInvokePolymorphic(DexMethod target, DexProto proto, List<EV> arguments) {
+    onInstruction();
+  }
+
   public void onNewInstance(DexType clazz) {
     onInstruction();
   }
@@ -1001,6 +1006,14 @@
           onInvokeCustom(callSite, arguments);
           return;
         }
+      case LirOpcodes.INVOKEPOLYMORPHIC:
+        {
+          DexMethod target = getInvokeInstructionTarget(view);
+          DexProto proto = (DexProto) getConstantItem(view.getNextConstantOperand());
+          List<EV> arguments = getInvokeInstructionArguments(view);
+          onInvokePolymorphic(target, proto, arguments);
+          return;
+        }
       case LirOpcodes.NEW:
         {
           DexItem item = getConstantItem(view.getNextConstantOperand());
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 74d0956..b20e303 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirPrinter.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirPrinter.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.graph.DexCallSite;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexProto;
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
@@ -273,6 +274,12 @@
   }
 
   @Override
+  public void onInvokePolymorphic(DexMethod target, DexProto proto, List<EV> arguments) {
+    appendValueArguments(arguments);
+    builder.append(target).append(' ').append(proto);
+  }
+
+  @Override
   public void onStaticGet(DexField field) {
     appendOutValue();
     builder.append(field).append(' ');
