Генерация указателей на функции в LLVM - PullRequest
4 голосов
/ 28 марта 2011

Я пишу свой первый образец LLVM. Я пытаюсь построить небольшой модуль LLVM, состоящий из функции, которая принимает имя функции и возвращает указатель на нее. Проблема в том, что я не знаю, как генерировать указатели на функции в LLVM. Я получил объект Function, вызвав getDeclaration(...). Есть ли способ получить указатель на него?

1 Ответ

5 голосов
/ 28 марта 2011

Функция является GlobalValue, поэтому она сама является указателем. В то же время вы можете использовать бэкэнд C ++ LLVM для генерации вызовов API C ++, которые воссоздают IR, который вы передаете в llc.

Например, введите следующий код в http://llvm.org/demo:

void foo(int (*bar)(int));

int factorial(int X);

int main(int argc, char **argv) {
  foo(factorial);
}

Убедитесь, что у вас установлен флажок «Показать код LLVM C ++ API», и вы увидите соответствующий IR LLVM и вызовы API C ++, которые воссоздают его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...