Mercurial > hg > graal-compiler
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; |