3.4.112 -xalias[= keywords]
コンパイラが仮定する別名付けの程度を指定します。
標準規格以外のプログラム手法によっては、コンパイラの最適化方法に干渉する状況になります。オーバーインデックスおよびポインタの使用、および大域変数または一意ではない変数を副プログラムの引数として渡すことは、不明確な状況を引き起こし、予定どおりにコードが実行されない場合があります。
-xalias フラグを使用すると、別名付けが Fortran の標準規則からどのくらい離れているかをコンパイラに知らせることができます。
フラグには、キーワードのリストがある場合も、ない場合もあります。キーワードのリストはコンマで区切られ、各キーワードはプログラムにおける別名付けの状況を表しています。
キーワードに接頭辞 no% が付いている場合は、その別名付けが存在しないことを表します。
別名付けのキーワードは、次のとおりです。
表 3–10
-xalias オプションキーワード
キーワード
|
意味
|
dummy
|
副プログラムの仮 (形式的な) パラメータは、お互いに別名を付けることができ、大域変数にも別名を付けます。
|
no%dummy
|
(デフォルト)。Fortran 標準規格に従って仮パラメータを使用します。パラメータはお互いに別名を付けたり、大域変数に別名を付けることはしません。
|
craypointer
|
(デフォルト)。Cray ポインタは、そのアドレスを LOC() 関数が受け取るようなすべての大域変数または局所変数を指すことができます。また、2 つの Cray ポインタが同一のデータを指す可能性もあります。このような前提に基づいて、いくつかの最適化が抑制されるため安全です。
|
no%craypointer
|
Cray ポインタは malloc() によって得られるアドレスなど、一意のメモリーアドレスのみ指します。また、2 つの Cray ポインタが同一のデータを指すことはありません。この前提によって、コンパイラは Cray ポインタ参照を最適化することができます。
|
actual
|
コンパイラは、副プログラムの実引数を大域的な変数として扱います。引数を副プログラムに渡すことは、Cray ポインタを通して別名を付けることになります。
|
no%actual
|
(デフォルト) 引数を渡しても、別名は付けられません。
|
overindex
|
-
COMMON ブロックの要素のリファレンスは、COMMON ブロックまたは同等のグループの要素を参照します。
-
COMMON ブロックまたは同等のグループの要素を実際の引数として副プログラムに渡すと、呼び出される副プログラムに、COMMON ブロックまたは同等のグループの要素へのアクセスを提供することになります。
-
連続構造型は、COMMON ブロックのように扱われ、このような変数の要素は、その変数の別の要素に別名を付けます。
-
各配列境界には違反しますが、前述したものを除いては、参照される配列の要素は配列内に残ります。配列構文、WHERE、および FORALL 文は、オーバーインデックスを考慮していません。これらの構造構文でオーバーインデックスが起こる場合は、DO ループとして書き直す必要があります。
|
no%overindex
|
(デフォルト) 配列境界は違反しません。配列の参照は、ほかの変数を参照しません。
|
ftnpointer
|
外部関数の呼び出しによって、Fortran ポインタは、どのような型、種類、またはランクのターゲット変数でもポイントする場合があります。
|
no%ftnpointer
|
(デフォルト) Fortran ポインタは標準規則に準拠します。
|
リストなしで -xalias を指定すると、Fortran の別名付け規則に違反しないほとんどのプログラムで最高のパフォーマンスを得ることができます。これは、次に対応します。
no%dummy,no%craypointer,no%actual,no%overindex,no%ftnpointer
有効にするには、-xalias は、最適化レベル -xO3 以上でコンパイルするときに使用する必要があります。
-xalias フラグが指定されていない場合は、コンパイラのデフォルトでは、次の Cray ポインタを除き、Fortran 95 の標準に準拠しているとみなされます。
no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer
別名付けの状況の例、および -xalias を使用した指定方法については、『Fortran プログラミングガイド』の移植に関する章を参照してください。