OPTIMIZE

OPTIMIZEを使用して、オブジェクト・プログラムのランタイムを削減します。 最適化によって、 オブジェクト・プログラムが使用するストレージの量を減らすこともできます。

OPTIMIZE オプションの構文 

構文図を読むビジュアル構文図をスキップOPTIMIZE(012)

デフォルトは、OPTIMIZE(0)

省略形はは、OPT(0)OPT(1)、またはOPT(2)

最適化は、コンパイラー・オプションを指定すると、プログラムとデータが有効であるという前提で実行されます。 例えば、無効なゾーン・ビットを許可するために ZONEDATA(MIG | NOPFD) が使用されていない限り、 USAGE DISPLAY を持つ外部 10 進数データは有効でなければなりません。 どのようなオプションが使用されるとしても、数字と符号コードは有効でなければなりません。 プログラムまたはデータが無効である場合、プログラムの動作は、最適化のレベルごとに、または Enterprise COBOL のバージョンごとに異なる可能性があります。
  • OPTIMIZE(0)制限付きの最適化が指定されます。結果として、コンパイル時間が最も短くなります。 TESTオプションを指定すると、完全なデバッグ機能が使用可能になります。
  • OPTIMIZE(1)アプリケーション・ランタイム・パフォーマンスの向上につながる最適化が指定されます。 このレベルの最適化には、基本インライン化、強度の削減、複雑な演算から同等のより単純な演算への単純化、一部の到達不能コードの除去、ブロック再配置などがあります。 また、OPTIMIZE(1)には、共通副次式の除去や値の伝搬など、いくつかのイントラブロック最適化も含まれています。 TESTオプションを指定すると、ほとんどのデバッグ機能が使用可能になります。
  • OPTIMIZE(2)さらなる最適化が指定されます。この最適化には、より積極的な単純化と命令スケジューリングが含まれます。 また、グローバル値の伝搬およびループ不変コードの動作など、いくつかのブロック間最適化も含まれます。 TESTオプションを指定すると、いくつかのデバッグ機能が使用可能になります。

TEST コンパイラー・オプションを指定せずに OPTIMIZE(1) または OPTIMIZE(2) を使用する場合は、 Language Environment ® サービス CEEHDLRを介して登録されたユーザー作成条件ハンドラーに注意する必要があります。 特に、条件ハンドラーが、条件ハンドラー・プログラム自体に対してローカルに定義されていないデータ項目 (例えば、アプリケーションで EXTERNAL として定義されているデータ項目) にアクセスする場合は、そのようなデータ項目を VOLATILE 節を使用して定義し、ハンドラーがデータ項目の最新値を使用するようにする必要があります。 もしくは、条件ハンドラー・プログラムを TEST コンパイラー・オプションを使用してコンパイルすることができます。 VOLATILE 節の使用は、TEST オプションの使用に優先します。 TEST オプションではプログラム全体の最適化が低下する可能性がありますが、VOLATILE では最適化の低下が局所的になるためです。 VOLATILE 節について詳しくは、 VOLATILE 節を参照してください。

OPTIMIZE(1)またはOPTIMIZE(2)が有効な場合、INLINEを指定すると、コンパイラーは PERFORM ステートメントのインライン化プロシージャーを考慮します。 詳細は「INLINE」を参照。

注: Enterprise COBOL V5以降、 NOOPTIMIZEOPTIMIZEOPTIMIZE(STD)、および OPTIMIZE(FULL) の各オプションは 削除 されていますが、互換性のために許容されています。 これらのオプションの 1 つを指定した場合、そのオプションは以下のように新しいオプションにマップされます。
表 1. 削除されたオプションから新しいオプションへのマッピング
削除された オプション 新しいオプション
NOOPTIMIZE OPTIMIZE(0)
OPTIMIZE OPTIMIZE(2)
OPTIMIZE(STD) OPTIMIZE(2)
OPTIMIZE(FULL) OPTIMIZE(2)STGOPT

関連概念
最適化

関連文献  
競合するコンパイラオプション
インライン
マックスピーシーエフ
テスト  
STGOPT   
ボラタイル条項 (Enterprise COBOL for z/OS言語リファレンス)