implement llvm-ir generator