summaryrefslogtreecommitdiff
path: root/src/constant_propagation_mutrec.ml
AgeCommit message (Collapse)Author
2020-09-29Refactor: Change AST type from a union to a structAlasdair
2020-09-28Refactor: Rename 'a defs to 'a astAlasdair
Change internal terminology so we more clearly distinguish between a list of definitions 'defs' and functions that take an entire abstract syntax trees 'ast'.
2020-09-28Move the ast defs wrapper into it's own fileAlasdair
This refactoring is intended to allow this type to have more than just a list of definitions in future.
2019-11-21Fix bugs in mutrec constant propagationThomas Bauereiss
The val spec generation for partially evaluated function copies did not pick up type variables originally declared using the new "constant" syntax, as well as some implicit existential variables (e.g. in "bool") that were not declared originally but appear and get bound during instantiation. Change the code to just recreate the list of type variables from scratch from the new type. This will lose "constant" annotations, but the new list of type variables should be correct.
2019-07-11Make sure constant folding won't fold external definitions that also have ↵Alasdair Armstrong
sail definitions Definitions can be made external on a per-backend basis, so we need to make sure constant folding doesn't inline external functions that have sail definitions for backends other than the ones we are currently targetting
2019-04-15Merge branch 'sail2' into rmem_interpreterJon French
2019-03-15Add a rewriting pass for constant propagation in mutrecsThomas Bauereiss
Propagating constants into mutually recursive calls and removing dead branches might break mutually recursive cycles. Also make constant propagation use the existing interpreter-based constant folding to evaluate function calls with only constant arguments (as opposed to a mixture of inlining and hard-coded rewrite rules).