Я хочу вставить определенный код операции перед терминатором BasicBlock, в моем случае перед ReturnInst.
Возможно?
Пример:
TerminatorInst* terminator = BasicBlock->getTerminator(); if (isa<ReturnInst>(terminator)) { //Insert opcode here. }
Я хочу вставить определенный код операции перед терминатором BasicBlock, в моем случае перед ReturnInst.
Возможно?
Пример:
TerminatorInst* terminator = BasicBlock->getTerminator(); if (isa<ReturnInst>(terminator)) { //Insert opcode here. }
Под «кодом операции», я думаю, вы имеете в виду «инструкцию».
Все инструкции имеют конструктор, который получает другую инструкцию в качестве последнего параметра; этот конструктор создает новую инструкцию, а затем вставляет ее прямо перед инструкцией, которая была указана в качестве последнего аргумента, именно то, что вы ищете.
Дополнительные сведения об этом см. в разделе "создание и вставка новой инструкции" раздел руководства пользователя.
Проблема решена с помощью llvm::InlineAsm
llvm::InlineAsm *AsmCode = llvm::InlineAsm::get(Asm, nopInstruction, "", true, false, llvm::InlineAsm::AD_Intel);
где Asm - llvm::FunctionType, nopInstruction - llvm::StringRef(char*)