580 //------------------------------StoreCMNode----------------------------------- |
580 //------------------------------StoreCMNode----------------------------------- |
581 // Store card-mark byte to memory for CM |
581 // Store card-mark byte to memory for CM |
582 // The last StoreCM before a SafePoint must be preserved and occur after its "oop" store |
582 // The last StoreCM before a SafePoint must be preserved and occur after its "oop" store |
583 // Preceeding equivalent StoreCMs may be eliminated. |
583 // Preceeding equivalent StoreCMs may be eliminated. |
584 class StoreCMNode : public StoreNode { |
584 class StoreCMNode : public StoreNode { |
585 public: |
585 private: |
586 StoreCMNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, Node *oop_store ) : StoreNode(c,mem,adr,at,val,oop_store) {} |
586 int _oop_alias_idx; // The alias_idx of OopStore |
|
587 public: |
|
588 StoreCMNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, Node *oop_store, int oop_alias_idx ) : StoreNode(c,mem,adr,at,val,oop_store), _oop_alias_idx(oop_alias_idx) {} |
587 virtual int Opcode() const; |
589 virtual int Opcode() const; |
588 virtual Node *Identity( PhaseTransform *phase ); |
590 virtual Node *Identity( PhaseTransform *phase ); |
|
591 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); |
589 virtual const Type *Value( PhaseTransform *phase ) const; |
592 virtual const Type *Value( PhaseTransform *phase ) const; |
590 virtual BasicType memory_type() const { return T_VOID; } // unspecific |
593 virtual BasicType memory_type() const { return T_VOID; } // unspecific |
|
594 int oop_alias_idx() const { return _oop_alias_idx; } |
591 }; |
595 }; |
592 |
596 |
593 //------------------------------LoadPLockedNode--------------------------------- |
597 //------------------------------LoadPLockedNode--------------------------------- |
594 // Load-locked a pointer from memory (either object or array). |
598 // Load-locked a pointer from memory (either object or array). |
595 // On Sparc & Intel this is implemented as a normal pointer load. |
599 // On Sparc & Intel this is implemented as a normal pointer load. |