LLVM front end  from: http://llvm.org/docs/tutorial/OCamlLangImpl1.html