diff options
author | kvn <none@none> | 2008-04-23 19:09:16 -0700 |
---|---|---|
committer | kvn <none@none> | 2008-04-23 19:09:16 -0700 |
commit | 280953ff80bc4fca99f2983e8d649521ca3eb6de (patch) | |
tree | d826920ead48efae2966b80459b6fff9f39894bf /src/share/vm/opto/cfgnode.cpp | |
parent | 5cb94828e39bf8d90f1b3d0ff9d32ed6cfea05ec (diff) | |
download | jdk8u_hotspot-280953ff80bc4fca99f2983e8d649521ca3eb6de.tar.gz |
6625997: CastPP, CheckCastPP and Proj nodes are not dead loop safe
Summary: EA and initialization optimizations could bypass these nodes.
Reviewed-by: rasbold, never
Diffstat (limited to 'src/share/vm/opto/cfgnode.cpp')
-rw-r--r-- | src/share/vm/opto/cfgnode.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/share/vm/opto/cfgnode.cpp b/src/share/vm/opto/cfgnode.cpp index 48bf400c8..ebf6eaeb8 100644 --- a/src/share/vm/opto/cfgnode.cpp +++ b/src/share/vm/opto/cfgnode.cpp @@ -1419,7 +1419,8 @@ PhiNode::LoopSafety PhiNode::simple_data_loop_check(Node *in) const { // Check inputs of phi's inputs also. // It is much less expensive then full graph walk. uint cnt = in->req(); - for (uint i = 1; i < cnt; ++i) { + uint i = (in->is_Proj() && !in->is_CFG()) ? 0 : 1; + for (; i < cnt; ++i) { Node* m = in->in(i); if (m == (Node*)this) return UnsafeLoop; // Unsafe loop @@ -1467,7 +1468,8 @@ bool PhiNode::is_unsafe_data_reference(Node *in) const { while (nstack.size() != 0) { Node* n = nstack.pop(); uint cnt = n->req(); - for (uint i = 1; i < cnt; i++) { // Only data paths + uint i = (n->is_Proj() && !n->is_CFG()) ? 0 : 1; + for (; i < cnt; i++) { Node* m = n->in(i); if (m == (Node*)this) { return true; // Data loop |