clang は LLVM をバックエンドに使用しており, C言語で書かれたソースコードを LLVM IR に出力したり, 各アーキテクチャのアセンブリを出力することができます. コード生成や LLVM の勉強に利用できます.
LLVM と clang のインストール
ここでは割愛します. 今回は LLVM / clang 3.6.1 で動作確認しています.
C -> LLVM IR
C 言語のソースコードから LLVM IR を出力します. 1.ll
というファイルに LLVM IR が出力されます.
clang -c -S -emit-llvm 1.c
C -> LLVM ビットコード
C 言語のソースコードから LLVM ビットコードを出力します. 1.bc
というファイルにビットコードが出力されます.
# AT&T 形式 clang -c -S 1.c # Intel 形式 clang -c -S -mllvm --x86-asm-syntax=intel 1.c
LLVM ビットコード -> LLVM IR
LLVM ビットコードから LLVM IR を出力します. 1.ll
というファイルに LLVM IR が出力されます.
llvm-as 1.ll
LLVM IR / ビットコード -> アセンブリ
LLVM IR / ビットコードからアセンブリを出力します. 1.s
というファイルにアセンブリが出力されます. こちらも Intel 形式で出力することができます.
# LLVM IR -> AT&T 形式 llc 1.ll # LLVM IR -> Intel 形式 llc -x86-asm-syntax=intel 1.ll # LLVM ビットコード -> AT&T 形式 llc 1.bc # LLVM ビットコード -> Intel 形式 llc -x86-asm-syntax=intel 1.bc