--- old/src/share/vm/opto/callnode.hpp 2017-08-04 21:18:34.230420980 +0200 +++ new/src/share/vm/opto/callnode.hpp 2017-08-04 21:18:26.971432697 +0200 @@ -704,6 +704,17 @@ init_flags(Flag_is_macro); C->add_macro_node(this); } + const TypeTuple *r = tf->range_sig(); + if (ValueTypeReturnedAsFields && + method != NULL && + method->is_method_handle_intrinsic() && + r->cnt() > TypeFunc::Parms && + r->field_at(TypeFunc::Parms)->isa_valuetypeptr() && + r->field_at(TypeFunc::Parms)->is_valuetypeptr()->value_type()->value_klass() == C->env()->___Value_klass()) { + init_flags(Flag_is_macro); + C->add_macro_node(this); + } + _is_scalar_replaceable = false; _is_non_escaping = false; } @@ -813,6 +824,7 @@ { } virtual int Opcode() const; + virtual uint match_edge(uint idx) const; };