comparison src/share/vm/opto/lcm.cpp @ 253:b0fe4deeb9fb

6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.") Summary: Escape Analysis fixes. Reviewed-by: never, rasbold
author kvn
date Mon, 28 Jul 2008 17:12:52 -0700
parents d1605aabd0a1
children c792b641b8bd 1ee8caae33af
comparison
equal deleted inserted replaced
252:be7facf71163 253:b0fe4deeb9fb
320 } 320 }
321 321
322 uint choice = 0; // Bigger is most important 322 uint choice = 0; // Bigger is most important
323 uint latency = 0; // Bigger is scheduled first 323 uint latency = 0; // Bigger is scheduled first
324 uint score = 0; // Bigger is better 324 uint score = 0; // Bigger is better
325 uint idx; // Index in worklist 325 int idx = -1; // Index in worklist
326 326
327 for( uint i=0; i<cnt; i++ ) { // Inspect entire worklist 327 for( uint i=0; i<cnt; i++ ) { // Inspect entire worklist
328 // Order in worklist is used to break ties. 328 // Order in worklist is used to break ties.
329 // See caller for how this is used to delay scheduling 329 // See caller for how this is used to delay scheduling
330 // of induction variable increments to after the other 330 // of induction variable increments to after the other
410 score = n_score; 410 score = n_score;
411 idx = i; // Also keep index in worklist 411 idx = i; // Also keep index in worklist
412 } 412 }
413 } // End of for all ready nodes in worklist 413 } // End of for all ready nodes in worklist
414 414
415 Node *n = worklist[idx]; // Get the winner 415 assert(idx >= 0, "index should be set");
416 416 Node *n = worklist[(uint)idx]; // Get the winner
417 worklist.map(idx,worklist.pop()); // Compress worklist 417
418 worklist.map((uint)idx, worklist.pop()); // Compress worklist
418 return n; 419 return n;
419 } 420 }
420 421
421 422
422 //------------------------------set_next_call---------------------------------- 423 //------------------------------set_next_call----------------------------------
597 n->del_req(n->req() - 1); 598 n->del_req(n->req() - 1);
598 n->add_prec(oop_store); 599 n->add_prec(oop_store);
599 assert(cfg->_bbs[oop_store->_idx]->_dom_depth <= this->_dom_depth, "oop_store must dominate card-mark"); 600 assert(cfg->_bbs[oop_store->_idx]->_dom_depth <= this->_dom_depth, "oop_store must dominate card-mark");
600 } 601 }
601 } 602 }
602 if( n->is_Mach() && n->as_Mach()->ideal_Opcode() == Op_MemBarAcquire ) { 603 if( n->is_Mach() && n->as_Mach()->ideal_Opcode() == Op_MemBarAcquire &&
604 n->req() > TypeFunc::Parms ) {
605 // MemBarAcquire could be created without Precedent edge.
606 // del_req() replaces the specified edge with the last input edge
607 // and then removes the last edge. If the specified edge > number of
608 // edges the last edge will be moved outside of the input edges array
609 // and the edge will be lost. This is why this code should be
610 // executed only when Precedent (== TypeFunc::Parms) edge is present.
603 Node *x = n->in(TypeFunc::Parms); 611 Node *x = n->in(TypeFunc::Parms);
604 n->del_req(TypeFunc::Parms); 612 n->del_req(TypeFunc::Parms);
605 n->add_prec(x); 613 n->add_prec(x);
606 } 614 }
607 } 615 }