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);
}