问题标签 [llc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - LLVM 作为不同语言的基础编译器
我是 LLVM 编译器和基础架构的新手。我有以下想法。Clang 是 C/C++ 的 LLVM 前端,类似于 Rust 编程语言的 Rustc。两者都可以发出 LLVM IR 代码,并且发出的代码可以编译为可执行的应用程序。
我的问题是可以链接不同的编程语言吗?示例如下 -
以 Rust 中定义的函数为例
从两个源文件生成 IR 后,是否可以链接它们并创建一个应用程序?
我只是想知道这是否有效,请告诉我。
windows - Windows 上没有 LLC?
我想使用 LLVM IR 并安装了最新的 LLVM v4(在我的 Windows PC 上),但我在已安装的文件中找不到 llc(在“bin”文件夹和所有其他文件中查找)。
想知道这个工具是否不可用,或者它是否已被弃用或什么?
这是我的 bin 文件夹的内容:
2017 年 4 月 30 日下午 7 点 46 分。
2017 年 4 月 30 日下午 7:46 ..
03/09/2017 09:50 PM 63,566,848 clang++.exe
03/09/2017 09:35 PM 2,357,248 clang-apply-replacements.exe
03/09/2017 09:37 PM 17,489,408 clang-change-namespace.exe
03/09/2017 09:35 PM 52,584,448 clang-check.exe
03/09/2017 09:50 PM 63,566,848 clang-cl.exe
03/09/2017 09:50 PM 63,566,848 clang-cpp.exe
03/09/2017 09:35 PM 2,380,800 clang-format.exe
03/09/2017 09:35 PM 20,820,480 clang-import-test.exe
03/09/2017 09:37 PM 17,238,528 clang-include-fixer.exe
03/09/2017 09:34 PM 3,140,096 clang-offload-bundler.exe
03/09/2017 09:37 PM 17,924,608 clang-query.exe
03/09/2017 09:35 PM 17,438,208 clang-rename.exe
03/09/2017 09:35 PM 17,171,456 clang-reorder-fields.exe
03/09/2017 09:37 PM 22,490,624 clang-tidy.exe
03/09/2017 09:35 PM 63,566,848 clang.exe
03/09/2017 09:37 PM 17,251,840 查找所有符号.exe
2016 年 11 月 8 日上午 9:50 20,626 git-clang-format
03/09/2017 09:50 PM 44,386,816 ld.lld.exe
2017 年 3 月 9 日下午 9:38 55,871,488 libclang.dll
2017 年 3 月 9 日晚上 9:50 574,976 libiomp5md.dll
03/09/2017 09:29 PM 574,976 libomp.dll
03/09/2017 09:50 PM 44,386,816 lld-link.exe
2017 年 3 月 9 日下午 9:37 44,386,816 lld.exe
2017 年 3 月 9 日晚上 9:30 14,962,688 llvm-ar.exe
2017 年 3 月 9 日晚上 9:50 14,962,688 llvm-lib.exe
03/09/2017 09:37 PM 15,513,600 llvm-objdump.exe
2017 年 3 月 9 日晚上 9:50 14,962,688 llvm-ranlib.exe
2017 年 3 月 9 日晚上 9:30 42,117,120 LTO.dll
2017 年 3 月 9 日晚上 9:35 16,766,976 模块化.exe
11/14/2015 12:34 AM 23 scan-build.bat
2015 年 12 月 21 日下午 4:19 4,504 扫描视图
llvm - llc:符号上不支持的重定位
问题
llc
给我以下错误:
LLVM 错误:符号上不支持的重定位
详细编译流程
我正在为编译器的中级 IR (MIR) 实现 LLVM 前端,在将各种方法转换为许多位码文件后,我将它们链接 ( llvm-link
)、优化它们 ( opt
)、将它们转换为机器码 ( llc
)、制作它们是一个共享库(clang
因为它是链接器包装器),并动态加载它们。
llc
对于我正在编译的某些方法,步骤失败了!
步骤 1: llvm-link
: 合并许多位码文件
我可能有许多相互调用的函数,所以我llvm-link
使用了可能相互交互的不同位码文件。这一步没有问题。例子:
llvm-link function1.bc function2.bc -o lnk.bc
步骤 2: opt
: 运行优化通道
现在我正在使用以下内容:
opt -O3 lnk.bc -o opt.bc
这一步没有问题,但这就是导致问题的原因!此外,这是必要的,因为将来我将需要这一步来通过额外的通行证,例如loop-unroll
第三步llc
::生成机器码(PIC)
我正在使用以下命令:
llc -march=thumb -arm-reserve-r9 -mcpu=cortex-a9 -filetype=obj -relocation-model pic opt.bc -o obj.o
我保留了我设置的拱形特定标志,以防它们导致问题。我正在使用Position Independent Code
,因为下一步我将构建一个shared object
. 此命令失败,并出现我在此答案之上编写的错误。
第 4 步clang
::生成共享对象
对于Step 3
失败的情况,未达到此步骤。如果llc
成功,这一步也将成功!
附加信息
配置
以下在arm
设备上运行的 llvm3.6 上运行。
我注意到的事情
- 如果我在步骤中省略
-O3
(或任何其他级别)opt
,那么llc
就可以了。 - 如果我不这样做,而是从 中省略它们
llc
,llc
仍然会失败。这让我认为这opt -O<level>
是造成问题的原因。 - 如果我
llc
直接使用它会起作用,但我将无法运行opt
允许我的特定通行证,所以这不是我的选择。 - 到目前为止,我只使用我编译的 2 个函数(来自它们的原始 MIR)遇到了这个问题,这些函数使用循环。其他人产生工作代码!
- 如果我不使用
pic
模型 atllc
,它可以生成obj.o
,但是我将无法从中创建一个.so
!
问题
为什么会这样??!!
为什么
opt
有-relocation-model
选项?这不应该只是一llc
件事吗?我已经尝试将其设置为 atopt
和llc
topic
,但仍然失败。我使用它是
clang
因为它有一个链接器的包装器来获取.so
. 有没有办法用 LLVM 工具代替这一步?
llvm - Understanding llvm-ir to assembly for x86_64-unknown-linux-gnu
I transform the following llvm-IR
to assembly code for x86_64-unknown-linux-gnu
using llc sample.ll
generated assembly code:
The register in the above code: %rbp
is the base pointer, which points to the base of the current stack frame, and %rsp
is the stack pointer, which points to the top of the current stack frame and operand are store in %eax
and %al
for arithmatic operation but in can't find the instruction where the value is load in %eax
and %al
register
I also want to know
- How llc is handling phi node on assembly level
llvm - 如何在 MachineInstr 中获取指令?
我想知道真实寄存器中的变量依赖性(如 X86:EAX、EBX ...)。因此,我创建了一个 IR-PASS,可以识别对 IR 的依赖关系。此传递使用新添加的变量和unsigned HasDependency: 1;
类。unsigned HasMaybeDependency: 1;
Value
当应用于这样的代码片段时:
产生这个位码:
上述位码的传递结果是:
我按照该SelectionDAGISel.cpp: SelectAllBasicBlocks
函数从后端获取信息,但我只能获取AllocaInst
,StoreInst
和LoadInst
using ,如下所示:
我怎么知道 和 之间的相关MachineInstr
性Instruction
?如果 LLVM 中没有提供,需要修复哪些部分?
c - OSX - 使用 llc 编译到 WebAssembly “llc: : error: unable to get target for 'wasm32', see --version and --triple.”
我在OSX上运行并尝试将以下 c 代码编译为 webAssembly:
我查看了这个示例并尝试运行以下命令:
第一个命令工作正常,clang 生成 .bc 文件,但是当我尝试运行第二个命令时,我得到:llc: : error: unable to get target for 'wasm32', see --version and --triple.
任何帮助,将不胜感激。
c - 带有 op & ld 的 LLVM - 链接错误
我正在尝试为一个项目熟悉 LLVM 和 clang,我将在其中使用不同的优化。因此,我不仅需要通过 clang 与 LLVM 交互,还需要使用 opt & llc。现在,我无法使用 C 库链接一个非常基本的示例。
代码(main.c):
LLVM Flow & ld 作为链接器:
ld的错误输出:
我对这个错误感到困惑:
- 我正在使用-lc,它应该链接stdc库
- ld 的输出表明找到了 libc
- 为什么 ld 抱怨 LLVM IR 文件中的错误?
一个更加愚蠢的 C 程序链接,但给了我一个分段错误和执行。
代码:
这让我想知道我是否在做一些根本错误的事情......
谢谢!
llvm - llc 没有调试或 -view-dag-combine1-dags 选项
我llc
通过包管理器在我的计算机上安装了程序(当然我安装了 LLVM,6.0.0 版本)。另外,我是从源代码构建的。我想要的是查看由 llvm 生成的 DAG。-debug
但是,不幸的是,我-view-dag-combine1-dags
在两个版本的llc
. 这让我发疯,因为它到处都是,这个标志应该可以帮助我,但没有提到如果我没有它们该怎么办。在 help 和 man 中,没有这样的选项。我安装了graphviz、dot和gv,应该不是问题。
编译的版本llc
。
我用 RelWithDebugInfo 标志构建了它,也许我应该用 Debug 标志构建它?或者cmake中是否有任何我应该启用的标志?我相信我已经用谷歌搜索了足够多的信息,但找不到任何信息。
compiler-construction - 点文件不为 -view-isel-dags 选项生成
在尝试SelectionDag
使用 LLVM(从启用调试模式的源构建)查看在指令选择阶段生成的节点时,我正在使用以下命令,该命令未创建 Graphviz DOT 文件。
相反,它正在创建sum.s
文件。我在这里缺少什么吗?
总和.c
总和.bc
LLVM 信息
llvm - 使用 LLVM 编译时有什么方法可以避免删除重复的加载指令
我正在创建 LLVM 前端模块通道。所以,基本上我需要复制所有加载指令并存储在不同的寄存器中。对于 clang、opt 和 llc 工具,在 -O0 处,删除了此重复的加载指令。我使用 objdump 查看了最终程序集,我可以看到删除了重复的加载指令。我想要一个不会删除重复加载指令的解决方案。
实际的 C 程序是,
对应的 IR 是,
但是当我的通行证被启用时,这个 IR 会改变,我只复制加载指令,加载地址是相同的内存,即使是重复加载也是如此。
更改后的 IR 将是,
我能够在 IR 级别看到更改的 IR,但在 llc 之后的最终组装级别看不到。我认为 llc 正在删除所有重复的负载。如何阻止 llc 删除?
注意:我尝试使所有变量都可变。为此,它可以工作,我可以在 llc 之后看到重复的负载。但是,这不是一个适当的解决方案。我不能让所有数千个变量都变得易变 :(。