Как вставить функцию в модуль LLVM

Я пишу проход LLVM, где я клонирую некоторые функции, вызывая llvm::CloneFunction. Теперь я также хочу вставить эти функции в модуль. Как я могу это сделать?

2 ответов


  • создайте новую функцию с помощью Function::Create или иным способом. А принимают модуль, в который вставляется новая функция.
  • клонировать функцию в эту новую функцию с помощью CloneFunctionInto, или просто скопируйте над BBs вам нужно.

вы можете использовать CloneFunction и вставить его в модуль после этого так

  Function* duplicateFunction = CloneFunction(F, VMap,
                                              /*ModuleLevelChanges=*/false);
  F->getParent()->getFunctionList().push_back(duplicateFunction);

пример украден из PartialInlining.cpp в источнике llvm.