Mercurial > hg > truffle
comparison src/share/vm/opto/cfgnode.cpp @ 126:72f4a668df19
6625997: CastPP, CheckCastPP and Proj nodes are not dead loop safe
Summary: EA and initialization optimizations could bypass these nodes.
Reviewed-by: rasbold, never
author | kvn |
---|---|
date | Wed, 23 Apr 2008 19:09:16 -0700 |
parents | ba764ed4b6f2 |
children | e0bd2e08e3d0 |
comparison
equal
deleted
inserted
replaced
125:d942c7e64bd9 | 126:72f4a668df19 |
---|---|
1417 // itself (safe for dead loops). | 1417 // itself (safe for dead loops). |
1418 if (in != NULL && !in->is_dead_loop_safe()) { | 1418 if (in != NULL && !in->is_dead_loop_safe()) { |
1419 // Check inputs of phi's inputs also. | 1419 // Check inputs of phi's inputs also. |
1420 // It is much less expensive then full graph walk. | 1420 // It is much less expensive then full graph walk. |
1421 uint cnt = in->req(); | 1421 uint cnt = in->req(); |
1422 for (uint i = 1; i < cnt; ++i) { | 1422 uint i = (in->is_Proj() && !in->is_CFG()) ? 0 : 1; |
1423 for (; i < cnt; ++i) { | |
1423 Node* m = in->in(i); | 1424 Node* m = in->in(i); |
1424 if (m == (Node*)this) | 1425 if (m == (Node*)this) |
1425 return UnsafeLoop; // Unsafe loop | 1426 return UnsafeLoop; // Unsafe loop |
1426 if (m != NULL && !m->is_dead_loop_safe()) { | 1427 if (m != NULL && !m->is_dead_loop_safe()) { |
1427 // Check the most common case (about 30% of all cases): | 1428 // Check the most common case (about 30% of all cases): |
1465 nstack.push(in); // Start with unique input. | 1466 nstack.push(in); // Start with unique input. |
1466 visited.set(in->_idx); | 1467 visited.set(in->_idx); |
1467 while (nstack.size() != 0) { | 1468 while (nstack.size() != 0) { |
1468 Node* n = nstack.pop(); | 1469 Node* n = nstack.pop(); |
1469 uint cnt = n->req(); | 1470 uint cnt = n->req(); |
1470 for (uint i = 1; i < cnt; i++) { // Only data paths | 1471 uint i = (n->is_Proj() && !n->is_CFG()) ? 0 : 1; |
1472 for (; i < cnt; i++) { | |
1471 Node* m = n->in(i); | 1473 Node* m = n->in(i); |
1472 if (m == (Node*)this) { | 1474 if (m == (Node*)this) { |
1473 return true; // Data loop | 1475 return true; // Data loop |
1474 } | 1476 } |
1475 if (m != NULL && !m->is_dead_loop_safe()) { // Only look for unsafe cases. | 1477 if (m != NULL && !m->is_dead_loop_safe()) { // Only look for unsafe cases. |