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.