Mercurial > hg > graal-compiler
comparison src/share/vm/opto/phaseX.cpp @ 1826:56601ef83436
6916062: assert(_inserts <= _insert_limit,"hash table overflow") in NodeHash::hash_insert
Summary: Missing check for not empty worklist when puting memory node back on worklist and expecting address type update.
Reviewed-by: never
author | kvn |
---|---|
date | Thu, 30 Sep 2010 18:31:45 -0700 |
parents | 6027dddc26c6 |
children | f95d63e2154a |
comparison
equal
deleted
inserted
replaced
1825:80c9354976b0 | 1826:56601ef83436 |
---|---|
842 _verify_window[i] = NULL; | 842 _verify_window[i] = NULL; |
843 } | 843 } |
844 } | 844 } |
845 #endif | 845 #endif |
846 | 846 |
847 #ifdef ASSERT | |
848 Node* prev = NULL; | |
849 uint rep_cnt = 0; | |
850 #endif | |
851 uint loop_count = 0; | |
852 | |
847 // Pull from worklist; transform node; | 853 // Pull from worklist; transform node; |
848 // If node has changed: update edge info and put uses on worklist. | 854 // If node has changed: update edge info and put uses on worklist. |
849 while( _worklist.size() ) { | 855 while( _worklist.size() ) { |
850 Node *n = _worklist.pop(); | 856 Node *n = _worklist.pop(); |
857 if (++loop_count >= K * C->unique()) { | |
858 debug_only(n->dump(4);) | |
859 assert(false, "infinite loop in PhaseIterGVN::optimize"); | |
860 C->record_method_not_compilable("infinite loop in PhaseIterGVN::optimize"); | |
861 return; | |
862 } | |
863 #ifdef ASSERT | |
864 if (n == prev) { | |
865 if (++rep_cnt > 3) { | |
866 n->dump(4); | |
867 assert(false, "loop in Ideal transformation"); | |
868 } | |
869 } else { | |
870 rep_cnt = 0; | |
871 } | |
872 prev = n; | |
873 #endif | |
851 if (TraceIterativeGVN && Verbose) { | 874 if (TraceIterativeGVN && Verbose) { |
852 tty->print(" Pop "); | 875 tty->print(" Pop "); |
853 NOT_PRODUCT( n->dump(); ) | 876 NOT_PRODUCT( n->dump(); ) |
854 debug_only(if( (num_processed++ % 100) == 0 ) _worklist.print_set();) | 877 debug_only(if( (num_processed++ % 100) == 0 ) _worklist.print_set();) |
855 } | 878 } |