43 static constexpr size_t Num_Ops = std::dynamic_extent;
53class Merge :
public Def,
public Setters<Merge> {
57 static constexpr size_t Num_Ops = std::dynamic_extent;
70class Inj :
public Def,
public Setters<Inj> {
80 const Def*
value()
const {
return op(0); }
93class Split :
public Def,
public Setters<Split> {
116class Match :
public Def,
public Setters<Match> {
124 static constexpr size_t Num_Ops = std::dynamic_extent;
129 template<
size_t N = std::dynamic_extent>
130 constexpr auto arms() const noexcept {
131 return ops().subspan<1, N>();
133 const Def*
arm(
size_t i)
const {
return arms()[i]; }
180class Uniq :
public Def,
public Setters<Uniq> {
182 Uniq(
const Def*
type,
const Def* inner_type)
183 : Def(
Node,
type, {inner_type}, 0) {}
Bound(Node node, const Def *type, Defs ops)
size_t find(const Def *type) const
const Def * get(const Def *type) const
constexpr size_t reduction_offset() const noexcept final
First Def::op that needs to be dealt with during reduction; e.g.
constexpr Node node() const noexcept
Def * set(size_t i, const Def *)
Successively set from left to right.
constexpr auto ops() const noexcept
const Def * op(size_t i) const noexcept
const Def * type() const noexcept
Yields the "raw" type of this Def (maybe nullptr).
Ext(Node node, const Def *type)
static constexpr auto Node
const Def * value() const
static constexpr size_t Num_Ops
const Def * rebuild_(World &, const Def *, Defs) const final
const Def * scrutinee() const
static constexpr size_t Num_Ops
static constexpr auto Node
const Def * arm(size_t i) const
const Def * rebuild_(World &, const Def *, Defs) const final
constexpr auto arms() const noexcept
static constexpr size_t Num_Ops
static constexpr auto Node
const Def * rebuild_(World &, const Def *, Defs) const final
CRTP-based mixin to declare setters for Def::loc & Def::name using a covariant return type.
const TBound< Up > * set(Loc l) const
static constexpr auto Node
const Def * value() const
static constexpr size_t Num_Ops
const Def * rebuild_(World &, const Def *, Defs) const final
Specific Bound depending on Up.
static constexpr size_t Num_Ops
const Def * rebuild_(World &, const Def *, Defs) const final
static constexpr auto Node
Extremum. Either Top (Up) or Bottom.
const Def * rebuild_(World &, const Def *, Defs) const final
static constexpr auto Node
static constexpr size_t Num_Ops
static constexpr size_t Num_Ops
static constexpr auto Node
const Def * rebuild_(World &, const Def *, Defs) const final
The World represents the whole program and manages creation of MimIR nodes (Defs).
TBound< true > Join
AKA union.
TBound< false > Meet
AKA intersection.