I gave a lecture about LLVM.
The slides are available here: http://github.com/ujihisa/onsg9/blob/master/slides.md
I emphasized the following points. The optimizer of LLVM is awesome. I explained it with giving an example code.
First, I generated a very long helloworld code. To generate lavish code, I used a Brainf**k compiler. The helloworld written in Brainf**k doesn't have something like String literal, so it's natural that the code is longer than necessary, therefore the generated LLVM assembly language code would be lavish as well.
$ bfc.rb --llvm helloworld.bf > helloworld.ll
The line number of the automatically generated LLVM assembly language code was 2714. Here let me optimize the code.
$ llvms helloworld.ll -o a.bc
$ opt -O3 a.bc -o a2.bc
$ opt -O3 a2.bc -o a3.bc
$ llvm-dis a3.bc -o > a.ll
The optimized code, a.ll
, is semantically equivalent to the original helloworld.ll
, though the lines of code is only 25.
All attendees were surprized about the result.