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