7 #ifndef JLM_RVSDG_LAMBDA_HPP
8 #define JLM_RVSDG_LAMBDA_HPP
41 [[nodiscard]]
const std::shared_ptr<const FunctionType> &
47 [[nodiscard]] std::string
53 [[nodiscard]] std::unique_ptr<Operation>
54 copy()
const override;
57 std::shared_ptr<const FunctionType>
type_;
131 [[nodiscard]] std::vector<rvsdg::Output *>
134 [[nodiscard]] std::vector<rvsdg::Input *>
178 [[nodiscard]] ContextVar
198 [[nodiscard]] std::optional<ContextVar>
209 [[nodiscard]] std::vector<ContextVar>
221 std::variant<ArgumentVar, ContextVar>
305 argumentIndices.
insert(argument->index());
312 [[maybe_unused]]
const auto numRemovedInputs =
RemoveInputs(inputIndices);
315 return numRemovedInputs;
343 std::vector<Output *>
357 GetRegion() noexcept;
390 Finalize(
const std::vector<jlm::rvsdg::Output *> & results, std::unique_ptr<LambdaOperation> op);
Constructs a lambda node.
LambdaNode * copy(rvsdg::Region *region, const std::vector< jlm::rvsdg::Output * > &operands) const override
rvsdg::Output * finalize(const std::vector< jlm::rvsdg::Output * > &results)
std::variant< ArgumentVar, ContextVar > MapArgument(const rvsdg::Output &output) const
Maps region argument to its disposition (formal argument or context var).
size_t RemoveLambdaInputsWhere(const F &match)
std::vector< rvsdg::Output * > GetFunctionArguments() const
rvsdg::Region * subregion() const noexcept
ContextVar MapInputContextVar(const rvsdg::Input &input) const noexcept
Maps input to context variable.
friend class LambdaBuilder
std::optional< ContextVar > MapBinderContextVar(const rvsdg::Output &output) const noexcept
Maps bound variable reference to context variable.
ContextVar AddContextVar(jlm::rvsdg::Output &origin)
Adds a context/free variable to the lambda node.
LambdaNode(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > op)
size_t PruneLambdaInputs()
std::unique_ptr< LambdaOperation > Operation_
static LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
std::vector< rvsdg::Input * > GetFunctionResults() const
rvsdg::Output * output() const noexcept
std::vector< ContextVar > GetContextVars() const noexcept
Gets all bound context variables.
LambdaOperation & GetOperation() const noexcept override
LambdaOperation(std::shared_ptr< const FunctionType > type)
bool operator==(const Operation &other) const noexcept override
const FunctionType & type() const noexcept
const std::shared_ptr< const FunctionType > & Type() const noexcept
std::unique_ptr< Operation > copy() const override
std::shared_ptr< const FunctionType > type_
~LambdaOperation() override
std::string debug_string() const override
rvsdg::Region * region() const noexcept
size_t RemoveInputs(const util::HashSet< size_t > &indices)
Represent acyclic RVSDG subgraphs.
size_t RemoveArguments(const util::HashSet< size_t > &indices)
StructuralInput * input(size_t index) const noexcept
rvsdg::Region * subregion(size_t index) const noexcept
bool insert(ItemType item)
std::size_t Size() const noexcept
jlm::rvsdg::Output * match(size_t nbits, const std::unordered_map< uint64_t, uint64_t > &mapping, uint64_t default_alternative, size_t nalternatives, jlm::rvsdg::Output *operand)
static std::vector< jlm::rvsdg::Output * > operands(const Node *node)
rvsdg::LambdaNode & getSurroundingLambdaNode(rvsdg::Node &node)
Formal argument variable.
rvsdg::Output * arg
Access argument object in subregion.
rvsdg::Input * input
Input variable bound into lambda node.
rvsdg::Output * inner
Access to bound object in subregion.