< prev index next >

src/hotspot/share/opto/machnode.hpp

Print this page
rev 60137 : 8227745: Enable Escape Analysis for Better Performance in the Presence of JVMTI Agents
Reviewed-by: mdoerr, goetz


 803   const TypePtr* _adr_type;     // memory effects of call or return
 804   MachReturnNode() : MachNode() {
 805     init_class_id(Class_MachReturn);
 806     _adr_type = TypePtr::BOTTOM; // the default: all of memory
 807   }
 808 
 809   void set_adr_type(const TypePtr* atp) { _adr_type = atp; }
 810 
 811   virtual const RegMask &in_RegMask(uint) const;
 812   virtual bool pinned() const { return true; };
 813   virtual const TypePtr *adr_type() const;
 814 };
 815 
 816 //------------------------------MachSafePointNode-----------------------------
 817 // Machine-specific versions of safepoints
 818 class MachSafePointNode : public MachReturnNode {
 819 public:
 820   OopMap*         _oop_map;     // Array of OopMap info (8-bit char) for GC
 821   JVMState*       _jvms;        // Pointer to list of JVM State Objects
 822   uint            _jvmadj;      // Extra delta to jvms indexes (mach. args)

 823   OopMap*         oop_map() const { return _oop_map; }
 824   void            set_oop_map(OopMap* om) { _oop_map = om; }
 825 
 826   MachSafePointNode() : MachReturnNode(), _oop_map(NULL), _jvms(NULL), _jvmadj(0) {
 827     init_class_id(Class_MachSafePoint);
 828   }
 829 
 830   virtual JVMState* jvms() const { return _jvms; }
 831   void set_jvms(JVMState* s) {
 832     _jvms = s;
 833   }
 834   virtual const Type    *bottom_type() const;
 835 
 836   virtual const RegMask &in_RegMask(uint) const;
 837 
 838   // Functionality from old debug nodes
 839   Node *returnadr() const { return in(TypeFunc::ReturnAdr); }
 840   Node *frameptr () const { return in(TypeFunc::FramePtr); }
 841 
 842   Node *local(const JVMState* jvms, uint idx) const {
 843     assert(verify_jvms(jvms), "jvms must match");
 844     return in(_jvmadj + jvms->locoff() + idx);
 845   }
 846   Node *stack(const JVMState* jvms, uint idx) const {


 908   // Similar to cousin class CallNode::returns_pointer
 909   bool returns_pointer() const;
 910 
 911 #ifndef PRODUCT
 912   virtual void dump_spec(outputStream *st) const;
 913 #endif
 914 };
 915 
 916 //------------------------------MachCallJavaNode------------------------------
 917 // "Base" class for machine-specific versions of subroutine calls
 918 class MachCallJavaNode : public MachCallNode {
 919 protected:
 920   virtual bool cmp( const Node &n ) const;
 921   virtual uint size_of() const; // Size is bigger
 922 public:
 923   ciMethod* _method;                 // Method being direct called
 924   bool      _override_symbolic_info; // Override symbolic call site info from bytecode
 925   int       _bci;                    // Byte Code index of call byte code
 926   bool      _optimized_virtual;      // Tells if node is a static call or an optimized virtual
 927   bool      _method_handle_invoke;   // Tells if the call has to preserve SP

 928   MachCallJavaNode() : MachCallNode(), _override_symbolic_info(false) {
 929     init_class_id(Class_MachCallJava);
 930   }
 931 
 932   virtual const RegMask &in_RegMask(uint) const;
 933 
 934   int resolved_method_index(CodeBuffer &cbuf) const {
 935     if (_override_symbolic_info) {
 936       // Attach corresponding Method* to the call site, so VM can use it during resolution
 937       // instead of querying symbolic info from bytecode.
 938       assert(_method != NULL, "method should be set");
 939       assert(_method->constant_encoding()->is_method(), "should point to a Method");
 940       return cbuf.oop_recorder()->find_index(_method->constant_encoding());
 941     }
 942     return 0; // Use symbolic info from bytecode (resolved_method == NULL).
 943   }
 944 
 945 #ifndef PRODUCT
 946   virtual void dump_spec(outputStream *st) const;
 947 #endif




 803   const TypePtr* _adr_type;     // memory effects of call or return
 804   MachReturnNode() : MachNode() {
 805     init_class_id(Class_MachReturn);
 806     _adr_type = TypePtr::BOTTOM; // the default: all of memory
 807   }
 808 
 809   void set_adr_type(const TypePtr* atp) { _adr_type = atp; }
 810 
 811   virtual const RegMask &in_RegMask(uint) const;
 812   virtual bool pinned() const { return true; };
 813   virtual const TypePtr *adr_type() const;
 814 };
 815 
 816 //------------------------------MachSafePointNode-----------------------------
 817 // Machine-specific versions of safepoints
 818 class MachSafePointNode : public MachReturnNode {
 819 public:
 820   OopMap*         _oop_map;     // Array of OopMap info (8-bit char) for GC
 821   JVMState*       _jvms;        // Pointer to list of JVM State Objects
 822   uint            _jvmadj;      // Extra delta to jvms indexes (mach. args)
 823   bool            _not_global_escape_in_scope; // NoEscape or ArgEscape objects in JVM States
 824   OopMap*         oop_map() const { return _oop_map; }
 825   void            set_oop_map(OopMap* om) { _oop_map = om; }
 826 
 827   MachSafePointNode() : MachReturnNode(), _oop_map(NULL), _jvms(NULL), _jvmadj(0), _not_global_escape_in_scope(false) {
 828     init_class_id(Class_MachSafePoint);
 829   }
 830 
 831   virtual JVMState* jvms() const { return _jvms; }
 832   void set_jvms(JVMState* s) {
 833     _jvms = s;
 834   }
 835   virtual const Type    *bottom_type() const;
 836 
 837   virtual const RegMask &in_RegMask(uint) const;
 838 
 839   // Functionality from old debug nodes
 840   Node *returnadr() const { return in(TypeFunc::ReturnAdr); }
 841   Node *frameptr () const { return in(TypeFunc::FramePtr); }
 842 
 843   Node *local(const JVMState* jvms, uint idx) const {
 844     assert(verify_jvms(jvms), "jvms must match");
 845     return in(_jvmadj + jvms->locoff() + idx);
 846   }
 847   Node *stack(const JVMState* jvms, uint idx) const {


 909   // Similar to cousin class CallNode::returns_pointer
 910   bool returns_pointer() const;
 911 
 912 #ifndef PRODUCT
 913   virtual void dump_spec(outputStream *st) const;
 914 #endif
 915 };
 916 
 917 //------------------------------MachCallJavaNode------------------------------
 918 // "Base" class for machine-specific versions of subroutine calls
 919 class MachCallJavaNode : public MachCallNode {
 920 protected:
 921   virtual bool cmp( const Node &n ) const;
 922   virtual uint size_of() const; // Size is bigger
 923 public:
 924   ciMethod* _method;                 // Method being direct called
 925   bool      _override_symbolic_info; // Override symbolic call site info from bytecode
 926   int       _bci;                    // Byte Code index of call byte code
 927   bool      _optimized_virtual;      // Tells if node is a static call or an optimized virtual
 928   bool      _method_handle_invoke;   // Tells if the call has to preserve SP
 929   bool      _arg_escape;             // ArgEscape in parameter list
 930   MachCallJavaNode() : MachCallNode(), _override_symbolic_info(false) {
 931     init_class_id(Class_MachCallJava);
 932   }
 933 
 934   virtual const RegMask &in_RegMask(uint) const;
 935 
 936   int resolved_method_index(CodeBuffer &cbuf) const {
 937     if (_override_symbolic_info) {
 938       // Attach corresponding Method* to the call site, so VM can use it during resolution
 939       // instead of querying symbolic info from bytecode.
 940       assert(_method != NULL, "method should be set");
 941       assert(_method->constant_encoding()->is_method(), "should point to a Method");
 942       return cbuf.oop_recorder()->find_index(_method->constant_encoding());
 943     }
 944     return 0; // Use symbolic info from bytecode (resolved_method == NULL).
 945   }
 946 
 947 #ifndef PRODUCT
 948   virtual void dump_spec(outputStream *st) const;
 949 #endif


< prev index next >