34 void check()
override;
98 void check()
override;
A (possibly paramterized) Array.
const Def * immutabilize() override
Tries to make an immutable from a mutable.
static constexpr auto Node
Ref rebuild_(World &, Ref, Defs) const override
Arr * set_body(const Def *body)
Arr * stub_(World &, Ref) override
Arr * set_shape(const Def *shape)
const Def * shape() const
const Def * reduce(const Def *arg) const
Def * set(size_t i, const Def *def)
Successively set from left to right.
const Def * op(size_t i) const
Def * unset()
Unsets all Def::ops; works even, if not set at all or partially.
Creates a new Tuple / Pack by inserting Insert::value at position Insert::index into Insert::tuple.
static constexpr auto Node
const Def * tuple() const
const Def * index() const
Ref rebuild_(World &, Ref, Defs) const override
const Def * value() const
A (possibly paramterized) Tuple.
Pack * reset(const Def *body)
Pack * stub_(World &, Ref) override
const Def * shape() const
Ref rebuild_(World &, Ref, Defs) const override
const Def * reduce(const Def *arg) const
const Def * immutabilize() override
Tries to make an immutable from a mutable.
static constexpr auto Node
Pack * set(const Def *body)
Helper class to retrieve Infer::arg if present.
CRTP-based Mixin to declare setters for Def::loc & Def::name using a covariant return type.
const Def * immutabilize() override
Tries to make an immutable from a mutable.
static Ref infer(World &, Defs)
Ref rebuild_(World &, Ref, Defs) const override
Sigma * stub_(World &, Ref) override
static constexpr auto Node
Sigma * set(size_t i, const Def *def)
This is a thin wrapper for std::span<T, N> with the following additional features:
Data constructor for a Sigma.
Ref rebuild_(World &, Ref, Defs) const override
static constexpr auto Node
The World represents the whole program and manages creation of MimIR nodes (Defs).
const Def * flatten(const Def *def)
Flattens a sigma/array/pack/tuple.
bool is_unit(const Def *)
const Def * merge_sigma(const Def *def, Defs defs)
std::string tuple2str(const Def *)
const Def * unflatten(const Def *def, const Def *type)
Applies the reverse transformation on a Pack / Tuple, given the original type.
Ref tuple_of_types(Ref t)
const Def * merge_tuple(const Def *def, Defs defs)