COBOL2002 使用の手引 手引編


31.2.3 不変式のループ外移動

繰り返し処理中で結果が常に同じになるような式や代入を繰り返し処理の前に移動することによって,繰り返し内の実行命令数を削減します。

(最適化前)
           :
           :
           :
       PERFORM VARYING I
         FROM 1 BY 1 UNTIL I = 100
           MULTIPLY A BY B GIVING C(I)
           MOVE 10 TO D
       END-PERFORM.
(最適化後)
          :
       MULTIPLY A BY B GIVING temp.
       MOVE 10 TO D.
       PERFORM VARYING I
         FROM 1 BY 1 UNTIL I = 100
           MOVE temp TO C(I)
       END-PERFORM.
          :
演算の最適化条件
  • 四則演算である。

代入の最適化条件
  • 代入元変数(この最適化によって前に出された式の結果の一時的記憶域を含む)がループ内で不変である。

  • 代入先変数はループ内ではこの代入以外で変更されない。

  • 代入元変数として代入先変数を参照している場合,必ずこの代入の結果を参照する。すなわち,ループ外で設定された値を参照することはない。