I'm a big fan of segmented stacks (or 'split stacks'), where stack frames are heap allocated, You can write recursive functions with less worry, and you get better tracebacks than TCO.
Go is the most popular language with this feature, to my knowledge: https://dave.cheney.net/2013/06/02/why-is-a-goroutines-stack-infinite
I'd assumed that LLVM didn't support this, but gollvm handles it fine! https://groups.google.com/g/golang-nuts/c/ivOZ-j6Zt2c/m/BUBX2Td9BgAJ
miniblog.
Related Posts
LLVM's lit tool for testing files is the most successful testing DSL I've ever seen. It's used a decent number of projects outside of LLVM.
By contrast I don't see many folks using e.g. Cucumber these days.
Wonderful post from the lead LLVM maintainer reflecting on how the project is run, the design issues in LLVM today, and opportunities to make it better:
Bril is a cute intermediate language for teaching (think simplified LLVM IR): https://www.cs.cornell.edu/~asampson/blog/bril.html
The idea of providing a standard JSON format to help students write basic passes is really elegant.