< prev index next > src/hotspot/share/opto/machnode.hpp
Print this page
virtual uint mach_constant_base_node_input() const { return (uint)-1; }
uint8_t barrier_data() const { return _barrier; }
void set_barrier_data(uint8_t data) { _barrier = data; }
+ void set_memory_order(MemNode::MemOrd mo) { _mo = mo; }
+ MemNode::MemOrd memory_order() const { return _mo; }
+
+ void set_trailing_membar(Node* n) {
+ if (n->is_Store()) {
+ _has_trailing_membar = n->as_Store()->trailing_membar() != nullptr;
+ } else if (n->is_LoadStore()) {
+ _has_trailing_membar = n->as_LoadStore()->trailing_membar() != nullptr;
+ } else {
+ _has_trailing_membar = false;
+ }
+ }
+
+ bool has_trailing_membar() const { return _has_trailing_membar; }
+
// Copy index, inputs, and operands to a new version of the instruction.
// Called from cisc_version() and short_branch_version().
void fill_new_machnode(MachNode *n) const;
// Return an equivalent instruction using memory for cisc_operand position
virtual uint two_adr( ) const { return 0; }
// The GC might require some barrier metadata for machine code emission.
uint8_t _barrier;
+ MemNode::MemOrd _mo;
+
+ bool _has_trailing_membar;
+
+
// Array of complex operand pointers. Each corresponds to zero or
// more leafs. Must be set by MachNode constructor to point to an
// internal array of MachOpers. The MachOper array is sized by
// specific MachNodes described in the ADL.
uint16_t _num_opnds;
virtual void method_set( intptr_t addr );
// Should we clone rather than spill this instruction?
bool rematerialize() const;
+ bool is_CAS(bool maybe_volatile) const;
+
// Get the pipeline info
static const Pipeline *pipeline_class();
virtual const Pipeline *pipeline() const;
// Returns true if this node is a check that can be implemented with a trap.
< prev index next >