Mercurial > hg > truffle
comparison src/share/vm/c1/c1_LIR.hpp @ 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 |
comparison
equal
deleted
inserted
replaced
1782:f353275af40e | 1783:d5d065957597 |
---|---|
847 , lir_convert | 847 , lir_convert |
848 , lir_alloc_object | 848 , lir_alloc_object |
849 , lir_monaddr | 849 , lir_monaddr |
850 , lir_roundfp | 850 , lir_roundfp |
851 , lir_safepoint | 851 , lir_safepoint |
852 , lir_pack64 | |
853 , lir_unpack64 | |
852 , lir_unwind | 854 , lir_unwind |
853 , end_op1 | 855 , end_op1 |
854 , begin_op2 | 856 , begin_op2 |
855 , lir_cmp | 857 , lir_cmp |
856 , lir_cmp_l2i | 858 , lir_cmp_l2i |
1462 LIR_Opr _tmp3; | 1464 LIR_Opr _tmp3; |
1463 bool _fast_check; | 1465 bool _fast_check; |
1464 CodeEmitInfo* _info_for_patch; | 1466 CodeEmitInfo* _info_for_patch; |
1465 CodeEmitInfo* _info_for_exception; | 1467 CodeEmitInfo* _info_for_exception; |
1466 CodeStub* _stub; | 1468 CodeStub* _stub; |
1467 // Helpers for Tier1UpdateMethodData | |
1468 ciMethod* _profiled_method; | 1469 ciMethod* _profiled_method; |
1469 int _profiled_bci; | 1470 int _profiled_bci; |
1471 bool _should_profile; | |
1470 | 1472 |
1471 public: | 1473 public: |
1472 LIR_OpTypeCheck(LIR_Code code, LIR_Opr result, LIR_Opr object, ciKlass* klass, | 1474 LIR_OpTypeCheck(LIR_Code code, LIR_Opr result, LIR_Opr object, ciKlass* klass, |
1473 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, | 1475 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, |
1474 CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub, | 1476 CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub); |
1475 ciMethod* profiled_method, int profiled_bci); | |
1476 LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array, | 1477 LIR_OpTypeCheck(LIR_Code code, LIR_Opr object, LIR_Opr array, |
1477 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception, | 1478 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception); |
1478 ciMethod* profiled_method, int profiled_bci); | |
1479 | 1479 |
1480 LIR_Opr object() const { return _object; } | 1480 LIR_Opr object() const { return _object; } |
1481 LIR_Opr array() const { assert(code() == lir_store_check, "not valid"); return _array; } | 1481 LIR_Opr array() const { assert(code() == lir_store_check, "not valid"); return _array; } |
1482 LIR_Opr tmp1() const { return _tmp1; } | 1482 LIR_Opr tmp1() const { return _tmp1; } |
1483 LIR_Opr tmp2() const { return _tmp2; } | 1483 LIR_Opr tmp2() const { return _tmp2; } |
1487 CodeEmitInfo* info_for_patch() const { return _info_for_patch; } | 1487 CodeEmitInfo* info_for_patch() const { return _info_for_patch; } |
1488 CodeEmitInfo* info_for_exception() const { return _info_for_exception; } | 1488 CodeEmitInfo* info_for_exception() const { return _info_for_exception; } |
1489 CodeStub* stub() const { return _stub; } | 1489 CodeStub* stub() const { return _stub; } |
1490 | 1490 |
1491 // methodDataOop profiling | 1491 // methodDataOop profiling |
1492 ciMethod* profiled_method() { return _profiled_method; } | 1492 void set_profiled_method(ciMethod *method) { _profiled_method = method; } |
1493 int profiled_bci() { return _profiled_bci; } | 1493 void set_profiled_bci(int bci) { _profiled_bci = bci; } |
1494 void set_should_profile(bool b) { _should_profile = b; } | |
1495 ciMethod* profiled_method() const { return _profiled_method; } | |
1496 int profiled_bci() const { return _profiled_bci; } | |
1497 bool should_profile() const { return _should_profile; } | |
1494 | 1498 |
1495 virtual void emit_code(LIR_Assembler* masm); | 1499 virtual void emit_code(LIR_Assembler* masm); |
1496 virtual LIR_OpTypeCheck* as_OpTypeCheck() { return this; } | 1500 virtual LIR_OpTypeCheck* as_OpTypeCheck() { return this; } |
1497 void print_instr(outputStream* out) const PRODUCT_RETURN; | 1501 void print_instr(outputStream* out) const PRODUCT_RETURN; |
1498 }; | 1502 }; |
1769 virtual void emit_code(LIR_Assembler* masm); | 1773 virtual void emit_code(LIR_Assembler* masm); |
1770 virtual LIR_OpProfileCall* as_OpProfileCall() { return this; } | 1774 virtual LIR_OpProfileCall* as_OpProfileCall() { return this; } |
1771 virtual void print_instr(outputStream* out) const PRODUCT_RETURN; | 1775 virtual void print_instr(outputStream* out) const PRODUCT_RETURN; |
1772 }; | 1776 }; |
1773 | 1777 |
1774 | |
1775 class LIR_InsertionBuffer; | 1778 class LIR_InsertionBuffer; |
1776 | 1779 |
1777 //--------------------------------LIR_List--------------------------------------------------- | 1780 //--------------------------------LIR_List--------------------------------------------------- |
1778 // Maintains a list of LIR instructions (one instance of LIR_List per basic block) | 1781 // Maintains a list of LIR instructions (one instance of LIR_List per basic block) |
1779 // The LIR instructions are appended by the LIR_List class itself; | 1782 // The LIR instructions are appended by the LIR_List class itself; |
1833 void append(LIR_InsertionBuffer* buffer); | 1836 void append(LIR_InsertionBuffer* buffer); |
1834 | 1837 |
1835 //---------- mutators --------------- | 1838 //---------- mutators --------------- |
1836 void insert_before(int i, LIR_List* op_list) { _operations.insert_before(i, op_list->instructions_list()); } | 1839 void insert_before(int i, LIR_List* op_list) { _operations.insert_before(i, op_list->instructions_list()); } |
1837 void insert_before(int i, LIR_Op* op) { _operations.insert_before(i, op); } | 1840 void insert_before(int i, LIR_Op* op) { _operations.insert_before(i, op); } |
1841 void remove_at(int i) { _operations.remove_at(i); } | |
1838 | 1842 |
1839 //---------- printing ------------- | 1843 //---------- printing ------------- |
1840 void print_instructions() PRODUCT_RETURN; | 1844 void print_instructions() PRODUCT_RETURN; |
1841 | 1845 |
1842 | 1846 |
1906 | 1910 |
1907 void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and, left, right, dst)); } | 1911 void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and, left, right, dst)); } |
1908 void logical_or (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or, left, right, dst)); } | 1912 void logical_or (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or, left, right, dst)); } |
1909 void logical_xor (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_xor, left, right, dst)); } | 1913 void logical_xor (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_xor, left, right, dst)); } |
1910 | 1914 |
1915 void pack64(LIR_Opr src, LIR_Opr dst) { append(new LIR_Op1(lir_pack64, src, dst, T_LONG, lir_patch_none, NULL)); } | |
1916 void unpack64(LIR_Opr src, LIR_Opr dst) { append(new LIR_Op1(lir_unpack64, src, dst, T_LONG, lir_patch_none, NULL)); } | |
1917 | |
1911 void null_check(LIR_Opr opr, CodeEmitInfo* info) { append(new LIR_Op1(lir_null_check, opr, info)); } | 1918 void null_check(LIR_Opr opr, CodeEmitInfo* info) { append(new LIR_Op1(lir_null_check, opr, info)); } |
1912 void throw_exception(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) { | 1919 void throw_exception(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmitInfo* info) { |
1913 append(new LIR_Op2(lir_throw, exceptionPC, exceptionOop, LIR_OprFact::illegalOpr, info)); | 1920 append(new LIR_Op2(lir_throw, exceptionPC, exceptionOop, LIR_OprFact::illegalOpr, info)); |
1914 } | 1921 } |
1915 void unwind_exception(LIR_Opr exceptionOop) { | 1922 void unwind_exception(LIR_Opr exceptionOop) { |
2032 | 2039 |
2033 void arraycopy(LIR_Opr src, LIR_Opr src_pos, LIR_Opr dst, LIR_Opr dst_pos, LIR_Opr length, LIR_Opr tmp, ciArrayKlass* expected_type, int flags, CodeEmitInfo* info) { append(new LIR_OpArrayCopy(src, src_pos, dst, dst_pos, length, tmp, expected_type, flags, info)); } | 2040 void arraycopy(LIR_Opr src, LIR_Opr src_pos, LIR_Opr dst, LIR_Opr dst_pos, LIR_Opr length, LIR_Opr tmp, ciArrayKlass* expected_type, int flags, CodeEmitInfo* info) { append(new LIR_OpArrayCopy(src, src_pos, dst, dst_pos, length, tmp, expected_type, flags, info)); } |
2034 | 2041 |
2035 void fpop_raw() { append(new LIR_Op0(lir_fpop_raw)); } | 2042 void fpop_raw() { append(new LIR_Op0(lir_fpop_raw)); } |
2036 | 2043 |
2044 void 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); | |
2045 void store_check(LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception); | |
2046 | |
2037 void checkcast (LIR_Opr result, LIR_Opr object, ciKlass* klass, | 2047 void checkcast (LIR_Opr result, LIR_Opr object, ciKlass* klass, |
2038 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, | 2048 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, |
2039 CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub, | 2049 CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub, |
2040 ciMethod* profiled_method, int profiled_bci); | 2050 ciMethod* profiled_method, int profiled_bci); |
2041 void 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); | |
2042 void store_check(LIR_Opr object, LIR_Opr array, LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, CodeEmitInfo* info_for_exception); | |
2043 | |
2044 // methodDataOop profiling | 2051 // methodDataOop profiling |
2045 void profile_call(ciMethod* method, int bci, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { append(new LIR_OpProfileCall(lir_profile_call, method, bci, mdo, recv, t1, cha_klass)); } | 2052 void profile_call(ciMethod* method, int bci, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { |
2053 append(new LIR_OpProfileCall(lir_profile_call, method, bci, mdo, recv, t1, cha_klass)); | |
2054 } | |
2046 }; | 2055 }; |
2047 | 2056 |
2048 void print_LIR(BlockList* blocks); | 2057 void print_LIR(BlockList* blocks); |
2049 | 2058 |
2050 class LIR_InsertionBuffer : public CompilationResourceObj { | 2059 class LIR_InsertionBuffer : public CompilationResourceObj { |