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

#include <MemCpy.hpp>

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

Public Member Functions

 ~MemCpyVolatileOperation () noexcept override
 
 MemCpyVolatileOperation (std::shared_ptr< const rvsdg::Type > lengthType, size_t numMemoryStates)
 
bool operator== (const Operation &other) const noexcept override
 
std::string debug_string () const override
 
std::unique_ptr< Operation > copy () const override
 
size_t NumMemoryStates () const noexcept override
 
- Public Member Functions inherited from jlm::llvm::MemCpyOperation
const rvsdg::BitTypeLengthType () 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 std::unique_ptr< llvm::ThreeAddressCodeCreateThreeAddressCode (const Variable &destination, const Variable &source, const Variable &length, const Variable &ioState, const std::vector< const Variable * > &memoryStates)
 
static rvsdg::SimpleNodeCreateNode (rvsdg::Output &destination, rvsdg::Output &source, rvsdg::Output &length, rvsdg::Output &ioState, const std::vector< rvsdg::Output * > &memoryStates)
 
- Static Public Member Functions inherited from jlm::llvm::MemCpyOperation
static rvsdg::InputdestinationInput (const rvsdg::Node &node) noexcept
 
static rvsdg::InputsourceInput (const rvsdg::Node &node) noexcept
 
static rvsdg::InputcountInput (const rvsdg::Node &node) noexcept
 
static rvsdg::InputmapMemoryStateOutputToInput (const rvsdg::Output &output)
 
static rvsdg::OutputmapMemoryStateInputToOutput (const rvsdg::Input &input)
 

Static Private Member Functions

static std::vector< std::shared_ptr< const rvsdg::Type > > CreateOperandTypes (std::shared_ptr< const rvsdg::Type > lengthType, 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::MemCpyOperation
 MemCpyOperation (const std::vector< std::shared_ptr< const rvsdg::Type >> &operandTypes, const std::vector< std::shared_ptr< const rvsdg::Type >> &resultTypes)
 

Detailed Description

Represents a volatile LLVM memcpy intrinsic

In contrast to LLVM, a volatile memcpy requires in an RVSDG setting an I/O state as it incorporates externally visible side-effects. This I/O state allows the volatile memcpy 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 memcpys are modeled as its own operation and volatile is not just a flag at the normal MemCpyNonVolatileOperation.

See also
MemCpyNonVolatileOperation

Definition at line 247 of file MemCpy.hpp.

Constructor & Destructor Documentation

◆ ~MemCpyVolatileOperation()

jlm::llvm::MemCpyVolatileOperation::~MemCpyVolatileOperation ( )
overridedefaultnoexcept

◆ MemCpyVolatileOperation()

jlm::llvm::MemCpyVolatileOperation::MemCpyVolatileOperation ( std::shared_ptr< const rvsdg::Type lengthType,
size_t  numMemoryStates 
)
inline

Definition at line 252 of file MemCpy.hpp.

Member Function Documentation

◆ copy()

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

Implements jlm::rvsdg::Operation.

Definition at line 55 of file MemCpy.cpp.

◆ CreateNode()

static rvsdg::SimpleNode& jlm::llvm::MemCpyVolatileOperation::CreateNode ( rvsdg::Output destination,
rvsdg::Output source,
rvsdg::Output length,
rvsdg::Output ioState,
const std::vector< rvsdg::Output * > &  memoryStates 
)
inlinestatic

Definition at line 286 of file MemCpy.hpp.

◆ CreateOperandTypes()

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

Definition at line 304 of file MemCpy.hpp.

◆ CreateResultTypes()

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

Definition at line 316 of file MemCpy.hpp.

◆ CreateThreeAddressCode()

static std::unique_ptr<llvm::ThreeAddressCode> jlm::llvm::MemCpyVolatileOperation::CreateThreeAddressCode ( const Variable destination,
const Variable source,
const Variable length,
const Variable ioState,
const std::vector< const Variable * > &  memoryStates 
)
inlinestatic

Definition at line 271 of file MemCpy.hpp.

◆ debug_string()

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

Implements jlm::rvsdg::Operation.

Definition at line 49 of file MemCpy.cpp.

◆ NumMemoryStates()

size_t jlm::llvm::MemCpyVolatileOperation::NumMemoryStates ( ) const
overridevirtualnoexcept

Implements jlm::llvm::MemCpyOperation.

Definition at line 61 of file MemCpy.cpp.

◆ operator==()

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

Definition at line 42 of file MemCpy.cpp.


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