src/share/vm/opto/memnode.hpp

Print this page
rev 2892 : 7121140: Allocation paths require explicit memory synchronization operations for RMO systems
Summary: adds store store barrier after initialization of header and body of objects.
Reviewed-by:

*** 916,925 **** --- 916,934 ---- MemBarReleaseLockNode(Compile* C, int alias_idx, Node* precedent) : MemBarNode(C, alias_idx, precedent) {} virtual int Opcode() const; }; + class MemBarStoreStoreNode: public MemBarNode { + public: + MemBarStoreStoreNode(Compile* C, int alias_idx, Node* precedent) + : MemBarNode(C, alias_idx, precedent) { + init_class_id(Class_MemBarStoreStore); + } + virtual int Opcode() const; + }; + // Ordering between a volatile store and a following volatile load. // Requires multi-CPU visibility? class MemBarVolatileNode: public MemBarNode { public: MemBarVolatileNode(Compile* C, int alias_idx, Node* precedent)
*** 948,957 **** --- 957,968 ---- Complete = 1, WithArraycopy = 2 }; int _is_complete; + bool _does_not_escape; + public: enum { Control = TypeFunc::Control, Memory = TypeFunc::Memory, // MergeMem for states affected by this op RawAddress = TypeFunc::Parms+0, // the newly-allocated raw address
*** 987,996 **** --- 998,1010 ---- // Mark complete. (Must not yet be complete.) void set_complete(PhaseGVN* phase); void set_complete_with_arraycopy() { _is_complete = Complete | WithArraycopy; } + bool does_not_escape() { return _does_not_escape; } + void set_does_not_escape() { _does_not_escape = true; } + #ifdef ASSERT // ensure all non-degenerate stores are ordered and non-overlapping bool stores_are_sane(PhaseTransform* phase); #endif //ASSERT