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

#include <MemoryStateOperations.hpp>

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

Public Member Functions

 ~MemoryStateSplitOperation () noexcept override
 
 MemoryStateSplitOperation (const size_t numResults)
 
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::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::optional< std::vector< rvsdg::Output * > > NormalizeSingleResult (const MemoryStateSplitOperation &operation, const std::vector< rvsdg::Output * > &operands)
 Removes the MemoryStateSplitOperation as it has only a single result, i.e., no splitting is performed. More...
 
static std::optional< std::vector< rvsdg::Output * > > NormalizeNestedSplits (const MemoryStateSplitOperation &operation, const std::vector< rvsdg::Output * > &operands)
 Fuses nested splits into a single split. More...
 
static std::optional< std::vector< rvsdg::Output * > > NormalizeSplitMerge (const MemoryStateSplitOperation &operation, const std::vector< rvsdg::Output * > &operands)
 Removes an idempotent split-merge pair. More...
 
static rvsdg::SimpleNodeCreateNode (rvsdg::Output &operand, const size_t numResults)
 
static std::vector< rvsdg::Output * > Create (rvsdg::Output &operand, const size_t numResults)
 

Additional Inherited Members

- Protected Member Functions inherited from jlm::llvm::MemoryStateOperation
 MemoryStateOperation (size_t numOperands, size_t numResults)
 

Detailed Description

A memory state split operation takes a single input state and splits it into multiple output states.

The operation has no equivalent LLVM instruction.

Definition at line 206 of file MemoryStateOperations.hpp.

Constructor & Destructor Documentation

◆ ~MemoryStateSplitOperation()

jlm::llvm::MemoryStateSplitOperation::~MemoryStateSplitOperation ( )
overridedefaultnoexcept

◆ MemoryStateSplitOperation()

jlm::llvm::MemoryStateSplitOperation::MemoryStateSplitOperation ( const size_t  numResults)
inlineexplicit

Definition at line 211 of file MemoryStateOperations.hpp.

Member Function Documentation

◆ copy()

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

Implements jlm::rvsdg::Operation.

Definition at line 225 of file MemoryStateOperations.cpp.

◆ Create()

static std::vector<rvsdg::Output *> jlm::llvm::MemoryStateSplitOperation::Create ( rvsdg::Output operand,
const size_t  numResults 
)
inlinestatic

Definition at line 272 of file MemoryStateOperations.hpp.

◆ CreateNode()

static rvsdg::SimpleNode& jlm::llvm::MemoryStateSplitOperation::CreateNode ( rvsdg::Output operand,
const size_t  numResults 
)
inlinestatic

Definition at line 266 of file MemoryStateOperations.hpp.

◆ debug_string()

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

Implements jlm::rvsdg::Operation.

Definition at line 219 of file MemoryStateOperations.cpp.

◆ NormalizeNestedSplits()

std::optional< std::vector< rvsdg::Output * > > jlm::llvm::MemoryStateSplitOperation::NormalizeNestedSplits ( const MemoryStateSplitOperation operation,
const std::vector< rvsdg::Output * > &  operands 
)
static

Fuses nested splits into a single split.

o1 o2 o3 = MemoryStateSplitOperation i1 o4 o5 = MemoryStateSplitOperation o2 => o1 o4 o5 o3 = MemoryStateSplitOperation i1

Definition at line 244 of file MemoryStateOperations.cpp.

◆ NormalizeSingleResult()

std::optional< std::vector< rvsdg::Output * > > jlm::llvm::MemoryStateSplitOperation::NormalizeSingleResult ( const MemoryStateSplitOperation operation,
const std::vector< rvsdg::Output * > &  operands 
)
static

Removes the MemoryStateSplitOperation as it has only a single result, i.e., no splitting is performed.

so = MemoryStateSplitOperation si ... = AnyOperation so => ... = AnyOperation si

Definition at line 231 of file MemoryStateOperations.cpp.

◆ NormalizeSplitMerge()

std::optional< std::vector< rvsdg::Output * > > jlm::llvm::MemoryStateSplitOperation::NormalizeSplitMerge ( const MemoryStateSplitOperation operation,
const std::vector< rvsdg::Output * > &  operands 
)
static

Removes an idempotent split-merge pair.

o1 = MemoryStateMergeOperation i1 i2 i3 o2 o3 o4 = MemoryStateSplitOperation o1 ... = AnyOperation o2 o3 o4 => ... = AnyOperation i1 i2 i3

Definition at line 270 of file MemoryStateOperations.cpp.

◆ operator==()

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

Definition at line 212 of file MemoryStateOperations.cpp.


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