hotspot/src/share/vm/opto/memnode.hpp
changeset 30629 b6e5ad2f18d5
parent 30300 4b12a5b40064
child 31035 0f0743952c41
equal deleted inserted replaced
30628:3c15b4a3bf4d 30629:b6e5ad2f18d5
    70     : Node(c0,c1,c2,c3,c4) {
    70     : Node(c0,c1,c2,c3,c4) {
    71     init_class_id(Class_Mem);
    71     init_class_id(Class_Mem);
    72     debug_only(_adr_type=at; adr_type();)
    72     debug_only(_adr_type=at; adr_type();)
    73   }
    73   }
    74 
    74 
       
    75   virtual Node* find_previous_arraycopy(PhaseTransform* phase, Node* ld_alloc, Node*& mem, bool can_see_stored_value) const { return NULL; }
       
    76 
    75 public:
    77 public:
    76   // Helpers for the optimizer.  Documented in memnode.cpp.
    78   // Helpers for the optimizer.  Documented in memnode.cpp.
    77   static bool detect_ptr_independence(Node* p1, AllocateNode* a1,
    79   static bool detect_ptr_independence(Node* p1, AllocateNode* a1,
    78                                       Node* p2, AllocateNode* a2,
    80                                       Node* p2, AllocateNode* a2,
    79                                       PhaseTransform* phase);
    81                                       PhaseTransform* phase);
   122   Node* find_previous_store(PhaseTransform* phase);
   124   Node* find_previous_store(PhaseTransform* phase);
   123 
   125 
   124   // Can this node (load or store) accurately see a stored value in
   126   // Can this node (load or store) accurately see a stored value in
   125   // the given memory state?  (The state may or may not be in(Memory).)
   127   // the given memory state?  (The state may or may not be in(Memory).)
   126   Node* can_see_stored_value(Node* st, PhaseTransform* phase) const;
   128   Node* can_see_stored_value(Node* st, PhaseTransform* phase) const;
       
   129   Node* can_see_arraycopy_value(Node* st, PhaseTransform* phase) const;
   127 
   130 
   128 #ifndef PRODUCT
   131 #ifndef PRODUCT
   129   static void dump_adr_type(const Node* mem, const TypePtr* adr_type, outputStream *st);
   132   static void dump_adr_type(const Node* mem, const TypePtr* adr_type, outputStream *st);
   130   virtual void dump_spec(outputStream *st) const;
   133   virtual void dump_spec(outputStream *st) const;
   131 #endif
   134 #endif
   145   virtual uint cmp(const Node &n) const;
   148   virtual uint cmp(const Node &n) const;
   146   virtual uint size_of() const; // Size is bigger
   149   virtual uint size_of() const; // Size is bigger
   147   // Should LoadNode::Ideal() attempt to remove control edges?
   150   // Should LoadNode::Ideal() attempt to remove control edges?
   148   virtual bool can_remove_control() const;
   151   virtual bool can_remove_control() const;
   149   const Type* const _type;      // What kind of value is loaded?
   152   const Type* const _type;      // What kind of value is loaded?
       
   153 
       
   154   virtual Node* find_previous_arraycopy(PhaseTransform* phase, Node* ld_alloc, Node*& mem, bool can_see_stored_value) const;
   150 public:
   155 public:
   151 
   156 
   152   LoadNode(Node *c, Node *mem, Node *adr, const TypePtr* at, const Type *rt, MemOrd mo)
   157   LoadNode(Node *c, Node *mem, Node *adr, const TypePtr* at, const Type *rt, MemOrd mo)
   153     : MemNode(c,mem,adr,at), _type(rt), _mo(mo) {
   158     : MemNode(c,mem,adr,at), _type(rt), _mo(mo) {
   154     init_class_id(Class_Load);
   159     init_class_id(Class_Load);