Types #
An instrinsically well-typed variable
Equations
- MLIR.SimplyTyped.Var Γ ty = { v : MLIR.VarName // Γ.hasType v ty }
Instances For
A list of instrinsically well-typed variables
Equations
- MLIR.SimplyTyped.VarList Γ tys = { vs : List MLIR.VarName // vs.length = tys.length ∧ ∀ v ∈ vs.zip tys, Γ.hasType v.1 v.2 }
Instances For
An Expr
binds the result of a single operation to a new variable. Morally, it represents
$varName = $op($args) { $regions }
Equations
- MLIR.SimplyTyped.Expr Op Γ ty = { expr : MLIR.UnTyped.Expr Op MLIR.VarName // MLIR.SimplyTyped.Expr.WellTyped Γ expr ty }
Instances For
Lets
is an intrinsically well-typed sequence of operations, which grows downwards.
That is, the head of the list represents the first operation to be executed
Equations
- MLIR.SimplyTyped.Lets Op Γ_in Γ_out = { lets : MLIR.UnTyped.Lets Op MLIR.VarName // MLIR.SimplyTyped.Lets.WellTyped Γ_in lets Γ_out }
Instances For
RevLets
is an intrinsically well-typed sequence of operations, which grows upwards.
That is, the head of the list represents the last operation to be executed, and in particular,
may refer to any variables defined in the tail of the list
Equations
- MLIR.SimplyTyped.RevLets Op Γ_in Γ_out = { lets : MLIR.UnTyped.Lets Op MLIR.VarName // MLIR.SimplyTyped.Lets.WellTyped Γ_in (MLIR.UnTyped.Lets.mk lets.inner.reverse) Γ_out }
Instances For
Equations
- MLIR.SimplyTyped.Body Op Γ ty = { body : MLIR.UnTyped.Body Op MLIR.VarName // MLIR.SimplyTyped.Body.WellTyped Γ body ty }
Instances For
Equations
- MLIR.SimplyTyped.BasicBlock Op ty = { block : MLIR.UnTyped.BasicBlock Op MLIR.VarName // MLIR.SimplyTyped.BasicBlock.WellTyped block ty }
Instances For
Equations
- MLIR.SimplyTyped.Region Op ty = { region : MLIR.UnTyped.Region Op MLIR.VarName // MLIR.SimplyTyped.Region.WellTyped region ty }
Instances For
Equations
- MLIR.SimplyTyped.RegionList Op tys = { regions : List (MLIR.UnTyped.Region Op MLIR.VarName) // MLIR.SimplyTyped.RegionList.WellTyped regions tys }
Instances For
Projections #
Equations
- e.varName = (↑e).varName
Instances For
Equations
- e.op = (↑e).op
Instances For
Equations
- l.inner = (↑l).inner
Instances For
Equations
- MLIR.SimplyTyped.Lets.ofUnTyped lets h = ⟨lets, ⋯⟩
Instances For
The context under which the return statement of a body is typed
Equations
- MLIR.SimplyTyped.Body.returnContext ⟨MLIR.UnTyped.Body.mk lets terminator, property⟩ = MLIR.SimplyTyped.Lets.outContext lets Γ
Instances For
Equations
- MLIR.SimplyTyped.Body.lets ⟨MLIR.UnTyped.Body.mk lets terminator, property⟩ = ⟨lets, ⋯⟩
Instances For
Equations
- MLIR.SimplyTyped.Body.return ⟨MLIR.UnTyped.Body.mk lets terminator, property⟩ = ⟨terminator, ⋯⟩
Instances For
Constructors #
Equations
- MLIR.SimplyTyped.Expr.mk varName op ty_eq args regions = ⟨MLIR.UnTyped.Expr.mk varName op ↑args ↑regions, ⋯⟩
Instances For
The empty sequence of operations
Equations
- MLIR.SimplyTyped.Lets.nil = ⟨MLIR.UnTyped.Lets.mk [], ⋯⟩
Instances For
Add a new operation to the top of the sequence, abstracting over a previously free variable
Equations
- MLIR.SimplyTyped.Lets.lete e lets = ⟨MLIR.UnTyped.Lets.mk (↑e :: lets.inner), ⋯⟩
Instances For
Equations
- MLIR.SimplyTyped.Body.mk lets ret = ⟨MLIR.UnTyped.Body.mk ↑lets ↑ret, ⋯⟩
Instances For
Return an empty Body
, whose terminator is "return v
"
Equations
- MLIR.SimplyTyped.Body.mkReturn v = MLIR.SimplyTyped.Body.mk MLIR.SimplyTyped.Lets.nil v
Instances For
Add a new operation to the top of a Body
, abstracting over a previously free variable
Equations
- MLIR.SimplyTyped.Body.lete e ⟨MLIR.UnTyped.Body.mk lets ret, h_body⟩ = MLIR.SimplyTyped.Body.mk (MLIR.SimplyTyped.Lets.lete e ⟨lets, ⋯⟩) ⟨ret, ⋯⟩
Instances For
Eliminators / Induction Principles #
Equations
- MLIR.SimplyTyped.Expr.recOn mk ⟨MLIR.UnTyped.Expr.mk varName op args regions, h⟩ = cast ⋯ (mk varName op ⋯ ⟨args, ⋯⟩ ⟨regions, ⋯⟩)
Instances For
Equations
- One or more equations did not get rendered due to their size.
- MLIR.SimplyTyped.Lets.recOn nil lete ⟨MLIR.UnTyped.Lets.mk (e :: lets), h⟩ = cast ⋯ (lete ⟨e, ⋯⟩ ⟨MLIR.UnTyped.Lets.mk lets, ⋯⟩)