< prev index next >

src/share/vm/opto/callGenerator.cpp

Print this page

        

*** 152,163 **** --- 152,165 ---- call->set_override_symbolic_info(true); } _call_node = call; // Save the call node in case we need it later if (!is_static) { if (kit.argument(0)->is_ValueType()) { + if (!ValueTypePassFieldsAsArgs) { ValueTypeNode* vt = kit.argument(0)->as_ValueType(); vt->store_to_memory(&kit); + } } else { // Make an explicit receiver null_check as part of this call. // Since we share a map with the caller, his JVMS gets adjusted. kit.null_check_receiver_before_call(method()); }
*** 368,378 **** if (call == NULL || call->outcnt() == 0 || call->in(0) == NULL || call->in(0)->is_top()) { return; } ! const TypeTuple *r = call->tf()->domain(); for (int i1 = 0; i1 < method()->arg_size(); i1++) { if (call->in(TypeFunc::Parms + i1)->is_top() && r->field_at(TypeFunc::Parms + i1) != Type::HALF) { assert(Compile::current()->inlining_incrementally(), "shouldn't happen during parsing"); return; } --- 370,384 ---- if (call == NULL || call->outcnt() == 0 || call->in(0) == NULL || call->in(0)->is_top()) { return; } ! // FIXME: late inlining of methods that take value type arguments is ! // broken: arguments at the call are set up so fields of value type ! // arguments are passed but code here expects a single argument per ! // value type (a ValueTypeNode) instead. ! const TypeTuple *r = call->tf()->domain_sig(); for (int i1 = 0; i1 < method()->arg_size(); i1++) { if (call->in(TypeFunc::Parms + i1)->is_top() && r->field_at(TypeFunc::Parms + i1) != Type::HALF) { assert(Compile::current()->inlining_incrementally(), "shouldn't happen during parsing"); return; }
< prev index next >