JPH06103463B2 - コード生成方法 - Google Patents

コード生成方法

Info

Publication number
JPH06103463B2
JPH06103463B2 JP1324164A JP32416489A JPH06103463B2 JP H06103463 B2 JPH06103463 B2 JP H06103463B2 JP 1324164 A JP1324164 A JP 1324164A JP 32416489 A JP32416489 A JP 32416489A JP H06103463 B2 JPH06103463 B2 JP H06103463B2
Authority
JP
Japan
Prior art keywords
register
code
symbolic
block
space
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 - Lifetime
Application number
JP1324164A
Other languages
English (en)
Other versions
JPH02217926A (ja
Inventor
マーチン・エドワード・ホプキンズ
ヘンリイ・スタンレイ・ワーレン、ジユニア
Original Assignee
インターナシヨナル・ピジネス・マシーンズ・コーポレーシヨン
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 インターナシヨナル・ピジネス・マシーンズ・コーポレーシヨン filed Critical インターナシヨナル・ピジネス・マシーンズ・コーポレーシヨン
Publication of JPH02217926A publication Critical patent/JPH02217926A/ja
Publication of JPH06103463B2 publication Critical patent/JPH06103463B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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

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)

Description

【発明の詳細な説明】 A.産業上の利用分野 本発明は、一般にコンピュータのコンパイラに、より具
体的には、異なったレジスタ空間を有するコンピュータ
のために、最適化コンパイラがより能率的なコードを生
成する事を可能にする方法に関する。本発明は、縮小命
令セットコンピュータ(RISC)に関する最適化コンパイ
ラに特に応用を有しているが、任意のコンパイラにおい
ても有利に使用する事ができる。
B.従来技術 コンパイラにより生成されるオブジェクト・コードの品
質を改善するために使用できる技術が現在必要とされて
いる。その技術は、複数のレジスタ空間を有し、ある演
算がそのレジスタ空間の1つにおいてしか実行できず又
あるものはどれでも実行でき、1つのレジスタ空間から
他のレジスタ空間にデータを移動させるのに時間がかか
るような特性を持つ計算機に適用するべきである。レジ
スタ空間の例は、汎用レジスタ(GPR)、浮動小数点レ
ジスタ(FPR)、及び条件レジスタ(CR)である。IBMシ
ステム370(S/370)シリーズのコンピュータ及び多くの
他のコンピュータにおける時間のかかる移動の例は、GP
RとFPRとの間のデータの移動である。これは、その唯一
の経路が記憶装置を経由するものであり、即ちStore Fl
oat命令とLoad命令又はLoad命令とLoad Float命令を実
行する事によってしか行われないからである。
C.発明が解決しようとする課題 従って、本発明の目的は、コンパイラによって生成され
るオブジェクト・コードの品質を改善する技術を提供す
る事である。
本発明の他の目的は、オブジェクト・コード空間及びコ
ードを実行する時間の両者において改善を提供する事で
ある。
本発明の他の目的は、異なつたレジスタ空間を有するコ
ンピュータのために効率的なコードを生成する技術を提
供する事である。
D.課題を解決するための手段 本発明によれば、コンパイラは、コンピュータ・プログ
ラムのソース・コードから、異なったレジスタ空間を有
するコンピュータに関して効率的なオブジェクト・コー
ドを生成する。この技術は、(1)レジスタのクラスが
区別されていないシンボリック・レジスタを参照するコ
ードを生成するステップ、(2)各シンボリック・レジ
スタが生じるコンテキストを表すテーブル中のエントリ
を形成し、同じ等価なクラスに割当てられた「移動」命
令に関するシンボリック・レジスタの等価木を構成する
ステップ、(3)各等価なクラス毎に、クラス中の全て
のシンボリック・レジスタに関するレジスタ使用情報の
論理OR関数を形成し、2つ以上のレジスタ空間コンテキ
スト中に現れる各シンボリック・レジスタ毎に、各レジ
スタ空間毎に1つの番号が存在するように新しいシンボ
リック・レジスタ番号を生成するステップ、及び(4)
もしシンボリック・レジスタの定義点に出あい、シンボ
リック・レジスタが2つ以上のレジスタ空間コンテキス
ト中で使用されているならば、各レジスタ空間中の定義
点で行われるのと同じ動作を行うか又はシンボリック・
レジスタ中の値を1つの空間から他の空間に移すかする
コードを上記プログラムに挿入するステップを含む。上
記の方法を用いる事により、オブジェクト・コード空間
及び実行時間において改善が行なわれた。
E.実施例 図面、特に第1図を参照すると、最適化コンパイラの高
水準の流れ図が示されている。そのようなコンパイラに
典型的なように、処理はブロック1で、コンパイルされ
るソース・コードの字句解析及び構文解析から始まる。
次に、ブロック2で、中間言語コードが生成され、さら
にブロック3で大域的なコードの最適化が行われる。こ
れまでに述べた処理は従来のものであり、コンパイラの
設定者には良く理解されている事である。
本発明による改良は、ブロック4から始まる。ここで、
レジスタは最大限の数の名前すなわちレジスタ番号で再
ネーミングされる。ここでいう最大限の再ネーミングと
は、中間言語表現のプログラムにおける任意の2つのレ
ジスタが、同一のレジスタ番号にも異なるレジスタ番号
にも割当て可能な場合には、これらに異なるレジスタ番
号を割当てることを指す。これにより、後のコンパイラ
・プロセスにおいて、2つのレジスタが相互に独立した
ものとして容易に認識される。次に、プログラムはブロ
ック5で解析され、同じ動作(演算)を行う命令につい
て異なったレジスタ空間に関するコードが挿入される
(詳細については後述するが、例えば即値ロード命令LI
rx,immについては、LI rx,immの他にLICR crx,imm(cr
xは条件レジスタ)を挿入する等)。この処理は、第2
図により詳細に説明されている。以下第2図を参照す
る。ブロック11で、レジスタ使用及び等価クラス情報を
集めるためにプログラムに対して1回のパスが行われ
る。次にこの情報は、ブロック12で、各等価クラス中の
全てのレジスタに関するレジスタ使用情報(各シンボリ
ック・レジスタが割当てられるレジスタのタイプ即ちコ
ンテキストを表す)の論理ORを形成する事によって処理
される。次に、ブロック13で、プログラムに対して2回
目のパスが行われる。このパスにおいて、複数のレジス
タ空間に関してプログラム中にコードが挿入される。従
って、第2図から、プログラムに対して2回のパスが行
われるが、2回目のパスと最初のパスとの間に、最初の
パスで集めたレジスタ使用及び等価クラス情報を処理す
るための間挿処理が行われる事が認められるであろう。
第1図に戻ると、第2図の処理が終了した時、ブロック
6でプログラム中のデッド・コードが除去される。これ
は、第2図のブロック13のステップで不要なコード(即
ちデッド・コード)が挿入されている可能性があるの
で、行う事が望ましい。それを検出し除去する単純な方
法は、この時点でデッド・コード除去の周知の最適化を
行う事である。レジスタの割当ては、ブロック7で、そ
の時点までに存在しているコードに基づいて行われる。
最後に、ブロック8でアセンブリ及び最終コード生成が
行われ、処理を終了する。
さらに詳しく述べると、本発明による技術は、次のステ
ップで実施される。
1.最初に、シンボリック・レジスタを参照するコードが
生成される。そこではレジスタ・クラスは区別されな
い。即ち、R100等のシンボリック・レジスタは、それが
どのように使用されるかに依存して、後にGPR、FPR、又
はCRに割当てられるようになる。これは第1図のブロッ
ク2に一般的に示されている。コード移動及び共通化等
の通常の最適化は、このコードに対して、ブロック3で
行われる。この時点でコードは、可能なかぎり異なった
シンボリック・レジスタ番号を有するべきである(「最
大限の数の名前(レジスタ番号)」と呼ばれる概念)。
従って、下記のステップ(4)は、余分の命令を、それ
らが必要である可能性が高いときに、挿入する。これは
コンパイル時間にしか影響せず、オブジェクト・コード
の品質には影響しない情報である。
2.次に、第2図のブロック11に示されているように、プ
ログラムにわたってパスが行われ、各シンボリック・レ
ジスタ(SR)が現れるコンテキストが(テーブルに)記
録される。これは、単純な線形のパスであり、分岐構造
及び定義−使用関係は無視される。このパスの間、レジ
スタ移動(MR)命令は特別に扱われる。命令「MR rx,r
y」は、rx又はryに関して特別なレジスタ空間を示さな
いが、それらが同じ空間中にある事を意味している。こ
れを処理するために、「MR rx,ry」に出あうと、rx及
びryは同じ等価なクラス中に置かれる。テーブル中のエ
ントリの等価なクラスを定義するための任意の標準的な
アルゴリズム、例えば、Knuth著、「The Art of Compu
ter Programming,Fundamental Algorthms」の第1巻、
セクション2.3.3、354頁のアルゴリズムEを使用でき
る。この単純なアルゴリズムは、テーブル中にrxからry
へのポインタを置く事によって、各等価クラス毎に木を
構成する。
3.次に、第2図のブロック12の処理がテーブル上の1回
のパスによって行われる。各等価クラス毎に、クラス中
のすべてのSRに関するレジスタ使用情報の論理ORが形成
される。次に2つ以上のレジスタ空間コンテキスト中に
現れる各SR毎に、新しいSR番号を生成する。従って、各
レジスタ空間毎に1つの番号が存在するようになる。こ
れらの新しいSR番号は、テーブル中に保管される(詳細
は第4図に関連して後述する。) 4.次に、第2図のブロック13に示す2回目の線形パスが
プログラムに対して行われる。ここで、「フィックス・
アップ(fix up)」コードが挿入される。もしSRの定義
点(そのSRがターゲット・レジスタとなっているコー
ド)に出あい、SRが(プログラム中のどこかで)2以上
のレジスタ空間コンテキスト中で使用されているなら
ば、(a)各レジスタ空間中の定義点において行われる
のと同じ動作(演算)を行うか、又は(b)1つの空間
から他の空間に値を(演算結果)を移動するためのコー
ドが挿入される。この第2のパスの間に、SRの使用点
(そのSRがソース・レジスタとなっているコード)に出
あい、SRが2以上のコンテキスト中に現れるならば、使
用されたSRは、使用のコンテキストに関して適当なSR番
号に変更される(詳細は第5図に関連して後述する。
5.最後に、「デッド・コード消去」の標準的な最適化が
第1図のブロック6に示すように行われ、次に第1図の
ブロック7に示すようにレジスタ割当てが行われる。レ
ジスタ割当ては、各レジスタ空間上で別個に行われる。
上記のステップ2〜4が本発明を構成する。ステップ1
及び5は最適化コンパイラの共通の部分である。「フィ
ックス・アップ」コードは定義点か又は使用点のいずれ
かに挿入できる。それを定義点に挿入する事(上述のよ
うに)が通常は最良である。というのは、しばしば1つ
の定義点が幾つかの使用に対応し、また定義は、変数を
定数に等しくセットする等の単純なものである事が多
く、これは任意のレジスタ空間で実行する事ができる
(1つの空間から他の空間への「移動」を回避する)か
らである。
第2図のブロック11により表されているパス1の論理
は、第3図に、より詳細に示されている。以下、これを
参照する。処理は、機能ブロック15中の最初又は次の命
令を検索する事により開始する。判定ブロック16におい
て、命令が偽(fake)か否かを判定するテストが行われ
る。もしそうであれば、処理は判定ブロック25に飛ぶ。
またそうでなければ、判定ブロック17で、命令がレジス
タ移動(MR)命令か否かを判定するテストが行われる。
もしそうであれば、ソース及びターゲットのレジスタ
が、同じ等価なクラスに置かれる。これは機能ブロック
18で、より高い番号(レジスタ番号)のものがより低い
番号のものを指示するようにポインタを置く(例えば、
レジスタがR100とR101であれば、101から100へポインタ
を置く)ことによって、各等価クラス毎に木を構成する
ことで行われる。次に処理は判定ブロック25に飛ぶ。一
方、もし判定ブロック17でのテストが否定的であれば、
判定ブロック19で、命令が条件付分岐命令か否か判定す
るテストが行われる。もしそうであれば、機能ブロック
20で、テストされたレジスタに関して「CRコンテキス
ト」と記録され、処理はブロック25に飛ぶ。もし命令が
条件付分岐命令でなければ、判定ブロック21で、命令が
比較命令か否かを判定するテストが行われる。もしそう
であれば、機能ブロック22で、ターゲット・レジスタに
関して「CRコンテキスト」が記録される。いずれの場合
でも、機能ブロック23で、参照される全てのFPRに関し
て「FPRコンテキスト」が記録される。次に、機能ブロ
ック24で、参照される全てのGPRに関して「GPRコンテキ
スト」が記録される。最後に、判定ブロック25で、処理
すべき動作がさらに存在するか否かがテストされる。も
し存在すれば、処理は機能ブロック15にループ・バック
し、またそうでなければ、第4図に示す間挿論理に制御
が渡る。
第4図において、間挿処理は、機能ブロック27の初期化
で始まる。即ち、iは第1のレジスタに等しくセットさ
れる。次に、判定ブロック28で、iが最後のレジスタよ
りも小さいか又はそれに等しいかがテストされる。もし
そうであれば、判定ブロック29で、iが何らかの等価ク
ラス中にあるか否かを判定する第2のテストが行われ
る。各等価クラスは、上述のようにポインタを用いた等
価木で認識されるので、当該第2のテストはポインタの
有無で判断される。もしなければ、iは機能ブロック30
で、それ自身だけのクラス中に置かれる。いずれの場合
も、機能ブロック31で、jはiの後のクラス中の次のも
の(即ちそのポインタで指示されるレジスタ)に等しく
セットされ、kはjの後のクラス中の次のもの(同様に
そのポインタで指示されるレジスタ)に等しくセットさ
れる。機能ブロック32で、kの使用状態が、kの使用状
態とiの使用状態との論理和に等しくセットされる。機
能ブロック33でiはkを指すようにされる。次に機能ブ
ロック34で、判定ブロック28に戻る前に、iは、iに1
を加える事によりインデックスされる。
判定ブロック28のテスト結果が否定的であれば、処理
は、機能ブロック36に行く。そこで、再び、iは第1の
レジスタに等しくセットされる。判定ブロック37で、i
が最後のレジスタよりも小さいか又は等しいかがテスト
される、もしそうであれば、判定ブロック38で、iが2
つ以上のコンテキスト中に表れるか否かが判定される。
もしそうであれば、機能ブロック39で、各コンテキスト
ごとに異なった名前が存在するように新しい名前が構成
される。いずれの場合においても、iは、機能ブロック
40で、iに1を加える事によりインデックスされる。判
定ブロック37でのテスト結果が否定的であれば、処理は
終了し、そこで第5図に示したパス2の論理に制御が渡
る。
このパス2の処理を説明する前に、第4図に示された本
発明の動作を具体例を挙げて説明しておく。以下では説
明の便宜のため、次のようなレジスタ移動命令(MR)が
プログラム中に含まれていたものと仮定する。
MR R101,r100 MR R103,r102 MR r103,r105 MR r105,r106 MR r103,r101 MR r104,r106 MR r105,r102 第3図のブロック18のステップに従って、すなわち、上
記のMR命令中のより高いレジスタ番号からより低いレジ
スタ番号を指すようにポインタを置いて等価木を生成す
ると以下のようになる(参考のため、MR命令中に現れな
いr107も併せて示してある)。
次に、第4A図のステップを実行する。ブロック27で、i
=100(つまりr100)がセットされ、続くブロック28で
イエスの経路がとられる。iが等価クラスに存在するか
否かは、上述のブロック18で生成されるポインタを有す
るか否かに他ならないから、この場合、ブロック29では
ノーの経路がとられ、それ自身へのポインタを置くこと
によって、ブロック30が実行される。等価クラスは上述
のように等価木で認識されるので、ブロック31におい
て、jをクラス中のiの後の次のもの、即ちiのポイン
タで指示されるレジスタ番号にセットする。ここでは、
iがそれ自身を指すのでj=100となり、同様にk=100
となる。よって、ブロック32で次のものがセットされ
る。
USAGE(r100)=USAGE(r100)OR USAGE(r101) ブロック33では自身にポインタを置くこととなり、ここ
では特別な意味をもたない。
次にブロック34で、i=101がセットされ、同様の処理
が実行される。i=100の場合と異なるのは、ブロック2
9でイエスの経路がとられる点である。r101はr100をポ
インタで指示するので、j=100,k=100となり、ブロッ
ク32で次のものがセットされる。
USAGE(r100)=USAGE(r100)OR USAGE(r101) これにより、r101のレジスタ使用情報がr100の使用情報
とOR演算され、その使用情報がr100のノード(ルート・
ノード)に蓄積される。
i=102の場合もi=101と同様に処理され、ブロック32
で次のものがセットされる。
USAGE(r100)=USAGE(r100)OR USAGE(r102) i=103の場合には、j=102とからなるk=100とな
り、ブロック32で次のものがセットされる。
USAGE(r100)=USAGE(r100)OR USAGE(r103) この場合に注意を要するのは、ブロック33で、r103がr1
00が指示するように修正される点である。これにより、
r103が、r102を介してではなく、直接的にルート・ノー
ドたるr100をポインタで指示することとなり、その使用
情報がこれに蓄積されることとなる。
このような第4A図に示された処理を以下のレジスタにつ
いても実行することによって、結果として以下のような
等価木が形成される。
これにより、同じ等価クラスにあるレジスタの使用情報
が、r100に一括して蓄積されることとなり、そのクラス
のレジスタがどのコンテキストで使用されているかを容
易に判断できるようになる。
このようにして第4A図のステップで得られた使用情報
は、第4B図に示すように、第3図でコンテキストを記録
して作成されたテーブルに反映される。
パス2に関する処理は、機能ブロック42で最初の又は次
の命令を検索する事によって開始する。判定ブロック43
で命令が偽か否かの判定を行なうテストが行なわれる。
もしそうであれば、処理は判定ブロック52に飛ぶ。そう
でなければ、判定ブロック44で、命令がレジスタ移動
(MR)命令か否かがテストされる。もしそうであれば、
機能ブロック45で、ターゲットが現れる各レジスタ空間
毎に「移動」命令を実行するコードが挿入される。次
に、処理は、判定ブロック52に飛ぶ。もしレジスタ移動
命令でなければ、判定ブロック46で、ターゲット・レジ
スタが2以上のコンテキスト中で現れるか否かを判定す
るテストが行なわれる。もしそうであれば、判定ブロッ
ク47で、その動作(演算)がそれぞれのレジスタ空間中
で効率的に実行できるか否かが判定される。もしそうで
あれば、機能ブロック48で、それぞれのレジスタ空間で
その動作(演算)を行なうコードが挿入される。もしそ
うでなければ、機能ブロック49で、一方のレジスタ空間
から他方のレジスタ空間に演算結果を移動するコードが
挿入される。いずれの場合でも、又は判定ブロック46の
結果が否定的な場合も、制御は判定ブロック50に行く。
ここで、何等かのソース・レジスタが2以上のコンテキ
スト中に現れるか否かを判定するテストが行なわれる。
もしそうであれば、機能ブロック51で、レジスタ名はそ
の動作に関して適当なレジスタ空間中の新しい名前に変
更される。いずれの場合にも、次に制御は判定ブロック
52に移り、そこで、さらに処理すべき動作が存在するか
否かが判定される。もしそうであれば、処理は機能ブロ
ック42に戻り、そうでなければ処理は終了する。
これらの変換の例として、コンピュータが複数の汎用レ
ジスタ及び複数の条件レジスタを有しているものと仮定
する。また単純さのために、条件レジスタは汎用レジス
タと同じ長さを(即ち32ビット)を有していると仮定す
る。本発明は、レジスタが異なった長さを有している場
合にも適用可能であるが、詳細はより複雑になる。しか
し、原理は同一である。従って、典型的な変換を以下示
す事にする。ここで、左側の列の「rx」は元のシンボリ
ック・レジスタを示す。「rx」はプログラム中のどこか
で、両方のコンテキスト(汎用レジスタ及び条件レジス
タ)中に現れると仮定する。右列の「crx」は「rx」の
条件レジスタ対応物を表す。即ち、レジスタが右列のコ
ードに割当てられる時、「rx」はGPRに割当てられる「c
rx」は条件レジスタに割当てられる。
(1)は固定小数点ロード命令を示す。rxはどこかで両
方のコンテキスト中に現れるので(上述の仮定によ
る)、新しいシンボリック・レジスタcrxを生成し、rx
をcrxに移動する「条件レジスタへの移動(MTCR)」命
令を挿入する。MTCRは低速で好ましくない命令である
が、メモリからCRへ直接ロードする方法は存在しないと
仮定したので、それを使わざるを得ない。
(2)は即値ロード命令を示す。コンピュータは、CR
(LICR)への高速の即値ロード命令を有しているものと
仮定する。従って、crxにセットするのにMTCRではなく
それを使用する。
(3)はレジスタ移動命令を示す。もしrx又はryのいず
れかが両方のコンテキスト中に現れるならば、上述の等
価クラス・アルゴリズムにより、それらは両方とも両コ
ンテキスト中に現れる。従って、rx及びryの両者はcrx
及びcryにCRの対応物を有する。我々はcryをcrxに移動
する命令を挿入する。
(4)は比較命令を示す。ターゲットはCRでしかありえ
ないと仮定する。従って、rxはCR対応物crxに変更す
る。
(5)は条件付分岐命令を示す。テストされるレジスタ
rxはCRでしかありえないと仮定する。従って、我々はそ
れをCR対応物crxに変更する。
プログラムは、PL/I等の高水準言語で書かれた、下記の
列(1)に示すソース・コードを含んでいると仮定す
る。変数Xは論理変数(1ビット)である。制御の流れ
は示さない。それらのラインはプログラム中のどこにで
も存在し得る。あるものは、ループ中に存在するかもし
れず、それらは必ずしも示した順に存在するとは限らな
い。本発明を含まないコンパイラは列(2)に示すもの
は類似したコードを生成する。それはMTCR(条件レジス
タへの移動)命令を含むが、これは実行にコストがかか
ると仮定されている。本発明を含むコンパイラは列
(3)に示すものに類似のコードを生成する。このコー
ドは、MTCR命令の代りにLICR(即値CRロード)命令を用
いているので、より高速である。
もしYへの記憶が存在しなければ、列(3)のコードは
単純化する。即ち、GPR R1がデッド(不使用)状態に
なり、従って従来のデッド・コード除去の最適化が2つ
のLI命令を消去する。しかし、列(2)のコードは、こ
の場合には単純化しない。
F.発明の効果 従って、本発明を用いれば、コンパイラによって生成さ
れるオブジェクト・コードの品質が改善される。
【図面の簡単な説明】
第1図は最適化コンパイラの全体的な構造を示す流れ
図、 第2図は本発明の論理を説明する流れ図、 第3図は第2図に示したパス1の論理の流れ図、 第4図は第4A図及び第4B図の関係を示す図、 第4A図及び第4B図は第2図に示した間挿処理の論理の流
れ図、 第5図は第2図に示したパス2の論理の流れ図である。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】コンピュータ・プログラムのソース・コー
    ドからオブジェクト・コードを生成するコンパイラに於
    いて、異なったレジスタ空間を有するコンピュータに関
    する効率的なオブジェクト・コードを生成する方法であ
    って、 レジスタのクラスが識別されないシンボリック・レジス
    タを参照するコンピュータ・コードを生成し、 各シンボリック・レジスタが生起するコンテキストを記
    録してレジスタ使用情報を管理するテーブルを作成し、
    移動命令の各シンボリック・レジスタを同じ等価なクラ
    スに割当てる等価木を構築し、 各等価なクラス毎に、クラス中のすべてのシンボリック
    ・レジスタに関する上記レジスタ使用情報の論理和を形
    成し、2つ以上のレジスタ空間のコンテキスト中に現れ
    る各シンボリック・レジスタ毎に、各レジスタ空間に1
    つのレジスタ番号が存在するようにレジスタ番号を生成
    して、該番号を上記テーブルに記録し、 シンボリック・レジスタの定義点に出会い且つシンボリ
    ック・レジスタが2以上のレジスタ空間のコンテキスト
    中で使用されている場合に、各レジスタ空間の定義点で
    行われるのと同じ動作を行うコード又はシンボリック・
    レジスタ中の値を一方の空間から他方の空間に移動させ
    るコードを上記プログラム中に挿入するステップを含
    む、 コード生成方法。
JP1324164A 1988-12-16 1989-12-15 コード生成方法 Expired - Lifetime JPH06103463B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US285459 1988-12-16
US07/285,459 US4961141A (en) 1988-12-16 1988-12-16 Generating efficient code for a computer with dissimilar register spaces

Publications (2)

Publication Number Publication Date
JPH02217926A JPH02217926A (ja) 1990-08-30
JPH06103463B2 true JPH06103463B2 (ja) 1994-12-14

Family

ID=23094320

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1324164A Expired - Lifetime JPH06103463B2 (ja) 1988-12-16 1989-12-15 コード生成方法

Country Status (4)

Country Link
US (1) US4961141A (ja)
EP (1) EP0373361B1 (ja)
JP (1) JPH06103463B2 (ja)
DE (1) DE68925523T2 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
US5274820A (en) * 1989-08-14 1993-12-28 International Business Machines Corporation Method and system for eliminating operation codes from intermediate prolog instructions
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
WO1991010954A1 (en) * 1990-01-19 1991-07-25 Alliant Computer Systems Corporation A risc vectorization system
US5450585A (en) * 1991-05-15 1995-09-12 International Business Machines Corporation Compiler with delayed conditional branching
US5297285A (en) * 1991-07-23 1994-03-22 Telefonaktiebolaget L M Ericsson System for dynamically linking modular portions of computer software
JP3299611B2 (ja) * 1993-10-20 2002-07-08 松下電器産業株式会社 資源割付装置
US6086632A (en) * 1996-10-31 2000-07-11 Nec Corporation Register optimizing compiler using commutative operations
US5890000A (en) * 1996-12-04 1999-03-30 International Business Machines Corporation Cooperation of global and local register allocators for better handling of procedures
US6052753A (en) * 1997-01-21 2000-04-18 Alliedsignal Inc. Fault tolerant data bus
US5875336A (en) * 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US5898850A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
US5898885A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native stack-based instruction within a computer system
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US7206877B1 (en) 1998-12-22 2007-04-17 Honeywell International Inc. Fault tolerant data communication network
US6912647B1 (en) 2000-09-28 2005-06-28 International Business Machines Corportion Apparatus and method for creating instruction bundles in an explicitly parallel architecture
US6799262B1 (en) 2000-09-28 2004-09-28 International Business Machines Corporation Apparatus and method for creating instruction groups for explicity parallel architectures
US6883165B1 (en) 2000-09-28 2005-04-19 International Business Machines Corporation Apparatus and method for avoiding deadlocks in a multithreaded environment
US6886094B1 (en) 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US6779106B1 (en) 2000-09-28 2004-08-17 International Business Machines Corporation Apparatus and method for an enhanced integer divide in an IA64 architecture
EP1197847A3 (en) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java hardware accelerator using microcode engine
FR2823871B1 (fr) * 2001-04-20 2003-07-04 Canon Kk Procede et dispositif de generation du code executable d'un programme d'ordinateur
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7634767B2 (en) * 2004-03-31 2009-12-15 Intel Corporation Method and system for assigning register class through efficient dataflow analysis
US8484630B2 (en) * 2008-12-23 2013-07-09 International Business Machines Corporation Code motion based on live ranges in an optimizing compiler
US9606783B2 (en) * 2013-10-14 2017-03-28 International Business Machines Corporation Dynamic code selection based on data policies

Family Cites Families (1)

* 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

Also Published As

Publication number Publication date
DE68925523T2 (de) 1996-08-29
EP0373361A2 (en) 1990-06-20
EP0373361A3 (en) 1992-01-29
JPH02217926A (ja) 1990-08-30
EP0373361B1 (en) 1996-01-24
DE68925523D1 (de) 1996-03-07
US4961141A (en) 1990-10-02

Similar Documents

Publication Publication Date Title
JPH06103463B2 (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
US4821181A (en) Method for converting a source program of high level language statement into an object program for a vector processor
US5586328A (en) Module dependency based incremental compiler and method
US5671416A (en) Apparatus and a method for searching and modifying source code of a computer program
US5355494A (en) Compiler for performing incremental live variable analysis for data-parallel programs
US7185327B2 (en) System and method for optimizing operations via dataflow analysis
US6230317B1 (en) Method and apparatus for software pipelining of nested loops
Kleir et al. Optimization strategies for microprograms
JPH10124325A (ja) 変数の最適配置方法、変数の最適配置装置及び変数の最適配置プログラムを格納したコンピュータ読み取り可能な記録媒体
JPH0519173B2 (ja)
US5581762A (en) Compiling apparatus having a function to analyze overlaps of memory addresses of two or more data expressions and a compiling method
JPH04330527A (ja) プログラムの最適化方法及びコンパイラ・システム
KR20020070809A (ko) 포스트-링크 코드 최적화
JPH0738158B2 (ja) コード最適化方法およびコンパイラ・システム
JP5048949B2 (ja) 非同期プログラムフローのモデリングを含むソフトウェアツール
US6016398A (en) Method for using static single assignment to color out artificial register dependencies
US20010044930A1 (en) Loop optimization method and a compiler
JP2002527816A (ja) プログラム最適化装置および方法
US6055627A (en) Compiling method of accessing a multi-dimensional array and system therefor
Freiburghouse The multics PL/1 compiler
JP3461185B2 (ja) ロードモジュールへのソースコード行番号登録方法および装置
EP0423597A2 (en) Cross iteration common sub-expression elimination
JP3309810B2 (ja) プログラムリンクシステム、方法及び記録媒体
Weiskamp Advanced turbo C programming