I wonder if you could use clang/llvm to do a super-JIT by having it recompile its IR as the program runs, taking advantage of profiling to optimize the hot paths.
Profile guided optimization is a static operation that's done after profiling the running app - unless the state of the art has changed in the last few years.