686 if( m && cfg->_bbs[m->_idx] == this && !m->is_top() ) |
686 if( m && cfg->_bbs[m->_idx] == this && !m->is_top() ) |
687 local++; // One more block-local input |
687 local++; // One more block-local input |
688 } |
688 } |
689 ready_cnt[n->_idx] = local; // Count em up |
689 ready_cnt[n->_idx] = local; // Count em up |
690 |
690 |
|
691 #ifdef ASSERT |
|
692 if( UseConcMarkSweepGC || UseG1GC ) { |
|
693 if( n->is_Mach() && n->as_Mach()->ideal_Opcode() == Op_StoreCM ) { |
|
694 // Check the precedence edges |
|
695 for (uint prec = n->req(); prec < n->len(); prec++) { |
|
696 Node* oop_store = n->in(prec); |
|
697 if (oop_store != NULL) { |
|
698 assert(cfg->_bbs[oop_store->_idx]->_dom_depth <= this->_dom_depth, "oop_store must dominate card-mark"); |
|
699 } |
|
700 } |
|
701 } |
|
702 } |
|
703 #endif |
|
704 |
691 // A few node types require changing a required edge to a precedence edge |
705 // A few node types require changing a required edge to a precedence edge |
692 // before allocation. |
706 // before allocation. |
693 if( UseConcMarkSweepGC || UseG1GC ) { |
|
694 if( n->is_Mach() && n->as_Mach()->ideal_Opcode() == Op_StoreCM ) { |
|
695 // Note: Required edges with an index greater than oper_input_base |
|
696 // are not supported by the allocator. |
|
697 // Note2: Can only depend on unmatched edge being last, |
|
698 // can not depend on its absolute position. |
|
699 Node *oop_store = n->in(n->req() - 1); |
|
700 n->del_req(n->req() - 1); |
|
701 n->add_prec(oop_store); |
|
702 assert(cfg->_bbs[oop_store->_idx]->_dom_depth <= this->_dom_depth, "oop_store must dominate card-mark"); |
|
703 } |
|
704 } |
|
705 if( n->is_Mach() && n->req() > TypeFunc::Parms && |
707 if( n->is_Mach() && n->req() > TypeFunc::Parms && |
706 (n->as_Mach()->ideal_Opcode() == Op_MemBarAcquire || |
708 (n->as_Mach()->ideal_Opcode() == Op_MemBarAcquire || |
707 n->as_Mach()->ideal_Opcode() == Op_MemBarVolatile) ) { |
709 n->as_Mach()->ideal_Opcode() == Op_MemBarVolatile) ) { |
708 // MemBarAcquire could be created without Precedent edge. |
710 // MemBarAcquire could be created without Precedent edge. |
709 // del_req() replaces the specified edge with the last input edge |
711 // del_req() replaces the specified edge with the last input edge |