最近使用llvm在LLVM-IR中插入call指令。问题是,如果我有一个名为add的函数,我无法使用getFuntion(string)找到它,因为IR中的add()可能是_Z3addv_。我知道IR中的所有函数都有一个新名称,但我不知道新名称到底是什么。Module*m=f->getParent();IRBuilderbuilder(m->getContext());Function*call=m->getFunction("add");//callisNULL.std::vectorargs;......Module*m=f->getParent();IRBuilderbuilde
我正在使用Clang来解析一些C++代码。我想打印我遇到的每个FunctionDecl的名称和损坏的名称。通过将其添加到我的RecursiveASTVisitor,我可以很容易地打印函数名称:boolVisitFunctionDecl(FunctionDecl*f){autodeclName=f->getNameInfo().getName();autofunctionName=declName.getAsString();std::cout我怎样才能打印错位的名字?我按照Sebastian的指示生成的工作代码:constautogetMangledName=[&](FunctionD
对于基本block,我想将条件跳转更改为无条件跳转。因此,如果一个基本block有两个后继者,我想删除其中一个后继者的边。我希望基本block直接跳转到其中一个后继者。我该怎么做?为了说明我的观点,我想改变A/\/\BC到A\\C 最佳答案 我认为最简单的方法就是创建一个新的无条件分支指令,然后用它替换旧的。所以,像这样:#include"llvm/Transforms/Utils/BasicBlockUtils.h"BranchInst*Old=...BranchInst*New=BranchInst::Create(Old->g
我正在尝试减少HHVM的编译时间,这可能需要两个小时。我在某处读到LLVM可以充当gcc的预处理器并大大减少内存使用和编译时间?不幸的是,我似乎无法直接使用clang编译HHVM,因为我遇到了奇怪的fatalerror,例如'array'filenotfound即使我尝试将CXXFLAGS设置为-std=c++11或-std=gnu++11模式,但没有成功。我已经阅读了有关dragonegg的内容,但不确定如何使用它或者它是否是我正在寻找的东西? 最佳答案 无论如何,我认为直接使用clang会容易得多。因此,请尝试找出为什么clan
在clangtidy中,检查[llvm-header-guard]寻找LLVM样式的头文件防护,但我找不到任何正确的LLVM头文件防护样式的示例,特别是给定义的名称结构,codingstandards页面没有提及任何内容。 最佳答案 查看单元测试:https://github.com/llvm-mirror/clang-tools-extra/blob/master/unittests/clang-tidy/LLVMModuleTest.cpp它似乎接受了一些常用模式的变体。对于名为include/llvm/ADT/foo.h的文件
我正在开发一个使用LLVM的JIT。该语言有一个用C++编写的小型运行时,我使用clang将其编译为LLVMIRclang++runtime.cu--cuda-gpu-arch=sm_50-c-emit-llvm然后加载*.bc文件,生成额外的IR,并即时执行。CUDA东西的原因是我想在运行时添加一些GPU加速。但是,这引入了CUDA特定的外部函数,这些函数会产生如下错误:LLVMERROR:Programusedexternalfunction'cudaSetupArgument'whichcouldnotberesolved!讨论here,这通常通过在编译程序时包含适当的库来解决:
我正在尝试编译示例LLVM程序。链接器步骤使用此命令。llvm-config-3.2--ldflags--libs这会产生以下命令。g++-obin/Debug/test-llvmobj/Debug/main.o-L/usr/lib/llvm-3.2/lib-lpthread-lffi-ldl-lm(aboatloadofLLVMlibrarieshere)但是,它无法链接。我收到这样的错误。undefinedreferencetoffi_type_float因此,我在末尾添加了-lffi和-ldl。g++-obin/Debug/test-llvmobj/Debug/main.o-L/
LLVM2.6+clang。尝试编译C++文件并得到:clang:warning:notusingtheclangcompilerforC++inputs如何在C++模式下启动clang? 最佳答案 我会得到中继代码。自2.6以来,C++支持有了很大改进。tools/clang/tools/driver中的clang驱动程序Makefile使用CLANG_IS_PRODUCTION定义来控制C++是打开还是关闭。CLANG_IS_PRODUCTION表示C++关闭。主干构建的默认值不是CLANG_IS_PRODUCTION(即开发构
我正在使用LLVM,但我遇到了以下我没有编写的代码段的问题:staticstd::mapNamedValues;...//LotsofothercodeValue*V=NamedValues["Demostring"];returnV?V:ErrorV("VisnotinNamedValuesmap.");根据我对std::map的理解,它永远不应该返回空指针(除非它内存不足?),所以我很难理解V为0如何表示V不在映射中。照原样,我的程序总是在这里出错,但我不明白为什么。对这里发生的事情有什么帮助吗? 最佳答案 std::map::
我编译了一个C++程序,使用以下示例。clang++-O4-emit-llvmfile1.cpp-c-ofile1.bcclang++-O4-emit-llvmfile2.cpp-c-ofile2.bcllvm-linkfile1.bcfile2.bc我如何在这里执行链接时间优化? 最佳答案 使用opt:clang++-O4-emit-llvmfile1.cpp-c-ofile1.bcclang++-O4-emit-llvmfile2.cpp-c-ofile2.bcllvm-linkfile1.bcfile2.bc-oall.bco