< prev index next >

src/hotspot/share/opto/chaitin.cpp

Print this page

        

*** 1666,1679 **** // NOTE: we use TypePtr instead of TypeOopPtr because we can have // pointers derived from NULL! These are always along paths that // 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"); 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 ) { derived_base_map[derived->_idx] = derived; return derived; } // Derived is NULL+offset? Base is NULL! if( derived->is_Con() ) { --- 1666,1679 ---- // NOTE: we use TypePtr instead of TypeOopPtr because we can have // pointers derived from NULL! These are always along paths that // 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"); 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) { derived_base_map[derived->_idx] = derived; return derived; } // Derived is NULL+offset? Base is NULL! if( derived->is_Con() ) {
*** 1835,1847 **** // Find reaching DEF for base and derived values // This works because we are still in SSA during this call. 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"); // If its an OOP with a non-zero offset, then it is derived. ! 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 // pair of inputs n->add_req(derived); --- 1835,1847 ---- // Find reaching DEF for base and derived values // This works because we are still in SSA during this call. 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"); // If its an OOP with a non-zero offset, then it is derived. ! 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 // pair of inputs n->add_req(derived);
*** 2129,2139 **** } } void PhaseChaitin::dump_frame() const { const char *fp = OptoReg::regname(OptoReg::c_frame_pointer); ! const TypeTuple *domain = C->tf()->domain(); const int argcnt = domain->cnt() - TypeFunc::Parms; // Incoming arguments in registers dump for( int k = 0; k < argcnt; k++ ) { OptoReg::Name parmreg = _matcher._parm_regs[k].first(); --- 2129,2139 ---- } } void PhaseChaitin::dump_frame() const { const char *fp = OptoReg::regname(OptoReg::c_frame_pointer); ! const TypeTuple *domain = C->tf()->domain_cc(); const int argcnt = domain->cnt() - TypeFunc::Parms; // Incoming arguments in registers dump for( int k = 0; k < argcnt; k++ ) { OptoReg::Name parmreg = _matcher._parm_regs[k].first();
*** 2166,2175 **** --- 2166,2180 ---- for( j = 0; j < argcnt; j++) { if( _matcher._parm_regs[j].first() == reg || _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; } } if( j >= argcnt )
< prev index next >