src/share/vm/c1/c1_LIR.cpp

Print this page
rev 4136 : 7153771: array bound check elimination for c1
Summary: when possible optimize out array bound checks, inserting predicates when needed.
Reviewed-by:

*** 631,640 **** --- 631,641 ---- case lir_shl: case lir_shr: case lir_ushr: case lir_xadd: case lir_xchg: + case lir_assert: { assert(op->as_Op2() != NULL, "must be"); LIR_Op2* op2 = (LIR_Op2*)op; assert(op2->_tmp2->is_illegal() && op2->_tmp3->is_illegal() && op2->_tmp4->is_illegal() && op2->_tmp5->is_illegal(), "not used");
*** 1110,1119 **** --- 1111,1125 ---- if (stub()) { masm->emit_code_stub(stub()); } } + #ifndef PRODUCT + void LIR_OpAssert::emit_code(LIR_Assembler* masm) { + masm->emit_assert(this); + } + #endif void LIR_OpDelay::emit_code(LIR_Assembler* masm) { masm->emit_delay(this); }
*** 1769,1778 **** --- 1775,1786 ---- case lir_cas_long: s = "cas_long"; break; case lir_cas_obj: s = "cas_obj"; break; case lir_cas_int: s = "cas_int"; break; // LIR_OpProfileCall case lir_profile_call: s = "profile_call"; break; + // LIR_OpAssert + case lir_assert: s = "assert"; break; case lir_none: ShouldNotReachHere();break; default: s = "illegal_op"; break; } return s; }
*** 2015,2024 **** --- 2023,2039 ---- _scratch->print(out); out->print(" "); } out->print("[lbl:0x%x]", stub()->entry()); } + void LIR_OpAssert::print_instr(outputStream* out) const { + print_condition(out, condition()); out->print(" "); + in_opr1()->print(out); out->print(" "); + in_opr2()->print(out); out->print(", \""); + out->print(msg()); out->print("\""); + } + void LIR_OpDelay::print_instr(outputStream* out) const { _op->print_on(out); }