< prev index next > src/hotspot/share/opto/vector.cpp
Print this page
PhaseGVN& gvn = kit.gvn();
// Adjust JVMS from post-call to pre-call state: put args on stack
uint nargs = call->method()->arg_size();
kit.ensure_stack(kit.sp() + nargs);
! for (uint i = TypeFunc::Parms; i < call->tf()->domain()->cnt(); i++) {
! kit.push(call->in(i));
}
jvms = kit.sync_jvms();
Node* new_vbox = nullptr;
{
Node* vect = vec_box->in(VectorBoxNode::Value);
PhaseGVN& gvn = kit.gvn();
// Adjust JVMS from post-call to pre-call state: put args on stack
uint nargs = call->method()->arg_size();
kit.ensure_stack(kit.sp() + nargs);
! uint in_idx = TypeFunc::Parms; // The index of the call input, using scalarized calling convention.
! int parm_idx = 0; // The index of the Java parameter: double/long take one slot
+ for (uint i = 0; i < nargs; i++) { // The index of the argument on the JVM stack: double/long take two slots
+ const Type* arg_type = call->tf()->domain_sig()->field_at(TypeFunc::Parms + i);
+ if (arg_type->is_inlinetypeptr() && !call->method()->mismatch() && call->method()->is_scalarized_arg(parm_idx)) {
+ bool nullable = arg_type->maybe_null();
+ ciInlineKlass* vk = arg_type->inline_klass();
+ InlineTypeNode* it = InlineTypeNode::make_from_multi(&kit, call, vk, in_idx, true, !nullable);
+ kit.push(gvn.transform(it));
+ } else {
+ kit.push(call->in(in_idx));
+ in_idx++;
+ }
+ if (arg_type != Type::HALF) {
+ parm_idx++;
+ }
}
+ assert(in_idx == call->tf()->domain_cc()->cnt(), "should have processed exactly as many input as the scalarized calling convention; %d vs %d", in_idx, call->tf()->domain_cc()->cnt());
+ assert(parm_idx == (call->method()->is_static() ? 0 : 1) + call->method()->signature()->count(), "should have processed all the parameters; %d vs %d", parm_idx, (call->method()->is_static() ? 0 : 1) + call->method()->signature()->count());
jvms = kit.sync_jvms();
Node* new_vbox = nullptr;
{
Node* vect = vec_box->in(VectorBoxNode::Value);
< prev index next >