src/share/vm/opto/memnode.hpp

Print this page




1058 // Ordering between a volatile store and a following volatile load.
1059 // Requires multi-CPU visibility?
1060 class MemBarVolatileNode: public MemBarNode {
1061 public:
1062   MemBarVolatileNode(Compile* C, int alias_idx, Node* precedent)
1063     : MemBarNode(C, alias_idx, precedent) {}
1064   virtual int Opcode() const;
1065 };
1066 
1067 // Ordering within the same CPU.  Used to order unsafe memory references
1068 // inside the compiler when we lack alias info.  Not needed "outside" the
1069 // compiler because the CPU does all the ordering for us.
1070 class MemBarCPUOrderNode: public MemBarNode {
1071 public:
1072   MemBarCPUOrderNode(Compile* C, int alias_idx, Node* precedent)
1073     : MemBarNode(C, alias_idx, precedent) {}
1074   virtual int Opcode() const;
1075   virtual uint ideal_reg() const { return 0; } // not matched in the AD file
1076 };
1077 







1078 // Isolation of object setup after an AllocateNode and before next safepoint.
1079 // (See comment in memnode.cpp near InitializeNode::InitializeNode for semantics.)
1080 class InitializeNode: public MemBarNode {
1081   friend class AllocateNode;
1082 
1083   enum {
1084     Incomplete    = 0,
1085     Complete      = 1,
1086     WithArraycopy = 2
1087   };
1088   int _is_complete;
1089 
1090   bool _does_not_escape;
1091 
1092 public:
1093   enum {
1094     Control    = TypeFunc::Control,
1095     Memory     = TypeFunc::Memory,     // MergeMem for states affected by this op
1096     RawAddress = TypeFunc::Parms+0,    // the newly-allocated raw address
1097     RawStores  = TypeFunc::Parms+1     // zero or more stores (or TOP)




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