我想使用 LLVM / Clang 将基本程序 hello.c 编译为本机 x86 架构以生成中间和程序集。我使用了以下命令:
clang -O3 -emit-llvm hello.c -c -o hello.bc
llc hello.bc -o hello.s
它完美地工作。如何为其他架构生成代码,比如 SPARC 32 位?clang 中是否有任何标志用于指定架构?
我想使用 LLVM / Clang 将基本程序 hello.c 编译为本机 x86 架构以生成中间和程序集。我使用了以下命令:
clang -O3 -emit-llvm hello.c -c -o hello.bc
llc hello.bc -o hello.s
它完美地工作。如何为其他架构生成代码,比如 SPARC 32 位?clang 中是否有任何标志用于指定架构?
您可以运行llc --version
以获取支持的目标列表。从我的机器:
$ llc --version
LLVM (http://llvm.org/):
LLVM version 3.2svn
Optimized build with assertions.
Built Aug 30 2012 (23:29:11).
Default target: mipsel-sde-elf
Host CPU: corei7-avx
Registered Targets:
arm - ARM
cellspu - STI CBEA Cell SPU [experimental]
cpp - C++ backend
hexagon - Hexagon
mblaze - MBlaze
mips - Mips
mips64 - Mips64 [experimental]
mips64el - Mips64el [experimental]
mipsel - Mipsel
msp430 - MSP430 [experimental]
nvptx - NVIDIA PTX 32-bit
nvptx64 - NVIDIA PTX 64-bit
ppc32 - PowerPC 32
ppc64 - PowerPC 64
sparc - Sparc
sparcv9 - Sparc V9
thumb - Thumb
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
xcore - XCore
在你的情况下,你llc -march=sparc
可能想要。
您可以使用指定的特定目标构建 clang/llvm。默认情况下不指定 LLVM_TARGETS_TO_BUILD,它将构建所有目标,如下所示https://github.com/llvm-mirror/llvm/blob/master/CMakeLists.txt#L269
我知道这是旧的,但它在谷歌搜索结果中很高,并且可以使用与 clang 13.x 相关的一些信息。
以下命令提供了有用的信息,尤其是在不包含通常提到的 llc 程序的 Windows 版本上。
clang -print-effective-triple
clang -print-targets
clang-print-multiarch
clang-print-supported-cpus
clang -print-target-triple
clang -print-targets