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::plug::ll::BB
 Cmim::sexpr::BB
 Cmim::ast::BindOne name in a Scope: the Decl it introduces and the Vis of this binding
 Cmim::Checker
 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::ll_nvptx::DeviceEmitFlags
 Cautomaton::DFANode
 Cmim::DispatchMatches a dispatch through a jump table of the form: (target_0, target_1, ...)#index arg where index is not a Literal
 Cmim::DotConfigOptions for Def::dot and World::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::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 >
 Cfe::Lexer
  Cmim::ast::Lexer
 Cautomaton::DFANode::Lt
 Cautomaton::NFANode::Lt
 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
 Cabsl::node_hash_map
  Cmim::ast::AST::Files
 Cmim::detail::NullSafeDefGIDLtLike GIDLt, but the nesting virtual root is represented as a nullptr Def%, which must sort first
 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::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::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::RWBaseCommon base of the two rewriting Phases: RWPhase rebuilds the World, InplaceRWPhase stays in it
   Cmim::InplaceRWPhaseRewrites the current World in place - unlike an RWPhase, which rebuilds a new World
    Cmim::BetaRedInlines in post-order all Lams that occur exactly once in the program
    Cmim::EtaConvCombined η-normalization: folds η-reduction and η-expansion into a single, idempotent phase
   Cmim::RWPhaseRebuilds old_world() into new_world() and then swaps them
    Cmim::BranchNormalizeNormalizes branches: η-expands non-Lam branch targets so that both sides of a (f, t)#cond branch are Lams, as later phases and the backends expect
    Cmim::CleanupRemoves unreachable and dead code by rebuilding the whole World into a new one and swapping them afterwards
    Cmim::LamSpecSpecializes a Lam at its call site by inlining all Pi-typed (i.e. higher-order) arguments
    Cmim::ReplAn RWPhase that searches for a pattern and replaces it
    Cmim::RetWrap
    Cmim::ScalarizePerform Scalarization (= Argument simplification)
    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 clos.attr markers (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.attr.esc or clos.attr.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::SplitOffKernels
    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::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::LowerGetSetLowers the tensor axioms (get, set) to their underlying primitives (extract, insert)
    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
 Cfe::RuntimeCast
  Cmim::DefBase class for all Defs
   Cmim::App
   Cmim::Axm
   Cmim::BoundCommon base for TBound
    Cmim::TBound< false >
    Cmim::TBound< true >
    Cmim::TBound< Up >Specific Bound depending on Up
   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::Global
   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 value
   Cmim::InsertCreates a new Tuple / Pack by inserting Insert::value at position Insert::index into Insert::tuple
   Cmim::LamA function
   Cmim::Lit
   Cmim::MatchScrutinize Match::scrutinee() and dispatch to Match::arms
   Cmim::MergeConstructs a Meet value
   Cmim::Nat
   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::SplitPicks the aspect of a Meet [value](Pick::value) by its [type](Def::type)
   Cmim::Type
   Cmim::UInc
   Cmim::UMax
   Cmim::UniqA singleton wraps a type into a higher order type
   Cmim::Univ
   Cmim::VarA variable introduced by a binder (mutable)
  Cmim::PhaseA Phase performs one self-contained task over the whole World
   Cmim::ClosedMutPhase< Lam >
    Cmim::NestPhase< Lam >
     Cmim::Emitter< std::string, std::string, BB, Emitter >
      Cmim::plug::ll::Emitter
       Cmim::plug::ll_nvptx::DeviceEmitter
       Cmim::plug::ll_nvptx::HostEmitter
      Cmim::sexpr::Emitter
     Cmim::Emitter< Value, Type, BB, Child >
   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::PhaseManOrganizes several Phases into a pipeline
   Cmim::RWBaseCommon base of the two rewriting Phases: RWPhase rebuilds the World, InplaceRWPhase stays in it
   Cmim::Unload
   Cmim::plug::ll::EmitPipeline phase for ll.emit
   Cmim::plug::ll_nvptx::Emit
  Cmim::ast::NodeBase class of all AST nodes
   Cmim::ast::DeclBase class of all declarations; caches the emitted Decl::def
    Cmim::ast::DummyDecl
    Cmim::ast::PtrnBase class of all patterns
     Cmim::ast::AliasPtrnptrn as dbg
     Cmim::ast::ErrorPtrnErroneous pattern
     Cmim::ast::GrpPtrndbg of a group dbg_0 ... dbg_n-1: type that refers to the trailing IdPtrn::id
     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;
     Cmim::ast::AxmDecl::SiblingA further tag sharing AxmDecl::type/normalizer/curry/trip with the AxmDecl that owns them
     Cmim::ast::LetDecllet ptrn = value;
     Cmim::ast::ModDeclmod dbg { decls }; 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::RecDeclrec dbg = body; with an optional and RecDecl::next
      Cmim::ast::LamDecltag dbg dom_0 ... dom_n-1: codom = body; with LamDecl::tag lam/con/fun or anonymous λ/cn/fn
     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::PrimaryExprtag
    Cmim::ast::RetExprret ptrn = callee $ arg; body
    Cmim::ast::RuleExprRule dom
    Cmim::ast::SeqExpr«arity; body» or ‹arity; body› if SeqExpr::is_pack
    Cmim::ast::SigmaExprWraps a TuplePtrn as Expr
    Cmim::ast::TupleExpr(elem_0, ..., elem_n-1)
    Cmim::ast::TypeExprType level
    Cmim::ast::UniqExpr⦃inhabitant⦄
   Cmim::ast::MatchExpr::Armptrn => 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::S
 Cmim::Scheduler
 Cmim::ast::Scopes
 Cmim::SelectMatches (ff, tt)#cond - where cond is not a Literal
  Cmim::BranchMatches (ff, tt)#cond arg where cond is not a Literal
 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< Global >
  Cmim::Global
 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 value
 Cmim::Setters< Insert >
  Cmim::InsertCreates a new Tuple / Pack by inserting Insert::value at position Insert::index into Insert::tuple
 Cmim::Setters< Lam >
  Cmim::LamA function
 Cmim::Setters< Lit >
  Cmim::Lit
 Cmim::Setters< Match >
  Cmim::MatchScrutinize Match::scrutinee() and dispatch to Match::arms
 Cmim::Setters< Merge >
  Cmim::MergeConstructs a Meet value
 Cmim::Setters< Nat >
  Cmim::Nat
 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< Split >
  Cmim::SplitPicks the aspect of a Meet [value](Pick::value) by its [type](Def::type)
 Cmim::Setters< TBound< Up > >
  Cmim::TBound< false >
  Cmim::TBound< true >
  Cmim::TBound< Up >Specific Bound depending on Up
 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< UInc >
  Cmim::UInc
 Cmim::Setters< UMax >
  Cmim::UMax
 Cmim::Setters< Uniq >
  Cmim::UniqA singleton wraps a type into a higher order type
 Cmim::Setters< Univ >
  Cmim::Univ
 Cmim::Setters< Var >
  Cmim::VarA variable introduced by a binder (mutable)
 Cmim::Nest::Node::SiblDeps< Forward >
 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: ij splits after s
 Cmim::World::State
 Cmim::ast::Tok
 Cmim::UseConst Def*erences a user
 Cmim::UseEq
 Cmim::UseHash
 Cmim::Version
 Cfe::VLA
  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::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::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