Создание локальной переменной в функции LLVM - PullRequest
0 голосов
/ 12 мая 2018

В llvm::Module есть 2 интересных поля:

typedef SymbolTableList<Function> FunctionListType;
typedef SymbolTableList<GlobalVariable> GlobalListType;

GlobalListType GlobalList;      ///< The Global Variables in the module
FunctionListType FunctionList;  ///< The Functions in the module

Итак, если мы определим некоторые функции или глобальные переменные, мы сможем использовать их из любых других мест нашей программы, просто запросив их у нашего модуля. Но как насчет локальных переменных функции? Как их определить?

1 Ответ

0 голосов
/ 13 мая 2018

Локальные переменные выделяются через alloca во время выполнения.

Для создания AllocaInst вам необходимо

llvm::BasicBlock::iterator I = ...
const llvm::Type *Ty = 
auto AI = new AllocaInst(Ty, 0, Name, I);

Чтобы найти allocas в функции, вам нужно выполнить итерации по инструкциям:

for (auto I = F->begin(), E = F->end(); I != E; ++I) {
  for (auto J = I->begin(), E = I->end(); J != E; ++J) {
    if (auto AI = dyn_cast<AllocaInst>(*J)) {
      ..
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...