Thorin 1.9.0
The Higher ORder INtermediate representation
Loading...
Searching...
No Matches
thorin::Def Class Referenceabstract

Base class for all Defs. More...

#include <thorin/def.h>

Inheritance diagram for thorin::Def:
[legend]

Public Member Functions

Getters
Worldworld () const
 
flags_t flags () const
 
u32 gid () const
 
hash_t hash () const
 
node_t node () const
 
std::string_view node_name () const
 
type
const Deftype () const
 Yields the raw type of this Def, i.e. maybe nullptr. More...
 
const Defunfold_type () const
 Yields the type of this Def and builds a new .Type (UInc n) if necessary. More...
 
bool is_term () const
 Yields true if this:T and T:(.Type 0). More...
 
arity
Ref arity () const
 
std::optional< nat_tisa_lit_arity () const
 
nat_t as_lit_arity () const
 
ops
template<size_t N = -1_s>
auto ops () const
 
const Defop (size_t i) const
 
size_t num_ops () const
 
Setting Ops (Mutables Only)

You can set and change the Def::ops of a mutable after construction.

However, you have to obey the following rules:

  1. If Def::is_set() is ...
    1. ... false, set the operands from
      • left (i == 0) to
      • right (i == num_ops() - 1).
    2. ... true, reset the operands from left to right as in 1a.
  2. In addition, you can invoke Def::unset() at any time to start over with 1a:
    mut->unset()->set({a, b, c}); // This will always work, but should be your last resort.

Thorin assumes that a mutable is final, when its last operand is set. Then, Def::check() will be invoked.

Defset (size_t i, const Def *def)
 Successively set from left to right. More...
 
Defreset (size_t i, const Def *def)
 Successively reset from left to right. More...
 
Defset (Defs ops)
 Def::set ops all at once. More...
 
Defreset (Defs ops)
 Def::reset ops all at once. More...
 
Defunset ()
 Unsets all Def::ops; works even, if not set at all or partially. More...
 
Defset_type (const Def *)
 
void unset_type ()
 
void update ()
 Resolves Infers of this Def's type. More...
 
bool is_set () const
 Yields true if empty or the last op is set. More...
 
extended_ops

Includes Def::type() (if not nullptr) and then the other Def::ops() in this order.

Def::ops() is only included, if Def::is_set.

Defs extended_ops () const
 
const Defextended_op (size_t i) const
 
size_t num_extended_ops () const
 
partial_ops

Includes Def::type() and then the other Def::ops() in this order.

Also works with partially set Defs and doesn't assert. Unset operands are nullptr.

Defs partial_ops () const
 
const Defpartial_op (size_t i) const
 
size_t num_partial_ops () const
 
uses
const Usesuses () const
 
size_t num_uses () const
 
dep
See also
Dep.
unsigned dep () const
 
bool has_dep (Dep d) const
 
bool has_dep (unsigned u) const
 
bool dep_const () const
 
proj

Splits this Def via Extracts or directly accessing the Def::ops in the case of Sigmas or Arrays.

std::array<const Def*, 2> ab = def->projs<2>();
std::array<u64, 2> xy = def->projs<2>([](auto def) { return Lit::as(def); });
auto [a, b] = def->projs<2>();
auto [x, y] = def->projs<2>([](auto def) { return Lit::as(def); });
Array<const Def*> projs1 = def->projs(); // "projs1" has def->num_projs() many elements
Array<const Def*> projs2 = def->projs(n);// "projs2" has n elements - asserts if incorrect
// same as above but applies Lit::as<nat_t>(def) to each element
Array<const Lit*> lits1 = def->projs( [](auto def) { return Lit::as(def); });
Array<const Lit*> lits2 = def->projs(n, [](auto def) { return Lit::as(def); });
T * as()
static_cast with debug check.
Definition: cast.h:23
nat_t num_projs () const
 Yields Def::as_lit_arity(), if it is in fact a Lit, or 1 otherwise. More...
 
nat_t num_tprojs () const
 As above but yields 1, if Flags::scalerize_threshold is exceeded. More...
 
const Defproj (nat_t a, nat_t i) const
 Similar to World::extract while assuming an arity of a, but also works on Sigmas and Arrays. More...
 
const Defproj (nat_t i) const
 As above but takes Def::num_projs as arity. More...
 
const Deftproj (nat_t i) const
 As above but takes Def::num_tprojs. More...
 
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). More...
 
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
 
var

Retrieve Var for mutables.

See also
proj
Ref var ()
 
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 = -1_s, class F >
auto vars (F f)
 
template<class F >
auto tvars (F f)
 
template<nat_t A = -1_s>
auto vars ()
 
auto tvars ()
 
template<class F >
auto vars (nat_t a, F f)
 
auto vars (nat_t a)
 
external
bool is_external () const
 
void make_external ()
 
void make_internal ()
 
void transfer_external (Def *to)
 
Casts
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 constness away and perform a dynamic_cast to T. More...
 
template<class T = Def, bool invert = false>
T * as_mut () const
 Asserts that this is a mutable, casts constness away and performs a static_cast to T. More...
 
Dbg Getters
Dbg dbg () const
 
Loc loc () const
 
Sym sym () const
 
std::string unique_name () const
 name + "_" + Def::gid More...
 
Dbg Setters

Every subclass S of Def has the same setters that return S*/const S* but will not show up in Doxygen.

template<bool Ow = false>
const Defset (Loc l) const
 
template<bool Ow = false>
Defset (Loc l)
 
template<bool Ow = false>
const Defset (Sym s) const
 
template<bool Ow = false>
Defset (Sym s)
 
template<bool Ow = false>
const Defset (std::string s) const
 
template<bool Ow = false>
Defset (std::string s)
 
template<bool Ow = false>
const Defset (Loc l, Sym s) const
 
template<bool Ow = false>
Defset (Loc l, Sym s)
 
template<bool Ow = false>
const Defset (Loc l, std::string s) const
 
template<bool Ow = false>
Defset (Loc l, std::string s)
 
template<bool Ow = false>
const Defset (Dbg d) const
 
template<bool Ow = false>
Defset (Dbg d)
 
debug_prefix/suffix

Prepends/Appends a prefix/suffix to Def::name - but only in Debug build.

const Defdebug_prefix (std::string) const
 
const Defdebug_suffix (std::string) const
 
Rebuild
virtual Defstub (World &, Ref)
 
virtual Ref rebuild (World &w, Ref type, Defs ops) const =0
 Def::rebuilds this Def while using new_op as substitute for its i'th Def::op. More...
 
virtual const Defimmutabilize ()
 Tries to make an immutable from a mutable. More...
 
const Defrefine (size_t i, const Def *new_op) const
 
DefArray reduce (const Def *arg) const
 Rewrites Def::ops by substituting this mutable's Var with arg. More...
 
DefArray reduce (const Def *arg)
 
Type Checking
virtual void check ()
 
dump
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
 
- Public Member Functions inherited from thorin::RuntimeCast< Def >
T * as ()
 static_cast with debug check. More...
 
const T * as () const
 const version. More...
 
T * isa ()
 dynamic_cast. More...
 
Defisa ()
 Yields B* if it is either T or U and `nullptr* otherwise. More...
 
const T * isa () const
 const version. More...
 
const Defisa () const
 const version. More...
 

Protected Member Functions

 Def (World *, node_t, const Def *type, Defs ops, flags_t flags)
 Constructor for an immutable Def. More...
 
 Def (node_t n, const Def *type, Defs ops, flags_t flags)
 
 Def (node_t, const Def *type, size_t num_ops, flags_t flags)
 Constructor for a mutable Def. More...
 
virtual ~Def ()=default
 
Wrappers for World::sym

These are here to have Def::setters inline without including thorin/world.h.

Sym sym (const char *) const
 
Sym sym (std::string_view) const
 
Sym sym (std::string) const
 

Protected Attributes

Dbg dbg_
 
union {
NormalizeFn normalizer_
 Axioms use this member to store their normalizer. More...
 
const Axiomaxiom_
 
Worldworld_
 Curried Apps of Axioms use this member to propagate the Axiom. More...
 
}; 
 
flags_t flags_
 
u8 curry_
 
u8 trip_
 

Detailed Description

Base class for all Defs.

The data layout (see World::alloc and Def::partial_ops) looks like this:

Def| type | op(0) ... op(num_ops-1) |
|---------partial_ops------------|
|-------extended_ops------|
Base class for all Defs.
Definition: def.h:203
Defs extended_ops() const
Definition: def.cpp:254
const Def * op(size_t i) const
Definition: def.h:255
size_t num_ops() const
Definition: def.h:256
const Def * type() const
Yields the raw type of this Def, i.e. maybe nullptr.
Definition: def.h:229
Defs partial_ops() const
Definition: def.h:307
Attention
This means that any subclass of Def must not introduce additional members.
See also
Immutables vs. Mutables

Definition at line 203 of file def.h.

Constructor & Destructor Documentation

◆ Def() [1/3]

thorin::Def::Def ( World w,
node_t  node,
const Def type,
Defs  ops,
flags_t  flags 
)
protected

◆ Def() [2/3]

thorin::Def::Def ( node_t  n,
const Def type,
Defs  ops,
flags_t  flags 
)
protected

Definition at line 53 of file def.cpp.

◆ Def() [3/3]

thorin::Def::Def ( node_t  node,
const Def type,
size_t  num_ops,
flags_t  flags 
)
protected

Constructor for a mutable Def.

Definition at line 56 of file def.cpp.

References dep_const(), gid(), thorin::murmur3(), thorin::World::next_gid(), num_ops(), thorin::Use::Type, type(), and world().

◆ ~Def()

virtual thorin::Def::~Def ( )
protectedvirtualdefault

Member Function Documentation

◆ arity()

◆ as_imm()

template<class T = Def>
const T * thorin::Def::as_imm ( ) const
inline

Definition at line 406 of file def.h.

◆ as_lit_arity()

nat_t thorin::Def::as_lit_arity ( ) const
inline

◆ as_mut()

template<class T = Def, bool invert = false>
T * thorin::Def::as_mut ( ) const
inline

◆ check()

virtual void thorin::Def::check ( )
inlinevirtual

Reimplemented in thorin::Pi, thorin::Lam, thorin::Sigma, and thorin::Arr.

Definition at line 474 of file def.h.

Referenced by set().

◆ dbg()

Dbg thorin::Def::dbg ( ) const
inline

Definition at line 430 of file def.h.

References dbg_.

Referenced by thorin::Singleton::rebuild(), and thorin::Global::stub().

◆ debug_prefix()

const Def * thorin::Def::debug_prefix ( std::string  prefix) const

Definition at line 261 of file def.cpp.

References dbg_, sym(), thorin::Dbg::sym, thorin::World::sym(), and world().

◆ debug_suffix()

const Def * thorin::Def::debug_suffix ( std::string  suffix) const

Definition at line 266 of file def.cpp.

References dbg_, sym(), thorin::Dbg::sym, thorin::World::sym(), and world().

◆ dep()

unsigned thorin::Def::dep ( ) const
inline

Definition at line 321 of file def.h.

Referenced by has_dep().

◆ dep_const()

bool thorin::Def::dep_const ( ) const
inline

◆ dump() [1/2]

void thorin::Def::dump ( ) const

Definition at line 360 of file dump.cpp.

◆ dump() [2/2]

void thorin::Def::dump ( int  max) const

Definition at line 361 of file dump.cpp.

References stream().

◆ extended_op()

const Def * thorin::Def::extended_op ( size_t  i) const
inline

Definition at line 298 of file def.h.

References extended_ops().

◆ extended_ops()

Defs thorin::Def::extended_ops ( ) const

Definition at line 254 of file def.cpp.

References is_set(), and type().

Referenced by thorin::Scheduler::early(), extended_op(), num_extended_ops(), and thorin::PassMan::run().

◆ flags()

◆ gid()

◆ has_dep() [1/2]

bool thorin::Def::has_dep ( Dep  d) const
inline

Definition at line 322 of file def.h.

References has_dep().

Referenced by dep_const(), has_dep(), and thorin::Infer::should_eliminate().

◆ has_dep() [2/2]

bool thorin::Def::has_dep ( unsigned  u) const
inline

Definition at line 323 of file def.h.

References dep().

◆ hash()

hash_t thorin::Def::hash ( ) const
inline

Definition at line 220 of file def.h.

◆ immutabilize()

virtual const Def * thorin::Def::immutabilize ( )
inlinevirtual

Tries to make an immutable from a mutable.

This usually works if the mutable isn't recursive and its var isn't used.

Reimplemented in thorin::Pi, thorin::Sigma, thorin::Arr, and thorin::Pack.

Definition at line 463 of file def.h.

◆ is_external()

bool thorin::Def::is_external ( ) const
inline

◆ is_set()

bool thorin::Def::is_set ( ) const

◆ is_term()

bool thorin::Def::is_term ( ) const

Yields true if this:T and T:(.Type 0).

Definition at line 296 of file def.cpp.

References thorin::RuntimeCast< Def >::isa(), and type().

Referenced by thorin::flatten().

◆ isa_imm() [1/2]

template<class T = Def>
const T * thorin::Def::isa_imm ( ) const
inline

◆ isa_imm() [2/2]

template<class T = Def, class R >
const T * thorin::Def::isa_imm ( R(T::*)() const  f) const
inline

Definition at line 407 of file def.h.

◆ isa_lit_arity()

std::optional< nat_t > thorin::Def::isa_lit_arity ( ) const

◆ isa_mut()

◆ loc()

Loc thorin::Def::loc ( ) const
inline

Definition at line 431 of file def.h.

References dbg_, and thorin::Dbg::loc.

Referenced by thorin::error().

◆ make_external()

void thorin::Def::make_external ( )

Definition at line 412 of file def.cpp.

Referenced by transfer_external().

◆ make_internal()

void thorin::Def::make_internal ( )

◆ node()

node_t thorin::Def::node ( ) const
inline

Definition at line 221 of file def.h.

Referenced by Def(), thorin::Pi::isa_cn(), and node_name().

◆ node_name()

◆ num_extended_ops()

size_t thorin::Def::num_extended_ops ( ) const
inline

Definition at line 299 of file def.h.

References extended_ops(), and thorin::Span< T >::size().

◆ num_ops()

◆ num_partial_ops()

size_t thorin::Def::num_partial_ops ( ) const
inline

Definition at line 309 of file def.h.

References partial_ops(), and thorin::Span< T >::size().

◆ num_projs()

nat_t thorin::Def::num_projs ( ) const
inline

Yields Def::as_lit_arity(), if it is in fact a Lit, or 1 otherwise.

Definition at line 344 of file def.h.

References isa_lit_arity().

Referenced by thorin::clos::clos_insert_env(), thorin::clos::clos_remove_env(), thorin::mem::mem_def(), proj(), projs(), and thorin::mem::replace_mem().

◆ num_tprojs()

nat_t thorin::Def::num_tprojs ( ) const

As above but yields 1, if Flags::scalerize_threshold is exceeded.

Definition at line 417 of file def.cpp.

References thorin::World::flags(), isa_lit_arity(), thorin::Flags::scalerize_threshold, and world().

Referenced by tproj(), and tprojs().

◆ num_tvars()

nat_t thorin::Def::num_tvars ( )
inline

Definition at line 390 of file def.h.

Referenced by thorin::ll::Emitter::emit_epilogue().

◆ num_uses()

size_t thorin::Def::num_uses ( ) const
inline

Definition at line 315 of file def.h.

References uses().

◆ num_vars()

nat_t thorin::Def::num_vars ( )
inline

Definition at line 390 of file def.h.

Referenced by thorin::ll::Emitter::emit_epilogue(), and thorin::Lam::ret_var().

◆ op()

◆ ops()

◆ partial_op()

const Def * thorin::Def::partial_op ( size_t  i) const
inline

Definition at line 308 of file def.h.

References partial_ops().

◆ partial_ops()

Defs thorin::Def::partial_ops ( ) const
inline

Definition at line 307 of file def.h.

Referenced by num_partial_ops(), and partial_op().

◆ proj() [1/2]

const Def * thorin::Def::proj ( nat_t  a,
nat_t  i 
) const

◆ proj() [2/2]

const Def * thorin::Def::proj ( nat_t  i) const
inline

As above but takes Def::num_projs as arity.

Definition at line 350 of file def.h.

References num_projs(), and proj().

Referenced by proj().

◆ projs() [1/4]

template<nat_t A = -1_n>
auto thorin::Def::projs ( ) const
inline

Definition at line 373 of file def.h.

Referenced by projs(), and tprojs().

◆ projs() [2/4]

◆ projs() [3/4]

auto thorin::Def::projs ( nat_t  a) const
inline

Definition at line 379 of file def.h.

References projs().

◆ projs() [4/4]

template<class F >
auto thorin::Def::projs ( nat_t  a,
f 
) const
inline

Definition at line 369 of file def.h.

References proj().

◆ rebuild()

◆ reduce() [1/2]

DefArray thorin::Def::reduce ( const Def arg)

Definition at line 208 of file def.cpp.

References thorin::rewrite(), and world().

◆ reduce() [2/2]

DefArray thorin::Def::reduce ( const Def arg) const

Rewrites Def::ops by substituting this mutable's Var with arg.

Definition at line 203 of file def.cpp.

References isa_mut(), and ops().

Referenced by thorin::World::app(), thorin::World::extract(), and thorin::compile::handle_optimization_part().

◆ refine()

const Def * thorin::Def::refine ( size_t  i,
const Def new_op 
) const

◆ reset() [1/2]

Def * thorin::Def::reset ( Defs  ops)

Def::reset ops all at once.

Definition at line 349 of file def.cpp.

References num_ops(), ops(), and set().

◆ reset() [2/2]

Def * thorin::Def::reset ( size_t  i,
const Def def 
)
inline

Successively reset from left to right.

Definition at line 277 of file def.h.

References set(), and unset().

Referenced by thorin::RetWrap::enter(), thorin::Infer::find(), thorin::Infer::reset(), and thorin::PassMan::run().

◆ set() [1/14]

template<bool Ow = false>
Def * thorin::Def::set ( Dbg  d)
inline

Definition at line 439 of file def.h.

◆ set() [2/14]

template<bool Ow = false>
const Def * thorin::Def::set ( Dbg  d) const
inline

Definition at line 439 of file def.h.

◆ set() [3/14]

Def * thorin::Def::set ( Defs  ops)

Def::set ops all at once.

Definition at line 348 of file def.cpp.

◆ set() [4/14]

template<bool Ow = false>
Def * thorin::Def::set ( Loc  l)
inline

Definition at line 439 of file def.h.

◆ set() [5/14]

template<bool Ow = false>
const Def * thorin::Def::set ( Loc  l) const
inline

Definition at line 439 of file def.h.

◆ set() [6/14]

template<bool Ow = false>
Def * thorin::Def::set ( Loc  l,
std::string  s 
)
inline

Definition at line 439 of file def.h.

◆ set() [7/14]

template<bool Ow = false>
const Def * thorin::Def::set ( Loc  l,
std::string  s 
) const
inline

Definition at line 439 of file def.h.

◆ set() [8/14]

template<bool Ow = false>
Def * thorin::Def::set ( Loc  l,
Sym  s 
)
inline

Definition at line 439 of file def.h.

◆ set() [9/14]

template<bool Ow = false>
const Def * thorin::Def::set ( Loc  l,
Sym  s 
) const
inline

Definition at line 439 of file def.h.

◆ set() [10/14]

◆ set() [11/14]

template<bool Ow = false>
Def * thorin::Def::set ( std::string  s)
inline

Definition at line 439 of file def.h.

◆ set() [12/14]

template<bool Ow = false>
const Def * thorin::Def::set ( std::string  s) const
inline

Definition at line 439 of file def.h.

◆ set() [13/14]

template<bool Ow = false>
Def * thorin::Def::set ( Sym  s)
inline

Definition at line 439 of file def.h.

◆ set() [14/14]

template<bool Ow = false>
const Def * thorin::Def::set ( Sym  s) const
inline

Definition at line 439 of file def.h.

◆ set_type()

Def * thorin::Def::set_type ( const Def type)

Definition at line 391 of file def.cpp.

References thorin::Use::Type, type(), and unset_type().

Referenced by update().

◆ stream()

std::ostream & thorin::Def::stream ( std::ostream &  os,
int  max 
) const

Definition at line 341 of file dump.cpp.

References world().

Referenced by thorin::dot::default_stream_def(), dump(), and write().

◆ stub()

virtual Def * thorin::Def::stub ( World ,
Ref   
)
inlinevirtual

◆ sym() [1/4]

◆ sym() [2/4]

Sym thorin::Def::sym ( const char *  s) const
protected

Definition at line 225 of file def.cpp.

References thorin::World::sym(), and world().

◆ sym() [3/4]

Sym thorin::Def::sym ( std::string  s) const
protected

Definition at line 227 of file def.cpp.

References thorin::World::sym(), and world().

◆ sym() [4/4]

Sym thorin::Def::sym ( std::string_view  s) const
protected

Definition at line 226 of file def.cpp.

References thorin::World::sym(), and world().

◆ tproj()

const Def * thorin::Def::tproj ( nat_t  i) const
inline

As above but takes Def::num_tprojs.

Definition at line 351 of file def.h.

References num_tprojs(), and proj().

◆ tprojs() [1/2]

auto thorin::Def::tprojs ( ) const
inline

Definition at line 376 of file def.h.

References tprojs().

Referenced by tprojs().

◆ tprojs() [2/2]

template<class F >
auto thorin::Def::tprojs ( f) const
inline

Definition at line 367 of file def.h.

References num_tprojs(), and projs().

◆ transfer_external()

void thorin::Def::transfer_external ( Def to)
inline

Definition at line 398 of file def.h.

References make_external(), and make_internal().

◆ tvar()

Ref thorin::Def::tvar ( nat_t  i)
inline

Definition at line 390 of file def.h.

◆ tvars() [1/2]

auto thorin::Def::tvars ( )
inline

Definition at line 390 of file def.h.

◆ tvars() [2/2]

template<class F >
auto thorin::Def::tvars ( f)
inline

Definition at line 390 of file def.h.

◆ type()

const Def * thorin::Def::type ( ) const
inline

Yields the raw type of this Def, i.e. maybe nullptr.

See also
Def::unfold_type.

Definition at line 229 of file def.h.

Referenced by thorin::Global::alloced_type(), thorin::World::app(), arity(), thorin::Check::assignable(), thorin::autodiff::AutoDiffEval::augment_(), thorin::autodiff::AutoDiffEval::augment_app(), thorin::autodiff::AutoDiffEval::augment_extract(), thorin::autodiff::AutoDiffEval::augment_pack(), thorin::autodiff::AutoDiffEval::augment_tuple(), thorin::App::callee_type(), thorin::Pi::check(), thorin::Arr::check(), thorin::clos::clos_pack(), thorin::matrix::counting_for(), Def(), thorin::autodiff::AutoDiffEval::derive_(), thorin::ll::Emitter::emit_bb(), thorin::clos::ClosLit::env_type(), thorin::clos::ClosConvPrep::eta_wrap(), extended_ops(), thorin::World::extract(), thorin::Bound::find(), thorin::flatten(), thorin::clos::ClosLit::fnc_type(), thorin::Bound::get(), thorin::compile::handle_optimization_part(), thorin::World::iapp(), thorin::World::iinfer(), thorin::World::insert(), is_term(), thorin::is_unit(), isa_lit_arity(), thorin::mem::mem_def(), thorin::merge_tuple(), thorin::core::normalize_bitcast(), thorin::core::op(), thorin::direct::op_cps2ds_dep(), thorin::mem::op_lea(), thorin::mem::op_lea_unsafe(), thorin::matrix::op_read(), thorin::optimize(), thorin::World::pack(), proj(), refine(), thorin::mem::replace_mem(), thorin::matrix::LowerMatrixHighLevelMapRed::rewrite_(), thorin::clos::ClosConvPrep::rewrite_callee(), thorin::Rewriter::rewrite_imm(), thorin::matrix::LowerMatrixLowLevel::rewrite_imm(), thorin::Rewriter::rewrite_mut(), thorin::PassMan::run(), thorin::Scheduler::Scheduler(), set_type(), thorin::Pack::shape(), thorin::mem::strip_mem(), thorin::World::test(), thorin::World::tuple(), thorin::clos::ClosLit::type(), thorin::Lam::type(), thorin::World::type(), thorin::World::uinc(), update(), and world().

◆ unfold_type()

const Def * thorin::Def::unfold_type ( ) const

Yields the type of this Def and builds a new .Type (UInc n) if necessary.

Definition at line 235 of file def.cpp.

References thorin::World::type(), and world().

Referenced by thorin::World::arr(), thorin::Arr::check(), and thorin::Pi::infer().

◆ unique_name()

std::string thorin::Def::unique_name ( ) const

name + "_" + Def::gid

Definition at line 415 of file def.cpp.

References gid(), and sym().

Referenced by thorin::dot::Emitter::emit_bb(), and thorin::dot::Emitter::emit_imported().

◆ unset()

Def * thorin::Def::unset ( )

Unsets all Def::ops; works even, if not set at all or partially.

Definition at line 369 of file def.cpp.

References num_ops(), op(), and unset().

Referenced by reset(), thorin::Infer::unset(), unset(), thorin::Pi::unset(), thorin::Lam::unset(), thorin::Sigma::unset(), thorin::Arr::unset(), and thorin::Pack::unset().

◆ unset_type()

void thorin::Def::unset_type ( )

Definition at line 398 of file def.cpp.

References thorin::Use::Type.

Referenced by set_type().

◆ update()

void thorin::Def::update ( )
inline

Resolves Infers of this Def's type.

Definition at line 285 of file def.h.

References thorin::Ref::refer(), set_type(), and type().

Referenced by thorin::Infer::find(), and set().

◆ uses()

const Uses & thorin::Def::uses ( ) const
inline

Definition at line 314 of file def.h.

Referenced by num_uses(), proj(), and var().

◆ var() [1/3]

◆ var() [2/3]

Ref thorin::Def::var ( nat_t  a,
nat_t  i 
)
inline

Definition at line 390 of file def.h.

◆ var() [3/3]

Ref thorin::Def::var ( nat_t  i)
inline

Definition at line 390 of file def.h.

◆ vars() [1/4]

template<nat_t A = -1_s>
auto thorin::Def::vars ( )
inline

Definition at line 390 of file def.h.

◆ vars() [2/4]

template<nat_t A = -1_s, class F >
auto thorin::Def::vars ( f)
inline

Definition at line 390 of file def.h.

Referenced by thorin::RetWrap::enter(), and thorin::affine::LowerFor::rewrite().

◆ vars() [3/4]

auto thorin::Def::vars ( nat_t  a)
inline

Definition at line 390 of file def.h.

◆ vars() [4/4]

template<class F >
auto thorin::Def::vars ( nat_t  a,
f 
)
inline

Definition at line 390 of file def.h.

◆ world()

World & thorin::Def::world ( ) const

Definition at line 229 of file def.cpp.

References type(), and world().

Referenced by thorin::Check::alpha(), thorin::Lam::app(), thorin::clos::apply_closure(), arity(), thorin::Check::assignable(), thorin::autodiff::AutoDiffEval::augment_(), thorin::autodiff::AutoDiffEval::augment_app(), thorin::autodiff::AutoDiffEval::augment_extract(), thorin::autodiff::AutoDiffEval::augment_lam(), thorin::autodiff::AutoDiffEval::augment_pack(), thorin::autodiff::AutoDiffEval::augment_tuple(), thorin::autodiff::autodiff_type_fun(), thorin::autodiff::autodiff_type_fun_pi(), thorin::Lam::branch(), thorin::Lam::check(), thorin::clos::clos_apply(), thorin::clos::clos_insert_env(), thorin::clos::clos_pack(), thorin::clos::clos_remove_env(), thorin::clos::clos_type(), thorin::clos::clos_type_to_pi(), thorin::mem::cn_mem(), thorin::mem::cn_mem_ret(), thorin::core::convert(), thorin::matrix::counting_for(), debug_prefix(), debug_suffix(), Def(), thorin::PipelineBuilder::def2pass(), thorin::autodiff::AutoDiffEval::derive_(), thorin::Infer::eliminate(), thorin::flatten(), thorin::mem::fn_mem(), thorin::autodiff::id_pullback(), thorin::Pi::immutabilize(), thorin::Sigma::immutabilize(), thorin::Arr::immutabilize(), thorin::Pack::immutabilize(), thorin::Pi::infer(), thorin::is_unit(), thorin::clos::isa_clos_type(), thorin::regex::make_binary_tree(), make_internal(), thorin::merge_sigma(), thorin::merge_tuple(), thorin::autodiff::normalize_ad(), thorin::autodiff::normalize_AD(), thorin::autodiff::normalize_add(), thorin::regex::normalize_any(), thorin::core::normalize_bitcast(), thorin::clos::normalize_clos(), thorin::compile::normalize_combine_pass_list(), thorin::compile::normalize_combined_phase(), thorin::regex::normalize_conj(), thorin::demo::normalize_const(), thorin::refly::normalize_dbg(), thorin::regex::normalize_disj(), thorin::refly::normalize_gid(), thorin::matrix::normalize_insert(), thorin::mem::normalize_lea(), thorin::mem::normalize_load(), thorin::matrix::normalize_map_reduce(), thorin::regex::normalize_not(), thorin::compile::normalize_pass_phase(), thorin::matrix::normalize_prod(), thorin::regex::normalize_quant(), thorin::regex::normalize_range(), thorin::matrix::normalize_read(), thorin::refly::normalize_refine(), thorin::mem::normalize_remem(), thorin::matrix::normalize_shape(), thorin::compile::normalize_single_pass_phase(), thorin::mem::normalize_store(), thorin::autodiff::normalize_sum(), thorin::core::normalize_trait(), thorin::matrix::normalize_transpose(), thorin::autodiff::normalize_zero(), num_tprojs(), thorin::core::op(), thorin::mem::op_alloc(), thorin::mem::op_lea(), thorin::mem::op_lea_unsafe(), thorin::mem::op_malloc(), thorin::mem::op_mslot(), thorin::matrix::op_read(), thorin::mem::op_remem(), thorin::mem::op_slot(), thorin::autodiff::op_sum(), thorin::operator<<(), thorin::mem::pi_mem(), proj(), thorin::autodiff::pullback_type(), reduce(), refine(), thorin::mem::replace_mem(), thorin::direct::DS2CPS::rewrite(), thorin::matrix::LowerMatrixMediumLevel::rewrite_(), thorin::PassMan::run(), thorin::Pi::set_dom(), thorin::Lam::set_filter(), thorin::Pack::shape(), stream(), thorin::mem::strip_mem(), thorin::mem::strip_mem_ty(), sym(), thorin::Lam::test(), unfold_type(), var(), world(), thorin::autodiff::zero_def(), and thorin::autodiff::zero_pullback().

◆ write() [1/2]

void thorin::Def::write ( int  max) const

Definition at line 368 of file dump.cpp.

References write().

Referenced by write().

◆ write() [2/2]

void thorin::Def::write ( int  max,
const char *  file 
) const

Definition at line 363 of file dump.cpp.

References stream().

Member Data Documentation

◆ 

union { ... } thorin::Def::@5

◆ curry_

u8 thorin::Def::curry_
protected

Definition at line 515 of file def.h.

Referenced by thorin::Axiom::curry(), and thorin::App::curry().

◆ dbg_

Dbg thorin::Def::dbg_
mutableprotected

Definition at line 508 of file def.h.

Referenced by dbg(), debug_prefix(), debug_suffix(), loc(), and sym().

◆ flags_

flags_t thorin::Def::flags_
protected

◆ trip_

u8 thorin::Def::trip_
protected

Definition at line 516 of file def.h.

Referenced by thorin::Axiom::trip(), and thorin::App::trip().


The documentation for this class was generated from the following files: