src/share/vm/opto/macro.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7125879 Sdiff src/share/vm/opto

src/share/vm/opto/macro.cpp

Print this page




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   }


src/share/vm/opto/macro.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File