JPH0816871B2 - プログラム翻訳装置およびプログラム翻訳方法 - Google Patents

プログラム翻訳装置およびプログラム翻訳方法

Info

Publication number
JPH0816871B2
JPH0816871B2 JP2407393A JP40739390A JPH0816871B2 JP H0816871 B2 JPH0816871 B2 JP H0816871B2 JP 2407393 A JP2407393 A JP 2407393A JP 40739390 A JP40739390 A JP 40739390A JP H0816871 B2 JPH0816871 B2 JP H0816871B2
Authority
JP
Japan
Prior art keywords
variable
register
variables
live range
live
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
JP2407393A
Other languages
English (en)
Other versions
JPH04213118A (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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
Fujifilm Business Innovation Corp
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 Fuji Xerox Co Ltd, Fujifilm Business Innovation Corp filed Critical Fuji Xerox Co Ltd
Priority to JP2407393A priority Critical patent/JPH0816871B2/ja
Priority to US07/769,446 priority patent/US5367696A/en
Publication of JPH04213118A publication Critical patent/JPH04213118A/ja
Publication of JPH0816871B2 publication Critical patent/JPH0816871B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は限定された有限個のレジ
スタを有する電子計算機のプログラム翻訳装置に関し、
特にコンパイラやインタプリタに適するプログラム翻訳
処理におけるレジスタ割り付けに関するものである。
【0002】
【従来の技術】従来のコンパイラのレジスタ割り付け方
式の一つとして、文献1(G.J.Chaitin,M.A.Auslander,
A.K.Chander,J.Cocke,M.E.Hopkins and P.W.Markstein,
“Register Allocation via Coloring”,Computer Lan
guage6,pp.47-37(1981))に示されるようなグラフ彩色
法を用いたレジスタ割り付け方式がある。この方式で
は、生存区間全体に渡って互いが干渉しているか否かに
よって干渉グラフを生成し、その干渉グラフの各ノード
に色づけを行ない、色と実際に存在するレジスタを1対
1に対応させることによってレジスタ割り付けを行って
いる。そのため、実際にはまだ割り付け可能な区間を残
したレジスタが存在していても、その区間内に変数の生
存区間全体が収まらないという理由で、レジスタが割り
当てられない場合が発生し、生成されるオブジェクトコ
ードの効率が悪くなるという欠点があった。更に、十分
なレジスタが存在するならば比較的計算時間も少なくて
済むが、使用可能なレジスタが少ない場合には、spill
コードを挿入してレジスタ割り付けの対象とする干渉グ
ラフのノード数を減らすために、再計算のオーバーヘッ
ドが非常に大きくなる。
【0003】また、文献2(Allocation by Priority-b
ased Coloring",Proceedings of the ACMSIGPLAN Sympo
sium on Compiler Construction,pp222-232(June17-22,
1984))に示されているような割り付け手法を用いる
と、レジスタ割り付けの色づけ対象である変数の生存区
間が、干渉グラフ上で限定された色数による色づけを行
なうことが不可能な場合に、ひととおり色づけされなか
った変数の生存区間を複数の生存区間に分割することに
よって、前述の文献1の方式の欠点を解消しているが、
この際に、最初に生成した干渉グラフに、新たに分割し
た変数の生存区間に相当するノードを追加し、干渉グラ
フの再構成を行ない、優先順位の再計算、彩色等を行な
うための時間がかかりすぎるという欠点があった。特
に、優先順位が極めて低いために最後まで全く割り付け
られない生存区間に関しては、無駄な分割が繰り返され
ることになる。また、優先順位を産出する際にループを
重み付けの対象として用いているが、実際のソースコー
ド中には、この他に条件分岐による基本ブロックの実行
頻度の差が存在し、このために優先順位が正しく算出さ
れない場合が生じた。
【0004】特開平1−103742号公報に示される
手法では、上記文献2の手法を基に、割り付け対象とす
る生存区間のみを分割することで無駄な分割による計算
時間の増加を抑え、if文による分岐を優先順位の計算
の際に考慮に入れることによって、生存区間の優先順位
を実行頻度の近似により近いものにし、文献2の前記問
題点を改善している。
【0005】しかし、以上述べたどの手法を用いても、
ある変数の生存区間全体に渡って割り付けることが可能
なレジスタが存在し、メモリ中に存在するよりもレジス
タに割り付けた方が生成されたコードの効率が少しでも
良くなるような生存区間は、生存区間全体をレジスタに
割り付けてしまうために、実行頻度が生存区間の部分部
分によって疎密のある変数の場合でも、疎である区間も
また1つのレジスタを占有してしまうことになるため、
必ずしも最適なコードが生成されないという欠点があっ
た。
【0006】
【発明が解決しようとする課題】本発明は、前記した従
来技術の欠点を除去・改良することを目的とする。すな
わち、本発明は、生成されたコードの実行効率を向上さ
せ、より実際の実行頻度に基づいたレジスタ割り付けを
行うことを目的とする。
【0007】
【課題を解決するための手段】本発明のプログラム翻
置は、各変数の生存区間の始点と終点を検出する検出
手段と、前記検出手段によって検出された第1の変数の
生存区間を、該生存区間内に存在する前記検出手段によ
り検出された第2の変数の生存区間の始点あるいは終点
により複数の時間区間に分割する分割手段と、前記時間
区間ごとに、優先順位に従ってレジスタに割り付ける変
を決定するレジスタ割り付け手段とを有することが
本的な構成上の特徴である。 上記本発明の基本的な構成
において、優先順位は具体的態様においては計算手段に
より算出する。その一態様として計算手段は、前記時間
区間ごとに、生存する変数の優先順位を算出する機能を
持つ。 さらに具体的態様として計算手段は、前記時間区
間ごとに、生存する変数の該時間区間中の参照回数やメ
モリからあるいはメモリへ変数の値を移動する必要回数
に基づいて優先順位を算出する機能を有する。 また、本
発明の一態様では、前記基本的な構成において、前記時
間区間ごとに、前記レジスタ割り付け手段によりレジス
タに割り付けられた変数をどのレジスタに割り当てるか
を決定するレジスタ割り当て手段が設けられる。また、
本発明の他の態様では、上記レジスタ割り当て手段を有
する構成において、最適化レベルを設定する最適化レベ
ル設定手段と、その最適化レベル設定手段に設定された
最適化レベルに基づいて、前記レジスタ割り付け手段お
よびレジスタ割り当て手段を再実行させる再実行制御手
段を設ける構成とする。 また、本発明のプログラム翻訳
方法は、各変数の生存区間の始点と終点を検出し、その
検出された第1の変数の生存区間を、該生存区間内に存
在する検出された第2の変数の生存区間の始点あるいは
終点により複数の時間区間に分割し、その時間区間ごと
に、使用可能なレジスタ数と生存する変数の数を比較
し、その比較の結果、変数の数の方が少ない場合に、当
該時間区間において、生存する変数をすべてレジスタに
割り付け、また、前記比較の結果、変数の数の方が多い
場合に、生存する変数の該時間区間中の参照回数に基づ
いて優先順位を算出し、その算出された優先順位に基づ
いて、当該時間区間中にレジスタに割り付ける変数を
定する。 また、本発明の一態様では、上記プログラム翻
訳方法において、すべての時間区間で変数のレジスタへ
の割り付けが終了した後、前記時間区間ごとに、レジス
タへの割り付けられた変数に対し、他の時間区間におい
て当該変数が既に割り当てられているレジスタあるいは
どの変数も割り当てられていないレジスタが存在するか
否かを調べ、前記レジスタが存在する楊合に、該レジス
タに該変数を割り当て、前記レジスタが存在しない場合
に、当該時間区間において空いているレジスタに該変数
を割り当てることを特徴とする。 また、本発明の他の態
様では、上記プログラム翻訳方法において、すべての時
間区間で変数のレジスタへの割り付けが終了した後、前
記時間区間ごとに、レジスタへの割り付けられた変数に
対し、他の時間区間において当該変数が既に割り当てら
れているレジスタあるいはどの変数も割り当てられてい
ないレジスタが存在するか否かを調べ、前記レジスタが
存在する場合に、該レジスタに該変数を割り当て、前記
レジスタが存在しない場合に、当該時間区間において空
いているレジスタに該変数を割り当て、すべての時間区
間で変数のレジスタへの割り当てが終了した後、前記割
り付け時に生存する変数の数が使用可能なレジスタ数よ
り少なかった時間区間に対し、当該時間区間に生存する
変数が、当該時間区間に隣接する時間区間に存在するか
否かを調べ、存在する場合は、当該時間区間における該
変数のレジスタへの割り当てを確定し、存在しない場合
は、当該時間区間中における当該変数の参照回数に基づ
いてレジスタに当該変数を割り付けるか否かを決定す
る。
【0008】
【作用】検出手段(図1の11)で解析された各変数の
生存区間を縦方向に時間、横方向に変数をとって示した
ものが、図3である。ここでは、4つの変数A、B、
C、Dが存在する。ここで、破線で示しているものが、
記録された各変数の生存区間の始点と終点である。分割
手段(図1の12)によって各変数の生存区間を、他の
全ての変数の生存区間の始点と終点で分割した結果を、
図4に示す。各分割領域は、もともとの変数の名前に、
幾つめの分割領域であるかを示す添字をつけて表してい
る。そこで、これらの生存区間の分割領域をレジスタに
割り付ける候補としたものを実線で示し、未割り付けの
生存区間の分割領域を破線で示したものが図5である。
レジスタ割り付け手段(図1の13、優先順位計算手段
131)では、これらの情報から未割り付けの生存区間
について、その生存区間をレジスタに割り付けた場合の
利益を、例えば、変数メモリ中からレジスタ上にロード
する必要性の有無によって生じる費用と、変数をレジス
タからメモリ中に格納する必要性の有無によって生じる
費用、及びメモリ中に置くことよりもレジスタ上に置く
ことによって参照される際に生じる利益を分割された生
存区間で参照される回数とを掛けた総利益との合計に従
って、計算していく。ただし各分割された生存区間にお
いて、同時に存在する各変数の生存区間の分割領域の数
が、使用可能にレジスタ数よりも少ない場合には、自動
的にレジスタ割り付け可能な候補となるため、ここでは
優先順位の計算を省略する。また、レジスタ割り付け手
段(13)は、このようにして得られた利益を基に優先
順位を決めて、未割り付け生存区間の分割領域を、レジ
スタに常駐させる候補として選択して行き、すべてのレ
ジスタ割り付けの候補となる生存区間の分割領域を決定
する。レジスタ割り当て手段(14)では、順に存在す
るレジスタに変数の分割領域を割り当てる。この際、候
補とした残った分割された生存区間の各分割領域には、
必ずとれか1つのレジスタが割り付けられることには既
に決定しているが、どのレジスタになるかは、まだ決定
していないため、同一の変数に属する分割された生存区
間を1つずつ順に割り当てていき、可能な限り同一のレ
ジスタを割り当てるようにする。図6は割り当てた結果
の一例を示すものである。このようにして、各変数の生
存区間の始点と終点で生存区間を分割して、分割した生
存区間ごとに生存する変数の優先順位を決定することに
より、生成されたコードの実行効率が向上するととも
に、従来の手法を用いるよりも、より実際の実行頻度に
基づいたレジスタ割り付けを行うことが可能となる。
【0009】
【実施例】図2は、一般的な、ソースプログラムをオブ
ジェクトプログラムに翻訳する処理装置における翻訳プ
ログラムの処理手順を示すものである。このプログラム
訳装置は、コンパイラプログラムを実行する図7に示
すようなコンピュータシステムとして構成されている。
また、この装置により生成されたオブジェクトコードの
実行も、図7に示すようなコンピュータシステムにおい
て行われる。図7に示すように、コンピュータシステム
は、CPU71、レジスタ76、主記憶装置72、磁気
ディスク等の2次記憶装置73、キーボード/マウスな
どの入出力装置74、および内部バス75などからなっ
ている。また、図7中のCPUの例として、図8にモト
ローラ社製のRISCプロセッサMC88200の構成
を示す。この例ではレジスタファイル76としてレジス
タを有している。レジスタ76は、超LSI技術の恩恵
を得ることのできるCPU71内部に存在するため、主
記憶装置72に比べてアクセスに要する時間は格段に短
くて済む。この特性を利用して、生成されたオブジェク
トコードの実行効率を上げようとするのが、コンパイラ
のレジスタ割り付けの最適化であり、本発明は、とくに
その最適化処理に関するものである。
【0010】以下に、本発明の一実施例を図面に基づい
て説明する。図1に示したように、実施例の装置は、生
存区間検出部11、生存区間分割部12、優先順位計算
部131および割り付け候補選択部132を備えたレジ
スタ割り付け部13、およびレジスタ割り当て部14を
有している。以下、フロー図により動作を説明する。 まず、生存区間検出部11が、図9に示すフローに従っ
て生存区間の解析を行う。100:図9に示すように、
生存区間検出部11は、まだ処理していない基本ブロッ
クの1つを選び、110:選んだブロック中の生存区間
情報を調べ、120:全基本ブロックが終了する迄、そ
れを繰り返す。 図9のステップ110:において選んだブロック中の生
存区間情報を生存区間検出部11が調べる具体的な手順
を、図10に示す。すなわち、111:生存区間検出部
11は、基本ブロック中の先頭から1ラインを選択し、
112:選択したラインが変数の代入や参照を含んでい
るかどうかを調べ、116:含んでいない場合は、その
ラインが最後のラインかどうかを調べ、111:最後の
ラインで無ければ、再び次のラインを選択する。11
3:また、ステップ112:において、選択したライン
が変数の代入や参照を含んでいると判定された場合に
は、その変数が既に出てきたものであるかどうかを、図
17に示す生存区間情報リストで調べる。117:もし
もそれが、始めて出てきた変数であるならば、新たな生
存区間として生存区間情報リストに追加する。この際に
追加されたデータは、所属変数名(ステップ113で調
べる際に利用される)、区間開始基本ブロック番号、区
間終了基本ブロック番号(初期値は区間開始ブロック番
号と同じ)、区間開始ライン番号、区間終了ライン番号
(初期値は区間開始ライン番号と同一)、次のリストの
アドレス(ないので0)、前のリストのアドレス(今作
成中のリストを参照するためのリストのアドレス)、前
のリストの内容で“次のリストのアドレス”の項目(今
作成中のリストのアドレスを入れる)である。その後、
116:そのラインがブロックの最後のラインかどうか
を判定する。111:最後のラインで無ければ、再び次
のラインを選択する。114:また、ステップ113:
において既に出てきた変数であると判定された場合に
は、その変数の値が、代入などによってそこで壊される
ものであるかどうかを調べる。117:変数が壊される
値であるならば、それまでの生存区間は最後の変数の参
照の時点で終了したものとして、新たに生存区間情報の
リストを前記と同様に作成する。115:またもしも変
数の値が壊されなければ、その変数の分割領域に関する
リスト(最後に更新したもの)の生存区間をその時点ま
で延長する。すなわち、現在注目している変数を所属変
数名に持つリストの最後のリストの区間終了基本ブロッ
ク番号と、区間終了ライン番号を現在のものに更新す
る。この処理をブロックの終わりまで繰り返す。
【0011】以上のようにして、生存区間検出部11に
より生存区間の解析が行われたら、次に生存区間分割部
12により、生存区間の分割を行う。その処理手順は、
図11および図12に示されている。 151:未処理の一つの変数Aを選択するとともに、 152:その変数A以外の一つの変数Bを選択する。 153:選択した変数Aの生存区間中に、変数Bの生存
区間の開始点があるかどうかを調べる。生存区間の開始
点は図17に示すような生存区間情報リストにおける区
間開始ブロック番号と区間開始ライン番号の組みによっ
て表わされる。 154:変数Aの生存区間中に、変数Bの生存区間の開
始点があったときは、後述する図12に示すような分割
処理を行う。 155:選択した変数Aの生存区間中に、変数Bの生存
区間の終了点があるかどうかを調べる。生存区間の終了
点は生存区間情報リストにおける区間終了ブロック番号
と区間終了ライン番号の組みによって表わされる。 156:変数Aの生存区間中に、変数Bの生存区間の終
了点があったときは、後述する図12に示すような分割
処理を行う。 157:変数Bの処理として変数A以外のすべての変数
が選択され処理が終了たかを調べ、まだ、変数Bが残っ
ている間は処理ステップ152:〜ステップ157:を
繰り返す。 158:変数Aの処理としてすべての変数が終了したか
を調べ、まだ変数が残っている間はステップ151:〜
ステップ158:を繰り返す。すべての変数が終了した
ときすべての生存区間の分割が終了する。
【0012】ここで、ステップ154:および156:
の分割処理について図12および図18により説明す
る。 161:変数Aの生存区間情報リスト180を複写し、
2つの生存区間情報リスト180’(=180),18
1を得る。 162:この2つの生存区間情報リストを分割後の生存
区間情報リスト180’,181とするため、分割され
たアドレスをつなぐ処理を行うとともに、 163:分割アドレスの書き込みを行う。すなわち、図
18に示すように、一方の生存区間情報リスト180’
の区間終了ブロック番号と区間終了ライン番号を分割点
のブロック番号およびライン番号で置き換え、次のリス
トのアドレスに今複写したもう一つのリストのアドレス
を入れる。また、他方の生存区間情報リスト181の区
間開始ブロック番号と区間開始ライン番号を分割点のブ
ロック番号およびライン番号で置き換えるとともに、今
まで“次のリスト”としてつながっていたリストの“前
のリストのアドレス”の項目を分割前の自分のアドレス
に更新する。
【0013】次に、レジスタ割り付け部13における各
生存区間の分割領域の割り付け候補の選択処理および優
先順位計算部131による優先順位決定処理を、図13
および図14に示すフロー図により説明する。 200:まず、分割された生存区間の1つに注目する。 210:その分割された生存区間内において、割り当て
るべき変数の総数と割り当て可能なレジスタの総数とを
比較する。 250:比較の結果、割り当てるべき変数の総数と等し
いか、それより少なければ、無条件に全ての変数の分割
領域が割り当て可能であるとして、当該生存区間内の変
数の分割領域を全て割り付け候補とする。 220:比較の結果、割り当て可能なレジスタの総数よ
りも分割領域の総数の方が多ければ、当該変数の分割領
域の優先順位を図14に示す手順で計算し、230:優
先順位の高い順にレジスタの個数分割り付け候補とす
る。 240:以上の各生存区間の割り付け処理を、すべての
区間について終了するまで繰返し行う。
【0014】ステップ230の優先順位の計算は、図1
4に示すように、 221:分割区間内の未処理の変数の分割領域を1つ選
択し、 222:利益計算をし、 223:最後の分割領域にいたるまで繰り返す。 ここで、利益は次のようにして計算される値である。 利益=ロード利益×分割された生存区間中での参照回数
+ストア利益×分割された生存区間中での代入回数−移
動費用×n……(式1) ロード利益: レジスタ中に置いた場合、対応するメモ
リ参照と比較して節約される実行時間 ストア利益: レジスタ中に置いた場合、対応するメモ
リへのストアと比較して節約される実行時間 移動費用: メモリからレジスタへ、あるいはレジス
タからメモリへの移動費用 n: メモリから(あるいはメモリへ)変数の値を移動
する必要回数。これは0,1,2のどれかの値を取る。
まだ引き続く未処理の変数についてはレジスタに割り当
てられるかどうか決定していないが、引き続く未割り付
けの分割領域がある場合には、引き続く分割領域に関し
て発生する移動の必要回数は0とみなす。
【0015】最後に、レジスタ割り当て部14によるレ
ジスタ割り当て処理の手順を図15および図16により
説明する。 300:未割り当ての変数を1つ選択し、その変数に属
する全ての分割領域の処理を開始する。 301:選んだ変数に属する生存区間の分割領域を1つ
選択し、 302:未使用レジスタの有無を調べ、 303:もしまだ何も割り当てられないレジスタがあれ
ば、その未使用レジスタの内の一つを選び、 304:選んだ未割り当ての分割領域を今選んだレジス
タに割り当てる。 305:またもしも、ステップ302:の判定処理で未
使用レジスタが無かった場合は、選択した分割領域の生
存区間内が空いているレジスタを探し、そのレジスタに
分割領域を割り当てる。 306:全ての未割り当ての分割領域について終了する
迄繰り返す。但し1つの変数の2つめ以降の分割領域を
処理する際には、302:未使用のレジスタかどうかを
判断する代わりに、既にレジスタが選択されているかど
うかを調べ、303:既に選択されていればそのレジス
タを使用する。 307:全ての分割領域について以上の処理が終了した
ら、まだ未割り当ての変数が残っているかどうかを調
べ、全ての変数の全ての分割領域について、同様の処理
を繰り返す。その後、ステップ250:の処理により分
割された生存区間中に存在する変数の数がレジスタ数よ
りも少ない為に無条件に割り当てる候補となった分割領
域のうち、孤立の分割領域については、割り当てる利益
がないときは割り当ての取り止めの処理を行う。図16
はその処理のフロー図である。 308:優先順位未計算の分割領域を一つ選択し、 309:その前後に同一変数に属する生存区間の分割領
域が存在するか否かを調べ、その選択した分割領域が孤
立分割領域であるか否かを判定する。孤立分割領域でな
いときはステップ250:での割り当ては確定する。 310:孤立分割領域の場合には、その孤立分割領域を
レジスタ中に置くことの利益を次の式2により計算す
る。レジスタ中に置くことの利益=ロード利益×参照回
数+ストア利益×代入回数−2×移動費用……(式2) 311:式2の計算の結果、利益がないかどうかを判定
する。式2の計算結果が正の値のときは利益があり、0
または負のとき利益がないと判定する。利益があると判
定されたときは、割り当ては確定する。 312:利益がないと判定されたときは、ステップ25
0:で当該分割領域に割り当てられたレジスタを割り当
てからはずす。 313:以上の処理を全ての無条件に割り付け候補とな
った分割領域について繰り返す。 しかしこれによって、たとえその分割された生存区間で
空きのレジスタが生じても、その区間の他の分割領域は
全てレジスタが割り当てられるだけのレジスタ数がある
ので、再計算の必要は生じない。
【0016】〔第2の実施例〕 図19は、本発明の第2の実施例の構成を示すブロック
図であり、図20はその処理フローを示すものである。
図19に示すように、第1の実施例に対しレジスタ割り
付け部13およびレジスタ割り当て部13を再実行する
ように、レジスタ割り付け・割り当て再実行制御部15
を付加した構成を有し、最適化レベルの数を増加できる
ようにした点が異なる。最適化レベルを増すことにより
コンパイル時間は長くなるが、生成されたコードの実行
時間を短くすることができる。 処理の手順は、図20に示すように、 400:生存区間の解析・分割、 410:生存区間の分割領域の割り付け候補選択、 420:レジスタ割り当ていたるまでは第1の実施例と
同じであるが、異なるのは、レジスタ割り付け・割り当
て再実行制御部15により制御される以下に述べる手順
である。ユーザは本装置を使用する際に最適化レベルを
設定することができ、例えば、最適化レベル1はアセン
ブラレベルでの最適化を表し、最適化レベル2は広域最
適化、共通部分式の削除等の最適化を表す。 430:最適化レベルが0になっているか否かを判定
し、0になっていればユーザの指定した最適化レベルの
処理はすべて終了しているので、終了する。 440:最適化レベルが0になっていないならば、その
最適化レベルに従って、優先順位の再計算と割り付け候
補選択とを行うレジスタ割り付けを再度行うとともに、 450:レジスタへの再割り当てを行う。 460;最適化レベルの値を1つ減らし、ステップ43
0:へ進む。このような処理を、レジスタ割り付け・割
り当て再実行制御部15の制御により繰り返し行なう。
例えば、指定した最適化レベルが2なら、このループは
2度実行が繰り返される。ステップ440:の割り当て
候補の再選択と、ステップ450:のレジスタ再割り付
けは、各々ステップ410:の各生存区間の分割領域の
割り付け候補選択およびステップ420:のレジスタ割
り付けと全く同じ処理内容であるが、図14での優先順
位の計算(式1)のnの値で、既に後に続く分割領域
が、一旦前のレジスタ割り付け時にレジスタに割り付け
られるかどうかが決定されているので、その結果を利用
しnを決める。これにより、より正確な優先順位の決定
がなされる。
【0017】上述べたように、本発明の実施例は、各
変数の生存区間の始点と終点で全ての生存区間の分割を
行い、分割された生存区間のレジスタ割り付けの利益を
計算して優先順位を求め、その優先順位に基づいてレジ
スタの割り付けおよび割り当てを行う。これにより、従
来のレジスタ割り当て方式では、全区間が割り当てられ
てしまうような、長い生存区間を持つ変数があっても、
本発明の実施例では、必ずしも全区間をその変数に割り
当ててしまわずに、分割した区間を単位に割当の利益を
計算して最も効率がよくなるようにレジスタの割り当て
を行うことができる。例えばある一部だけ変数の出現頻
度が高く、残りのほとんどの区間では変数の出現頻度が
低い場合には、変数の出現頻度が低い部分に他の変数を
割り当てると言うように、効率を考えた優先順位によ
り、レジスタ割り当てをする。従って、本発明の実施例
は、有効なレジスタの活用が可能となり、結果として生
成されたオブジェクトコードの実行効率が上がり、その
オブジェクトコードを実行する計算機のパフォーマンス
を上げることができる。
【0018】更に、本発明の実施例により得られるメリ
ットとして、命令スケジューリングの効率の向上が挙げ
られる。(命令スケジューリングに関しては“情報処理
第31巻第6号732頁などを参照”)命令スケジュー
リングでは、各命令の依存関係を調べ、命令の順番を変
えても得られる計算結果に影響が無い場合には、ハード
ウエアの実行効率が向上するように命令の順番を自由に
入替えスケジューリングする。ところがその結果、一般
的には変数の生存区間が長くなってしまう為に、従来の
レジスタ割り当て方式では、1つの変数がレジスタを長
く占有してしまうので、かえって生成されたオブジェク
トコードの実高効率が悪くなってしまう場合が多かっ
た。そこで、従来はレジスタ割り当て後に命令スケジュ
ーリングを行うことが一般的であったが、その結果とし
て、レジスタ割り当て前に較べて各命令の依存関係が強
くなる。例えば、中間コード生成時には、別々の疑似レ
ジスタに割り当てられていた2つの変数がレジスタ割り
当てによって同じレジスタを割り当てによって同じレジ
スタを割り当てられてしまうと、その時点で依存関係が
生じてしまう。従って、自由な命令スケジューリングが
できず、結果として効率の高いオブジェクトコードを生
成することができなかった。この点、本発明の実施例
場合には、たとえ命令スケジューリングの結果変数の生
存区間が長くなっても、分割され、細かい単位でレジス
タに割り当て前に命令スケジューリングを行うことで命
令スケジューリングの効率の向上を計ることが可能とな
る。
【0019】
【発明の効果】以上述べたように、本発明によれば、長
い生存区間を持つ変数があっても、分割した生存区間を
単位として効率を考慮したレジスタの割り付けを行うこ
とができる。従って、本発明は有効なレジスタの活用が
可能となり、結果として生成されたオブジェクトコード
の実行効率が上がり、そのオブジェクトコードを実行す
る計算機のパフォーマンスを上げることができる。ま
た、変数の全生存区間の中のある一部だけ変数の出現頻
度が高く、残りのほとんどの生存区間では変数の出現頻
度が低い場合に、変数の出現頻度が低い生存区間では、
他に出現頻度の高い変数が存在していれば、その変数を
割り当てることができる。更に、命令スケジューリング
の効率を向上させることができる。
【図面の簡単な説明】
【図1】本発明の一実施例の構成を示すブロック図
【図2】最適化コンバイラの処理手順を示す図
【図3】本発明の処理の概略を示す概念図(1)
【図4】本発明の処理の概略を示す概念図(2)
【図5】本発明の処理の概略を示す概念図(3)
【図6】本発明の処理の概略を示す概念図(4)
【図7】本発明の実施例の最適化コンパイラの実行およ
びオブジェクトプログラム出力が実行されるシステムの
構成図
【図8】図7のシステムに使用されるCPUの一例の構
成図
【図9】生存区間の解析を行う処理手順の概略を示すフ
ロー図
【図10】生存区間の解析を行う処理手順の詳細を示す
フロー図
【図11】分割を行う処理手順を示すフロー図
【図12】分割を行う処理手順の一部を示すフロー図
【図13】分割された生存区間の変数の分割領域からレ
ジスタへの割り付け候補を選択する処理手順を示すフロ
ー図
【図14】優先順位の計算の手順を示すフロー図
【図15】レジスタ割り当ての処理手順を示すフロー図
【図16】図15のレジスタ割当の処理手順の続きを示
すフロー図
【図17】実施例の最適化コンパイラが実行される際に
使用される生存区間情報リスト
【図18】生存区間の分割を行う際の生存区間情報リス
トの分割を説明するための図
【図19】本発明の第2の実施例の構成を示すブロック
【図20】第2の実施例の処理手順を示すフロー図
【符号の説明】
11 生存区間検出部 12 生存区間分割部 13 レジスタ割り付け部 131 優先順位計算部 132 割り付け候補選択部 14 レジスタ割り当て部 15 レジスタ割り付け・割り当て再実行制御部

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】各変数の生存区間の始点と終点を検出する
    検出手段と、 前記検出手段によって検出された第1の変数の生存区間
    を、該生存区間内に存在する前記検出手段により検出さ
    れた第2の変数の生存区間の始点あるいは終点により複
    数の時間区間に分割する分割手段と、前記時間区間ごとに、優先順位に従ってレジスタに割り
    付ける変数を決定する レジスタ割り付け手段とを有する
    ことを特徴とするプログラム翻訳装置。
  2. 【請求項2】各変数の生存区間の始点と終点を検出する
    検出手段と、 前記検出手段によって検出された第1の変数の生存区間
    を、該生存区間内に存在する前記検出手段により検出さ
    れた第2の変数の生存区間の始点あるいは終点により複
    数の時間区間に分割する分割手段と、 前記時間区間ごとに、生存する変数の優先順位を算出す
    る計算手段と、 前記時間区間ごとに、前記計算手段により算出された優
    先順位に基づいてレジスタに割り付ける変数を決定する
    レジスタ割り付け手段とを有することを特徴とするプロ
    グラム翻訳装置。
  3. 【請求項3】各変数の生存区間の始点と終点を検出する
    検出手段と、 前記検出手段によって検出された第1の変数の生存区間
    を、該生存区間内に存在する前記検出手段により検出さ
    れた第2の変数の生存区間の始点あるいは終点により複
    数の時間区間に分割する分割手段と、 前記時間区間ごとに、生存する変数の該時間区間中の参
    照回数に基づいて優先順位を算出する計算手段と、 前記時間区間ごとに、前記計算手段により算出された優
    先順位に基づいてレジスタに割り付ける変数を決定する
    レジスタ割り付け手段とを有することを特徴とするプロ
    グラム翻訳装置。
  4. 【請求項4】各変数の生存区間の始点と終点を検出する
    検出手段と、 前記検出手段によって検出された第1の変数の生存区間
    を、該生存区間内に存在する前記検出手段により検出さ
    れた第2の変数の生存区間の始点あるいは終点により複
    数の時間区間に分割する分割手段と、 前記時間区間ごとに、生存する変数の該時間区間中のメ
    モリからあるいはメモリへ変数の値を移動する必要回数
    に基づいて優先順位を算出する計算手段と、 前記時間区間ごとに、前記計算手段により算出された優
    先順位に基づいてレジスタに割り付ける変数を決定する
    レジスタ割り付け手段とを有することを特徴とするプロ
    グラム翻訳装置。
  5. 【請求項5】各変数の生存区間の始点と終点を検出する
    検出手段と、 前記検出手段によって検出された第1の変数の生存区間
    を、該生存区間内に存在する前記検出手段により検出さ
    れた第2の変数の生存区間の始点あるいは終点により複
    数の時間区間に分割する分割手段と、 前記時間区間ごとに、優先順位に従ってレジスタに割り
    付ける変数を決定するレジスタ割り付け手段と、 前記時間区間ごとに、前記レジスタ割り付け手段により
    レジスタに割り付けられた変数をどのレジスタに割り当
    てるかを決定するレジスタ割り当て手段とを有すること
    を特徴とするプログラム翻訳装置。
  6. 【請求項6】各変数の生存区間の始点と終点を検出する
    検出手段と、 前記検出手段によって検出された第1の変数の生存区間
    を、該生存区間内に存在する前記検出手段により検出さ
    れた第2の変数の生存区間の始点あるいは終点により複
    数の時間区間に分割する分割手段と、 前記時間区間ごとに、生存する変数の優先順位を算出す
    る計算手段と、 前記時間区間ごとに、前記計算手段により算出された優
    先順位に基づいてレジスタに割り付ける変数を決定する
    レジスタ割り付け手段と、 前記時間区間ごとに、前記レジスタ割り付け手段により
    レジスタに割り付けられた変数をどのレジスタに割当て
    るかを決定するレジスタ割り当て手段と、 最適化レベルを設定する最適化レベル設定手段と、 前記最適化レベル設定手段に設定された最適化レベルに
    基づいて、前記レジスタ割り付け手段およびレジスタ割
    り当て手段を再実行させる再実行制御手段とを有するこ
    とを特徴とするプログラム翻訳装置。
  7. 【請求項7】各変数の生存区間の始点と終点を検出し、 検出された第1の変数の生存区間を、該生存区間内に存
    在する検出された第2 の変数の生存区間の始点あるいは
    終点により複数の時間区間に分割し、 前記時間区間ごとに、使用可能なレジスタ数と生存する
    変数の数を比較し、 前記比較の結果、変数の数の方が少ない場合に、当該時
    間区間において、生存する変数をすべてレジスタに割り
    付け、 前記比較の結果、変数の数の方が多い場合に、生存する
    変数の該時間区間中の参照回数に基づいて優先順位を算
    出し、 算出された優先順位に基づいて、当該時間区間中にレジ
    スタに割り付ける変数を決定することを特徴とするプロ
    グラム翻訳方法。
  8. 【請求項8】各変数の生存区間の始点と終点を検出し、 前記検出された第1の変数の生存区間を、該生存区間内
    に存在する前記検出された第2の変数の生存区間の始点
    あるいは終点により複数の時間区間に分割し、 前記時間区間ごとに、使用可能なレジスタ数と生存する
    変数の数を比較し、 前記比較の結果、変数の数の方が少ない場合に、当該時
    間区間において、生存する変数をすべてレジスタに割り
    付け、 前記比較の結果、変数の数の方が多い場合に、生存する
    変数の該時間区間中の参照回数に基づいて優先順位を算
    出し、 算出された優先順位に基づいて、当該時間区間中にレジ
    スタに割り付ける変数を決定し、 すべての時間区間で変数のレジスタへの割り付けが終了
    した後、前記時間区間ごとに、レジスタに割り付けられ
    た変数に対し、他の時間区間において当該変数が既に割
    り当てられているレジスタあるいはどの変数も割り当て
    られていないレジスタが存在するか否かを調べ、 前記レジスタが存在する場合に、該レジスタに該変数を
    割り当て、 前記レジスタが存在しない場合に、当該時間区間におい
    て空いているレジスタに該変数を割り当てることを特徴
    とするプログラム翻訳方法。
  9. 【請求項9】各変数の生存区間の始点と終点を検出し、 検出された第1の変数の生存区間を、該生存区間内に存
    在する検出された第2の変数の生存区間の始点あるいは
    終点により複数の時間区間に分割し、 前記時間区間ごとに、使用可能なレジスタ数と生存する
    変数の数を比較し、 前記比較の結果、変数の数の方が少ない場合に、当該時
    間区間において、生存する変数をすべてレジスタに割り
    付け、 前記比較の結果、変数の数の方が多い場合に、生存する
    変数の該時間区間中の参照回数に基づいて優先順位を算
    出し、 算出された優先順位に基づいて、当該時間区間中にレジ
    スタに割り付ける変数を決定し、 すべての時間区間で変数のレジスタへの割り付けが終了
    した後、 前記時間区間ごとに、レジスタに割り付けられた変数に
    対し、他の時間区間において当該変数が既に割り当てら
    れているレジスタあるいはどの変数も割り当てられてい
    ないレジスタが存在するか否かを調べ、 前記レジスタが存在する場合に、該レジスタに該変数を
    割り当て、 前記レジスタが存在しない場合に、当該時間区間におい
    て空いているレジスタに該変数を割り当て、 すべての時間区間で変数のレジスタへの割り当てが終了
    した後、前記割り付け時に生存する変数の数が使用可能
    なレジスタ数より少なかった時間区間に対し、当該時間
    区間に生存する変数が、当該時間区間に隣接する時間区
    間に存在するか否かを調べ、 存在する場合は、当該時間区間における該変数のレジス
    タへの割り当てを確定し、 存在しない場合は、当該時間区間中における当該変数の
    参照回数に基づいてレジスタに当該変数を割り付けるか
    否かを決定することを特徴とするプログラム翻訳方法。
JP2407393A 1990-12-07 1990-12-07 プログラム翻訳装置およびプログラム翻訳方法 Expired - Fee Related JPH0816871B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2407393A JPH0816871B2 (ja) 1990-12-07 1990-12-07 プログラム翻訳装置およびプログラム翻訳方法
US07/769,446 US5367696A (en) 1990-12-07 1991-10-01 Register allocation technique in a program translating apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2407393A JPH0816871B2 (ja) 1990-12-07 1990-12-07 プログラム翻訳装置およびプログラム翻訳方法

Publications (2)

Publication Number Publication Date
JPH04213118A JPH04213118A (ja) 1992-08-04
JPH0816871B2 true JPH0816871B2 (ja) 1996-02-21

Family

ID=18516988

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2407393A Expired - Fee Related JPH0816871B2 (ja) 1990-12-07 1990-12-07 プログラム翻訳装置およびプログラム翻訳方法

Country Status (2)

Country Link
US (1) US5367696A (ja)
JP (1) JPH0816871B2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06242963A (ja) * 1993-02-16 1994-09-02 Nec Corp レジスタ割付け方式
JP3299611B2 (ja) * 1993-10-20 2002-07-08 松下電器産業株式会社 資源割付装置
US6086632A (en) * 1996-10-31 2000-07-11 Nec Corporation Register optimizing compiler using commutative operations
US6059840A (en) * 1997-03-17 2000-05-09 Motorola, Inc. Automatic scheduling of instructions to reduce code size
US6438740B1 (en) * 1997-08-21 2002-08-20 Compaq Information Technologies Group, L.P. System and method for dynamically identifying free registers
US6704862B1 (en) 2000-03-06 2004-03-09 Sun Microsystems, Inc. Method and apparatus for facilitating exception handling using a conditional trap instruction
JP3763518B2 (ja) * 2001-05-29 2006-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、そのコンパイル方法およびプログラム
JP3956112B2 (ja) 2002-06-12 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、レジスタ割当装置、プログラム、記録媒体、コンパイル方法、及びレジスタ割当方法
JP4196614B2 (ja) * 2002-08-22 2008-12-17 パナソニック株式会社 命令スケジューリング方法、命令スケジューリング装置、及びプログラム
JP4237661B2 (ja) * 2004-03-25 2009-03-11 株式会社東芝 システムlsiの設計支援システム及び設計支援方法
US7469404B2 (en) * 2004-06-30 2008-12-23 Intel Corporation Bank assignment for partitioned register banks
US7430630B2 (en) * 2005-10-27 2008-09-30 International Business Machines Corporation Routing mechanism in PCI multi-host topologies using destination ID field
US7650598B2 (en) * 2006-08-09 2010-01-19 National Tsing Hua University Method for allocating registers for a processor
US9207921B2 (en) * 2009-06-22 2015-12-08 Oracle America, Inc. Fault tolerant compilation with automatic optimization adjustment
US8555267B2 (en) * 2010-03-03 2013-10-08 Red Hat, Inc. Performing register allocation of program variables based on priority spills and assignments

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4571678A (en) * 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring
JPS6155739A (ja) * 1984-08-27 1986-03-20 Fujitsu Ltd 手続区画サイズの決定方式
US4782444A (en) * 1985-12-17 1988-11-01 International Business Machine Corporation Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering
US4802091A (en) * 1986-10-31 1989-01-31 International Business Machines Corporation Method for improving the efficiency of arithmetic code generation in an optimizing compiler using the technique of reassociation
JPS63186333A (ja) * 1987-01-28 1988-08-01 Nec Corp 局所的分岐命令に対する命令のスケジユ−リング処理方式
US4953084A (en) * 1987-11-16 1990-08-28 Hewlett-Packard Company Method and apparatus using variable ranges to support symbolic debugging of optimized code
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring

Also Published As

Publication number Publication date
JPH04213118A (ja) 1992-08-04
US5367696A (en) 1994-11-22

Similar Documents

Publication Publication Date Title
US8266603B2 (en) Technique for allocating register to variable for compiling
US6826677B2 (en) Renaming registers to values produced by instructions according to assigned produce sequence number
US7926046B2 (en) Compiler method for extracting and accelerator template program
US8104026B2 (en) Compiler register allocation and compilation
JPH0816871B2 (ja) プログラム翻訳装置およびプログラム翻訳方法
US7007271B2 (en) Method and apparatus for integrated instruction scheduling and register allocation in a postoptimizer
JP3901180B2 (ja) プログラム並列化装置及びその方法並びにプログラム
EP0732650A2 (en) Resource assigning apparatus
JP2004078824A (ja) 命令スケジューリング方法、命令スケジューリング装置、及びプログラム
AU773940B2 (en) Method and apparatus for allocating stack slots
JP2008009957A (ja) コンパイル装置
JP2006018446A (ja) プログラム並列化装置及びその方法並びにプログラム
JP4704357B2 (ja) ハードウェア資源衝突を軽減するためのデータ配置機構
US20230101571A1 (en) Devices, methods, and media for efficient data dependency management for in-order issue processors
US5940621A (en) Language independent optimal size-based storage allocation
JP3901182B2 (ja) プログラム並列化装置及びその方法並びにプログラム
US8510529B2 (en) Method for generating program and method for operating system
JPH1069389A (ja) ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置
JP2002366366A (ja) コンパイル方法、コード生成方法、スタックレジスタ使用方法、コンパイラ、これらを実現するプログラム及び記憶媒体
US6954927B2 (en) Hardware supported software pipelined loop prologue optimization
US9081561B2 (en) Method for improving execution performance of multiply-add instruction during compiling
JP3638171B2 (ja) 資源割付装置
US20040172624A1 (en) Compiler apparatus and method for determining locations for data in memory area
US11762641B2 (en) Allocating variables to computer memory
Jain et al. Register Allocation and Instruction Scheduling for an Efficient Retargetable Compiler.

Legal Events

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