Automatically generate equality saturation based compilers using equality saturation and some cleverness.
Check out our artifact evaluation here: artifact-evaluation.org
This is the main library that implements the rule generation and rule phasing algorithms.
This is an implementation of Diospyros using comp-gen
. Right now it’s using Ruler directly to do synthesis, rather than implementing the Interpreter
trait. However it is using the Compiler
structure in the comp-gen
library.
This is where most the work is happening right now.
An experimental equality saturation compiler for a simple imperative language. This is an experiment to see if this technique of automatically constructing an equality saturation based compiler can generalize beyond Diospyros.
Trying comp-gen
on the cranelift e-graph thing would be cool.
Experimenting with how deeper rules change results. We have this note in the paper about increasing the number of rules that apply in each phase let’s use get away with using fewer iterations of equality saturation.
In general, it seems like there is this tradeoff between how much exploration we do in rule-generation vs. at equality saturation time. Understanding what this trade-off is seems interesting and probably useful.
Think about rules that allow cross lane interactions.
We have these metrics on the rules. It should be relatively straight-forward to use something like clustering to automatically select phases.
Can we be smarter about how we prune the e-graph? At the moment, we just throw away the entire thing. Can we do better than this? Can we define some part of the e-graph that is likely to be useful?