| 
    MimIR 0.1
    
   MimIR is my Intermediate Representation 
   | 
 
| ▼Nautomaton | |
| CAutomatonBase | |
| CDFA | |
| ▼CDFANode | |
| CLt | |
| CNFA | |
| CNFANode | |
| CRangeCompare | |
| ▼Nmim | |
| ▼Nast | |
| CAliasPtrn | ptrn as id  | 
| CAnnexInfo | |
| CAnnexInfo.id | |
| CAnnexInfo.sym | |
| CAppExpr | callee arg  | 
| CArrowExpr | dom -> codom  | 
| CAST | |
| ▼CAxmDecl | axm ptrn: type = value;  | 
| CAlias | |
| CCDecl | cfun dbg dom -> codom  | 
| CDecl | |
| CDeclExpr | decls e or e where decls if where is true  | 
| CDummyDecl | |
| CEmitter | |
| CErrorExpr | |
| CErrorPtrn | |
| CExpr | |
| CExtractExpr | tuple#index  | 
| CGrpPtrn | If you have x1 x2 x3 x4: T it consists of 3 GrpPtrns and 1 IdPtrn while each GrpPtrn references the last IdPtrn  | 
| CHoleExpr | |
| CIdExpr | sym  | 
| CIdPtrn | dbg: type  | 
| CImport | |
| CInjExpr | value inj t1 ∪ t2  | 
| CInsertExpr | ins(tuple, index, value)  | 
| ▼CLamDecl | One of: | 
| CDom | |
| CLamExpr | Wraps a LamDecl as Expr | 
| CLetDecl | let ptrn: type = value;  | 
| CLexer | |
| CLitExpr | tok:type  | 
| ▼CMatchExpr | |
| CArm | |
| CModule | |
| CNode | |
| CParser | Parses Mim code as AST | 
| ▼CPiExpr | One of: | 
| CDom | |
| CPrimaryExpr | tag  | 
| CPtrn | |
| CR | |
| CRecDecl | .rec dbg: type = body  | 
| CRetExpr | ret ptrn = callee $ arg; body  | 
| CRuleDecl | Rewrite rules rule (x:T, y:T) : x+y => y+x (when ); all meta variables have to be introduced | 
| CS | |
| CScopes | |
| CSeqExpr | «dbg: arity; body» or ‹dbg: arity; body›  | 
| CSigmaExpr | Just wraps TuplePtrn as Expr | 
| CTok | |
| CTupleExpr | (elem_0, ..., elem_n-1)  | 
| CTuplePtrn | (ptrn_0, ..., ptrn_n-1), [ptrn_0, ..., ptrn_n-1], or {ptrn_0, ..., ptrn_n-1}  | 
| CTypeExpr | Type level  | 
| CUnionExpr | t1 ∪ t2  | 
| CUniqExpr | ⦃ expr ⦄  | 
| CValDecl | |
| ▼Nlct | |
| CNode | This is an intrusive Link-Cut-Tree | 
| ▼Nll | |
| CBB | |
| CEmitter | |
| ▼Nplug | |
| ▼Naffine | The affine Plugin | 
| ▼Nphase | |
| CLowerFor | Lowers the for axm to actual control flow in CPS | 
| ▼Nautodiff | The automatic differentiation Plugin | 
| CEval | This pass is the heart of AD | 
| ▼Nclos | The clos Plugin | 
| CBranchClosElim | |
| CClos2SJLJ | |
| CClosConv | Performs typed closure conversion | 
| CClosConvPrep | |
| CClosLit | Wrapper around a Def that can be used to match closures (see isa_clos_lit) | 
| CFreeDefAna | Transitively compute free Def's on demand | 
| CLowerTypedClos | This pass lowers typed closures to untyped closures | 
| CLowerTypedClosPrep | |
| ▼Ndirect | The direct style Plugin | 
| CCPS2DS | This is the second part of ds2cps | 
| CDS2CPS | Converts direct style function to cps functions | 
| ▼Nmatrix | The matrix Plugin | 
| CLowerMatrixHighLevelMapRed | Resolves lowering of high level operations into medium/other high-level operations | 
| CLowerMatrixLowLevel | In this phase, we lower all matrix operations and types to the low-level representation using pointers | 
| CLowerMatrixMediumLevel | In this step, we lower map_reduce operations into affine for loops making the iteration scheme explicit  | 
| ▼Nmem | The mem Plugin | 
| ▼Npass | |
| CCopyProp | This FPPass is similar to sparse conditional constant propagation (SCCP) | 
| CReshape | The general idea of this Pass is to change the shape of signatures of functions | 
| ▼CSSA | SSA construction algorithm that promotes slots, loads, and stores to SSA values | 
| CInfo | |
| ▼Nphase | |
| CAddMem | This phase adds mems to all lambdas and continuations | 
| ▼Nregex | The regex Plugin | 
| Capp_range | |
| CLowerRegex | |
| CAnnex | Holds info about an entity defined within a Plugin (called Annex) | 
| CApp | |
| CArr | A (possibly paramterized) Array | 
| ▼CAxm | |
| CIsA | |
| CIsANode | |
| CBetaRed | Optimistically performs β-reduction (aka inlining) | 
| CBetaRedPhase | Inlines in post-order all Lams that occur exactly once in the program | 
| ▼CBitSet | |
| Creference | |
| CBound | Common base for TBound | 
| CBranch | Matches (ff, tt)#cond arg  | 
| CBranchNormalizePhase | Inlines in post-order all Lams that occur exactly once in the program | 
| CChecker | |
| CCleanup | Removes unreachable and dead code by rebuilding the whole World into a new one and swapping them afterwards  | 
| CClosedMutPhase | Transitively visits all reachable, closed mutables in the World | 
| CDbg | |
| CDef | Base class for all Defs | 
| CDriver | Some "global" variables needed all over the place | 
| CElem | Use with print to output complicated std::ranges::ranges  | 
| CEmitter | |
| ▼CError | |
| CMsg | |
| CEtaExp | Performs η-expansion: f -> λx.f x, if f is a Lam with more than one user and does not appear in callee position  | 
| CEtaExpPhase | This phase takes care that Lamdas appear either only in callee position (Known) or not (Unknown) | 
| CEtaRed | Performs η-reduction | 
| CEtaRedPhase | Inlines in post-order all Lams that occur exactly once in the program | 
| CExt | Common base for TExtremum | 
| CExtract | Extracts from a Sigma or Array-typed Extract::tuple the element at position Extract::index | 
| CFlags | Compiler switches that must be saved and looked up in later phases of compilation | 
| CFNV1 | |
| CFNV1< 4 > | |
| CFNV1< 8 > | |
| CFPPass | Inherit from this class using CRTP, if you do need a Pass with a state and a fixed-point | 
| CGIDHash | |
| CGIDLt | |
| CGlobal | |
| CHole | This node is a hole in the IR that is inferred by its context later on | 
| CIdx | A built-in constant of type Nat -> *  | 
| CIndexMap | |
| ▼CIndexSet | |
| Creference | |
| CInj | Constructs a Join value | 
| CInsert | Creates a new Tuple / Pack by inserting Insert::value at position Insert::index into Insert::tuple | 
| CLam | A function | 
| CLamSpec | |
| CLit | |
| CLog | Facility to log what you are doing | 
| CMatch | Scrutinize Match::scrutinee() and dispatch to Match::arms | 
| CMerge | Constructs a Meet value | 
| CNat | |
| ▼CNest | Builds a nesting tree of all immutables/binders | 
| CNode | |
| CNestPhase | Like ClosedMutPhase but computes a Nest for each NestPhase::visit | 
| CPack | A (possibly paramterized) Tuple | 
| CPass | All Passes that want to be registered in the PassMan must implement this interface | 
| CPassMan | An optimizer that combines several optimizations in an optimal way | 
| CPassManPhase | Wraps a PassMan pipeline as a Phase | 
| CPhase | As opposed to a Pass, a Phase does one thing at a time and does not mix with other Phases | 
| CPhaseMan | Organizes several Phases in a a pipeline | 
| CPi | A dependent function type | 
| CPlugin | Basic info and registration function pointer to be returned from a specific plugin | 
| CPrefixCleanup | |
| CProd | Base class for Sigma and Tuple | 
| CProxy | |
| CReform | Type formation of a rewrite Rule | 
| CRepl | Simple Stage that searches for a pattern and replaces it | 
| CReplMan | |
| CReplManPhase | |
| CRes | Utility class when folding constants in normalizers | 
| CRetWrap | |
| CRewriter | Recurseivly rebuilds part of a program into the provided World w.r.t. Rewriter::map | 
| CRule | A rewrite rule | 
| CRWPass | Inherit from this class using CRTP, if your Pass does not need state and a fixed-point iteration | 
| CRWPhase | Rewrites the RWPhase::old_world into the RWPhase::new_world and swaps them afterwards  | 
| CScalarize | Perform Scalarization (= Argument simplification) | 
| CScheduler | |
| CSelect | Matches (ff, tt)#cond - where cond is not a Literal  | 
| CSeq | Base class for Arr and Pack | 
| ▼CSets | |
| ▼CSet | |
| Citerator | |
| CSetters | CRTP-based mixin to declare setters for Def::loc & Def::name using a covariant return type | 
| CSigma | A dependent tuple type | 
| CSpan | This is a thin wrapper for std::span<T, N> with the following additional features:  | 
| CSplit | Picks the aspect of a Meet [value](Pick::value) by its [type](Def::type) | 
| CStage | Common base for Phase and Pass | 
| CTab | Keeps track of indentation level | 
| CTailRecElim | |
| CTBound | Specific Bound depending on Up  | 
| CTExt | Extremum. Either Top (Up) or Bottom  | 
| CTuple | Data constructor for a Sigma | 
| CType | |
| CUInc | |
| CUMax | |
| CUniq | A singleton wraps a type into a higher order type | 
| Cunique_queue | |
| Cunique_stack | |
| CUniv | |
| CUse | Const Def*erences a user | 
| CUseEq | |
| CUseHash | |
| CVar | A variable introduced by a binder (mutable) | 
| CVarRewriter | |
| CVector | This is a thin wrapper for absl::InlinedVector<T, N, A> which is a drop-in replacement for std::vector<T, A>  | 
| ▼CWorld | The World represents the whole program and manages creation of MimIR nodes (Defs) | 
| CFreezer | Use to World::freeze and automatically unfreeze at the end of scope | 
| CMove.arena | |
| CScopedLoc | |
| ▼CState | |
| CPOD | Plain Old Data | 
| CZonker | |
| ▼Nstd | |
| Ctuple_element< I, mim::Span< T, N > > | |
| Ctuple_size< mim::Span< T, N > > |