16 std::shared_ptr<const jlm::rvsdg::FunctionType> type,
21 : rvsdg::LambdaOperation(std::move(type)),
22 name_(std::move(name)),
24 callingConvention_(callingConvention),
25 attributes_(std::move(attributes))
40 return op && op->
type() == type() && op->name() == name() && op->linkage() == linkage()
41 && op->callingConvention() == callingConvention() && op->attributes() == attributes();
44 std::unique_ptr<rvsdg::Operation>
47 return std::make_unique<LlvmLambdaOperation>(*
this);
53 JLM_ASSERT(index < ArgumentAttributes_.size());
54 return ArgumentAttributes_[index];
69 JLM_ASSERT(rvsdg::is<LlvmLambdaOperation>(&lambdaNode));
70 const auto functionArguments = lambdaNode.GetFunctionArguments();
71 const auto ioStateArgument = functionArguments[functionArguments.size() - 2];
72 JLM_ASSERT(rvsdg::is<IOStateType>(ioStateArgument->Type()));
73 return *ioStateArgument;
std::unique_ptr< Operation > copy() const override
std::vector< jlm::llvm::AttributeSet > ArgumentAttributes_
static rvsdg::Output & getIOStateArgument(const rvsdg::LambdaNode &lambdaNode) noexcept
~LlvmLambdaOperation() override
std::string debug_string() const override
void SetArgumentAttributes(std::size_t index, const jlm::llvm::AttributeSet &attributes)
bool operator==(const Operation &other) const noexcept override
const std::string & name() const noexcept
LlvmLambdaOperation(std::shared_ptr< const jlm::rvsdg::FunctionType > type, std::string name, const jlm::llvm::Linkage &linkage, jlm::llvm::CallingConvention callingConvention_, jlm::llvm::AttributeSet attributes)
const jlm::llvm::AttributeSet & GetArgumentAttributes(std::size_t index) const noexcept
const jlm::llvm::AttributeSet & attributes() const noexcept
const FunctionType & type() const noexcept
const std::shared_ptr< const FunctionType > & Type() const noexcept
Global memory state passed between functions.
static std::string strfmt(Args... args)