hotspot/src/share/vm/opto/lcm.cpp
changeset 9179 6db9c9dffe1f
parent 8921 14bfe81f2a9d
parent 9175 80221fe09772
child 10019 6ea76c84109f
equal deleted inserted replaced
8932:a676b28e2093 9179:6db9c9dffe1f
   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