Lines Matching defs:derived

392   // derived pointers.  This makes base pointers live up to the where the
393 // derived pointer is made, but not beyond. Really, they need to be live
394 // across any GC point where the derived value is live. So this code looks
1719 // given derived Node. Easy for AddP-related machine nodes, but needs
1720 // to be recursive for derived Phis.
1721 Node *PhaseChaitin::find_base_for_derived( Node **derived_base_map, Node *derived, uint &maxlrg ) {
1723 if( derived_base_map[derived->_idx] )
1724 return derived_base_map[derived->_idx];
1728 // pointers derived from NULL! These are always along paths that
1731 assert(!derived->bottom_type()->isa_narrowoop() ||
1732 derived->bottom_type()->make_ptr()->is_ptr()->_offset == 0, "sanity");
1733 const TypePtr *tj = derived->bottom_type()->isa_ptr();
1734 // If its an OOP with a non-zero offset, then it is derived.
1736 derived_base_map[derived->_idx] = derived;
1737 return derived;
1740 if( derived->is_Con() ) {
1769 derived_base_map[derived->_idx] = base;
1774 if (!derived->is_Phi()) {
1775 assert(derived->as_Mach()->ideal_Opcode() == Op_AddP, "but is: %s", derived->Name());
1776 Node *base = derived->in(AddPNode::Base);
1777 derived_base_map[derived->_idx] = base;
1783 Node *base = find_base_for_derived( derived_base_map, derived->in(1),maxlrg);
1785 for( i = 2; i < derived->req(); i++ )
1786 if( base != find_base_for_derived( derived_base_map,derived->in(i),maxlrg))
1789 if( i == derived->req() ) { // No need for a base Phi here
1790 derived_base_map[derived->_idx] = base;
1796 base = new PhiNode( derived->in(0), t );
1797 for( i = 1; i < derived->req(); i++ ) {
1798 base->init_req(i, find_base_for_derived(derived_base_map, derived->in(i), maxlrg));
1804 Block *b = _cfg.get_block_for_node(derived);
1827 derived_base_map[derived->_idx] = base;
1831 // At each Safepoint, insert extra debug edges for each pair of derived value/
1892 // Now scan for a live derived pointer
1896 // Find reaching DEF for base and derived values
1898 Node *derived = lrgs(neighbor)._def;
1899 const TypePtr *tj = derived->bottom_type()->isa_ptr();
1900 assert(!derived->bottom_type()->isa_narrowoop() ||
1901 derived->bottom_type()->make_ptr()->is_ptr()->_offset == 0, "sanity");
1902 // If its an OOP with a non-zero offset, then it is derived.
1904 Node *base = find_base_for_derived(derived_base_map, derived, maxlrg);
1906 // Add reaching DEFs of derived pointer and base pointer as a
1908 n->add_req(derived);
1926 } // End of scan all live data for derived ptrs crossing GC point