Mercurial > hg > truffle
comparison src/share/vm/opto/cfgnode.cpp @ 853:64219d2a6493
6851282: JIT miscompilation results in null entry in array when using CompressedOops
Summary: Get type for new Phi from non dead path.
Reviewed-by: never
author | kvn |
---|---|
date | Thu, 16 Jul 2009 16:29:55 -0700 |
parents | 7bb995fbd3c0 |
children | 433f394ab509 |
comparison
equal
deleted
inserted
replaced
851:fc4be448891f | 853:64219d2a6493 |
---|---|
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; |