comparison src/share/vm/opto/memnode.hpp @ 985:685e959d09ea

6877254: Server vm crashes with no branches off of store slice" when run with CMS and UseSuperWord(default) Summary: design StoreCMNode::Ideal to promote its oopStore input if the input is a MergeMem node Reviewed-by: kvn, never
author cfang
date Mon, 14 Sep 2009 09:49:54 -0700
parents fbde8ec322d0
children 62001a362ce9
comparison
equal deleted inserted replaced
958:c7e94e8fff43 985:685e959d09ea
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.