Как получить адрес, буквально выделенный allocaInstr в llvm?

Я пытаюсь сделать некоторые инструменты над файлом ll. Одна из задач, которую я хочу достичь, заключается в следующем.

Всякий раз, когда я встречаю AllocaInstr, как:

%1 = alloca i32

Я хочу, чтобы инструмент функции call __save_addr() после этого следующим образом:

%1 = alloca i32

call __save_addr(i32* %1)

Есть ли способ добиться этого?

1 ответ

Решение
  1. Переберите все инструкции в функции. Для каждого,

  2. проверьте, является ли это AllocaInst, Если это,

  3. Создать новый CallInst вызывая вашу функцию * и передавая AllocaInst экземпляр в качестве первого аргумента.

* Если ваша функция уже есть в модуле, вы можете найти ее через Module::getFunction; если он находится в другом модуле, вам нужно создать для него объявление.

Другие вопросы по тегам