llvm相关内容
我想编译一个简单的程序“int main(){返回0;}”到RISC-V处理器。 LLVM/Clang版本是9.0,我想用这样的RISC-V模拟器运行编译后的程序https://github.com/riscv/riscv-tools 我的问题是,我无法使用以下命令仅列出clang支持的目标LLC-s: llc --version llc -march=xxARCHTYPExx -ma
..
下面是一个简单的C文件,其中包含一个枚举定义和一个main函数: enum days {MON, TUE, WED, THU}; int main() { enum days d; d = WED; return 0; } 它转换为以下LLVM IR: define dso_local i32 @main() #0 { %1 = alloca i32,
..
我正在使用SAW验证一些Rust代码。SAW要求您编译为LLVM bitcode,然后可以导入和验证。我知道您可以使用--emit=llvm-bc标志来生成位码,这对于没有依赖项的项目非常有效。 尝试编译使用外部板条箱的项目时会出现此问题。下面是一个Cargo.toml文件示例: [package] name = "foobar" version = "0.1.0" edition =
..
虽然Homebrew不再支持High Sierra,但我需要安装llvm@13公式作为其他公式的依赖项。所以我尝试这样安装: $ brew install llvm ... ==> Downloading https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/llvm-project-13.0.0.src.
..
在LLVM中,BasicBlock具有属性getSinglePredecessor()和getSingleSuccessor(),但我需要获取基本块的后继者和前置者的完整列表。如何在llvm中实现这一点? 我的代码是 virtual bool runOnFunction(Function &F) { for (Function::iterator b
..
编辑 我基本上是在尝试this,但使用llvm的orcJit API(llvm-13) 我有一个库,其中包含一些使用llvm(13)的代码。我想让JIT使用该库中的一些函数,而不必用LLVMIR编写它们。 以下是一些代码: #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/ExecutionEngine/JIT
..
我在这件事上挣扎的时间比我愿意承认的要长,我真的很感激你的帮助。 我正在尝试做一个涉及构建链接器和调度器的项目,我想如果我可以使用LLVM中已经构建的一些功能,那就太好了。我使用的是LLVM10。为了开始,我阅读了一些内容,并尝试构建this示例。因为我计划将LLVM嵌入到另一个项目中,使用this作为“如何构建”该示例的参考(见下文)。我认为依赖项只是示例CMakeLists.txt中的组
..
我正在尝试使用带有llvm-cov报告工具的指示器。以下是我正在运行的命令: llvm-cov report /path/to/executable -instr-profile /path/to/default.profdata /path/to/src/ -Xdemangler c++filt -Xdemangler -n 我尝试重新排列选项,并尝试使用“-Xdemangler=c+
..
有许多关于如何将SSA表示转换为堆栈计算机的问题,但我对相反的情况很感兴趣。 问题 考虑具有有条件/无条件跳转的基于堆栈的VM,其中每个操作码都有固定数量的它消耗和生成的堆栈元素。 LLVM框架中是否有工具/方法可以从字节码输出重构SSA表单。这实质上是一种反汇编形式。 llvm 推荐答案本身没有工具,只是sSMoP。我已经做到了。有些是困难的,但任何事情都是困难的。
..
我想对函数的CFG应用DFS遍历算法。因此,我需要CFG的内部代表。我需要有方向的边和带斑点的MachineBasicBlock::const_succ_iterator。有没有办法用FunctionPass代替MachineFunctionPass得到边缘定向的CFG?我想要它的原因是我在使用MachineFunctionPass时遇到问题。到目前为止,我已经编写了几个复杂的PASS,但我不能运
..
IR行是什么意思 define i32 () { 用于定义新函数并将其写入文件 推荐答案 通常,当IR格式不正确时,您会得到打印输出。您应该在您的模块上运行verifier pass,看看它是否可以帮助您找出确切的问题所在。 在此特定情况下,我猜您已经创建了一个新的未命名函数,但尚未将其添加到模块中-如果没有模块,它将无法对全局值进行编号
..
我有一个自定义LLVM后端,并希望为该自定义(Nostd)目标交叉编译Rust。我想分两步编译Rust程序: 使用rustc生成LLVM IR。 使用我自己的opt和llc将LLVM IR转换为机器码。 我尝试使用cargo rustc -- --emit=llvm-ir。我获取.ll个文件,然后使用llc获取.o个文件。 然后,我以同样的方式交叉编译libcore。当我尝试将所有对
..
我想使用clang/llvmAPI编译一个在字符串中定义的c函数,并立即执行它。 类似于: void main() { std::string codestr = "int foo(int bar) { return bar * 2; }" clang::??? *code = clang::???.compile(codestr); int result = code->c
..
我知道解析器生成的AST用于在前端生成IR。 我想知道如何解析AST,然后将其转换为IR(探测程序集或位码), AST是树,从AST到IR转换涉及哪些步骤。 推荐答案 发射LLVM IR from Clang ASTs发生在朗氏code gen阶段。此阶段的代码位于lib/CodeGen/中(相对于Clang的源根目录)。不需要解析AST,因为Clang在内存数据结构中具有
..
我在MacOSX10.9Mavericks上安装了Xcode5.0.1和命令行工具(例如,我可以在命令行上使用GCC/clang),但是命令opt似乎消失了。 是否由其他内容替换? LLVM 苹果从未在推荐答案中随其命令行工具一起发布“基本”LLVM工具,只有clang。您需要自己编译所需的LLVM修订版/发行版。您也可以从http://llvm.org/releases/downlo
..
我一直试图理解LLVM的GetElementPtr(GEP)指令,发现了这个文档: http://llvm.org/docs/GetElementPtr.html 它非常有帮助,但是有几件事我觉得很困惑。特别地,在“什么是GEP取消引用?”一节(http://llvm.org/docs/GetElementPtr.html#id6)中讨论了以下代码: %MyVar = unini
..
注意:我注意到this question与这个问题有很大关系,所以如果您对我的问题感兴趣,您一定也应该阅读另一个问题及其答案。 我能想到OOP语言前端可以做的一些优化,比如创建临时变量来保存顺序调用的const方法调用的值,而不需要对相关对象的中间非常数调用,以切断函数调用,但我想不到更多了。我想请人们创建一个更长的示例列表。 我问这个问题是因为我想创建一个宠物项目来创建一种小型语言,
..
我正在研究LLVM C++API。我希望JIT编译代码并运行它。 但是,我需要从上述JIT编译的代码中调用C++方法。通常,LLVM将方法调用视为将对象指针作为第一个参数传递的函数调用,因此调用应该不是问题。真正问题是将该函数放入LLVM。 据我所知,对函数使用外部链接并按其名称获取是可能的。问题是,由于它是一个C++方法,它的名称将会被损坏,所以我认为这样做不是一个好主意。 创建F
..
我正在尝试使用CMake文件编译RecursiveASTVisitor example of Clang。 构建项目进行得很顺利,但是,链接C++可执行文件失败,出现了对LLVM和Clang库的多个未定义引用。 我在LLVM/Clang源文件树外部构建该示例。 这是我的CMakeLists.txt(我正在使用FindClang.cmake and FindLLVM.cmake from th
..
我有一个关于OS X上的llvm、clang和GCC的问题。 LLVM4.2、LLVM2.0和LLANG有什么不同?我知道它们都是基于llvm构建的,但它们有什么不同呢? 除了编译速度快,LVM比GCC还有什么优势? LLVM 推荐答案最初代表“低级虚拟机”,但现在它只是代表自己,因为它已经成长为不同于传统虚拟机的东西。它是一组库和工具,以及标准化的中间表示,可用于帮助构建
..