aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/opto/cfgnode.cpp
diff options
context:
space:
mode:
authorkvn <none@none>2008-04-23 19:09:16 -0700
committerkvn <none@none>2008-04-23 19:09:16 -0700
commit280953ff80bc4fca99f2983e8d649521ca3eb6de (patch)
treed826920ead48efae2966b80459b6fff9f39894bf /src/share/vm/opto/cfgnode.cpp
parent5cb94828e39bf8d90f1b3d0ff9d32ed6cfea05ec (diff)
downloadjdk8u_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.cpp6
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