diff a/src/hotspot/share/opto/callnode.cpp b/src/hotspot/share/opto/callnode.cpp --- a/src/hotspot/share/opto/callnode.cpp +++ b/src/hotspot/share/opto/callnode.cpp @@ -483,29 +483,48 @@ } st->print("={"); uint nf = spobj->n_fields(); if (nf > 0) { uint first_ind = spobj->first_index(mcall->jvms()); - Node* fld_node = mcall->in(first_ind); + Node* fld_node = NULL; ciField* cifield; if (iklass != NULL) { st->print(" ["); cifield = iklass->nonstatic_field_at(0); cifield->print_name_on(st); - format_helper(regalloc, st, fld_node, ":", 0, &scobjs); + if(spobj->stack_allocated()) { + st->print(":*0]"); + } else { + fld_node = mcall->in(first_ind); + format_helper(regalloc, st, fld_node, ":", 0, &scobjs); + } } else { - format_helper(regalloc, st, fld_node, "[", 0, &scobjs); + if(spobj->stack_allocated()) { + st->print("[*0]"); + } else { + fld_node = mcall->in(first_ind); + format_helper(regalloc, st, fld_node, "[", 0, &scobjs); + } } for (uint j = 1; j < nf; j++) { - fld_node = mcall->in(first_ind+j); if (iklass != NULL) { st->print(", ["); cifield = iklass->nonstatic_field_at(j); cifield->print_name_on(st); - format_helper(regalloc, st, fld_node, ":", j, &scobjs); + if(spobj->stack_allocated()) { + st->print(":*%d]", j); + } else { + fld_node = mcall->in(first_ind+j); + format_helper(regalloc, st, fld_node, ":", j, &scobjs); + } } else { - format_helper(regalloc, st, fld_node, ", [", j, &scobjs); + if(spobj->stack_allocated()) { + st->print(", [*%d]", j); + } else { + fld_node = mcall->in(first_ind+j); + format_helper(regalloc, st, fld_node, ", [", j, &scobjs); + } } } } st->print(" }"); } @@ -959,10 +978,17 @@ return true; } return false; } +bool CallNode::is_call_to_osr_migration_end() const { + if (_name != NULL && strstr(_name, "OSR_migration_end") != 0) { + return true; + } + return false; +} + //============================================================================= uint CallJavaNode::size_of() const { return sizeof(*this); } bool CallJavaNode::cmp( const Node &n ) const { CallJavaNode &call = (CallJavaNode&)n; return CallNode::cmp(call) && _method == call._method && @@ -1300,11 +1326,12 @@ #endif uint first_index, uint n_fields) : TypeNode(tp, 1), // 1 control input -- seems required. Get from root. _first_index(first_index), - _n_fields(n_fields) + _n_fields(n_fields), + _is_stack_allocated(false) #ifdef ASSERT , _alloc(alloc) #endif { init_class_id(Class_SafePointScalarObject); @@ -1362,10 +1389,12 @@ { init_class_id(Class_Allocate); init_flags(Flag_is_macro); _is_scalar_replaceable = false; _is_non_escaping = false; + _is_stack_allocateable = false; + _is_referenced_stack_allocation = false; _is_allocation_MemBar_redundant = false; Node *topnode = C->top(); init_req( TypeFunc::Control , ctrl ); init_req( TypeFunc::I_O , abio );