Mercurial > hg > graal-compiler
comparison src/share/vm/c1/c1_LIR.cpp @ 8860:46f6f063b272
7153771: array bound check elimination for c1
Summary: when possible optimize out array bound checks, inserting predicates when needed.
Reviewed-by: never, kvn, twisti
Contributed-by: thomaswue <thomas.wuerthinger@oracle.com>
author | roland |
---|---|
date | Thu, 21 Mar 2013 09:27:54 +0100 |
parents | 84a926fe53d0 |
children | acadb114c818 |
comparison
equal
deleted
inserted
replaced
8780:98f3af397705 | 8860:46f6f063b272 |
---|---|
631 case lir_shl: | 631 case lir_shl: |
632 case lir_shr: | 632 case lir_shr: |
633 case lir_ushr: | 633 case lir_ushr: |
634 case lir_xadd: | 634 case lir_xadd: |
635 case lir_xchg: | 635 case lir_xchg: |
636 case lir_assert: | |
636 { | 637 { |
637 assert(op->as_Op2() != NULL, "must be"); | 638 assert(op->as_Op2() != NULL, "must be"); |
638 LIR_Op2* op2 = (LIR_Op2*)op; | 639 LIR_Op2* op2 = (LIR_Op2*)op; |
639 assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() && | 640 assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() && |
640 op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used"); | 641 op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used"); |
1110 if (stub()) { | 1111 if (stub()) { |
1111 masm->emit_code_stub(stub()); | 1112 masm->emit_code_stub(stub()); |
1112 } | 1113 } |
1113 } | 1114 } |
1114 | 1115 |
1116 #ifdef ASSERT | |
1117 void LIR_OpAssert::emit_code(LIR_Assembler* masm) { | |
1118 masm->emit_assert(this); | |
1119 } | |
1120 #endif | |
1115 | 1121 |
1116 void LIR_OpDelay::emit_code(LIR_Assembler* masm) { | 1122 void LIR_OpDelay::emit_code(LIR_Assembler* masm) { |
1117 masm->emit_delay(this); | 1123 masm->emit_delay(this); |
1118 } | 1124 } |
1119 | 1125 |
1769 case lir_cas_long: s = "cas_long"; break; | 1775 case lir_cas_long: s = "cas_long"; break; |
1770 case lir_cas_obj: s = "cas_obj"; break; | 1776 case lir_cas_obj: s = "cas_obj"; break; |
1771 case lir_cas_int: s = "cas_int"; break; | 1777 case lir_cas_int: s = "cas_int"; break; |
1772 // LIR_OpProfileCall | 1778 // LIR_OpProfileCall |
1773 case lir_profile_call: s = "profile_call"; break; | 1779 case lir_profile_call: s = "profile_call"; break; |
1780 // LIR_OpAssert | |
1781 case lir_assert: s = "assert"; break; | |
1774 case lir_none: ShouldNotReachHere();break; | 1782 case lir_none: ShouldNotReachHere();break; |
1775 default: s = "illegal_op"; break; | 1783 default: s = "illegal_op"; break; |
1776 } | 1784 } |
1777 return s; | 1785 return s; |
1778 } | 1786 } |
2015 _scratch->print(out); out->print(" "); | 2023 _scratch->print(out); out->print(" "); |
2016 } | 2024 } |
2017 out->print("[lbl:0x%x]", stub()->entry()); | 2025 out->print("[lbl:0x%x]", stub()->entry()); |
2018 } | 2026 } |
2019 | 2027 |
2028 void LIR_OpAssert::print_instr(outputStream* out) const { | |
2029 print_condition(out, condition()); out->print(" "); | |
2030 in_opr1()->print(out); out->print(" "); | |
2031 in_opr2()->print(out); out->print(", \""); | |
2032 out->print(msg()); out->print("\""); | |
2033 } | |
2034 | |
2020 | 2035 |
2021 void LIR_OpDelay::print_instr(outputStream* out) const { | 2036 void LIR_OpDelay::print_instr(outputStream* out) const { |
2022 _op->print_on(out); | 2037 _op->print_on(out); |
2023 } | 2038 } |
2024 | 2039 |