JPH0795273B2 - コンパイラにおける和計算の部分展開処理方式 - Google Patents

コンパイラにおける和計算の部分展開処理方式

Info

Publication number
JPH0795273B2
JPH0795273B2 JP6240986A JP6240986A JPH0795273B2 JP H0795273 B2 JPH0795273 B2 JP H0795273B2 JP 6240986 A JP6240986 A JP 6240986A JP 6240986 A JP6240986 A JP 6240986A JP H0795273 B2 JPH0795273 B2 JP H0795273B2
Authority
JP
Japan
Prior art keywords
loop
text
multiplication
constant
sum
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.)
Expired - Fee Related
Application number
JP6240986A
Other languages
English (en)
Other versions
JPS62219129A (ja
Inventor
誠 中西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP6240986A priority Critical patent/JPH0795273B2/ja
Publication of JPS62219129A publication Critical patent/JPS62219129A/ja
Publication of JPH0795273B2 publication Critical patent/JPH0795273B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】 〔概要〕 コンパイラにおける最適化処理にあたって,ループ内に
おける和計算を行う式中に,ループ内定数とループ内変
数との乗算部分があるとき,ループ内変数の和を求める
式をループ内に展開し,ループ内定数に関連する和をル
ープ外で計算し直すようにすることにより,生成される
オブジェクトプログラムの実行性能を向上させる。
〔産業上の利用分野〕
本発明は,例えばFORTRAN言語等で記述されたソースプ
ログラムをオブジェクトプログラムに翻訳するにあたっ
て,最適化処理を行うコンパイラにおける和計算の部分
展開処理方式に関するものである。
〔従来の技術〕
例えば,FORTRAN言語,PL/I言語等の高級言語で記述され
たソースプログラムをオブジェクトプログラムに翻訳す
る場合に,翻訳のしかたによって,その実行性能が大き
く変わってくる。特に,計算機の命令処理時間は,加算
命令よりも乗算命令が長くかかるので,繰り返し実行さ
れるループ内の式に乗算命令が使用されると,処理速度
が遅くなる。
従来,「S=S+(乗算式)」という形の,いわゆる回
帰テキストが,ループ内に使用されている場合,乗算命
令とその乗算結果の加算命令とが,ループ内に生成され
ていた。
〔発明が解決しようとする問題点〕
ループ内における「S=S+(乗算式)」というような
形の乗算式が,ループ内定数とループ内変数との積であ
る場合には,ループ内定数に関する乗算命令を,ループ
の外で実行して,しかも元の計算結果と同じ結果を得る
ことができる。
本発明はこの点に着目してなされたもので,上記形式の
和計算に関するオブジェクトプログラムの最適化を図る
ことを目的としている。
〔問題点を解決するための手段〕
第1図は本発明の基本構成例を示す。
第1図において,11ないし13は磁気ディスク装置等の外
部記憶装置,14はFORTRAN言語等により記述されたソース
プログラム,15はソースプログラム14を内部コードに変
換した中間テキスト,16は機械語命令/データからなる
オブジェクトプログラム,17はCPUおよびメモリなどから
なる処理装置,18はソースプログラム14を翻訳するコン
パイラを表す。
コンパイラ18中のソース解釈部19は,外部記憶装置11か
らソースプログラム14を入力し,文解釈を行って,内部
コードの中間テキスト15に展開する処理を実行するもの
である。記憶域割付け部20は,プログラム中に出現する
各種データに記憶域内番地を割り当てる処理を実行す
る。
中間コード最適化部21は,中間テキスト15について,実
行性能を向上させるための命令の組み換えなどの最適化
を行うものである。本発明に関連するものとして,回帰
テキスト条件チェック部22,ループ内変数の乗算部分検
出部23,乗算部分取出し部24,乗算テキスト付加部25を有
している。
回帰テキスト条件チェック部22は,中間テキスト15中の
ループ内に現れる式が,回帰テキストであるか否かの条
件をチェックするものである。回帰テキストの条件は,
ループ内におる「S=S+(式)」というような形の式
において,(a)Sがループ内でこの式でのみ定義・参
照されていること,(b)この式で,上記(式)の中に
はSが出てこないことである。
ループ内変数の乗算部分検出部23は,回帰テキストの式
が加算でつながっており,その中の乗算がループ内変数
とループ内定数との積であるものを検出する処理を実行
する。
乗算部分取出し部24は,ループ内変数の乗算部分検出部
23により検出されたループ内変数とループ内定数との積
による計算結果が当該回帰テキストのみで参照されてい
るときに,このループ内定数の乗算を取り除いた部分に
関する和を求める中間テキストをループ内に生成する。
乗算テキスト付加部25は,ループ外のブロックに,上記
ループ内変数に関する和を求める中間テキストの計算結
果に対して,上記ループ内定数を乗算する中間テキスト
を生成して付加する処理を実行する。
レジスタ使用決定部26は,中間テキスト15に現れたデー
タに,実際の資源(レジスタ)を割り当てる処理を行う
ものである。オブジェクトプログラム出力部27は,中間
テキスト15の内容を機械語に変換し,必要に応じて機械
語レベルでの最適化を行って,外部記憶装置13にオブジ
ェクトプログラム16を出力する。
〔作用〕
第2図は本発明の原理を説明するための図である。図
中,30は最適化前のテキスト,31は最適化後のテキストを
表している。
以下の説明では,FORTRANプログラムの最適化を例にして
説明するが,他の言語でもループに関し同様に処理でき
る。
テキスト30のループ内の式におけるB(J)は,ループ
内でその値が変わらないループ内定数であり,A(I)
は,ループ変数Iによって値が変化するループ内変数で
ある。従来方式によれば,式中のB(J)とA(I)と
の積を,ループ内で各ループ毎に演算するように命令が
生成されていた。
ところで,テキスト30のプログラムは,S=B(J)*A
(1)+B(J)*A(2)+…+B(J)*A(N)
を求めるものである。この式は,第2図(イ)に示すよ
うな, S=B(J)*{A(1)+A(2)+…+A(N)} の演算と同じ結果となる。そこで,本発明では,テキス
ト30のような式を検出して,和計算における乗算部分に
現れるループ内定数をループ外に取り出すことにより,
テキスト31のような最適化を行う。即ち,ループ内で
は,ループ内変数のA(I)の加算のみを行い,ループ
の外で,その結果とループ内定数B(J)との積を加算
する。この乗算は,ループの外で1回実行されるだけで
あるので,実行速度が向上することになる。
一般形は,以下のようになる。
S=0 DO 1 I=1 TO N 1 S=F1+S+C1*G1(I)+F2 +C2*G2(I) このようなループ内の式が,まず,回帰テキストである
ことを確かめる。その条件は, (a) Sがループ中でこの式でのみ定義−参照され,
かつ (b) この式の左辺で,「S+(式)」中における
(式)の中には,Sが現れないことである。
次に式が加算でつながっていて,その中の乗算がループ
内定数とループ内変数との積であるものを見つける。そ
の計算結果が,回帰テキストのみで参照されていると
き,不要となった乗算を消して,「ti=ti+G
i(I)」を出力する。
最後に,Ciとtiとを掛けて和を求める式をターゲットブ
ロックに出す。この結果,最適化されたテキストは次の
ようになる。
S=0 t1=0 t2=0 DO 1 I=1 TO N S=F1+S+F21=t1+G1(I) 1 t2=t2+G2(I) S=S+C1*t1+C2*t2 〔実施例〕 第3図は本発明による最適化の例,第4図は本発明の一
実施例処理説明図を示す。
例えば,第3図に示すようなテキスト30の場合,第1図
図示ソース解釈部19によって,ループ内の中間テキスト
15は,第3図に示すテキスト32のように生成される。t
iは一時名である。Sの参照,定義は,このループ内に
一式だけである。
第1オペランドが回帰的に加算されている。即ち,言票
に現れる一時名を定義している言票が,加算であるもの
をたどる。この中に同じオペランドが一度だけ現れ,他
に現れないとき,この第1オペランドは回帰的に現れ
る。
加算言票の参照オペランドを定義する演算が乗算の場合
で,ループ内変数とループ内定数の積のとき,新たな和
を求める言票を出力する。この例では,A(I)が変数
で,B(J)が定数であるので,「t4=t4+A(I)」
を出力して,次にt1を参照している「t3=t1+t2
を,「t3=t2」に変換する。これから,t3を参照して
いるオペランドをt2に置き換える。
B(J)に関する乗算をループ外に付加することなどに
より,最終的に第3図に示すテキスト31が得られる。
第4図は本発明の一実施例であって,回帰テキストの条
件を満たす式に対応する言票群に対する処理をフローチ
ャートで表している。以下の説明における番号〜
は、第4図に示す処理番号〜に対応する。
和のチェインをたどり,和テーブルに加算命令への
参照情報を格納する。
加算テーブルに未処理言票があるかどうかを判定す
る。未処理言票がある場合,処理へ移る。
すべて処理済みであるとき,一時名tnに対応する
ループ内定数を掛けて,その和を作り,回帰式の定義変
数と加えた値を回帰変数の値とする。そして,次の最適
化処理へ移る。
和テーブルから和の言票を取り出す。
第2オペランドが一時名であるかどうかを判定す
る。一時名である場合には,処理へ移る。
第3オペランドが一時名であるかどうかを判定す
る。一時名でない場合,処理へ制御を戻し,次の未処
理言票について,同様に処理を繰り返す。
一時名を定義している言票を探す。
その言票が積の言票であるかどうかを判定する。積
でない場合,処理へ制御を移す。
積の言票である場合,参照オペランドの一方がルー
プ内定数で,他方がループ内変数であるかどうかをチェ
ックする。そうでない場合には,処理へ移る。
積の第1オペランドを参照している言票が,1個であ
るかどうかチェックする。1個でない場合,処理へ移
る。
和の第1オペランドを参照している言票が,1個であ
るかどうかチェックする。1個でない場合,処理へ移
る。
和の参照オペランドで,積の第1オペランドでない
ものにより,和の第1オペランドの参照を置換する。
一時名tnを生成して,ループの前に,「tn=0」
を出力する。積および和を消して,その位置に「tn
n+(可変オペランド)」を出力する。その後,処理
へ制御を戻し,同様に処理を繰り返す。
第3オペランドの処理中に,この処理へ来たかど
うかを判定する。第3オペランド処理済みであれば,処
理へ制御を戻す。第2オペランドの処理中であれば,
処理へ制御を戻し,第3オペランドについての処理を
続ける。
〔発明の効果〕
以上説明したように,本発明によれば,和計算を行う式
中のループ内定数と,ループ内変数との乗算部分が,部
分和を求める式に変更され,ループ内の演算は乗算から
加算に変更されるので,生成されるオブジェクトプログ
ラムの実行性能が向上する。
【図面の簡単な説明】
第1図は本発明の基本構成例,第2図は本発明の原理説
明図,第3図は本発明による最適化の例,第4図は本発
明の一実施例処理説明図を示す。 図中,11〜13は外部記憶装置,14はソースプログラム,15
は中間テキスト,16はオブジェクトプログラム,17は処理
装置,18はコンパイラ,19はソース解釈部,20は記憶域割
付け部,21は中間コード最適化部,22は回帰テキスト条件
チェック部,23はループ内変数の乗算部分検出部,24は乗
算部分取出し部,25は乗算テキスト付加部,26はレジスタ
使用決定部,27はオブジェクトプログラム出力部を表
す。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】高級言語で記述されたソースプログラム
    (14)を機械語レベルのオブジェクトプログラム(16)
    に翻訳する処理機能を有するデータ処理システムにおい
    て, 入力したソースプログラムの解析結果中のループ内に現
    れる式が,回帰テキストであるか否かの条件をチェック
    する回帰テキスト条件チェック手段(22)と, 回帰テキストの式が加算でつながっており,その中の乗
    算がループ内変数とループ内定数との積であるものを検
    出するループ内変数の乗算部分検出手段(23)と, 上記ループ内変数とループ内定数との積による計算結果
    が当該回帰テキストのみで参照されているときに,上記
    ループ内定数の乗算を取り除いた上記ループ内変数に関
    する和を求める中間テキストを生成する手段(24)と, ループ外のブロックに,上記ループ内変数に関する和を
    求める中間テキストの計算結果に対して,上記ループ内
    定数を乗算する中間テキストを生成して付加する手段
    (25)とを備えたことを特徴とするコンパイラにおける
    和計算の部分展開処理方式。
JP6240986A 1986-03-20 1986-03-20 コンパイラにおける和計算の部分展開処理方式 Expired - Fee Related JPH0795273B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6240986A JPH0795273B2 (ja) 1986-03-20 1986-03-20 コンパイラにおける和計算の部分展開処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6240986A JPH0795273B2 (ja) 1986-03-20 1986-03-20 コンパイラにおける和計算の部分展開処理方式

Publications (2)

Publication Number Publication Date
JPS62219129A JPS62219129A (ja) 1987-09-26
JPH0795273B2 true JPH0795273B2 (ja) 1995-10-11

Family

ID=13199314

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6240986A Expired - Fee Related JPH0795273B2 (ja) 1986-03-20 1986-03-20 コンパイラにおける和計算の部分展開処理方式

Country Status (1)

Country Link
JP (1) JPH0795273B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03132828A (ja) * 1989-10-16 1991-06-06 Internatl Business Mach Corp <Ibm> 共通の部分式を除去する方法
JPH04135245A (ja) * 1990-09-27 1992-05-08 Fujitsu Ltd コンパイル処理方式

Also Published As

Publication number Publication date
JPS62219129A (ja) 1987-09-26

Similar Documents

Publication Publication Date Title
US7493610B1 (en) Versioning optimization for dynamically-typed languages
JP2003029977A (ja) コンピュータ装置、その例外処理プログラム及び変換プログラム、並びにコンパイル方法
JP2000347872A (ja) 例外を正規制御フローとして処理する方法及び装置
JP2003196106A (ja) プログラム変換方法、コンピュータ装置及びプログラム
JPH0795273B2 (ja) コンパイラにおける和計算の部分展開処理方式
JP3049814B2 (ja) マイクロコンピュータの言語処理装置
JP3313859B2 (ja) 冗長式除去装置
JPS63155264A (ja) ベクトル計算機用言語チユ−ニング処理方式
JPH0379741B2 (ja)
Sim Optimising finite-difference methods for PDEs through parameterised time-tiling in Devito
JP3018783B2 (ja) コンパイル方式
JPH01128136A (ja) コンパイル処理装置
JP3167386B2 (ja) プログラム自動並列化方法
JPH09319586A (ja) プログラム変換装置及びプログラム変換方法
JP2004139369A (ja) 定数アドレス領域を指示するポインタ解析方法
JPH0689187A (ja) インライン展開最適化方法
JP3327662B2 (ja) プログラム翻訳装置及びプログラム翻訳方法
JPH04343140A (ja) コンパイラの最適化処理方法
JP2590288B2 (ja) プログラム変換装置
JPH04364537A (ja) 並列処理用プログラム最適化方法、装置およびコンパイラ
JPH0383140A (ja) 算術式展開方式
JP2002140198A (ja) インライン展開方法
JPS6297031A (ja) 仮数部のビツト数整合方式
JPH06214800A (ja) 目的プログラムの最適化処理システム
JPH081608B2 (ja) プログラム実行解析ツール

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees