问题标签 [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.

0 投票
2 回答
10790 浏览

windows - 为什么 windows 上的 clang/llvm 需要 Visual Studio 的 Link.exe?

根据LLVM 的入门(Windows)站点

... Clang 可用于发出位码、直接发出目标文件甚至使用 Visual Studio 的 link.exe 链接的可执行文件。

为什么Link.exe需要在 Windows 上使用?而且,就此而言,Mac/Linux 上使用什么?再往下说:

为什么 LLC 不能执行最后一步?LLI 似乎工作正常,所以我假设它link.exe在引擎盖下以某种方式互操作 - 为什么 LLC 不能?

0 投票
2 回答
958 浏览

image-processing - 推荐的分发卤化物生成函数的方法?

我目前正在试验Halide,最初的测试显示出相当有希望的性能改进。

我现在想知道分发卤化物代码的最佳策略是什么。目前,要求用户安装 Halide 似乎是一个沉重的障碍(因为没有自动安装选项)。

一种选择是使用compile_to_c,将生成的 C 代码添加到存储库中,然后分发此类 C 代码的编译脚本。scikit-learn对 Cython 生成的代码使用了类似的策略。对于 Halide 来说,这似乎是不行的,因为生成的 C 代码失去了所有的优化,违背了 Halide 的目的。

我目前的想法是使用 compile_to_bitcode ,将生成的位码与调用llc的编译脚本一起分发以生成所需的机器代码。对用户的唯一要求是安装llc(即llvm)。

有没有人有这个问题的经验?
我分发比特码的想法的优缺点是什么?
你会推荐什么?

0 投票
0 回答
355 浏览

compilation - 如何为@llvm.dbg.declare 定义元数据?

我正在尝试使用 @llvm.dbg.declare 来获取有关 llvm 代码中变量的信息我使用以下代码:

当我使用 llc file.ll 编译时,出现以下错误:

我不明白是 llvm 代码中的元数据定义有问题,还是我应该在编译时指定一些参数?

谢谢你的帮助

0 投票
2 回答
1336 浏览

llvm - LLVM IR 中的“移动”操作码是什么?

我是新手LLVM IR,我正在尝试模拟一些 x86 指令LLVM IR

这是一个简单的案例:

但是,我在查看hereheremov的资料后并没有找到任何对应的操作码。

所以我的问题是:

  1. 如果我想mov使用 LLVM IR 模拟操作码?我该怎么办?

  2. 我是新手LLVM IR,可能我会在这个“模拟”工作上花费很长时间,关于 LLVM IR 的最佳参考应该是什么?

如果有人能给我一些帮助,我真的很感激。谢谢!

0 投票
1 回答
937 浏览

compiler-construction - 如何避免 LLVM 的代码生成器执行不希望的常量折叠?

我想要实现的是避免某些常量(代表我的代码中的地址)的常量折叠,例如100000000下面的常量。我需要这个,因为稍后 JIT 编译的代码可能会被修补,这会由于对象重定位而改变常量。

下面的代码是我尽最大努力避免不断折叠(不惜一切代价)。它不起作用。我最终100011111在指令流中得到了常量。

llc -O0 code.ll -print-after-all表明折叠发生在Expand ISel Pseudo-instructions通过。

我意识到我的问题可以通过添加一些在 codegen 级别展开为 simple 的内在函数来解决movabs reg, imm64。但我暂时想有一个临时的解决方案。

问题:是否有可能在 llvm 中创建一个不被常量折叠的不透明常量?

我的 llvm 版本是 3.7.0svn。

0 投票
1 回答
342 浏览

llvm - llc -view-*-dags foo.ll 在 ubuntu 中不起作用

我已经在我的 Ubuntu 14.04 机器上安装了 LLVM3.6。我还为 LLVM_PATH_DOT=/usr/bin/dot以后设置了路径LLVM_PATH_DOT=/usr/bin/dotty.

我还尝试LLVM_ENABLE_DOXYGEN在 CMake 配置期间进行检查,并给出了 DOTTY 的路径。它也不起作用。

最后,我在 CMAKE 中创建了一个新条目,名为LLVM_PATH_DOTTY,并在路径中提供。它也不起作用。

当我尝试为 .ll 文件创建 DAG 输出时,llc 既不提供任何错误消息,也不打印图表。

我传入以下命令:

我怎么解决这个问题?谢谢

0 投票
1 回答
254 浏览

llvm - 编译手动编辑的 IR 文件时 llc 中的模块损坏错误

我尝试在代码中插入第35行和第36行,但是当我尝试使用llc生成.o文件时出现错误。

错误信息:

这是此功能的整个 IR:

我找不到此代码有任何问题,任何人都可以给我一些建议吗?

0 投票
1 回答
528 浏览

clang - 从 clang 传递给 llc 的参数是什么?

我正在做 llvm 项目。最近,我尝试使用 clang 命令行将我的一个 .c 文件编译为 .s 文件,方法是使用下一个命令:

它在函数 ARCHInstrInfo::storeRegToStackSlot 的后端崩溃,并带有堆栈的回溯。但是,当我尝试分步执行时:

它成功了!(?)我怎样才能看到clang如何调用后端(llc)?我尝试使用 -v 标志运行 clang,但它没有打印出它是如何调用后端的……

0 投票
2 回答
579 浏览

compiler-construction - 在当前版本中,如何通过 IR 代码生成 LLVM api 代码?

我正在尝试生成可以重新生成输入其中的 IR 代码的 LLVM API 代码。正如我通过诸如this question之类的各种问题发现的那样,在某些时候可以执行以下操作来实现此目标:

但是我收到以下错误:llc:错误:无效目标'cpp'。进一步的研究告诉我,当在 3.1 版中删除 c 后端时,在 LLVM 的早期版本中也发生了同样的问题。然而,我正在使用 cpp,这让我相信由于某种原因,我的 llvm 版本中不存在 cpp 后端。

所以我真的想从这里知道的是:如果我到目前为止的分析是正确的,我如何启用 cpp 后端或以其他方式让我的有限责任公司达到我可以以我想要的方式使用它的状态?当然,如果我错了或有其他方法,我会对此持开放态度。

我们选择使用的版本是 LLVM 3.6,这是通过 brew 在 OS X 上安装的。提前谢谢你。

编辑:这个问题已被指出为可能类似的问题。然而,这个问题是在 LLVM 3.2 的特定背景下提出的,因为我关注的是 3.6 版的当前情况,因为此时可能有一个真正的解决方案。该问题的唯一答案指向一般外部资源,并没有非常彻底地解释实际解决方案是什么。

0 投票
2 回答
743 浏览

c++ - 使用 Clang 和 LLVM

我正在编译这个:

使用 clang,使用以下命令行:

这给了我 llvm 字节码。

然后我llc像这样使用,将字节码转换为 c 代码:

并得到这个错误:

我做错了什么?

这就是 clang++ 给我的:

注意: 我使用的是clang3.8llc版和 3.4 版