hotspot/src/share/vm/opto/cfgnode.cpp
changeset 3270 0a2825307027
parent 2154 72a9b7284ccf
child 3277 b621e1c1f2c4
equal deleted inserted replaced
3268:f034e0c86895 3270:0a2825307027
  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;