< prev index next >

src/hotspot/share/opto/graphKit.cpp

Print this page




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:


< prev index next >