Karl Meakin

Results 26 issues of Karl Meakin

Rewrites operations on `select` to `select` on operations (eg `ineg(select(cond, x, y)) => select(cond, ineg(x), ineg(y))`. This transform is not obviously beneficial by itself, but it may expose more opportunities...

cranelift
isle

#### Feature The condition codes for performing the `>` and `>=` comparisons on integers should be removed from the Cranelift IR #### Benefit Makes the IR more strongly normalizing. At...

cranelift
cranelift:area:clif

Fixes #507 When record types are quoted, the size of the environment is incremented with each field. But this is not done when record types are *created* during synthesis of...

``` // synthesises type `fun (A: Type) (B : Type) -> {x: A, y: B}` def good_id = fun (A: Type) (B: Type) (p: {x: A, y: B}) => ({x...

* Adds record and tuple patterns. * This required rewriting the pattern match compiler and coverage checker, following the algorithms outlined in [Compiling pattern matching to good decision trees](https://dl.acm.org/doi/10.1145/1411304.1411311) and...

Distinguish between the three ways that `RecordProj` can be an error: * The head expression is not a record (eg `Type.foo`) * The head expression is a record, but it...

* Move duplicated logic for synth/checking let terms into `synth_let_def` and add `LetDef` struct. * Replace some uses of `let initial_len = self.local_env.len(); ...; self.local_env.truncate(initial_len)` with `self.with_scope(|this| ...)` * Use...

Distinguish between the two different ways that `FunApp` can be an error: * Trying to apply any number of arguments to an expression that is not a function (eg `Type...

* Removes the `Array8`, `Array16` and `Array32` types and their corresponding functions, leaving only `Array64`. * Added `_extend_` and `_truncate_` for all integer types * ~~Implicitly insert extension functions during...