2013-06-25 2 views
3

Если у меня есть набор базовых блоков и ребер, и мне нужно создать для них новую функцию с новыми начальными и конечными точками.Создать новую функцию в llvm

Может ли я создать это непосредственно в LLVM, так же, как createFunction(F) то F.insert(bb, edges) которого бба является основным блоком и ребра, новые края для новой функции.

Благодаря

ответ

3

Вы можете создать новую функцию с Function::Create. Смотрите этот фрагмент from the LLVM tutorial, например:

Function *PrototypeAST::Codegen() { 
    // Make the function type: double(double,double) etc. 
    std::vector<Type*> Doubles(Args.size(), 
          Type::getDoubleTy(getGlobalContext())); 
    FunctionType *FT = FunctionType::get(Type::getDoubleTy(getGlobalContext()), 
             Doubles, false); 

    Function *F = Function::Create(FT, Function::ExternalLinkage, Name, TheModule); 
+0

могли бы вы разъяснить мне, как использовать этот фрагмент в функции Pass, мне нужно построить новую функцию с новыми базовыми блоками и новыми ребрами, извлеченными из исходной функции –

+0

@ R.Omar: вам не следует создавать новые функции в 'FunctionPass', только в' ModulePass' , Просто следуйте руководству, к которому я привязан, - он очень хорошо объясняет ситуацию и имеет полный код для создания функций, которые вы можете использовать. –

+0

Я вижу, поэтому основная идея состоит в том, чтобы использовать этот код в модуле Pass not Function Pass –

Смежные вопросы