草庐IT

LLVM_Binaries

全部标签

c++ - 用于 LLVM 的 GCC 工具链

我在RHEL6.x机器上运行,当然安装了GCC4.4。我希望在这台机器上运行LLVM。为此,我必须从源代码编译它。为了做到这一点,我需要一个更现代的GCC版本。所以,关注theinstructions,我已经构建了GCC4.8.2:[snip]%$PWD/../gcc-4.8.2/configure--prefix=$HOME/toolchains--enable-languages=c,c++%make-j$(nproc)%makeinstall我以root身份登录,所以$HOME/toolchains解析为/root/toolchains。满足LLVM的先决条件后,我就可以配置和构

c++ - 使用 Bison/Antlr/Packrat/Elkhound/编写的 LLVM JIT 解析器

在LLVMtutorials有如何编写简单的JIT编译器的说明。不幸的是,本教程中的词法分析器和解析器是手动编写的。我在想,这样的解决方案适合学习目的,但不适合编写复杂的、生产就绪的编译器。似乎GCC和其他一些“大编译器”是手写的。但我认为,所有这些解析器生成器在编写自己的编译器时都提供了很大的插入力(尤其是当您独自完成时,没有团队)。是否可以将任何现有的解析器生成器(如Bison/Antlr/Packrat/Elkhound等)与LLVM一起使用来创建JIT编译器?我希望能够不断地(不是一开始就)用表达式“喂养”解析器,并在运行时编译它们。另外,我发现了很多关于“最好的、现代的”解析

c++ - 使用 Clang 构建 V8 并发出 LLVM IR

我正在尝试使用Clang构建V8Javascript引擎并输出.ll文件。我正在尝试合并信息here和here去做这个。但是,当我尝试make时,它失败了,显示“Noruletomaketarget”。我搞不清楚了。我试过只编译v8.cc,但完全失败了。我想这是因为我试图通过将它作为编译器放入来强制-emit-llvm,但我不确定。$cdv8$exportCXX="clang++-S-emit-llvm"$exportCC="clang-S-emit-llvm"$exportCPP="clang-E-S-emit-llvm"$exportLINK="clang++-S-emit-llv

c++ - 如何检查指令是否为 LLVM IR 中的 PHI 指令

我正在编写一个LLVMpass。对于一条指令(llvm::InstructionClass),如何判断一条指令是否为PHI指令? 最佳答案 我找到了解决方案。您可以像这样检查PHI节点,isa(inst). 关于c++-如何检查指令是否为LLVMIR中的PHI指令,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9470505/

c++ - LLVM 转换指令

我有ConstantInt和ConstantFP值,我想使用fadd添加它们。但是,我无法将ConstantInt转换为fadd可接受的float。代码摘录如下:Value*left=ConstantInt::get(Type::getInt64Ty(getGlobalContext()),12,true);Value*right=ConstantFP::get(Type::getFloatTy(getGlobalContext()),11.6);Instruction*cast=CastInst::Create(Instruction::SIToFP,left,left->getTy

c++ - 了解内存分配的工作原理 (LLVM)

我正在玩具编译器(第一次)上取得进展,并试图了解如何分配/构造LLVM结构类型。Kaleidoscope教程没有包括甚至没有提到这一点,我不知道我在LLVM源/测试中寻找什么来找到可能的例子。所以我写了一个简单的C++示例,用clang转储了IR,试图理解它产生了什么,但老实说,我并没有完全遵循它。对我来说显而易见的是函数定义/声明和一些函数调用以及memset调用,所以我得到了它的一部分,但它还没有全部组合在一起。(P.S我对alloca指令文档的解释是它创建的任何东西在返回时都会被释放所以我不能使用那个权利,它基本上只用于局部变量?)我所做的是:alloc.cppstructAll

c++ - 包括带有 Clang/LLVM 的 C++ 11 头文件

我已经从源代码安装了clang和llvm,并且正在尝试使用新标准的特性编译一些C++代码。我发现,例如使用forranges例如for(i:vector)工作正常,当我需要导入标题时遇到问题(找不到头文件),例如或.我是否需要使用新的libc++才能使用这些header,或者我是否需要进行简单的构建更改?目前,我刚刚将clang和llvm构建到我的主目录中的一个文件夹中,并从那里调用clang++。 最佳答案 参见http://clang.llvm.org/get_started.html.IfyouintendtoworkonCl

c++ - 在 LLVM 中获取 BasicBlock 的前身

获取BasicBlock的前辈的最简单方法是什么?在LLVM框架中?我看过DepthFirstIterator和idf_iterator,但实际上我需要对控制流图进行广度优先搜索。我觉得这应该很容易,但从我一直在网上探索的文档或示例来看,这并不明显。 最佳答案 文档中并不清楚,但是basicblockclass支持pred迭代器,它将前身提供给基本block。在C++11风格中,可以按如下方式循环遍历block的前导:BasicBlock*B=...for(autoit=pred_begin(B),et=pred_end(B);it

c++ - LLVM 编译器优化错误还是什么?

我偶然发现了一个我无法理解的有趣问题。背景是:XCode上的LLVM4.2编译器编译时支持c++11用-Os编译为armv7/armv7s架构编译现在我意识到在启用优化的情况下编译时出现的一些代码存在问题。代码是,逐字:staticintfoo(inttx,intsx,intw){intvs=60;if(sxw-vs*2)return(sx+w-tx);elseif(sx>w-vs*2&&tx现在,通过使用LLDB,我逐步跟踪了一个奇怪的错误,这让我意识到if的第一个分支是带输入的sx=648tx=649w=768vs=60(这些值直接取自XCode中的locals表,我无法查询lld

c++ - 如何将 llvm::outs() 重定向到文件?

我正在使用一些LLVM工具(如llvm-nm)作为静态库。IE。我复制了源代码llvm-nm.cpp,将main(..)重命名为llvm_nm(..)并将其编译为静态库。我想将标准输出转发到我的文件。我尝试使用下一种方法:intout_fd,err_fd;fpos_tout_pos,err_pos;//redirectoutfflush(stdout);fgetpos(stdout,&out_pos);out_fd=dup(fileno(stdout));freopen(outFilename,"w",stdout);//executeintret=llvm_nm(argc_,argv