Как создать новый базовый блок llvm и вставить после другого блока? - PullRequest
0 голосов
/ 12 апреля 2020

Я пишу несколько кодов для вставки некоторых инструкций в базовый блок llvm ,, и мне нужно создать новый базовый блок для вставки после блока , Я попытался

LLVM :: BasicBlock b = LLVM :: BasicBlock ()

Но я не знаю, какие параметры следует записать вLLVM :: BasicBlock ,, и я не знаю, как назвать BasicBlock

Так что вы могли бы помочь мне создать новый llvm BasicBlock и вставить после другого блока?

1 Ответ

0 голосов
/ 12 апреля 2020

В иерархии 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 будут генерировать инструкции в этом блоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...