Tutorial from http://www.stephendiehl.com/llvm/