19 nalternatives_(nalternatives)
32 return type &&
type->nalternatives_ == nalternatives_;
49 std::shared_ptr<const ControlType>
65 throw util::Error(
"Alternatives of a control type must be non-zero.");
67 return std::shared_ptr<const ControlType>(
68 std::shared_ptr<void>(),
78 : alternative_(alternative),
79 nalternatives_(nalternatives)
82 throw util::Error(
"Alternative is bigger than the number of possible alternatives.");
89 value_(std::move(value))
96 return operation && operation->
value_ == value_;
105 std::unique_ptr<Operation>
108 return std::make_unique<ControlConstantOperation>(
value_);
115 const std::unordered_map<uint64_t, uint64_t> & mapping,
116 uint64_t default_alternative,
117 size_t nalternatives)
119 default_alternative_(default_alternative),
128 && op->nbits() == nbits() && op->nalternatives() == nalternatives();
135 if (
auto node = rvsdg::TryGetOwnerNode<SimpleNode>(tracedOutput))
150 auto [_, constantOperation] = TryGetSimpleNodeAndOptionalOp<BitConstantOperation>(tracedOutput);
155 alternative(constantOperation->value().to_uint()));
164 std::string str(
"[");
169 return "MATCH" + str;
172 std::unique_ptr<Operation>
175 return std::make_unique<MatchOperation>(*
this);
181 const std::unordered_map<uint64_t, uint64_t> & mapping,
182 uint64_t default_alternative,
183 size_t nalternatives,
186 return CreateOpNode<MatchOperation>(
ControlValueRepresentation value_
~ControlConstantOperation() noexcept override
std::string debug_string() const override
std::unique_ptr< Operation > copy() const override
bool operator==(const Operation &other) const noexcept override
static Output & create(Region ®ion, ControlValueRepresentation value)
std::string debug_string() const override
std::size_t ComputeHash() const noexcept override
~ControlType() noexcept override
bool operator==(const jlm::rvsdg::Type &other) const noexcept override
size_t nalternatives() const noexcept
TypeKind Kind() const noexcept override
Return the kind of this type.
ControlType(size_t nalternatives)
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
size_t alternative() const noexcept
std::unordered_map< uint64_t, uint64_t > mapping_
unop_reduction_path_t can_reduce_operand(const jlm::rvsdg::Output *arg) const noexcept override
jlm::rvsdg::Output * reduce_operand(unop_reduction_path_t path, jlm::rvsdg::Output *arg) const override
~MatchOperation() noexcept override
uint64_t alternative(uint64_t value) const noexcept
uint64_t nalternatives() const noexcept
bool operator==(const Operation &other) const noexcept override
uint64_t default_alternative_
std::unique_ptr< Operation > copy() const override
std::string debug_string() const override
Nullary operator (operator taking no formal arguments)
rvsdg::Region * region() const noexcept
size_t unop_reduction_path_t
static std::string type(const Node *n)
TypeKind
The kinds of types supported in rvsdg.
@ Value
Designate a value type.
static const unop_reduction_path_t unop_reduction_constant
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 const unop_reduction_path_t unop_reduction_none
Output & traceOutputIntraProcedurally(Output &output)
static std::string strfmt(Args... args)
std::size_t CombineHashes(std::size_t hash, Args... args)