865 for ( int i = 0; i < _verify_window_size; i++ ) {
866 _verify_window[i] = NULL;
867 }
868 }
869 #endif
870
871 #ifdef ASSERT
872 Node* prev = NULL;
873 uint rep_cnt = 0;
874 #endif
875 uint loop_count = 0;
876
877 // Pull from worklist; transform node;
878 // If node has changed: update edge info and put uses on worklist.
879 while( _worklist.size() ) {
880 if (C->check_node_count(NodeLimitFudgeFactor * 2,
881 "out of nodes optimizing method")) {
882 return;
883 }
884 Node *n = _worklist.pop();
885 if (++loop_count >= K * C->unique()) {
886 debug_only(n->dump(4);)
887 assert(false, "infinite loop in PhaseIterGVN::optimize");
888 C->record_method_not_compilable("infinite loop in PhaseIterGVN::optimize");
889 return;
890 }
891 #ifdef ASSERT
892 if (n == prev) {
893 if (++rep_cnt > 3) {
894 n->dump(4);
895 assert(false, "loop in Ideal transformation");
896 }
897 } else {
898 rep_cnt = 0;
899 }
900 prev = n;
901 #endif
902 if (TraceIterativeGVN && Verbose) {
903 tty->print(" Pop ");
904 NOT_PRODUCT( n->dump(); )
905 debug_only(if( (num_processed++ % 100) == 0 ) _worklist.print_set();)
|
865 for ( int i = 0; i < _verify_window_size; i++ ) {
866 _verify_window[i] = NULL;
867 }
868 }
869 #endif
870
871 #ifdef ASSERT
872 Node* prev = NULL;
873 uint rep_cnt = 0;
874 #endif
875 uint loop_count = 0;
876
877 // Pull from worklist; transform node;
878 // If node has changed: update edge info and put uses on worklist.
879 while( _worklist.size() ) {
880 if (C->check_node_count(NodeLimitFudgeFactor * 2,
881 "out of nodes optimizing method")) {
882 return;
883 }
884 Node *n = _worklist.pop();
885 if (++loop_count >= K * C->live_nodes()) {
886 debug_only(n->dump(4);)
887 assert(false, "infinite loop in PhaseIterGVN::optimize");
888 C->record_method_not_compilable("infinite loop in PhaseIterGVN::optimize");
889 return;
890 }
891 #ifdef ASSERT
892 if (n == prev) {
893 if (++rep_cnt > 3) {
894 n->dump(4);
895 assert(false, "loop in Ideal transformation");
896 }
897 } else {
898 rep_cnt = 0;
899 }
900 prev = n;
901 #endif
902 if (TraceIterativeGVN && Verbose) {
903 tty->print(" Pop ");
904 NOT_PRODUCT( n->dump(); )
905 debug_only(if( (num_processed++ % 100) == 0 ) _worklist.print_set();)
|