MimIR 0.1
MimIR is my Intermediate Representation
|
A built-in constant of type Nat -> *
.
More...
#include <mim/def.h>
Static Public Member Functions | |
static Ref | size (Ref def) |
Checks if def is a Idx s and returns s or nullptr otherwise. | |
Convert between Idx::size and bitwidth and vice versa | |
static constexpr nat_t | bitwidth2size (nat_t n) |
static constexpr nat_t | size2bitwidth (nat_t n) |
static std::optional< nat_t > | size2bitwidth (const Def *size) |
Static Public Attributes | |
static constexpr auto | Node = Node::Idx |
Private Member Functions | |
Ref | rebuild_ (World &, Ref, Defs) const override |
Friends | |
class | World |
Additional Inherited Members | ||
Public Member Functions inherited from mim::Def | ||
World & | world () const | |
flags_t | flags () const | |
u32 | gid () const | |
hash_t | hash () const | |
node_t | node () const | |
std::string_view | node_name () const | |
const Def * | type () const | |
const Def * | unfold_type () const | |
Yields the type of this Def and builds a new Type (UInc n) if necessary. | ||
bool | is_term () const | |
Yields true if this:T and T:(Type 0) . | ||
Ref | arity () const | |
std::optional< nat_t > | isa_lit_arity () const | |
nat_t | as_lit_arity () const | |
template<size_t N = std::dynamic_extent> | ||
auto | ops () const | |
const Def * | op (size_t i) const | |
size_t | num_ops () const | |
Def * | set (size_t i, const Def *def) | |
Successively set from left to right. | ||
Def * | reset (size_t i, const Def *def) | |
Successively reset from left to right. | ||
Def * | set (Defs ops) | |
Def::set ops all at once. | ||
Def * | reset (Defs ops) | |
Def::reset ops all at once. | ||
Def * | unset () | |
Unsets all Def::ops; works even, if not set at all or partially. | ||
Def * | set_type (const Def *) | |
void | unset_type () | |
void | update () | |
Resolves Infers of this Def's type. | ||
bool | is_set () const | |
Yields true if empty or the last op is set. | ||
Defs | extended_ops () const | |
const Def * | extended_op (size_t i) const | |
size_t | num_extended_ops () const | |
Defs | partial_ops () const | |
const Def * | partial_op (size_t i) const | |
size_t | num_partial_ops () const | |
const Uses & | uses () const | |
size_t | num_uses () const | |
unsigned | dep () const | |
bool | has_dep (Dep d) const | |
bool | has_dep (unsigned u) const | |
bool | dep_const () const | |
nat_t | num_projs () const | |
nat_t | num_tprojs () const | |
As above but yields 1, if Flags::scalarize_threshold is exceeded. | ||
const Def * | proj (nat_t a, nat_t i) const | |
Similar to World::extract while assuming an arity of a , but also works on Sigmas and Arrays. | ||
const Def * | proj (nat_t i) const | |
As above but takes Def::num_projs as arity. | ||
const Def * | tproj (nat_t i) const | |
As above but takes Def::num_tprojs. | ||
template<nat_t A = -1_n, class F > | ||
auto | projs (F f) const | |
Splits this Def via Def::projections into an Array (if A == -1_n ) or std::array (otherwise). | ||
template<class F > | ||
auto | tprojs (F f) const | |
template<class F > | ||
auto | projs (nat_t a, F f) const | |
template<nat_t A = -1_n> | ||
auto | projs () const | |
auto | tprojs () const | |
auto | projs (nat_t a) const | |
nat_t | num_vars () | |
nat_t | num_tvars () | |
Ref | var (nat_t a, nat_t i) | |
Ref | var (nat_t i) | |
Ref | tvar (nat_t i) | |
template<nat_t A = std::dynamic_extent, class F > | ||
auto | vars (F f) | |
template<class F > | ||
auto | tvars (F f) | |
template<nat_t A = std::dynamic_extent> | ||
auto | vars () | |
auto | tvars () | |
template<class F > | ||
auto | vars (nat_t a, F f) | |
auto | vars (nat_t a) | |
Ref | var () | |
Not necessarily a Var: E.g., if the return type is [] , this will yield () . | ||
const Var * | has_var () | |
Only returns not nullptr , if Var of this mutable has ever been created. | ||
const Var * | has_var () const | |
As above if this is a mutable. | ||
Muts | local_muts () const | |
Vars | local_vars () const | |
Vars | free_vars () const | |
Vars | free_vars () | |
bool | is_open () const | |
Has free_vars()? | ||
bool | is_closed () const | |
Has no free_vars()? | ||
Muts | fv_consumers () | |
bool | is_external () const | |
void | make_external () | |
void | make_internal () | |
void | transfer_external (Def *to) | |
template<class T = Def> | ||
const T * | isa_imm () const | |
template<class T = Def> | ||
const T * | as_imm () const | |
template<class T = Def, class R > | ||
const T * | isa_imm (R(T::*f)() const) const | |
template<class T = Def, bool invert = false> | ||
T * | isa_mut () const | |
If this is *mut*able, it will cast const ness away and perform a dynamic_cast to T . | ||
template<class T = Def, bool invert = false> | ||
T * | as_mut () const | |
Asserts that this is a mutable, casts const ness away and performs a static_cast to T . | ||
Dbg | dbg () const | |
Loc | loc () const | |
Sym | sym () const | |
std::string | unique_name () const | |
name + "_" + Def::gid | ||
template<bool Ow = false> | ||
const Def * | set (Loc l) const | |
template<bool Ow = false> | ||
Def * | set (Loc l) | |
template<bool Ow = false> | ||
const Def * | set (Sym s) const | |
template<bool Ow = false> | ||
Def * | set (Sym s) | |
template<bool Ow = false> | ||
const Def * | set (std::string s) const | |
template<bool Ow = false> | ||
Def * | set (std::string s) | |
template<bool Ow = false> | ||
const Def * | set (Loc l, Sym s) const | |
template<bool Ow = false> | ||
Def * | set (Loc l, Sym s) | |
template<bool Ow = false> | ||
const Def * | set (Loc l, std::string s) const | |
template<bool Ow = false> | ||
Def * | set (Loc l, std::string s) | |
template<bool Ow = false> | ||
const Def * | set (Dbg d) const | |
template<bool Ow = false> | ||
Def * | set (Dbg d) | |
const Def * | debug_prefix (std::string) const | |
const Def * | debug_suffix (std::string) const | |
Def * | stub (World &w, Ref type) | |
Def * | stub (Ref type) | |
Ref | rebuild (World &w, Ref type, Defs ops) const | |
Def::rebuilds this Def while using new_op as substitute for its i'th Def::op. | ||
Ref | rebuild (Ref type, Defs ops) const | |
virtual const Def * | immutabilize () | |
Tries to make an immutable from a mutable. | ||
const Def * | refine (size_t i, const Def *new_op) const | |
DefVec | reduce (const Def *arg) const | |
Rewrites Def::ops by substituting this mutable's Var with arg . | ||
DefVec | reduce (const Def *arg) | |
virtual void | check () | |
void | dump () const | |
void | dump (int max) const | |
void | write (int max) const | |
void | write (int max, const char *file) const | |
std::ostream & | stream (std::ostream &, int max) const | |
void | dot (std::ostream &os, uint32_t max=0xFFFFFF, bool types=false) const | |
void | dot (const char *file=nullptr, uint32_t max=0xFFFFFF, bool types=false) const | |
Same as above but write to file or std::cout if file is nullptr . | ||
void | dot (const std::string &file, uint32_t max=0xFFFFFF, bool types=false) const | |
Public Member Functions inherited from mim::Setters< Idx > | ||
const Idx * | set (Loc l) const | |
Idx * | set (Loc l) | |
const Idx * | set (Sym s) const | |
Idx * | set (Sym s) | |
const Idx * | set (std::string s) const | |
Idx * | set (std::string s) | |
const Idx * | set (Loc l, Sym s) const | |
Idx * | set (Loc l, Sym s) | |
const Idx * | set (Loc l, std::string s) const | |
Idx * | set (Loc l, std::string s) | |
const Idx * | set (Dbg d) const | |
Idx * | set (Dbg d) | |
Protected Member Functions inherited from mim::Def | ||
Def (World *, node_t, const Def *type, Defs ops, flags_t flags) | ||
Constructor for an immutable Def. | ||
Def (node_t n, const Def *type, Defs ops, flags_t flags) | ||
As above but World retrieved from type . | ||
Def (node_t, const Def *type, size_t num_ops, flags_t flags) | ||
Constructor for a mutable Def. | ||
virtual | ~Def ()=default | |
Sym | sym (const char *) const | |
Sym | sym (std::string_view) const | |
Sym | sym (std::string) const | |
Protected Attributes inherited from mim::Def | ||
Dbg | dbg_ | |
union { | ||
NormalizeFn | normalizer_ | |
Axiom only: Axioms use this member to store their normalizer. | ||
const Axiom * | axiom_ | |
App only: Curried Apps of Axioms use this member to propagate the Axiom. | ||
const Var * | var_ | |
Mutable only: Var of a mutable. | ||
World * | world_ | |
}; | ||
flags_t | flags_ | |
u8 | curry_ | |
u8 | trip_ | |
Definition at line 807 of file def.h.
Referenced by mim::World::lit_i1(), mim::World::lit_i16(), mim::World::lit_i32(), mim::World::lit_i64(), mim::World::lit_i8(), mim::World::lit_idx(), mim::World::lit_int(), and mim::World::type_int().
Checks if def
is a Idx s
and returns s
or nullptr
otherwise.
Definition at line 556 of file def.cpp.
Referenced by mim::plug::autodiff::autodiff_type_fun(), mim::ll::Emitter::emit_bb(), mim::World::extract(), mim::World::iinfer(), mim::World::insert(), mim::World::lit(), mim::plug::autodiff::normalize_add(), mim::plug::core::normalize_bitcast(), mim::plug::core::normalize_idx(), mim::plug::core::normalize_shr(), mim::plug::core::normalize_trait(), mim::plug::core::normalize_wrap(), size2bitwidth(), mim::World::var(), and mim::plug::autodiff::zero_def().
Definition at line 564 of file def.cpp.
References mim::Lit::isa(), size(), and size2bitwidth().
Definition at line 808 of file def.h.
Referenced by mim::ll::Emitter::emit_bb(), mim::plug::core::normalize_conv(), mim::plug::math::normalize_conv(), mim::plug::core::normalize_trait(), and size2bitwidth().