Whistler compiles s-expressions to eBPF bytecode and emits ELF object files (no clang/LLVM). It includes an SSA-based optimizer that matches optimized clang code. You can even use it inline in your Common Lisp code, or from your REPL, and have the eBPF code loaded/unloaded without anything touching disk at all.
Blog post with more background: https://atgreen.github.io/repl-yell/posts/whistler/