我想玩LLVM IR并安装最新的LLVM v4(在我的Windows PC上)但我找不到已安装文件中的llc(查看'bin'文件夹和其他所有文件夹).
想知道这个工具是不可用的,或者它是否已被弃用或者是什么?
这是我的bin文件夹的内容:
04/30/2017 07:46 PM
04/30/2017 07:46 PM ..
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 …
... Clang可用于发出bitcode,使用Visual Studio的link.exe直接发出目标文件甚至链接的可执行文件.
为什么Link.exe
在Windows上使用必要?而且,就此而言,Mac/Linux上使用了什么?再往下说:
Compile the program to object code using the LLC code generator:
C:\..> llc -filetype=obj hello.bc
Link to binary using Microsoft link:
C:\..> link hello.obj -defaultlib:libcmt
Run Code Online (Sandbox Code Playgroud)
为什么LLC不能执行最后一步?LLI似乎工作得很好所以我认为它在link.exe
某种程度上可以在引擎盖下互操作- 为什么不能LLC?
我目前正在尝试使用Halide,初步测试显示出非常有前景的性能改进.
我现在想知道分发Halide代码的最佳策略是什么.要求用户安装Halide在这个时间点似乎是一个很大的障碍(因为没有自动安装选项).
一种选择是使用compile_to_c
,在存储库中添加生成的C代码,并为这样的C代码分发编译脚本.scikit-learn为Cython生成的代码使用了类似的策略.对于Halide来说,这似乎是不行的,因为生成的C代码失去了所有的优化,从而破坏了Halide的目的.
我目前的想法是使用
compile_to_bitcode,将生成的bitcode与调用llc的编译脚本一起分发以生成所需的机器代码.用户的唯一要求是安装llc
(即llvm
).
有没有人有这个问题的经验?
我分发bitcode的想法有什么利弊?
你会推荐什么?
我是LLVM编译器和基础架构的新手.我有以下想法.Clang是C/C++的LLVM前端,类似Rustc for Rust编程语言.两者都可以发出LLVM IR代码,并且可以将发出的代码编译为可执行应用程序.
我的问题是可以链接不同的编程语言吗?示例如下 -
/* Code in C */
int add(int, int);
int main()
{
printf("%d", add(5 ,6));
}
Run Code Online (Sandbox Code Playgroud)
以Rust中定义的函数为例
// Code in Rust
fn main()
{
println!("{}", add(5, 6));
}
fn add (x: i32, y: i32) -> i32
{
x + y
}
Run Code Online (Sandbox Code Playgroud)
从两个源文件生成IR后,是否可以链接它们并创建单个应用程序?
我很想知道这是否有效,请告诉我.
我正在使用 LLVM c 绑定来编写编译器,当我尝试从默认目标三元组 (x86_64-pc-windows-msvc) 创建目标时,LLVM 表示没有注册目标。
llvm::InitializeNativeTarget();
llvm::InitializeAllTargetInfos();
llvm::InitializeAllTargets();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllAsmParsers();
llvm::InitializeAllAsmPrinters();
auto target_triple = llvm::sys::getDefaultTargetTriple();
std::string err; // unable to find target for this triple (no targets are registered)
auto target = llvm::TargetRegistry::lookupTarget(target_triple, err);
llvm::TargetRegistry::printRegisteredTargetsForVersion(llvm::outs()); // prints (none)
Run Code Online (Sandbox Code Playgroud)
我已经从源代码构建了 LLVM,并使用 LLVM_TARGETS_TO_BUILD=all 标志来启用所有目标。然而,当我调用 llc --help 时,会列出大量目标。那么为什么 llvm C++ 代码找不到目标呢?
我llc
通过包管理器在我的计算机上安装了程序(当然我安装了 LLVM,6.0.0 版本)。另外,我还从源头构建了它。我想要的是查看由 llvm 生成的 DAG。但是,不幸的是,我-debug
在-view-dag-combine1-dags
两个版本的llc
. 这让我发疯,因为到处都写着这个标志应该对我有帮助,但没有提到如果我没有它们该怎么办。在 help 和 man 中,没有这样的选项。我安装了graphviz、dot和gv,应该不是问题。
编译的版本llc
。
./llc -version
LLVM (http://llvm.org/):
LLVM version 7.0.0svn
Optimized build.
Default target: x86_64-unknown-linux-gnu
Host CPU: broadwell
Registered Targets:
and targets...
Run Code Online (Sandbox Code Playgroud)
我已经使用 RelWithDebugInfo 标志构建了它,也许我应该使用 Debug 标志构建它?或者 cmake 中是否有任何我应该启用的标志?我相信我已经用谷歌搜索得够多了,但我找不到任何信息。
我是新手LLVM IR
,我正在尝试模拟一些x86指令LLVM IR
.
这是一个简单的案例:
move %eax, %ebx
Run Code Online (Sandbox Code Playgroud)
但是,mov
在查看此处和此处的材料后,我没有找到任何相应的操作码.
所以我的问题是:
如果我想mov
使用LLVM IR 模拟操作码?我该怎么办?
我是新手LLVM IR
,也许我会花很长时间在这个"模拟"工作上,关于LLVM IR的最佳参考应该是什么?
如果有人能给我一些帮助,我真的很感激.谢谢!