7 #ifndef JLM_RVSDG_CONTROL_HPP
8 #define JLM_RVSDG_CONTROL_HPP
17 #include <unordered_map>
29 [[nodiscard]] std::
string
33 operator==(const
jlm::rvsdg::
Type & other) const noexcept override;
39 Kind() const noexcept override;
58 static std::shared_ptr<const ControlType>
79 return !(*
this == other);
107 operator==(const
Operation & other) const noexcept override;
113 copy() const override;
124 return *CreateOpNode<ControlConstantOperation>(region, std::move(
value)).output(0);
130 return create(region, { alternative, numAlternatives });
136 return create(region, 2, 0);
142 return create(region, 2, 1);
166 const std::unordered_map<uint64_t, uint64_t> & mapping,
171 operator==(const
Operation & other) const noexcept override;
179 [[nodiscard]] std::
string
183 copy() const override;
188 return std::static_pointer_cast<const ControlType>(
result(0))->nalternatives();
210 return std::static_pointer_cast<const BitType>(
argument(0))->nbits();
228 const std::unordered_map<uint64_t, uint64_t> & mapping,
229 const uint64_t defaultAlternative,
230 const size_t numAlternatives)
233 return CreateOpNode<MatchOperation>(
244 const std::unordered_map<uint64_t, uint64_t> & mapping,
245 const uint64_t defaultAlternative,
246 const size_t numAlternatives)
248 return CreateNode(predicate, mapping, defaultAlternative, numAlternatives).
output(0);
255 if (
auto bitType =
dynamic_cast<const BitType *
>(&
type))
270 const std::unordered_map<uint64_t, uint64_t> & mapping,
271 uint64_t default_alternative,
272 size_t nalternatives,
ControlValueRepresentation value_
~ControlConstantOperation() noexcept override
std::string debug_string() const override
std::unique_ptr< Operation > copy() const override
static Output & createTrue(Region ®ion)
static Output & create(Region ®ion, size_t numAlternatives, size_t alternative)
const ControlValueRepresentation & value() const noexcept
static Output & create(Region ®ion, ControlValueRepresentation value)
static Output & createFalse(Region ®ion)
std::string debug_string() const override
std::size_t ComputeHash() const noexcept override
~ControlType() noexcept override
size_t nalternatives() const noexcept
TypeKind Kind() const noexcept override
Return the kind of this type.
static std::shared_ptr< const ControlType > Create(std::size_t nalternatives)
Instantiates control type.
ControlValueRepresentation(size_t alternative, size_t nalternatives)
size_t nalternatives() const noexcept
bool operator!=(const ControlValueRepresentation &other) const noexcept
bool operator==(const ControlValueRepresentation &other) const noexcept
size_t alternative() const noexcept
static const BitType & CheckAndExtractBitType(const rvsdg::Type &type)
std::unordered_map< uint64_t, uint64_t > mapping_
unop_reduction_path_t can_reduce_operand(const jlm::rvsdg::Output *arg) const noexcept override
std::unordered_map< uint64_t, uint64_t >::const_iterator const_iterator
jlm::rvsdg::Output * reduce_operand(unop_reduction_path_t path, jlm::rvsdg::Output *arg) const override
const_iterator end() const
~MatchOperation() noexcept override
uint64_t alternative(uint64_t value) const noexcept
uint64_t nalternatives() const noexcept
static Output * Create(Output &predicate, const std::unordered_map< uint64_t, uint64_t > &mapping, const uint64_t defaultAlternative, const size_t numAlternatives)
static Node & CreateNode(Output &predicate, const std::unordered_map< uint64_t, uint64_t > &mapping, const uint64_t defaultAlternative, const size_t numAlternatives)
uint64_t default_alternative_
const_iterator begin() const
size_t nbits() const noexcept
uint64_t default_alternative() const noexcept
std::unique_ptr< Operation > copy() const override
std::string debug_string() const override
NodeOutput * output(size_t index) const noexcept
Nullary operator (operator taking no formal arguments)
const std::shared_ptr< const rvsdg::Type > & Type() const noexcept
Represent acyclic RVSDG subgraphs.
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
size_t unop_reduction_path_t
static std::string type(const Node *n)
TypeKind
The kinds of types supported in rvsdg.
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)