jjzjj

c++ - llvm,加载 poolalloc 以选择

我想在llvm中运行别名分析,特别是我想运行-ds-aa它在模块poolalloc中。根据poolalloc文档,我需要将它的模块加载到opt。我所做的是:opt-load/usr/local/lib/LLVMDataStructure.so-load/usr/local/lib/poolalloc.so-ds-aa-aa-evalhello.bc-disable-output-stats但我得到下一个输出:opt:Unknowncommandlineargument'-ds-aa'.Try:'opt-help'opt:Didyoumean'-no-aa'?我不知道我做错了什么。如何在

c++ - 使用 cmake、clang 和 llvm 为 visual studio 构建工具链

我在谷歌上搜索了很多,但没有找到合适的答案,所以我在这里问。要从现有代码开发一个应使用cmake和clang编译的c++项目,我需要采取哪些步骤?我还想拥有所有不错的功能,例如自动完成和使用断点进行调试以及逐步调试。 最佳答案 查看与VisualStudio集成的Windows构建的最新LLVM快照页面here.有一个安装程序和一个代码格式化插件。您不会获得自动完成功能,并且Clang/LLVM与VisualStudio中的调试无关(除了如果您使用Clang编译它可能无法工作)。另见thisinterestingblogpost在拥

c++ - 集成 LLVM passes

这可能是一个菜鸟问题,但有没有办法集成我的LLVMmodulepass以在转换阶段默认调用?现在我正在使用这个语法来加载我的通行证并注册它~/llvm/llvm/build/Debug+Asserts/bin/clang-Xclang-load-Xclang~/llvm/llvm/build/Debug+Asserts/lib/SOMEPASSLIB.so(问题是当我想用这个pass构建一些包时,编译器在我说时接受它,将加载部分作为CFLAGSenv变量传递,但是一些makefile也使用CFLAGS进行链接,链接器不知道它可以使用此信息做什么并导致构建失败:\)

c++ - ArrayRef 的用途

我偶然发现了这个http://llvm.org/docs/doxygen/html/classllvm_1_1ArrayRef.html我正在尝试了解它的用途。我看不出ArrayRef解决了什么问题,有人可以解释一下这背后的动机吗? 最佳答案 这与std::string_view背后的想法相同:提供对某事物的一般View,而不管理它的生命周期。对于ArrayRef(这是一个糟糕的名字,恕我直言,ArrayView要好得多),它可以查看其他数组类型,包括非对象内置数组(C数组)。例如,您的函数可以如下所示:size_tsum(Arra

c++ - 为什么LLVM选择开放寻址哈希表来实现llvm::StringMap?

许多消息来源说open-addressing,llvm::StringMap中使用的散列冲突处理方法不稳定。据说当负载系数很高(这是可以想象的)时,开放寻址不如链接。但是如果负载因子低,开放寻址会造成巨大的内存浪费,因为我必须在内存中分配Bucket_number*sizeof(Record)字节,即使大多数桶都没有记录。所以我的问题是,LLVM选择开放寻址而不是分离链的原因是什么?仅仅是因为缓存局部性带来的速度优势(记录本身存储在桶中)吗?谢谢:)编辑:C++11标准对std::unordered_set和std::unordered_map的要求暗示了链接方法,而不是开放寻址。为什

c++ - 在 LLVM 中生成函数指针

我正在编写我的第一个LLVM示例。我正在尝试构建一个小型LLVM模块,该模块由一个函数组成,该函数接受一个函数的名称并返回一个指向它的指针。问题是我不知道如何在LLVM中生成函数指针。我通过调用getDeclaration(...)获得了一个Function对象。有什么方法可以获得指向它的指针吗? 最佳答案 Function是一个GlobalValue,所以它本身就是一个指针。同时,您可以使用LLVM的C++后端生成C++API调用,这将重新创建您提供给llc的IR。例如,将以下代码输入http://llvm.org/demo:vo

c++ - LLVM 中的别名分析

我正在尝试查找存储指令的指针操作数和函数参数之间的别名。这是代码,virtualvoidgetAnalysisUsage(AnalysisUsage&AU)const{AU.addRequiredTransitive();AU.addPreserved();}virtualboolrunOnFunction(Function&F){AliasAnalysis&AA=getAnalysis();for(Function::iteratori=F.begin();i!=F.end();++i){for(BasicBlock::iteratorj=i->begin();j!=i->end()

c++ - 使用 LLVM JIT 代码对程序进行编码以调用 C++ 代码

我的项目有一个C++库,我想允许用户通过某种编程语言使用它来进行JIT调用所述库中的函数。为了简单起见,假设库有如下类:classitem{public:item();item(int);~item();//...};classitem_iterator{public:virtual~item_iterator();virtualboolnext(item*result)=0;};classsingleton_iterator:publicitem_iterator{public:singleton_iterator(itemconst&i);//...};我知道LLVM对C++一无所

c++ - LLVM 是典型的虚拟机吗?

我想知道LLVM是像Java或.Net那样的典型虚拟机,还是只是运行时环境,就像普通的C++运行时一样? 最佳答案 两者都不是。LLVM过去代表“低级虚拟机”,但这绝不意味着Java或.NET意义上的完整虚拟机,并且“LLVM”此后不再是缩写。LLVM的核心部分是LLVMIR。IR代表内部表示,这是编译器中使用的术语,指的是前后端之间使用的程序表示。IR允许解析语言的细节与代码生成的细节分离。在传统的编译器设计中,理想的前端和后端组件可以自由混合,这样N个前端和M个后端就可以创建NxM个编译器。LLVM的IR不同于传统的内部表示;L

c++ - 构建 Clang 时未知包 libcxx 和 libcxxabi?

我正在尝试使用来自源代码的libc++构建Clang。我试图在树外将libc++与其他组件构建在一起。我使用的食谱如下。如果我只是将libcxx和libcxxabi放在树中,那么配置不会将它们拾取,而且它们不是自动构建的。我根据LLVM'slibc++StandardLibrary将它们放在llvm/projects中.此外,将makecxx添加到配方中并不像LLVM'slibc++StandardLibrary上宣传的那样有效页。结果是:llvm[0]:ConstructingLLVMBuildprojectinformation.make:***Noruletomaketarget