JPH0425942A - ループの最適化処理方式 - Google Patents
ループの最適化処理方式Info
- Publication number
- JPH0425942A JPH0425942A JP13096890A JP13096890A JPH0425942A JP H0425942 A JPH0425942 A JP H0425942A JP 13096890 A JP13096890 A JP 13096890A JP 13096890 A JP13096890 A JP 13096890A JP H0425942 A JPH0425942 A JP H0425942A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- array element
- intermediate text
- expression
- array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000014509 gene expression Effects 0.000 claims abstract description 47
- 238000005457 optimization Methods 0.000 claims description 17
- 230000009466 transformation Effects 0.000 claims description 12
- 238000004458 analytical method Methods 0.000 claims description 10
- 238000003672 processing method Methods 0.000 claims description 9
- 238000001514 detection method Methods 0.000 abstract description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000000034 method Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明はコンパイラに関し、特にループの最適化処理方
式に関する。
式に関する。
従来、コンパイラでは、例えば第2図に示すFORTR
ANソースプログラムのように、ループ中に重複定義さ
れる配列要素A(1)およびA(1+1)が存在する場
合でも、重複定義される配列要素人(目およびA (+
+1)の解析は行わずにソースプログラムの記述に忠実
なオブジェクトプログラムを出力していた。
ANソースプログラムのように、ループ中に重複定義さ
れる配列要素A(1)およびA(1+1)が存在する場
合でも、重複定義される配列要素人(目およびA (+
+1)の解析は行わずにソースプログラムの記述に忠実
なオブジェクトプログラムを出力していた。
上述した従来のコンパイラでは、ループ中に重複定義さ
れる配列要素が存在していてもソースプログラムの記述
に忠実なオブジェクトプログラムを出力していたので、
オブジェクトプログラムの実行時に重複定義される配列
要素が多いほど実行時間に無駄が生ずるという欠点があ
る。
れる配列要素が存在していてもソースプログラムの記述
に忠実なオブジェクトプログラムを出力していたので、
オブジェクトプログラムの実行時に重複定義される配列
要素が多いほど実行時間に無駄が生ずるという欠点があ
る。
本発明の目的は、上述の点に鑑み、ループ中に重複定義
される配列要素の解析を行いループ中で配列要素の重複
定義を解消することにより、オブジェクトプログラムの
実行時間を短縮できるようにしたループの最適化処理方
式を提供することにある。
される配列要素の解析を行いループ中で配列要素の重複
定義を解消することにより、オブジェクトプログラムの
実行時間を短縮できるようにしたループの最適化処理方
式を提供することにある。
本発明のループの最適化処理方式は、高級言語で書かれ
たソースプログラムを読み込み構文解析を行って中間テ
キストを生成する構文解析部と、この構文解析部により
生成された中間テキストに対して最適なオブジェクトプ
ログラムを出力するために変形処理を行う最適化処理部
と、この最適化処理部により変形された中間テキストを
入力しオブジェクトプログラムを生成するコード生成部
とから構成されたコンパイラにおいて、前記最適化処理
部が、中間テキストを入力しソースプログラム中のルー
プ構造を検出して検出されたループ中から重複定義され
る配列要素を検出するループ中重複定義配列要素検出手
段と、このループ中重複定義配列要素検出手段により得
られた情報に基づいてループ中で重複定義される配列要
素対に対して重複定義を解消するためにループ内不変式
に変形する配列要素を選びその配列要素を含む文がルー
プ外に移動可能か否かを調べて移動可能な場合にその配
列要素を含む文に対応する中間テキストを添字式の終値
を用いてループ内不変式に変形する配列要素添字式変形
手段と、この配列要素添字式変形手段によりループ内不
変式に変形された中間テキストをループ外に移動するル
ープ内不変式移動手段とを存する。
たソースプログラムを読み込み構文解析を行って中間テ
キストを生成する構文解析部と、この構文解析部により
生成された中間テキストに対して最適なオブジェクトプ
ログラムを出力するために変形処理を行う最適化処理部
と、この最適化処理部により変形された中間テキストを
入力しオブジェクトプログラムを生成するコード生成部
とから構成されたコンパイラにおいて、前記最適化処理
部が、中間テキストを入力しソースプログラム中のルー
プ構造を検出して検出されたループ中から重複定義され
る配列要素を検出するループ中重複定義配列要素検出手
段と、このループ中重複定義配列要素検出手段により得
られた情報に基づいてループ中で重複定義される配列要
素対に対して重複定義を解消するためにループ内不変式
に変形する配列要素を選びその配列要素を含む文がルー
プ外に移動可能か否かを調べて移動可能な場合にその配
列要素を含む文に対応する中間テキストを添字式の終値
を用いてループ内不変式に変形する配列要素添字式変形
手段と、この配列要素添字式変形手段によりループ内不
変式に変形された中間テキストをループ外に移動するル
ープ内不変式移動手段とを存する。
本発明のループの最適化処理方式では、ループ中重複定
義配列要素検出手段が中間テキストを入力しソースプロ
グラム中のループ構造を検出して検出されたループ中か
ら重複定義される配列要素を検出し、配列要素添字式変
形手段がループ中重複定義配列要素検出手段により得ら
れた情報に基づいてループ中で重複定義される配列要素
対に対して重複定義を解消するためにループ内不変式に
変形する配列要素を選びその配列要素を含む文がループ
外に移動可能か否かを調べて移動可能な場合にその配列
要素を含む文に対応する中間テキストを添字式の終値を
用いてループ内不変式に変形し、ループ内不変式移動手
段が配列要素添字式変形手段によりループ内不変式に変
形された中間テキストをループ外に移動する。
義配列要素検出手段が中間テキストを入力しソースプロ
グラム中のループ構造を検出して検出されたループ中か
ら重複定義される配列要素を検出し、配列要素添字式変
形手段がループ中重複定義配列要素検出手段により得ら
れた情報に基づいてループ中で重複定義される配列要素
対に対して重複定義を解消するためにループ内不変式に
変形する配列要素を選びその配列要素を含む文がループ
外に移動可能か否かを調べて移動可能な場合にその配列
要素を含む文に対応する中間テキストを添字式の終値を
用いてループ内不変式に変形し、ループ内不変式移動手
段が配列要素添字式変形手段によりループ内不変式に変
形された中間テキストをループ外に移動する。
次に、本発明について図面を参照して詳細に説明する。
第1図は、本発明の一実施例に係るループの最適化処理
方式が適用されたコンパイラ2の構成を示すプロ、り図
である。このコンパイラ2は、高級言語で書かれたソー
スプログラム1を入力し、オブジェクトプログラム3を
出力するものであり、構文解析部21と、最適化処理部
4と、コード生成部25と、中間テキスト26とから、
その主要部が構成されている。
方式が適用されたコンパイラ2の構成を示すプロ、り図
である。このコンパイラ2は、高級言語で書かれたソー
スプログラム1を入力し、オブジェクトプログラム3を
出力するものであり、構文解析部21と、最適化処理部
4と、コード生成部25と、中間テキスト26とから、
その主要部が構成されている。
最適化処理部4は、ループ中重複定義配列要素検出手段
22と、配列要素添字式変形手段23と、ループ内不変
式移動手段24とを含んで構成されている。
22と、配列要素添字式変形手段23と、ループ内不変
式移動手段24とを含んで構成されている。
なお、第1図中において、実線は制御の流れを示し、点
線はデータの流れを示す。
線はデータの流れを示す。
第5図を参照すると、配列テーブル5は、次の配列テー
ブルへのポインタと、配列基と、最初の配列要素テーブ
ルへのポインタとからなる。
ブルへのポインタと、配列基と、最初の配列要素テーブ
ルへのポインタとからなる。
第6図を参照すると、配列要素テーブル6は、次の配列
要素テーブルへのポインタと、ソース行番号域と、添字
式と、添字式の初期値と、添字式の増分値と、添字式の
終値と、定義配列要素フラグとからなる。
要素テーブルへのポインタと、ソース行番号域と、添字
式と、添字式の初期値と、添字式の増分値と、添字式の
終値と、定義配列要素フラグとからなる。
第7図を参照すると、重複定義テーブル7は、次の重複
定義テーブルへのポインタと、重複定義される配列要素
テーブルへのポインタと、重複定義される対の配列要素
テーブルへのポインタとからなる。
定義テーブルへのポインタと、重複定義される配列要素
テーブルへのポインタと、重複定義される対の配列要素
テーブルへのポインタとからなる。
次に、このように構成された本実施例のループの最適化
処理方式の動作について説明する。
処理方式の動作について説明する。
コンパイラ2が起動されると、構文解析部21は、ソー
スプログラム1を読み込み、中間テキスト26を生成す
る。例えば、第2図に示されたFORTRANソースプ
ログラムに対して、第3図に示すような第1形式中間テ
キストが生成される。
スプログラム1を読み込み、中間テキスト26を生成す
る。例えば、第2図に示されたFORTRANソースプ
ログラムに対して、第3図に示すような第1形式中間テ
キストが生成される。
次に、最適化処理部4のループ中重複定義配列要素検出
手段22は、中間テキスト26(第1形式中間テキスト
)からソースプログラム1中のループ構造を検出すると
、次の処理(1)および(2)を行う。
手段22は、中間テキスト26(第1形式中間テキスト
)からソースプログラム1中のループ構造を検出すると
、次の処理(1)および(2)を行う。
(1)ループ中に含まれる全ての配列要素を検出し、配
列テーブル5と、配列要素テーブル6とを作成する。配
列要素テーブル6に対しては、添字式からその配列要素
の初期値、増分値および終値を表す式を導き、該当する
フィールドに設定する。
列テーブル5と、配列要素テーブル6とを作成する。配
列要素テーブル6に対しては、添字式からその配列要素
の初期値、増分値および終値を表す式を導き、該当する
フィールドに設定する。
また、配列要素が含まれるソース行番号もソース行番号
域に格納しておく。なお、対応する配列要素がループ中
で定義される場合には、定義配列要素フラグをオンとし
、参照される場合にはオフとする。
域に格納しておく。なお、対応する配列要素がループ中
で定義される場合には、定義配列要素フラグをオンとし
、参照される場合にはオフとする。
第2図に示したFORTRANソースプログラムのDO
小ループ場合、少なくとも配列要素A。
小ループ場合、少なくとも配列要素A。
B、CおよびDに対して、配列テーブル5および配列要
素テーブル6が作成される。
素テーブル6が作成される。
(2)中間テキスト26 (第1形式中間テキスト)、
配列テーブル5および配列要素テーブル6からループ内
に出現する同一配列領域をアクセスする2つの配列要素
に着目し、これら2つの配列要素の添字式の初期値およ
び増分値をもとに′以下の条件ta>、 (blおよび
(C)を全て満たしているか否かを調べる。全て満たす
場合は、ループ中で重複定義される関係にある配列要素
と判定し、重複定義テーブル7を作成する。
配列テーブル5および配列要素テーブル6からループ内
に出現する同一配列領域をアクセスする2つの配列要素
に着目し、これら2つの配列要素の添字式の初期値およ
び増分値をもとに′以下の条件ta>、 (blおよび
(C)を全て満たしているか否かを調べる。全て満たす
場合は、ループ中で重複定義される関係にある配列要素
と判定し、重複定義テーブル7を作成する。
条件(a)2つの配列要素がともに定義されている(2
つの配列要素テーブルの定義配 列要素フラグがともにをオン) 条件(b)2つの配列要素の添字式の増分値が等しい。
つの配列要素テーブルの定義配 列要素フラグがともにをオン) 条件(b)2つの配列要素の添字式の増分値が等しい。
条件(C)2つの配列要素間の添字式の初期値の差が添
字式の増分値と等しい。
字式の増分値と等しい。
第2図に示したFORTRANソースプログラムのDO
小ループ場合において、少なくとも配列要素A (1)
と配列要素A(1+1>とがループ中で重複定義される
関係にあると判定され、重複定義テーブル7が作成され
る。
小ループ場合において、少なくとも配列要素A (1)
と配列要素A(1+1>とがループ中で重複定義される
関係にあると判定され、重複定義テーブル7が作成され
る。
第8図は、第2図に示したFORTRANソースプログ
ラム(第3図に示した第1形式中間テキスト)に対して
ループ中重複定義配列要素検出手段22により作成され
た配列テーブル5.配列要素テーブル6および重複定義
テーブル7の状態を示す。
ラム(第3図に示した第1形式中間テキスト)に対して
ループ中重複定義配列要素検出手段22により作成され
た配列テーブル5.配列要素テーブル6および重複定義
テーブル7の状態を示す。
続いて、配列要素添字式変形手段23は、以下の処理f
il〜(4)を行う。
il〜(4)を行う。
+1.1 重複定義テーブル7より、ループ中で重複
定義される関係にある配列要素対を求める。
定義される関係にある配列要素対を求める。
+21 111で求められた配列要素の互いの配列要素
テーブル6からループ内での定義順序を調べ、ループ評
価時に後から再定義される添字式を持つ配列要素をルー
プ内不変式に変形する配列要素とする。
テーブル6からループ内での定義順序を調べ、ループ評
価時に後から再定義される添字式を持つ配列要素をルー
プ内不変式に変形する配列要素とする。
+31 (2+でループ内不変式に変形する配列要素
を含む文の他の要素に対して、ループ外への移動が不可
能となる要因があるかどうかを調べる。
を含む文の他の要素に対して、ループ外への移動が不可
能となる要因があるかどうかを調べる。
+41 (31でループ外への移動が不可能となる要
因が検出されない場合は、(2)でループ内不変式に変
形する配列要素を含む文に対応する中間テキスト26を
配列要素テーブル6の添字式の終値を用いてループ内不
変式に変形する。
因が検出されない場合は、(2)でループ内不変式に変
形する配列要素を含む文に対応する中間テキスト26を
配列要素テーブル6の添字式の終値を用いてループ内不
変式に変形する。
第2図に示したFORTRANソースプログラムのDO
小ループ場合、ループ中で重複定義される関係にある配
列要素A(1)および配列要素A(1+1)について、
配列要素A口+1)の方がループ評価時に後から再定義
される添字式を持つのでループ内不変式に変形される配
列要素となり、その配列要素を含む文(ソース行番号n
n)が、他にループ外への移動が不可能になる要因がな
いため、配列要素A (1+1)の添字式の終値″10
1”を用いてループ内不変式に変形される。
小ループ場合、ループ中で重複定義される関係にある配
列要素A(1)および配列要素A(1+1)について、
配列要素A口+1)の方がループ評価時に後から再定義
される添字式を持つのでループ内不変式に変形される配
列要素となり、その配列要素を含む文(ソース行番号n
n)が、他にループ外への移動が不可能になる要因がな
いため、配列要素A (1+1)の添字式の終値″10
1”を用いてループ内不変式に変形される。
次に、ループ内不変式移動手段24では、以下の処理(
1)を行う。
1)を行う。
ill 配列要素添字式展開手段23によりループ内
不変式に変形された中間テキスト26をループ外に移動
する。
不変式に変形された中間テキスト26をループ外に移動
する。
第2図に示したFORTRANソースプログラムのDO
ループの場合、ソース行番号nnに対応する中間テキス
ト26がループ外への移動対象となり、コンパイラ2が
定めた方法に準拠して、オブジェクトプログラム3の実
行時にループ外で評価されるように移動する。この結果
、構文解析部21により生成された第3図に示した第1
形式中間テキストは、第4図に示す第2形式中間テキス
トに変形される。
ループの場合、ソース行番号nnに対応する中間テキス
ト26がループ外への移動対象となり、コンパイラ2が
定めた方法に準拠して、オブジェクトプログラム3の実
行時にループ外で評価されるように移動する。この結果
、構文解析部21により生成された第3図に示した第1
形式中間テキストは、第4図に示す第2形式中間テキス
トに変形される。
最後に、コード生成部25は、中間テキスト26(第2
形式中間テキスト)からオブジェクトプログラム3を生
成する。
形式中間テキスト)からオブジェクトプログラム3を生
成する。
以上説明したように本発明は、最適化処理部内にループ
中重複定義配列要素検出手段、配列要素添字式変形手段
およびループ内不変式移動手段を設け、ループ中の配列
要素の重複定義の解析を行いループ中での配列要素の重
複定義を解消するようにしたことにより、オブジェクト
プログラムの実行時間を短縮できるという効果がある。
中重複定義配列要素検出手段、配列要素添字式変形手段
およびループ内不変式移動手段を設け、ループ中の配列
要素の重複定義の解析を行いループ中での配列要素の重
複定義を解消するようにしたことにより、オブジェクト
プログラムの実行時間を短縮できるという効果がある。
第1図は本発明の一実施例に係るループの最適化処理方
式が適用されたコンパイラの構成を示すブロフク図、 第2図は本実施例のループの最適化処理方式が適用され
るFORTRANソースプログラムの一例を示す図、 第3図は第2図に示したFORTRANソースプログラ
ムが処理された第1形式中間テキストを示す図、 第4図は第3図に示した第1形式中間テキストが処理さ
れた第2形式中間テキストを示す図、第5図は第1図中
のループ中重複定義配列要素検出手段により作成される
配列テーブルの内容を示す図、 第6図は第1図中のループ中重複定義配列要素検出手段
により作成される配列要素テーブルの内容を示す図、 第7図は第1図中のループ中重複定義配列要素検出手段
により作成される重複定義テーブルの内容を示す図、 第8図は第3図に示した第1形式中間テキストに幻して
作成された配列テーブル、配列要素テーブルおよび重複
定義テーブルの様態を示す図である。 図において、 1・・・ソースプログラム、 2・・ ・コンパイラ、 3・・・オブジェクトプログラム、 4 ・ ・ 22 ・ 23 ・ 24 ・ 25 ・ 26 ・ 最適化処理部、 構文解析部、 ループ中重複定義配列要素検出手段、 配列要素添字式変形手段、 ループ内不変式移動手段、 コード生成部、 中間テキストである。
式が適用されたコンパイラの構成を示すブロフク図、 第2図は本実施例のループの最適化処理方式が適用され
るFORTRANソースプログラムの一例を示す図、 第3図は第2図に示したFORTRANソースプログラ
ムが処理された第1形式中間テキストを示す図、 第4図は第3図に示した第1形式中間テキストが処理さ
れた第2形式中間テキストを示す図、第5図は第1図中
のループ中重複定義配列要素検出手段により作成される
配列テーブルの内容を示す図、 第6図は第1図中のループ中重複定義配列要素検出手段
により作成される配列要素テーブルの内容を示す図、 第7図は第1図中のループ中重複定義配列要素検出手段
により作成される重複定義テーブルの内容を示す図、 第8図は第3図に示した第1形式中間テキストに幻して
作成された配列テーブル、配列要素テーブルおよび重複
定義テーブルの様態を示す図である。 図において、 1・・・ソースプログラム、 2・・ ・コンパイラ、 3・・・オブジェクトプログラム、 4 ・ ・ 22 ・ 23 ・ 24 ・ 25 ・ 26 ・ 最適化処理部、 構文解析部、 ループ中重複定義配列要素検出手段、 配列要素添字式変形手段、 ループ内不変式移動手段、 コード生成部、 中間テキストである。
Claims (1)
- 【特許請求の範囲】 高級言語で書かれたソースプログラムを読み込み構文解
析を行って中間テキストを生成する構文解析部と、この
構文解析部により生成された中間テキストに対して最適
なオブジェクトプログラムを出力するために変形処理を
行う最適化処理部と、この最適化処理部により変形され
た中間テキストを入力しオブジェクトプログラムを生成
するコード生成部とから構成されたコンパイラにおいて
、前記最適化処理部が、 中間テキストを入力しソースプログラム中のループ構造
を検出して検出されたループ中から重複定義される配列
要素を検出するループ中重複定義配列要素検出手段と、 このループ中重複定義配列要素検出手段により得られた
情報に基づいてループ中で重複定義される配列要素対に
対して重複定義を解消するためにループ内不変式に変形
する配列要素を選びその配列要素を含む文がループ外に
移動可能か否かを調べて移動可能な場合にその配列要素
を含む文に対応する中間テキストを添字式の終値を用い
てループ内不変式に変形する配列要素添字式変形手段と
、この配列要素添字式変形手段によりループ内不変式に
変形された中間テキストをループ外に移動するループ内
不変式移動手段と を有することを特徴とするループの最適化処理方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP13096890A JPH0425942A (ja) | 1990-05-21 | 1990-05-21 | ループの最適化処理方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP13096890A JPH0425942A (ja) | 1990-05-21 | 1990-05-21 | ループの最適化処理方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH0425942A true JPH0425942A (ja) | 1992-01-29 |
Family
ID=15046826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP13096890A Pending JPH0425942A (ja) | 1990-05-21 | 1990-05-21 | ループの最適化処理方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0425942A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5581762A (en) * | 1993-05-18 | 1996-12-03 | Fujitsu Limited | Compiling apparatus having a function to analyze overlaps of memory addresses of two or more data expressions and a compiling method |
-
1990
- 1990-05-21 JP JP13096890A patent/JPH0425942A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5581762A (en) * | 1993-05-18 | 1996-12-03 | Fujitsu Limited | Compiling apparatus having a function to analyze overlaps of memory addresses of two or more data expressions and a compiling method |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8156471B2 (en) | Multi-language execution method | |
US4821181A (en) | Method for converting a source program of high level language statement into an object program for a vector processor | |
JPH06103463B2 (ja) | コード生成方法 | |
JPH0425942A (ja) | ループの最適化処理方式 | |
Sites | Some thoughts on proving clean termination of programs | |
JP3047418B2 (ja) | ベクトル化処理方式 | |
JP3922699B2 (ja) | ループ内不変な式の移動に関する最適化方式およびプログラム | |
JP2674489B2 (ja) | ベクトル化処理装置 | |
JPH03260865A (ja) | ベクトル化処理方式 | |
JPH03282935A (ja) | コンパイル処理装置及びコンパイル処理方式 | |
JP3018783B2 (ja) | コンパイル方式 | |
JPH05143356A (ja) | コンパイラ装置 | |
JPH01309125A (ja) | メモリ内容監視・比較・検出方式 | |
Robinson et al. | SOFTWARE VERIFICATION RESEARCH CENTRE SCHOOL OF INFORMATION TECHNOLOGY THE UNIVERSITY OF QUEENSLAND | |
JPH0358232A (ja) | プリプロセッサ呼び出し方式 | |
JPH04343140A (ja) | コンパイラの最適化処理方法 | |
JPH04119436A (ja) | 自動試験システムにおける制御プログラムの汎用化方法 | |
JPH06251054A (ja) | If文下ベクトル演算最適化方法 | |
JPH02191040A (ja) | 入出力ライブラリにおけるdoループ最適化処理方式 | |
JPS6162141A (ja) | 論理型情報処理装置 | |
JPH03235127A (ja) | インライン展開処理方法 | |
JPH0447336B2 (ja) | ||
JPH01205230A (ja) | 手続き副プログラム展開方式 | |
JPS6398031A (ja) | 添字式の値検査方式 | |
JPH0778100A (ja) | データ変換処理装置 |