MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
Class Hierarchy

Go to the graphical class hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:
 Cmim::World::Move::[struct].arena
 Cmim::ast::AnnexInfo::[struct].id
 Cmim::ast::AnnexInfo::[struct].sym
 Cmim::AnnexHolds info about an entity defined within a Plugin (called Annex)
 Cmim::World::Annexes
 Cmim::ast::AnnexInfoBookkeeping of an annex introduced by an AxmDecl
 Cmim::plug::regex::app_range
 Cmim::ast::ASTOwns the arena all AST nodes live in as well as the AnnexInfos of all plugins
 Cautomaton::AutomatonBase< NodeType >
 Cautomaton::AutomatonBase< DFANode >
  Cautomaton::DFA
 Cautomaton::AutomatonBase< NFANode >
  Cautomaton::NFA
 Cmim::ast::Scopes::Barrier
 Cmim::plug::ll::BB
 Cmim::ast::BindOne name in a Scope: the Decl it introduces and the Vis of this binding
 Cmim::plug::mem::EscapeAnalysis::Chain
 Cmim::Check
 Cmim::Nest::Node::Children
 Cmim::plug::clos::ClosLitLightweight, non-owning view onto a closure literal (env_type, fn, env); see isa_clos_lit
 Cfe::CodeDiag
  Cmim::DiagRenders a diagnostic through PlainNames and - if that turned out ambiguous - once more with Def::unique_name
 Cmim::World::CurrLocWorld::get_loc together with its interned DbgKey, so pushing/popping a Loc never re-interns it
 Cmim::DefKeyGrants fe::Patricia access to Def::gid_
 Cmim::plug::nvptx::DeviceEmitFlags
 Cautomaton::DFANode
 Cmim::DotConfigOptions for Def::dot, World::dot, and Nest::dot
 Cfe::Driver
  Cmim::DriverSome "global" variables needed all over the place
 Cmim::ast::Emitter
 Cmim::Driver::Imports::Entry
 Cmim::World::Annexes::Entry
 Cmim::World::Externals
 Cmim::FlagsCompiler switches that must be saved and looked up in later phases of compilation
 Cmim::ast::AST::ForeignAliasAn anx alias in one plugin for an annex of another, e.g. anx M = core.M; in mem
 Cmim::plug::clos::phase::FreeDefAnaComputes, on demand and with memoization, the free Defs that a Lam must capture in its closure environment
 Cmim::GIDHash< T >
 Cmim::GIDLt< T >
 Cmim::Driver::Imports
 Cmim::Axm::IsA< Id, D >
 Cmim::Axm::IsANode< T >
 Cmim::plug::ord::Key_fieldThe fields of ord.Key, by index
 Cmim::plug::tensor::phase::LeafA chain operand; the chain reads its transpose if t
 Cfe::Lexer
  Cmim::ast::Lexer
 Cautomaton::DFANode::Lt
 Cautomaton::NFANode::Lt
 Cmim::plug::btensor::MapRedPostThe curried meta arguments of a tensor.map_reduce_post or btensor.map_reduce_post callee (same layout)
 Cmim::ast::ModsRaw, unvalidated combination of priv/pub/extern/anx modifiers written before a declaration
 Cmim::Driver::Names
 Cmim::NestBuilds a nesting tree for all mutables/binders
 Cautomaton::NFANode
 Cmim::Nest::Node
 Cmim::ast::Emitter::NomInfo
 Cmim::detail::NullSafeDefGIDLtLike GIDLt, but the nesting virtual root is represented as a nullptr Def%, which must sort first
 Cmim::plug::option::Opt_ctorThe ctors of option.Opt, by index
 Cmim::OutA file name from the command line and the stream to write to;
 Cfe::Parser
  Cmim::ast::ParserParses Mim code as AST
 Cmim::Driver::PathsAn ordered list of directories
 Cmim::PlainNamesRenders Defs with their plain Def::sym instead of Def::unique_name while alive
 Cmim::PluginBasic info and registration function pointer to be returned from a specific plugin
 Cmim::PluginArgOne -X <plugin>:<arg> a Plugin understands; see Arguments
 Cmim::PluginEnvOne environment variable a Plugin reads; see Environment Variables
 Cmim::PluginSymOne symbol a Plugin offers to other Plugins; see Driver::get_fun_ptr
 Cmim::World::State::PODPlain Old Data
 Cmim::plug::tensor::PureReadA pure re-indexed read: the source tensor, the access map into it (over the read's output coordinates), and the source's element type/rank/shape
 Cmim::ast::R< T >
 Cautomaton::RangeCompare
 Cmim::plug::btensor::MapRedPost::Ranks
 Cmim::RewriterRecurseivly rebuilds part of a program into the provided World w.r.t. Rewriter::map
  Cmim::AnalysisTraverses the current World using Rewriter infrastructure while staying in the same world
   Cmim::plug::gpu::phase::MemChecks
   Cmim::plug::mem::EscapeAnalysisDetermines which allocations stay within the scope that allocates them
  Cmim::ImporterImports from Driver::library: an annex therein is looked up via World::annex, so it is imported only once
  Cmim::RWPhaseRebuilds old_world() into new_world() and then swaps them
   Cmim::ADCEAggressive Dead Code Elimination
   Cmim::BetaRedInlines in post-order all Lams that occur exactly once in the program or are trivial forwarders
   Cmim::CleanupRemoves unreachable and dead code by rebuilding the whole World into a new one and swapping them afterwards
   Cmim::DispatchNormalizeNormalizes Dispatches: η-expands non-Lam targets so that every target of a (t_0, ..., t_n)#index jump table is a Lam, as later phases and the backends expect
   Cmim::EtaConvCombined η-normalization: folds η-reduction and η-expansion into a single, idempotent phase
   Cmim::LamSpecSpecializes a Lam at its call site by inlining all Pi-typed (i.e. higher-order) arguments
   Cmim::NomErasureEliminates all nominal newtypes, so that no Nom/Name/Struc ever reaches a backend
   Cmim::ReplAn RWPhase that searches for a pattern and replaces it
   Cmim::RetWrap
   Cmim::SCCPSCCP - Sparse Conditional Constant Propagation - but propagates arbitrary expressions
   Cmim::ScalarizeScalarization (= argument simplification):
   Cmim::SingleErasureEliminates all types that have exactly one inhabitant, so that no Single/Wrap ever reaches a backend
   Cmim::StaticArgOptStatic Argument Transformation
   Cmim::plug::affine::phase::LowerForLowers the for axm to actual control flow in CPS
   Cmim::plug::affine::phase::LowerIndexLowers the affine index algebra to core arithmetic
   Cmim::plug::autodiff::phase::EvalThis phase is the heart of AD
   Cmim::plug::btensor::phase::LowerMapReduceLowers the buffer-world operations (btensor.map_reduce_post, btensor.broadcast, btensor.pad, btensor.concat, btensor.gather, btensor.scatter) into affine.For loop nests over buffer.read / buffer.write / buffer.alloc, threading mem.M
   Cmim::plug::buffer::LowerPtrLowers the buffer abstraction to the low-level pointer representation
   Cmim::plug::clos::phase::BranchClosElimFlattens branches over closure literals back into a direct branch over Lams
   Cmim::plug::clos::phase::Clos2SJLJLowers basicblock closures that are passed as arguments (i.e
   Cmim::plug::clos::phase::ClosConvPerforms typed closure conversion, rebuilding the old world into a new one
   Cmim::plug::clos::phase::ClosConvPrepWraps operands with the clos.anno annotations (returning, free_bb, fstclass_bb, ...) and eta-expands branches and continuations so that ClosConv sees a canonical program
   Cmim::plug::clos::phase::LowerTypedClosThis pass lowers typed closures to untyped closures
   Cmim::plug::clos::phase::LowerTypedClosPrepEscape analysis for closures: closure literals get their function wrapped in clos.anno.esc or clos.anno.bottom, depending on whether their environment escapes
   Cmim::plug::cps::ConvFull CPS conversion in one recursive rewrite
   Cmim::plug::gpu::phase::LowerMapReduce
   Cmim::plug::gpu::phase::RemoveDoubleSyncs
   Cmim::plug::gpu::phase::SplitApply
   Cmim::plug::gpu::phase::SplitOffKernelsAfterwards, old_world() is the host, which keeps each kernel as a declaration, and new_world() the device
   Cmim::plug::mem::phase::AddMemThreads the mem.M memory monad through the world: mem-extends continuations and rewires every memory operand to the current memory at that program point
   Cmim::plug::mem::phase::FreeLocalsFrees the memory a function allocates but does not let escape; see mem::EscapeAnalysis
   Cmim::plug::mem::phase::Heap2StackTurns a mem.alloc that does not escape its function (see mem::EscapeAnalysis) into a mem.slot
   Cmim::plug::mem::phase::SEOSymbolic Expression Optimization
   Cmim::plug::regex::LowerRegexLowers a regex axm application to a DFA matcher function
   Cmim::plug::tensor::phase::Fuse
   Cmim::plug::tensor::phase::LowerLowers the high-level tensor axioms into the low-level tensor axioms (map_reduce, …)
   Cmim::plug::tensor::phase::LowerMapReduceLowers the low-level tensor axioms (map_reduce, generate, pad, concat, broadcast) directly to their underlying primitives (loops, extract, insert, pack, …)
   Cmim::plug::tensor::phase::LowerToMemBufferizes the low-level tensor axioms onto the shared buffer layer
   Cmim::plug::tensor::phase::ReassocReassociates chains of tensor.product_2d with the classic matrix-chain-order dynamic program, so that a chain is evaluated with the least number of vector-lane slots
  Cmim::VarRewriterExtends Rewriter for variable substitution
  Cmim::Zonker
 Cmim::plug::btensor::Ring_fieldThe fields of btensor.Ring, by index
 Cfe::RuntimeCast
  Cmim::DefBase class for all Defs
   Cmim::App
   Cmim::Axm
   Cmim::ExtCommon base for TExtremum
    Cmim::TExt< false >
    Cmim::TExt< true >
    Cmim::TExt< Up >Extremum. Either Top (Up) or Bottom
   Cmim::ExtractExtracts from a Sigma or Array-typed Extract::tuple the element at position Extract::index
   Cmim::HoleThis node is a hole in the IR that is inferred by its context later on
   Cmim::IdxA built-in constant of type Nat -> *
   Cmim::InjConstructs a Join or Variant value
   Cmim::InsertCreates a new Tuple / Pack by inserting Insert::value at position Insert::index into Insert::tuple
   Cmim::JoinA union type whose ops are sorted and deduplicated: T ∪ T is T
   Cmim::LMax
   Cmim::LSucc
   Cmim::LamA function
   Cmim::Level
   Cmim::Lit
   Cmim::MatchScrutinize Match::scrutinee() and dispatch to Match::arms
   Cmim::NameNominal newtype term introduction
   Cmim::Nat
   Cmim::NomNominal newtype formation
   Cmim::PiA dependent function type
   Cmim::ProdBase class for Sigma and Tuple
    Cmim::SigmaA dependent tuple type
    Cmim::TupleData constructor for a Sigma
   Cmim::ProxyUsed as intermediate value during optimizatinos such as Analysis
   Cmim::ReformType formation of a rewrite Rule
   Cmim::RuleA rewrite rule
   Cmim::SeqBase class for Arr and Pack
    Cmim::ArrA (possibly paramterized) Array
    Cmim::PackA (possibly paramterized) Tuple
   Cmim::SingleSingleton type formation
   Cmim::StrucNominal newtype term elimination
   Cmim::Type
   Cmim::VarA variable introduced by a binder (mutable)
   Cmim::VariantA sum type whose cases are positional: unlike a Join, they are neither sorted nor deduplicated
   Cmim::WrapSingleton term introduction
  Cmim::PhaseA Phase performs one self-contained task over the whole World
   Cmim::ClosedMutPhase< Def >
    Cmim::NestPhase< M >Like ClosedMutPhase but computes a Nest for each NestPhase::visit
   CNamedPhase hook for compile.named
   Cmim::AnalysisTraverses the current World using Rewriter infrastructure while staying in the same world
   Cmim::ClosedMutPhase< M >Transitively visits all reachable, closed mutables in the World
    Cmim::NestPhase< Lam >
     Cmim::plug::ll::Emitter
      Cmim::plug::nvptx::DeviceEmitter
      Cmim::plug::nvptx::HostEmitter
   Cmim::PhaseManOrganizes several Phases into a pipeline
   Cmim::RWPhaseRebuilds old_world() into new_world() and then swaps them
   Cmim::plug::ll::EmitPipeline phase for ll.emit
   Cmim::plug::nvptx::Emit
  Cmim::ast::NodeBase class of all AST nodes
   Cmim::ast::DeclBase class of all declarations; caches the emitted Decl::def
    Cmim::ast::AxmDecl::Namedbg = alias_0 = ... = alias_n-1 - one axiom of the family, which each of its names binds to
    Cmim::ast::DummyDecl
    Cmim::ast::IdDecldbg bound to a Def whose type the binding construct dictates; hence, it carries no annotation
    Cmim::ast::PtrnBase class of all patterns
     Cmim::ast::AliasPtrnptrn as dbg
     Cmim::ast::ErrorPtrnErroneous pattern
     Cmim::ast::GrpPtrndbg_i of a group dbg_0 ... dbg_n-1: type for i > 0; the leading IdPtrn::id owns type
     Cmim::ast::IdPtrndbg: type
     Cmim::ast::TuplePtrn(ptrn_0, ..., ptrn_n-1), [ptrn_0, ..., ptrn_n-1], or {ptrn_0, ..., ptrn_n-1}
    Cmim::ast::ValDeclBase class of all declarations that bind values
     Cmim::ast::AliasDeclanx dbg = path; - a compiler-exposed alias sharing its target's annex slot
     Cmim::ast::AxmDeclaxm dbg: type, normalizer, curry, trip; or a family axm (name, ...): type, normalizer, curry, trip;
     Cmim::ast::LetDecllet ptrn = value;
     Cmim::ast::ModDeclmod dbg decls end; also the base of the anonymous File
      Cmim::ast::FileThe AST of one source file: an anonymous ModDecl that a UseDecl binds under a name of its own
     Cmim::ast::MutualDeclmutual decl* end groups RecDecls that may refer to each other
     Cmim::ast::RecDeclrec dbg = body;
      Cmim::ast::LamDecltag dbg dom_0 ... dom_n-1: codom = body; with LamDecl::tag lam/con/fun or anonymous λ/cn/fn
      Cmim::ast::NomDeclnom dbg = body; - a nominal newtype
     Cmim::ast::RuleDeclrule dbg var: lhs when guard => rhs; or norm instead of rule if RuleDecl::is_normalizer
     Cmim::ast::UseDeclimport "file"|name [as alias|*];, plugin name [as alias|*];, or use path [as alias|*]; as * splices instead of naming; a use without an as is sugar for as *
   Cmim::ast::ExprBase class of all expressions
    Cmim::ast::AppExprcallee arg
    Cmim::ast::DeclExprdecls expr or expr where decls if DeclExpr::is_where
    Cmim::ast::ErrorExprErroneous expression
    Cmim::ast::HoleExpr?
    Cmim::ast::InfixExprlhs op rhs; InfixExpr::op picks the meaning - see MIM_INFIX
    Cmim::ast::LamExprWraps a LamDecl as Expr
    Cmim::ast::LitExprtok:type
    Cmim::ast::MatchExprmatch scrutinee with | arm_0 | ... | arm_n-1
    Cmim::ast::PathExprpath
    Cmim::ast::PiExprdom → codom, Cn dom, or Fn dom → codom depending on PiExpr::tag
    Cmim::ast::PrefixExprop rhs; PrefixExpr::op picks the meaning - see MIM_PREFIX
    Cmim::ast::PrimaryExprtag
    Cmim::ast::RetExprret ptrn = callee $ arg; body
    Cmim::ast::RuleExprRule dom
    Cmim::ast::SeqExpr«index: shape; body» or ‹index: shape; body› if SeqExpr::is_pack; index: is optional
    Cmim::ast::SigmaExprWraps a TuplePtrn as Expr
    Cmim::ast::SingleExpr«body» or ‹body› if SingleExpr::is_wrap
    Cmim::ast::TupleExpr(elem_0, ..., elem_n-1)
    Cmim::ast::TypeExprType level
    Cmim::ast::VariantExpr| ctor_0: type_0 | ... | ctor_n-1: type_n-1; a constructor without a type carries []
   Cmim::ast::MatchExpr::Armptrn => body, ctor ptrn => body, or index [ptrn] => body of a MatchExpr
   Cmim::ast::Pathdbg_0.....dbg_n-1
   Cmim::ast::PiExpr::DomOne dom of a PiExpr: ptrn with an optional -> ret type
    Cmim::ast::LamDecl::DomOne dom of a LamDecl: ptrn@(filter) with an optional : ret type
   Cmim::ast::VariantExpr::Ctordbg: type of a VariantExpr
 Cmim::ast::S
 Cmim::plug::btensor::Sched_fieldThe fields of btensor.Sched, by index
 Cmim::Scheduler
 Cmim::Rewriter::Scope
 Cmim::ast::Scopes
 Cmim::Setters< P, D >CRTP-based mixin to declare setters for Def::loc & Def::name using a covariant return type
 Cmim::Setters< App >
  Cmim::App
 Cmim::Setters< Arr >
  Cmim::ArrA (possibly paramterized) Array
 Cmim::Setters< Axm >
  Cmim::Axm
 Cmim::Setters< Extract >
  Cmim::ExtractExtracts from a Sigma or Array-typed Extract::tuple the element at position Extract::index
 Cmim::Setters< Hole >
  Cmim::HoleThis node is a hole in the IR that is inferred by its context later on
 Cmim::Setters< Idx >
  Cmim::IdxA built-in constant of type Nat -> *
 Cmim::Setters< Inj >
  Cmim::InjConstructs a Join or Variant value
 Cmim::Setters< Insert >
  Cmim::InsertCreates a new Tuple / Pack by inserting Insert::value at position Insert::index into Insert::tuple
 Cmim::Setters< Join >
  Cmim::JoinA union type whose ops are sorted and deduplicated: T ∪ T is T
 Cmim::Setters< Lam >
  Cmim::LamA function
 Cmim::Setters< Level >
  Cmim::Level
 Cmim::Setters< Lit >
  Cmim::Lit
 Cmim::Setters< LMax >
  Cmim::LMax
 Cmim::Setters< LSucc >
  Cmim::LSucc
 Cmim::Setters< Match >
  Cmim::MatchScrutinize Match::scrutinee() and dispatch to Match::arms
 Cmim::Setters< Name >
  Cmim::NameNominal newtype term introduction
 Cmim::Setters< Nat >
  Cmim::Nat
 Cmim::Setters< Nom >
  Cmim::NomNominal newtype formation
 Cmim::Setters< Pack >
  Cmim::PackA (possibly paramterized) Tuple
 Cmim::Setters< Pi >
  Cmim::PiA dependent function type
 Cmim::Setters< Prod >
  Cmim::ProdBase class for Sigma and Tuple
 Cmim::Setters< Proxy >
  Cmim::ProxyUsed as intermediate value during optimizatinos such as Analysis
 Cmim::Setters< Reform >
  Cmim::ReformType formation of a rewrite Rule
 Cmim::Setters< Rule >
  Cmim::RuleA rewrite rule
 Cmim::Setters< Seq >
  Cmim::SeqBase class for Arr and Pack
 Cmim::Setters< Sigma >
  Cmim::SigmaA dependent tuple type
 Cmim::Setters< Single >
  Cmim::SingleSingleton type formation
 Cmim::Setters< Struc >
  Cmim::StrucNominal newtype term elimination
 Cmim::Setters< TExt< Up > >
  Cmim::TExt< false >
  Cmim::TExt< true >
  Cmim::TExt< Up >Extremum. Either Top (Up) or Bottom
 Cmim::Setters< Tuple >
  Cmim::TupleData constructor for a Sigma
 Cmim::Setters< Type >
  Cmim::Type
 Cmim::Setters< Var >
  Cmim::VarA variable introduced by a binder (mutable)
 Cmim::Setters< Variant >
  Cmim::VariantA sum type whose cases are positional: unlike a Join, they are neither sorted nor deduplicated
 Cmim::Setters< Wrap >
  Cmim::WrapSingleton term introduction
 Cmim::ShapeThe extents of a Seq's axes: a plain Nat for a single axis, an aggregate of them for several
 Cmim::Nest::Node::SiblDeps
 Cmim::SieveFilters the components of an aggregate and keeps track of where the survivors end up
 Cmim::plug::tensor::phase::SlotsThe five parallel per-slot lists of a map_reduce_post input group: element type, rank, shape, access map, and the tensor itself
 Cmim::plug::tensor::phase::SplitOne node of a bracketing: i … j splits after s
 Cmim::World::State
 Cmim::SwitchMatches a jump table (target_0, target_1, ...)#index where index is a non-Literal Idx n and n the arity
  Cmim::DispatchMatches (target_0, target_1, ...)#index arg
  Cmim::SelectMatches (ff, tt)#cond - where cond is a Bool but not a Literal
   Cmim::BranchMatches (ff, tt)#cond arg where cond is not a Literal
 Cmim::ast::Tok
 Cstd::unordered_map
  Cmim::ast::AST::Files
 Cmim::UseConst Def*erences a user
 Cmim::UseEq
 Cmim::UseHash
 Cmim::Version
 Cfe::VLA
  Cmim::ast::AxmDeclaxm dbg: type, normalizer, curry, trip; or a family axm (name, ...): type, normalizer, curry, trip;
  Cmim::ast::AxmDecl::Namedbg = alias_0 = ... = alias_n-1 - one axiom of the family, which each of its names binds to
  Cmim::ast::DeclExprdecls expr or expr where decls if DeclExpr::is_where
  Cmim::ast::LamDecltag dbg dom_0 ... dom_n-1: codom = body; with LamDecl::tag lam/con/fun or anonymous λ/cn/fn
  Cmim::ast::MatchExprmatch scrutinee with | arm_0 | ... | arm_n-1
  Cmim::ast::MutualDeclmutual decl* end groups RecDecls that may refer to each other
  Cmim::ast::Pathdbg_0.....dbg_n-1
  Cmim::ast::TupleExpr(elem_0, ..., elem_n-1)
  Cmim::ast::TuplePtrn(ptrn_0, ..., ptrn_n-1), [ptrn_0, ..., ptrn_n-1], or {ptrn_0, ..., ptrn_n-1}
  Cmim::ast::VariantExpr| ctor_0: type_0 | ... | ctor_n-1: type_n-1; a constructor without a type carries []
 Cmim::detail::w2f_< int >
 Cmim::detail::w2s_< int >
 Cmim::detail::w2s_< 1 >See above
 Cmim::detail::w2s_< 16 >
 Cmim::detail::w2s_< 32 >
 Cmim::detail::w2s_< 64 >
 Cmim::detail::w2s_< 8 >
 Cmim::detail::w2u_< int >
 Cmim::detail::w2u_< 1 >Map both signed 1 and unsigned 1 to bool
 Cmim::detail::w2u_< 16 >
 Cmim::detail::w2u_< 32 >
 Cmim::detail::w2u_< 64 >
 Cmim::detail::w2u_< 8 >
 Cmim::WorldThe World represents the whole program and manages creation of MimIR nodes (Defs)
 Cconst bool
 Cint
 Clist< DFANode >
 Clist< NFANode >
 Cstatic constexpr bool