31template<
bool Up>
class TBound :
public Bound,
public Setters<TBound<Up>> {
35 TBound(
const Def*
type,
size_t size)
54class Ac :
public Def,
public Setters<Ac> {
70class Vel :
public Def,
public Setters<Vel> {
80 const Def*
value()
const {
return op(0); }
92class Pick :
public Def,
public Setters<Pick> {
125class Test :
public Def,
public Setters<Test> {
156template<
bool Up>
class TExt :
public Ext,
public Setters<TExt<Up>> {
186class Uniq :
public Def,
public Setters<Uniq> {
188 Uniq(
const Def*
type,
const Def* inner_type)
189 : Def(
Node,
type, {inner_type}, 0) {}
const Def * rebuild_(World &, const Def *, Defs) const override
static constexpr auto Node
Bound(Node node, const Def *type, Defs ops)
Constructor for an immutable Bound.
size_t find(const Def *type) const
Bound(Node node, const Def *type, size_t size)
Constructor for a mutable Bound.
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.
World & world() const noexcept
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)
const Def * rebuild_(World &, const Def *, Defs) const override
static constexpr auto Node
const Def * value() const
CRTP-based Mixin to declare setters for Def::loc & Def::name using a covariant return type.
const TBound< Up > * set(Loc l) const
Specific Bound depending on Up.
TBound * stub(const Def *type)
TBound * stub_(World &, const Def *) override
const Def * rebuild_(World &, const Def *, Defs) const override
static constexpr auto Node
Extremum. Either Top (Up) or Bottom.
static constexpr auto Node
TExt * stub(const Def *type)
const Def * rebuild_(World &, const Def *, Defs) const override
TExt * stub_(World &, const Def *) override
const Def * clash() const
const Def * probe() const
const Def * rebuild_(World &, const Def *, Defs) const override
const Def * match() const
const Def * value() const
static constexpr auto Node
const Def * inhabitant() const
static constexpr auto Node
const Def * rebuild_(World &, const Def *, Defs) const override
static constexpr auto Node
const Def * value() const
const Def * rebuild_(World &, const Def *, Defs) const override
The World represents the whole program and manages creation of MimIR nodes (Defs).