1067 new_edges += find_field_value(field);
1068 // This code may added new edges to phantom_object.
1069 // Need an other cycle to propagate references to phantom_object.
1070 }
1071 }
1072 time.stop();
1073 } else {
1074 new_edges = 0; // Bailout
1075 }
1076 } while (new_edges > 0);
1077
1078 // Bailout if passed limits.
1079 if ((iterations >= CG_BUILD_ITER_LIMIT) ||
1080 (time.seconds() >= CG_BUILD_TIME_LIMIT)) {
1081 Compile* C = _compile;
1082 if (C->log() != NULL) {
1083 C->log()->begin_elem("connectionGraph_bailout reason='reached ");
1084 C->log()->text("%s", (iterations >= CG_BUILD_ITER_LIMIT) ? "iterations" : "time");
1085 C->log()->end_elem(" limit'");
1086 }
1087 assert(false, err_msg_res("infinite EA connection graph build (%f sec, %d iterations) with %d nodes and worklist size %d",
1088 time.seconds(), iterations, nodes_size(), ptnodes_worklist.length()));
1089 // Possible infinite build_connection_graph loop,
1090 // bailout (no changes to ideal graph were made).
1091 return false;
1092 }
1093 #ifdef ASSERT
1094 if (Verbose && PrintEscapeAnalysis) {
1095 tty->print_cr("EA: %d iterations to build connection graph with %d nodes and worklist size %d",
1096 iterations, nodes_size(), ptnodes_worklist.length());
1097 }
1098 #endif
1099
1100 #undef CG_BUILD_ITER_LIMIT
1101 #undef CG_BUILD_TIME_LIMIT
1102
1103 // Find fields initialized by NULL for non-escaping Allocations.
1104 int non_escaped_length = non_escaped_worklist.length();
1105 for (int next = 0; next < non_escaped_length; next++) {
1106 JavaObjectNode* ptn = non_escaped_worklist.at(next);
1107 PointsToNode::EscapeState es = ptn->escape_state();
|
1067 new_edges += find_field_value(field);
1068 // This code may added new edges to phantom_object.
1069 // Need an other cycle to propagate references to phantom_object.
1070 }
1071 }
1072 time.stop();
1073 } else {
1074 new_edges = 0; // Bailout
1075 }
1076 } while (new_edges > 0);
1077
1078 // Bailout if passed limits.
1079 if ((iterations >= CG_BUILD_ITER_LIMIT) ||
1080 (time.seconds() >= CG_BUILD_TIME_LIMIT)) {
1081 Compile* C = _compile;
1082 if (C->log() != NULL) {
1083 C->log()->begin_elem("connectionGraph_bailout reason='reached ");
1084 C->log()->text("%s", (iterations >= CG_BUILD_ITER_LIMIT) ? "iterations" : "time");
1085 C->log()->end_elem(" limit'");
1086 }
1087 assert(ExitEscapeAnalysisOnTimeout, err_msg_res("infinite EA connection graph build (%f sec, %d iterations) with %d nodes and worklist size %d",
1088 time.seconds(), iterations, nodes_size(), ptnodes_worklist.length()));
1089 // Possible infinite build_connection_graph loop,
1090 // bailout (no changes to ideal graph were made).
1091 return false;
1092 }
1093 #ifdef ASSERT
1094 if (Verbose && PrintEscapeAnalysis) {
1095 tty->print_cr("EA: %d iterations to build connection graph with %d nodes and worklist size %d",
1096 iterations, nodes_size(), ptnodes_worklist.length());
1097 }
1098 #endif
1099
1100 #undef CG_BUILD_ITER_LIMIT
1101 #undef CG_BUILD_TIME_LIMIT
1102
1103 // Find fields initialized by NULL for non-escaping Allocations.
1104 int non_escaped_length = non_escaped_worklist.length();
1105 for (int next = 0; next < non_escaped_length; next++) {
1106 JavaObjectNode* ptn = non_escaped_worklist.at(next);
1107 PointsToNode::EscapeState es = ptn->escape_state();
|