comparison src/share/vm/opto/cfgnode.cpp @ 860:433f394ab509

Merge
author kvn
date Fri, 24 Jul 2009 09:01:00 -0700
parents df6caf649ff7 64219d2a6493
children 0a83664f978b 55cb84cd1247
comparison
equal deleted inserted replaced
847:f0a1cbbaf3c0 860:433f394ab509
1787 } 1787 }
1788 1788
1789 #ifdef _LP64 1789 #ifdef _LP64
1790 // Push DecodeN down through phi. 1790 // Push DecodeN down through phi.
1791 // The rest of phi graph will transform by split EncodeP node though phis up. 1791 // The rest of phi graph will transform by split EncodeP node though phis up.
1792 if (UseNewCode && UseCompressedOops && can_reshape && progress == NULL) { 1792 if (UseCompressedOops && can_reshape && progress == NULL) {
1793 bool may_push = true; 1793 bool may_push = true;
1794 bool has_decodeN = false; 1794 bool has_decodeN = false;
1795 Node* in_decodeN = NULL; 1795 Node* in_decodeN = NULL;
1796 for (uint i=1; i<req(); ++i) {// For all paths in 1796 for (uint i=1; i<req(); ++i) {// For all paths in
1797 Node *ii = in(i); 1797 Node *ii = in(i);
1798 if (ii->is_DecodeN() && ii->bottom_type() == bottom_type()) { 1798 if (ii->is_DecodeN() && ii->bottom_type() == bottom_type()) {
1799 has_decodeN = true; 1799 // Note: in_decodeN is used only to define the type of new phi.
1800 in_decodeN = ii->in(1); 1800 // Find a non dead path otherwise phi type will be wrong.
1801 if (ii->in(1)->bottom_type() != Type::TOP) {
1802 has_decodeN = true;
1803 in_decodeN = ii->in(1);
1804 }
1801 } else if (!ii->is_Phi()) { 1805 } else if (!ii->is_Phi()) {
1802 may_push = false; 1806 may_push = false;
1803 } 1807 }
1804 } 1808 }
1805 1809
1806 if (has_decodeN && may_push) { 1810 if (has_decodeN && may_push) {
1807 PhaseIterGVN *igvn = phase->is_IterGVN(); 1811 PhaseIterGVN *igvn = phase->is_IterGVN();
1808 // Note: in_decodeN is used only to define the type of new phi here.
1809 PhiNode *new_phi = PhiNode::make_blank(in(0), in_decodeN); 1812 PhiNode *new_phi = PhiNode::make_blank(in(0), in_decodeN);
1810 uint orig_cnt = req(); 1813 uint orig_cnt = req();
1811 for (uint i=1; i<req(); ++i) {// For all paths in 1814 for (uint i=1; i<req(); ++i) {// For all paths in
1812 Node *ii = in(i); 1815 Node *ii = in(i);
1813 Node* new_ii = NULL; 1816 Node* new_ii = NULL;