C ユーザーズガイド

cc オプション

この項では cc オプションをアルファベット順に説明します。これらの説明はマニュアルページ cc (1) でも見ることができます。1 行に要約した説明が必要な場合は、 cc -flags オプションを使用してください。

特定のプラットフォームに固有と表記されたオプションを別のプラットフォームで使用してもエラーは起きません。単に無視されます。オプションおよび引数で使用している表記方法については、「書体と記号について」 を参照し てください。

-#

冗長モードでコンパイラを動作させます。呼び出された各構成要素が表示されます。

-###

呼び出された各構成要素が表示されますが、実行はされません。

-A<名前>[(<トークン>)]

<名前> を述語として <トークン> 関連付けます。#assert 前処理指令を実行するのと同様です。

事前表明 (preassertion): -Xc モードの場合、以下の事前表明は有効になりません。

-B[static|dynamic]

リンク時に結合するライブラリを静的と動的のどちらにするかを指定します。 static (静的) と指定するとライブラリが非共有ライブラリであることを示し、dynamic (動的) と指定すると共有ライブラリであることを示します。

-Bdynamic を指定すると、-lI オプションが指定されていれば、リンカーは libx.so というファイルを探し、次に lib x.a というファイルを探します。

-Bstatic を指定すると、リンカーは libx.a というファイルだけを探します。このオプションは、コマンド行中で何度も指定して、切り替えることができます。このオプションと引数は ld に渡されます。


注 -

Solaris 7 の 64 ビットコンパイル環境では、多くのシステムライブラリ (libc など) は、動的ライブラリのみ使用することができます。このため、コマンド行の最後に -Bstatic を使用しないでください。


-C

C プリプロセッサがコメントを削除しないようにします。ただし前処理指令の行にあるコメントは削除されます。

-c

ld(1) を使用するリンクを抑制して、ソースファイルごとに .o ファイルを作成します。 -o オプションを使用すると、1 つのオブジェクトファイルを明示的に指定することができます。

-D<名前>[=<トークン>]

#define 前処理指令が行うように、 <名前> を <トークン> に関連付けます。 「=<トークン>」を省略した場合はトークンとして 1 が使用されます。

事前定義: 次の事前定義は -Xc モードの場合は無効です。

次の事前定義はあらゆるモードにおいて有効です。

_ _sparcv9 (-Xarch=v9, v9a)

_ _sun

_ _unix

_ _SUNPRO_C=0x500

_ _'uname -s'_'uname -r' (例: _ _SunOS_5_7)

_ _sparc (SPARC)

_ _i386 (x86)

_ _BUILTIN_VA_ARG_INCR

_ _SVR4 sss

_ _RESTRICT は、-Xa および -Xt モードでのみ有効です。

コンパイラでは、_ _PRAGMA_REDEFINE_EXTNAME のようなオブジェクト形式のマクロを定義しておくことにより、プラグマを認識させることができます。

-d[y|n]

-dy はリンクエディタに動的なリンクを指定します (デフォルト)。

-dn はリンクエディタに静的なリンクを指定します。

このオプションと引数は ld(1) に渡されます。


注 -

Solaris 7 の 64 ビットコンパイル環境では、多くのシステムライブラリは、動的ライブラリのみ使用することができます。このため、このオプションと -Xarch=v9 を組み合わせると、致命的なエラーになります。


-dalign

(SPARC) パフォーマンスを向上させるために、可能であればどこででもダブルワードのロードもしくはストア命令を生成します。また、double および long long 型のデータはすべてダブルワードで境界整列されているものとみなします。正しい境界整列が保証されないときはこのオプションを使用しないでください。

-E

ソースファイルの前処理だけを行い、結果を stdout に出力します。プリプロセッサの行番号付け情報も含みます (-Pを参照してください)。

-erroff=t

cc 警告メッセージを抑制します。エラーメッセージには影響しません。

t には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

<タグ>、no%<タグ>、%all、%none

指定順序によって実行内容が異なります。たとえば、「%all, no%<タグ>」と指定すると、<タグ> 以外のすべての警告メッセージを抑制します。

表 2-1 -erroff の値

値 

意味 

<タグ>

<タグ> のリストに指定されているメッセージを抑制します。 -errtags=yes オプションを使用すればメッセージのタグを表示することができます。

no%<タグ>

<タグ> 以外のすべての警告メッセージを抑制します。

%all

すべての警告メッセージを抑制します。 

%none

すべてのメッセージの抑制を解除します (デフォルト)。

デフォルトは -erroff=%none です。-erroff と指定すると、-erroff=%all を指定した場合と同じ結果が得られます。

エラーメッセージの抑制は、さらに細かく制御することができます。#pragma error_messages(on|off|default,<タグ>... <タグ>)を参照してください。

-errtags=a

各エラーメッセージのメッセージタグを表示します。

a には yes または no のいずれかを指定します。デフォルトは -errtags=no です。 -errtags と指定すると、-errtags=yes を指定した場合と同じ結果が得られます。

-fast

パフォーマンスを向上するために、各種コンパイラオプションの最適の組み合わせを選択します。これにより、大部分のアプリケーションを対象としてほぼ最大限のパフォーマンスが得られるようになります。-fast を使用してコンパイルしたモジュールは必ず、 -fast でリンクしなければなりません。

-fast オプションは、コンパイルを行なったマシンとは別のマシンでプログラムを実行する場合には適していません。このような場合は、-fast の後に該当する xtarget オプションを指定します。たとえば、次のとおりです。

cc -fast -xtarget=ultra ...

SVID によって規定された例外処理に依存する C モジュールに対しては、-fast の後に -nolibmil を指定します。


% cc -fast -nolibmil

-xlibmil を使用すると、例外発生時でも errno が設定されなかったり、あるいは matherr(3m) が呼び出されません。

-fast オプションは、厳密な IEEE 754 規格準拠を必要とするプログラムには適していません。

-fast で選択する各オプションは、プラットフォームごとに異なります。

表 2-2 プラットフォーム別の -fast の選択

オプション 

SPARC 

x86 

-dalign

○ 

− 

-fns

○ 

○ 

-fsimple=1

○ 

− 

-ftrap=%none

○ 

○ 

-libmil

○  

○ 

-xtarget=native

○ 

○ 

-nofstore

− 

○ 

-xO4

○ 

○ 

-fsingle

○ 

○ 

-fast はコマンド行でマクロ展開のように動作します。したがって、最適化レベルとコード生成の内容を、-fast の後に指定したオプションで指定した場合は、-fast での指定は無視されます。「-fast -xO4」でコンパイルすることは「-xO2 -xO4」の組み合わせでコンパイルすることと同じで、後ろの指定が優先されます。

前回のリリースでは、-fast のマクロオプションには -fnonstd が含まれていましたが、今回のリリースでは、-fns に置き換えられています。

このオプションを使用すれば、大部分のプログラムのパフォーマンスを向上させることができます。

このオプションは、IEEE 規格例外処理に依存するプログラムには使用しないでください。数値結果が異なったり、プログラムが途中で終了したり、予想外の SIGFPE シグナルが発生する可能性があります。

-fd

K&R 形式の関数の宣言や定義を報告します。

-flags

使用できる各コンパイラオプションについて 1 行の要約を出力します。

-fnonstd

浮動小数点演算ハードウェアの非標準の初期化を行います。-fnonstd オプションを使用すると、浮動小数点のオーバーフロー、ゼロによる除算、不正演算例外に対し、ハードウェアによるトラップが可能になります。これらの例外は SIGFPE シグナルに変換されます。プログラムが SIGFPE ハンドラを持っていないときは、メモリーダンプを行なってプログラムを終了します。

デフォルトでは、IEEE 754 の浮動小数点演算機能は無停止であり、アンダーフローは段階的です (詳細については 「非標準浮動小数点」参照)。

(SPARC) -fns-ftrap=common を指定することと同等です。

-fns[={no,yes}]

(SPARC) 非標準の浮動小数点モードに切り替えます。

デフォルトは -fns=no で、SPARC 標準浮動小数点モードです。

オプションの =yes または =no を使用すると、-fast のように、-fns を含む他のマクロフラグに続く -fns フラグを切り替えることができます。このフラグを設定すると、プログラムが実行を開始するときに、非標準の浮動小数点モードが有効になります。デフォルトでは、非標準の浮動小数点モードは自動的に有効になりません。

一部の SPARC システムでは、非標準の浮動小数点モードは「段階的アンダーフロー」を無効にします。つまり、小さな結果は、非正規数にはならず、ゼロに切り捨てられます。また、非正規オペランドはメッセージなしにゼロに変更されます。段階的アンダーフローと非正規数をハードウェアでサポートしていない SPARC システムでこのオプションを使用すると、プログラムによってはパフォーマンスが飛躍的に上がることがあります。

非標準モードを有効にすると、浮動小数点演算は IEEE 754 規格に準拠しない結果を生成する場合があります。詳細は、『数値計算ガイド』を参照してください。

このオプションは、SPARC システム上だけで有効であり、さらに、メインプログラムをコンパイルするときに使用する場合だけ有効です。x86 システムでは、このオプションは無視されます。

-fprecision=<p>

(x86) -fprecision={single、double、extended} 浮動小数点制御ワードの丸め精度モードのビットを、単精度 (24 ビット)、倍精度 (53 ビット) または拡張精度 (64 ビット) に設定します。デフォルトの浮動小数点丸め精度モードは拡張モードです。


注 -

Intel では、浮動小数点丸め精度モードの設定は精度に対してのみ影響します。指数の有効範囲に対しては影響しません。


-fround=r

プログラム初期化中の実行時に確立される IEEE 754 小数点丸めモードを設定します。

r は、nearesttozeronegativepositive のうちのいずれかです。

デフォルトは、-fround=nearest です。

ieee_flags サブルーチンと同等です。

rtozeronegativepositive のいずれかにすると、プログラムが実行を開始するときに、丸め方向モードがそれぞれ、ゼロの方向に丸める、負の無限の方向に丸める、 正の無限の方向に丸めるに設定されます。rnearest のとき、あるいは -fround フラグを使用しないとき、丸め方向モードは初期値から変更されません (デフォルトは nearest)。

このオプションは、メインプログラムのコンパイル時に使用する場合だけ有効です。

-fsimple[=n]

オプティマイザが浮動小数点演算に関する前提事項を単純化できるようにします。

n を指定する場合は、0、1、2 のいずれかでなければなりません。デフォルトは次のとおりです。

-fsimple=0

前提事項の単純化を行えないようにします。厳密に IEEE 754 に準拠します。

-fsimple=1

適度の単純化を行えるようにします。生成されるコードは IEEE 754 に厳密には準拠しませんが、大部分のプログラムの数値結果は変化しません。

-fsimple=1 を指定すると、オプティマイザは以下の事項を前提とします。

-fsimple=1 を指定した場合は、オプティマイザは必ず四捨五入や数値例外に応じた処理を行います。特に浮動小数点演算は、実行時に定数化される四捨五入モードでは異なる結果を生じる演算と、置き換えることはできません。-fast マクロフラグを使用すると、-fsimple=1 に設定されます。

-fsimple=2

高度な浮動小数点最適化を行うことができ、丸めの変化によって、多くのプログラムが異なる数値結果を生じる可能性があります。たとえば、オプティマイザはあるループ内に x/y の演算があった場合、x/y がループ内で少なくとも 1 回は必ず評価され、ループの実行中に y と z(=1/y) が一定の値をとると判断できると、x/y の演算をすべて x*z で置き換えることができると仮定します。

本来浮動小数点例外を発生しないプログラムならば、-fsimple=2 を指定してもオプティマイザが浮動小数点例外を発生させることはありません。

-fsingle

(-Xt モードまたは -Xs モードの場合に限り) float 式を倍精度ではなく単精度で評価します。-Xa モードまたは -Xc モードを使用している場合、float 式はすでに単精度として評価されているのでこのオプションは無効です。

-fsimple=2 を指定しても、本来浮動小数点例外を生成しないプログラムには、オプティマイザは浮動小数点例外を導入しません。

-fstore

(x86) 浮動小数点式または関数が、ある変数に代入されるか、より小さい型の浮動小数点にキャストされる場合に、コンパイラがその値をレジスタに残さないで、代入値の左側に表記される型に変換するようにします。小数点の丸めおよび切り上げを行うため、結果はレジスタの値から生成される数値と異なる可能性があります。これはデフォルトです。

このオプションを解除するには、オプション -nofstore を使用してください。

-ftrap=t

起動時に有効になる IEEE 754 トラップモードを設定します。

t には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

%all、%none、common、[no%]invalid、[no%]overflow、 [no%]underflow、[no%]division、[no%]inexact

デフォルトは -ftrap=%none です。

このオプションは、プログラム初期化時に設定される IEEE 754 トラップモードを設定します。項目は左から右への順に評価されます。common を指定した場合は、定義により、無効、0 除算、オーバーフローの各例外のトラップモードがオンになります。

たとえば、-ftrap=%all,no%inexact は、inexact 以外のすべてのトラップを設定することを意味します。

意味は、次の項目を除き、ieee_flags サブルーチンの場合と同じです。

1 つのルーチンを -ftrap=t オプションでコンパイルした場合は、そのプログラムの ルーチンすべてを -ftrap=t オプションを使用してコンパイルしてください。途中から異なるオプションを使用すると、予想に反した結果が生じることがあります。

-G

動的にリンクされる実行可能プログラムではなく、共有オブジェクトを作成することをリンクエディタに指令します。このオプションは ld(1) に渡されます。このオプションは-dn オプションと併用することはできません。

-g

デバッガ用に追加のシンボルテーブル情報を作成します。

このオプションを指定すると、インクリメンタルリンカーを使用します。 -xildon および -xildoff を参照してください。-G または -xildoff オプションを使用していない場合、あるいはコマンド行にソースファイルの名前を指定していない場合は、ld の代わりに ild を呼び出します。

-O オプションと組み合わせて使用すると、特定の範囲だけをデバッグすることができます。 -xO4-g を組み合わせて使用すると、-xO4 で通常有効になるインライン化が取り消されます。

-H

現在のコンパイルでインクルードされたファイルのパス名を 1 行に 1 つずつ標準出力に表示します。

字下げして表示されるので、ファイルがさらにファイルをインクルードする様子を見ることができます。以下で、sample.cstdio.h ファイルと math.h ファイルをインクルードします。math.hfloatingpoint.h ファイルをインクルードし、floatingpoint.h はさらに、sys/ieeefp.h を使用する関数をインクルードします。


$ cc -H sample.c
	/usr/include/stdio.h
	/usr/include/math.h
	/usr/include/floatingpoint.h
	/usr/include/sys/ieeefp.h

-h<名前>

共有動的ライブラリに <名前> をつけます。これによって異なったバージョンのライブラリを作成できます。一般に -h の後の <名前> は、-o オプションの後に指定するファイル名と同じです。-h と名前の間の空白は任意です。

リンカーは指定された <名前> をライブラリに割り当て、この名前をライブラリのイントリンシック名としてライブラリファイルに記録します。-h <名前> オプションがない場合、イントリンシック名はライブラリファイルに記録されません。

実行時リンカーはライブラリを実行可能ファイルにロードするとき、イントリンシック名をライブラリファイルから実行可能ファイル中の、必要とする共有ライブラリファイルのリストにコピーします。実行可能ファイルはこのリストを持っています。共有ライブラリのイントリンシック名がない場合、代わりにリンカーは共有ライブラリファイルのパス名をコピーします。

-I<ディレクトリ>

ディレクトリのリストに <ディレクトリ> を追加します。このディレクトリは (スラッシュで始まっていない) 相対ファイル名で指定されるインクルードファイルを検索するときのディレクトリです。インクルードファイルの検索順序については、インクルードファイルを参照してください。

-i

オプションをリンカーへ渡して、LD_LIBRARY_PATH の設定を無視します。

-keeptmp

コンパイル中に作成される一時ファイルを自動的に削除しないで保持します。

-KPIC

-KPIC は、-xcode=pic32 と同義です。-xcode=vを参照してください。

(x86) -KPIC-Kpic と同じです。

-Kpic

-Kpic は、-xcode=pic13 と同義です。-xcode=vを参照してください。

-L<ディレクトリ>

ld(1) がライブラリを検索するディレクトリのリストに <ディレクトリ> を付け加えます。このオプションとその引数は ld に渡されます。

-l<名前>

ld がオブジェクトライブラリ lib <名前> .so、または lib <名前> .a をリンクの対象とします。シンボルは左から右へ解決されるため、コマンド行でのライブラリの指定順が重要になります。

このオプションは <ソースファイル> 引数の後に指定してください。

-mc

オブジェクトファイルの .comment セクションから重複している文字列を削除します。 -mc フラグを使用すると、mcs -c が起動されます。

-misalign

(SPARC) 以下のようなコードで、コンパイラにプログラム中のデータが正しく境界整列されていないと通知します。


char b[100];
int f(int *ar){
return  *(int *)(b +2) + *ar;
}

したがって、データに対して非常に保守的なロードとストア (一度に 1 バイトずつ) を実行しなければなりません。このオプションを使用すると、プログラムの実行時にパフォーマンスが大幅に低下する場合があります。コンパイルとリンクを別々に実行する場合、コンパイルに -misalign オプションを使用する際には、リンクにも -misalign オプションを指定しなければなりません。

-misalign2

(SPARC) -misalign と同様にデータが正しく境界整列されていないが、少なくともハーフワードで境界整列されていると想定します。データに対しては保守的なロードとストアを実行しなければなりませんが、プログラム実行時のパフォーマンス低下は -misalign の場合ほど顕著ではありません。コンパイルとリンクを別々に実行する場合、それぞれについて -misalign2 オプションを指定しなければなりません。

-mr

オブジェクトファイルの .comment セクションからすべての文字列を削除します。このフラグを使用すると、mcs -d -a が起動されます。

-mr,<文字列>

オブジェクトファイルの .comment セクションからすべての文字列を削除して <文字列> を挿入します。<文字列> に空白が含まれている場合は二重引用符で括ります。 <文字列> がなければ .comment セクションは空になります。このオプションは -da<文字列> として mcs に渡されます。

-mt

-D_REENTRANT -lthread に展開されるマクロオプションです。ユーザー固有のマルチスレッドコーディングを行なっている場合は、コンパイルとリンクのときに必ず -mt オプションを使用してください。マルチプロセッサシステム上でこのオプションを使用すると、生成された実行可能ファイルの実行速度が早くなります。シングルプロセッサシステム上では、実行速度は通常よりも遅くなります。

-native

このオプションは、-xtarget=native と同義です。

-fast のマクロ展開には、-xtarget=native が含まれます。

-nofstore

(x86) 浮動小数点式または関数がある変数に代入されるか、より小さい型の浮動小数点にキャストされる場合に、代入値の左側に表記される型に変換せずに、コンパイラがその値をレジスタに残すようにします。-fstoreを参照してください。

-noqueue

ライセンスが得られない場合は、このコンパイル要求を待ち行列に入れないようにコンパイラに指示します。普通の状態では、コンパイラはライセンスを得られなければそれが得られるまで待機しますが、このオプションを使用するとコンパイラはただちに戻ります。

-O

-xO2 と同じです。

-o <出力ファイル>

出力ファイルに (デフォルトの a.out の代わりに) <出力ファイル> という名前を付けます。cc はソースファイルに上書きしないので、<出力ファイル> には <ソースファイル> と同じ名前は使用できません。このオプションと引数は、ld(1) に渡されます。

-P

ソースファイルのプリプロセッサ処理のみを行い、.i 接尾辞の付いたファイルに結果を出力します。-E オプションと異なり、出力ファイルに C のプリプロセッサ行番号付け情報は含まれません (-Eを参照してください)。

-p

prof(1) がプロファイルデータを収集するためのオブジェクトコードを作成します。プログラムを実行すると、実行時の記録機構が起動されます。プログラムが正常終了すると、この記録機構によって mon.out ファイルが作成されます。

-Q[y|n]

出力ファイルに識別情報を入れるかどうかを設定します。-Qy がデフォルトです。-Qy を指定すると、起動した各コンパイラツールの識別情報が出力ファイルの .comment に追加され、mcs でのアクセスが可能になります。これはソフトウェア管理に役立ちます。

-Qn を指定すると、この情報が抑制されます。

-qp

-p と同じです。

-R<ディレクトリ>[:<ディレクトリ>]

実行時リンカーが使用するライブラリ検索ディレクトリを渡します。リストが空でなければ、出力オブジェクトファイルに記録され、実行時リンカーに渡されます。

LD_RUN_PATH-R オプションの両方が指定されたときは、この -R オプションが優先されます。

-S

アセンブリ・ソースファイルを作成しますが、アセンブルは行いません。

-s

出力されるオブジェクトファイルからシンボリックデバッグのための情報をすべて削除して ld(1) に渡します。このオプションは、-g とともに指定することはできません。

-U<名前>

初期定義されているプリプロセッサシンボル <名前> をすべて削除します。このオプションは -D オプションと逆の働きをします。複数の -U オプションを指定することができます。

-V

コンパイラの実行時に各構成要素の名前とバージョン番号を表示します。

-v

意味検査および他の lint に似た検査をより厳しく行います。以下は支障なくコンパイルと実行ができるコードです。


#include <stdio.h>
main(void)
{
     printf("Solipsism isn't for everybody.¥n");
}

-v を使用すると、コンパイルは行われますが以下の警告が表示されます。

関数中に return 文がありません: main

-vlint(1) が発する警告をすべて表示するわけではありません。lint で上記の例を実行すると確認することができます。

-Wc,<引数>

指定されたコンパイラ構成要素 c に、<引数> を渡します。各引数はコンマで区切ります。すべての -W 引数は、通常のコマンド行の引数の後に渡されます。コンマの前にバックスラッシュ (¥) 文字を置いてエスケープすることにより、コンマを引数の一部にできますc は以下のいずれかです。

表 2-3 -W の引数

a

アセンブラ (fbe)、 (gas)

c

C コードジェネレータ (cg) (SPARC)、 (codegen) (x86)

l

リンクエディタ (ld)

m

mcs (Solaris 2.x)

p

プリプロセッサ (cpp)

0

コンパイラ (acompssbd)

2

オプティマイザ (iropt) (SPARC)、中間コードのトランスレータ (cg386) (x86)

-w

コンパイラの警告メッセージを抑制します。

このオプションは error_messages プラグマを無効にします。

-X[a|c|s|t]

以下の各 -X オプションは ANSI C に準拠する度合いを指定します (大文字と小文字を区別してください)。デフォルトのモードは -Xa です。

-Xa

(a = ANSI) ANSI C に K&R C との拡張互換性を持たせます。ANSI C に従って意味処理を変更します。同じ言語構造に対して ANSI C と K&R C の意味処理が異なる場合は、相違に関する警告を発した上で ANSI C に準拠した解釈を行います。これは、コンパイラのデフォルトのモードです。

-Xc

(c = conformance) ANSI C にない言語構造を使用しているプログラムに対してエラーや警告を発行します。このオプションは ANSI C に最大限に準拠するもので、K&R C との拡張互換性はありません。

-Xs

(s = K&R C) ANSI C と K&R C の間で動作が異なるすべての言語構造に対して警告を発行します。K&R C と互換性のあるすべての機能がコンパイルされます。このオプションでは前処理用に /usr/ccs/lib/cpp が呼び出され、_ _STDC_ _ は定義されません。ANSI C と K&R C に違いについては、付録 G 「K&R Sun C と Sun ANSI C の違い」を参照してください。

-Xt

(t = transition) ANSI C に K&R C との拡張互換性を持たせます。ANSI C に従った意味処理の変更は行いません。同じ言語構造に対して ANSI C と K&R C の意味処理が異なる場合、相違に関する警告を発した上で K&R C に準拠した解釈を行います。

-x386

(x86) 80386 プロセッサ用に最適化します。

-x486

(x86) 80486 プロセッサ用に最適化します。

-xa

基本ブロックが実行される回数を数えるコードを挿入します。このオプションは古い形式の、tcov 用基本ブロックプロファイリングです。新しい形式のプロファイリングについては -xprofile=pを、また詳細については tcov(1) マニュアルページおよび『プログラムのパフォーマンス解析』を、それぞれ参照してください。

-xa すべての .c ファイルに対して、(正常終了時に) .d ファイルを作成する実行時の記録機構を起動します。この .d ファイルには対応するソースファイルの実行データが累積されます。ソースファイルに対して tcov(1) を実行すると、プログラムに関する統計情報を生成することができます。このオプションは最適化を伴うので、-g と同時に使用することはできません。

TCOVDIR 環境変数をコンパイル時に設定すると、.d ファイルを格納するディレクトリを指定することができます。この変数を設定しない場合には、.d ファイルは .c ファイルと同じディレクトリ内に格納されたままになります。

-xprofile=tcov-xa オプションは、同じ実行可能ファイル内で共存できます 。すなわち、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルをリンクすることができます。1 つのファイルを両方のオプションでコンパイルすることはできません。

-xarch=a

コンパイラが使用できる命令セットを指定します。

a には、generic、 v7、 v8a、 v8、 v8plus、 v8plusav9、v9a、386、pentium_pro のいずれか 1 つを指定しなければなりません。

このオプションは単独で使用することができますが、本来は -xtarget オプションの展開の一部です。主に、-xtarget オプションで取得した値を上書きする際に使用されます。

このオプションは、指定したアーキテクチャの命令だけが生成されるように限定して、特定の命令セットだけが生成されるようにします。このオプションで生成された特定のセットが必ず使用されるとは限りませんが、最適化を行う際には、通常そのセットが使用されます。

このオプションを最適化と併せて使用する場合、適切なアーキテクチャを選択すると、指定のアーキテクチャ上での実行パフォーマンスを向上させることができます。ただし、不適切なアーキテクチャを選択すると、パフォーマンスを大幅に低下させることがあります。

v7、v8、v8a はバイナリ互換性があります。v8plusv8plusa はバイナリ互換ですが、他のアーキテクチャに対しては上位互換性はありますが、下位互換性はありません。

古いアーキテクチャでは、実行速度が遅くなることがあります。

v9v9a は、それぞれバイナリ互換性があります。しかし、以前のアーキテクチャとの下位互換性はなく、Solaris 7 上だけで利用できます。

表 2-4 -xarch の値

意味 

generic

ほとんどの x86、SPARC の各アーキテクチャで良好なパフォーマンスが得られます。パフォーマンスの著しい低下が生じることはありません。 

これがデフォルトです。このオプションは、ほとんどの x86、SPARC プロセッサで良好なパフォーマンスを提供し、どの SPARC プロセッサでも著しいパフォーマンス低下が生じない最適な命令セットを使用します。これらの最高のタイミング特性は、新しいリリースごとに、必要に応じて調整されます。 

v7

命令セットを V7 アーキテクチャに限定します。 

このオプションは V7 アーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用します。ただし、4 倍精度の浮動小数点命令は使用しません。 

これは V8 アーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用するのと同義ですが、以下の命令は使用しません。 

4 倍精度の浮動小数点命令 

整数の mul および div 命令

fsmuld 命令

例: SPARCstation 1、SPARCstation 2 

v8a

命令セットを V8 アーキテクチャの V8a バージョンに限定します。 

定義では V8a は基本的に V8 アーキテクチャのことですが、以下の命令は使用しません。 

4 倍精度の浮動小数点命令 

fsmuld 命令

このオプションは V8 のアーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用します。 

例: MicroSPARC(TM) チップのアーキテクチャにもとづくマシン 

v8

命令セットを V8 アーキテクチャに限定します。 

このオプションは V8 アーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用しますが、4 倍精度の浮動小数点命令は使用しません。 

例: SPARCstation 10 

v8plus

命令セットを V9 アーキテクチャの V8plus バージョンに限定します。 

定義では V8plus または V8+ は基本的に V9 アーキテクチャのことですが、以下の点が異なります。 

4 倍精度の浮動小数点命令を使用しない 

V8plus 仕様で定義される 32 ビットの部分集合に限定される 

VIS 命令を使用しない 

このオプションは V8plus のアーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用します。V8plus では、V9 の 64 ビットレジスタをもつシステムであっても 32 ビットのアドレス指定モードで動作しますが、ix および lx レジスタの上位 32 ビットを使用してプログラム結果に影響を及ぼすことはできません。

例: UltraSPARC(TM) チップのアーキテクチャにもとづくマシン 

-xarch=v8plus を指定すると、.o ファイルは V8plus のバイナリとみなされます。このバイナリは、V7 および V8 のマシンでは実行できません。

v8plusa

命令セットを V9 のアーキテクチャの V8plusa バージョンおよび Visual Instruction Set (VIS) のバージョン 1.0 に限定します。 

定義では V8plusa は V8plus アーキテクチャに加えて以下の命令を使用します。 

UltraSPARC 固有の命令 

VIS 命令 

このオプションは UltraSPARC アーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用します。ただし、V8plus 仕様で定義される 32 ビットの部分集合に限定されます。 

例: UltraSPARC チップのアーキテクチャにもとづくマシン 

-xarch=v8plusa を使用するときも、.o ファイルは Sun 固有の V8plus バイナリとみなされます。このバイナリは、V7 および V8 のマシンでは実行できません。

v9

命令セットを V9 アーキテクチャに限定します。生成される .o オブジェクトファイルは 64 ビット ELF 形式で、同じ形式のオブジェクトファイルとだけリンクできます。生成される実行可能ファイルは、64 ビットカーネルを持つ 64 ビット Solaris 7 が動作している 64 ビット SPARC プロセッサ上だけで実行できます。このオプションでコンパイルすると、V9 SPARC アーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用します。ただし、4 倍精度の浮動小数点命令は使用しません。

Solaris 7 より前の バージョンの SunOS では、このオプションは使用できません。 

v9a

命令セットを SPARC-V9 アーキテクチャに限定し、Visual Instruction Set (VIS) と UltraSPARC プロセッサ固有の拡張を追加します。生成される .o オブジェクトファイルは 64 ビット ELF 形式で、同じ形式のオブジェクトファイルとだけリンクできます。生成される実行可能ファイルは、64 ビットカーネルを持つ 64 ビット Solaris 7 が動作している 64 ビット SPARC プロセッサ上だけで実行できます。このオプションでコンパイルすると、V9 UltraSPARC アーキテクチャでのパフォーマンスを良好にする最適な命令セットを使用します。ただし、4 倍精度の浮動小数点命令 (64 ビット Solaris 7 でのみ利用可能) は使用しません。

Solaris 7 より前の バージョンの SunOS では、このオプションは使用できません。 

386

命令セットを Intel x86 アーキテクチャのバージョンに限定します。 

pentium_pro

命令セットを Intel Pentium Pro アーキテクチャのバージョンに限定します。 

-xautopar

(SPARC) 複数プロセッサの自動並列化を有効にします。依存性の解析 (ループの繰り返し内部でのデータ依存性の解析) およびループ再構成を実行します。最適化が -xO3 以上でない場合は -xO3 に上げられ、警告が出されます。

独自のスレッド管理を行なっている場合には、-xautopar を使用しないでください。

Sun WorkShop には、マルチプロセッサ用の C オプションを使用するのに必要なライセンスが含まれています。実行速度を高めたければ、マルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたバイナリの実行速度は低下します。

使用できるプロセッサの数を調べるには、psrinfo コマンドを使用してください。


% psrinfo
0   on-line since 01/12/95 10:41:54
1   on-line since 01/12/95 10:41:54
2   on-line since 01/12/95 10:41:54
3   on-line since 01/12/95 10:41:54

複数のプロセッサを使用するには、PARALLEL 環境変数を設定してください。デフォルトは 1 です。

-xautopar を使用してコンパイルとリンクを 1 度に実行する場合、リンクには自動的にマイクロタスキング・ライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xautopar を使用してコンパイルとリンクを別々に実行する場合、リンクにも -xautopar を指定しなければなりません。

-xcache=c

オプティマイザ用のキャッシュ特性を定義します。

c には以下のいずれかを指定します。

si、li、ai の定義は以下のとおりです。

si

レベル i のデータキャッシュのサイズ (キロバイト単位)

li

レベル i のデータキャッシュのラインサイズ (バイト単位)

ai

レベル i のデータキャッシュの結合特性

このオプションは単独で指定できますが、-xtarget オプションの展開の一部です。 -xtarget オプションによって指定された値を変更することが主な目的です。

このオプションは、オプティマイザが使用できるキャッシュ特性を指定します。特定のキャッシュ特性が必ず使用されるわけではありません。

表 2-5 -xcache の値

値 

意味 

generic

ほとんどの x86、SPARC の各アーキテクチャで良好なパフォーマンスを得るためのキャッシュ特性を定義します。 

これはデフォルトです。ほとんどの SPARC プロセッサに良好なパフォーマンスを提供し、どの x86、SPARC の各プロセッサでも著しいパフォーマンス低下が生じないようなキャッシュ特性を使用するように、コンパイラに指示します。 

これらの最高のタイミング特性は、新しいリリースごとに、必要に応じて調整されます。 

s1/l1/a1

レベル 1 のキャッシュ特性を定義します。 

s1/l1/a1:s2/l2/a2

レベル 1 と 2 のキャッシュ特性を定義します。 

s1/l1/a1:s2/l2/a2:s3/l3/a3

レベル 1、2、3 のキャッシュ特性を定義します。 

例: -xcache=16/32/4:1024/32/1 では、以下の内容を指定します。

レベル 1 のキャッシュ 

レベル 2 のキャッシュ 

16K バイト 

1024K バイト 

32 バイトのラインサイズ 

32 バイトのラインサイズ 

4 ウェイアソシアティブ 

ダイレクトマップ結合 

-xCC

C++ 形式のコメントを受け入れます。"//" がコメントの開始を示すために使えるようになります。

-xcg[89|92]

(SPARC)

-xcg89 は、「-xarch=v7 -xchip=old -xcache=64/32/1」を意味するマクロです。

-xcg92 は、「-xarch=v8 -xchip=super -xcache=16/32/4:1024/32/1」を意味するマクロです。

-xchip=c

オプティマイザ用のプロセッサを指定します。

c には、generic、old、super、super2、micro、micro2、hyper、hyper2、powerup、ultra386、486、pentium、pentium_pro、603、604 のいずれかを指定します。

このオプションは、処理対象となるプロセッサを指定することによって、タイミング特性を指定します。

このオプションは単独で指定できますが、-xtarget オプションのマクロ展開の一部です。-xtarget オプションによって指定された値を変更するのが主な目的です。

xchip=c は以下のものに影響を与えます。

表 2-6 -xchip の値

意味 

generic

ほとんどの x86、および SPARC で良好なパフォーマンスとなるタイミング特性を使用します。 

これはデフォルトです。ほとんどの SPARC プロセッサに良好なパフォーマンスを提供し、どの SPARC プロセッサでも著しいパフォーマンス低下が生じないような最適のタイミング特性を使用するようにコンパイラに指示します。 

old

SuperSPARC(TM) 以前のプロセッサのタイミング特性を使用する。 

super

SuperSPARC チップのタイミング特性を使用する。 

super2

SuperSPARC II チップのタイミング特性を使用する。 

micro

microSPARC(TM) チップのタイミング特性を使用する。 

micro2

microSPARC II チップのタイミング特性を使用する。 

hyper

hyperSPARC(TM) チップのタイミング特性を使用する。 

hyper2

hyperSPARC II チップのタイミング特性を使用する。 

powerup

Weitek PowerUP(TM) チップのタイミング特性を使用する。 

ultra

UltraSPARC チップのタイミング特性を使用する。 

386

Intel 386 アーキテクチャのタイミング特性を使用する。 

486

Intel 486 アーキテクチャのタイミング特性を使用する。 

pentium

Intel Pentium アーキテクチャのタイミング特性を使用する。 

pentium_pro

Intel Pentium Pro アーキテクチャのタイミング特性を使用する。 

-xcode=v

(SPARC) コードアドレス空間を指定します。v は次のいずれか 1 つでなければなりません。

表 2-7 v の値

abs32

32 ビット絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**32 バイトに制限されます。これは 32 ビットアーキテクチャ (-xarch=generic, v7, v8, v8a, v8plus, v8plusa) でデフォルトです。

abs44

44 ビット絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**44 バイトに制限されます。64 ビットアーキテクチャ (-xarch=v9, v9a) だけで利用できます。

abs64

64 ビット絶対アドレスを生成します。64 ビットアーキテクチャ (-xarch=v9, v9a) だけで利用できます。

pic13

共有ライブラリで使用する位置独立コード を生成します。-Kpic と同義です。32 ビットアーキテクチャでは最大 2**11 まで、64 ビットアーキテクチャでは最大 2**10 までの固有の外部シンボルを参照できます。

-xcode=pic13 コマンドは、大域オフセットテーブルのサイズが 8K バイトに制限されることを除けば、-xcode=pic32 に似ています。

pic32

共有ライブラリで使用する位置独立コード (大規模モデル) を生成します。-KPIC と同義です。32 ビットアーキテクチャでは最大 2**30 まで、64 ビットアーキテクチャでは最大 2**29 までの固有の外部シンボルを参照できます。

大域データへの参照はそれぞれ、大域オフセットテーブル内のポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを使用して PC の相対アドレッシングモードで生成されます。ごくまれに -xcode=pic32 で大域データオブジェクトが多くなり過ぎることがありますが、その場合は大域オフセットテーブルは 32 ビットアドレス範囲も使用します。

SPARC V7 と V8 の場合のデフォルトは -xcode=abs32 です。SPARC V9 と UltraSPARC V9 (-xarch=v9|v9a) の場合のデフォルトは -xcode=abs64 です。

64 ビット Solaris 7 上で -xarch=v9 または v9a を使用して共有動的ライブラリを構築するときは、-xcode=pic13 または -xcode=pic32 オプションを指定しなければなりません。

-xcode=pic13 および -xcode=pic32 では、わずかですが、次の 2 つのパフォーマンス上の負担がかかります。

こうした負担があるとしても、-xcode=pic13 あるいは -xcode=pic32 を使用すると、ライブラリコードを共有できるため、必要となるシステムメモリーを大幅に減らすことができます。-xcode=pic13 あるいは -xcode=pic32 でコンパイルした共有ライブラリを使用するすべてのプロセスは、そのライブラリのすべてのコードを共有できます。共有ライブラリ内のコードに非 pic (すなわち、絶対) メモリー参照が 1 つでも含まれている場合、そのコードは共有不可になるため、そのライブラリを使用するプログラムを実行する場合は、その都度、コードのコピーを作成する必要があります。

.o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされたかどうかを調べるには、次のように nm コマンドを使用すると便利です。


% nm <ファイル名>.o | grep _GLOBAL_OFFSET_TABLE_
U _GLOBAL_OFFSET_TABLE_

位置独立コードを含む .o ファイルには、_GLOBAL_OFFSET_TABLE_ への未解決の外部参照が含まれます。このことは、英字の U で示されます。

-xcode=pic13 または -xcode=pic32 を使用すべきかどうかを判断するには、nm を使用して、共有ライブラリで使用または定義されている明確な大域および静的変数の個数を確認します。_GLOBAL_OFFSET_TABLE_ のサイズが 8,192 バイトより小さい場合は、-Kpic を使用できます。そうでない場合は、-xcode=pic32 を使用する必要があります。

-xcrossfile[=n]

(SPARC) ソースファイル間の最適化とインライン化を有効にします。n を指定する場合は、0、1、2 のいずれかです。

通常、コンパイラの解析のスコープは、コマンド行上の各ファイルに制限されます。たとえば、-xO4 の自動インライン化は、同じソースファイル内で定義および参照されるサブプログラムに制限されます。

-xcrossfile を指定すると、コンパイラは、コマンド行に指定したすべてのファイルを (1 つのソースファイルに連結したように) 解析します。-xcrossfile は、-xO4 または -xO5 と併用したときだけ有効です。

このコンパイルから生成されるファイルは、インライン化のため相互に依存しています。したがって、1 つのプログラムにリンクするときには、1 つの単位として使用しなければなりません。任意の 1 つのルーチンを変更し、そのファイルを再コンパイルした場合は、すべてのファイルを再コンパイルしなければなりません。つまり、このオプションを使用すると、メークファイルの構成にも影響があります。

デフォルトは xcrossfile=0 で、ファイル間の最適化は行われません。-xcrossfile-xcrossfile=1 と同義です。

-xdepend

(SPARC) ループの繰り返し内部でのデータ依存性の解析およびループ再構成を実行します。ループの再構成には、ループの交換、ループの融合、スカラーの置換、無意味な配列への代入の除去が含まれます。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。

-xautopar または -xparallel には依存性の解析も含まれています。依存性の解析はコンパイル時に実行されます。

依存性の解析はシングルプロセッサシステムで役立つことがあります。ただし、シングルプロセッサシステムに -xdepend を試みる場合は、-xautopar または -xexplicitpar を使用しないでください。これらのいずれかが有効になっていると、-xdepend の最適化はマルチプロセッサシステムについて実行されます。

-xe

ソースファイル上で構文および意味検査のみを行います。オブジェクトコードや実行可能コードは生成しません。

-xexplicitpar

(SPARC) #pragma MP 指令の指定にもとづいて並列化コードを生成します。ユーザー自身が、依存性の解析を行い、ループの繰り返し内部でのデータの依存性を解析および指定します。ソフトウェアは指定されたループを並列化します。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。独自のスレッド管理を行なっている場合には、-xexplicitpar を使用しないでください。

Sun WorkShop には、マルチプロセッサ用の C オプションを使用するのに必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

ユーザーが指定したループに依存関係が含まれていると、正しい結果が得られないことがあります。しかも、結果が実行するごとに異なることがあります。なお、警告は出力されません。縮約ループには、明示的な並列プラグマは適用しないでください。明示された並列化は行われますが、ループの縮約は適用されないため、誤った結果が生じる場合があります。

要約すると、明示的な並列化には次の操作を実行します。

ループの直前に並列プラグマを挿入する例を示します。


#pragma MP taskloop
  for (j=0; j<1000; j++){
  ...
  }

-xexplicitpar を使用してコンパイルとリンクを一度に実行する場合、リンクには自動的にマイクロタスキング・ライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xexplicitpar を使用してコンパイルとリンクを別々に実行する場合、リンクにも -xexplicitpar を指定しなければなりません。

-xF

アナライザを使用した実行可能ファイルのパフォーマンス解析ができるように準備します(analyzer(1) のマニュアルページを参照)。関数レベルで順序付けし直すことができるコードを作成します。ファイル内の関数はそれぞれ別々のセクションに配置されます。たとえば関数 foo()bar() は、それぞれセクション .text%foo とセクション .text%bar に配置されます。実行可能ファイル内の関数の順序付けは、-xFld-M オプション (ld(1) のマニュアルページを参照) と併用することによって制御できます。またこのオプションにより、アセンブラはデータ収集に必要なデバッグ情報をオブジェクトファイルの中に作成します。

-xhelp=f

オンラインヘルプ情報を表示します。

f には、flags、readme、errors のいずれか 1 つを指定してください。

-xhelp=flags は、コンパイラオプションの要約を表示します。

-xhelp=readme は、README ファイルを表示します。

-xhelp=errors は、エラーおよび警告メッセージファイルを表示します。

-xildoff

インクリメンタルリンカーを使用せず、強制的に ld を起動します。-g オプショ ンを使用しない場合、-G オプションを使用した場合、またはコマンド行にソースファイルが存在する場合は、このオプションがデフォルトになります。このデフォルトを使用したくない場合は、-xildon オプションを指定してください。

-xildon

強制的に、インクリメンタルリンカー (ild) をインクリメンタルモードで起動します。 -g オプションを使用し 、-G オプションを使用せず、かつ、コマンド行にソースファイルを指定しない場合は、このオプションがデフォルトです。このデフォルトを使用したくない場合は、-xildoff オプションを指定してください。

-xinline=[<関数 1>,...,<関数 n>]

<関数 1> から <関数 n> で指定されたユーザー作成ルーチンだけをインライン化します。関数やサブルーチンは、コンマで区切って指定します。

-xO3 でコンパイルする場合は、このオプションでいくつかのルーチンをインライン化することにより、さらに最適化を行うことができます。-xO3 オプションだけではインライン化を行いません。

-xO4 でコンパイルすると、指定したルーチンにインライン化を限定するため最適化の対象が減少することがあります。また -xO4 を使用すると iropt はユーザーが書いたすべての関数やサブルーチンを最適化しようとします。xinline= を指定しても関数名を指定しないと、ソースファイルのどのルーチンもインライン化されません。

次のいずれかの条件に該当する場合、ルーチンはインライン化されません。警告は出力されませんので注意してください。

-xlibmieee

例外が起きた場合の数学ルーチンの戻り値を強制的に IEEE 754 形式にします。この場合、例外メッセージは表示されないので、errno には依存しないでください。

-xlibmil

libm 用のインライン展開テンプレートをインクルードします。このオプションによって浮動小数点演算用オプションとプラットフォームに適したアセンブリ言語のインラインテンプレートが選択されます。

-xlic_lib=l

(SPARC) (x86) l で指定されたサンのライセンスライブラリにリンクします (l には各ライブラリをコンマで区切って指定します)。

-xlicinfo

ライセンスシステムについての情報を返します。特に、ライセンスサーバーの名前と、ライセンスを検査されたユーザーのユーザー ID を返します。このオプションは、コンパイルを要求したり、ライセンスを検査したりはしません。

-xloopinfo

(SPARC) 並列化されているループとされていないループを示します。また、ループを並列化しない理由を簡単に説明します。-xloopinfo オプションは、-xautopar-xparallel、または -xexplicitpar が指定されている場合にのみ有効です。指定されていない場合は、コンパイラは警告を出します。

Sun WorkShop には、マルチプロセッサ 用の C オプションを使用するのに必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

-xM

指定した C プログラムに対してマクロプリプロセッサだけを実行します。その際、メークファイル用の依存関係を生成してその結果を標準出力に出力します (メークファイルと依存関係についての詳細は make(1) のマニュアルページを参照してください)。

例:


#include <unistd.h>
void main (void)
{}

この例で出力されるものは、次のとおりです。


e.o: e.c
e.o: /usr/include/unistd.h
e.o: /usr/include/sys/types.h
e.o: /usr/include/sys/machtypes.h
e.o: /usr/include/sys/select.h
e.o: /usr/include/sys/time.h
e.o: /usr/include/sys/types.h
e.o: /usr/include/sys/time.h
e.o: /usr/include/sys/unistd.h

-xM1

-xM と同様に依存関係を収集しますが、/usr/include ファイルは除きます。次に例を示します。


more hello.c
#include<stdio.h>
main()
{
 (void)printf("hello¥n");
}
cc -xM hello.c
hello.o: hello.c
hello.o: /usr/include/stdio.h

-xMl オプションを使用してコンパイルすると、ヘッダーファイルの依存関係の出力が抑制されます。


cc -xM1 hello.c
hello.o: hello.c

-xMerge

データセグメントをテキストセグメントにマージします。このコンパイルで生成するオブジェクトファイルで初期化されるデータは読み取り専用なので、ld -N でリンクしていない限り、プロセスどうしで共有することができます。

-xnolib

デフォルトのライブラリリンクを行いません。つまり ld-l オプションを渡しません。通常は、cc ドライバが -lcld に渡します。

-xnolib を使用する場合、すベての -l オプションをユーザーが渡さなければなりません。次に例を示します。


% cc test.c -xnolib -Bstatic -lm -Bdynamic -lc

このように指定すると、libm は静的にリンクされ、その他のライブラリは動的にリンクされます。

-xnolibmil

数学ライブラリのルーチンをインライン化しません。このオプションは -fast オプションの後に指定してください。以下に例を示します。


% cc -fast -xnolibmil...

-xO[1|2|3|4|5]

オブジェクトコードを最適化します。-xO と指定することは、-xO2 を指定することと同じです。

-O オプションと -g オプションを組み合わせて使用すると、特定の範囲だけをデバッグすることができます。

最適化のレベルは 1 から 5 のうちのいずれかです。使用するプラットフォームによって変わります。

(SPARC)

-xO1

最小限の局所的な最適化 (ピープホール) を行います。

-xO2

基本的な局所的および大域的最適化を行います。ここでは帰納変数の削除、局所的および大域的な共通部分式の除去、算術の簡素化、コピー通達、定数通達、不変ループの最適化、レジスタの割り当て、基本ブロックのマージ、再帰的末尾の除去、無意味なコードの除去、末尾呼び出しの削除、複雑な式の展開を行います。

-xO2 レベルでは、大域、外部、間接の参照または定義はレジスタに割り当てられません。これらの参照や定義は、あたかも volatile 型として宣言されたかのように取り扱われます。一般的にコードサイズは最も小さくなります。

-xO3

-xO2 に加えて、外部変数の参照または定義も最適化します。ループの展開やソフトウェアのパイプラインなども実行されます。-xO3 レベルではポインタ割り当ての結果を追跡しません。デバイスドライバをコンパイルするとき、またはシグナルハンドラの内部から外部変数を変更するプログラムをコンパイルするときは、volatile 型の修飾子を使用してオブジェクトが最適化されないようにする必要があります。一般的に -xO3 レベルではコードサイズが増大します。

-xO4

-xO3 に加えて、同一のファイルに含まれている関数の自動的なインライン化も行います。通常はこれによって実行速度が上がります。このレベルでは、ポインタ代入の結果が追跡され、通常はコードサイズが増大します。

-xO5

最高レベルの最適化を生成します。この最適化アルゴリズムは、コンパイルの所要時間がより長く、または実行時間が確実に短縮化されるわけではないという短所がありますが、プロファイルフィードバックを伴って実行するとパフォーマンスをより向上させやすくなります。-xprofile=pを参照してください。

(x86)

-xO1

デフォルトの最適化での 1 つの段階の他に、メモリーからの引数の事前ロードと、クロスジャンプ (末尾融合) を行います。

-xO2

高レベルと低レベルの両方の命令をスケジュールし、改良されたスピルコードの解析、ループ中のメモリー参照の除去、レジスタの寿命解析、高度なレジスタ割り当て、大域的な共通部分式の除去を行います。

-xO3

レベル 2 で行う最適化の他に、ループの削減と帰納変数の除去を行います。

-xO4

レベル 23 で行う最適化の他に、ループの展開と、可能であればスタックフレーム生成の回避、および同一ファイルに含まれる関数の自動インライン化を行います。この最適化を行うと、adbdbx のスタックトレースに誤りが発生する可能性があるので注意してください。

-x05

最高レベルの最適化を行います。この最適化アルゴリズムは、コンパイルの所要時間が長く、また実行時間が確実に短縮される保証がありません。たとえば、エクスポートされた関数が局所的に呼び出されるような関数の入口を設定する、スピルコードを最適化する、命令スケジュールを向上するための解析を追加するなどがあります。

オプティマイザによりメモリーが不足した場合は、最適化のレベルを下げて現在の関数を再試行することによって回復を試みます。これ以後の関数に対してはコマンド行オプションで指定されている本来のレベルで再開します。

-xO3 または -xO4 で (1 つの関数内のコードが数千行になるような) 大きな関数を最適化する場合、膨大な量の仮想メモリーが必要になり、マシンのパフォーマンスが低下することがあります。

-xP

このモジュールで定義されたすべての K&R C 関数に対するプロトタイプを出力します。


f()
{
}

main (argc,argv)
int argc;
char *argv[];
{
}

この例に対しては、次のとおりに出力します。


int f(void);
int main(int, char **);

-xparallel

(SPARC) ループを、コンパイラで自動的に並列化するとともに、プログラマの指定によって明示的に並列化します。-xparallel オプションはマクロで、-xautopar-xdepend-xexplicitpar の 3 つをすべて指定するのと同じです。ループの明示的な並列化では、誤った結果が生まれる危険性があります。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。

独自のスレッド管理を行なっている場合には、-xparallel を使用しないでください。

Sun WorkShop には、マルチプロセッサ 用の C オプションを使用するのに必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

コンパイルとリンクを 1 度で実行すると、-xparallel によりマイクロタスキングライブラリとスレッドに対して安全な実行時ライブラリがリンクに含まれます。-xparallel オプションを使用してコンパイルとリンクを別々に実行する場合、リンクにも -xparallel オプションを指定しなければなりません。

-xpentium

(x86) Pentium(TM) プロセッサ用に最適化を行います。

-xpg

gprof(1) によるプロファイルの準備として、データを収集するためのオブジェクトコードを生成します。-xpg はプログラム実行時に記録機構を起動します。この記録機構は実行が正常終了すると、gmon.out ファイルを作成します。

-xprefetch[={yes|no}]

(SPARC) UltraSPARC II プロセッサ上で先読み命令を使用します。

-xprefetch=yes を使用すると、コンパイラは、生成するコード内に先読み命令を必要に応じて挿入します。これにより、UltraSPARC II プロセッサ上でパフォーマンスが上がります。

デフォルトは -xprefetch=no です。-xprefetch-xprefetch=yes と同義です。

-xprofile=p

プロファイルのデータを収集、または最適化のためにプロファイルを使用します。

(SPARC) p には、collect[:<名前>]、use[:<名前>]、または tcov のいずれか 1 つを指定します。

このオプションを使用すると実行中に実行頻度データを収集して保存することができ、後続の実行ではそのデータを使用してパフォーマンスを向上させることができます。このオプションは、最適化のレベルを指定した場合にのみ有効です。

collect[:<名前>]

実行後に -xprofile=use を指定してオプティマイザで使用するために、実行頻度データを収集して保存します。コンパイラによって文の実行頻度を測定するためのコードが生成されます。

<名前> は、解析の対象となるプログラムの名前です。この名前はオプションです。 <名前> の指定を省略すると、a.out が実行可能ファイルの名前とみなされます。

-xprofile=collect: <名前> でコンパイルしたプログラムは実行時に、 <名前>.profile というサブディレクトリを作成して、実行時のフィードバック情報を保存します。データは、このサブディレクトリの feedback ファイルに書き込まれます。プログラムを複数回実行すると、実行頻度データは feedback ファイルに累積され、前回の出力は消えません。

use[:<名前>]

実行頻度データを使用して、効果的に最適化を行います。

collect:<名前> と同様に、<名前> はオプションです。これにより、プログラム名を指定できます。

-xprofile=collect でコンパイルしたプログラムを前回実行したときに作成された feedback ファイルに保存された実行頻度のデータにもとづいて、プログラムが最適化されます。

使用するソースファイルとコンパイラオプション (このオプションを除く) は、feedback ファイルの作成時に実行したコンパイル済みプログラムを作成する際に使用したものと、まったく同じでなければなりません 。-xprofile=collect:<名前> を使用してコンパイルする場合は、最適化コンパイルでも同じ名前 (-xprofile=use:<名前>) が使用されていなければなりません。

tcov

新しい形式の tcov を使用した基本ブロックカバレージ解析です。

-xprofile=tcov オプションは、新しい形式の tcov 用基本ブロックプロファイリングです。 機能は -xa オプションと類似していますが、ヘッダーファイルにソースコードがあるプログラムまたは C++ テンプレートを使用するプログラムのデータを正確に収集します。古い形式のプロファイリングについては -xaの節、tcov(1)マニュアルページ、および『プログラムのパフォーマンス解析』を参照してください。

時間計測コードの組み込みは -xa オプションの場合と同様に実行されますが、.d ファイルは生成されません。その代わりに、最終的な実行可能ファイルにもとづいた名前をもつファイルが 1 つだけ生成されます。たとえば、プログラムが /foo/bar/myprog.profile から実行されると、データファイルは /foo/bar/myprog.profile/myprog.tcovd に格納されます。

-xprofile=tcov -xa オプションは、同じ実行可能ファイル内に指定することができます。すなわち、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルが両方含まれたプログラムをリンクすることができます。1 つのファイルを両方のオプションでコンパイルすることはできません。

tcov を実行する時点で、新しい形式のデータを使用させるように -x オプションを渡さなければなりません。これを渡さないと、古い.d ファイルがまだ存在する場合に tcov はデフォルトで古いファイルからデータを使用するため、予想に反した出力が生成されます。

-xa オプションの場合とは異なり、TCOVDIR 環境変数はコンパイル時には影響力を持ちません。ただし、その値はプログラムの実行時に使用されます。詳細については tcov(1) のマニュアルページおよび『プログラムのパフォーマンス解析』を参照してください。

-xreduction

(SPARC) 自動並列化の間に縮約を認識させます。-xreduction オプションは、 -xautopar または -xparallel のいずれかが指定されている場合にのみ有効です。

並列化オプションを使用するには、WorkShop のライセンスが必要です。

縮約の認識が有効な場合、コンパイラは内積、最大値発見、最小値発見などの縮約を並列化します。これらの縮約によって非並列化コードの場合とは、四捨五入の結果が異なります。

-xregs=r

(SPARC) 使用するレジスタを指定します。

r には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

[no%]appl[no%]float

no には % を付けてください

例: -xregs=appl, no%float

表 2-8 -xregs の値

値 

意味 

appl

g2、g3、g4 レジスタを使用できるようにします。

SPARC ABI では、これらのレジスタはアプリケーションレジスタと呼ばれます。これらのレジスタを使用すると必要なロードおよびストア命令が少なくてすむため、パフォーマンスが向上します。ただし、アセンブリコードで記述された古いライブラリプログラムとの間で衝突が起きることがあります。 

no%appl

appl レジスタを使用しません。

float

SPARC ABI で規定されている浮動小数点レジスタを使用できるようにします。これらのレジスタは、プログラムに浮動小数点の コードがない場合でも使用することができます。 

no%float

浮動小数点レジスタを使用しません。 

このオプションを使用すると、ソースプログラムに浮動小数点コードを記述することはできません。 

デフォルトは -xregs=appl, float です。

-xrestrict=f

(SPARC) ポインタ値の関数引数を制限付き (restricted) ポインタとして扱います。f には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

関数引数、%all、%none

関数リストの指定にこのオプションを入れると、指定された関数内のポインタ引数は制限付きとして扱われます。-xrestrict=%all を指定すると、C ファイル全体のすべてのポインタ引数が制限付きとして扱われます。詳細については第 3 章「Sun ANSI C コンパイラに固有の情報」 _Restrictの項を参照してください。

このコマンド行オプションは独立して使用できますが、最適化時に使用するのが最も適しています。以下に例を示します。


% cc -xO3 -xrestrict=%all prog.c

このコマンドでは、ファイル prog.c 内のすべてのポインタ引数を制限付きポインタとして扱います。


% cc -xO3 -xrestrict=agc prog.c

このコマンドでは、ファイル prog.c 内の関数 agc のすべてのポインタ引数を制限付きポインタとして扱います。

デフォルトは %none で、-xrestrict と指定すると -xrestrict=%all と指定した場合と同様の結果が得られます。

-xs

dbx のための自動読み取りを無効にします。このオプションは .o ファイルを保存しておくことができない場合に使用します。-s オプションはアセンブラに渡されます。

旧来の方法 (自動読み取りなし) では、シンボルテーブルのロードで次の処理が行われます。dbx 用のすべてのシンボルテーブルを実行可能ファイルに書き込むため、リンカーの結合と dbx の初期設定に時間がかかります。

新しい方法では、シンボルテーブルのロードの際に自動読み取りがデフォルトで稼働します。自動読み取りによって、シンボルテーブルの情報が .o ファイルに分散され、必要なときだけ dbx がシンボルテーブル情報をロードします。そのため、リンカーの結合と dbx の初期設定が速くなります。

-xs を指定すると、実行可能ファイルを他のディレクトリに移動し、dbx を使用する必要が生じたときに、オブジェクト (.o) ファイルを無視することができます。

-xs を指定しない場合は、実行可能ファイルを移動する際に、ソースファイルとオブジェクト (.o) ファイルの両方を移動するか、dbx pathmap または use コマンドでパスを設定しなければなりません。

-xsafe=mem

(SPARC) メモリーに関するトラップが発生しないことを前提とします。

このオプションによって、V9 マシン上で投機的ロード命令を使用することが許可されます。これは、-xO5 最適化と、-xarch=v8plus|v8plusa|v9|v9a を指定する場合だけ有効です。

-xsb

ソースブラウザ用のシンボルテーブル情報を生成します。このオプションは、コンパイラの -Xs モードと併用することはできません。

-xsbfast

ソースブラウザ用のデータベースを作成します。ソースファイルはオブジェクトファイルにはコンパイルされません。このオプションは、コンパイラの -Xs モードと併用することはできません。

-xsfpconst

接尾辞のない浮動小数点定数を、デフォルトの倍精度モードではなく、単精度で表します 。-Xc と併用することはできません。

-xspace

コードサイズを増やすループの最適化や並列化を行いません。

例: コードサイズが増える場合は、ループの展開や並列化は行われません。

-xstrconst

デフォルトのデータセグメントではなくテキストセグメントの読み出し専用データセクションに、文字列リテラルを挿入します。

-xtarget=t

最適化の対象となる命令セットとシステムを指定します。

t の値は native、generic、<システム名> のいずれかでなければなりません (SPARC) (x86)

-xtarget オプションは、実際のシステムに合わせて、-xarch、-xchip、-xcache の組み合わせを手早く簡単に指定することができます。-xtarget の意味は = の後に指定した値を展開したものにあります。

表 2-9 -xtarget の展開

値 

意味 

native

ホストシステムに対してパフォーマンスを最適化します。  

コンパイラは、ホストシステムに対して最適化されたコードを生成します。コンパイラは自身が動作しているマシンで利用できるアーキテクチャ、チップ、キャッシュ特性を判定します。  

generic

一般的なアーキテクチャ、チップ、キャッシュに対して最高のパフォーマンスが得られるようにします。 

コンパイラは -xtarget=generic を次のように展開します。

-xarch=generic -xchip=generic -xcache=generic

これはデフォルトです。 

<システム名>

指定のシステムに対して最高のパフォーマンスが得られるようにします。  

このオプションはマクロです。表 2-10 に示す、実際のシステム名と機種番号のリストから、システム名を選択してください。

対象となるハードウェア (コンピュータ) の正式な名前をコンパイラに指定した方がパフォーマンスが優れているプログラムもあります。プログラムのパフォーマンスが重要な場合は、対象となるハードウェアの名前を正式に指定してください。これは、新しい SPARC プロセッサ上でプログラムを実行する場合に当てはまります。ただし、ほとんどのプログラムと、より旧式の SPARC プロセッサ間では、パフォーマンス向上はごくわずかであり、generic を指定することで十分です。

-xtarget に指定する値は、-xarch-xchip-xcache の各オプションの値に展開されます。表 2-10 を参照してください。

例: -xtarget=sun4/15 と指定することは、 -xarch=V8a -xchip=micro -xcache=2/16/1 と指定することと同じです。

表 2-10 -xtarget の展開

-xtarget のシステム名

-xarch

-xchip

-xcache

sun4/15

v8a

micro

2/16/1

sun4/20

v7

old

64/16/1

sun4/25

v7

old

64/32/1

sun4/30

v8a

micro

2/16/1

sun4/40

v7

old

64/16/1

sun4/50

v7

old

64/32/1

sun4/60

v7

old

64/16/1

sun4/65

v7

old

64/16/1

sun4/75

v7

old

64/32/1

sun4/110

v7

old

2/16/1

sun4/150

v7

old

2/16/1

sun4/260

v7

old

128/16/1

sun4/280

v7

old

128/16/1

sun4/330

v7

old

128/16/1

sun4/370

v7

old

128/16/1

sun4/390

v7

old

128/16/1

sun4/470

v7

old

128/32/1

sun4/490

v7

old

128/32/1

sun4/630

v7

old

64/32/1

sun4/670

v7

old

64/32/1

sun4/690

v7

old

64/32/1

sselc

v7

old

64/32/1

ssipc

v7

old

64/16/1

ssipx

v7

old

64/32/1

sslc

v8a

micro

2/16/1

sslt

v7

old

64/32/1

sslx

v8a

micro

2/16/1

sslx2

v8a

micro2

8/16/1

ssslc

v7

old

64/16/1

ss1

v7

old

64/16/1

ss1plus

v7

old

64/16/1

ss2

v7

old

64/32/1

ss2p

v7

powerup

64/32/1

ss4

v8a

micro2

8/16/1

ss4/85

v8a

micro2

8/16/1

ss4/110

v8a

micro2

8/16/1

ss5

v8a

micro2

8/16/1

ss5/85

v8a

micro2

8/16/1

ss4/110

v8a

micro2

8/16/1

ssvyger

v8a

micro2

8/16/1

ss10

v8

super

16/32/4

ss10/hs11

v8

hyper

256/64/1

ss10/hs12

v8

hyper

256/64/1

ss10/hs14

v8

hyper

256/64/1

ss10/20

v8

super

16/32/4

ss10/hs21

v8

hyper

256/64/1

ss10/hs22

v8

hyper

256/64/1

ss10/30

v8

super

16/32/4

ss10/40

v8

super

16/32/4

ss10/41

v8

super

16/32/4:1024/32/1

ss10/50

v8

super

16/32/4

ss10/51

v8

super

16/32/4:1024/32/1

ss10/61

v8

super

16/32/4:1024/32/1

ss10/71

v8

super2

16/32/4:1024/32/1

ss10/402

v8

super

16/32/4

ss10/412

v8

super

16/32/4:1024/32/1

ss10/512

v8

super

16/32/4:1024/32/1

ss10/514

v8

super

16/32/4:1024/32/1

ss10/612

v8

super

16/32/4:1024/32/1

ss10/712

v8

super2

16/32/4:1024/32/1

ss20

v8

super

16/32/4:1024/32/1

ss20/hs11

v8

hyper

256/64/1

ss20/hs12

v8

hyper

256/64/1

ss20/hs14

v8

hyper

256/64/1

ss20/hs21

v8

hyper

256/64/1

ss20/hs22

v8

hyper

256/64/1

ss20/50

v8

super

16/32/4

ss20/51

v8

super

16/32/4:1024/32/1

ss20/61

v8

super

16/32/4:1024/32/1

ss20/71

v8

super2

16/32/4:1024/32/1

ss20/151

v8

hyper

512/64/1

ss20/152

v8

hyper

512/64/1

ss20/502

v8

super

16/32/4

ss10/512

v8

super

16/32/4:1024/32/1

ss20/514

v8

super

16/32/4:1024/32/1

ss20/612

v8

super

16/32/4:1024/32/1

ss20/712

v8

super2

16/32/4:1024/32/1

ss600/41

v8

super

16/32/4:1024/32/1

ss600/51

v8

super

16/32/4:1024/32/1

ss600/61

v8

super

16/32/4:1024/32/1

ss600/120

v7

old

64/32/1

ss600/140

v7

old

64/32/1

ss600/412

v8

super

16/32/4:1024/32/1

ss600/512

v8

super

16/32/4:1024/32/1

ss600/514

v8

super

16/32/4:1024/32/1

ss600/612

v8

super

16/32/4:1024/32/1

ss1000

v8

super

16/32/4:1024/32/1

sc2000

v8

super

16/32/4:1024/64/1

cs6400

v8

super

16/32/4:2048/64/1

solb5

v7

old

128/32/1

solb6

v8

super

16/32/4:1024/32/1

ultra

v8

ultra

16/32/1:512/64/1

ultra2

v8

ultra2

16/32/1:512/64/1

ultra1/140

v8

ultra

16/32/1:512/64/1

ultra1/170

v8

ultra

16/32/1:512/64/1

ultra1/170

v8

ultra

16/32/1:512/64/1

ultra2/1170

v8

ultra

16/32/1:512/64/1

ultra2/1200

v8

ultra

16/32/1:1024/64/1

ultra2/1300

v8

ultra2

16/32/1:2048/64/1

ultra2/2170

v8

ultra

16/32/1:512/64/1

ultra2/2200

v8

ultra

16/32/1:1024/64/1

ultra2/2300

v8

ultra2

16/32/1:2048/64/1

ultra2i

v8

ultra2i

16/32/1:512/64/1

entr2

v8

ultra

16/32/1:512/64/1

entr2/1170

v8

ultra

16/32/1:512/64/1

entr2/2170

v8

ultra

16/32/1:512/64/1

entr2/1200

v8

ultra

16/32/1:512/64/1

entr2/2200

v8

ultra

16/32/1:512/64/1

entr150

v8

ultra

16/32/1:512/64/1

entr3000

v8

ultra

16/32/1:512/64/1

entr4000

v8

ultra

16/32/1:512/64/1

entr5000

v8

ultra

16/32/1:512/64/1

entr6000

v8

ultra

16/32/1:512/64/1

x86: -xtarget= には次の値を指定できます。

-xtemp=<ディレクトリ>

cc が使用する一時ファイルの <ディレクトリ> を設定します。このオプション文字列の中にはスペースを入れてはなりません。このオプションを指定しないと、一時ファイルは /tmp に格納されます。-xtemp は、TMPDIR 環境変数より優先します。

-xtime

コンパイルの各構成要素が占有した実行時間と資源を報告します。

-xtransition

K&R C と Sun ANSI Cとの間の相違に対して警告を出します。次の警告は、-xtransition オプションを使用していなければ表示されません。

¥a は ANSI C の警告文字です

¥x は ANSI C の 16 進エスケープです

無効な 8 進数

型の種類は実際には <型名> です: <名前>

コメントが "##" で置き換えられます

コメントがトークンを連結していません

ANSI C では新しい型で置き換えてしまう型の宣言です: <型名>

文字定数中のマクロ置換は行われません

文字列リテラル中のマクロ置換

文字定数中ではマクロ置換は行われません

文字列リテラル中のマクロ置換は行われません

オペランドが符号なしとして処理されました

3 文字表記シーケンスが置き換えられました

ANSI C は定数を unsigned 型として扱います: <演算子>

ANSI C では <演算子> の意味が変わります。明示的なキャストを使用してください。

-xunroll=n

ループを n 回展開するようオプティマイザに指示します。 n は正の整数です。 n が 1 のときはコマンドとなり、コンパイラはループを展開しません。 n が 2 以上のとき、 -xunroll= nn 回ループを展開することをコンパイラに知らせます。

-xvpara

(SPARC) ループが正しく並列化指定されていない場合に、#pragma MP 指令が指定されているループについて警告を出します。たとえば、オプティマイザがループの繰り返し中にデータの依存性を検出した場合に警告を出します。

Sun WorkShop には、マルチプロセッサ用の C オプションを使用するのに必要なライセンスが含まれます。

-xvpara は、-xexplicitpar または -xparallel オプションと、#pragma MP を組み合わせて使用してください。詳細については、第 3 章「Sun ANSI C コンパイラに固有の情報」「明示的な並列化およびプラグマ」を参照してください。

-Yc,<ディレクトリ>

c を検索するための新しい <ディレクトリ> を指定します。c、-W オプションで示したコンパイラ構成要素を表わす文字です。

構成要素の検索が指定されている場合、ツールのパス名は <ディレクトリ>/<ツール名> になります。2 つ以上の -Y オプションが 1 つの項目に適用されている場合には、最後に現れたものが有効です。

-YA,<ディレクトリ>

コンパイラの構成要素を検索するデフォルトのディレクトリを変更します。

-YI,<ディレクトリ>

インクルードファイルを検索するデフォルトのディレクトリを変更します。

-YP,<ディレクトリ>

ライブラリファイルを検索するデフォルトのディレクトリを変更します。

-YS,<ディレクトリ>

起動用のオブジェクトファイルを検索するデフォルトのディレクトリを変更します。

-Zll

(SPARC) lock_lint 用にプログラムデータベースを作成しますが、コンパイルは行いません。詳細については、lock_lint(1) のマニュアルページを参照してください。

-Zlp

(SPARC) ループプロファイラであるループツール用にオブジェクトファイルを準備します。その後 looptool(1) ユーティリティを実行して、プログラムに関するループ統計を生成することができます。このオプションは -xdepend とともに使用してください。 -xdepend が明示的または暗黙的に指定されていない場合は、-xdepend を有効にして警告を出します。最適化が -xO3 以上でない場合は -xO3 に上げられ、警告が出されます。通常、このオプションは、ループ並列化オプション、-xexplicitpar、 -xautopar、-xparallel のうちの 1 つと組み合わせて使用します。

Sun WorkShop には、MPC オプションを使用するために必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

コンパイルとリンクを別々に実行し、コンパイルに -Zlp を指定する場合は、リンクにも必ず -Zlp を指定してください。

1 つのサブプログラムを -Zlp を用いてコンパイルする場合、そのプログラムのすべてのサブプログラムを -Zlp を用いてコンパイルする必要はありません。ただしループ情報が得られるのは -Zlp を用いてコンパイルしたファイルだけで、プログラムに他のファイルが入っているかどうかの通知はありません。