| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2018-03-14 | Remove unnecessary size_itself_int uses in guards (for Lem) | Brian Campbell | |
| Doesn't remove them from function bodies because that can produce more work for the sizeof rewriting. | |||
| 2018-03-13 | Add test for mutual recursion and monomorphisation | Brian Campbell | |
| 2018-03-13 | Support a few more set constraints in mono | Brian Campbell | |
| 2018-03-07 | Make union types consistent in the AST | Alasdair Armstrong | |
| Previously union types could have no-argument constructors, for example the option type was previously: union option ('a : Type) = { Some : 'a, None } Now every union constructor must have a type, so option becomes: union option ('a : Type) = { Some : 'a, None : unit } The reason for this is because previously these two different types of constructors where very different in the AST, constructors with arguments were used the E_app AST node, and no-argument constructors used the E_id node. This was particularly awkward, because it meant that E_id nodes could have polymorphic types, i.e. every E_id node that was also a union constructor had to be annotated with a type quantifier, in constrast with all other identifiers that have unquantified types. This became an issue when monomorphising types, because the machinery for figuring out function instantiations can't be applied to identifier nodes. The same story occurs in patterns, where previously unions were split across P_id and P_app nodes - now the P_app node alone is used solely for unions. This is a breaking change because it changes the syntax for union constructors - where as previously option was matched as: function is_none opt = match opt { Some(_) => false, None => true } it is now matched as function is_none opt = match opt { Some(_) => false, None() => true } note that constructor() is syntactic sugar for constructor(()), i.e. a one argument constructor with unit as it's value. This is exactly the same as for functions where a unit-function can be called as f() and not as f(()). (This commit also makes exit() work consistently in the same way) An attempt to pattern match a variable with the same name as a union-constructor now gives an error as a way to guard against mistakes made because of this change. There is probably an argument for supporting the old syntax via some syntactic sugar, as it is slightly prettier that way, but for now I have chosen to keep the implementation as simple as possible. The RISCV spec, ARM spec, and tests have been updated to account for this change. Furthermore the option type can now be included from $SAIL_DIR/lib/ using $include <option.sail> | |||
| 2018-02-27 | Make constant propagation of slicing more general | Brian Campbell | |
| 2018-02-22 | Curtail at more false assertions | Brian Campbell | |
| (plus some adjustments for the test case) | |||
| 2018-02-21 | Implement more builtins in constant propagation | Brian Campbell | |
| 2018-02-21 | Cut out dead if branches according to the type environment during mono | Brian Campbell | |
| const progagation. Needed to avoid negative bitvector sizes on aarch64 Also propagate values found from "if var = const ...", which is needed in aarch64 | |||
| 2018-02-20 | Remove temporary debugging message | Brian Campbell | |
| 2018-02-20 | Bump up case split limit for now | Brian Campbell | |
| 2018-02-20 | Rework atom-to-itself transformation to check for equivalent size nexps | Brian Campbell | |
| 2018-02-14 | Another mono rewrite for aarch64 | Brian Campbell | |
| 2018-02-14 | Support monorphisation analysis of bitvectors inside existentials | Brian Campbell | |
| 2018-02-14 | Pick up more equivalent type variables in monomorphisation | Brian Campbell | |
| 2018-02-14 | Handle simple returns in constant propagation | Brian Campbell | |
| Useful for feature functions, e.g. HaveFP16Ext | |||
| 2018-02-13 | Some support in mono for extra fresh tyvars generated in the typechecker | Brian Campbell | |
| (still some work to do in AtomToItself rewrite, but should work despite error messages) | |||
| 2018-02-08 | Add (most of) the bitvector cast insertion transformation | Brian Campbell | |
| to help Lem go from a general type `bits('n)` to a specific type `bits(16)` at a case split, and the other way around for a returned value. Doesn't handle function clause patterns yet | |||
| 2018-02-06 | Add aux constructor to type patterns for consistency | Alasdair Armstrong | |
| 2018-02-05 | Merge changes to type_check.ml | Alasdair Armstrong | |
| 2018-02-05 | Add typ patterns for destructuring existentials | Alasdair Armstrong | |
| 2018-02-02 | When cutting functions short at assertions, put an exit to correct types | Brian Campbell | |
| if necessary | |||
| 2018-02-02 | Also rewrite boolean terms in asserts during monomorphisation | Brian Campbell | |
| (otherwise wildcard cases won't be cut short at the assertion) | |||
| 2018-02-01 | Fix atom -> itself transformation when clauses feature different set of sizes | Brian Campbell | |
| 2018-02-01 | Curtail function bodies at known-false assertions during mono | Brian Campbell | |
| (preventing non-monomorphised sizes appearing in wildcard cases) | |||
| 2018-02-01 | Proper substitution and propagation of size from last commit | Brian Campbell | |
| 2018-02-01 | Substitute extra size case splits into body in monomorphisation | Brian Campbell | |
| 2018-02-01 | Make mono add case expressions for size tyvars without a corresponding arg | Brian Campbell | |
| 2018-01-31 | Find buried set constraints in asserts | Brian Campbell | |
| 2018-01-31 | Fix mono continue away option | Brian Campbell | |
| 2018-01-30 | Handle 'N == 1 | 'N == 2 | ... style set constraints in mono | Brian Campbell | |
| 2018-01-30 | Optionally give *all* monomorphisation errors at once | Brian Campbell | |
| (and stop afterwards unless asked) | |||
| 2018-01-30 | Fix monomorphisation analysis to detect type variables which need to be | Brian Campbell | |
| concrete but aren't determined by one of the arguments. | |||
| 2018-01-29 | Set maximum split size to work with aarch64 no vector | Brian Campbell | |
| 2018-01-29 | Turn off constraint substitution in mono | Brian Campbell | |
| (Type checker doesn't seem to use false aggressively enough for this) | |||
| 2018-01-29 | Turn off warnings when rechecking after mono | Brian Campbell | |
| 2018-01-29 | Avoid generating (_ as n) in mono, broke atom type rewriting | Brian Campbell | |
| 2018-01-26 | One more mono rewrite | Brian Campbell | |
| 2018-01-26 | Add replacement of complex nexp sizes by equivalent variables in mono | Brian Campbell | |
| 2018-01-26 | Preserve more typing info in monomorphisation for later stages | Brian Campbell | |
| 2018-01-25 | Use set asserts as case splits in monomorphisation | Brian Campbell | |
| 2018-01-25 | Missing type expansion | Brian Campbell | |
| 2018-01-25 | Handle bound variables properly with precise case splitting | Brian Campbell | |
| 2018-01-25 | Basic support for match x[5 .. 2] with case splits | Brian Campbell | |
| 2018-01-25 | Implement basic case splitting based on found case expressions | Brian Campbell | |
| (makes some of the monomorphisation case splits smaller) | |||
| 2018-01-19 | Update monomorphisation for sail2 | Brian Campbell | |
| (no vector type start position, comment syntax) | |||
| 2018-01-18 | Merge remote-tracking branch 'origin/experiments' into sail2 | Alasdair Armstrong | |
| 2018-01-16 | Fix problem with let-bindings in pattern guards | Thomas Bauereiss | |
| Monomorphisation sometimes produces pattern guard with let-bindings, e.g. | ... if (let regsize = size_itself(regsize) in eq(regsize, 32)) -> ... Previously, the rewriting pass for let-bindings (and pattern guards) pulled these out of the guard condition and into the same scope as the case expression, which potentially clashed with let-bindings for the same variables in that case expression. The rewriter now leaves let-bindings in place within pure if-conditions, solving this problem. | |||
| 2018-01-16 | Handle for loops correctly when rewriting size parameters | Brian Campbell | |
| 2018-01-16 | Another useful monomorphisation rewrite | Brian Campbell | |
| 2018-01-15 | Check monomorphisation case split size once for each pattern | Brian Campbell | |
| (rather than for each argument separately) | |||
