|コンパイラー分析の精度は、メモリーを読み書き可能な命令によって大きく影響を受けます。 |別名割り当ては何かに別の名前を付けることに関係します。 |これは、ここではメモリーの参照です。 |メモリーの参照は、名前付きシンボルのように直接の場合と、またはポインターまたは仮引き数のように間接の |場合があります。 |関数呼び出しも、メモリーを間接的に参照します。 |メモリーに対する見せ掛けの参照、つまりコンパイラーによって想定されたいくつかの場所を実際には参照しない参照は、 |コンパイラー分析に対してのバリアとなります。
|Fortran は、サブプログラムの実行中に仮引き数参照が他の仮引き数または外部的に可視であるシンボルを |オーバーラップしない規則を定義します。
|コンパイラーは洗練された分析を実行し、ポインター参照解除および呼び出しのために可能な別名のセットを |定義しようとします。 |しかし、コンパイル時の制限されたスコープと値の不在により、このような分析の有効性は抑制されます。 |最適化レベルを増加させること、特にプロシージャー間分析を適用すること (つまり -qipa で |コンパイルすること) は、より良好な別名割り当てに寄与します。
|言語別名割り当て規則に違反するプログラムは、上述のように、一般に最適化なし、または低レベルの |最適化で正しく実行されますが、より高いレベルの最適化が試行されると障害が発生する可能性があります。 |これは、最適化が積極的なほど別名割り当て情報はより有効に利用されるため、わずかに誤ったプログラムの |セマンティクスを露呈してしまうためです。
|これらの問題に関連するオプションは -qstrict と |-qalias です。 |これらの動作は、下の表に要約されています。
|
プログラム動作オプション | |
オプション | 説明 |
---|---|
-qstrict、-qnostrict | コンパイラーによる浮動小数点計算の再配列と、潜在的な除外命令を可能にします。潜在的な除外命令とは、誤った実行 (たとえば、浮動小数点オーバーフロー、メモリー・アクセス違反など) のために割り込みが発生する可能性のある命令のことです。デフォルトは -qnoopt では -qstrict と -O2、-O3 では -qnostrict、 -O4、および -O5 です。 |
-qalias | 特定の変数が重複するストレージを参照しないようにコンパイラーが想定することを可能にします。これは、Fortran における仮引き数と配列割り当ての重複にフォーカスを置くものです。 |