44 static constexpr size_t Num_Ops = std::dynamic_extent;
52class Merge :
public Def,
public Setters<Merge> {
56 static constexpr size_t Num_Ops = std::dynamic_extent;
67class Inj :
public Def,
public Setters<Inj> {
77 const Def*
value()
const {
return op(0); }
88class Split :
public Def,
public Setters<Split> {
98 const Def*
value()
const {
return op(0); }
109class Match :
public Def,
public Setters<Match> {
117 static constexpr size_t Num_Ops = std::dynamic_extent;
122 template<
size_t N = std::dynamic_extent>
123 constexpr auto arms() const noexcept {
124 return ops().subspan<1, N>();
126 const Def*
arm(
size_t i)
const {
return arms()[i]; }
173class Uniq :
public Def,
public Setters<Uniq> {
175 Uniq(
const Def*
type,
const Def* inner_type)
176 : Def(
Node,
type, {inner_type}, 0) {}
Bound(Node node, const Def *type, Defs ops)
size_t find(const Def *type) const
static constexpr bool isa_node(mim::Node n) noexcept
Bound groups Join and Meet; see fe::NodeSetable.
const Def * get(const Def *type) const
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 bool isa_node(mim::Node n) noexcept
Ext groups Top and Bot; see fe::NodeSetable.
static constexpr auto Node
const Def * value() const
static constexpr size_t Num_Ops
const Def * scrutinee() const
static constexpr size_t Num_Ops
static constexpr auto Node
const Def * arm(size_t i) const
constexpr auto arms() const noexcept
static constexpr size_t Num_Ops
static constexpr auto Node
CRTP-based mixin to declare setters for Def::loc & Def::name using a covariant return type.
const TBound< Up > * set(Args &&... args) const
static constexpr auto Node
const Def * value() const
static constexpr size_t Num_Ops
Specific Bound depending on Up.
static constexpr size_t Num_Ops
static constexpr auto Node
Extremum. Either Top (Up) or Bottom.
static constexpr auto Node
static constexpr size_t Num_Ops
static constexpr size_t Num_Ops
static constexpr auto Node
fe::View< const Def * > Defs
TBound< true > Join
AKA union.
TBound< false > Meet
AKA intersection.