Работа над исследовательским проектом, который требует добавления инструкций по загрузке в анализируемый ИК-код LLVM для загрузки в функцию func_A
адресов, которые были выделены в отдельной функции func_B
с использованием IRBuilder
. Пример показан следующим образом.
define void @func_B() {
%1 = alloca [1 x i32], align 4
}
define void @func_A() {
// load the address allocated above here using IRBuilder in an analysis pass
// to the IR code, something like the following:
// IRBuilder<> builder();
// builder.CreateLoad(val);
}
Мне удалось найти подлежащий загрузке llvm:value*
, то есть val
в приведенном выше примере, но проблема в том, что val
является локальным идентификатором, объявленным в func_B
и может конфликтовать с Идентификаторы func_A
(скажем, func_A
также объявляет локальный идентификатор с именем %1
) при загрузке в func_A
.
Как я могу загрузить func_B
%1
без конфликтов в func_A
? Обратите внимание, что я не могу передать %1
в func_A
в качестве параметра функции, поскольку я не хочу ничего менять в ИК-коде, но добавляю некоторые инструкции по загрузке.
Любая помощь будет принята с благодарностью!