Как получить адрес, буквально выделенный allocaInstr в llvm?
Я пытаюсь сделать некоторые инструменты над файлом ll. Одна из задач, которую я хочу достичь, заключается в следующем.
Всякий раз, когда я встречаю AllocaInstr, как:
%1 = alloca i32
Я хочу, чтобы инструмент функции call __save_addr()
после этого следующим образом:
%1 = alloca i32
call __save_addr(i32* %1)
Есть ли способ добиться этого?
1 ответ
Решение
Переберите все инструкции в функции. Для каждого,
проверьте, является ли это
AllocaInst
, Если это,Создать новый
CallInst
вызывая вашу функцию * и передаваяAllocaInst
экземпляр в качестве первого аргумента.
* Если ваша функция уже есть в модуле, вы можете найти ее через Module::getFunction
; если он находится в другом модуле, вам нужно создать для него объявление.