6 #ifndef JLM_LLVM_IR_OPERATORS_ALLOCA_HPP
7 #define JLM_LLVM_IR_OPERATORS_ALLOCA_HPP
24 std::shared_ptr<const rvsdg::BitType>
countType,
38 operator==(
const Operation & other)
const noexcept
override;
40 [[nodiscard]] std::string
43 [[nodiscard]] std::unique_ptr<Operation>
44 copy()
const override;
51 return *std::static_pointer_cast<const rvsdg::BitType>(type);
54 [[nodiscard]]
const std::shared_ptr<const rvsdg::Type> &
70 return *node.
input(0);
87 static std::unique_ptr<ThreeAddressCode>
116 return rvsdg::CreateOpNode<AllocaOperation>(
130 static std::vector<rvsdg::Output *>
140 static std::shared_ptr<const rvsdg::BitType>
143 if (
auto bitType = std::dynamic_pointer_cast<const rvsdg::BitType>(
countType))
static rvsdg::Input & getCountInput(rvsdg::Node &node)
AllocaOperation(AllocaOperation &&other) noexcept=default
std::shared_ptr< const rvsdg::Type > allocatedType_
static std::unique_ptr< ThreeAddressCode > createTac(std::shared_ptr< const rvsdg::Type > allocatedType, const Variable *count, size_t alignment)
bool operator==(const Operation &other) const noexcept override
const rvsdg::BitType & countType() const noexcept
std::string debug_string() const override
static std::shared_ptr< const rvsdg::BitType > checkOperandType(const std::shared_ptr< const rvsdg::Type > &countType)
~AllocaOperation() noexcept override
static rvsdg::SimpleNode & createNode(std::shared_ptr< const rvsdg::Type > allocatedType, rvsdg::Output &count, const size_t alignment)
static rvsdg::Output & getMemoryStateOutput(rvsdg::Node &node)
size_t alignment() const noexcept
static std::vector< rvsdg::Output * > create(std::shared_ptr< const rvsdg::Type > allocatedType, rvsdg::Output *count, const size_t alignment)
static rvsdg::Output & getPointerOutput(rvsdg::Node &node)
AllocaOperation(const AllocaOperation &other)=default
const std::shared_ptr< const rvsdg::Type > & allocatedType() const noexcept
std::unique_ptr< Operation > copy() const override
static std::shared_ptr< const MemoryStateType > Create()
static std::shared_ptr< const PointerType > Create()
static std::unique_ptr< llvm::ThreeAddressCode > create(std::unique_ptr< rvsdg::SimpleOperation > operation, const std::vector< const Variable * > &operands)
const std::shared_ptr< const jlm::rvsdg::Type > Type() const noexcept
NodeInput * input(size_t index) const noexcept
NodeOutput * output(size_t index) const noexcept
const std::shared_ptr< const rvsdg::Type > & Type() const noexcept
const std::shared_ptr< const rvsdg::Type > & argument(size_t index) const noexcept
SimpleOperation(std::vector< std::shared_ptr< const jlm::rvsdg::Type >> operands, std::vector< std::shared_ptr< const jlm::rvsdg::Type >> results)
Global memory state passed between functions.
static std::vector< jlm::rvsdg::Output * > outputs(const Node *node)