upvote
Egraphs are for optimization passes, which operate on the same IR, and (without egraphs) may undo and/or prevent each other and are repeated for more optimization.

Nanopass is compiler passes, which each have their own IR, and run once in a fixed sequence.

Egraphs also require the IR to be defined a specific way, which prevents some optimizations. My understanding of https://github.com/bytecodealliance/rfcs/blob/main/accepted/... is that cranelift’s egraph optimizations are pure expression reordering/duplication/deduplication and rewrite rules.

reply
It's the first I've heard of them. Looks like the research goes back to 1980, but good libraries seem fairly new?

https://blog.sigplan.org/2021/04/06/equality-saturation-with...

reply
Recent related discussion/blog[1].

[1] The acyclic e-graph: Cranelift's mid-end optimizer https://news.ycombinator.com/item?id=47717192

reply