llc - LLVM静的コンパイラ¶
概要¶
llc [オプション] [ファイル名]
説明¶
llc コマンドは、LLVMソース入力を指定されたアーキテクチャのアセンブリ言語にコンパイルします。アセンブリ言語出力は、ネイティブアセンブラとリンカに通してネイティブ実行可能ファイルを生成できます。
出力アセンブリコードのアーキテクチャの選択は、デフォルトをオーバーライドするために -march
オプションが使用されない限り、入力ファイルから自動的に決定されます。
オプション¶
ファイル名
が “-
” または省略されている場合、llc は標準入力から読み取ります。それ以外の場合、ファイル名
から読み取ります。入力は、LLVMアセンブリ言語形式(.ll
)またはLLVMビットコード形式(.bc
)のいずれかになります。
-o
オプションが省略されている場合、入力が標準入力からのものである場合、llc は出力を標準出力に送信します。-o
オプションが “-
” を指定する場合、出力も標準出力に送信されます。
-o
オプションが指定されておらず、“-
” 以外の入力ファイルが指定されている場合、llc は入力ファイルを取得し、既存の .bc
拡張子を削除し、.s
サフィックスを追加することで出力ファイル名を作成します。
その他の llc オプションについては、以下で説明します。
エンドユーザーオプション¶
- -help¶
コマンドラインオプションの概要を出力します。
- -o <ファイル名>¶
<ファイル名>
を出力ファイル名として使用します。詳細については、上記の概要を参照してください。
- -O=uint¶
さまざまな最適化レベルでコードを生成します。これらは、clang で使用される
-O0
、-O1
、-O2
、および-O3
最適化レベルに対応します。
- -mtriple=<ターゲット トリプル>¶
入力ファイルで指定されたターゲットトリプルを指定された文字列でオーバーライドします。
- -march=<arch>¶
アセンブリを生成するアーキテクチャを指定し、入力ファイルにエンコードされたターゲットをオーバーライドします。有効なアーキテクチャのリストについては、
llc -help
の出力を参照してください。デフォルトでは、これはターゲットトリプルから推測されるか、現在のアーキテクチャに自動検出されます。
- -mcpu=<cpuname>¶
コードを生成する現在のアーキテクチャの特定のチップを指定します。デフォルトでは、これはターゲットトリプルから推測され、現在のアーキテクチャに自動検出されます。使用可能なCPUのリストについては、以下を使用してください。
llvm-as < /dev/null | llc -march=xyz -mcpu=help
- -filetype=<出力 ファイル タイプ>¶
llc
が生成する出力の種類を指定します。オプションは、テキストアセンブリの場合はasm
('.s'
)、ネイティブオブジェクトファイルの場合はobj
('.o'
)、何も出力しない場合はnull
(パフォーマンステスト用)です。すべてのターゲットがすべてのオプションをサポートしているわけではないことに注意してください。
- -mattr=a1,+a2,-a3,...¶
SIMD操作が有効かどうかなど、ターゲットの特定の属性をオーバーライドまたは制御します。属性のデフォルトセットは、現在のCPUによって設定されます。使用可能な属性のリストについては、以下を使用してください
llvm-as < /dev/null | llc -march=xyz -mattr=help
- --frame-pointer¶
フレームポインタ削除最適化の効果を指定します(all、non-leaf、none)。
- --disable-excess-fp-precision¶
浮動小数点の精度が過剰になる可能性のある最適化を無効にします。このオプションは、一部のシステム(例:X86)でコードを劇的に遅くする可能性があることに注意してください。
- --enable-no-infs-fp-math¶
Inf値がないことを前提とする最適化を有効にします。
- --enable-no-nans-fp-math¶
NAN値がないことを前提とする最適化を有効にします。
- --enable-no-signed-zeros-fp-math¶
0の符号が無意味であると仮定するFP数学の最適化を有効にします。
- --enable-no-trapping-fp-math¶
例外を使用しないようにFP例外ビルド属性を設定する最適化を有効にします。
- --enable-unsafe-fp-math¶
IEEE数学について安全でない仮定を行う(たとえば、加算が連想的である)か、すべての入力範囲で機能しない可能性のある最適化を有効にします。これらの最適化により、コードジェネレータは、そうでなければ使用できない命令(X86の
fsin
など)を使用できるようになります。
- --stats¶
コード生成パスによって記録された統計を出力します。
- --time-passes¶
各パスに必要な時間を記録し、レポートを標準エラーに出力します。
- --load=<dso_path>¶
LLVMターゲットを実装する
dso_path
(動的に共有されるオブジェクトへのパス)を動的にロードします。これにより、-march
オプションでターゲット名を使用できるようになり、そのターゲットのコードを生成できます。
- -meabi=[default|gnu|4|5]¶
準拠するEABIバージョンを指定します。有効なEABIバージョンは、 *gnu*、 *4*、および *5* です。デフォルト値( *default*)はトリプルによって異なります。
- -stack-size-section¶
スタックサイズメタデータを含む.stack_sizesセクションを出力します。セクションには、関数シンボル値(ポインタサイズ)とスタックサイズ(符号なしLEB128)のペアの配列が含まれています。スタックサイズ値には、関数プロローグで割り当てられたスペースのみが含まれます。動的スタック割り当てを持つ関数は含まれません。
- -remarks-section¶
remark診断に関するメタデータを含む__remarks(MachO)セクションを出力します。
チューニング/構成オプション¶
- --print-after-isel¶
命令選択 (isel) 後に生成された機械語コードを出力します (デバッグに役立ちます)。
- --regalloc=<allocator>¶
使用するレジスタ割り当て器を指定します。有効なレジスタ割り当て器は以下のとおりです。
basic
基本的なレジスタ割り当て器。
fast
高速レジスタ割り当て器。最適化されていないコードのデフォルトです。
greedy
グリーディレジスタ割り当て器。最適化されたコードのデフォルトです。
pbqp
「分割ブール二次計画法」に基づくレジスタ割り当て器。
- --spiller=<spiller>¶
それをサポートするレジスタ割り当て器に使用するスピラーを指定します。現在、このオプションは線形スキャンレジスタ割り当て器によってのみ使用されます。デフォルトの
spiller
は *local* です。有効なスピラーは以下のとおりです。simple
単純なスピラー
local
ローカルスピラー
Intel IA-32 固有のオプション¶
- --x86-asm-syntax=[att|intel]¶
アセンブリコードを AT&T 構文 (デフォルト) または Intel 構文のどちらで出力するかを指定します。
終了ステータス¶
llc が成功した場合、0 で終了します。それ以外の場合、エラーが発生した場合、ゼロ以外の値で終了します。