Mercurial > hg > graal-compiler
diff src/share/vm/c1/c1_LIR.cpp @ 1783:d5d065957597
6953144: Tiered compilation
Summary: Infrastructure for tiered compilation support (interpreter + c1 + c2) for 32 and 64 bit. Simple tiered policy implementation.
Reviewed-by: kvn, never, phh, twisti
author | iveresov |
---|---|
date | Fri, 03 Sep 2010 17:51:07 -0700 |
parents | 126ea7725993 |
children | 3a294e483abc |
line wrap: on
line diff
--- a/src/share/vm/c1/c1_LIR.cpp Thu Sep 02 11:40:02 2010 -0700 +++ b/src/share/vm/c1/c1_LIR.cpp Fri Sep 03 17:51:07 2010 -0700 @@ -345,9 +345,8 @@ 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 @@ , _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 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 @@ , _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 @@ 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 @@ assert(opProfileCall->_tmp1->is_valid(), "used"); do_temp(opProfileCall->_tmp1); break; } - default: ShouldNotReachHere(); } @@ -1015,7 +1019,11 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ tmp1()->print(out); out->print(" "); } - #endif // PRODUCT // Implementation of LIR_InsertionBuffer