2013-06-25 55 views
3

如果我有一組基本塊和邊,並且需要爲它們創建一個新的入口點和終點的函數。在llvm中創建新函數

我可以直接在LLVM中創建它,就像createFunction(F)然後F.insert(bb, edges) 其中bb是基本塊,邊是新函數的新邊。

感謝

回答

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

你能澄清我怎麼用這個片段在Function Pass中,我需要用新的基本塊和從原始函數中提取的新邊構造一個新函數 –

+0

@ R.Omar:不應該在'FunctionPass'中創建新函數,只能在'ModulePass'中創建新函數。只要按照我鏈接的教程 - 它解釋得很好,並有完整的代碼來創建您可以使用的功能。 –

+0

我明白了,所以主要思想是在模塊密碼中使用此代碼不是功能通過 –