В иерархии llvm инструкции связаны с блоком basi c, блоками basi c, связанными с функцией, и функциями с модулем. Чтобы создать базовый c блок,
BasicBlock* mainblock = BasicBlock::Create(context, "entrypoint", mainFunction);
, где entrypoint
- это имя блока, а mainfunction
- это функция, содержащая блок (которую вы, конечно, должны были уже объявить).
Передача инструкций в llvm достигается с помощью экземпляра класса IRBuilder<>
, конструктор которого принимает экземпляр llvm::LLVMContext
. то есть
llvm::LLVMContext context;
IRBuilder<> builder(context);
Этот экземпляр строителя похож на вашу ручку для испускания llvm ir. Чтобы поместить кончик пера на определенную страницу, т.е. указать, в какой блок basi c он выходит, просто вызовите
builder.SetInsertPoint(mainblock);
, где mainblock
- это блок basi c, в который мы хотим записать , Отныне все вызовы builder
будут генерировать инструкции в этом блоке.