llvm相关内容

如何使用LLVM/Clang to RISC-V目标进行编译?

我想编译一个简单的程序“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 ..
发布时间:2022-08-07 12:49:24 其他开发

为什么LLVM分配一个冗余变量?

下面是一个简单的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, ..
发布时间:2022-07-01 18:56:05 其他开发

Rust:在LLVM位码中包含依赖项

我正在使用SAW验证一些Rust代码。SAW要求您编译为LLVM bitcode,然后可以导入和验证。我知道您可以使用--emit=llvm-bc标志来生成位码,这对于没有依赖项的项目非常有效。 尝试编译使用外部板条箱的项目时会出现此问题。下面是一个Cargo.toml文件示例: [package] name = "foobar" version = "0.1.0" edition = ..
发布时间:2022-07-01 18:49:12 其他开发

运行LLVM示例时出现问题

我在这件事上挣扎的时间比我愿意承认的要长,我真的很感激你的帮助。 我正在尝试做一个涉及构建链接器和调度器的项目,我想如果我可以使用LLVM中已经构建的一些功能,那就太好了。我使用的是LLVM10。为了开始,我阅读了一些内容,并尝试构建this示例。因为我计划将LLVM嵌入到另一个项目中,使用this作为“如何构建”该示例的参考(见下文)。我认为依赖项只是示例CMakeLists.txt中的组 ..
发布时间:2022-04-15 20:34:04 C/C++开发

如何使用LLVM将基于堆栈的虚拟机字节码转换为SSA格式

有许多关于如何将SSA表示转换为堆栈计算机的问题,但我对相反的情况很感兴趣。 问题 考虑具有有条件/无条件跳转的基于堆栈的VM,其中每个操作码都有固定数量的它消耗和生成的堆栈元素。 LLVM框架中是否有工具/方法可以从字节码输出重构SSA表单。这实质上是一种反汇编形式。 llvm 推荐答案本身没有工具,只是sSMoP。我已经做到了。有些是困难的,但任何事情都是困难的。 ..
发布时间:2022-03-21 22:48:48 其他开发

LLVM遍历CFG

我想对函数的CFG应用DFS遍历算法。因此,我需要CFG的内部代表。我需要有方向的边和带斑点的MachineBasicBlock::const_succ_iterator。有没有办法用FunctionPass代替MachineFunctionPass得到边缘定向的CFG?我想要它的原因是我在使用MachineFunctionPass时遇到问题。到目前为止,我已经编写了几个复杂的PASS,但我不能运 ..
发布时间:2022-03-21 22:46:51 其他开发

Badref是什么意思?

IR行是什么意思 define i32 () { 用于定义新函数并将其写入文件 推荐答案 通常,当IR格式不正确时,您会得到打印输出。您应该在您的模块上运行verifier pass,看看它是否可以帮助您找出确切的问题所在。 在此特定情况下,我猜您已经创建了一个新的未命名函数,但尚未将其添加到模块中-如果没有模块,它将无法对全局值进行编号 ..
发布时间:2022-03-21 22:41:59 其他开发

如何使用自定义LLC编译Rust程序?

我有一个自定义LLVM后端,并希望为该自定义(Nostd)目标交叉编译Rust。我想分两步编译Rust程序: 使用rustc生成LLVM IR。 使用我自己的opt和llc将LLVM IR转换为机器码。 我尝试使用cargo rustc -- --emit=llvm-ir。我获取.ll个文件,然后使用llc获取.o个文件。 然后,我以同样的方式交叉编译libcore。当我尝试将所有对 ..
发布时间:2022-03-21 22:36:30 其他开发

使用clang API编译和运行C代码

我想使用clang/llvmAPI编译一个在字符串中定义的c函数,并立即执行它。 类似于: void main() { std::string codestr = "int foo(int bar) { return bar * 2; }" clang::??? *code = clang::???.compile(codestr); int result = code->c ..
发布时间:2022-03-21 22:32:28 其他开发

LLVM-如何将AST转换为IR

我知道解析器生成的AST用于在前端生成IR。 我想知道如何解析AST,然后将其转换为IR(探测程序集或位码), AST是树,从AST到IR转换涉及哪些步骤。 推荐答案 发射LLVM IR from Clang ASTs发生在朗氏code gen阶段。此阶段的代码位于lib/CodeGen/中(相对于Clang的源根目录)。不需要解析AST,因为Clang在内存数据结构中具有 ..
发布时间:2022-03-21 22:27:31 其他开发

Mavericks中没有llvm opt命令

我在MacOSX10.9Mavericks上安装了Xcode5.0.1和命令行工具(例如,我可以在命令行上使用GCC/clang),但是命令opt似乎消失了。 是否由其他内容替换? LLVM 苹果从未在推荐答案中随其命令行工具一起发布“基本”LLVM工具,只有clang。您需要自己编译所需的LLVM修订版/发行版。您也可以从http://llvm.org/releases/downlo ..
发布时间:2022-03-21 22:22:35 其他开发

GEP指令:i32与i64

我一直试图理解LLVM的GetElementPtr(GEP)指令,发现了这个文档: http://llvm.org/docs/GetElementPtr.html 它非常有帮助,但是有几件事我觉得很困惑。特别地,在“什么是GEP取消引用?”一节(http://llvm.org/docs/GetElementPtr.html#id6)中讨论了以下代码: %MyVar = unini ..
发布时间:2022-03-21 22:19:04 其他开发

LLVM有哪些类型的优化?它的前端自身需要实现哪些类型的优化?

注意:我注意到this question与这个问题有很大关系,所以如果您对我的问题感兴趣,您一定也应该阅读另一个问题及其答案。 我能想到OOP语言前端可以做的一些优化,比如创建临时变量来保存顺序调用的const方法调用的值,而不需要对相关对象的中间非常数调用,以切断函数调用,但我想不到更多了。我想请人们创建一个更长的示例列表。 我问这个问题是因为我想创建一个宠物项目来创建一种小型语言, ..
发布时间:2022-03-21 22:15:38 其他开发

我是否可以将现有方法绑定到LLVM函数*,并从JIT编译的代码中使用它?

我正在研究LLVM C++API。我希望JIT编译代码并运行它。 但是,我需要从上述JIT编译的代码中调用C++方法。通常,LLVM将方法调用视为将对象指针作为第一个参数传递的函数调用,因此调用应该不是问题。真正问题是将该函数放入LLVM。 据我所知,对函数使用外部链接并按其名称获取是可能的。问题是,由于它是一个C++方法,它的名称将会被损坏,所以我认为这样做不是一个好主意。 创建F ..
发布时间:2022-03-21 22:09:53 C/C++开发

CMake and Clang Tool链接错误(树外)

我正在尝试使用CMake文件编译RecursiveASTVisitor example of Clang。 构建项目进行得很顺利,但是,链接C++可执行文件失败,出现了对LLVM和Clang库的多个未定义引用。 我在LLVM/Clang源文件树外部构建该示例。 这是我的CMakeLists.txt(我正在使用FindClang.cmake and FindLLVM.cmake from th ..
发布时间:2022-03-21 22:04:37 C/C++开发

LLVM与OS X上的clang

我有一个关于OS X上的llvm、clang和GCC的问题。 LLVM4.2、LLVM2.0和LLANG有什么不同?我知道它们都是基于llvm构建的,但它们有什么不同呢? 除了编译速度快,LVM比GCC还有什么优势? LLVM 推荐答案最初代表“低级虚拟机”,但现在它只是代表自己,因为它已经成长为不同于传统虚拟机的东西。它是一组库和工具,以及标准化的中间表示,可用于帮助构建 ..
发布时间:2022-03-21 22:01:08 C/C++开发