< prev index next >

src/share/vm/opto/machnode.cpp

Print this page




 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)


< prev index next >