JPH03260732A - レジスタ割り付け方式 - Google Patents

レジスタ割り付け方式

Info

Publication number
JPH03260732A
JPH03260732A JP5947190A JP5947190A JPH03260732A JP H03260732 A JPH03260732 A JP H03260732A JP 5947190 A JP5947190 A JP 5947190A JP 5947190 A JP5947190 A JP 5947190A JP H03260732 A JPH03260732 A JP H03260732A
Authority
JP
Japan
Prior art keywords
registers
data
register allocation
register
symbol
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
JP5947190A
Other languages
English (en)
Inventor
Hiroaki Kawachi
河内 浩明
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP5947190A priority Critical patent/JPH03260732A/ja
Publication of JPH03260732A publication Critical patent/JPH03260732A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔産業上の利用分野〕 この発明はソースプログラムを解析して実行効率のよい
目的プログラムを生成するコンパイラにおけるレジスタ
割り付け方式に関するものである。
(従来の技術) 第3図は従来のコンパイラの基本的な構成を示すもので
、コンパイラは、ソースプログラム(1)を人力し、構
文解析部(2)によって構文のチエツクを行うとともに
、適切な中間コードに変換し、以下、記憶域の割り当て
部(3)  最適化部(4)及びレジスタ割り付け部(
5)の処理を経て、コード生成部(6) によって最終
的な目的プログラム(7)を生成すようになっている。
実行効率のよい目的プログラムを生成するためには、各
種の最適化技術の中でもレジスタ割り付けの最適化が重
要な位置を占めている。コンパイラの作成に関する標準
的な著作であるAho等による°’Compilers
 Pr1nciples、 techniques、a
ndTools     (八ddison−Wesl
ey  Publishing  Company。
1986)では、プログラムを基本ブロックと呼ばれる
連続するステートメントの列に分割し、これらの基本ブ
ロックに対して局所的なレジスタ割り付けを行い、残っ
たレジスタを用いてより広い範囲を対象にした大域的レ
ジスタ割り付けを行う方式を代表的なレジスタ割り付け
方式として述べている。
理論的には、レジスタ割り付けは、割り付けの対象とな
るデータと有限個のレジスタとの間のマツピングを決定
する問題に帰着できるが、最適解を求めることは甚だ困
難であることが知られている。
従って、種々の発見的な手法が従来より開発されている
。大域的なレジスタ割り付けを例にとると、プログラム
中に存在するループ毎にレジスタを割り付けていくのが
典型的な処理である。これはプログラム全体の実行時間
のうち、ループの実行に占める割合が非常に高いという
経験則に基づいている。一つの方法は、ループ中に出現
する頻度か高いデータの順にレジスタを割り付けていく
ことである。この方法では、データとレジスタとのマツ
ピングは一対一である。すなわち、あるデータに一度割
り付けられたレジスタはループの全範囲で固定的にその
データに対応している。
上述の大域的レジスタ割り付け方式は単純なアルゴリズ
ムでわかりゃすいものであるが、レジスタの割り付け効
率という点では不十分なところがある。
chaitin等はレジスタの割り付けをグラフの彩色
問題として解析することにより、より効率的な大域的レ
ジスタ割り付け方式を開発した。これは、レジスタの割
り付けの対象となるデータをグラフ上のノードに対応さ
せ、プログラム中の任意の地点で同時に生きているデー
タに関しては、対応するノード間を線で結ぶ。このよう
にして得られたグラフをレジスタの干渉グラフと呼ぶ。
グラフの彩色とは、干渉グラフ上に隣り合うノード(線
で結ばれたノード)には互いに異なる色をぬることであ
り、彩色に用いられる色がレジスタに対応する。ある有
限個の色を使って干渉グラフ上の全てのノードを彩色す
ることができないとぎ、プロフィツトが最も小さいノー
ドを選び、4のノートをグラフ上から除去することによ
って彩色処理を継続するというような手法が提案されて
いる。なお、グラフの彩色を使用したレジスタ割り付け
方式はchaitin等による”Register A
l−1ocation Via Coloring  
(Computer LanguagesVol、 6
.1981 pp、47−57)及びChaitinに
よる”Register A11ocation an
d Spilling Via GraphColor
ing  (Proceeding 5IGPLAN8
2. Symposiumon Compiler C
on5truction、 5IGPLAN Noti
ces。
1982、 pp98−105)に詳細が記述されてい
る。
以上に述べたレジスタ割り付け方式では、いずれの場合
でも、レジスタ割り付けの対象となるデータにレジスタ
が割り付けられた時に、割り付けられなかった場合と比
べてどの程度利益があるかを示すプロフィツトを算出し
、このプロフィツトを評価することがレジスタ割り付け
の処理において重要な役割を果たしている。
(発明が解決しようとする課題) 従来のレジスタ割り付けレテ式では、レジスタ割り付け
の対象となるデータに関してプロフィツトを求めておき
、そのプロフィツトの値を評価して、レジスタを割り付
けるべきデータの集合を決定したり、逆に、割り付けの
候補から除外すべきデータを決定するというようなこと
が行われていた。
しかし、データとレジスタとのマツピングを決定する処
理に先立って一括してプロフィツトを計算するため、上
記のマツピングを決定する処理の進行に伴い、 ・配列要素と当該配列要素のインデックス・ポインタと
当該ポインタによって示されるデータ のように、一方のデータに対するレジスタ割り付けの状
況に応じて、他方のデータのプロフィツトの値が変化す
るようなケースでは、プロフィツトの評価が正確に行わ
れずレジスタ割り付けの効率が低下するという問題点が
あった。
上記の様子を図面を参照しながら説明する。第4図は、
FORTRANプログラムの一部(8) を示すもので
あるが、これに対応する中間コードにおいて、ステート
メント(9)から始まるDOループに含まれるステート
メント(lO)〜(13)に出現するデータの参照回数
が第5図に示すように求められたとする。簡単のために
、上記のプロフィツトをデータの参照回数と考える。3
個のレジスタを使用して、このループに現れるデータに
対してプロフィツトの大きい順に一対−にレジスタを割
り付けると、第6図に示すような結果が得られる。
レジスタが割り付けられたデータ集合(14)の中に、
添字Iの値を評価した結果のインデックス1ndexと
1ndexによって間接参照される配列要素^(ind
ex)が共に含まれている。しかし、A (index
)にレジスタが割り付けられた結果、ステートメント(
10)に現れるA (index)の最初の参照を除い
ては、1ndexを用いる必要がなくなる。
従って、1ndexの実質的な参照回数は3だけ減って
3になる。第5図によれば、1ndexの実質的な参照
回数は全体の中で第4番目に位置するので、1ndex
の代わりに、レジスタが割り付けていないデータ集合(
15)にに含まれる他のデータTにレジスタを割り付け
る方が効率のよい目的プログラムとなる。
この発明は上記のような問題点を解消するためになされ
たもので、レジスタ割り付けの過程でプロフィツトの値
が変化することを防ぎ、効率的な目的プログラムが得ら
れるレジスタ割り付け方式を提供することを目的とする
〔課題を解決するための手段〕
この発明に係るレジスタ割り付け方式は、レジスタ割り
付けの処理を2つの段階に分け、第1段階で、レジスタ
割り付け処理のために使用可能な物理レジスタの個数以
下の記号レジスタを用いて、配列要素又はポインタによ
って指されるデータのように目的プログラムのレベルで
間接的に参照されるデータを対象に記号レジスタを割り
付け、第2段階で、上記の処理によって記)レジスタが
割り付けられた間接参照データを記号レジスタに置換し
た中間コードに関して、記号レジスタとスカラデータな
対象にして物理レジスタを割り付けるようにしたもので
ある。
〔作用) この発明においては、上記の第1段階の処理によって、
プログラム中の一部のデータに対して記号レジスタが割
り付けられ、その情報を中間コードに反映した後に、第
2段階の処理によって、これらの記号レジスタと第1段
階の処理対象外であるスカラデータに対して最終的な物
理レジスタ割り付けが行なわれ、プログラム中のデータ
に対するレジスタ割り付けが完了する。
(実施例) 以下、この発明の一実施例について説明する。
第1図は本実施例に係るレジスタ割り付け部の構成を示
したものである。第1図において、(16)は前の処理
部から受は渡された中間コード、(17)はレジスタ割
り付け情報、(18)は記号レジスタを含む中間コード
、(19)は物理レジスタを含む中間コードであり、ま
た、本実施例におけるレジスタ割り付け部(5)は、間
接参照データに対する記号レジスタ割り付け部(5a)
と、中間コードの変換部(5b)及び物理レジスタ割り
付け部(5C)でなる。
上記間接参照データに対する記号レタス4割り付け部(
5a)では、中間コード(16)を入力し、間接参照デ
ータすなわち配列要素又はポインタによって指されるデ
ータだけを対象にして記号レジスタを割り付け、その結
果がレジスタ割り付け情報(17)として出力される。
レジスタ割り付けの範囲は特に限定しないが、通常はル
ープ毎又はプログラム全体を対象にした大域的な割り付
けを行う。
なお、ここでいう記号レジスタとは、最終的には物理レ
ジスタと一対一に対応するが、特定のレジスタ番号はま
だ決定していない状態のレジスタを意味する。ただし、
特別な場合として物理レジスタそのものであってもよい
ループ毎に間接参照データに対する記号レジスタ割り付
けを行う場合のフローチャートを第2図に示す。以下で
は、第2図に沿ってこの処理を説明する。
まず、レジスタ割り付けの対象となるループを探す(ス
テップSl)。多重にネストしたループの場合、最内側
のループの実行回数が最も多いので、レジスタ割り付け
では最内側のループから未処理のループを探していく。
未処理のループが存在しない場合、処理は終了する(ス
テップS2)。
そうでなければ、当該ループ中に現れる間接参照データ
の集合■を求める(ステップS3)。配列要素の場合、
添字式を解析して、添字が同一の値をもつものは集合V
中の一つの要素とする。ポインタによって指されるデー
タの場合も同様に、ポインタが同一の値をもつものは集
合V中の一つの要素とする。
集合■が空(ステップS4)、すなわち割り付けの対象
となるデータが存在しない場合、次のループの処理に移
る(ステップSl)。そうでない時、割り付けに使用す
る記号レジスタの集合Rを求める(ステップS5)。
記号レジスタの数は使用可能な物理レジスタの個数以下
であり、どの程度の個数にするかはループ中に現れる間
接参照データが全データの中でどの程度の割合を占める
か等を調べて決定する。
次に、集合■の各要素についてプロフィツトを算出する
(ステップS6)。簡単のために、ここではプロフィツ
トとして参照回数を考える。
次に、集合■の中でプロフィツトが最大のデータvIを
探して、これに集合Rの中の任意の記号レジスタR」を
割り付ける(ステップS7)。
その後で、集合■から割り付けの対象となったデータv
Iを取り除き(ステップS8)、集合Vが空(ステップ
59)ならば次のループの処理に移る(ステップSl)
。そうでなければ、集合Rから割り付けに使用した記号
レジスタR,を取り除く(ステップ510 )。集合R
が空(ステップ511)ならば、次のループの処理に移
る(ステップSL)。そうでなければ、次のデータに対
する割り付けに移る(ステップS7)。
第1図に戻って説明を続ける。次に、中間コードの変換
部(5b)では、レジスタ割り付け情報(17)を参照
し、上記の処理によって記号レジスタが割り付けられた
間接参照データに対して、中間コード(16)上で記号
レジスタに置ぎ換える処理を行う。その結果、記号レジ
スタを含む中間コード(18)が生成される。
ソースプログラムの表現に近い高位レベルの中間コード
の場合には、配列要素又はポインタによりて指されるデ
ータに関する参照を単純に記号レジスタに置き換えるだ
けでよいが、機械語の表現に近い低位レベルの中間コー
ドの場合には、間接参照データに対する参照が複数のテ
キストによって表わされているので、例えば、当該配列
要素に対するインデックスのロード命令を削除するよう
な処理も合わせて必要になる。
次に、物理レジスタ割り付け部(5C)では、上記の処
理によって変換された記号レジスタを含む中間コード(
18)に関して、記号レジスタとスカラデータを対象に
物理レジスタを割り付け、物理レジスタを含む中間コー
ド(19)が出力される。
間接参照データについては、間接参照データに対する記
号レジスタ割り付け部(5a)で既に処理しており、た
とえ未割り付けの間接参照データが存在しても、物理レ
ジスタ割り付けの対象とはしない。
また、記号レジスタに対しては、必ず物理レジスタが割
り付けられなければならないが、記号レジスタの数を物
理レジスタの数置下に制限しているので、これは原理的
に保証される。
間接参照データに対する記号レジスタ割り付け部(5a
)と同様に、レジスタ割り付けの範囲は特に限定しない
。ループ毎の割り付けについては、間接参照データに対
する記号レジスタ割り付け部(5a)の処理で説明した
のと同様な方法が適用できる。ここで、記号レジスタに
関してはプロフィツトの値を無限大に設定し、スカラデ
ータよりも優先的に割り付けが行われるようにする。
なお、上記実施例では、各段階の処理でループ毎に大域
レジスタ割り付けを行うものとして説明したが、グラフ
彩色法等地の割り付け方式を使用してもかまわない。ま
た、レジスタ割り付け部の内部構成は各処理部が連続し
ているものとして説明したが、中間コードの変換部(5
b)と物理レジスタ割り付け部(5c)は離れていても
よく、例えば最適化処理部が間に入ってもかまわない。
〔発明の効果〕
以上のように、この発明によれば、レジスタ割り付けの
処理を2つの段階に分け、間接参照データに対する割り
付けと通常のスカラデータに対する割り付けを分離した
構成にしたので、間接参照データと間接インデックスの
対に関して、一方のデータに対するレジスタ割り付けの
状況に応じて、他方のデータをプロフィツトが変化する
ということがなくなり、正確なプロフィツトを求めるこ
とができるようになったため、より精度の高いレジスタ
割り付けができ、効率のよい目的プログラムが得られる
という効果がある。
また、マシンアーキテクチャによっては、特定の命令又
は特定のデータ参照方式に対しては使用できるレジスタ
に制限がつくことがあり、第1段階の処理で記号レジス
タを使用することにより、第2段階の処理開始時点では
特定のレジスタ番号は決定していないので、第2段階の
処理で一括してターゲットマシンに依存したより極めの
細かい割り付けができるという効果もある。
【図面の簡単な説明】
第1図はこの発明の一実施例におけるレジスタ割り付け
部の構成図、第2図はこの発明の一実施例におけるレジ
スタ割り付け部の中の間接参照データに対する記号レジ
スタ割り付け部の処理概要を示すフローチャート、第3
図はコンパイラの基本構成図、第4図はこの発明が解決
しようとする課題を説明するためのFORTRANプロ
グラムの一部を示す説明図、第5図は第4図のプログラ
ム−のDOループ中におけるデータの参照回数を表す説
明図、第6図は従来の方式でレジスタ割り付けを行った
場合のデータとレジスタとのマツピング関係を示す説明
図である。 図面において、(1)はソースプログラム、(5)はレ
ジスタ割り付け部、(5a)は間接参照データに対する
記号レジスタ割り付け部、(5b)は中間コードの変換
部、(5C)は記号レジスタとスカラデータに対する物
理レジスタ割り付け部、(7)は目的プログラム、(1
6)は中間コード、(17)はレジスタ割り付け情報、
(18)は記号レジスタを含む中間コード、(19)は
物理レジスタを含む中間コードを示す。 なお、各図中、同一符号は同一または相当部分を示す。

Claims (1)

    【特許請求の範囲】
  1. ソースプログラムを解析し、有限個のレジスタと該レジ
    スタの総容量に比べて十分大きい記憶容量を有し該レジ
    スタよりも遅いアクセス時間を有するメモリに接続され
    るプロセッサに対する目的プログラムを生成するコンパ
    イラにおいて、第1段階として、使用可能な物理レジス
    タの個数以下の記号レジスタを用いて、配列要素又はポ
    インタによって示されるデータのように目的プログラム
    のレベルで間接インデックスによってアクセスされる間
    接参照データを対象に記号レジスタを割り付け、第2段
    階として、上記の処理によって記号レジスタが割り付け
    られたデータを記号レジスタに置換した中間コードに関
    して、記号レジスタとスカラデータを対象に物理レジス
    タ割り付けを行うことを特徴とするレジスタ割り付け方
    式。
JP5947190A 1990-03-09 1990-03-09 レジスタ割り付け方式 Pending JPH03260732A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5947190A JPH03260732A (ja) 1990-03-09 1990-03-09 レジスタ割り付け方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5947190A JPH03260732A (ja) 1990-03-09 1990-03-09 レジスタ割り付け方式

Publications (1)

Publication Number Publication Date
JPH03260732A true JPH03260732A (ja) 1991-11-20

Family

ID=13114258

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5947190A Pending JPH03260732A (ja) 1990-03-09 1990-03-09 レジスタ割り付け方式

Country Status (1)

Country Link
JP (1) JPH03260732A (ja)

Similar Documents

Publication Publication Date Title
US5293631A (en) Analysis and optimization of array variables in compiler for instruction level parallel processor
EP0428084B1 (en) Method and apparatus for compiling computer programs with interprocedural register allocation
US5790862A (en) Resource assigning apparatus which assigns the variable in a program to resources
JP3311462B2 (ja) コンパイル処理装置
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
US7185327B2 (en) System and method for optimizing operations via dataflow analysis
US7493610B1 (en) Versioning optimization for dynamically-typed languages
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
JPH0776927B2 (ja) コンパイル方法
US20080134151A1 (en) Compiler register allocation and compilation
JPS63121930A (ja) コンパイラのコ−ド生成効率の改善方法
US5367684A (en) Register allocation using an improved register candidate usage matrix
US6925639B2 (en) Method and system for register allocation
WO1995031779A1 (en) Instruction creation device
US6029005A (en) Method for identifying partial redundancies in a new processor architecture
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
US6016398A (en) Method for using static single assignment to color out artificial register dependencies
Franke et al. Compiler transformation of pointers to explicit array accesses in DSP applications
Guyer et al. Optimizing the use of high performance software libraries
CN113741861B (zh) 计算程序中数据依赖关系的方法及计算机可读存储介质
US20050144605A1 (en) Information processing system and code generation method
JPH03260732A (ja) レジスタ割り付け方式
JPH06103462B2 (ja) ベクトル・レングス制御範囲分割処理方式
Bose Instruction set design for support of high-level languages
Bloom et al. Criteria for Evaluating the Performance of Compilers