src/share/vm/opto/phaseX.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/phaseX.cpp	Tue Sep 28 18:04:11 2010
--- new/src/share/vm/opto/phaseX.cpp	Tue Sep 28 18:04:11 2010

*** 842,855 **** --- 842,875 ---- _verify_window[i] = NULL; } } #endif + #ifdef ASSERT + Node* prev = NULL; + uint rep_cnt = 0; + uint loop_count = 0; + #endif // Pull from worklist; transform node; // If node has changed: update edge info and put uses on worklist. while( _worklist.size() ) { Node *n = _worklist.pop(); + #ifdef ASSERT + if (++loop_count >= K * C->unique()) { + n->dump(4); + assert(false, "infinite loop in PhaseIterGVN::optimize"); + } + if (n == prev) { + if (++rep_cnt > 3) { + n->dump(4); + assert(false, "loop in Ideal transformation"); + } + } else { + rep_cnt = 0; + } + prev = n; + #endif if (TraceIterativeGVN && Verbose) { tty->print(" Pop "); NOT_PRODUCT( n->dump(); ) debug_only(if( (num_processed++ % 100) == 0 ) _worklist.print_set();) }

src/share/vm/opto/phaseX.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File