|
Jlm
|
#include <Store.hpp>


Public Member Functions | |
| ~StoreNonVolatileOperation () noexcept override | |
| StoreNonVolatileOperation (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::Type & | GetStoredType () 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 std::optional< std::vector< rvsdg::Output * > > | NormalizeStoreMux (const StoreNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands) |
| Swaps a memory state merge operation and a store operation. More... | |
| static std::optional< std::vector< rvsdg::Output * > > | NormalizeStoreStore (const StoreNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands) |
| Removes a duplicated store to the same address. More... | |
| static std::optional< std::vector< rvsdg::Output * > > | NormalizeStoreAlloca (const StoreNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands) |
| Removes unnecessary state from a store node when its address originates directly from an alloca node. More... | |
| static std::optional< std::vector< rvsdg::Output * > > | NormalizeDuplicateStates (const StoreNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands) |
| Remove duplicated state operands. More... | |
| static std::optional< std::vector< rvsdg::Output * > > | NormalizeIOBarrierAllocaAddress (const StoreNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands) |
| Redirect the address operand of the StoreNonVolatileOperation from an IOBarrierOperation when it can be determined that it originates from an AllocaOperation. More... | |
| static std::optional< std::vector< rvsdg::Output * > > | normalizeStoreAllocaSingleUser (const StoreNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands) |
| static std::unique_ptr< llvm::ThreeAddressCode > | Create (const Variable *address, const Variable *value, const Variable *state, size_t alignment) |
| static std::vector< rvsdg::Output * > | Create (rvsdg::Output *address, rvsdg::Output *value, const std::vector< rvsdg::Output * > &memoryStates, size_t alignment) |
| static rvsdg::SimpleNode & | CreateNode (rvsdg::Output &address, rvsdg::Output &value, const std::vector< rvsdg::Output * > &memoryStates, size_t alignment) |
| static std::vector< rvsdg::Output * > | Create (rvsdg::Region ®ion, std::unique_ptr< StoreNonVolatileOperation > storeOperation, const std::vector< rvsdg::Output * > &operands) |
| static rvsdg::SimpleNode & | CreateNode (rvsdg::Region ®ion, std::unique_ptr< StoreNonVolatileOperation > storeOperation, const std::vector< rvsdg::Output * > &operands) |
Static Public Member Functions inherited from jlm::llvm::StoreOperation | |
| static rvsdg::Input & | AddressInput (const rvsdg::Node &node) noexcept |
| static rvsdg::Input & | StoredValueInput (const rvsdg::Node &node) noexcept |
| static rvsdg::Node::OutputIteratorRange | MemoryStateOutputs (const rvsdg::SimpleNode &node) noexcept |
| static rvsdg::Input & | MapMemoryStateOutputToInput (const rvsdg::Output &output) |
Static Private Member Functions | |
| static const std::shared_ptr< const jlm::rvsdg::Type > | CheckAndExtractStoredType (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) |
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) | |
Represents an LLVM store instruction.
|
overridedefaultnoexcept |
|
inline |
|
inlinestaticprivate |
|
overridevirtual |
Implements jlm::rvsdg::Operation.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestaticprivate |
|
overridevirtual |
Implements jlm::rvsdg::Operation.
|
static |
Remove duplicated state operands.
so1 so2 so3 = StoreNonVolatileOperation a v si1 si1 si1 => so1 = StoreNonVolatileOperation a v si1
| operation | The StoreNonVolatileOperation on which the transformation is performed. |
| operands | The operands of the StoreNonVolatileOperation node. |
|
static |
Redirect the address operand of the StoreNonVolatileOperation from an IOBarrierOperation when it can be determined that it originates from an AllocaOperation.
a1 memState = AllocaOperation ... a2 = IOBarrierOperation a1 ioState ... = StoreNonVolatileOperation a2 ... => a1 memState = AllocaOperation ... a2 = IOBarrierOperation a1 ioState ... = StoreNonVolatileOperation a1 ...
| operation | The StoreNonVolatileOperation on which the transformation is performed. |
| operands | The operands of the StoreNonVolatileOperation node. |
|
static |
Removes unnecessary state from a store node when its address originates directly from an alloca node.
a s = AllocaOperation b so1 so2 = StoreNonVolatileOperation a v s si1 si2 ... = AnyOperation so1 so2 => a s = AllocaOperation b so1 = StoreNonVolatileOperation a v s ... = AnyOp so1 so1
| operation | The operation of the StoreNonVolatile node. |
| operands | The operands of the StoreNonVolatile node. |
|
static |
Redirect the users of the StoreNonVolatileOperation results to its memory state operands if it can be shown that the StoreNonVolatileOperation is the only user of an AllocaOperation.
a s1 = AllocaOperation ... s2 = StoreNonVolatileOperation a v s1 ... = AnyOperation s2 => a s1 = AllocaOperation ... ... = AnyOperation s1
|
static |
Swaps a memory state merge operation and a store operation.
sx1 = MemStateMergeOperation si1 ... siM sl1 = StoreNonVolatileOperation a v sx1 => sl1 ... slM = StoreNonVolatileOperation a v si1 ... siM sx1 = MemStateMergeOperation sl1 ... slM
FIXME: The reduction can be generalized: A store node can have multiple operands from different merge nodes.
| operation | The operation of the StoreNonVolatile node. |
| operands | The operands of the StoreNonVolatile node. |
|
static |
Removes a duplicated store to the same address.
so1 so2 = StoreNonVolatileOperation a v1 si1 si2 sx1 sx2 = StoreNonVolatileOperation a v2 so1 so2 => sx1 sx2 = StoreNonVolatileOperation a v2 si1 si2
| operation | The operation of the StoreNonVolatile node. |
| operands | The operands of the StoreNonVolatile node. |
|
overridenoexcept |