1793 const TypeTuple* domain = call->tf()->domain_sig();
1794 ExtendedSignature sig_cc = ExtendedSignature(call->method()->get_sig_cc(), SigEntryFilter());
1795 uint nargs = domain->cnt();
1796 for (uint i = TypeFunc::Parms, idx = TypeFunc::Parms; i < nargs; i++) {
1797 Node* arg = argument(i-TypeFunc::Parms);
1798 const Type* t = domain->field_at(i);
1799 if (call->method()->has_scalarized_args() && t->is_valuetypeptr() && !t->maybe_null()) {
1800 // We don't pass value type arguments by reference but instead pass each field of the value type
1801 ValueTypeNode* vt = arg->as_ValueType();
1802 vt->pass_fields(this, call, sig_cc, idx);
1803 // If a value type argument is passed as fields, attach the Method* to the call site
1804 // to be able to access the extended signature later via attached_method_before_pc().
1805 // For example, see CompiledMethod::preserve_callee_argument_oops().
1806 call->set_override_symbolic_info(true);
1807 continue;
1808 } else if (arg->is_ValueType()) {
1809 // Pass value type argument via oop to callee
1810 if (!incremental_inlining) {
1811 arg = arg->as_ValueType()->allocate(this)->get_oop();
1812 } else {
1813 arg = ValueTypePtrNode::make_from_value_type(this, arg->as_ValueType(), false);
1814 }
1815 }
1816 call->init_req(idx++, arg);
1817 // Skip reserved arguments
1818 BasicType bt = t->basic_type();
1819 while (SigEntry::next_is_reserved(sig_cc, bt, true)) {
1820 call->init_req(idx++, top());
1821 if (type2size[bt] == 2) {
1822 call->init_req(idx++, top());
1823 }
1824 }
1825 }
1826 }
1827
1828 //---------------------------set_edges_for_java_call---------------------------
1829 // Connect a newly created call into the current JVMS.
1830 // A return value node (if any) is returned from set_edges_for_java_call.
1831 void GraphKit::set_edges_for_java_call(CallJavaNode* call, bool must_throw, bool separate_io_proj) {
1832
1833 // Add the predefined inputs:
|
1793 const TypeTuple* domain = call->tf()->domain_sig();
1794 ExtendedSignature sig_cc = ExtendedSignature(call->method()->get_sig_cc(), SigEntryFilter());
1795 uint nargs = domain->cnt();
1796 for (uint i = TypeFunc::Parms, idx = TypeFunc::Parms; i < nargs; i++) {
1797 Node* arg = argument(i-TypeFunc::Parms);
1798 const Type* t = domain->field_at(i);
1799 if (call->method()->has_scalarized_args() && t->is_valuetypeptr() && !t->maybe_null()) {
1800 // We don't pass value type arguments by reference but instead pass each field of the value type
1801 ValueTypeNode* vt = arg->as_ValueType();
1802 vt->pass_fields(this, call, sig_cc, idx);
1803 // If a value type argument is passed as fields, attach the Method* to the call site
1804 // to be able to access the extended signature later via attached_method_before_pc().
1805 // For example, see CompiledMethod::preserve_callee_argument_oops().
1806 call->set_override_symbolic_info(true);
1807 continue;
1808 } else if (arg->is_ValueType()) {
1809 // Pass value type argument via oop to callee
1810 if (!incremental_inlining) {
1811 arg = arg->as_ValueType()->allocate(this)->get_oop();
1812 } else {
1813 arg = ValueTypePtrNode::make_from_value_type(this, arg->as_ValueType());
1814 }
1815 }
1816 call->init_req(idx++, arg);
1817 // Skip reserved arguments
1818 BasicType bt = t->basic_type();
1819 while (SigEntry::next_is_reserved(sig_cc, bt, true)) {
1820 call->init_req(idx++, top());
1821 if (type2size[bt] == 2) {
1822 call->init_req(idx++, top());
1823 }
1824 }
1825 }
1826 }
1827
1828 //---------------------------set_edges_for_java_call---------------------------
1829 // Connect a newly created call into the current JVMS.
1830 // A return value node (if any) is returned from set_edges_for_java_call.
1831 void GraphKit::set_edges_for_java_call(CallJavaNode* call, bool must_throw, bool separate_io_proj) {
1832
1833 // Add the predefined inputs:
|