--- a/hotspot/src/share/vm/opto/compile.cpp Fri Jul 25 16:03:40 2008 -0700
+++ b/hotspot/src/share/vm/opto/compile.cpp Mon Jul 28 17:12:52 2008 -0700
@@ -585,6 +585,10 @@
// Perform escape analysis
if (_do_escape_analysis && ConnectionGraph::has_candidates(this)) {
TracePhase t2("escapeAnalysis", &_t_escapeAnalysis, true);
+ // Add ConP#NULL and ConN#NULL nodes before ConnectionGraph construction.
+ PhaseGVN* igvn = initial_gvn();
+ Node* oop_null = igvn->zerocon(T_OBJECT);
+ Node* noop_null = igvn->zerocon(T_NARROWOOP);
_congraph = new(comp_arena()) ConnectionGraph(this);
bool has_non_escaping_obj = _congraph->compute_escape();
@@ -594,6 +598,12 @@
_congraph->dump();
}
#endif
+ // Cleanup.
+ if (oop_null->outcnt() == 0)
+ igvn->hash_delete(oop_null);
+ if (noop_null->outcnt() == 0)
+ igvn->hash_delete(noop_null);
+
if (!has_non_escaping_obj) {
_congraph = NULL;
}