问题标签 [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.
clang - 尝试使用 clang 编译代码时出错
我正在运行 Ubuntu 18.04。我正在尝试编译 llvm 代码,使用:llc-7 prog.ll -o prog.s
然后clang-7 prog.s lib.a -o prog.exe
. 如果您认为有帮助,我可以提供任何代码。我很确定图书馆的有效性lib.a
。我也尝试过 clang 版本 6。
运行 clang 时,使用-v
我得到的参数:
到目前为止,谷歌搜索并没有帮助我。你有什么建议吗?
如果我需要澄清任何事情或提供更多信息,请通知我。
c++ - 如何直接从 LLVM 源代码树中使用新编译的 LLVM 工具?
我正在编写一个MachineFunctionPass
针对 X86 架构的代码,这会导致修改后的llc
二进制文件。
为了测试我的修改版本,llc
我创建了一堆.c
程序,它们的 MIR 将由我的 pass 处理。
为了简洁起见,我已将包含源代码的目录直接添加到 LLVM 的源代码树中,特别是在$llvm_src_dir/lib/Target/X86/$examples_dir
: 然后我通过将add_subdirectory()
指令附加到$llvm_src_dir/lib/Target/X86/CMakeLists.txt
.
通过这种方式,我将能够直接从 LLVM 的构建目录构建所有内容。
现在:如何在我的指定$examples_dir/CMakeLists.txt
使用 LLVM 的 in-tree llc
?
源码树结构
这是源的目录结构。我省略了所有根目录的子目录,因为我只包含了“有趣的”。
LLVM 定义了llc
目标,tools/llc
而我的源在目录中的位置更深,如下图所示:
lib/Target/X86/CMakeLists.txt
这就是我编辑CMakeLists.txt
目标架构的方式:
我已经尝试过的
我目前正在使用find_path()
查找llc
,但这需要llc
已经编译,因此CMakeLists.txt
如果我不llc
事先编译,我的示例将无法通过验证。
假设路径存在,我最终在我的中使用了一个指令add_custom_command()
,但在我看来这太hacky了。llc
CMakeLists.txt
基本上,我需要将目标添加llc
为我的目标的依赖项,然后使用llc
“路径将我的示例”.bc
文件编译成.s
.
有任何想法吗?
非常感谢!
llvm - 如何从 MachineInstr 中检索指令的反汇编?
我需要调试MachineFunctionPass
我正在开发的。我的目标是x86
架构。
如何从MachineInstr
实例中检索目标反汇编?
示例MachineInstr
表示
预期反汇编(Intel 语法)
llvm - 如何让 LLVM 选择输出 MIR 以传递给 llc?
我需要将 MIR 文件传递给 LLC,以便我可以使用 -run-pass 选项,但我找不到任何关于从 opt 输出为 MIR 的信息。我怎样才能做到这一点?
llvm - llc 抛出错误:constexpr 需要整数操作数
我一直在尝试使用 llvm 进行代码生成。我目前正在尝试为变量声明生成 IR。这是一个例子:
let sum: float = 8 * 3 * 4 + 6 * 9;
当我为此生成 IR 时,这就是我得到的:
首先,这看起来很混乱,我相信这可以更有效地完成。但我认为我可以稍后通过优化来修复它。我的问题是在测试中看看它是否有效。我试过了:
llc my_ir
哪个抛出:
我不太明白这个错误信息,但听起来它不能乘以浮点数?这里发生了什么?
arm - 无法组装 llc 使用 arm-none-eabi-as 生成的 .s 文件?
我的英语水平很差,因为我不是以英语为母语的人。
我使用 llc.exe 编译了一个位码并获得了一个 .s 文件(test.s)。我用来创建 test.s 的命令如下。
是的,我的目标板是 cortex-m3(stm32l 系列),我创建了如下的 makefile 来创建 .bin 文件。
生成文件很简单。它的目标是从 test.s 文件创建 test.bin。
test.s 文件如下。我创建了 test.s 文件
到这里为止,一切都很顺利。在这里,我执行了 make.exe 来创建 test.bin,但出现如下错误。
不知道llc.exe生成的.s文件是不是不是cortex-m3的格式。
有人可以帮助我吗?我想知道问题的原因是什么。
谢谢阅读。
- - - - - - - - - - - - - - - - 更新 - - - - - - - - - -----------------
原始代码如下。代码只是为了测试目的而编写的。
位码如下。位码是手动生成的。
llvm - 编译 opencl 内核时出现非法 BitCast
下面的 bitcast 指令向我抛出了 Illegal Bitcast 错误,有人可以指出问题所在吗?
llvm - 通过修改 LLVM Backend 来破坏 X86 注册
我正在尝试稍微改变 X86 目标的 LLVM 后端,以产生一些所需的行为。
更具体地说,我想模拟像 gcc 的 fcall-used- reg 选项这样的标志,它指示编译器将被调用者保存的寄存器转换为被破坏的寄存器(这意味着它可能在函数调用期间被更改)。
让我们关注r14。我手动破坏了寄存器,就像在这个答案中一样:
编译和反汇编:
反汇编包含:
我们可以看到r14,因为它被篡改了,被压入堆栈,然后被弹出以恢复其原始值。现在,使用-fcall-used-r14标志重复:
反汇编包含:
没有推送/弹出的地方。
现在,我修改了一些 LLVM 目标文件,编译了源代码,并在llc工具中添加了(?)这个功能:
现在,main.s
包含:
显然,r14仍然是被调用者保存的。
在里面llvm/lib/Target/X86/X86CallingConv.td
我修改了以下几行(删除了 R14),因为它们似乎与我感兴趣的 Linux 和 C 调用约定的 System V ABI 唯一相关:
我的问题是:
- 是
X86CallingConv.td
我应该修改的唯一文件吗?我想是的,但也许我错了。 - 我是否专注于正确的线条?也许这更难回答,但至少一个方向可能会有所帮助。
我在 Debian 10.5 中运行 LLVM 11。
编辑:
更改行,从“隐藏”定义中删除 R14:
正如玛格丽特正确指出的那样,也没有帮助。
clang - llc -march=cpp 选项是否可用
我想学习如何正确使用 IRBuilder 方法来使用下面描述的类似步骤生成给定的位码。
llvm - 当前主机 cpu 的 llc/clang 精确 -march 目标
我正在尝试为 llvm 找到一个命令行选项来指定“为您正在编译的此主机生成代码,它应该利用所有可用的 CPU 功能,并且不需要在任何其他系统上运行”。
我在我使用的所有平台上都有相当新的 llvm 版本,它们都是 arm、arm64、x86 或 x86-64。所有代码都是 C 或 C++。
llvm 是否有通用选项?