< prev index next >

src/share/vm/opto/memnode.hpp

Print this page




 996   GetAndSetLNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeLong::LONG, 4) { }
 997   virtual int Opcode() const;
 998 };
 999 
1000 //------------------------------GetAndSetPNode---------------------------
1001 class GetAndSetPNode : public LoadStoreNode {
1002 public:
1003   GetAndSetPNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { }
1004   virtual int Opcode() const;
1005 };
1006 
1007 //------------------------------GetAndSetNNode---------------------------
1008 class GetAndSetNNode : public LoadStoreNode {
1009 public:
1010   GetAndSetNNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { }
1011   virtual int Opcode() const;
1012 };
1013 
1014 //------------------------------ClearArray-------------------------------------
1015 class ClearArrayNode: public Node {


1016 public:
1017   ClearArrayNode( Node *ctrl, Node *arymem, Node *word_cnt, Node *base )
1018     : Node(ctrl,arymem,word_cnt,base) {
1019     init_class_id(Class_ClearArray);
1020   }
1021   virtual int         Opcode() const;
1022   virtual const Type *bottom_type() const { return Type::MEMORY; }
1023   // ClearArray modifies array elements, and so affects only the
1024   // array memory addressed by the bottom_type of its base address.
1025   virtual const class TypePtr *adr_type() const;
1026   virtual Node* Identity(PhaseGVN* phase);
1027   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
1028   virtual uint match_edge(uint idx) const;

1029 
1030   // Clear the given area of an object or array.
1031   // The start offset must always be aligned mod BytesPerInt.
1032   // The end offset must always be aligned mod BytesPerLong.
1033   // Return the new memory.
1034   static Node* clear_memory(Node* control, Node* mem, Node* dest,
1035                             intptr_t start_offset,
1036                             intptr_t end_offset,
1037                             PhaseGVN* phase);
1038   static Node* clear_memory(Node* control, Node* mem, Node* dest,
1039                             intptr_t start_offset,
1040                             Node* end_offset,
1041                             PhaseGVN* phase);
1042   static Node* clear_memory(Node* control, Node* mem, Node* dest,
1043                             Node* start_offset,
1044                             Node* end_offset,
1045                             PhaseGVN* phase);
1046   // Return allocation input memory edge if it is different instance
1047   // or itself if it is the one we are looking for.
1048   static bool step_through(Node** np, uint instance_id, PhaseTransform* phase);




 996   GetAndSetLNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeLong::LONG, 4) { }
 997   virtual int Opcode() const;
 998 };
 999 
1000 //------------------------------GetAndSetPNode---------------------------
1001 class GetAndSetPNode : public LoadStoreNode {
1002 public:
1003   GetAndSetPNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { }
1004   virtual int Opcode() const;
1005 };
1006 
1007 //------------------------------GetAndSetNNode---------------------------
1008 class GetAndSetNNode : public LoadStoreNode {
1009 public:
1010   GetAndSetNNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { }
1011   virtual int Opcode() const;
1012 };
1013 
1014 //------------------------------ClearArray-------------------------------------
1015 class ClearArrayNode: public Node {
1016 private:
1017   bool _is_large;
1018 public:
1019   ClearArrayNode( Node *ctrl, Node *arymem, Node *word_cnt, Node *base, bool is_large = false)
1020     : Node(ctrl,arymem,word_cnt,base), _is_large(is_large) {
1021     init_class_id(Class_ClearArray);
1022   }
1023   virtual int         Opcode() const;
1024   virtual const Type *bottom_type() const { return Type::MEMORY; }
1025   // ClearArray modifies array elements, and so affects only the
1026   // array memory addressed by the bottom_type of its base address.
1027   virtual const class TypePtr *adr_type() const;
1028   virtual Node* Identity(PhaseGVN* phase);
1029   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
1030   virtual uint match_edge(uint idx) const;
1031   bool is_large() const { return _is_large; }
1032 
1033   // Clear the given area of an object or array.
1034   // The start offset must always be aligned mod BytesPerInt.
1035   // The end offset must always be aligned mod BytesPerLong.
1036   // Return the new memory.
1037   static Node* clear_memory(Node* control, Node* mem, Node* dest,
1038                             intptr_t start_offset,
1039                             intptr_t end_offset,
1040                             PhaseGVN* phase);
1041   static Node* clear_memory(Node* control, Node* mem, Node* dest,
1042                             intptr_t start_offset,
1043                             Node* end_offset,
1044                             PhaseGVN* phase);
1045   static Node* clear_memory(Node* control, Node* mem, Node* dest,
1046                             Node* start_offset,
1047                             Node* end_offset,
1048                             PhaseGVN* phase);
1049   // Return allocation input memory edge if it is different instance
1050   // or itself if it is the one we are looking for.
1051   static bool step_through(Node** np, uint instance_id, PhaseTransform* phase);


< prev index next >