< prev index next >

src/hotspot/share/opto/memnode.hpp

Print this page
*** 130,10 ***
--- 130,12 ---
    }
  
    // Return the barrier data of n, if available, or 0 otherwise.
    static uint8_t barrier_data(const Node* n);
  
+   static MemOrd memory_order(const Node* n);
+ 
    // Map a load or store opcode to its corresponding store opcode.
    // (Return -1 if unknown.)
    virtual int store_Opcode() const { return -1; }
  
    // What is the type of the value in memory?  (T_VOID mean "unspecified".)

*** 271,10 ***
--- 273,13 ---
    }
    inline bool is_unsigned() const {
      int lop = Opcode();
      return (lop == Op_LoadUB) || (lop == Op_LoadUS);
    }
+   inline MemOrd memory_order() const {
+     return _mo;
+   }
  
    // Polymorphic factory method:
    static Node* make(PhaseGVN& gvn, Node* c, Node* mem, Node* adr,
                      const TypePtr* at, const Type* rt, BasicType bt,
                      MemOrd mo, ControlDependency control_dependency = DependsOnlyOnTest,

*** 642,11 ***
    inline bool is_unordered() const { return !is_release(); }
    inline bool is_release() const {
      assert((_mo == unordered || _mo == release), "unexpected");
      return _mo == release;
    }
! 
    // Conservatively release stores of object references in order to
    // ensure visibility of object initialization.
    static inline MemOrd release_if_reference(const BasicType t) {
  #ifdef AARCH64
      // AArch64 doesn't need a release store here because object
--- 647,13 ---
    inline bool is_unordered() const { return !is_release(); }
    inline bool is_release() const {
      assert((_mo == unordered || _mo == release), "unexpected");
      return _mo == release;
    }
!   inline MemOrd memory_order() const {
+     return _mo;
+   }
    // Conservatively release stores of object references in order to
    // ensure visibility of object initialization.
    static inline MemOrd release_if_reference(const BasicType t) {
  #ifdef AARCH64
      // AArch64 doesn't need a release store here because object

*** 698,10 ***
--- 705,17 ---
    bool  has_reinterpret_variant(const Type* vt);
    Node* convert_to_reinterpret_store(PhaseGVN& gvn, Node* val, const Type* vt);
  
    MemBarNode* trailing_membar() const;
  
+ #ifndef PRODUCT
+   virtual void dump_spec(outputStream *st) const {
+     MemNode::dump_spec(st);
+     if (is_release())  st->print("is_release");
+   }
+ #endif
+ 
  private:
    virtual bool depends_only_on_test_impl() const { return false; }
  };
  
  //------------------------------StoreBNode-------------------------------------
< prev index next >