diff src/share/vm/opto/compile.cpp @ 253:b0fe4deeb9fb

6726999: nsk/stress/jck12a/jck12a010 assert(n != null,"Bad immediate dominator info.") Summary: Escape Analysis fixes. Reviewed-by: never, rasbold
author kvn
date Mon, 28 Jul 2008 17:12:52 -0700
parents 02a35ad4adf8
children c3e045194476
line wrap: on
line diff
--- a/src/share/vm/opto/compile.cpp	Fri Jul 25 16:03:40 2008 -0700
+++ b/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;
     }