For those who haven't explored LLVM, it's an incredibly powerful technology and rather approachable for getting started with.

A few of my favorite LLVM discoveries:

- If you want to build Clang (LLVM C/C++ Compiler), it's really simple to pull down and build with little external development tooling (only a compiler and CMake). Shown here [0].

- You can pull LLVM/Clang master and use that for a "bleeding-edge" toolchain with a high degree of stability. [0].

- Clang is used to compile Chromium and Firefox on all platforms. Both have seen great performance gains from Clang's link time optimization. [1] [2]

- Klee is built on LLVM infrastructure and is used for automatic generation of test cases. [3] See some of their papers for how powerful their results are.

- Clang can now produce ABI compatible binaries with MSVC and has support for the Visual Studio debugger. [4]

- Lots of interesting research projects leveraging LLVM [5]

[0] https://www.youtube.com/watch?v=uZI_Qla4pNA

[1] http://blog.llvm.org/2018/03/clang-is-now-used-to-build-chro...

[2] https://glandium.org/blog/?p=3888

[3] https://klee.github.io

[4] http://blog.llvm.org/2017/08/llvm-on-windows-now-supports-pd...

[5] https://scholar.google.com/scholar?as_ylo=2017&q=LLVM&hl=en&...

Klee is also a great example of the cost of LLVM's never-backwards-compatible approach: according to their home page, the stable release of Klee runs on 3.4 and 3.8 is "experimental". (The LLVM releases since then have included: 3.9, 4.0, 5.0, 6.0, and 7.0.)

Don't get me wrong, LLVM is great, but I really wish that as the project matured they had made more of an effort to provide some level of compatibility. As it is, it's a massive pain for open source projects to follow along.

Counterpoint - I implemented a Common Lisp compiler that uses llvm as the back end (https://github.com/clasp-developers/clasp). I've kept up with the versions from 3.6 to 6.0 and I'm about to upgrade to 7.0.

I'm not sure why other projects find this difficult but I have noticed that if I get too far behind it does get a bit more difficult.

I exposed the C++ API to Common Lisp and write all of the compiler in Common Lisp. The Clang C++ compiler tells me what is broken when I upgrade to a new version of llvm and then I fix it. I talk about it here https://www.youtube.com/watch?reload=9&v=mbdXeRBbgDM&feature... at about 13:30