JPH06324881A - メモリデータの重なり判定機能を備えたコンパイラ装置 - Google Patents

メモリデータの重なり判定機能を備えたコンパイラ装置

Info

Publication number
JPH06324881A
JPH06324881A JP5115609A JP11560993A JPH06324881A JP H06324881 A JPH06324881 A JP H06324881A JP 5115609 A JP5115609 A JP 5115609A JP 11560993 A JP11560993 A JP 11560993A JP H06324881 A JPH06324881 A JP H06324881A
Authority
JP
Japan
Prior art keywords
data
loop
memory data
overlap
unknown
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
Application number
JP5115609A
Other languages
English (en)
Inventor
Masakazu Hayashi
正和 林
Naoji Nakahira
直司 中平
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 JP5115609A priority Critical patent/JPH06324881A/ja
Priority to US08/202,580 priority patent/US5581762A/en
Publication of JPH06324881A publication Critical patent/JPH06324881A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】本発明はフロントエンド部からの中間表現につ
いて構造解析を行う構造解析部,データの有効範囲の解
析等を行うデータフロー解析部,及び静的にメモリデー
タの重なりをチェックする静的メモリデータ解析部及び
最適化処理部を備えるメモリデータの重なり判定機能を
備えたコンパイラ装置に関し,翻訳時のメモリデータの
重なりの判定結果が不明であっても最適化が可能な命令
列を出力することを目的とする。 【構成】静的メモリデータ解析部はデータの重なりチェ
ックによりメモリデータの重なりが不明と判定されたデ
ータの組を入力する動的メモリアドレス比較命令生成部
を設ける。動的メモリアドレス比較命令生成部は,重な
りが不明と判定されたデータ組に対し,該当アドレスの
実行時にアドレスの比較を行う命令を挿入すると共に,
メモリデータが重なる場合のパスと重ならない場合のパ
スの2つのパスの制御に分岐する命令列を生成するよう
構成する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はメモリデータの重なり判
定機能を備えたコンパイラ装置に関する。近年のコンピ
ュータシステムは,高速化の要求に伴い,1サイクルで
同時に複数命令を実行できるプロセッサや,ベクトル演
算が可能なマシンが数多く開発されている。それに伴
い,ソースプログラムをコンパイルしてオブジェクトプ
ログラム(目的語プログラム)へ変換する際に,実行時
における計算回数を減らし,より速い処理を可能にする
ための最適化の機能を備えることが要求されている。
【0002】コンパイラの最適化において,プログラム
上で使用されるデータが実メモリ上と同じものを表して
いるか,異なったものを表しているかを知ることは,最
適化や命令スケジューリングの効果に大きく影響する。
例えば,2つの代入文によりアクセスするデータが重な
り合うデータであることが分かった場合,最初にアクセ
ス動作を行ったら,後で同じデータにアクセスする必要
がないので,後の代入文を削除することにより最適化す
ることができる。
【0003】そのため,コンパイラの機能としてメモリ
データの重なりを判定する機能を備えることが要求され
ているが,実際には重なるか重ならないか判定できない
場合が多く,これらの場合,これらのデータ対しては最
適化を行うことができなかった。
【0004】
【従来の技術】現在の多くのプログラムでは,データの
アクセスに「ポインタ」や「配列」が一般的に利用され
ている。この「ポインタ」や「配列」で表されたデータ
は,それぞれ実メモリ上にマッピングされているが,異
なる表現で表された複数のデータが実メモリ上で同じメ
モリ領域にある(データの重なりという)か否かの判定
は,従来のコンパイルの方法ではプログラムを静的なメ
モリデータの解析(プログラムの表面的な解析)により
行っている。このようなデータの重なりを検出すること
により,最適化(プログラムの短縮,高速化)を効果的
に実現することができる。
【0005】一方,コンパイラの最適化技術の研究によ
り,多くのコンパイラに対してメモリデータの重なりを
判定するための手法を施す研究がされており,その例を
挙げれば,次の〜のような文献がある。
【0006】 A.V. エイホ他, 「コンパイラ−原理・
技法」サイエンス社 Susan Horwitz, 他, 「Dependence Analysis for Po
inter Variables 」,1989,ACM 0-89791-306-X Willam Laudi 他「A Safe Approximate Algorithm f
or Interprocedual Pointer Aliasing」, ACM SI
GPLAN '92 PLDI しかし,これらの手法は,全てコンパイラの翻訳時に静
的にメモリデータの解析を行ってメモリの重なりを判定
しようとするものである。
【0007】図9は配列についてのメモリデータの重な
りの説明図である。(イ)に示す例では,A(I),A
(J)という2つの配列が定義され,次のような式を実
行するソースプログラムがあるとする。
【0008】I=J=1 A(I)=x+y x=A(J)+1 をコンパイルする場合,A(I)とA(J)は見掛け上
は違うデータを指すが,A(1)=A(1)であるた
め,実メモリ領域で両者のデータは重なる,と判定でき
る。この場合,A(I)がロードされると,A(J)の
ロードは同じデータをロードすることになるため実行す
る必要が無く,コンパイラの最適化において省略の対象
となる。
【0009】一方,図9の(ロ)の例は,ループのプロ
グラムであり,f(I,J)のファンクションにおい
て,A(I)=x+y,z=A(J)+1の式の演算
を,I,Jの組み合わせに応じて順次ループの処理を繰
り返すものである。この例では,I=J=1というよう
な条件が定義されてないため,例えばf(1,1)の場
合は,A(I)=A(J)となって,メモリ上で両者は
重なるが,f(1,3)の場合は明らかに重なりは生じ
ない。その上,I,Jが引数によって渡されるためIと
Jの値が静的には判定できない。従って,この例では重
なるか重ならないかが判定できず,重なりの判定結果と
しては「不明」となる。同様なことは「ポインタ」につ
いても言える。
【0010】次に,図3に示すプログラムの例を参照す
ると,これはC言語のプログラムであり,最初の2行は
宣言であり,関数f(x,y,z)の型(voidは型が無いこと
を表す) と,与えられる*x,*y,*z(各アドレ
ス)のデータの型が宣言される。この後の2行も宣言で
あり,最初に各変数*a,*b,*c,*d(各アドレ
ス)が宣言され,その後に特定のデータ(lastという名
前) の内容(図示省略されているが,例えば数値)が設
定されている。その後に,変数a,b,c,dについ
て,それぞれx,y,zと関係付けられた式が格納され
ている。続いて,「while(a<b)・・・・」と
いう式によるループ動作を表す文が設定されている。
【0011】このプログラムの場合,例えば変数aと変
数cが,同じメモリ上のデータであるか否かは判定でき
ない。何故なら,変数a,変数c等は引数によって与え
られるので,この関数fを呼び出している方の引数等の
情報は,コンパイラには何も分からないからである。
【0012】なお,ソースプログラムに翻訳指示文等で
プログラムの作成者が,コンパイラに対してメモリデー
タの重なりの有無を指示し,それによってコンパイラの
最適化を行うという手法(例えば,FUJITSU FORTRAN 77
EX/VP)もあるが,これは判定をプログラマに委ねている
ことになり, 自動的に判定できない。
【0013】
【発明が解決しようとする課題】上記したように,従来
の翻訳時にのみメモリの重なりの判定をする方法では,
重なりを判定できない場合がある。その場合,静的なメ
モリデータ解析の結果として重なりが「不明」であると
され,そのようなデータについては共通化や,命令順序
の変更の対象とすることができないため最適化効率を阻
害してしまうという問題があった。
【0014】本発明は翻訳時のメモリデータの重なりの
判定結果が不明であっても最適な命令列を出力すること
ができるメモリデータの重なり判定機能を備えたコンパ
イラ装置を提供することを目的とする。
【0015】
【課題を解決するための手段】図1は本発明の原理構成
図である。図1において,1は入力されるソースプログ
ラムに対応する中間表現を出力するフロントエンド部,
2はプログラムの構造を解析しループ構造の認識を行う
構造解析部,3は各データの有効範囲の解析を行うデー
タフロー解析部,4は静的なメモリデータの重なりを検
査する静的メモリデータ解析部であり,他の各部と独立
して設けられ,最適化処理部における各種最適化や,命
令スケジューリング部等から必要な時点で,2つのメモ
リデータを与えることにより呼び出されて,解析結果と
して「一致」,「不一致」,「不明」を返却する。
【0016】5は本発明により新たに設けられた動的メ
モリアドレス比較命令生成部,6は最適化処理部,7は
命令スケジューリング部である。8はコンパイラスイッ
チ(SWで表示)であり,前記動的メモリアドレス比較
命令生成部5の機能を作動させる(オン状態)か否(オ
フ状態)かを切り換える。このコンパイラスイッチ8
は,翻訳時やオプション等でオン/オフが設定される。
【0017】図1において,1〜4及び6,7の各部は
従来のコンパイラ装置が備えた手段であり,命令スケジ
ューリング部7はコンパイラ装置によっては備えていな
い場合がある。
【0018】本発明は翻訳時のメモリデータの重なりの
判定結果を利用し,この判定が「不明」であったメモリ
データの重なりについて,プログラムの実行時に判定す
るための比較命令を出し,重なる場合のコードと,重な
らない場合のコードの両方を出力することによりできる
だけ最適な命令列を出力するものである。
【0019】
【作用】図1において,コンバイルの対象となるプログ
ラムがフロントエンド部1によって中間表現に変換され
る。このフロントエンド部1の中間表現に対し構造解析
部2において,ループを構成するプログラム単位を識別
する。次にデータフロー解析部3は各データの有効範囲
等の解析を行い,上記の構造解析部2で識別したループ
単位のデータ構造について,ループ内で値が不変のデー
タか,ループ内で規則的に変化するデータかを解析す
る。コンパイラスイッチ8がオンの時は,解析された情
報は静的メモリデータ解析部4に供給される。一方,最
適化処理部6(またはや命令スケジューリング部7)か
らは,最適化の対象となるメモリデータの組について重
なるか否かを識別するために静的メモリデータ解析部4
が呼び出されて解析が実行され,それらのメモリデータ
の組についての判定を行う。
【0020】この静的メモリデータ解析部4は,メモリ
データの組の重なりについて「一致」,「不一致」及び
「不明」の何れに該当するかの判定を行って,各データ
の組に対して「一致」,「不一致」または「不明」を表
す情報を付与する。この判定結果は,データフロー解析
部3を介して動的メモリアドレス比較命令生成部5に供
給される。
【0021】動的メモリアドレス比較命令生成部5は,
ここで静的メモリデータ解析部4で「不明」が付与され
たデータの組に対して,これらが重なるかどうかの判定
を実行させる中間テキスト(プログラム)を生成し,さ
らにその判定結果が重なる場合と重ならない場合のそれ
ぞれに対して実行されるオリジナルのコード(プログラ
ム)を生成する。この時,重なる場合のパスにはこれら
のデータの重なり判定結果の情報を「不明」から「一
致」に変更する。また重ならない場合のパスには,これ
らのデータ組に付与された判定結果の情報を「不明」か
ら「不一致」に変更する。
【0022】動的メモリアドレス比較命令生成部5によ
り命令列が出力されると,最適化処理部6は,要求され
た各項目の最適化を行い,データが重なる場合の命令列
の最適化においては,データに付与された「一致」とい
う情報を利用し,また重ならない場合の命令列の最適化
においては,データに付与された「不一致」という情報
を利用する。命令スケジューリング部7においても,こ
れらの「一致」,「不一致」を用いてスケジューリング
を実行する。このように「一致」,「不一致」のデータ
の組だけを用い,「不明」が付与されないことにより最
適化処理部6及び命令スケジューリング部7における,
最適化及び命令スケジューリングの効果を向上すること
ができる。
【0023】コンパイラスイッチ8がオフの時は,デー
タフロー解析部3における解析動作の後,最適化処理部
6に処理が移り,従来からあるコンパイラと同様の処理
を行う。
【0024】
【実施例】図2は実施例の処理フローである。最適化
は,あるまとまり(ループ単位,プログラム単位等)毎
に行われるが,ループ内を最適化することにより一般的
に大きな効果を期待することができるので,図2はルー
プ単位に本発明によるデータの重なりの最適化を適用し
た実施例である。
【0025】図2において,20は構造解析処理,21
はデータフロー解析処理,22はループ対応処理,23
は静的メモリデータの解析処理,24は動的メモリアド
レス比較命令生成・ループ複写の処理,25はループ対
応処理,26は最適化処理,27は命令スケジューリン
グ,28は上記の動的メモリアドレス比較命令生成・ル
ープ複写の処理24の処理の繰り返しを制御する処理ル
ープ制御部である。この中の,各処理20,21,2
6,27の各処理はそれぞれ上記図1の2,3,6,7
に対応し,従来のコンパイラ装置が備える各機能であ
る。28は24の処理の繰り返しを制御する処理ループ
制御部である。
【0026】図2の構造解析処理20において,コンパ
イラは処理する中間表現の量によって,対象となるルー
プのオブジェクトサイズ,翻訳時間を見積もることがで
きる。そして,見積もられた値を変数として格納するこ
とによって処理ループ制御部28に渡される。
【0027】図2の動的メモリアドレス比較命令生成・
ループ複写の処理24は本発明の特徴とする機能であ
り,その機能は24a,24bの2つの処理により構成
され,24aは対象となるループの発見と条件分岐挿入
の準備処理,24bは制御フローの構築とループの複写
処理である。
【0028】この実施例では,上記に引用した図3に示
すプログラムの具体例を対象として説明する。この図3
のプログラムは上記したように条件式(while以下
の式)によりループが動作が行われる。
【0029】図2の動作を説明すると,構造解析処理2
0においてフロントエンドからの中間表現(中間言語プ
ログラム)についてループ構造を含む構造解析か行われ
る。この解析によりループを持つプログラムのデータが
解析されると,ループ情報が獲得されて,メモリ(図示
せず)に格納される。
【0030】次に,データフロー解析処理21におい
て,ループ内で不変(値が変わらない)なデータと,ル
ープ内で規則正しく増減するデータを識別する。図3に
示すプログラムの例では,次のように識別される。
【0031】ループ内で不変なもの・・・bのアドレ
ス及びdのアドレス ループ内で規則正しく増減するもの・・・aのアドレ
ス及びcのアドレス(この例では,ループの回転毎に4
ずつ増加する) 次にループ対応処理22によりループを検出すると,各
ループ毎に23,24の処理を起動する。静的メモリデ
ータの解析処理23は静的メモリデータの重なり判定を
行い,重なりが「不明」であると判定されたメモリデー
タの組合わせを検出する。図3のプログラムの例では,
「不明」のメモリデータの組合わせは,次の通りであ
る。
【0032】(1) (a,c)の組 (2) (a,d)の組 (3) (c,d)の組 上記の構造解析処理20,データフロー解析処理21,
及びループ毎に実行される静的メモリデータ解析処理2
3により,ループ情報のデータが得られる。
【0033】図4にループ情報のデータ構造を示す。図
4において,最初の〜は構造解析処理20により得
られ,は外側のループを表す情報,は内側のループ
リスト,はループを構成する基本ブロックの先頭であ
る。次のはデータフロー解析処理21により得られ,
ループ内で規則正しく値が増減するもののリストであ
る。
【0034】次のは,静的メモリデータ解析処理23
により得られ,メモリデータの組に対する静的メモリの
重なり判定の結果リスト(メモリの重なりリストとい
う)を表す。次のにはループの回転数を示すものへの
ポインタである。このループの回転数は,実行時(コン
パイルの終了後に実行した時)にしか分からないが,ル
ープの開始前に計算可能である。なぜなら,ループの回
転数を制御する変数の値がループ内で規則正しく,動く
ことが分かっているからである。このことは,構造解析
処理20とデータフロー解析処理21におけるループ構
造の解析により判定できる。従って,必要ならば,実行
前にループ回転数を計算するための命令を出力すること
ができる。また,はその他の本発明には直接関係ない
情報を表す。
【0035】図2において,ループ毎に実行される静的
メモリデータ解析処理23に続いて,動的メモリアドレ
ス比較命令生成・ループ複写の処理24が起動される。
この動的メモリアドレス比較命令生成・ループ複写の処
理24では,対象となるループの発見と条件分岐挿入の
準備処理24aが実行され,続いて制御フローの構築と
ループの複写処理24bが実行され,各処理の内容は図
5,図7を用いて説明する。
【0036】図5はループの発見と条件分岐挿入の準備
処理(図2の24a)の詳細な処理フロー図である。図
5の処理は上記図4のデータ構造を持つループ情報が入
力されて実行され,静的メモリデータ重なりリスト(図
4の)の要素が存在する回数だけループを行い(図5
のS1),データ組について静的メモリデータ重なり判
定の結果が「不明」であるか判定し(同S2),「不
明」でないものは対象とせず,「不明」である場合は,
そのデータ組の少なくとも一方がストア(対象プログラ
ムの動作によりメモリ上に格納)されるか判定する(同
S3)。
【0037】この判定でノーの場合(何れもストアされ
ない場合)は対象とせず,ストアされる場合は「不明」
の変数のアドレスが不変または規則正しく変化するか判
別する(同S4)。この何れにも該当しないとそのデー
タについては,対象とせず,該当する場合は条件分岐挿
入の準備のため,上記S2〜S4の条件を満たす(イエ
スとなる場合),変数の組を重なり不明リストに登録し
(同S5),次のデータについて同様の処理が繰り返さ
れる。
【0038】図5のステップS4の後に更に,ループの
回転数が翻訳時に分かる場合,その回転数や,メモリの
重なり状態が,「不明」から「一致」または「不一致」
となることによる最適化の効果の予想または見積もりに
よって,この展開が効果があるか否かの判断を付加する
ことができる。その場合,判断を行った結果を処理ルー
プ制御部28に対し変数等で渡すことによってループの
展開数を制御することができる。なお,最適化の見積も
りは,どのような最適化が適用されるかということがコ
ンパイラに予め設定されているので,消える命令・ルー
プ外に移動する命令の数を見積もることにより可能とな
る。
【0039】上記図3のプログラムの例では,重なりが
「不明」であると判定されたメモリデータの組合わせで
ある上記(1) 〜(3) の中で,重なり不明リストに登録さ
れるデータの組は,(a,c),及び(c,d)であ
り,その内容が図6に示す重なり不明リストの例として
示されている。
【0040】図6の場合,60,61は変数の組情報が
格納された領域であり,62〜64は各変数に関する情
報が格納された領域であり,変数名とアドレスが変化す
る範囲が格納されている。変数の組情報60には変数情
報1と変数情報2に対応する変数(変数名a,変数名
b)の情報が格納された領域62,63のアドレス(ポ
インタ),及び静的重なり判定結果が「不明」という表
示が格納されている。同様に,他の組情報61には変数
情報1と変数情報2に対応する変数(変数名cと変数名
d)の情報が格納された領域63,64のアドレス(ポ
インタ)が格納されている。変数情報62,63の変数
a,変数bは,初期値のアドレス下限とプログラムのル
ープ回数(count で表す) に対応して変化するアドレス
上限が格納され,変数情報64の変数dはアドレス下限
と上限がループの回転に対し変化せず一定(d+0)で
ある。
【0041】図7は制御フローの構築とループの複写
(図2の24b)の処理フローである。図7の処理は上
記の図5の処理で作成した重なり不明リスト(図6)の
入力に対して実行され,出力としてループの複写を行っ
た中間表現を作成する。
【0042】最初にループを展開する数Nを決定する
(図7のS1)。次に重なり不明リスト(図6)をN個
分複写して,それぞれリスト・配列に格納して,ループ
展開用リストを作成する(図7のS2)。一般に,ルー
プの展開数は,リストの要素数がK個あった時,考えら
れる条件の組み合わせ総数は2K 個となるが,後述する
優先順位方式等の他の方式を採用することもできる。
【0043】次にループ展開用リストの各要素の「不
明」であった部分をそれぞれの条件に合わせて,書き換
える。上記ステップS2において作成されたループ展開
リストの例を図8に示す。これは図3のプログラムに対
して得られた重なり不明リスト(図6)について作成さ
れたループ展開リストである。この内容を説明すると,
図6に示すように重なり不明の変数の組み合わせは,a
・cの組とc・dの組の2組であるから,2組の変数が
一致するか一致しない(不一致)かの組み合わせは22
=4つである。すなわち,「不一致」・「不一致」,
「不一致」・「一致」,「一致」・「不一致」及び「一
致」・「一致」の4つである。
【0044】この各組み合わせが図8に示すループ展開
リストであり,80は各組み合わせを示すループ展開1
〜ループ展開4が表示され,81〜88は各ループ展開
に対応してそれぞれの場合の,第1の組(a,c)の変
数情報1(a),変数情報2(c)と一致または不一致
の表示と,これに組み合わされた第2の組(c,d)の
変数情報1(c),変数情報2(d)と一致または不一
致の表示が設定されている。
【0045】このようなループ展開リストの各要素に対
してS4〜S6の処理が繰り返される(図7のS3)。
すなわち,ループ展開リストの各要素の判定部分に従っ
て,判定部分を検査(「一致」,「不一致」の検査)す
るというような条件判定を行う中間テキストを挿入する
(図7のS4)。続いて,各条件(一致,不一致)の後
にループの展開を行う。ループの展開は,一般のコンパ
イラと同じ方法で行うことができ,図4に示すようなデ
ータ構造を持つループ情報をはじめとするループに関す
る情報を複写し(図7のS5),ループ情報により関係
付けられているメモリの重なりリスト(図4の)のう
ち,この条件に当てはまるもののデータを「不明」から
「一致」または「不一致」に変更する(図7のS6)。
【0046】条件判定のための,中間テキストの出力方
法を以下に説明する。条件判定は,そのデータのループ
内での振る舞いによって出力される命令(中間テキスト
列)が異なる。一般に,変数a,変数bのアドレスの重
なり判定を例にとると,以下の場合が考えられる。この
ような,展開は実際の「IF」文等の展開と同じ手法を
用いて作成することができる。各場合について分けて中
間テキストの作成例を示す。
【0047】(1) 両方とも規則正しい増減をするが,そ
の増減値が異なる場合。これは一般的であり,後の(2),
(3) の2つの場合は,特殊な場合である。このような場
合,片方のアドレスの上限が,他方のアドレスの下限よ
りも小さいことを判定すればよい。この場合の条件判定
式は次のようになる。
【0048】 Condition =Low Address(a)> High Address(b) OR Condition =Low Address(b)> High Address(a) (2) a,bがループでない共に不変,または共に同じよ
うに増減する変数の場合。このような場合は,最初のア
ドレスのみ比較すれば良いので,次の条件判定を行えば
よい。
【0049】 Condition =Low Address(a)<> High Address(b) (3) 片方が不変で,片方が規則正しく増減する場合。こ
の場合,不変のアドレスが移動するものの範囲にあるか
どうかを調べればよいので,次の条件判定式となる。
【0050】 Condition =LowAddress(a) > HighAddress(b) OR Condition =LowAddress(a) < HighAddress(b) ループ展開の他の実施例 上記した例では,全ての場合の数分だけ,ループを展開
する方式をとったが,翻訳時間や生成されるオブジェク
トの大きさ等を考慮して以下の方式を用いることができ
る。
【0051】リストの要素を優先順に並び変えてお
き,条件を1つずつ緩くしていくような展開にする(優
先順位方式という)。ループの展開・複写数は,要素+
1個になる。
【0052】組み合わせの幾つかを選択して,それに
対して全ての組合せについてループの展開・複写を行
う。 組み合わせの幾つかを選択して,それに対して優先順
位方式を実行する。
【0053】これらは,翻訳時オプションまたは,構造
解析処理20で見積もられたデータによって各処理ルー
プ制御部28で切り分けられることが可能である。次に
ユーザ指定の実際の重なり状態が異なる場合について説
明する。この場合は,警告メッセージを出力するよう構
成するが,これは,最適化の観点からは必ずしも設ける
必要がない。ユーザが,「重ならない」と宣言した変数
の組は,翻訳時に印をつけることにより識別できる。こ
の機能を実現する場合は,この変数の組に対して,上記
で示したのと同様に条件を展開し,ユーザ指定と異なる
フローには,警告メッセージを出力させるようにする。
実行時に警告メッセージを出力するルーチンは,コンパ
イラに備わっているのでそれを利用する。
【0054】上記図3のプログラムの場合,従来の方式
によると,2つのデータc,dの重なりは不明なので,
*d(dのアドレス)はループ内で不変であるいう判断
ができなかったため,*dの値はループの毎回の回転毎
にメモリからロードする必要があった。しかし, 本発明
によれば,もし(c,d)が重ならない場合は,(c,
d)は「不一致」というルートを通ることにより,この
ルート内の最適化のループ処理では,*dはループ内定
数として認識されるので,*dのロードがループの外に
出されて,最適化を実現できる。また,*cのストアに
関しても同様の効果を上げる。
【0055】
【発明の効果】本発明によれば従来の技術では重なりが
不明とされていて最適化の対象にならなかったメモリデ
ータに対し,比較命令を生成して「一致」及び「不一
致」の各場合のルートを作成することにより,「一致」
の場合及び「不一致」の場合にも最適化のループ処理で
ループの外に出す等が可能となり,最適化及び命令スケ
ジューリングの効率を向上することができる。
【図面の簡単な説明】
【図1】本発明の原理構成図である。
【図2】実施例の処理フロー図である。
【図3】対象となるプログラムの具体例を示す図であ
る。
【図4】ループ情報のデータ構造を示す図である。
【図5】ループの発見と条件分岐挿入の準備処理の処理
フロー図である。
【図6】重なり不明リストの例を示す図である。
【図7】制御フローの構築とループの複写の処理フロー
図である。
【図8】重なり不明リストに対して作成されたループ展
開リストの例を示す図である。
【図9】配列についてのメモリデータの重なりの説明図
である。
【符号の説明】
1 フロントエンド部 2 構造解析部 3 データフロー解析部 4 静的メモリデータ解析部 5 動的メモリアドレス比較命令生成部 6 最適化処理部 7 命令スケジューリング部

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムに基づき中間表現を出
    力するフロントエンド部からの中間表現について構造解
    析を行う構造解析部,データの有効範囲の解析等を行う
    データフロー解析部,及び静的にメモリデータの重なり
    をチェックする静的メモリデータ解析部及び最適化処理
    部を備えるコンパイラ装置において,前記静的メモリデ
    ータ解析部はデータの重なりチェックによりメモリデー
    タの重なりが不明と判定されたデータの組を発生し,前
    記メモリデータの重なりが不明と判定されたデータの組
    が入力する動的メモリアドレス比較命令生成部を設け,
    前記動的メモリアドレス比較命令生成部は,前記重なり
    が不明と判定されたデータの組に対し,該当データアド
    レスの実行時にアドレスの比較を行う命令を挿入すると
    共に,メモリデータが重なる場合のパスと重ならない場
    合のパスの2つのパスの制御に分岐する命令列を生成す
    ることを特徴とするメモリデータの重なり判定機能を備
    えたコンパイラ装置。
  2. 【請求項2】 請求項1において,前記構造解析部にお
    ける解析と前記データフロー解析部による解析及び前記
    静的メモリデータ解析部において最適化の対象となるル
    ープ情報のデータ及び静的メモリデータの重なりリスト
    を収集し,前記動的メモリアドレス比較命令生成部は,
    前記静的メモリデータの重なりリストを受け取って対象
    となるループの発見と条件分岐挿入に使用する重なり不
    明リストを生成する処理部と,ループ展開数を決定して
    前記重なり不明リストを各展開数分複写してループ展開
    用リストを作成し,該ループ展開用リストの各要素とな
    っている候補リストの判定部分を条件に合わせて書き換
    える処理部とで構成することを特徴とするメモリデータ
    の重なり判定機能を備えたコンパイラ装置。
  3. 【請求項3】 請求項1,2において,前記動的メモリ
    アドレス比較命令生成部の処理を含む最適化処理は,オ
    ブジェクトサイズ,翻訳時間,最適化の効果をコンパイ
    ラ内部の判定部で判定し,複数の条件式(一致,不一致
    の判定条件式)の中から一つを切り分けて選択すること
    を特徴とするメモリデータの重なり判定機能を備えたコ
    ンパイラ装置。
  4. 【請求項4】 請求項1,2において,前記動的メモリ
    アドレス比較命令生成部の最適化処理は,コンパイラの
    外部からのオプションにより切り分けられることを特徴
    とするメモリデータの重なり判定機能を備えたコンパイ
    ラ装置。
  5. 【請求項5】 請求項1,2において,ユーザにより判
    定されてプログラムに与えられたメモリデータの重なり
    に関する情報が前記の最適化処理後の実行時に誤りであ
    ることが検出されると,警告メッセージを出力すること
    を特徴とするメモリデータの重なり判定機能を備えたコ
    ンパイラ装置。
JP5115609A 1993-05-18 1993-05-18 メモリデータの重なり判定機能を備えたコンパイラ装置 Pending JPH06324881A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP5115609A JPH06324881A (ja) 1993-05-18 1993-05-18 メモリデータの重なり判定機能を備えたコンパイラ装置
US08/202,580 US5581762A (en) 1993-05-18 1994-02-28 Compiling apparatus having a function to analyze overlaps of memory addresses of two or more data expressions and a compiling method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5115609A JPH06324881A (ja) 1993-05-18 1993-05-18 メモリデータの重なり判定機能を備えたコンパイラ装置

Publications (1)

Publication Number Publication Date
JPH06324881A true JPH06324881A (ja) 1994-11-25

Family

ID=14666884

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5115609A Pending JPH06324881A (ja) 1993-05-18 1993-05-18 メモリデータの重なり判定機能を備えたコンパイラ装置

Country Status (2)

Country Link
US (1) US5581762A (ja)
JP (1) JPH06324881A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6243864B1 (en) 1997-07-17 2001-06-05 Matsushita Electric Industrial Co., Ltd. Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
US9063735B2 (en) 2010-10-19 2015-06-23 Samsung Electronics Co., Ltd. Reconfigurable processor and method for processing loop having memory dependency

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3626784B2 (ja) * 1995-03-17 2005-03-09 富士通株式会社 分散メモリ型並列計算機におけるデータ更新方法およびプログラム変換装置
US5774726A (en) * 1995-04-24 1998-06-30 Sun Microsystems, Inc. System for controlled generation of assembly language instructions using assembly language data types including instruction types in a computer language as input to compiler
JPH08328870A (ja) * 1995-05-30 1996-12-13 Fujitsu Ltd コンパイル処理装置
US5805863A (en) * 1995-12-27 1998-09-08 Intel Corporation Memory pattern analysis tool for use in optimizing computer program code
CA2166369C (en) * 1995-12-29 2004-10-19 Robert J. Blainey Method and system for determining inter-compilation unit alias information
US5920716A (en) * 1996-11-26 1999-07-06 Hewlett-Packard Company Compiling a predicated code with direct analysis of the predicated code
US6064818A (en) * 1997-04-10 2000-05-16 International Business Machines Corporation Straight path optimization for compilers
US6247173B1 (en) 1997-09-24 2001-06-12 Hewlett-Packard Company Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling
EP1402401A4 (en) 2001-06-15 2007-10-03 Cadence Design Systems Inc INCREASING DATA CIRCUIT MERGING CAPACITY AND REDUCING DATA CIRCUIT WIDTHS BY REBALANCING DATA CIRCULATION TOPOLOGY
US7624387B2 (en) * 2003-04-10 2009-11-24 Panasonic Corporation Compiler, program product, compilation device, communication terminal device, and compilation method
DE102004041657A1 (de) * 2004-08-27 2006-03-09 Infineon Technologies Ag Schaltungsanordnung und Verfahren zum Betrieb einer solchen
US7546588B2 (en) * 2004-09-09 2009-06-09 International Business Machines Corporation Self-optimizable code with code path selection and efficient memory allocation
US7523450B2 (en) * 2004-11-15 2009-04-21 International Business Machines Corporation Apparatus, system, and method for identifying fixed memory address errors in source code at build time
US7694286B2 (en) * 2005-02-10 2010-04-06 International Business Machines Corporation Apparatus and method for detecting base-register usage conflicts in computer code
US7707561B2 (en) * 2005-02-15 2010-04-27 International Business Machines Corporation Apparatus, system, and method for converting data
KR100813662B1 (ko) * 2006-11-17 2008-03-14 삼성전자주식회사 프로세서 구조 및 응용의 최적화를 위한 프로파일러
US8484629B2 (en) * 2007-05-24 2013-07-09 Microsoft Corporation Programming model for modular development
US8839218B2 (en) * 2007-06-04 2014-09-16 International Business Machines Corporation Diagnosing alias violations in memory access commands in source code
US8930927B2 (en) * 2007-06-04 2015-01-06 International Business Machines Corporation Diagnosing aliasing violations in a partial program view
KR101020295B1 (ko) * 2009-03-30 2011-03-07 주식회사 하이닉스반도체 어드레스 변환회로 및 이를 이용한 반도체 메모리 장치

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0425942A (ja) * 1990-05-21 1992-01-29 Nec Corp ループの最適化処理方式

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6243864B1 (en) 1997-07-17 2001-06-05 Matsushita Electric Industrial Co., Ltd. Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
US9063735B2 (en) 2010-10-19 2015-06-23 Samsung Electronics Co., Ltd. Reconfigurable processor and method for processing loop having memory dependency

Also Published As

Publication number Publication date
US5581762A (en) 1996-12-03

Similar Documents

Publication Publication Date Title
JPH06324881A (ja) メモリデータの重なり判定機能を備えたコンパイラ装置
US7725883B1 (en) Program interpreter
Lee et al. Basic compiler algorithms for parallel programs
US5142681A (en) APL-to-Fortran translators
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
US5854932A (en) Compiler and method for avoiding unnecessary recompilation
JP3311462B2 (ja) コンパイル処理装置
EP0214751B1 (en) A method for vectorizing and compiling object code
US7028291B2 (en) Debugging method and debugging device
US6233733B1 (en) Method for generating a Java bytecode data flow graph
White et al. Timing analysis for data and wrap-around fill caches
US6230317B1 (en) Method and apparatus for software pipelining of nested loops
JP2008546086A (ja) 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置
JP2011530768A (ja) ソフトウェア・アプリケーションの性能向上
JP4886838B2 (ja) 並列化方法、システム、及びプログラム
JPH06314203A (ja) コンパイラの最適化方法および装置
EP1039382B1 (en) Memory access optimizing method
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
Huda et al. Automatic parallel pattern detection in the algorithm structure design space
Hoevel " Ideal" Directly Executed Languages: An Analytical Argument for Emulation
WO2000038058A2 (en) Method and system for identifying locations to move portions of the computer program
Leone et al. Dynamo: A staged compiler architecture for dynamic program optimization
US7313787B2 (en) Compiler and method for optimizing object codes for hierarchical memories
Wei et al. DLVM: A modern compiler framework for neural network DSLs

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20010710