< prev index next >

src/hotspot/share/opto/memnode.hpp

Print this page

        

*** 1603,1608 **** --- 1603,1644 ---- virtual uint ideal_reg() const { return NotAMachineReg; } virtual uint match_edge(uint idx) const { return idx==2; } virtual const Type *bottom_type() const { return ( AllocatePrefetchStyle == 3 ) ? Type::MEMORY : Type::ABIO; } }; + // cachewb node for guaranteeing writeback of the cache line at a + // given address to (persistent) storage + class CacheWBNode : public Node { + public: + CacheWBNode(Node *ctrl, Node *mem, Node *addr) : Node(ctrl, mem, addr) {} + virtual int Opcode() const; + virtual uint ideal_reg() const { return NotAMachineReg; } + virtual uint match_edge(uint idx) const { return (idx == 2); } + virtual const TypePtr *adr_type() const { return TypeRawPtr::BOTTOM; } + virtual const Type *bottom_type() const { return Type::MEMORY; } + }; + + // cachewb pre sync node for ensuring that writebacks are serialised + // relative to preceding or following stores + class CacheWBPreSyncNode : public Node { + public: + CacheWBPreSyncNode(Node *ctrl, Node *mem) : Node(ctrl, mem) {} + virtual int Opcode() const; + virtual uint ideal_reg() const { return NotAMachineReg; } + virtual uint match_edge(uint idx) const { return false; } + virtual const TypePtr *adr_type() const { return TypeRawPtr::BOTTOM; } + virtual const Type *bottom_type() const { return Type::MEMORY; } + }; + + // cachewb pre sync node for ensuring that writebacks are serialised + // relative to preceding or following stores + class CacheWBPostSyncNode : public Node { + public: + CacheWBPostSyncNode(Node *ctrl, Node *mem) : Node(ctrl, mem) {} + virtual int Opcode() const; + virtual uint ideal_reg() const { return NotAMachineReg; } + virtual uint match_edge(uint idx) const { return false; } + virtual const TypePtr *adr_type() const { return TypeRawPtr::BOTTOM; } + virtual const Type *bottom_type() const { return Type::MEMORY; } + }; + #endif // SHARE_VM_OPTO_MEMNODE_HPP
< prev index next >