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
|