7 #ifndef JLM_RVSDG_OPERATION_HPP
8 #define JLM_RVSDG_OPERATION_HPP
30 operator==(const
Operation & other) const noexcept = 0;
35 [[nodiscard]] virtual std::unique_ptr<
Operation>
41 return !(*
this == other);
50 std::is_base_of<Operation, T>::value,
51 "Template parameter T must be derived from jlm::rvsdg::operation.");
53 return dynamic_cast<const T *
>(&operation) !=
nullptr;
63 std::vector<std::shared_ptr<const
jlm::rvsdg::
Type>> results)
71 [[nodiscard]] const std::shared_ptr<const rvsdg::
Type> &
72 argument(
size_t index) const noexcept;
77 [[nodiscard]] const std::shared_ptr<const rvsdg::
Type> &
78 result(
size_t index) const noexcept;
virtual ~Operation() noexcept
virtual bool operator==(const Operation &other) const noexcept=0
virtual std::string debug_string() const =0
virtual std::unique_ptr< Operation > copy() const =0
const std::shared_ptr< const rvsdg::Type > & argument(size_t index) const noexcept
const std::shared_ptr< const rvsdg::Type > & result(size_t index) const noexcept
std::vector< std::shared_ptr< const rvsdg::Type > > operands_
size_t nresults() const noexcept
std::vector< std::shared_ptr< const rvsdg::Type > > results_
~SimpleOperation() noexcept override
size_t narguments() const noexcept
static bool is(const jlm::rvsdg::Input &input) noexcept
static std::vector< jlm::rvsdg::Output * > operands(const Node *node)