在llvm中创建新函数

在llvm中创建新函数,llvm,Llvm,如果我有一组基本的块和边,我需要为它们创建一个新函数,包含新的入口和终点 我可以直接在LLVM中创建它吗,就像createFunction(F)然后F.insert(bb,edges) 哪个bb是基本块,边是新函数的新边 谢谢您可以使用function::create创建一个新函数。例如,请参见此代码段: Function *PrototypeAST::Codegen() { // Make the function type: double(double,double) etc. s

如果我有一组基本的块和边,我需要为它们创建一个新函数,包含新的入口和终点

我可以直接在LLVM中创建它吗,就像
createFunction(F)
然后
F.insert(bb,edges)
哪个bb是基本块,边是新函数的新边


谢谢

您可以使用
function::create
创建一个新函数。例如,请参见此代码段:

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);
函数*PrototypeAST::Codegen(){
//使功能类型:双(双、双)等。
std::vector Double(Args.size(),
类型::getDoubleTy(getGlobalContext());
FunctionType*FT=FunctionType::get(Type::getDoubleTy(getGlobalContext()),
双打,假);
Function*F=Function::Create(FT,Function::ExternalLinkage,Name,TheModule);
函数创建:

如何在llvm的源代码中使用create函数:

你能向我说明一下如何在函数Pass中使用这个片段吗?我需要用从原始函数中提取的新基本块和新边构造一个新函数function@R.Omar:您不应该在
FunctionPass
中创建新函数,而应该只在
模块pass
中创建新函数。只需按照我链接的教程进行操作-它解释了pretty很好,有完整的代码来创建函数,您可以直接使用。我明白了,所以主要的想法是在模块传递而不是函数中使用这些代码Pass@R.Omar:嗯,这是一个正交的建议,真的。当然,你也可以在任何关卡之外使用它——如果你只是从其他东西构建IR的话(正如我所指的教程所做的,或叮当声)对我来说,问题不仅仅是创建一个新函数,还要在每组基本块之间插入一些确定的边