--- old/src/hotspot/share/opto/chaitin.cpp 2019-03-11 14:26:37.914354716 +0100 +++ new/src/hotspot/share/opto/chaitin.cpp 2019-03-11 14:26:37.706354719 +0100 @@ -1668,10 +1668,10 @@ // can't happen at run-time but the optimizer cannot deduce it so // we have to handle it gracefully. assert(!derived->bottom_type()->isa_narrowoop() || - derived->bottom_type()->make_ptr()->is_ptr()->_offset == 0, "sanity"); + derived->bottom_type()->make_ptr()->is_ptr()->offset() == 0, "sanity"); const TypePtr *tj = derived->bottom_type()->isa_ptr(); // If its an OOP with a non-zero offset, then it is derived. - if( tj == NULL || tj->_offset == 0 ) { + if (tj == NULL || tj->offset() == 0) { derived_base_map[derived->_idx] = derived; return derived; } @@ -1837,9 +1837,9 @@ Node *derived = lrgs(neighbor)._def; const TypePtr *tj = derived->bottom_type()->isa_ptr(); assert(!derived->bottom_type()->isa_narrowoop() || - derived->bottom_type()->make_ptr()->is_ptr()->_offset == 0, "sanity"); + derived->bottom_type()->make_ptr()->is_ptr()->offset() == 0, "sanity"); // If its an OOP with a non-zero offset, then it is derived. - if( tj && tj->_offset != 0 && tj->isa_oop_ptr() ) { + if (tj && tj->offset() != 0 && tj->isa_oop_ptr()) { Node *base = find_base_for_derived(derived_base_map, derived, maxlrg); assert(base->_idx < _lrg_map.size(), ""); // Add reaching DEFs of derived pointer and base pointer as a @@ -2131,7 +2131,7 @@ void PhaseChaitin::dump_frame() const { const char *fp = OptoReg::regname(OptoReg::c_frame_pointer); - const TypeTuple *domain = C->tf()->domain(); + const TypeTuple *domain = C->tf()->domain_cc(); const int argcnt = domain->cnt() - TypeFunc::Parms; // Incoming arguments in registers dump @@ -2168,6 +2168,11 @@ _matcher._parm_regs[j].second() == reg ) { tty->print("parm %d: ",j); domain->field_at(j + TypeFunc::Parms)->dump(); + if (!C->FIRST_STACK_mask().Member(reg)) { + // Reserved entry in the argument stack area that is not used because + // it may hold the return address (see Matcher::init_first_stack_mask()). + tty->print(" [RESERVED] "); + } tty->cr(); break; }