< prev index next >

src/hotspot/share/opto/machnode.hpp

Print this page
@@ -235,10 +235,25 @@
    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

@@ -283,10 +298,15 @@
    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;

@@ -379,10 +399,12 @@
    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 >