src/share/vm/opto/memnode.hpp

Print this page




1069 // Ordering between a volatile store and a following volatile load.
1070 // Requires multi-CPU visibility?
1071 class MemBarVolatileNode: public MemBarNode {
1072 public:
1073   MemBarVolatileNode(Compile* C, int alias_idx, Node* precedent)
1074     : MemBarNode(C, alias_idx, precedent) {}
1075   virtual int Opcode() const;
1076 };
1077 
1078 // Ordering within the same CPU.  Used to order unsafe memory references
1079 // inside the compiler when we lack alias info.  Not needed "outside" the
1080 // compiler because the CPU does all the ordering for us.
1081 class MemBarCPUOrderNode: public MemBarNode {
1082 public:
1083   MemBarCPUOrderNode(Compile* C, int alias_idx, Node* precedent)
1084     : MemBarNode(C, alias_idx, precedent) {}
1085   virtual int Opcode() const;
1086   virtual uint ideal_reg() const { return 0; } // not matched in the AD file
1087 };
1088 







1089 // Isolation of object setup after an AllocateNode and before next safepoint.
1090 // (See comment in memnode.cpp near InitializeNode::InitializeNode for semantics.)
1091 class InitializeNode: public MemBarNode {
1092   friend class AllocateNode;
1093 
1094   enum {
1095     Incomplete    = 0,
1096     Complete      = 1,
1097     WithArraycopy = 2
1098   };
1099   int _is_complete;
1100 
1101   bool _does_not_escape;
1102 
1103 public:
1104   enum {
1105     Control    = TypeFunc::Control,
1106     Memory     = TypeFunc::Memory,     // MergeMem for states affected by this op
1107     RawAddress = TypeFunc::Parms+0,    // the newly-allocated raw address
1108     RawStores  = TypeFunc::Parms+1     // zero or more stores (or TOP)




1069 // Ordering between a volatile store and a following volatile load.
1070 // Requires multi-CPU visibility?
1071 class MemBarVolatileNode: public MemBarNode {
1072 public:
1073   MemBarVolatileNode(Compile* C, int alias_idx, Node* precedent)
1074     : MemBarNode(C, alias_idx, precedent) {}
1075   virtual int Opcode() const;
1076 };
1077 
1078 // Ordering within the same CPU.  Used to order unsafe memory references
1079 // inside the compiler when we lack alias info.  Not needed "outside" the
1080 // compiler because the CPU does all the ordering for us.
1081 class MemBarCPUOrderNode: public MemBarNode {
1082 public:
1083   MemBarCPUOrderNode(Compile* C, int alias_idx, Node* precedent)
1084     : MemBarNode(C, alias_idx, precedent) {}
1085   virtual int Opcode() const;
1086   virtual uint ideal_reg() const { return 0; } // not matched in the AD file
1087 };
1088 
1089 class OnSpinWaitNode: public MemBarNode {
1090 public:
1091   OnSpinWaitNode(Compile* C, int alias_idx, Node* precedent)
1092     : MemBarNode(C, alias_idx, precedent) {}
1093   virtual int Opcode() const;
1094 };
1095 
1096 // Isolation of object setup after an AllocateNode and before next safepoint.
1097 // (See comment in memnode.cpp near InitializeNode::InitializeNode for semantics.)
1098 class InitializeNode: public MemBarNode {
1099   friend class AllocateNode;
1100 
1101   enum {
1102     Incomplete    = 0,
1103     Complete      = 1,
1104     WithArraycopy = 2
1105   };
1106   int _is_complete;
1107 
1108   bool _does_not_escape;
1109 
1110 public:
1111   enum {
1112     Control    = TypeFunc::Control,
1113     Memory     = TypeFunc::Memory,     // MergeMem for states affected by this op
1114     RawAddress = TypeFunc::Parms+0,    // the newly-allocated raw address
1115     RawStores  = TypeFunc::Parms+1     // zero or more stores (or TOP)