1486 if (_ioproj_catchall != NULL ) { 1487 if (_ioproj_fallthrough == NULL) { 1488 _ioproj_fallthrough = new (C, 1) ProjNode(call, TypeFunc::I_O); 1489 transform_later(_ioproj_fallthrough); 1490 } 1491 for (DUIterator_Fast imax, i = _ioproj_catchall->fast_outs(imax); i < imax; i++) { 1492 Node *use = _ioproj_catchall->fast_out(i); 1493 _igvn.hash_delete(use); 1494 imax -= replace_input(use, _ioproj_catchall, _ioproj_fallthrough); 1495 _igvn._worklist.push(use); 1496 // back up iterator 1497 --i; 1498 } 1499 assert(_ioproj_catchall->outcnt() == 0, "all uses must be deleted"); 1500 _igvn.remove_dead_node(_ioproj_catchall); 1501 } 1502 1503 // if we generated only a slow call, we are done 1504 if (always_slow) { 1505 // Now we can unhook i_o. 1506 call->set_req(TypeFunc::I_O, top()); 1507 if (result_phi_i_o->outcnt() == 0) 1508 _igvn.remove_dead_node(result_phi_i_o); 1509 return; 1510 } 1511 1512 1513 if (_fallthroughcatchproj != NULL) { 1514 ctrl = _fallthroughcatchproj->clone(); 1515 transform_later(ctrl); 1516 _igvn.replace_node(_fallthroughcatchproj, result_region); 1517 } else { 1518 ctrl = top(); 1519 } 1520 Node *slow_result; 1521 if (_resproj == NULL) { 1522 // no uses of the allocation result 1523 slow_result = top(); 1524 } else { 1525 slow_result = _resproj->clone(); 1526 transform_later(slow_result); 1527 _igvn.replace_node(_resproj, result_phi_rawoop); 1528 } | 1486 if (_ioproj_catchall != NULL ) { 1487 if (_ioproj_fallthrough == NULL) { 1488 _ioproj_fallthrough = new (C, 1) ProjNode(call, TypeFunc::I_O); 1489 transform_later(_ioproj_fallthrough); 1490 } 1491 for (DUIterator_Fast imax, i = _ioproj_catchall->fast_outs(imax); i < imax; i++) { 1492 Node *use = _ioproj_catchall->fast_out(i); 1493 _igvn.hash_delete(use); 1494 imax -= replace_input(use, _ioproj_catchall, _ioproj_fallthrough); 1495 _igvn._worklist.push(use); 1496 // back up iterator 1497 --i; 1498 } 1499 assert(_ioproj_catchall->outcnt() == 0, "all uses must be deleted"); 1500 _igvn.remove_dead_node(_ioproj_catchall); 1501 } 1502 1503 // if we generated only a slow call, we are done 1504 if (always_slow) { 1505 // Now we can unhook i_o. 1506 if (result_phi_i_o->outcnt() > 1) { 1507 call->set_req(TypeFunc::I_O, top()); 1508 } else { 1509 assert(result_phi_i_o->unique_ctrl_out() == call, ""); 1510 // Case of new array with negative size known during compilation. 1511 // AllocateArrayNode::Ideal() optimization disconnect unreachable 1512 // following code since call to runtime will throw exception. 1513 // As result there will be no users of i_o after the call. 1514 // Leave i_o attached to this call to avoid problems in preceding graph. 1515 } 1516 return; 1517 } 1518 1519 1520 if (_fallthroughcatchproj != NULL) { 1521 ctrl = _fallthroughcatchproj->clone(); 1522 transform_later(ctrl); 1523 _igvn.replace_node(_fallthroughcatchproj, result_region); 1524 } else { 1525 ctrl = top(); 1526 } 1527 Node *slow_result; 1528 if (_resproj == NULL) { 1529 // no uses of the allocation result 1530 slow_result = top(); 1531 } else { 1532 slow_result = _resproj->clone(); 1533 transform_later(slow_result); 1534 _igvn.replace_node(_resproj, result_phi_rawoop); 1535 } |