summaryrefslogtreecommitdiff
path: root/src/constant_propagation_mutrec.ml
AgeCommit message (Collapse)Author
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).