COBOL2002 使用の手引 手引編


31.2.4 コピー伝播

変数1=定数

変数1=変数2

このような単純な代入文があったとき,次の変数1への代入までに現れた変数1の参照を定数や変数2で置き換えることによって,定数の畳み込みや無用命令の削除(代入があり,次の代入または終わりまでに参照がない場合,その代入は無用である)などをします。ただし,-Optimize,2オプション指定時には,ユーザが定義したデータ項目への代入に対する無用命令の削除はしません。

次の例では,A,Bはユーザ定義変数ではないものとします。

[図データ]

定数"23"を代入しているAは1.,2.で参照されているだけなので,1.,2.のAはそれぞれ定数"23"に変更されます。さらに,Bは2.で参照されているだけなので,Bも定数"23"に変更されます。なお,この例では2.のCOMPUTE文が定数の演算だけになるため,定数の畳み込みによって最終的に定数"50"に変更されます。

最適化条件

次の条件を満たす代入X=Yによってだけコピー伝播は行われます。

  • Xは添字指定を含まない。

  • Xに対する別名はない。

  • Yが定数なら,YはXのデータの型およびサイズに変換できる。

  • Yが変数なら,YはXのデータの型およびサイズに等しい。