< prev index next >
src/share/vm/opto/escape.cpp
Print this page
*** 372,382 ****
add_call_node(n->as_Call());
} else if (n->as_Call()->tf()->returns_value_type_as_fields()) {
bool returns_oop = false;
for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax && !returns_oop; i++) {
ProjNode* pn = n->fast_out(i)->as_Proj();
! if (pn->_con >= TypeFunc::Parms && pn->bottom_type()->isa_oopptr()) {
returns_oop = true;
}
}
if (returns_oop) {
add_call_node(n->as_Call());
--- 372,382 ----
add_call_node(n->as_Call());
} else if (n->as_Call()->tf()->returns_value_type_as_fields()) {
bool returns_oop = false;
for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax && !returns_oop; i++) {
ProjNode* pn = n->fast_out(i)->as_Proj();
! if (pn->_con >= TypeFunc::Parms && pn->bottom_type()->isa_ptr()) {
returns_oop = true;
}
}
if (returns_oop) {
add_call_node(n->as_Call());
*** 484,494 ****
break;
}
case Op_Proj: {
// we are only interested in the oop result projection from a call
if (n->as_Proj()->_con >= TypeFunc::Parms && n->in(0)->is_Call() &&
! (n->in(0)->as_Call()->returns_pointer() || n->bottom_type()->isa_oopptr())) {
assert((n->as_Proj()->_con == TypeFunc::Parms && n->in(0)->as_Call()->returns_pointer()) ||
n->in(0)->as_Call()->tf()->returns_value_type_as_fields(), "what kind of oop return is it?");
add_local_var_and_edge(n, PointsToNode::NoEscape,
n->in(0), delayed_worklist);
}
--- 484,494 ----
break;
}
case Op_Proj: {
// we are only interested in the oop result projection from a call
if (n->as_Proj()->_con >= TypeFunc::Parms && n->in(0)->is_Call() &&
! (n->in(0)->as_Call()->returns_pointer() || n->bottom_type()->isa_ptr())) {
assert((n->as_Proj()->_con == TypeFunc::Parms && n->in(0)->as_Call()->returns_pointer()) ||
n->in(0)->as_Call()->tf()->returns_value_type_as_fields(), "what kind of oop return is it?");
add_local_var_and_edge(n, PointsToNode::NoEscape,
n->in(0), delayed_worklist);
}
*** 693,703 ****
ELSE_FAIL("Op_Phi");
}
case Op_Proj: {
// we are only interested in the oop result projection from a call
if (n->as_Proj()->_con >= TypeFunc::Parms && n->in(0)->is_Call() &&
! (n->in(0)->as_Call()->returns_pointer()|| n->bottom_type()->isa_oopptr())) {
assert((n->as_Proj()->_con == TypeFunc::Parms && n->in(0)->as_Call()->returns_pointer()) ||
n->in(0)->as_Call()->tf()->returns_value_type_as_fields(), "what kind of oop return is it?");
add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0), NULL);
break;
}
--- 693,703 ----
ELSE_FAIL("Op_Phi");
}
case Op_Proj: {
// we are only interested in the oop result projection from a call
if (n->as_Proj()->_con >= TypeFunc::Parms && n->in(0)->is_Call() &&
! (n->in(0)->as_Call()->returns_pointer()|| n->bottom_type()->isa_ptr())) {
assert((n->as_Proj()->_con == TypeFunc::Parms && n->in(0)->as_Call()->returns_pointer()) ||
n->in(0)->as_Call()->tf()->returns_value_type_as_fields(), "what kind of oop return is it?");
add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0), NULL);
break;
}
< prev index next >