llvm-clang相关内容
我正在尝试使用clang-tidy现代化模块的C ++源代码.几周前,我下载并构建了 clang和clang工具 3.9版,并在其上运行我得到的一个cpp文件之一clang-analyzer-alpha.unix.PthreadLock表示已经采取了锁定措施. 后来,由于篇幅所限,我删除了该版本的clang,并使用了我们的第三方存储库中可用的3.8和4.0版本. 在这两个版本中,我都没
..
我正在编写LLVM IR代码,可以在另一个.ll文件中调用一个函数吗? 例如: 在一个.ll文件中,有一个函数foo();. 我可以在b.ll中使用此功能,就像调用foo一样吗?如果是这样,我如何添加a.ll 谢谢 解决方案 您需要在调用它的ll文件中添加函数foo的声明,然后像往常一样转换链接ll文件以生成可执行文件 llvm-link a.ll b.ll -o a.
..
也许标题有些混乱.但让我给你看一个例子. void foo(int val) { // do something } int i = 27; int* pi = &i; foo(*pi); 在这里,如果我们使用clang进行编译,则* pi的类型将为i32,但是我们知道pi是指针类型. 我的问题是我们使用Function :: getgetFunctionParamTy
..
我尝试安装提拉米苏编译器 并尝试使用此命令安装其子模块((ISL,LLVM和Halide) dina@dina-VBox:~/tiramisu$ ./utils/scripts/install_submodules.sh ./ 我收到错误 Done installing isl #### Installing LLVM #### cd .//3rdParty/llvm .//
..
首先,我看到了此问题以及此,但我的问题不是在那儿解决. 我在自己的头文件中定义了协议ProtocolA.然后,我有两个ClassA和ClassB类别,它们都符合该协议,因此协议头文件被导入了它们的头文件中. 现在,它变得有点复杂了. ClassA在第三个ClassC中使用(因此被导入).此类符合第二个协议ProtocolB.该协议还具有其自己的头文件,在其中使用和导入ClassB.因此
..
我正在Ubuntu 16.04上构建LLVM 6.我也想要lld.但是无论我做什么,lld都不会构建/安装. 遵循此处中的以下说明. 仍然在第一个和第二个中进行筛选:) 阅读文档. 阅读文档. 请记住,您两次被警告阅读文档. 特别是,指定的相对路径很重要. 结帐LLVM: cd where-you-want-llvm-to-live svn co http
..
我正在像这样转储某些标头的AST: clang -cc1 -ast-dump -fblocks header.h 但是,标头上的任何#define都不会显示在转储中.有没有添加它们的方法? 解决方案 是的,#define是由预处理程序而不是编译器处理的.因此,您需要一个预处理器解析器阶段.我知道两个: Boost Wave 可以为您预处理输入和/或为您提供了触发宏定义或使用
..
有没有一种方法可以运行clang并添加llc标志?我想使用"-all-after-all",“-print-before-all",“-debug-only" ...,而不必在两者之间使用.bc文件. 解决方案 可以使用-mllvm将其他参数传递给LLVM的选项解析器.对于您的情况,它看起来像这样: clang [...] -mllvm -print-after-all
..
我正在尝试克隆另一个函数的确切副本.我在互联网上找不到CloneFunction用法的任何示例. 解决方案 实际上,您可以创建ValueToValueMapTy变量并将其传递而无需初始化.
..
我正在尝试检测if语句内部是否存在函数调用(作为条件的一部分);如下所示: if (cmp(a, b)){ \\do something } I have found I could do this with AST matcher in following manner: Matcher.addMatcher(ifStmt(hasCondition(callExpr().bind("c
..
我正在做万花筒教程.我正在第二步. https://github.com/westymatt/creole 但是用clang ++编译时会出现此错误 clang++ -Wno-c++11-extensions -g -std=c++11 -I/usr/local/Cellar/llvm/3.6.1/include -D__STDC_CONSTANT_MACROS -D__
..
我正在尝试解析LLVM-IR文件(.ll)并进行静态分析. 我在下面找到了此示例代码,并尝试构建它,但是我不知道要链接哪个库. #include #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IRReader/IRReader.h" #include "llv
..
因此,我正在按照本教程 https://www.cs进行操作. cornell.edu/~asampson/blog/llvm.html 通过添加对外部函数的调用(在rtlib.c中是logop)来传递用于检测程序的传递.但是,与本教程不同的是,我尝试使用更大的代码库masstree: https://github. com/kohler/masstree-beta . 因此,按照Masst
..
我正在尝试在Ubuntu 16.04上构建LLVM源代码.我已经尝试使用来自此处的来源的4.0.1、4.0.0和3.9.0版本.我也尝试过使用svn的源代码,如几个教程中所示. 这是我得到的错误: [1480/1747] Linking CXX executable bin/clang-3.9 FAILED: : && /usr/bin/c++ -fPIC -fvisibility
..
如果我有这个示例: int a=0, b=0; a和b是局部变量,并对其值进行任何修改,例如: a++; b++; 在运行MCJIT期间,我需要获取此行代码中的值. 我的意思是值不是Value类,而是实际的整数或任何类型的值. 解决方案 您需要从JITed LLVM函数返回该值,以便从调用MCJIT的代码中检索该值. 查看此万花筒示例. 相关代码在Ha
..
我最近安装了LLVM v8.0.0(在RHEL 7.4上).我正在通过 LLVM万花筒教程来学习如何使用该系统,但是遇到问题链接. 每个教程(第二章结束) ,我运行: clang++ -g -O3 kld.cpp `llvm-config --cxxflags` -o kld 它可以编译,但是链接器失败: /tmp/kld-f7264f.o:(.data+0x0): unde
..
我需要在llvm传递过程中提取目录和文件名. 当前版本的llvm将getFilename和getDirectory从DebugLoc移到了DebugInfoMetadata.我无法直接在DebugLoc标头中找到类成员getFilename.因此,如何从指令转到源代码的文件名和目录? http://llvm.org/docs/doxygen/html/classllvm_1_1DebugLo
..
Function *fun = call->getCalledFunction(); 如果 getCalledFunction();是间接调用,则返回null.如何获得函数名称或指针名称? 我发现Stack Overflow中与此问题有关的所有问题都涉及直接调用的函数名或指针类型. 我只想跟踪这种情况: void foo(){} void goo(){} void main
..
我想使用autotools构建系统将软件编译为LLVM位代码;也就是说,我希望最后获得的可执行文件是LLVM位代码,而不是实际的机器代码. (目标是能够在整个程序上运行LLVM位代码分析工具.) 我尝试指定CC="clang -emit-llvm -use-gold-plugins"和configure脚本的变体,但无济于事.总是有问题(例如,程序包构建了.a静态库,链接器拒绝了该库)
..
在clang整洁的情况下,检查 [llvm- header-guard] 寻找LLVM样式的标题保护,但是我找不到合适的LLVM标题保护样式的任何示例,特别是给定义的名称的结构解决方案 查看单元测试: https://github.com/llvm-mirror/clang-tools-extra/blob/master/unittests/clang-tidy/LLVMModuleTes
..