hotspot/src/share/vm/opto/live.cpp
changeset 20022 e6e3f5ff6d73
parent 19979 ebe1dbb6e1aa
parent 20007 b67e71448544
child 22234 da823d78ad65
equal deleted inserted replaced
20006:9dc2add3103b 20022:e6e3f5ff6d73
    89       Node* n = block->get_node(i-1);
    89       Node* n = block->get_node(i-1);
    90       if (n->is_Phi()) {
    90       if (n->is_Phi()) {
    91         break;
    91         break;
    92       }
    92       }
    93 
    93 
    94       uint r = _names[n->_idx];
    94       uint r = _names.at(n->_idx);
    95       assert(!def_outside->member(r), "Use of external LRG overlaps the same LRG defined in this block");
    95       assert(!def_outside->member(r), "Use of external LRG overlaps the same LRG defined in this block");
    96       def->insert( r );
    96       def->insert( r );
    97       use->remove( r );
    97       use->remove( r );
    98       uint cnt = n->req();
    98       uint cnt = n->req();
    99       for (uint k = 1; k < cnt; k++) {
    99       for (uint k = 1; k < cnt; k++) {
   100         Node *nk = n->in(k);
   100         Node *nk = n->in(k);
   101         uint nkidx = nk->_idx;
   101         uint nkidx = nk->_idx;
   102         if (_cfg.get_block_for_node(nk) != block) {
   102         if (_cfg.get_block_for_node(nk) != block) {
   103           uint u = _names[nkidx];
   103           uint u = _names.at(nkidx);
   104           use->insert(u);
   104           use->insert(u);
   105           DEBUG_ONLY(def_outside->insert(u);)
   105           DEBUG_ONLY(def_outside->insert(u);)
   106         }
   106         }
   107       }
   107       }
   108     }
   108     }
   110     def_outside->set_next(_free_IndexSet);
   110     def_outside->set_next(_free_IndexSet);
   111     _free_IndexSet = def_outside;     // Drop onto free list
   111     _free_IndexSet = def_outside;     // Drop onto free list
   112 #endif
   112 #endif
   113     // Remove anything defined by Phis and the block start instruction
   113     // Remove anything defined by Phis and the block start instruction
   114     for (uint k = i; k > 0; k--) {
   114     for (uint k = i; k > 0; k--) {
   115       uint r = _names[block->get_node(k - 1)->_idx];
   115       uint r = _names.at(block->get_node(k - 1)->_idx);
   116       def->insert(r);
   116       def->insert(r);
   117       use->remove(r);
   117       use->remove(r);
   118     }
   118     }
   119 
   119 
   120     // Push these live-in things to predecessors
   120     // Push these live-in things to predecessors
   122       Block* p = _cfg.get_block_for_node(block->pred(l));
   122       Block* p = _cfg.get_block_for_node(block->pred(l));
   123       add_liveout(p, use, first_pass);
   123       add_liveout(p, use, first_pass);
   124 
   124 
   125       // PhiNode uses go in the live-out set of prior blocks.
   125       // PhiNode uses go in the live-out set of prior blocks.
   126       for (uint k = i; k > 0; k--) {
   126       for (uint k = i; k > 0; k--) {
   127         add_liveout(p, _names[block->get_node(k-1)->in(l)->_idx], first_pass);
   127         add_liveout(p, _names.at(block->get_node(k-1)->in(l)->_idx), first_pass);
   128       }
   128       }
   129     }
   129     }
   130     freeset(block);
   130     freeset(block);
   131     first_pass.set(block->_pre_order);
   131     first_pass.set(block->_pre_order);
   132 
   132 
   254 void PhaseLive::dump( const Block *b ) const {
   254 void PhaseLive::dump( const Block *b ) const {
   255   tty->print("Block %d: ",b->_pre_order);
   255   tty->print("Block %d: ",b->_pre_order);
   256   tty->print("LiveOut: ");  _live[b->_pre_order-1].dump();
   256   tty->print("LiveOut: ");  _live[b->_pre_order-1].dump();
   257   uint cnt = b->number_of_nodes();
   257   uint cnt = b->number_of_nodes();
   258   for( uint i=0; i<cnt; i++ ) {
   258   for( uint i=0; i<cnt; i++ ) {
   259     tty->print("L%d/", _names[b->get_node(i)->_idx] );
   259     tty->print("L%d/", _names.at(b->get_node(i)->_idx));
   260     b->get_node(i)->dump();
   260     b->get_node(i)->dump();
   261   }
   261   }
   262   tty->print("\n");
   262   tty->print("\n");
   263 }
   263 }
   264 
   264