Jlm
Public Member Functions | Static Public Member Functions | Static Private Member Functions | List of all members
jlm::llvm::StoreVolatileOperation Class Referencefinal

#include <Store.hpp>

Inheritance diagram for jlm::llvm::StoreVolatileOperation:
Inheritance graph
[legend]
Collaboration diagram for jlm::llvm::StoreVolatileOperation:
Collaboration graph
[legend]

Public Member Functions

 ~StoreVolatileOperation () noexcept override
 
 StoreVolatileOperation (std::shared_ptr< const rvsdg::Type > storedType, const size_t numMemoryStates, const size_t alignment)
 
bool operator== (const Operation &other) const noexcept override
 
std::string debug_string () const override
 
std::unique_ptr< Operation > copy () const override
 
- Public Member Functions inherited from jlm::llvm::StoreOperation
size_t GetAlignment () const noexcept
 
const rvsdg::TypeGetStoredType () const noexcept
 
size_t NumMemoryStates () const noexcept
 
- Public Member Functions inherited from jlm::rvsdg::SimpleOperation
 ~SimpleOperation () noexcept override
 
 SimpleOperation (std::vector< std::shared_ptr< const jlm::rvsdg::Type >> operands, std::vector< std::shared_ptr< const jlm::rvsdg::Type >> results)
 
size_t narguments () const noexcept
 
const std::shared_ptr< const rvsdg::Type > & argument (size_t index) const noexcept
 
size_t nresults () const noexcept
 
const std::shared_ptr< const rvsdg::Type > & result (size_t index) const noexcept
 
- Public Member Functions inherited from jlm::rvsdg::Operation
virtual ~Operation () noexcept
 
virtual bool operator== (const Operation &other) const noexcept=0
 
bool operator!= (const Operation &other) const noexcept
 

Static Public Member Functions

static rvsdg::InputIOStateInput (const rvsdg::Node &node) noexcept
 
static rvsdg::OutputIOStateOutput (const rvsdg::Node &node) noexcept
 
static std::unique_ptr< llvm::ThreeAddressCodeCreate (const Variable *address, const Variable *value, const Variable *ioState, const Variable *memoryState, size_t alignment)
 
static rvsdg::SimpleNodeCreateNode (rvsdg::Region &region, std::unique_ptr< StoreVolatileOperation > storeOperation, const std::vector< rvsdg::Output * > &operands)
 
static rvsdg::SimpleNodeCreateNode (rvsdg::Output &address, rvsdg::Output &value, rvsdg::Output &ioState, const std::vector< rvsdg::Output * > &memoryStates, size_t alignment)
 
static std::vector< rvsdg::Output * > Create (rvsdg::Region &region, std::unique_ptr< StoreVolatileOperation > storeOperation, const std::vector< rvsdg::Output * > &operands)
 
- Static Public Member Functions inherited from jlm::llvm::StoreOperation
static rvsdg::InputAddressInput (const rvsdg::Node &node) noexcept
 
static rvsdg::InputStoredValueInput (const rvsdg::Node &node) noexcept
 
static rvsdg::Node::OutputIteratorRange MemoryStateOutputs (const rvsdg::SimpleNode &node) noexcept
 
static rvsdg::InputMapMemoryStateOutputToInput (const rvsdg::Output &output)
 

Static Private Member Functions

static std::shared_ptr< const rvsdg::TypeCheckAndExtractStoredType (const std::shared_ptr< const rvsdg::Type > &type)
 
static std::vector< std::shared_ptr< const rvsdg::Type > > CreateOperandTypes (std::shared_ptr< const rvsdg::Type > storedType, size_t numMemoryStates)
 
static std::vector< std::shared_ptr< const rvsdg::Type > > CreateResultTypes (size_t numMemoryStates)
 

Additional Inherited Members

- Protected Member Functions inherited from jlm::llvm::StoreOperation
 StoreOperation (const std::vector< std::shared_ptr< const rvsdg::Type >> &operandTypes, const std::vector< std::shared_ptr< const rvsdg::Type >> &resultTypes, size_t numMemoryStates, size_t alignment)
 

Detailed Description

Represents a volatile LLVM store instruction.

In contrast to LLVM, a volatile store requires in an RVSDG setting an I/O state as it incorporates externally visible side-effects. This I/O state allows the volatile store operation to be sequentialized with respect to other volatile memory accesses and I/O operations. This additional I/O state is the main reason why volatile stores are modeled as its own operation and volatile is not just a flag at the normal StoreNonVolatileOperation.

See also
StoreNonVolatileOperation

Definition at line 372 of file Store.hpp.

Constructor & Destructor Documentation

◆ ~StoreVolatileOperation()

jlm::llvm::StoreVolatileOperation::~StoreVolatileOperation ( )
overridedefaultnoexcept

◆ StoreVolatileOperation()

jlm::llvm::StoreVolatileOperation::StoreVolatileOperation ( std::shared_ptr< const rvsdg::Type storedType,
const size_t  numMemoryStates,
const size_t  alignment 
)
inline

Definition at line 377 of file Store.hpp.

Member Function Documentation

◆ CheckAndExtractStoredType()

static std::shared_ptr<const rvsdg::Type> jlm::llvm::StoreVolatileOperation::CheckAndExtractStoredType ( const std::shared_ptr< const rvsdg::Type > &  type)
inlinestaticprivate

Definition at line 467 of file Store.hpp.

◆ copy()

std::unique_ptr< rvsdg::Operation > jlm::llvm::StoreVolatileOperation::copy ( ) const
overridevirtual

Implements jlm::rvsdg::Operation.

Definition at line 313 of file Store.cpp.

◆ Create() [1/2]

static std::unique_ptr<llvm::ThreeAddressCode> jlm::llvm::StoreVolatileOperation::Create ( const Variable address,
const Variable value,
const Variable ioState,
const Variable memoryState,
size_t  alignment 
)
inlinestatic

Definition at line 416 of file Store.hpp.

◆ Create() [2/2]

static std::vector<rvsdg::Output *> jlm::llvm::StoreVolatileOperation::Create ( rvsdg::Region region,
std::unique_ptr< StoreVolatileOperation storeOperation,
const std::vector< rvsdg::Output * > &  operands 
)
inlinestatic

Definition at line 457 of file Store.hpp.

◆ CreateNode() [1/2]

static rvsdg::SimpleNode& jlm::llvm::StoreVolatileOperation::CreateNode ( rvsdg::Output address,
rvsdg::Output value,
rvsdg::Output ioState,
const std::vector< rvsdg::Output * > &  memoryStates,
size_t  alignment 
)
inlinestatic

Definition at line 439 of file Store.hpp.

◆ CreateNode() [2/2]

static rvsdg::SimpleNode& jlm::llvm::StoreVolatileOperation::CreateNode ( rvsdg::Region region,
std::unique_ptr< StoreVolatileOperation storeOperation,
const std::vector< rvsdg::Output * > &  operands 
)
inlinestatic

Definition at line 430 of file Store.hpp.

◆ CreateOperandTypes()

static std::vector<std::shared_ptr<const rvsdg::Type> > jlm::llvm::StoreVolatileOperation::CreateOperandTypes ( std::shared_ptr< const rvsdg::Type storedType,
size_t  numMemoryStates 
)
inlinestaticprivate

Definition at line 476 of file Store.hpp.

◆ CreateResultTypes()

static std::vector<std::shared_ptr<const rvsdg::Type> > jlm::llvm::StoreVolatileOperation::CreateResultTypes ( size_t  numMemoryStates)
inlinestaticprivate

Definition at line 488 of file Store.hpp.

◆ debug_string()

std::string jlm::llvm::StoreVolatileOperation::debug_string ( ) const
overridevirtual

Implements jlm::rvsdg::Operation.

Definition at line 307 of file Store.cpp.

◆ IOStateInput()

static rvsdg::Input& jlm::llvm::StoreVolatileOperation::IOStateInput ( const rvsdg::Node node)
inlinestaticnoexcept

Definition at line 398 of file Store.hpp.

◆ IOStateOutput()

static rvsdg::Output& jlm::llvm::StoreVolatileOperation::IOStateOutput ( const rvsdg::Node node)
inlinestaticnoexcept

Definition at line 407 of file Store.hpp.

◆ operator==()

bool jlm::llvm::StoreVolatileOperation::operator== ( const Operation &  other) const
overridenoexcept

Definition at line 298 of file Store.cpp.


The documentation for this class was generated from the following files: