Took me a while to figure out whether it's interpreters for C programs or if there's a particular class of interpreters called "C". Turns out it's about interpreters implemented in C that they use modified LLVM to do the retrofitting, but couldn't it be applicable for other languages with LLVM IR, or other switch-in-a-loop patterns in C?
It's quite impressive they're able to take nearly arbitrary C and do this! Very similar to what pypy is doing here, but for C, and not a python subset.
However not without downsides. It sounds like average code is only 2x faster than Lua, vs. LuaJit which is often 5-10x faster.
I find rather strange the complaint about compatibility across JIT implementations, there is exactly the same problem across any programming language with multiple implementations, interpreters, compilers, JIT, whatever.
Sounds very promising. Although right now I’m working on a project together with MLIR.
It's truly a good thing to see a project like this in the era of Vibe Coding taking flight :)
Why do they need to change LLVM? Why can't they make this another LLVM IR pass?
i tend to think of myself as a computing nerd, but posts like this one make me realize that i don't even rate on the computing nerd scale.
TL;DR compile with a fork of LLVM that enables runtime IR tracing. Very clever!
Those interested in this type of work can also visit https://cfallin.org/blog/2024/08/28/weval/. The difference is that they use this technique to derive an AOT compiler.