diff --git a/src/compiler/CompilerIR.h b/src/compiler/CompilerIR.h
index 914d2ab..02c7621 100644
--- a/src/compiler/CompilerIR.h
+++ b/src/compiler/CompilerIR.h
@@ -688,7 +688,6 @@
   kThrowNullPointer,
   kThrowDivZero,
   kThrowArrayBounds,
-  kThrowVerificationError,
   kThrowNoSuchMethod,
   kThrowStackOverflow,
 };
diff --git a/src/compiler/codegen/GenCommon.cc b/src/compiler/codegen/GenCommon.cc
index 6cb701f..8c431f5 100644
--- a/src/compiler/codegen/GenCommon.cc
+++ b/src/compiler/codegen/GenCommon.cc
@@ -829,13 +829,6 @@
 #endif
 }
 
-void genThrowVerificationError(CompilationUnit* cUnit, int info1, int info2)
-{
-  callRuntimeHelperImmImm(cUnit,
-                          ENTRYPOINT_OFFSET(pThrowVerificationErrorFromCode),
-                          info1, info2);
-}
-
 void handleSuspendLaunchpads(CompilationUnit *cUnit)
 {
   LIR** suspendLabel = (LIR **)cUnit->suspendLaunchpads.elemList;
@@ -929,12 +922,6 @@
       case kThrowDivZero:
         funcOffset = ENTRYPOINT_OFFSET(pThrowDivZeroFromCode);
         break;
-      case kThrowVerificationError:
-        loadConstant(cUnit, rARG0, v1);
-        loadConstant(cUnit, rARG1, v2);
-        funcOffset =
-          ENTRYPOINT_OFFSET(pThrowVerificationErrorFromCode);
-        break;
       case kThrowNoSuchMethod:
         opRegCopy(cUnit, rARG0, v1);
         funcOffset =
diff --git a/src/compiler/codegen/MethodBitcode.cc b/src/compiler/codegen/MethodBitcode.cc
index 6b78765..c84d6d3 100644
--- a/src/compiler/codegen/MethodBitcode.cc
+++ b/src/compiler/codegen/MethodBitcode.cc
@@ -378,16 +378,6 @@
   defineValue(cUnit, res, rlDest.origSReg);
 }
 
-void convertThrowVerificationError(CompilationUnit* cUnit, int info1, int info2)
-{
-  llvm::Function* func = cUnit->intrinsic_helper->GetIntrinsicFunction(
-      greenland::IntrinsicHelper::ThrowVerificationError);
-  llvm::SmallVector<llvm::Value*, 2> args;
-  args.push_back(cUnit->irb->getInt32(info1));
-  args.push_back(cUnit->irb->getInt32(info2));
-  cUnit->irb->CreateCall(func, args);
-}
-
 void emitSuspendCheck(CompilationUnit* cUnit)
 {
   greenland::IntrinsicHelper::IntrinsicId id =
@@ -1359,29 +1349,13 @@
       }
       break;
 
-   case Instruction::THROW_VERIFICATION_ERROR:
-      convertThrowVerificationError(cUnit, vA, vB);
-      UNIMPLEMENTED(WARNING) << "Need dead code elimination pass"
-                             << " - disabling bitcode verification";
-      cUnit->enableDebug &= ~(1 << kDebugVerifyBitcode);
-      break;
-
     case Instruction::MOVE_RESULT_WIDE:
     case Instruction::MOVE_RESULT:
     case Instruction::MOVE_RESULT_OBJECT:
-#if defined(TARGET_ARM)
       /*
-       * Instruction rewriting on verification failure can eliminate
-       * the invoke that feeds this move0result.  It won't ever be reached,
-       * so we can ignore it.
-       * TODO: verify that previous instruction is THROW_VERIFICATION_ERROR,
-       * or better, add dead-code elimination.
+       * All move_results should have been folded into the preceeding invoke.
        */
-      UNIMPLEMENTED(WARNING) << "Need to verify previous inst was rewritten";
-#else
-      UNIMPLEMENTED(WARNING) << "need x86 move-result fusing";
-#endif
-
+      LOG(FATAL) << "Unexpected move_result";
       break;
 
     case Instruction::MONITOR_ENTER:
@@ -2632,16 +2606,6 @@
   genInstanceof(cUnit, typeIdx, rlDest, rlSrc);
 }
 
-void cvtThrowVerificationError(CompilationUnit* cUnit, llvm::CallInst* callInst)
-{
-  DCHECK_EQ(callInst->getNumArgOperands(), 2U);
-  llvm::ConstantInt* info1 =
-      llvm::dyn_cast<llvm::ConstantInt>(callInst->getArgOperand(0));
-  llvm::ConstantInt* info2 =
-      llvm::dyn_cast<llvm::ConstantInt>(callInst->getArgOperand(1));
-  genThrowVerificationError(cUnit, info1->getZExtValue(), info2->getZExtValue());
-}
-
 void cvtThrow(CompilationUnit* cUnit, llvm::CallInst* callInst)
 {
   DCHECK_EQ(callInst->getNumArgOperands(), 1U);
@@ -3103,9 +3067,6 @@
             case greenland::IntrinsicHelper::Throw:
               cvtThrow(cUnit, callInst);
               break;
-            case greenland::IntrinsicHelper::ThrowVerificationError:
-              cvtThrowVerificationError(cUnit, callInst);
-              break;
             case greenland::IntrinsicHelper::MonitorEnter:
               cvtMonitorEnterExit(cUnit, true /* isEnter */, callInst);
               break;
diff --git a/src/compiler/codegen/MethodCodegenDriver.cc b/src/compiler/codegen/MethodCodegenDriver.cc
index 5337726..b4e14ce 100644
--- a/src/compiler/codegen/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/MethodCodegenDriver.cc
@@ -214,7 +214,6 @@
   RegLocation rlResult = badLoc;
   Instruction::Code opcode = mir->dalvikInsn.opcode;
   int optFlags = mir->optimizationFlags;
-  uint32_t vA = mir->dalvikInsn.vA;
   uint32_t vB = mir->dalvikInsn.vB;
   uint32_t vC = mir->dalvikInsn.vC;
 
@@ -386,10 +385,6 @@
       genThrow(cUnit, rlSrc[0]);
       break;
 
-    case Instruction::THROW_VERIFICATION_ERROR:
-      genThrowVerificationError(cUnit, vA, vB);
-      break;
-
     case Instruction::ARRAY_LENGTH:
       int lenOffset;
       lenOffset = Array::LengthOffset().Int32Value();
diff --git a/src/compiler_llvm/art_module.ll b/src/compiler_llvm/art_module.ll
index 124b9b7..7ea12f9 100644
--- a/src/compiler_llvm/art_module.ll
+++ b/src/compiler_llvm/art_module.ll
@@ -59,7 +59,6 @@
 declare void @art_throw_null_pointer_exception_from_code(i32)
 declare void @art_throw_stack_overflow_from_code()
 declare void @art_throw_exception_from_code(%JavaObject*)
-declare void @art_throw_verification_error_from_code(%JavaObject*, i32, i32)
 
 declare i32 @art_find_catch_block_from_code(%JavaObject*, i32)
 
diff --git a/src/compiler_llvm/generated/art_module.cc b/src/compiler_llvm/generated/art_module.cc
index 2111339..aac4cd8 100644
--- a/src/compiler_llvm/generated/art_module.cc
+++ b/src/compiler_llvm/generated/art_module.cc
@@ -130,23 +130,24 @@
 std::vector<Type*>FuncTy_12_args;
 FuncTy_12_args.push_back(PointerTy_1);
 FuncTy_12_args.push_back(IntegerType::get(mod->getContext(), 32));
-FuncTy_12_args.push_back(IntegerType::get(mod->getContext(), 32));
 FunctionType* FuncTy_12 = FunctionType::get(
- /*Result=*/Type::getVoidTy(mod->getContext()),
+ /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_12_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_13_args;
-FuncTy_13_args.push_back(PointerTy_1);
 FuncTy_13_args.push_back(IntegerType::get(mod->getContext(), 32));
+FuncTy_13_args.push_back(PointerTy_1);
+FuncTy_13_args.push_back(PointerTy_1);
 FunctionType* FuncTy_13 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 32),
+ /*Result=*/PointerTy_1,
  /*Params=*/FuncTy_13_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_14_args;
 FuncTy_14_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_14_args.push_back(PointerTy_1);
+FuncTy_14_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_14_args.push_back(PointerTy_1);
 FunctionType* FuncTy_14 = FunctionType::get(
  /*Result=*/PointerTy_1,
@@ -156,43 +157,42 @@
 std::vector<Type*>FuncTy_15_args;
 FuncTy_15_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_15_args.push_back(PointerTy_1);
-FuncTy_15_args.push_back(IntegerType::get(mod->getContext(), 32));
-FuncTy_15_args.push_back(PointerTy_1);
 FunctionType* FuncTy_15 = FunctionType::get(
- /*Result=*/PointerTy_1,
+ /*Result=*/Type::getVoidTy(mod->getContext()),
  /*Params=*/FuncTy_15_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_16_args;
 FuncTy_16_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_16_args.push_back(PointerTy_1);
+FuncTy_16_args.push_back(PointerTy_1);
+FuncTy_16_args.push_back(PointerTy_1);
 FunctionType* FuncTy_16 = FunctionType::get(
- /*Result=*/Type::getVoidTy(mod->getContext()),
+ /*Result=*/PointerTy_1,
  /*Params=*/FuncTy_16_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_17_args;
+FuncTy_17_args.push_back(PointerTy_1);
 FuncTy_17_args.push_back(IntegerType::get(mod->getContext(), 32));
-FuncTy_17_args.push_back(PointerTy_1);
-FuncTy_17_args.push_back(PointerTy_1);
-FuncTy_17_args.push_back(PointerTy_1);
 FunctionType* FuncTy_17 = FunctionType::get(
  /*Result=*/PointerTy_1,
  /*Params=*/FuncTy_17_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_18_args;
+FuncTy_18_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_18_args.push_back(PointerTy_1);
 FuncTy_18_args.push_back(IntegerType::get(mod->getContext(), 32));
 FunctionType* FuncTy_18 = FunctionType::get(
- /*Result=*/PointerTy_1,
+ /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_18_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_19_args;
 FuncTy_19_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_19_args.push_back(PointerTy_1);
-FuncTy_19_args.push_back(IntegerType::get(mod->getContext(), 32));
+FuncTy_19_args.push_back(IntegerType::get(mod->getContext(), 64));
 FunctionType* FuncTy_19 = FunctionType::get(
  /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_19_args,
@@ -201,7 +201,7 @@
 std::vector<Type*>FuncTy_20_args;
 FuncTy_20_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_20_args.push_back(PointerTy_1);
-FuncTy_20_args.push_back(IntegerType::get(mod->getContext(), 64));
+FuncTy_20_args.push_back(PointerTy_1);
 FunctionType* FuncTy_20 = FunctionType::get(
  /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_20_args,
@@ -210,7 +210,6 @@
 std::vector<Type*>FuncTy_21_args;
 FuncTy_21_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_21_args.push_back(PointerTy_1);
-FuncTy_21_args.push_back(PointerTy_1);
 FunctionType* FuncTy_21 = FunctionType::get(
  /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_21_args,
@@ -220,7 +219,7 @@
 FuncTy_22_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_22_args.push_back(PointerTy_1);
 FunctionType* FuncTy_22 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 32),
+ /*Result=*/IntegerType::get(mod->getContext(), 64),
  /*Params=*/FuncTy_22_args,
  /*isVarArg=*/false);
 
@@ -228,15 +227,17 @@
 FuncTy_23_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_23_args.push_back(PointerTy_1);
 FunctionType* FuncTy_23 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 64),
+ /*Result=*/PointerTy_1,
  /*Params=*/FuncTy_23_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_24_args;
 FuncTy_24_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_24_args.push_back(PointerTy_1);
+FuncTy_24_args.push_back(PointerTy_1);
+FuncTy_24_args.push_back(IntegerType::get(mod->getContext(), 32));
 FunctionType* FuncTy_24 = FunctionType::get(
- /*Result=*/PointerTy_1,
+ /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_24_args,
  /*isVarArg=*/false);
 
@@ -244,7 +245,7 @@
 FuncTy_25_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_25_args.push_back(PointerTy_1);
 FuncTy_25_args.push_back(PointerTy_1);
-FuncTy_25_args.push_back(IntegerType::get(mod->getContext(), 32));
+FuncTy_25_args.push_back(IntegerType::get(mod->getContext(), 64));
 FunctionType* FuncTy_25 = FunctionType::get(
  /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_25_args,
@@ -254,7 +255,7 @@
 FuncTy_26_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_26_args.push_back(PointerTy_1);
 FuncTy_26_args.push_back(PointerTy_1);
-FuncTy_26_args.push_back(IntegerType::get(mod->getContext(), 64));
+FuncTy_26_args.push_back(PointerTy_1);
 FunctionType* FuncTy_26 = FunctionType::get(
  /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_26_args,
@@ -264,88 +265,87 @@
 FuncTy_27_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_27_args.push_back(PointerTy_1);
 FuncTy_27_args.push_back(PointerTy_1);
-FuncTy_27_args.push_back(PointerTy_1);
 FunctionType* FuncTy_27 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 32),
+ /*Result=*/IntegerType::get(mod->getContext(), 64),
  /*Params=*/FuncTy_27_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_28_args;
-FuncTy_28_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_28_args.push_back(PointerTy_1);
 FuncTy_28_args.push_back(PointerTy_1);
 FunctionType* FuncTy_28 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 64),
+ /*Result=*/PointerTy_1,
  /*Params=*/FuncTy_28_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_29_args;
 FuncTy_29_args.push_back(PointerTy_1);
+FuncTy_29_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_29_args.push_back(PointerTy_1);
+FuncTy_29_args.push_back(IntegerType::get(mod->getContext(), 32));
 FunctionType* FuncTy_29 = FunctionType::get(
- /*Result=*/PointerTy_1,
+ /*Result=*/Type::getVoidTy(mod->getContext()),
  /*Params=*/FuncTy_29_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_30_args;
 FuncTy_30_args.push_back(PointerTy_1);
-FuncTy_30_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_30_args.push_back(PointerTy_1);
-FuncTy_30_args.push_back(IntegerType::get(mod->getContext(), 32));
 FunctionType* FuncTy_30 = FunctionType::get(
- /*Result=*/Type::getVoidTy(mod->getContext()),
+ /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_30_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_31_args;
-FuncTy_31_args.push_back(PointerTy_1);
-FuncTy_31_args.push_back(PointerTy_1);
+FuncTy_31_args.push_back(Type::getDoubleTy(mod->getContext()));
 FunctionType* FuncTy_31 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 32),
+ /*Result=*/IntegerType::get(mod->getContext(), 64),
  /*Params=*/FuncTy_31_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_32_args;
 FuncTy_32_args.push_back(Type::getDoubleTy(mod->getContext()));
 FunctionType* FuncTy_32 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 64),
+ /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_32_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_33_args;
-FuncTy_33_args.push_back(Type::getDoubleTy(mod->getContext()));
+FuncTy_33_args.push_back(Type::getFloatTy(mod->getContext()));
 FunctionType* FuncTy_33 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 32),
+ /*Result=*/IntegerType::get(mod->getContext(), 64),
  /*Params=*/FuncTy_33_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_34_args;
 FuncTy_34_args.push_back(Type::getFloatTy(mod->getContext()));
 FunctionType* FuncTy_34 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 64),
+ /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_34_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_35_args;
-FuncTy_35_args.push_back(Type::getFloatTy(mod->getContext()));
+FuncTy_35_args.push_back(PointerTy_1);
 FunctionType* FuncTy_35 = FunctionType::get(
  /*Result=*/IntegerType::get(mod->getContext(), 32),
  /*Params=*/FuncTy_35_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_36_args;
+FuncTy_36_args.push_back(IntegerType::get(mod->getContext(), 32));
+FuncTy_36_args.push_back(PointerTy_1);
 FuncTy_36_args.push_back(PointerTy_1);
 FunctionType* FuncTy_36 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 32),
+ /*Result=*/Type::getVoidTy(mod->getContext()),
  /*Params=*/FuncTy_36_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_37_args;
+FuncTy_37_args.push_back(PointerTy_1);
 FuncTy_37_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_37_args.push_back(PointerTy_1);
-FuncTy_37_args.push_back(PointerTy_1);
 FunctionType* FuncTy_37 = FunctionType::get(
- /*Result=*/Type::getVoidTy(mod->getContext()),
+ /*Result=*/PointerTy_1,
  /*Params=*/FuncTy_37_args,
  /*isVarArg=*/false);
 
@@ -353,32 +353,23 @@
 FuncTy_38_args.push_back(PointerTy_1);
 FuncTy_38_args.push_back(IntegerType::get(mod->getContext(), 32));
 FuncTy_38_args.push_back(PointerTy_1);
+FuncTy_38_args.push_back(PointerTy_1);
 FunctionType* FuncTy_38 = FunctionType::get(
  /*Result=*/PointerTy_1,
  /*Params=*/FuncTy_38_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_39_args;
-FuncTy_39_args.push_back(PointerTy_1);
-FuncTy_39_args.push_back(IntegerType::get(mod->getContext(), 32));
-FuncTy_39_args.push_back(PointerTy_1);
-FuncTy_39_args.push_back(PointerTy_1);
 FunctionType* FuncTy_39 = FunctionType::get(
- /*Result=*/PointerTy_1,
+ /*Result=*/IntegerType::get(mod->getContext(), 1),
  /*Params=*/FuncTy_39_args,
  /*isVarArg=*/false);
 
 std::vector<Type*>FuncTy_40_args;
+FuncTy_40_args.push_back(PointerTy_1);
 FunctionType* FuncTy_40 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 1),
- /*Params=*/FuncTy_40_args,
- /*isVarArg=*/false);
-
-std::vector<Type*>FuncTy_41_args;
-FuncTy_41_args.push_back(PointerTy_1);
-FunctionType* FuncTy_41 = FunctionType::get(
  /*Result=*/Type::getVoidTy(mod->getContext()),
- /*Params=*/FuncTy_41_args,
+ /*Params=*/FuncTy_40_args,
  /*isVarArg=*/true);
 
 
@@ -538,21 +529,10 @@
 AttrListPtr func_art_throw_exception_from_code_PAL;
 func_art_throw_exception_from_code->setAttributes(func_art_throw_exception_from_code_PAL);
 
-Function* func_art_throw_verification_error_from_code = mod->getFunction("art_throw_verification_error_from_code");
-if (!func_art_throw_verification_error_from_code) {
-func_art_throw_verification_error_from_code = Function::Create(
- /*Type=*/FuncTy_12,
- /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"art_throw_verification_error_from_code", mod); // (external, no body)
-func_art_throw_verification_error_from_code->setCallingConv(CallingConv::C);
-}
-AttrListPtr func_art_throw_verification_error_from_code_PAL;
-func_art_throw_verification_error_from_code->setAttributes(func_art_throw_verification_error_from_code_PAL);
-
 Function* func_art_find_catch_block_from_code = mod->getFunction("art_find_catch_block_from_code");
 if (!func_art_find_catch_block_from_code) {
 func_art_find_catch_block_from_code = Function::Create(
- /*Type=*/FuncTy_13,
+ /*Type=*/FuncTy_12,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_catch_block_from_code", mod); // (external, no body)
 func_art_find_catch_block_from_code->setCallingConv(CallingConv::C);
@@ -563,7 +543,7 @@
 Function* func_art_alloc_object_from_code = mod->getFunction("art_alloc_object_from_code");
 if (!func_art_alloc_object_from_code) {
 func_art_alloc_object_from_code = Function::Create(
- /*Type=*/FuncTy_14,
+ /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_alloc_object_from_code", mod); // (external, no body)
 func_art_alloc_object_from_code->setCallingConv(CallingConv::C);
@@ -574,7 +554,7 @@
 Function* func_art_alloc_object_from_code_with_access_check = mod->getFunction("art_alloc_object_from_code_with_access_check");
 if (!func_art_alloc_object_from_code_with_access_check) {
 func_art_alloc_object_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_14,
+ /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_alloc_object_from_code_with_access_check", mod); // (external, no body)
 func_art_alloc_object_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -585,7 +565,7 @@
 Function* func_art_alloc_array_from_code = mod->getFunction("art_alloc_array_from_code");
 if (!func_art_alloc_array_from_code) {
 func_art_alloc_array_from_code = Function::Create(
- /*Type=*/FuncTy_15,
+ /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_alloc_array_from_code", mod); // (external, no body)
 func_art_alloc_array_from_code->setCallingConv(CallingConv::C);
@@ -596,7 +576,7 @@
 Function* func_art_alloc_array_from_code_with_access_check = mod->getFunction("art_alloc_array_from_code_with_access_check");
 if (!func_art_alloc_array_from_code_with_access_check) {
 func_art_alloc_array_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_15,
+ /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_alloc_array_from_code_with_access_check", mod); // (external, no body)
 func_art_alloc_array_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -607,7 +587,7 @@
 Function* func_art_check_and_alloc_array_from_code = mod->getFunction("art_check_and_alloc_array_from_code");
 if (!func_art_check_and_alloc_array_from_code) {
 func_art_check_and_alloc_array_from_code = Function::Create(
- /*Type=*/FuncTy_15,
+ /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_check_and_alloc_array_from_code", mod); // (external, no body)
 func_art_check_and_alloc_array_from_code->setCallingConv(CallingConv::C);
@@ -618,7 +598,7 @@
 Function* func_art_check_and_alloc_array_from_code_with_access_check = mod->getFunction("art_check_and_alloc_array_from_code_with_access_check");
 if (!func_art_check_and_alloc_array_from_code_with_access_check) {
 func_art_check_and_alloc_array_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_15,
+ /*Type=*/FuncTy_14,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_check_and_alloc_array_from_code_with_access_check", mod); // (external, no body)
 func_art_check_and_alloc_array_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -629,7 +609,7 @@
 Function* func_art_find_instance_field_from_code = mod->getFunction("art_find_instance_field_from_code");
 if (!func_art_find_instance_field_from_code) {
 func_art_find_instance_field_from_code = Function::Create(
- /*Type=*/FuncTy_16,
+ /*Type=*/FuncTy_15,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_instance_field_from_code", mod); // (external, no body)
 func_art_find_instance_field_from_code->setCallingConv(CallingConv::C);
@@ -640,7 +620,7 @@
 Function* func_art_find_static_field_from_code = mod->getFunction("art_find_static_field_from_code");
 if (!func_art_find_static_field_from_code) {
 func_art_find_static_field_from_code = Function::Create(
- /*Type=*/FuncTy_16,
+ /*Type=*/FuncTy_15,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_static_field_from_code", mod); // (external, no body)
 func_art_find_static_field_from_code->setCallingConv(CallingConv::C);
@@ -651,7 +631,7 @@
 Function* func_art_find_static_method_from_code_with_access_check = mod->getFunction("art_find_static_method_from_code_with_access_check");
 if (!func_art_find_static_method_from_code_with_access_check) {
 func_art_find_static_method_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_17,
+ /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_static_method_from_code_with_access_check", mod); // (external, no body)
 func_art_find_static_method_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -662,7 +642,7 @@
 Function* func_art_find_direct_method_from_code_with_access_check = mod->getFunction("art_find_direct_method_from_code_with_access_check");
 if (!func_art_find_direct_method_from_code_with_access_check) {
 func_art_find_direct_method_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_17,
+ /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_direct_method_from_code_with_access_check", mod); // (external, no body)
 func_art_find_direct_method_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -673,7 +653,7 @@
 Function* func_art_find_virtual_method_from_code_with_access_check = mod->getFunction("art_find_virtual_method_from_code_with_access_check");
 if (!func_art_find_virtual_method_from_code_with_access_check) {
 func_art_find_virtual_method_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_17,
+ /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_virtual_method_from_code_with_access_check", mod); // (external, no body)
 func_art_find_virtual_method_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -684,7 +664,7 @@
 Function* func_art_find_super_method_from_code_with_access_check = mod->getFunction("art_find_super_method_from_code_with_access_check");
 if (!func_art_find_super_method_from_code_with_access_check) {
 func_art_find_super_method_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_17,
+ /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_super_method_from_code_with_access_check", mod); // (external, no body)
 func_art_find_super_method_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -695,7 +675,7 @@
 Function* func_art_find_interface_method_from_code_with_access_check = mod->getFunction("art_find_interface_method_from_code_with_access_check");
 if (!func_art_find_interface_method_from_code_with_access_check) {
 func_art_find_interface_method_from_code_with_access_check = Function::Create(
- /*Type=*/FuncTy_17,
+ /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_interface_method_from_code_with_access_check", mod); // (external, no body)
 func_art_find_interface_method_from_code_with_access_check->setCallingConv(CallingConv::C);
@@ -706,7 +686,7 @@
 Function* func_art_find_interface_method_from_code = mod->getFunction("art_find_interface_method_from_code");
 if (!func_art_find_interface_method_from_code) {
 func_art_find_interface_method_from_code = Function::Create(
- /*Type=*/FuncTy_17,
+ /*Type=*/FuncTy_16,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_find_interface_method_from_code", mod); // (external, no body)
 func_art_find_interface_method_from_code->setCallingConv(CallingConv::C);
@@ -717,7 +697,7 @@
 Function* func_art_initialize_static_storage_from_code = mod->getFunction("art_initialize_static_storage_from_code");
 if (!func_art_initialize_static_storage_from_code) {
 func_art_initialize_static_storage_from_code = Function::Create(
- /*Type=*/FuncTy_14,
+ /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_initialize_static_storage_from_code", mod); // (external, no body)
 func_art_initialize_static_storage_from_code->setCallingConv(CallingConv::C);
@@ -728,7 +708,7 @@
 Function* func_art_initialize_type_from_code = mod->getFunction("art_initialize_type_from_code");
 if (!func_art_initialize_type_from_code) {
 func_art_initialize_type_from_code = Function::Create(
- /*Type=*/FuncTy_14,
+ /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_initialize_type_from_code", mod); // (external, no body)
 func_art_initialize_type_from_code->setCallingConv(CallingConv::C);
@@ -739,7 +719,7 @@
 Function* func_art_initialize_type_and_verify_access_from_code = mod->getFunction("art_initialize_type_and_verify_access_from_code");
 if (!func_art_initialize_type_and_verify_access_from_code) {
 func_art_initialize_type_and_verify_access_from_code = Function::Create(
- /*Type=*/FuncTy_14,
+ /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_initialize_type_and_verify_access_from_code", mod); // (external, no body)
 func_art_initialize_type_and_verify_access_from_code->setCallingConv(CallingConv::C);
@@ -750,7 +730,7 @@
 Function* func_art_resolve_string_from_code = mod->getFunction("art_resolve_string_from_code");
 if (!func_art_resolve_string_from_code) {
 func_art_resolve_string_from_code = Function::Create(
- /*Type=*/FuncTy_18,
+ /*Type=*/FuncTy_17,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_resolve_string_from_code", mod); // (external, no body)
 func_art_resolve_string_from_code->setCallingConv(CallingConv::C);
@@ -761,7 +741,7 @@
 Function* func_art_set32_static_from_code = mod->getFunction("art_set32_static_from_code");
 if (!func_art_set32_static_from_code) {
 func_art_set32_static_from_code = Function::Create(
- /*Type=*/FuncTy_19,
+ /*Type=*/FuncTy_18,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_set32_static_from_code", mod); // (external, no body)
 func_art_set32_static_from_code->setCallingConv(CallingConv::C);
@@ -772,7 +752,7 @@
 Function* func_art_set64_static_from_code = mod->getFunction("art_set64_static_from_code");
 if (!func_art_set64_static_from_code) {
 func_art_set64_static_from_code = Function::Create(
- /*Type=*/FuncTy_20,
+ /*Type=*/FuncTy_19,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_set64_static_from_code", mod); // (external, no body)
 func_art_set64_static_from_code->setCallingConv(CallingConv::C);
@@ -783,7 +763,7 @@
 Function* func_art_set_obj_static_from_code = mod->getFunction("art_set_obj_static_from_code");
 if (!func_art_set_obj_static_from_code) {
 func_art_set_obj_static_from_code = Function::Create(
- /*Type=*/FuncTy_21,
+ /*Type=*/FuncTy_20,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_set_obj_static_from_code", mod); // (external, no body)
 func_art_set_obj_static_from_code->setCallingConv(CallingConv::C);
@@ -794,7 +774,7 @@
 Function* func_art_get32_static_from_code = mod->getFunction("art_get32_static_from_code");
 if (!func_art_get32_static_from_code) {
 func_art_get32_static_from_code = Function::Create(
- /*Type=*/FuncTy_22,
+ /*Type=*/FuncTy_21,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_get32_static_from_code", mod); // (external, no body)
 func_art_get32_static_from_code->setCallingConv(CallingConv::C);
@@ -805,7 +785,7 @@
 Function* func_art_get64_static_from_code = mod->getFunction("art_get64_static_from_code");
 if (!func_art_get64_static_from_code) {
 func_art_get64_static_from_code = Function::Create(
- /*Type=*/FuncTy_23,
+ /*Type=*/FuncTy_22,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_get64_static_from_code", mod); // (external, no body)
 func_art_get64_static_from_code->setCallingConv(CallingConv::C);
@@ -816,7 +796,7 @@
 Function* func_art_get_obj_static_from_code = mod->getFunction("art_get_obj_static_from_code");
 if (!func_art_get_obj_static_from_code) {
 func_art_get_obj_static_from_code = Function::Create(
- /*Type=*/FuncTy_24,
+ /*Type=*/FuncTy_23,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_get_obj_static_from_code", mod); // (external, no body)
 func_art_get_obj_static_from_code->setCallingConv(CallingConv::C);
@@ -827,7 +807,7 @@
 Function* func_art_set32_instance_from_code = mod->getFunction("art_set32_instance_from_code");
 if (!func_art_set32_instance_from_code) {
 func_art_set32_instance_from_code = Function::Create(
- /*Type=*/FuncTy_25,
+ /*Type=*/FuncTy_24,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_set32_instance_from_code", mod); // (external, no body)
 func_art_set32_instance_from_code->setCallingConv(CallingConv::C);
@@ -838,7 +818,7 @@
 Function* func_art_set64_instance_from_code = mod->getFunction("art_set64_instance_from_code");
 if (!func_art_set64_instance_from_code) {
 func_art_set64_instance_from_code = Function::Create(
- /*Type=*/FuncTy_26,
+ /*Type=*/FuncTy_25,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_set64_instance_from_code", mod); // (external, no body)
 func_art_set64_instance_from_code->setCallingConv(CallingConv::C);
@@ -849,7 +829,7 @@
 Function* func_art_set_obj_instance_from_code = mod->getFunction("art_set_obj_instance_from_code");
 if (!func_art_set_obj_instance_from_code) {
 func_art_set_obj_instance_from_code = Function::Create(
- /*Type=*/FuncTy_27,
+ /*Type=*/FuncTy_26,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_set_obj_instance_from_code", mod); // (external, no body)
 func_art_set_obj_instance_from_code->setCallingConv(CallingConv::C);
@@ -860,7 +840,7 @@
 Function* func_art_get32_instance_from_code = mod->getFunction("art_get32_instance_from_code");
 if (!func_art_get32_instance_from_code) {
 func_art_get32_instance_from_code = Function::Create(
- /*Type=*/FuncTy_21,
+ /*Type=*/FuncTy_20,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_get32_instance_from_code", mod); // (external, no body)
 func_art_get32_instance_from_code->setCallingConv(CallingConv::C);
@@ -871,7 +851,7 @@
 Function* func_art_get64_instance_from_code = mod->getFunction("art_get64_instance_from_code");
 if (!func_art_get64_instance_from_code) {
 func_art_get64_instance_from_code = Function::Create(
- /*Type=*/FuncTy_28,
+ /*Type=*/FuncTy_27,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_get64_instance_from_code", mod); // (external, no body)
 func_art_get64_instance_from_code->setCallingConv(CallingConv::C);
@@ -882,7 +862,7 @@
 Function* func_art_get_obj_instance_from_code = mod->getFunction("art_get_obj_instance_from_code");
 if (!func_art_get_obj_instance_from_code) {
 func_art_get_obj_instance_from_code = Function::Create(
- /*Type=*/FuncTy_14,
+ /*Type=*/FuncTy_13,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_get_obj_instance_from_code", mod); // (external, no body)
 func_art_get_obj_instance_from_code->setCallingConv(CallingConv::C);
@@ -893,7 +873,7 @@
 Function* func_art_decode_jobject_in_thread = mod->getFunction("art_decode_jobject_in_thread");
 if (!func_art_decode_jobject_in_thread) {
 func_art_decode_jobject_in_thread = Function::Create(
- /*Type=*/FuncTy_29,
+ /*Type=*/FuncTy_28,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_decode_jobject_in_thread", mod); // (external, no body)
 func_art_decode_jobject_in_thread->setCallingConv(CallingConv::C);
@@ -904,7 +884,7 @@
 Function* func_art_fill_array_data_from_code = mod->getFunction("art_fill_array_data_from_code");
 if (!func_art_fill_array_data_from_code) {
 func_art_fill_array_data_from_code = Function::Create(
- /*Type=*/FuncTy_30,
+ /*Type=*/FuncTy_29,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_fill_array_data_from_code", mod); // (external, no body)
 func_art_fill_array_data_from_code->setCallingConv(CallingConv::C);
@@ -915,7 +895,7 @@
 Function* func_art_is_assignable_from_code = mod->getFunction("art_is_assignable_from_code");
 if (!func_art_is_assignable_from_code) {
 func_art_is_assignable_from_code = Function::Create(
- /*Type=*/FuncTy_31,
+ /*Type=*/FuncTy_30,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_is_assignable_from_code", mod); // (external, no body)
 func_art_is_assignable_from_code->setCallingConv(CallingConv::C);
@@ -948,7 +928,7 @@
 Function* func_art_d2l = mod->getFunction("art_d2l");
 if (!func_art_d2l) {
 func_art_d2l = Function::Create(
- /*Type=*/FuncTy_32,
+ /*Type=*/FuncTy_31,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_d2l", mod); // (external, no body)
 func_art_d2l->setCallingConv(CallingConv::C);
@@ -959,7 +939,7 @@
 Function* func_art_d2i = mod->getFunction("art_d2i");
 if (!func_art_d2i) {
 func_art_d2i = Function::Create(
- /*Type=*/FuncTy_33,
+ /*Type=*/FuncTy_32,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_d2i", mod); // (external, no body)
 func_art_d2i->setCallingConv(CallingConv::C);
@@ -970,7 +950,7 @@
 Function* func_art_f2l = mod->getFunction("art_f2l");
 if (!func_art_f2l) {
 func_art_f2l = Function::Create(
- /*Type=*/FuncTy_34,
+ /*Type=*/FuncTy_33,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_f2l", mod); // (external, no body)
 func_art_f2l->setCallingConv(CallingConv::C);
@@ -981,7 +961,7 @@
 Function* func_art_f2i = mod->getFunction("art_f2i");
 if (!func_art_f2i) {
 func_art_f2i = Function::Create(
- /*Type=*/FuncTy_35,
+ /*Type=*/FuncTy_34,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_f2i", mod); // (external, no body)
 func_art_f2i->setCallingConv(CallingConv::C);
@@ -992,7 +972,7 @@
 Function* func_art_jni_method_start = mod->getFunction("art_jni_method_start");
 if (!func_art_jni_method_start) {
 func_art_jni_method_start = Function::Create(
- /*Type=*/FuncTy_36,
+ /*Type=*/FuncTy_35,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_jni_method_start", mod); // (external, no body)
 func_art_jni_method_start->setCallingConv(CallingConv::C);
@@ -1003,7 +983,7 @@
 Function* func_art_jni_method_start_synchronized = mod->getFunction("art_jni_method_start_synchronized");
 if (!func_art_jni_method_start_synchronized) {
 func_art_jni_method_start_synchronized = Function::Create(
- /*Type=*/FuncTy_31,
+ /*Type=*/FuncTy_30,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_jni_method_start_synchronized", mod); // (external, no body)
 func_art_jni_method_start_synchronized->setCallingConv(CallingConv::C);
@@ -1014,7 +994,7 @@
 Function* func_art_jni_method_end = mod->getFunction("art_jni_method_end");
 if (!func_art_jni_method_end) {
 func_art_jni_method_end = Function::Create(
- /*Type=*/FuncTy_16,
+ /*Type=*/FuncTy_15,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_jni_method_end", mod); // (external, no body)
 func_art_jni_method_end->setCallingConv(CallingConv::C);
@@ -1025,7 +1005,7 @@
 Function* func_art_jni_method_end_synchronized = mod->getFunction("art_jni_method_end_synchronized");
 if (!func_art_jni_method_end_synchronized) {
 func_art_jni_method_end_synchronized = Function::Create(
- /*Type=*/FuncTy_37,
+ /*Type=*/FuncTy_36,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_jni_method_end_synchronized", mod); // (external, no body)
 func_art_jni_method_end_synchronized->setCallingConv(CallingConv::C);
@@ -1036,7 +1016,7 @@
 Function* func_art_jni_method_end_with_reference = mod->getFunction("art_jni_method_end_with_reference");
 if (!func_art_jni_method_end_with_reference) {
 func_art_jni_method_end_with_reference = Function::Create(
- /*Type=*/FuncTy_38,
+ /*Type=*/FuncTy_37,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_jni_method_end_with_reference", mod); // (external, no body)
 func_art_jni_method_end_with_reference->setCallingConv(CallingConv::C);
@@ -1047,7 +1027,7 @@
 Function* func_art_jni_method_end_with_reference_synchronized = mod->getFunction("art_jni_method_end_with_reference_synchronized");
 if (!func_art_jni_method_end_with_reference_synchronized) {
 func_art_jni_method_end_with_reference_synchronized = Function::Create(
- /*Type=*/FuncTy_39,
+ /*Type=*/FuncTy_38,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_jni_method_end_with_reference_synchronized", mod); // (external, no body)
 func_art_jni_method_end_with_reference_synchronized->setCallingConv(CallingConv::C);
@@ -1058,7 +1038,7 @@
 Function* func_art_is_exception_pending_from_code = mod->getFunction("art_is_exception_pending_from_code");
 if (!func_art_is_exception_pending_from_code) {
 func_art_is_exception_pending_from_code = Function::Create(
- /*Type=*/FuncTy_40,
+ /*Type=*/FuncTy_39,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_is_exception_pending_from_code", mod); // (external, no body)
 func_art_is_exception_pending_from_code->setCallingConv(CallingConv::C);
@@ -1080,7 +1060,7 @@
 Function* func_art_proxy_invoke_handler_from_code = mod->getFunction("art_proxy_invoke_handler_from_code");
 if (!func_art_proxy_invoke_handler_from_code) {
 func_art_proxy_invoke_handler_from_code = Function::Create(
- /*Type=*/FuncTy_41,
+ /*Type=*/FuncTy_40,
  /*Linkage=*/GlobalValue::ExternalLinkage,
  /*Name=*/"art_proxy_invoke_handler_from_code", mod); // (external, no body)
 func_art_proxy_invoke_handler_from_code->setCallingConv(CallingConv::C);
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 9990b19..4dc3954 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -1165,10 +1165,6 @@
     EmitInsn_IntShiftArithmImmediate(ARGS, kIntArithm_UShr);
     break;
 
-  case Instruction::THROW_VERIFICATION_ERROR:
-    EmitInsn_ThrowVerificationError(ARGS);
-    break;
-
   case Instruction::UNUSED_3E:
   case Instruction::UNUSED_3F:
   case Instruction::UNUSED_40:
@@ -1188,6 +1184,7 @@
   case Instruction::UNUSED_EA:
   case Instruction::UNUSED_EB:
   case Instruction::UNUSED_EC:
+  case Instruction::UNUSED_ED:
   case Instruction::UNUSED_EE:
   case Instruction::UNUSED_EF:
   case Instruction::UNUSED_F0:
@@ -1294,24 +1291,6 @@
 }
 
 
-void MethodCompiler::EmitInsn_ThrowVerificationError(uint32_t dex_pc,
-                                                     const Instruction* insn) {
-
-  DecodedInstruction dec_insn(insn);
-
-  EmitUpdateDexPC(dex_pc);
-
-  llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
-  llvm::Value* kind_value = irb_.getInt32(dec_insn.vA);
-  llvm::Value* ref_value = irb_.getInt32(dec_insn.vB);
-
-  irb_.CreateCall3(irb_.GetRuntime(ThrowVerificationError),
-                   method_object_addr, kind_value, ref_value);
-
-  EmitBranchExceptionLandingPad(dex_pc);
-}
-
-
 void MethodCompiler::EmitInsn_ReturnVoid(uint32_t dex_pc,
                                          const Instruction* insn) {
   // Pop the shadow frame
@@ -4552,10 +4531,6 @@
       }
       break;
 
-    case Instruction::THROW_VERIFICATION_ERROR:
-      may_throw_exception = true;
-      break;
-
     case Instruction::UNUSED_3E:
     case Instruction::UNUSED_3F:
     case Instruction::UNUSED_40:
@@ -4575,6 +4550,7 @@
     case Instruction::UNUSED_EA:
     case Instruction::UNUSED_EB:
     case Instruction::UNUSED_EC:
+    case Instruction::UNUSED_ED:
     case Instruction::UNUSED_EE:
     case Instruction::UNUSED_EF:
     case Instruction::UNUSED_F0:
diff --git a/src/compiler_llvm/method_compiler.h b/src/compiler_llvm/method_compiler.h
index 9b207c3..d54be6b 100644
--- a/src/compiler_llvm/method_compiler.h
+++ b/src/compiler_llvm/method_compiler.h
@@ -147,7 +147,6 @@
   // MOVE_EXCEPTION, THROW instructions
   void EmitInsn_MoveException(GEN_INSN_ARGS);
   void EmitInsn_ThrowException(GEN_INSN_ARGS);
-  void EmitInsn_ThrowVerificationError(GEN_INSN_ARGS);
 
   // RETURN instructions
   void EmitInsn_ReturnVoid(GEN_INSN_ARGS);
diff --git a/src/compiler_llvm/runtime_support_func_list.h b/src/compiler_llvm/runtime_support_func_list.h
index 236e02b..5b94edc 100644
--- a/src/compiler_llvm/runtime_support_func_list.h
+++ b/src/compiler_llvm/runtime_support_func_list.h
@@ -27,7 +27,6 @@
   V(ThrowNullPointerException, art_throw_null_pointer_exception_from_code) \
   V(ThrowDivZeroException, art_throw_div_zero_from_code) \
   V(ThrowIndexOutOfBounds, art_throw_array_bounds_from_code) \
-  V(ThrowVerificationError, art_throw_verification_error_from_code) \
   V(InitializeTypeAndVerifyAccess, art_initialize_type_and_verify_access_from_code) \
   V(InitializeType, art_initialize_type_from_code) \
   V(IsAssignable, art_is_assignable_from_code) \
diff --git a/src/compiler_llvm/runtime_support_llvm.cc b/src/compiler_llvm/runtime_support_llvm.cc
index 3854b4c..a6fa80d 100644
--- a/src/compiler_llvm/runtime_support_llvm.cc
+++ b/src/compiler_llvm/runtime_support_llvm.cc
@@ -171,13 +171,6 @@
   }
 }
 
-void art_throw_verification_error_from_code(Method* current_method,
-                                            int32_t kind,
-                                            int32_t ref)
-    SHARED_LOCKS_REQUIRED(GlobalSynchronization::mutator_lock_) {
-  ThrowVerificationError(art_get_current_thread_from_code(), current_method, kind, ref);
-}
-
 int32_t art_find_catch_block_from_code(Method* current_method,
                                        uint32_t ti_offset)
     SHARED_LOCKS_REQUIRED(GlobalSynchronization::mutator_lock_) {
diff --git a/src/dex_instruction.cc b/src/dex_instruction.cc
index b713f7e..aa1a5fe 100644
--- a/src/dex_instruction.cc
+++ b/src/dex_instruction.cc
@@ -94,7 +94,6 @@
     case k20t:       // op +AAAA
       vA = (int16_t) FETCH(1);                   // sign-extend 16-bit value
       break;
-    case k20bc:      // op AA, kind@BBBB
     case k21c:       // op vAA, thing@BBBB
     case k22x:       // op vAA, vBBBB
       vA = INST_AA(insn);
@@ -226,7 +225,6 @@
       case k11x:
       case k10t:
         return 1;
-      case k20bc:
       case k20t:
       case k22x:
       case k21t:
@@ -294,7 +292,6 @@
     case k11n:  os << StringPrintf("%s v%d, #%+d", opcode, insn.vA, insn.vB); break;
     case k11x:  os << StringPrintf("%s v%d", opcode, insn.vA); break;
     case k10t:  os << StringPrintf("%s %+d", opcode, insn.vA); break;
-    case k20bc: os << StringPrintf("%s %d, kind@%d", opcode, insn.vA, insn.vB); break;
     case k20t:  os << StringPrintf("%s %+d", opcode, insn.vA); break;
     case k22x:  os << StringPrintf("%s v%d, v%d", opcode, insn.vA, insn.vB); break;
     case k21t:  os << StringPrintf("%s v%d, %+d", opcode, insn.vA, insn.vB); break;
diff --git a/src/dex_instruction.h b/src/dex_instruction.h
index 442ea79..91aa042 100644
--- a/src/dex_instruction.h
+++ b/src/dex_instruction.h
@@ -88,7 +88,6 @@
     k11n,  // op vA, #+B
     k11x,  // op vAA
     k10t,  // op +AA
-    k20bc, // op AA, kind@BBBB
     k20t,  // op +AAAA
     k22x,  // op vAA, vBBBB
     k21t,  // op vAA, +BBBB
diff --git a/src/dex_instruction_list.h b/src/dex_instruction_list.h
index e4fc5fd..3083d22 100644
--- a/src/dex_instruction_list.h
+++ b/src/dex_instruction_list.h
@@ -252,7 +252,7 @@
   V(0xEA, UNUSED_EA, "unused-ea", k10x, false, kUnknown, 0, kVerifyError) \
   V(0xEB, UNUSED_EB, "unused-eb", k10x, false, kUnknown, 0, kVerifyError) \
   V(0xEC, UNUSED_EC, "unused-ec", k10x, false, kUnknown, 0, kVerifyError) \
-  V(0xED, THROW_VERIFICATION_ERROR, "throw-verification-error", k20bc, false, kNone, kThrow, kVerifyNone) \
+  V(0xED, UNUSED_ED, "unused-ed", k10x, false, kUnknown, 0, kVerifyError) \
   V(0xEE, UNUSED_EE, "unused-ee", k10x, false, kUnknown, 0, kVerifyError) \
   V(0xEF, UNUSED_EF, "unused-ef", k10x, false, kUnknown, 0, kVerifyError) \
   V(0xF0, UNUSED_F0, "unused-f0", k10x, false, kUnknown, 0, kVerifyError) \
@@ -278,7 +278,6 @@
   V(k11n) \
   V(k11x) \
   V(k10t) \
-  V(k20bc) \
   V(k20t) \
   V(k22x) \
   V(k21t) \
diff --git a/src/greenland/dex_lang.cc b/src/greenland/dex_lang.cc
index 18ce4b4..135cbd7 100644
--- a/src/greenland/dex_lang.cc
+++ b/src/greenland/dex_lang.cc
@@ -2778,9 +2778,6 @@
       //EmitInsn_IntShiftArithmImmediate(ARGS, kIntArithm_UShr);
       break;
 
-    case Instruction::THROW_VERIFICATION_ERROR:
-      //EmitInsn_ThrowVerificationError(ARGS);
-      break;
     case Instruction::UNUSED_3E:
     case Instruction::UNUSED_3F:
     case Instruction::UNUSED_40:
@@ -2800,6 +2797,7 @@
     case Instruction::UNUSED_EA:
     case Instruction::UNUSED_EB:
     case Instruction::UNUSED_EC:
+    case Instruction::UNUSED_ED:
     case Instruction::UNUSED_EE:
     case Instruction::UNUSED_EF:
     case Instruction::UNUSED_F0:
diff --git a/src/greenland/dex_lang.h b/src/greenland/dex_lang.h
index 27b50dd..ce4b462 100644
--- a/src/greenland/dex_lang.h
+++ b/src/greenland/dex_lang.h
@@ -356,7 +356,6 @@
   void EmitInsn_MoveException(GEN_INSN_ARGS);
 #if 0
   void EmitInsn_ThrowException(GEN_INSN_ARGS);
-  void EmitInsn_ThrowVerificationError(GEN_INSN_ARGS);
 
   // RETURN instructions
 #endif
diff --git a/src/greenland/intrinsic_func_list.def b/src/greenland/intrinsic_func_list.def
index 064fafc..3f3fae1 100644
--- a/src/greenland/intrinsic_func_list.def
+++ b/src/greenland/intrinsic_func_list.def
@@ -127,13 +127,6 @@
                           kVoidTy,
                           _EXPAND_ARG1(kJavaObjectTy))
 
-// void dex_lang_throw_verification_error(int info1, int info2)
-_EVAL_DEF_INTRINSICS_FUNC(ThrowVerificationError,
-                          dex_lang_throw_verification_error,
-                          kAttrNoThrow,
-                          kVoidTy,
-                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))
-
 //----------------------------------------------------------------------------
 // ConstString
 //----------------------------------------------------------------------------
diff --git a/src/oat/runtime/arm/oat_support_entrypoints_arm.cc b/src/oat/runtime/arm/oat_support_entrypoints_arm.cc
index 1aa069e..305f359 100644
--- a/src/oat/runtime/arm/oat_support_entrypoints_arm.cc
+++ b/src/oat/runtime/arm/oat_support_entrypoints_arm.cc
@@ -143,7 +143,6 @@
 extern "C" void art_throw_no_such_method_from_code(int32_t method_idx);
 extern "C" void art_throw_null_pointer_exception_from_code();
 extern "C" void art_throw_stack_overflow_from_code(void*);
-extern "C" void art_throw_verification_error_from_code(int32_t src1, int32_t ref);
 
 // Trace entrypoints.
 extern "C" void art_trace_entry_from_code(void*);
@@ -263,7 +262,6 @@
   points->pThrowNoSuchMethodFromCode = art_throw_no_such_method_from_code;
   points->pThrowNullPointerFromCode = art_throw_null_pointer_exception_from_code;
   points->pThrowStackOverflowFromCode = art_throw_stack_overflow_from_code;
-  points->pThrowVerificationErrorFromCode = art_throw_verification_error_from_code;
 };
 
 void ChangeDebuggerEntryPoint(EntryPoints* points, bool enabled) {
diff --git a/src/oat/runtime/arm/runtime_support_arm.S b/src/oat/runtime/arm/runtime_support_arm.S
index 1978a73..5b4cd1b 100644
--- a/src/oat/runtime/arm/runtime_support_arm.S
+++ b/src/oat/runtime/arm/runtime_support_arm.S
@@ -149,11 +149,6 @@
 ONE_ARG_RUNTIME_EXCEPTION art_throw_no_such_method_from_code, artThrowNoSuchMethodFromCode
 
     /*
-     * Called by managed code to create and deliver verification errors. Arg1 is kind, arg2 is ref.
-     */
-TWO_ARG_RUNTIME_EXCEPTION art_throw_verification_error_from_code, artThrowVerificationErrorFromCode
-
-    /*
      * All generated callsites for interface invokes and invocation slow paths will load arguments
      * as usual - except instead of loading arg0/r0 with the target Method*, arg0/r0 will contain
      * the method_idx.  This wrapper will save arg1-arg3, load the caller's Method*, align the
diff --git a/src/oat/runtime/mips/oat_support_entrypoints_mips.cc b/src/oat/runtime/mips/oat_support_entrypoints_mips.cc
index f9188cc..71ea0ef 100644
--- a/src/oat/runtime/mips/oat_support_entrypoints_mips.cc
+++ b/src/oat/runtime/mips/oat_support_entrypoints_mips.cc
@@ -142,7 +142,6 @@
 extern "C" void art_throw_no_such_method_from_code(int32_t method_idx);
 extern "C" void art_throw_null_pointer_exception_from_code();
 extern "C" void art_throw_stack_overflow_from_code(void*);
-extern "C" void art_throw_verification_error_from_code(int32_t src1, int32_t ref);
 
 // Trace entrypoints.
 extern "C" void art_trace_entry_from_code(void*);
@@ -262,7 +261,6 @@
   points->pThrowNoSuchMethodFromCode = art_throw_no_such_method_from_code;
   points->pThrowNullPointerFromCode = art_throw_null_pointer_exception_from_code;
   points->pThrowStackOverflowFromCode = art_throw_stack_overflow_from_code;
-  points->pThrowVerificationErrorFromCode = art_throw_verification_error_from_code;
 };
 
 void ChangeDebuggerEntryPoint(EntryPoints* points, bool enabled) {
diff --git a/src/oat/runtime/mips/runtime_support_mips.S b/src/oat/runtime/mips/runtime_support_mips.S
index 3ffe059..ec9d269 100644
--- a/src/oat/runtime/mips/runtime_support_mips.S
+++ b/src/oat/runtime/mips/runtime_support_mips.S
@@ -313,18 +313,6 @@
     jal artThrowNoSuchMethodFromCode      # artThrowNoSuchMethodFromCode(method_idx, Thread*, $sp)
     move $a2, $sp                         # pass $sp
 
-    .global art_throw_verification_error_from_code
-    .extern artThrowVerificationErrorFromCode
-    /*
-     * Called by managed code to create and deliver verification errors.
-     */
-    ALIGN_FUNCTION_ENTRY
-art_throw_verification_error_from_code:
-    SETUP_SAVE_ALL_CALLEE_SAVE_FRAME
-    move $a2, rSELF                           # pass Thread::Current
-    jal artThrowVerificationErrorFromCode     # artThrowVerificationErrorFromCode(kind, ref, Thread*, $sp)
-    move $a3, $sp                             # pass $sp
-
     /*
      * All generated callsites for interface invokes and invocation slow paths will load arguments
      * as usual - except instead of loading arg0/$a0 with the target Method*, arg0/$a0 will contain
diff --git a/src/oat/runtime/oat_support_entrypoints.h b/src/oat/runtime/oat_support_entrypoints.h
index 39d9eab..a504778 100644
--- a/src/oat/runtime/oat_support_entrypoints.h
+++ b/src/oat/runtime/oat_support_entrypoints.h
@@ -146,7 +146,6 @@
   void (*pThrowNoSuchMethodFromCode)(int32_t);
   void (*pThrowNullPointerFromCode)();
   void (*pThrowStackOverflowFromCode)(void*);
-  void (*pThrowVerificationErrorFromCode)(int32_t, int32_t);
 };
 
 // Initialize an entry point data structure.
diff --git a/src/oat/runtime/support_throw.cc b/src/oat/runtime/support_throw.cc
index 4fa2387..9776290 100644
--- a/src/oat/runtime/support_throw.cc
+++ b/src/oat/runtime/support_throw.cc
@@ -98,13 +98,4 @@
   self->DeliverException();
 }
 
-extern "C" void artThrowVerificationErrorFromCode(int32_t kind, int32_t ref, Thread* self,
-                                                  Method** sp)
-    SHARED_LOCKS_REQUIRED(GlobalSynchronization::mutator_lock_) {
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kSaveAll);
-  Method* method = self->GetCurrentMethod();
-  ThrowVerificationError(self, method, kind, ref);
-  self->DeliverException();
-}
-
 }  // namespace art
diff --git a/src/oat/runtime/x86/oat_support_entrypoints_x86.cc b/src/oat/runtime/x86/oat_support_entrypoints_x86.cc
index e52569d..9ff4a07 100644
--- a/src/oat/runtime/x86/oat_support_entrypoints_x86.cc
+++ b/src/oat/runtime/x86/oat_support_entrypoints_x86.cc
@@ -118,7 +118,6 @@
 extern "C" void art_throw_no_such_method_from_code(int32_t method_idx);
 extern "C" void art_throw_null_pointer_exception_from_code();
 extern "C" void art_throw_stack_overflow_from_code(void*);
-extern "C" void art_throw_verification_error_from_code(int32_t src1, int32_t ref);
 
 void InitEntryPoints(EntryPoints* points) {
   // Alloc
@@ -234,7 +233,6 @@
   points->pThrowNoSuchMethodFromCode = art_throw_no_such_method_from_code;
   points->pThrowNullPointerFromCode = art_throw_null_pointer_exception_from_code;
   points->pThrowStackOverflowFromCode = art_throw_stack_overflow_from_code;
-  points->pThrowVerificationErrorFromCode = art_throw_verification_error_from_code;
 };
 
 void ChangeDebuggerEntryPoint(EntryPoints*, bool) {
diff --git a/src/oat/runtime/x86/runtime_support_x86.S b/src/oat/runtime/x86/runtime_support_x86.S
index 45caaae..fd0e10d 100644
--- a/src/oat/runtime/x86/runtime_support_x86.S
+++ b/src/oat/runtime/x86/runtime_support_x86.S
@@ -205,11 +205,6 @@
 TWO_ARG_RUNTIME_EXCEPTION art_throw_array_bounds_from_code, artThrowArrayBoundsFromCode
 
     /*
-     * Called by managed code to create and deliver verification errors. Arg1 is kind, arg2 is ref.
-     */
-TWO_ARG_RUNTIME_EXCEPTION art_throw_verification_error_from_code, artThrowVerificationErrorFromCode
-
-    /*
      * All generated callsites for interface invokes and invocation slow paths will load arguments
      * as usual - except instead of loading arg0/r0 with the target Method*, arg0/r0 will contain
      * the method_idx.  This wrapper will save arg1-arg3, load the caller's Method*, align the
diff --git a/src/runtime_support.cc b/src/runtime_support.cc
index 572da97..16406c4 100644
--- a/src/runtime_support.cc
+++ b/src/runtime_support.cc
@@ -342,88 +342,6 @@
   return result;
 }
 
-static std::string ClassNameFromIndex(const Method* method, uint32_t ref,
-                                      verifier::VerifyErrorRefType ref_type, bool access)
-    SHARED_LOCKS_REQUIRED(GlobalSynchronization::mutator_lock_) {
-  ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
-  const DexFile& dex_file = class_linker->FindDexFile(method->GetDeclaringClass()->GetDexCache());
-
-  uint16_t type_idx = 0;
-  if (ref_type == verifier::VERIFY_ERROR_REF_FIELD) {
-    const DexFile::FieldId& id = dex_file.GetFieldId(ref);
-    type_idx = id.class_idx_;
-  } else if (ref_type == verifier::VERIFY_ERROR_REF_METHOD) {
-    const DexFile::MethodId& id = dex_file.GetMethodId(ref);
-    type_idx = id.class_idx_;
-  } else if (ref_type == verifier::VERIFY_ERROR_REF_CLASS) {
-    type_idx = ref;
-  } else {
-    CHECK(false) << static_cast<int>(ref_type);
-  }
-
-  std::string class_name(PrettyDescriptor(dex_file.StringByTypeIdx(type_idx)));
-  if (!access) {
-    return class_name;
-  }
-
-  std::string result;
-  result += "tried to access class ";
-  result += class_name;
-  result += " from class ";
-  result += PrettyDescriptor(method->GetDeclaringClass());
-  return result;
-}
-
-void ThrowVerificationError(Thread* self, const Method* method,
-                            int32_t kind, int32_t ref) {
-  verifier::VerifyErrorRefType ref_type =
-      static_cast<verifier::VerifyErrorRefType>(kind >> verifier::kVerifyErrorRefTypeShift);
-
-  const char* exception_class = "Ljava/lang/VerifyError;";
-  std::string msg;
-
-  switch (static_cast<verifier::VerifyError>(kind & ~(0xff << verifier::kVerifyErrorRefTypeShift))) {
-  case verifier::VERIFY_ERROR_NO_CLASS:
-    exception_class = "Ljava/lang/NoClassDefFoundError;";
-    msg = ClassNameFromIndex(method, ref, ref_type, false);
-    break;
-  case verifier::VERIFY_ERROR_NO_FIELD:
-    exception_class = "Ljava/lang/NoSuchFieldError;";
-    msg = FieldNameFromIndex(method, ref, ref_type, false);
-    break;
-  case verifier::VERIFY_ERROR_NO_METHOD:
-    exception_class = "Ljava/lang/NoSuchMethodError;";
-    msg = MethodNameFromIndex(method, ref, ref_type, false);
-    break;
-  case verifier::VERIFY_ERROR_ACCESS_CLASS:
-    exception_class = "Ljava/lang/IllegalAccessError;";
-    msg = ClassNameFromIndex(method, ref, ref_type, true);
-    break;
-  case verifier::VERIFY_ERROR_ACCESS_FIELD:
-    exception_class = "Ljava/lang/IllegalAccessError;";
-    msg = FieldNameFromIndex(method, ref, ref_type, true);
-    break;
-  case verifier::VERIFY_ERROR_ACCESS_METHOD:
-    exception_class = "Ljava/lang/IllegalAccessError;";
-    msg = MethodNameFromIndex(method, ref, ref_type, true);
-    break;
-  case verifier::VERIFY_ERROR_CLASS_CHANGE:
-    exception_class = "Ljava/lang/IncompatibleClassChangeError;";
-    msg = ClassNameFromIndex(method, ref, ref_type, false);
-    break;
-  case verifier::VERIFY_ERROR_INSTANTIATION:
-    exception_class = "Ljava/lang/InstantiationError;";
-    msg = ClassNameFromIndex(method, ref, ref_type, false);
-    break;
-  case verifier::VERIFY_ERROR_BAD_CLASS_SOFT:
-  case verifier::VERIFY_ERROR_BAD_CLASS_HARD:
-    // Generic VerifyError; use default exception, no message.
-    break;
-  }
-
-  self->ThrowNewException(exception_class, msg.c_str());
-}
-
 // Helper function to allocate array for FILLED_NEW_ARRAY.
 Array* CheckAndAllocArrayFromCode(uint32_t type_idx, Method* method, int32_t component_count,
                                   Thread* self, bool access_check) {
diff --git a/src/runtime_support.h b/src/runtime_support.h
index c6bf0c8..2956ea7 100644
--- a/src/runtime_support.h
+++ b/src/runtime_support.h
@@ -76,8 +76,6 @@
     SHARED_LOCKS_REQUIRED(GlobalSynchronization::mutator_lock_);
 void ThrowNullPointerExceptionFromDexPC(Thread* self, Method* caller, uint32_t dex_pc)
     SHARED_LOCKS_REQUIRED(GlobalSynchronization::mutator_lock_);
-void ThrowVerificationError(Thread* self, const Method* method, int32_t kind, int32_t ref)
-    SHARED_LOCKS_REQUIRED(GlobalSynchronization::mutator_lock_);
 
 std::string FieldNameFromIndex(const Method* method, uint32_t ref,
                                verifier::VerifyErrorRefType ref_type, bool access)
diff --git a/src/thread.cc b/src/thread.cc
index 8974023..dfab7cd 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -1476,7 +1476,6 @@
   ENTRY_POINT_INFO(pThrowNoSuchMethodFromCode),
   ENTRY_POINT_INFO(pThrowNullPointerFromCode),
   ENTRY_POINT_INFO(pThrowStackOverflowFromCode),
-  ENTRY_POINT_INFO(pThrowVerificationErrorFromCode),
 };
 #undef ENTRY_POINT_INFO
 
diff --git a/src/verifier/method_verifier.cc b/src/verifier/method_verifier.cc
index 070c616..30bee66 100644
--- a/src/verifier/method_verifier.cc
+++ b/src/verifier/method_verifier.cc
@@ -2209,15 +2209,8 @@
       work_line_->CheckLiteralOp(dec_insn, reg_types_.Integer(), reg_types_.Integer(), true);
       break;
 
-    /*
-     * This falls into the general category of "optimized" instructions,
-     * which don't generally appear during verification. Because it's
-     * inserted in the course of verification, we can expect to see it here.
-     */
-    case Instruction::THROW_VERIFICATION_ERROR:
-      break;
-
     /* These should never appear during verification. */
+    case Instruction::UNUSED_ED:
     case Instruction::UNUSED_EE:
     case Instruction::UNUSED_EF:
     case Instruction::UNUSED_F2:
