< prev index next >

src/hotspot/share/c1/c1_LIRGenerator.cpp

Print this page

*** 2161,2170 **** --- 2161,2193 ---- __ branch_destination(slow_path->continuation()); } } } + void LIRGenerator::do_WithField(WithField* x) { + // This happens only when a class X uses the withfield bytecode to refer to + // an inline class V, where V has not yet been loaded. This is not a common + // case. Let's just deoptimize. + CodeEmitInfo* info = state_for(x, x->state_before()); + CodeStub* stub = new DeoptimizeStub(new CodeEmitInfo(info), + Deoptimization::Reason_unloaded, + Deoptimization::Action_make_not_entrant); + __ branch(lir_cond_always, T_ILLEGAL, stub); + LIR_Opr reg = rlock_result(x, T_OBJECT); + __ move(LIR_OprFact::oopConst(NULL), reg); + } + + void LIRGenerator::do_DefaultValue(DefaultValue* x) { + // Same as withfield above. Let's deoptimize. + CodeEmitInfo* info = state_for(x, x->state_before()); + CodeStub* stub = new DeoptimizeStub(new CodeEmitInfo(info), + Deoptimization::Reason_unloaded, + Deoptimization::Action_make_not_entrant); + __ branch(lir_cond_always, T_ILLEGAL, stub); + LIR_Opr reg = rlock_result(x, T_OBJECT); + __ move(LIR_OprFact::oopConst(NULL), reg); + } void LIRGenerator::do_NullCheck(NullCheck* x) { if (x->can_trap()) { LIRItem value(x->obj(), this); value.load_item();
< prev index next >