Mercurial > hg > truffle
diff src/share/vm/opto/memnode.cpp @ 155:723be81c1212
6701887: JDK7 server VM in endless loop in Node::dominates
Summary: The method Node::dominates loops in the dead code which does not have a Region node.
Reviewed-by: jrose, never
author | kvn |
---|---|
date | Thu, 15 May 2008 22:43:11 -0700 |
parents | a76240c8b133 |
children | 885ed790ecf0 |
line wrap: on
line diff
--- a/src/share/vm/opto/memnode.cpp Thu May 15 22:40:43 2008 -0700 +++ b/src/share/vm/opto/memnode.cpp Thu May 15 22:43:11 2008 -0700 @@ -256,7 +256,7 @@ if (dom == NULL || dom->is_top()) return false; // Conservative answer for dead code - if (dom->is_Start() || dom->is_Root() || dom == sub) + if (dom->is_Con() || dom->is_Start() || dom->is_Root() || dom == sub) return true; // 'dom' dominates 'sub' if its control edge and control edges @@ -298,7 +298,7 @@ return false; // Conservative answer for dead code assert(n->is_CFG(), "expecting control"); } - if (n->is_Start() || n->is_Root()) { + if (n->is_Con() || n->is_Start() || n->is_Root()) { only_dominating_controls = true; } else if (n->is_CFG()) { if (n->dominates(sub, nlist)) @@ -308,12 +308,11 @@ } else { // First, own control edge. Node* m = n->find_exact_control(n->in(0)); - if (m == NULL) - continue; - if (m->is_top()) - return false; // Conservative answer for dead code - dom_list.push(m); - + if (m != NULL) { + if (m->is_top()) + return false; // Conservative answer for dead code + dom_list.push(m); + } // Now, the rest of edges. uint cnt = n->req(); for (uint i = 1; i < cnt; i++) {