如何生成LLVM IR代码来调用C++ STL函数?

How to generate LLVM IR code to call C++ STL function?

提问人:lonelyjoe 提问时间:7/30/2021 更新时间:7/30/2021 访问量:234

问:

我想生成包含对 C++ STL 函数调用的 LLVM-IR。例如。 我认为我需要通过以下步骤来完成任务。std::sort()

  1. 链接到 IRstd::sort()
  2. 获取对函数的引用std::sort()
  3. 创建对 using 的调用。std::sort()IRBuilder.CreateCall(~)

我不确定如何实现上述第一步。

C++ LLVM-IR 中间语言

评论

3赞 sbabbi 7/30/2021
您需要特定的 T 吗?或者你想对一个你只在运行时知道的类型进行排序?sort<T>
0赞 Paul Sanders 7/30/2021
std::sort是一个模板,而不是一个函数。
0赞 lonelyjoe 7/30/2021
@sbabbi 是的,我只需要一个特定的.我知道在编译时使用哪个。sort<T>TT
0赞 sbabbi 8/2/2021
我现在真的写不出一个完整的答案。你走在正确的轨道上。对于第 1 步,我将简单地编译一个具有 sort<YourType> 实例化的C++源文件。然后你得到一个指向此类函数的指针,并将其转换为intptr_t。对于步骤 2,使用上一步中的intptr_t在 LLVM 中创建一个常量值,然后使用 Bitcast 将其转换为正确的函数指针类型。现在,您可以在 LLVM 中的任何位置使用您的函数。

答: 暂无答案