llvm refactoring