I am learning programming LLVM backends.
Currently I am interested in analysis passes, later program transformations. (I assume as I will be more fluent with analysis then will be time for program transformations).
Could you recommend resources for learning ? (I know LLVM Programmers manual and Dragon Book ;) ).
By resources I mean not only tutorials, books, but especially small well-written projects. I'd like to read code examples, compile them and play with them (hack a little bit) to learn more about practical implementation.
Those codes does not have to be restricted to analysis part. The topic is LLVM backend programming in general, while analysis and program transformations are most interesting.
The backend of LLVM features a target-independent code generator that may create output for several types of target CPUs — including X86, PowerPC, ARM, and SPARC. The backend may also be used to generate code targeted at SPUs of the Cell processor or GPUs to support the execution of compute kernels.
LLVM is written in C++ and is designed for compile-time, link-time, run-time, and "idle-time" optimization.
LLVM itself is written in C++. LLVM's APIs are available in C and C++ incarnations.
LLVM IR is a low-level intermediate representation used by the LLVM compiler framework. You can think of LLVM IR as a platform-independent assembly language with an infinite number of function local registers.
All LLVM transformations are organized as self-contained passes inside lib/Transforms dir, You can read its sources and run any arbitrary pass on your code using opt
tool.
Also, there is nice tutorial on how to write your own pass and use it as loadable module without recompiling whole LLVM.
So there is pretty wide playground already.
As someone that did what you want to do 3 years ago: LLVM codebase has the best examples. Maybe a good place to start is dominator analysis, as it is well described in compiler books.
Check how it is done in LLVM: http://llvm.org/doxygen/Dominators_8h_source.html
Other place to look might be instruction scheduling.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With