Remove the THROW_VERIFICATION_ERROR op and supporting code.
Change-Id: Idc40a2c379048c7e3d74f50b2bd765a507a417ce
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: