8039050: Crash in C2 compiler at Node::rematerialize
Added missing calls to record_for_igvn() in loop opts. Added verification of def-use domination. Reviewed-by: iveresov
This commit is contained in:
parent
3a724605fc
commit
8badeecc2c
@ -1150,6 +1150,7 @@ void PhaseIdealLoop::insert_pre_post_loops( IdealLoopTree *loop, Node_List &old_
|
||||
// Now force out all loop-invariant dominating tests. The optimizer
|
||||
// finds some, but we _know_ they are all useless.
|
||||
peeled_dom_test_elim(loop,old_new);
|
||||
loop->record_for_igvn();
|
||||
}
|
||||
|
||||
//------------------------------is_invariant-----------------------------
|
||||
|
@ -3172,17 +3172,16 @@ bool PhaseIdealLoop::verify_dominance(Node* n, Node* use, Node* LCA, Node* early
|
||||
bool had_error = false;
|
||||
#ifdef ASSERT
|
||||
if (early != C->root()) {
|
||||
// Make sure that there's a dominance path from use to LCA
|
||||
Node* d = use;
|
||||
while (d != LCA) {
|
||||
d = idom(d);
|
||||
// Make sure that there's a dominance path from LCA to early
|
||||
Node* d = LCA;
|
||||
while (d != early) {
|
||||
if (d == C->root()) {
|
||||
tty->print_cr("*** Use %d isn't dominated by def %s", use->_idx, n->_idx);
|
||||
n->dump();
|
||||
use->dump();
|
||||
dump_bad_graph("Bad graph detected in compute_lca_of_uses", n, early, LCA);
|
||||
tty->print_cr("*** Use %d isn't dominated by def %d ***", use->_idx, n->_idx);
|
||||
had_error = true;
|
||||
break;
|
||||
}
|
||||
d = idom(d);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -3435,6 +3434,13 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) {
|
||||
_igvn._worklist.push(n); // Maybe we'll normalize it, if no more loops.
|
||||
}
|
||||
|
||||
#ifdef ASSERT
|
||||
if (_verify_only && !n->is_CFG()) {
|
||||
// Check def-use domination.
|
||||
compute_lca_of_uses(n, get_ctrl(n), true /* verify */);
|
||||
}
|
||||
#endif
|
||||
|
||||
// CFG and pinned nodes already handled
|
||||
if( n->in(0) ) {
|
||||
if( n->in(0)->is_top() ) return; // Dead?
|
||||
|
@ -2700,6 +2700,7 @@ bool PhaseIdealLoop::partial_peel( IdealLoopTree *loop, Node_List &old_new ) {
|
||||
// Inhibit more partial peeling on this loop
|
||||
new_head_clone->set_partial_peel_loop();
|
||||
C->set_major_progress();
|
||||
loop->record_for_igvn();
|
||||
|
||||
#if !defined(PRODUCT)
|
||||
if (TracePartialPeeling) {
|
||||
|
Loading…
Reference in New Issue
Block a user