565 public:
566 StorePNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNode(c,mem,adr,at,val) {}
567 virtual int Opcode() const;
568 virtual BasicType memory_type() const { return T_ADDRESS; }
569 };
570
571 //------------------------------StoreNNode-------------------------------------
572 // Store narrow oop to memory
573 class StoreNNode : public StoreNode {
574 public:
575 StoreNNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNode(c,mem,adr,at,val) {}
576 virtual int Opcode() const;
577 virtual BasicType memory_type() const { return T_NARROWOOP; }
578 };
579
580 //------------------------------StoreCMNode-----------------------------------
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
583 // Preceeding equivalent StoreCMs may be eliminated.
584 class StoreCMNode : public StoreNode {
585 public:
586 StoreCMNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, Node *oop_store ) : StoreNode(c,mem,adr,at,val,oop_store) {}
587 virtual int Opcode() const;
588 virtual Node *Identity( PhaseTransform *phase );
589 virtual const Type *Value( PhaseTransform *phase ) const;
590 virtual BasicType memory_type() const { return T_VOID; } // unspecific
591 };
592
593 //------------------------------LoadPLockedNode---------------------------------
594 // Load-locked a pointer from memory (either object or array).
595 // On Sparc & Intel this is implemented as a normal pointer load.
596 // On PowerPC and friends it's a real load-locked.
597 class LoadPLockedNode : public LoadPNode {
598 public:
599 LoadPLockedNode( Node *c, Node *mem, Node *adr )
600 : LoadPNode(c,mem,adr,TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM) {}
601 virtual int Opcode() const;
602 virtual int store_Opcode() const { return Op_StorePConditional; }
603 virtual bool depends_only_on_test() const { return true; }
604 };
605
606 //------------------------------LoadLLockedNode---------------------------------
607 // Load-locked a pointer from memory (either object or array).
608 // On Sparc & Intel this is implemented as a normal long load.
609 class LoadLLockedNode : public LoadLNode {
610 public:
|
565 public:
566 StorePNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNode(c,mem,adr,at,val) {}
567 virtual int Opcode() const;
568 virtual BasicType memory_type() const { return T_ADDRESS; }
569 };
570
571 //------------------------------StoreNNode-------------------------------------
572 // Store narrow oop to memory
573 class StoreNNode : public StoreNode {
574 public:
575 StoreNNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val ) : StoreNode(c,mem,adr,at,val) {}
576 virtual int Opcode() const;
577 virtual BasicType memory_type() const { return T_NARROWOOP; }
578 };
579
580 //------------------------------StoreCMNode-----------------------------------
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
583 // Preceeding equivalent StoreCMs may be eliminated.
584 class StoreCMNode : public StoreNode {
585 private:
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) {}
589 virtual int Opcode() const;
590 virtual Node *Identity( PhaseTransform *phase );
591 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
592 virtual const Type *Value( PhaseTransform *phase ) const;
593 virtual BasicType memory_type() const { return T_VOID; } // unspecific
594 int oop_alias_idx() const { return _oop_alias_idx; }
595 };
596
597 //------------------------------LoadPLockedNode---------------------------------
598 // Load-locked a pointer from memory (either object or array).
599 // On Sparc & Intel this is implemented as a normal pointer load.
600 // On PowerPC and friends it's a real load-locked.
601 class LoadPLockedNode : public LoadPNode {
602 public:
603 LoadPLockedNode( Node *c, Node *mem, Node *adr )
604 : LoadPNode(c,mem,adr,TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM) {}
605 virtual int Opcode() const;
606 virtual int store_Opcode() const { return Op_StorePConditional; }
607 virtual bool depends_only_on_test() const { return true; }
608 };
609
610 //------------------------------LoadLLockedNode---------------------------------
611 // Load-locked a pointer from memory (either object or array).
612 // On Sparc & Intel this is implemented as a normal long load.
613 class LoadLLockedNode : public LoadLNode {
614 public:
|