mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 19:14:38 +02:00
6953144: Tiered compilation
Infrastructure for tiered compilation support (interpreter + c1 + c2) for 32 and 64 bit. Simple tiered policy implementation. Reviewed-by: kvn, never, phh, twisti
This commit is contained in:
parent
6e78f6cb4b
commit
2c66a6c3fd
104 changed files with 7720 additions and 1701 deletions
|
@ -345,9 +345,8 @@ void LIR_OpBranch::negate_cond() {
|
|||
LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr result, LIR_Opr object, ciKlass* klass,
|
||||
LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3,
|
||||
bool fast_check, CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch,
|
||||
CodeStub* stub,
|
||||
ciMethod* profiled_method,
|
||||
int profiled_bci)
|
||||
CodeStub* stub)
|
||||
|
||||
: LIR_Op(code, result, NULL)
|
||||
, _object(object)
|
||||
, _array(LIR_OprFact::illegalOpr)
|
||||
|
@ -359,8 +358,10 @@ LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr result, LIR_Opr object,
|
|||
, _stub(stub)
|
||||
, _info_for_patch(info_for_patch)
|
||||
, _info_for_exception(info_for_exception)
|
||||
, _profiled_method(profiled_method)
|
||||
, _profiled_bci(profiled_bci) {
|
||||
, _profiled_method(NULL)
|
||||
, _profiled_bci(-1)
|
||||
, _should_profile(false)
|
||||
{
|
||||
if (code == lir_checkcast) {
|
||||
assert(info_for_exception != NULL, "checkcast throws exceptions");
|
||||
} else if (code == lir_instanceof) {
|
||||
|
@ -372,7 +373,7 @@ LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr result, LIR_Opr object,
|
|||
|
||||
|
||||
|
||||
LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception, ciMethod* profiled_method, int profiled_bci)
|
||||
LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception)
|
||||
: LIR_Op(code, LIR_OprFact::illegalOpr, NULL)
|
||||
, _object(object)
|
||||
, _array(array)
|
||||
|
@ -384,8 +385,10 @@ LIR_OpTypeCheck::LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array, L
|
|||
, _stub(NULL)
|
||||
, _info_for_patch(NULL)
|
||||
, _info_for_exception(info_for_exception)
|
||||
, _profiled_method(profiled_method)
|
||||
, _profiled_bci(profiled_bci) {
|
||||
, _profiled_method(NULL)
|
||||
, _profiled_bci(-1)
|
||||
, _should_profile(false)
|
||||
{
|
||||
if (code == lir_store_check) {
|
||||
_stub = new ArrayStoreExceptionStub(info_for_exception);
|
||||
assert(info_for_exception != NULL, "store_check throws exceptions");
|
||||
|
@ -495,6 +498,8 @@ void LIR_OpVisitState::visit(LIR_Op* op) {
|
|||
case lir_monaddr: // input and result always valid, info always invalid
|
||||
case lir_null_check: // input and info always valid, result always invalid
|
||||
case lir_move: // input and result always valid, may have info
|
||||
case lir_pack64: // input and result always valid
|
||||
case lir_unpack64: // input and result always valid
|
||||
case lir_prefetchr: // input always valid, result and info always invalid
|
||||
case lir_prefetchw: // input always valid, result and info always invalid
|
||||
{
|
||||
|
@ -903,7 +908,6 @@ void LIR_OpVisitState::visit(LIR_Op* op) {
|
|||
assert(opProfileCall->_tmp1->is_valid(), "used"); do_temp(opProfileCall->_tmp1);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
|
@ -1015,7 +1019,11 @@ void LIR_OpAllocArray::emit_code(LIR_Assembler* masm) {
|
|||
}
|
||||
|
||||
void LIR_OpTypeCheck::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_opTypeCheck(this);
|
||||
if (code() == lir_checkcast) {
|
||||
masm->emit_checkcast(this);
|
||||
} else {
|
||||
masm->emit_opTypeCheck(this);
|
||||
}
|
||||
if (stub()) {
|
||||
masm->emit_code_stub(stub());
|
||||
}
|
||||
|
@ -1041,12 +1049,10 @@ void LIR_OpDelay::emit_code(LIR_Assembler* masm) {
|
|||
masm->emit_delay(this);
|
||||
}
|
||||
|
||||
|
||||
void LIR_OpProfileCall::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_profile_call(this);
|
||||
}
|
||||
|
||||
|
||||
// LIR_List
|
||||
LIR_List::LIR_List(Compilation* compilation, BlockBegin* block)
|
||||
: _operations(8)
|
||||
|
@ -1364,19 +1370,23 @@ void LIR_List::checkcast (LIR_Opr result, LIR_Opr object, ciKlass* klass,
|
|||
LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check,
|
||||
CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub,
|
||||
ciMethod* profiled_method, int profiled_bci) {
|
||||
append(new LIR_OpTypeCheck(lir_checkcast, result, object, klass,
|
||||
tmp1, tmp2, tmp3, fast_check, info_for_exception, info_for_patch, stub,
|
||||
profiled_method, profiled_bci));
|
||||
LIR_OpTypeCheck* c = new LIR_OpTypeCheck(lir_checkcast, result, object, klass,
|
||||
tmp1, tmp2, tmp3, fast_check, info_for_exception, info_for_patch, stub);
|
||||
if (profiled_method != NULL) {
|
||||
c->set_profiled_method(profiled_method);
|
||||
c->set_profiled_bci(profiled_bci);
|
||||
c->set_should_profile(true);
|
||||
}
|
||||
append(c);
|
||||
}
|
||||
|
||||
|
||||
void LIR_List::instanceof(LIR_Opr result, LIR_Opr object, ciKlass* klass, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, CodeEmitInfo* info_for_patch) {
|
||||
append(new LIR_OpTypeCheck(lir_instanceof, result, object, klass, tmp1, tmp2, tmp3, fast_check, NULL, info_for_patch, NULL, NULL, 0));
|
||||
append(new LIR_OpTypeCheck(lir_instanceof, result, object, klass, tmp1, tmp2, tmp3, fast_check, NULL, info_for_patch, NULL));
|
||||
}
|
||||
|
||||
|
||||
void LIR_List::store_check(LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception) {
|
||||
append(new LIR_OpTypeCheck(lir_store_check, object, array, tmp1, tmp2, tmp3, info_for_exception, NULL, 0));
|
||||
append(new LIR_OpTypeCheck(lir_store_check, object, array, tmp1, tmp2, tmp3, info_for_exception));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1611,6 +1621,8 @@ const char * LIR_Op::name() const {
|
|||
case lir_convert: s = "convert"; break;
|
||||
case lir_alloc_object: s = "alloc_obj"; break;
|
||||
case lir_monaddr: s = "mon_addr"; break;
|
||||
case lir_pack64: s = "pack64"; break;
|
||||
case lir_unpack64: s = "unpack64"; break;
|
||||
// LIR_Op2
|
||||
case lir_cmp: s = "cmp"; break;
|
||||
case lir_cmp_l2i: s = "cmp_l2i"; break;
|
||||
|
@ -1664,7 +1676,6 @@ const char * LIR_Op::name() const {
|
|||
case lir_cas_int: s = "cas_int"; break;
|
||||
// LIR_OpProfileCall
|
||||
case lir_profile_call: s = "profile_call"; break;
|
||||
|
||||
case lir_none: ShouldNotReachHere();break;
|
||||
default: s = "illegal_op"; break;
|
||||
}
|
||||
|
@ -1922,7 +1933,6 @@ void LIR_OpProfileCall::print_instr(outputStream* out) const {
|
|||
tmp1()->print(out); out->print(" ");
|
||||
}
|
||||
|
||||
|
||||
#endif // PRODUCT
|
||||
|
||||
// Implementation of LIR_InsertionBuffer
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue