< prev index next > src/hotspot/share/opto/memnode.hpp
Print this page
}
// 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".)
}
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,
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
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 >