Templates 从LLVM模块中提取函数模板声明?

Templates 从LLVM模块中提取函数模板声明?,templates,llvm,llvm-clang,Templates,Llvm,Llvm Clang,从LLVM模块提取函数很简单: for(auto FF = My_Module.begin(); FF != My_Module.end(): ++FF) llvm::Function *F = dyn_cast<llvm::Function>(FF); 但这只给了我已经定义好的函数。如果我有如下程序: template <class T> __attribute__((noinline)) T load(T *ptr){ return *ptr; }

从LLVM模块提取函数很简单:

for(auto FF = My_Module.begin(); FF != My_Module.end(): ++FF)
    llvm::Function *F = dyn_cast<llvm::Function>(FF);
但这只给了我已经定义好的函数。如果我有如下程序:

template <class T> __attribute__((noinline)) T load(T *ptr){
   return *ptr;
}

int main(){
   int a = 4;
   int b = 5;
   char c = 6;
   long d = 8;
   return load<int>(&a) + load<int>(&b) + load<char>(&c) + load<long>(&d);
}
例如,如果我想在函数声明的IR中创建另一个函数,加载一个unsigned long,那么如何提取可以用于为该类型创建函数的FunctionTemplateDecl呢


这是为我想要的类型创建函数的正确方法吗?

此时的函数模板已经具体化,具体取决于用于实例化的类型。LLVM IR没有模板的概念;你只是比实际的机器代码稍微高一点

您需要进入前端,即叮当声,因为这是函数TemplateDecl和friends所在的位置。这意味着要操纵AST,等等