diff src/share/vm/opto/loopnode.cpp @ 17887:cd3c534f8f4a

8039050: Crash in C2 compiler at Node::rematerialize Summary: Added missing calls to record_for_igvn() in loop opts. Added verification of def-use domination. Reviewed-by: iveresov
author kvn
date Tue, 15 Apr 2014 14:34:48 -0700
parents 3213ba4d3dff
children 3636afd5ec1a
line wrap: on
line diff
--- a/src/share/vm/opto/loopnode.cpp	Wed Apr 16 18:40:25 2014 -0400
+++ b/src/share/vm/opto/loopnode.cpp	Tue Apr 15 14:34:48 2014 -0700
@@ -3171,17 +3171,16 @@
   bool had_error = false;
 #ifdef ASSERT
   if (early != C->root()) {
-    // Make sure that there's a dominance path from use to LCA
-    Node* d = use;
-    while (d != LCA) {
-      d = idom(d);
+    // Make sure that there's a dominance path from LCA to early
+    Node* d = LCA;
+    while (d != early) {
       if (d == C->root()) {
-        tty->print_cr("*** Use %d isn't dominated by def %s", use->_idx, n->_idx);
-        n->dump();
-        use->dump();
+        dump_bad_graph("Bad graph detected in compute_lca_of_uses", n, early, LCA);
+        tty->print_cr("*** Use %d isn't dominated by def %d ***", use->_idx, n->_idx);
         had_error = true;
         break;
       }
+      d = idom(d);
     }
   }
 #endif
@@ -3434,6 +3433,13 @@
     _igvn._worklist.push(n);  // Maybe we'll normalize it, if no more loops.
   }
 
+#ifdef ASSERT
+  if (_verify_only && !n->is_CFG()) {
+    // Check def-use domination.
+    compute_lca_of_uses(n, get_ctrl(n), true /* verify */);
+  }
+#endif
+
   // CFG and pinned nodes already handled
   if( n->in(0) ) {
     if( n->in(0)->is_top() ) return; // Dead?