699 return false; 700 } 701 702 // Similar to cousin class CallNode::returns_pointer 703 // Because this is used in deoptimization, we want the type info, not the data 704 // flow info; the interpreter will "use" things that are dead to the optimizer. 705 bool MachCallNode::returns_pointer() const { 706 const TypeTuple *r = tf()->range_sig(); 707 return (r->cnt() > TypeFunc::Parms && 708 r->field_at(TypeFunc::Parms)->isa_ptr()); 709 } 710 711 bool MachCallNode::returns_vt() const { 712 return tf()->returns_value_type_as_fields(); 713 } 714 715 //------------------------------Registers-------------------------------------- 716 const RegMask &MachCallNode::in_RegMask(uint idx) const { 717 // Values in the domain use the users calling convention, embodied in the 718 // _in_rms array of RegMasks. 719 if (idx < tf()->domain_sig()->cnt()) { 720 return _in_rms[idx]; 721 } 722 if (idx == mach_constant_base_node_input()) { 723 return MachConstantBaseNode::static_out_RegMask(); 724 } 725 // Values outside the domain represent debug info 726 return *Compile::current()->matcher()->idealreg2debugmask[in(idx)->ideal_reg()]; 727 } 728 729 //============================================================================= 730 uint MachCallJavaNode::size_of() const { return sizeof(*this); } 731 uint MachCallJavaNode::cmp( const Node &n ) const { 732 MachCallJavaNode &call = (MachCallJavaNode&)n; 733 return MachCallNode::cmp(call) && _method->equals(call._method) && 734 _override_symbolic_info == call._override_symbolic_info; 735 } 736 #ifndef PRODUCT 737 void MachCallJavaNode::dump_spec(outputStream *st) const { 738 if (_method_handle_invoke) | 699 return false; 700 } 701 702 // Similar to cousin class CallNode::returns_pointer 703 // Because this is used in deoptimization, we want the type info, not the data 704 // flow info; the interpreter will "use" things that are dead to the optimizer. 705 bool MachCallNode::returns_pointer() const { 706 const TypeTuple *r = tf()->range_sig(); 707 return (r->cnt() > TypeFunc::Parms && 708 r->field_at(TypeFunc::Parms)->isa_ptr()); 709 } 710 711 bool MachCallNode::returns_vt() const { 712 return tf()->returns_value_type_as_fields(); 713 } 714 715 //------------------------------Registers-------------------------------------- 716 const RegMask &MachCallNode::in_RegMask(uint idx) const { 717 // Values in the domain use the users calling convention, embodied in the 718 // _in_rms array of RegMasks. 719 if (entry_point() == NULL && idx == TypeFunc::Parms) { 720 // Null entry point is a special cast where the target of the call 721 // is in a register. 722 return MachNode::in_RegMask(idx); 723 } 724 if (idx < tf()->domain_sig()->cnt()) { 725 return _in_rms[idx]; 726 } 727 if (idx == mach_constant_base_node_input()) { 728 return MachConstantBaseNode::static_out_RegMask(); 729 } 730 // Values outside the domain represent debug info 731 return *Compile::current()->matcher()->idealreg2debugmask[in(idx)->ideal_reg()]; 732 } 733 734 //============================================================================= 735 uint MachCallJavaNode::size_of() const { return sizeof(*this); } 736 uint MachCallJavaNode::cmp( const Node &n ) const { 737 MachCallJavaNode &call = (MachCallJavaNode&)n; 738 return MachCallNode::cmp(call) && _method->equals(call._method) && 739 _override_symbolic_info == call._override_symbolic_info; 740 } 741 #ifndef PRODUCT 742 void MachCallJavaNode::dump_spec(outputStream *st) const { 743 if (_method_handle_invoke) |