< prev index next >

src/hotspot/share/opto/split_if.cpp

Print this page
rev 47390 : 8186125: "DU iteration must converge quickly" assert in split if with unsafe accesses
Reviewed-by:
rev 47838 : 8191153: assert(u_ctrl != blk1 && u_ctrl != blk2) failed: won't converge
Reviewed-by:


 152                 Node* iff = u->last_out(k);
 153                 assert(iff->is_If() || iff->is_CMove(), "unexpected node type");
 154                 assert( iff->in(1) == u, "" );
 155                 // Get control block of either the CMove or the If input
 156                 Node *iff_ctrl = iff->is_If() ? iff->in(0) : get_ctrl(iff);
 157                 Node *x1 = bol->clone();
 158                 Node *x2 = u->clone();
 159                 register_new_node(x1, iff_ctrl);
 160                 register_new_node(x2, iff_ctrl);
 161                 _igvn.replace_input_of(x2, 1, x1);
 162                 _igvn.replace_input_of(iff, 1, x2);
 163               }
 164               _igvn.remove_dead_node(u);
 165               --j;
 166             } else {
 167               // We might see an Opaque1 from a loop limit check here
 168               assert(u->is_If() || u->is_CMove() || u->Opcode() == Op_Opaque1, "unexpected node type");
 169               assert(u->in(1) == bol, "");
 170               // Get control block of either the CMove or the If input
 171               Node *u_ctrl = u->is_If() ? u->in(0) : get_ctrl(u);
 172               assert(u_ctrl != blk1 && u_ctrl != blk2, "won't converge");
 173               Node *x = bol->clone();
 174               register_new_node(x, u_ctrl);
 175               _igvn.replace_input_of(u, 1, x);
 176               --j;
 177             }
 178           }
 179           _igvn.remove_dead_node(bol);
 180           --i;
 181         }
 182       }
 183       // Clone down this CmpNode
 184       for (DUIterator_Last jmin, j = n->last_outs(jmin); j >= jmin; --j) {
 185         Node* bol = n->last_out(j);
 186         assert( bol->in(1) == n, "" );
 187         Node *x = n->clone();
 188         register_new_node(x, get_ctrl(bol));
 189         _igvn.replace_input_of(bol, 1, x);
 190       }
 191       _igvn.remove_dead_node( n );
 192 




 152                 Node* iff = u->last_out(k);
 153                 assert(iff->is_If() || iff->is_CMove(), "unexpected node type");
 154                 assert( iff->in(1) == u, "" );
 155                 // Get control block of either the CMove or the If input
 156                 Node *iff_ctrl = iff->is_If() ? iff->in(0) : get_ctrl(iff);
 157                 Node *x1 = bol->clone();
 158                 Node *x2 = u->clone();
 159                 register_new_node(x1, iff_ctrl);
 160                 register_new_node(x2, iff_ctrl);
 161                 _igvn.replace_input_of(x2, 1, x1);
 162                 _igvn.replace_input_of(iff, 1, x2);
 163               }
 164               _igvn.remove_dead_node(u);
 165               --j;
 166             } else {
 167               // We might see an Opaque1 from a loop limit check here
 168               assert(u->is_If() || u->is_CMove() || u->Opcode() == Op_Opaque1, "unexpected node type");
 169               assert(u->in(1) == bol, "");
 170               // Get control block of either the CMove or the If input
 171               Node *u_ctrl = u->is_If() ? u->in(0) : get_ctrl(u);
 172               assert((u_ctrl != blk1 && u_ctrl != blk2) || u->is_CMove(), "won't converge");
 173               Node *x = bol->clone();
 174               register_new_node(x, u_ctrl);
 175               _igvn.replace_input_of(u, 1, x);
 176               --j;
 177             }
 178           }
 179           _igvn.remove_dead_node(bol);
 180           --i;
 181         }
 182       }
 183       // Clone down this CmpNode
 184       for (DUIterator_Last jmin, j = n->last_outs(jmin); j >= jmin; --j) {
 185         Node* bol = n->last_out(j);
 186         assert( bol->in(1) == n, "" );
 187         Node *x = n->clone();
 188         register_new_node(x, get_ctrl(bol));
 189         _igvn.replace_input_of(bol, 1, x);
 190       }
 191       _igvn.remove_dead_node( n );
 192 


< prev index next >