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

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

Info

Publication number
JPH04213118A
JPH04213118A JP2407393A JP40739390A JPH04213118A JP H04213118 A JPH04213118 A JP H04213118A JP 2407393 A JP2407393 A JP 2407393A JP 40739390 A JP40739390 A JP 40739390A JP H04213118 A JPH04213118 A JP H04213118A
Authority
JP
Japan
Prior art keywords
register
variable
allocation
divided
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.)
Granted
Application number
JP2407393A
Other languages
English (en)
Other versions
JPH0816871B2 (ja
Inventor
Hitoshi Abe
仁 阿部
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
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 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

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)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は限定された有限個のレジ
スタを有する電子計算機のプログラム翻訳処理装置に関
し、特にコンパイラやインタプリタに適するプログラム
翻訳処理におけるレジスタ割り付けに関するものである
【0002】
【従来の技術】従来のコンパイラのレジスタ割り付け方
式の一つとして、文献1(G.J.Chaitin,M
.A.Auslander,A.K.Chander,
J.Cocke,M.E.Hopkins and P
.W.Markstein,“Register Al
location via Coloring”,Co
mputer Language6,pp.47−37
(1981))に示されるようなグラフ彩色法を用いた
レジスタ割り付け方式がある。この方式では、生存区間
全体に渡って互いが干渉しているか否かによって干渉グ
ラフを生成し、その干渉グラフの各ノードに色づけを行
ない、色と実際に存在するレジスタを1対1に対応させ
ることによってレジスタ割り付けを行っている。そのた
め、実際にはまだ割り付け可能な区間を残したレジスタ
が存在していても、その区間内に変数の生存区間全体が
収まらないという理由で、レジスタが割り当てられない
場合が発生し、生成されるオブジェクトコードの効率が
悪くなるという欠点があった。更に、十分なレジスタが
存在するならば比較的計算時間も少なくて済むが、使用
可能なレジスタが少ない場合には、spillコードを
挿入してレジスタ割り付けの対象とする干渉グラフのノ
ード数を減らすために、再計算のオーバーヘッドが非常
に大きくなる。
【0003】また、文献2(Allocation b
y Priority−based Coloring
”,Proceedings of the ACMS
IGPLAN Symposium on Compi
ler Construction,pp222−23
2(June17−22,1984))に示されている
ような割り付け手法を用いると、レジスタ割り付けの色
づけ対象である変数の生存区間が、干渉グラフ上で限定
された色数による色づけを行なうことが不可能な場合に
、ひととおり色づけされなかった変数の生存区間を複数
の生存区間に分割することによって、前述の文献1の方
式の欠点を解消しているが、この際に、最初に生成した
干渉グラフに、新たに分割した変数の生存区間に相当す
るノードを追加し、干渉グラフの再構成を行ない、優先
順位の再計算、彩色等を行なうための時間がかかりすぎ
るという欠点があった。特に、優先順位が極めて低いた
めに最後まで全く割り付けられない生存区間に関しては
、無駄な分割が繰り返されることになる。また、優先順
位を産出する際にループを重み付けの対象として用いて
いるが、実際のソースコード中には、この他に条件分岐
による基本ブロックの実行頻度の差が存在し、このため
に優先順位が正しく算出されない場合が生じた。
【0004】特開平1−103742号公報に示される
手法では、上記文献2の手法を基に、割り付け対象とす
る生存区間のみを分割することで無駄な分割による計算
時間の増加を抑え、if文による分岐を優先順位の計算
の際に考慮に入れることによって、生存区間の優先順位
を実行頻度の近似により近いものにし、文献2の前記問
題点を改善している。
【0005】しかし、以上述べたどの手法を用いても、
ある変数の生存区間全体に渡って割り付けることが可能
なレジスタが存在し、メモリ中に存在するよりもレジス
タに割り付けた方が生成されたコードの効率が少しでも
良くなるような生存区間は、生存区間全体をレジスタに
割り付けてしまうために、実行頻度が生存区間の部分部
分によって疎密のある変数の場合でも、疎である区間も
また1つのレジスタを占有してしまうことになるため、
必ずしも最適なコードが生成されないという欠点があっ
た。
【0006】
【発明が解決しようとする課題】本発明は、前記した従
来技術の欠点を除去・改良することを目的とする。すな
わち、本発明は、より実際の実行頻度に基づいた、レジ
スタ割り付けを行なうことが可能となり、生成されたコ
ードの実行効率が向上するとともに、spillコード
の発生などに伴う再計算のオーバーヘッドがかからない
ようにすることを目的とする。
【0007】
【課題を解決するための手段】本発明のプログラム翻訳
処理装置は、同一時間に存在する複数の変数の生存区間
を各々の変数ごとに調査し、各々の変数における生存区
間の始点と終点とを検出する検出手段(図1の11)と
、その検出手段によって検出された各々の変数における
生存区間の始点と終点で、同一時間に存在する複数の変
数の生存区間を分割する分割手段(図1の12)と、そ
の分割手段によって分割された結果、互いに異なる変数
であって同一時間に存在する区分された生存区間の各分
割領域について、その分割領域をレジスタに割り付けた
場合の利益を計算し、その計算結果を基に、レジスタに
常駐させる分割領域の候補を選択するレジスタ割り付け
手段(図1の13)と、そのレジスタ割り付け手段によ
って選択した分割領域の候補を常駐させるためのレジス
タを決定するレジスタ割り当て手段(図1の14)とを
有する。
【0008】
【作用】検出手段(図1の11)で解析された各変数の
生存区間を縦方向に時間、横方向に変数をとって示した
ものが、図3である。ここでは、4つの変数A、B、C
、Dが存在する。ここで、破線で示しているものが、記
録された各変数の生存区間の始点と終点である。分割手
段(図1の12)によって各変数の生存区間を、他の全
ての変数の生存区間の始点と終点で分割した結果を、図
4に示す。各分割領域は、もともとの変数の名前に、幾
つめの分割領域であるかを示す添字をつけて表している
。そこで、これらの生存区間の分割領域をレジスタに割
り付ける候補としたものを実線で示し、未割り付けの生
存区間の分割領域を破線で示したものが図5である。 レジスタ割り付け手段(図1の13、優先順位計算手段
131)では、これらの情報から未割り付けの生存区間
について、その生存区間をレジスタに割り付けた場合の
利益を、例えば、変数メモリ中からレジスタ上にロード
する必要性の有無によって生じる費用と、変数をレジス
タからメモリ中に格納する必要性の有無によって生じる
費用、及びメモリ中に置くことよりもレジスタ上に置く
ことによって参照される際に生じる利益を分割された生
存区間で参照される回数とを掛けた総利益との合計に従
って、計算していく。ただし各分割された生存区間にお
いて、同時に存在する各変数の生存区間の分割領域の数
が、使用可能にレジスタ数よりも少ない場合には、自動
的にレジスタ割り付け可能な候補となるため、ここでは
優先順位の計算を省略する。また、レジスタ割り付け手
段(13)は、このようにして得られた利益を基に優先
順位を決めて、未割り付け生存区間の分割領域を、レジ
スタに常駐させる候補として選択して行き、すべてのレ
ジスタ割り付けの候補となる生存区間の分割領域を決定
する。レジスタ割り当て手段(14)では、順に存在す
るレジスタに変数の分割領域を割り当てる。この際、候
補とした残った分割された生存区間の各分割領域には、
必ずとれか1つのレジスタが割り付けられることには既
に決定しているが、どのレジスタになるかは、まだ決定
していないため、同一の変数に属する分割された生存区
間を1つずつ順に割り当てていき、可能な限り同一のレ
ジスタを割り当てるようにする。図6は割り当てた結果
の一例を示すものである。このようにして、各変数の生
存区間をあらかじめ分割してから、分割した分割領域同
士の優先順位を決定することにより、従来の手法を用い
るよりも、より実際の実行頻度に基づいた、レジスタ割
り付けを行なうことが可能となり、生成されたコードの
実行効率が向上するとともに、spillコードの発生
などに伴う再計算のオーバーヘッドがかからない。
【0009】
【実施例】図2は、一般的な、ソースプログラムをオブ
ジェクトプログラムに翻訳する処理装置における翻訳処
理プログラムの処理手順を示すものである。このプログ
ラム翻訳処理装置は、コンパイラプログラムを実行する
図7に示すようなコンピュータシステムとして構成され
ている。また、この装置により生成されたオブジェクト
コードの実行も、図7に示すようなコンピュータシステ
ムにおいて行われる。図7に示すように、コンピュータ
システムは、CPU71、レジスタ741、主記憶装置
72、磁気ディスク等の2次記憶装置73、キーボード
/マウスなどの入出力装置74、および内部バス75な
どからなっている。また、図7中のCPUの例として、
図8にモトローラ社製のRISCプロセッサMC882
00の構成を示す。この例ではレジスタファイル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:最後の
ラインで無ければ、再び次のラインを選択する。113
:また、ステップ112:において、選択したラインが
変数の代入や参照を含んでいると判定された場合には、
その変数が既に出てきたものであるかどうかを、図17
に示す生存区間情報リストで調べる。117:もしもそ
れが、始めて出てきた変数であるならば、新たな生存区
間として生存区間情報リストに追加する。この際に追加
されたデータは、所属変数名(ステップ113で調べる
際に利用される)、区間開始基本ブロック番号、区間終
了基本ブロック番号(初期値は区間開始ブロック番号と
同じ)、区間開始ライン番号、区間終了ライン番号(初
期値は区間開始ライン番号と同一)、次のリストのアド
レス(ないので0)、前のリストのアドレス(今作成中
のリストを参照するためのリストのアドレス)、前のリ
ストの内容で“次のリストのアドレス”の項目(今作成
中のリストのアドレスを入れる)である。その後、11
6:そのラインがブロックの最後のラインかどうかを判
定する。111:最後のラインで無ければ、再び次のラ
インを選択する。114:また、ステップ113:にお
いて既に出てきた変数であると判定された場合には、そ
の変数の値が、代入などによってそこで壊されるもので
あるかどうかを調べる。117:変数が壊される値であ
るならば、それまでの生存区間は最後の変数の参照の時
点で終了したものとして、新たに生存区間情報のリスト
を前記と同様に作成する。115:またもしも変数の値
が壊されなければ、その変数の分割領域に関するリスト
(最後に更新したもの)の生存区間をその時点まで延長
する。すなわち、現在注目している変数を所属変数名に
持つリストの最後のリストの区間終了基本ブロック番号
と、区間終了ライン番号を現在のものに更新する。この
処理をブロックの終わりまで繰り返す。
【0011】以上のようにして、生存区間検出部11に
より生存区間の解析が行われたら、次に生存区間分割部
12により、生存区間の分割を行う。その処理手順は、
図11および図12に示されている。 151:未処理の一つの変数Aを選択するとともに、1
52:その変数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とみな
すが、いずれにせよ0,1,2のどれかの値を取る。
【0015】最後に、レジスタ割り当て部14によるレ
ジスタ割り当て処理の手順を図15および図16により
説明する。 300:未割り当ての変数を1つ選択し、その変数に属
する全ての分割領域の処理を開始する。 301:選んだ変数に属する生存区間の分割領域を1つ
選択し、 302:未使用レジスタの有無を調べ、303:もしま
だ何も割り当てられないレジスタがあれば、その未使用
レジスタの内の一つを選び、304:選んだ未割り当て
の分割領域を今選んだレジスタに割り当てる。 305:またもしも、ステップ302:の判定処理で未
使用レジスタが無かった場合は、選択した分割領域の生
存区間内が空いているレジスタを探し、そのレジスタに
分割領域を割り当てる。 306:全ての未割り当ての分割領域について終了する
迄繰り返す。但し1つの変数の2つめ以降の分割領域を
処理する際には、302:未使用のレジスタかどうかを
判断する代わりに、既にレジスタが選択されているかど
うかを調べ、303:既に選択されていればそのレジス
タを使用する。 307:全ての分割領域について以上の処理が終了した
ら、まだ未割り当ての変数が残っているかどうかを調べ
、全ての変数の全ての分割領域について、同様の処理を
繰り返す。その後、ステップ250:の処理により分割
された生存区間中に存在する変数の数がレジスタ数より
も少ない為に無条件に割り当てる候補となった分割領域
のうち、孤立の分割領域については、割り当てる利益が
ないときは割り当ての取り止めの処理を行う。図16は
その処理のフロー図である。 308:優先順位未計算の分割領域を一つ選択し、30
9:その前後に同一変数に属する生存区間の分割領域が
存在するか否かを調べ、その選択した分割領域が孤立分
割領域であるか否かを判定する。孤立分割領域でないと
きはステップ250:での割り当ては確定する。 310:孤立分割領域の場合には、その孤立分割領域を
レジスタ中に置くことの利益を次の式2により計算する
。レジスタ中に置くことの利益=ロード利益×参照回数
+ストア利益×代入回数−2×移動費用……(式2)3
11:式2の計算の結果、利益がないかどうかを判定す
る。式2の計算結果が正の値のときは利益があり、0ま
たは負のとき利益がないと判定する。利益があると判定
されたときは、割り当ては確定する。 312:利益がないと判定されたときは、ステップ25
0:で当該分割領域に割り当てられたレジスタを割り当
てからはずす。 313:以上の処理を全ての無条件に割り付け候補とな
った分割領域について繰り返す。 しかしこれによって、たとえその分割された生存区間で
空きのレジスタが生じても、その区間の他の分割領域は
全てレジスタが割り当てられるだけのレジスタ数がある
ので、再計算の必要は生じない。
【0016】〔第2の実施例〕 図19は、本発明の第2の実施例の構成を示すブロック
図であり、図20はその処理フローを示すものである。 図19に示すように、第1の実施例に対しレジスタ割り
付け部13およびレジスタ割り当て部13を再実行する
ように、レジスタ割り付け・割り当て再実行制御部15
を付加した構成を有し、最適化レベルの数を増加できる
ようにした点が異なる。最適化レベルを増すことにより
コンパイル時間は長くなるが、生成されたコードの実行
時間を短くすることができる。 処理の手順は、図20に示すように、 400:生存区間の解析・分割、 410:生存区間の分割領域の割り付け候補選択、42
0:レジスタ割り当ていたるまでは第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つの変数がレジスタ
割り当てによって同じレジスタを割り当てによって同じ
レジスタを割り当てられてしまうと、その時点で依存関
係が生じてしまう。従って、自由な命令スケジューリン
グができず、結果として効率の高いオブジェクトコード
を生成することができなかった。この点、本発明の場合
には、たとえ命令スケジューリングの結果変数の生存区
間が長くなっても、分割され、細かい単位でレジスタに
割り当て前に命令スケジューリングを行うことで命令ス
ケジューリングの効率の向上を計ることが可能となる。
【図面の簡単な説明】
【図1】本発明の一実施例の構成を示すブロック図
【図
2】最適化コンバイラの処理手順を示す図
【図3】本発
明の処理の概略を示す概念図(1)
【図4】本発明の処
理の概略を示す概念図(2)
【図5】本発明の処理の概
略を示す概念図(3)
【図6】本発明の処理の概略を示
す概念図(4)
【図7】本発明の実施例の最適化コンパ
イラの実行およびオブジェクトプログラム出力が実行さ
れるシステムの構成図
【図8】図7のシステムに使用されるCPUの一例の構
成図
【図9】生存区間の解析を行う処理手順の概略を示すフ
ロー図
【図10】生存区間の解析を行う処理手順の詳細を示す
フロー図
【図11】分割を行う処理手順を示すフロー図
【図12
】分割を行う処理手順の一部を示すフロー図
【図13】
分割された生存区間の変数の分割領域からレジスタへの
割り付け候補を選択する処理手順を示すフロー図
【図14】優先順位の計算の手順を示すフロー図
【図1
5】レジスタ割り当ての処理手順を示すフロー図
【図1
6】図15のレジスタ割当の処理手順の続きを示すフロ
ー図
【図17】実施例の最適化コンパイラが実行される際に
使用される生存区間情報リスト
【図18】生存区間の分割を行う際の生存区間情報リス
トの分割を説明するための図
【図19】本発明の第2の実施例の構成を示すブロック
【図20】第2の実施例の処理手順を示すフロー図
【符号の説明】
11  生存区間検出部 12  生存区間分割部 13  レジスタ割り付け部 131  優先順位計算部 132  割り付け候補選択部 14  レジスタ割り当て部

Claims (1)

    【特許請求の範囲】
  1. 同一時間に存在する複数の変数の生存区間を各々の変数
    ごとに調査し、各々の変数における生存区間の始点と終
    点とを検出する検出手段と、前記検出手段によって検出
    された各々の変数における生存区間の始点と終点で、同
    一時間に存在する複数の変数の生存区間を分割する分割
    手段と、前記分割手段によって分割された結果、互いに
    異なる変数であって同一時間に存在する区分された生存
    区間の各分割領域について、その分割領域をレジスタに
    割り付けた場合の利益を計算し、その計算結果を基に、
    レジスタに常駐させる分割領域の候補を選択するレジス
    タ割り付け手段と、前記レジスタ割り付け手段によって
    決定した分割領域の候補に、常駐させるレジスタを割り
    当てるレジスタ割り当て手段と、を有することを特徴と
    するプログラム翻訳処理装置。
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 true JPH04213118A (ja) 1992-08-04
JPH0816871B2 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)

Cited By (2)

* 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 レジスタ割付け方式
JP2008500654A (ja) * 2004-06-30 2008-01-10 インテル・コーポレーション 仕切りのあるレジスタバンクのためのバンク付与

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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の設計支援システム及び設計支援方法
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

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6155739A (ja) * 1984-08-27 1986-03-20 Fujitsu Ltd 手続区画サイズの決定方式
JPS62144247A (ja) * 1985-12-17 1987-06-27 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション コンパイル方法
JPS63186333A (ja) * 1987-01-28 1988-08-01 Nec Corp 局所的分岐命令に対する命令のスケジユ−リング処理方式

Family Cites Families (5)

* 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
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
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6155739A (ja) * 1984-08-27 1986-03-20 Fujitsu Ltd 手続区画サイズの決定方式
JPS62144247A (ja) * 1985-12-17 1987-06-27 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション コンパイル方法
JPS63186333A (ja) * 1987-01-28 1988-08-01 Nec Corp 局所的分岐命令に対する命令のスケジユ−リング処理方式

Cited By (2)

* 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 レジスタ割付け方式
JP2008500654A (ja) * 2004-06-30 2008-01-10 インテル・コーポレーション 仕切りのあるレジスタバンクのためのバンク付与

Also Published As

Publication number Publication date
US5367696A (en) 1994-11-22
JPH0816871B2 (ja) 1996-02-21

Similar Documents

Publication Publication Date Title
US5790862A (en) Resource assigning apparatus which assigns the variable in a program to resources
US8266603B2 (en) Technique for allocating register to variable for compiling
US6128775A (en) Method, system, and computer program product for performing register promotion via load and store placement optimization within an optimizing compiler
US5428793A (en) Method and apparatus for compiling computer programs with interproceduural register allocation
KR101360512B1 (ko) 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당
US9760354B2 (en) Information processing apparatus and compiling method
JPH04213118A (ja) プログラム翻訳装置およびプログラム翻訳方法
US5946491A (en) Register allocation method and apparatus for gernerating spill code as a function of register pressure compared to dual thresholds
US6230317B1 (en) Method and apparatus for software pipelining of nested loops
US20050144602A1 (en) Methods and apparatus to compile programs to use speculative parallel threads
JP2006018445A (ja) プログラム並列化装置及びその方法並びにプログラム
JP2006018446A (ja) プログラム並列化装置及びその方法並びにプログラム
US5367684A (en) Register allocation using an improved register candidate usage matrix
JPH07121377A (ja) 資源割付装置
US20020095668A1 (en) Compiler and register allocation method
US8458679B2 (en) May-constant propagation
JP2006018447A (ja) プログラム並列化装置及びその方法並びにプログラム
JPH1069389A (ja) ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置
US20110078378A1 (en) Method for generating program and method for operating system
WO2022073346A1 (en) Devices, methods, and media for efficient data dependency management for in-order issue processors
JP2002366366A (ja) コンパイル方法、コード生成方法、スタックレジスタ使用方法、コンパイラ、これらを実現するプログラム及び記憶媒体
Day Compiler assignment of data items to registers
US6584611B2 (en) Critical path optimization—unload hard extended scalar block
US7469404B2 (en) Bank assignment for partitioned register banks
Buchwald et al. SSA-based register allocation with PBQP

Legal Events

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