JP2000347874A - レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置 - Google Patents

レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置

Info

Publication number
JP2000347874A
JP2000347874A JP2000123052A JP2000123052A JP2000347874A JP 2000347874 A JP2000347874 A JP 2000347874A JP 2000123052 A JP2000123052 A JP 2000123052A JP 2000123052 A JP2000123052 A JP 2000123052A JP 2000347874 A JP2000347874 A JP 2000347874A
Authority
JP
Japan
Prior art keywords
register
code
computer
calling
allocator
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
JP2000123052A
Other languages
English (en)
Inventor
Jr Clifford N Click
エヌ. クリック, ジュニア クリフォード
Christopher A Vick
エー. ヴィック クリストファー
Michael H Paleczny
エイチ. パレッツィニィ マイケル
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000347874A publication Critical patent/JP2000347874A/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/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/447Target code generation

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)【要約】 【課題】 レジスタ割当器が本質的に呼出規則を構築す
るのを可能にする方法及び装置を提供する。 【解決手段】 レジスタ割当器416が呼出規則を構築
するのを可能にする方法及び装置を開示する。本発明の
一様態によれば、呼出規則に関連するコードを生成する
コンピュータにより実施される方法は、コンパイル可能
なソース・コード402を取得し、呼出規則に関連する
少なくとも一つの引数412を識別することを備える。
メモリ空間に対する引数412の位置は、レジスタ・マ
スクにより説明される。本方法は、レジスタを割り当て
るよう配置されるレジスタ割当器416を用いてレジス
タ割当を行うことをも備える。レジスタ割当の間に、呼
出規則に関連するコードが、特製のプロローグ・エピロ
ーグコード・ジェネレータの使用を要求することなく、
該割当器416においてスピル・コード機構により自動
的に生成される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソフトウェア・ア
プリケーションの性能を改善する方法及び装置に関す
る。更に詳しくは、本発明は、サブルーチンのための呼
出規則プロローグ・エピローグコードを構築するレジス
タ割当器を作動させる方法及び装置に関する。
【0002】
【従来の技術】コンピュータ・プログラムの実行に関連
する効率を向上させるために、多くのコンピュータ・プ
ログラムは、コンパイル処理の間に「最適化」される。
一般にコンピュータ・プログラムを最適化することによ
り、使用されるはずのないコンピュータコードの部分が
排除される。更に、コンパイル処理の一部であるコンピ
ュータ・プログラムを最適化することにより、計算操作
を再構築化でき、計算全体がより効率的に行われるよう
になる。これにより、コンピュータ・リソースの消費が
より少なくなる。
【0003】オプティマイザは、例えばC++、FORTRAN、
Javaバイトコードのようなプログラム言語で記述された
コンピュータ・プログラムを、より高速のプログラムに
変換或いはコンパイルするように配置されている。より
高速化又は最適化されたプログラムは、元々の又は事前
に変換されたコンピュータ・プログラムとほぼ完全に等
しい観察可能な動作を備える。即ち、最適化されたプロ
グラムは、それに関連する元々のプログラムと同一の数
学的性質を備える。しかしながら、最適化されたプログ
ラムは一般に、より少ない計算で同一の数学的性質を再
生成する。
【0004】当業者には理解されるように、オプティマ
イザは一般に、最適化され、又はコンパイルされたプロ
グラムの内部表現内のレジスタの使用を制御するよう配
置されたレジスタ割当器を備える。レジスタ割当器は、
プログラムに関連するデータを格納できるレジスタ空間
を割り当てる。レジスタは、例えばコンピュータに関連
するスタック・スロットに区画されるスタック空間であ
る「通常の」メモリ空間へのアクセスに関連する速度と
比較して、比較的高速でアクセスされることのできるコ
ンピュータのプロセッサに関連する位置である。
【0005】レジスタの割当処理の前に、値のセット、
即ち入り引数(incoming arguments)がコンパイラに通知
され、呼出規則により指定されるような固定位置に置か
れる。呼出規則は、当業者には理解されるように、一般
にサブルーチンに対する呼び出しを行う規則である。呼
出規則は、一般的には引数を通過させる、つまり各引数
が現れるスロットをレジスタ又はスタックする。更に、
呼出規則は、どのレジスタがサブルーチン全体を通じ保
持されなければならないか、つまり被呼出保存レジスタ
を指定することができる。被呼出保存レジスタがサブル
ーチンにおいて用いられるならば、被呼出保存レジスタ
は、一般に保存かつ復元される必要がある。呼出規則
は、いくつかのレジスタが特別の目的に用いられるか用
いられないかをも指定することができる。保存・復元レ
ジスタは、他の特別なハンドリングとともに、一般的に
はサブルーチンの入口と出口で生じ、プロローグ・エピ
ローグコードと称される。追加情報は、レジスタ割当処
理が完了した後に入手可能である。このような追加情報
は、それに限定はされないが、サブルーチンに関連する
スタック・フレーム・サイズと、保存かつ復元されるべ
きレジスタのセットを備える。
【0006】図1は、レジスタ割当器と呼出規則コード
・ジェネレータを備えるコンパイラを示す図である。ソ
ース・コード102は、最適化コンパイラであり得るコ
ンパイラ106への入力として設けられる。一般にソー
ス・コード102は、サブルーチン110への呼び出し
108を、呼び出し108に関連する入り引数112と
ともに含む。即ち、入り引数112の位置が呼び出し1
08に対して指定される。
【0007】コンパイラ106に備えられるレジスタ割
当器116は、ソース・コード102が用いるメモリ空
間を割り当てるよう配置される。レジスタ割当器116
がレジスタの割当を行った後に、呼出規則コード・ジェ
ネレータ118が、ソース・コード102に関連するプ
ロローグ・エピローグコードを生成する。例として、任
意の被呼出保存レジスタが割り当ての任意の部分で用い
られる場合、被呼出保存レジスタの保存、復元に用いら
れるコードがプロローグ・エピローグコードに挿入され
る。プロローグ・エピローグコードはソース・コード1
02の内部表現120に備えられる。一度内部表現12
0が生成されれば、コンパイラ106は、内部表現12
0から機械命令124を作成する。
【0008】内部表現120は、サブルーチンの呼出規
則に加えて、定義及び変数使用に関連するコピー、ロー
ド及び格納の命令を備える。図示のように、変数即ち
値、"c"及び"d"は、スタックに格納される。変数"d"
は、当業者には理解されるように、サブルーチン呼び出
しにわたってスピルされなければならない。従って、変
数"d"は、「foo」へのサブルーチン呼び出しの後にスタ
ックから再ロードされる。
【0009】図2を用いて、呼出規則を備えるソース・
コードから機械命令を生成する工程を説明する。一般に
工程202は、当業者には理解されるように、「仮想
の」レジスタから「現実の」レジスタへの変換を含む。
割当の前に、コンパイラは、作業する「仮想の」レジス
タの数に制限がないと仮定する。割当器の仕事は、無制
限の仮想レジスタを、機械全体が有する非常に制限され
た現実のレジスタのセットにマッピングすることであ
る。工程202は、ステップ204より始まり、ステッ
プ204では、呼出規則コードが、コンパイラによって
得られるソース・コードに挿入される。
【0010】一般に、コンパイラが呼出規則コード、す
なわちサブルーチン呼び出し行う規則に関連するコード
を挿入した後に、コンパイラはステップ206において
呼出規則を検討する。即ち、コンパイラは、呼出規則に
関連する入り引数を検討する。ステップ208におい
て、入り値、又は入り引数が、レジスタ、又は例えばス
タック・スロット等のスタック位置に関連するかどうか
が判断される。入り引数がレジスタに格納されたと判断
される場合、工程フローはステップ216に進む。ステ
ップ216では、入り値が仮想レジスタにコピーされ
る。一般にコピーは、レジスタ間コピー・コマンドを用
いて行われる。
【0011】一度入り値が仮想レジスタにコピーされれ
ば、ステップ212において、レジスタ割当が行われ
る。レジスタ割当の実施に関連するステップは、以下、
図3を用いて論考される。レジスタ割当工程は、割当選
択肢を生成する。即ち、レジスタ割当工程全体を用い
て、異なる値を、レジスタ、即ち「現実の」レジスタ、
及びスタック・スロットにいかに割り振るかを判断する
ことができる。レジスタ割当工程が完了した後に、レジ
スタ割当工程により生成される割当選択肢は、ステップ
214において、コンパイラにより機械命令に変換され
る。割当選択肢の機械命令への変更には、レジスタ割当
工程の間に得られる情報を用いてのプロローグ・エピロ
ーグコードの構築が含まれる。一度割当選択肢が変換さ
れたならば、機械命令を生成する工程は完了する。
【0012】ステップ208の、入り値がレジスタ又は
スタック位置に関連しているかどうかの判断に戻り、入
り値がスタック位置に格納されたと判断される場合、続
いてステップ210において、入り値が仮想レジスタに
ロードされる。ステップ210から、工程フローは、レ
ジスタ割当が行われるステップ212に進む。
【0013】図3は、干渉グラフの色付けに対応したス
タック空間の割当て、即ち図2のステップ212に関連
するステップを示す工程フロー図である。ソース・コー
ドのセグメントに関連するメモリを割り当てる工程21
2は、干渉グラフがソース・コードのセグメントに対し
構築されるステップ302から始まる。干渉グラフが構
築された後に、ステップ306において、干渉グラフの
色付けが試みられる。一般に、干渉グラフの色付けのた
めには、様々な異なる方法が適用できる。一度ステップ
306において干渉グラフの色付けが試みらると、ステ
ップ310において、干渉グラフの色付けの試みが成功
したかどうかが判断される。換言すれば、干渉グラフに
関連する各変数が衝突することなく成功裡にレジスタに
割り振られたかどうかが判断される。
【0014】色付けの試みが成功しなかったと判断され
た場合、ソース・コードのセグメントにおける各変数に
干渉なしにレジスタが割り当てられるだけの、充分なレ
ジスタがないことが暗示される。プロセッサにおけるレ
ジスタの数は固定されているので、コードの格納のため
のレジスタ空間が充分にない場合には、「スピル・コー
ド」が識別される。スピル・コードは、当業者には理解
されるように、同時に要求されるレジスタの数を削減す
るためにスタック・スロットへ、およびスタック・スロ
ットからデータを移動するコードである。スタック・ス
ロットは、全てのレジスタがふさがっている場合に情報
を保持するために割当器が用いるスタック・フレームの
一つである。一般にオプティマイザは、必要により、ス
ピル・コードにスタック・スロットを割り当てるように
配置される特製のスタック・スロット割当器を備える。
スピル・コードに対するスタック・スロットは、一般
に、レジスタに適合する入り数を越える入り数がスタッ
ク上を通過させられる場合にも必要である。
【0015】ステップ310において、干渉グラフの色
付けの試みが成功しなかったと判断された場合、工程フ
ローはステップ310からステップ314へ進み、ステ
ップ314では、ライブ・レンジのリストがスピル候補
として得られる。即ち、スタック・スロットにスピルさ
れ得る変数が識別される。
【0016】一度スピル候補が識別されると、ステップ
318において、ロード命令と格納命令が、ソース・コ
ードのセグメントにおける定義と使用に割り振られる。
即ち、変数がソース・コードにおいて定義された後に変
数を格納する格納命令が挿入される一方で、ソース・コ
ードのセグメントにおける変数の使用前に変数をロード
するロード・コマンドが挿入される。
【0017】ロード命令と格納命令の後、即ちロードと
格納が割り振られた後に、ステップ322において、ス
タック・スロットが各ロードおよび各格納毎に割り当て
られる。一般に、レジスタ割当器から分離しているスタ
ック・スロット割当器は、スタック・スロットを割り当
てるために用いられる。スタック・スロット割当器がレ
ジスタ割当器から分離している一方で、両方の割当器は
オプティマイザ又はコンパイラに含めることができるこ
とは理解されるべきである。スタック・スロットを割り
当てることにより、スピル候補は、スタック・スロット
にスピルされる。ステップ322から、工程フローは干
渉グラフが構築されるステップ302へ戻る。
【0018】ステップ310に戻ると、干渉グラフを色
付けする試みが成功した場合には、各変数がレジスタ又
はスタック・スロットに成功裡に関連したことが暗示さ
れる。従って、工程フローは割当を一掃又は終了するス
テップ326に進む。割当の一掃の間に、当業者には理
解されるように、スタック・スロット数はスタック・フ
レーム内へのオフセットに変換され、要求されればコピ
ーはロード又は格納として明示され、実際のレジスタ数
が機械命令に挿入され、その他の雑多な除去作業がこれ
に伴う。
【0019】例えば呼出規則の機械命令が生成される前
など、呼出規則が構築される前に、レジスタ割当工程を
完了しなければならないという要求には、いくつかの欠
点がある。例えば、プロローグ・エピローグコードを生
成するためには、プロローグ・エピローグコードを生成
するよう配置された特別なコードを用いなければならな
い。このようなコードには、バグが含まれる可能性があ
り、少なくともデバッギングが要求される。更に、この
ようなコードはしばしば機械依存でもあり、それにより
コードの移植性が減少する。
【0020】
【発明が解決しようとする課題】それ故に、望まれるの
は、機械命令が異なるコンピューティング・システム間
を容易に出入りできるように、呼出規則に対し機械命令
を効率的に生成する方法及び装置である。このような方
法と装置により、スピル・コードの経験則は、さらに被
呼出保存レジスタをスピルするかどうかを選択すること
ができるようになり、特製のプロローグ・エピローグコ
ード生成の必要がなくなる。即ち、必要とされるのは、
レジスタ割当器が本質的に呼出規則を構築するのを可能
にする方法及び装置である。
【0021】
【課題を解決するための手段】本発明は、呼出規則の作
成におけるレジスタ割当器の使用に関する。本発明の一
様態によれば、呼出規則に関連するコードを生成する、
コンピュータにより実施される方法が、コンパイル可能
なソース・コードを取得するステップと、呼出規則に関
連する少なくとも一つの引数を識別するステップとを備
えることを特徴とする。メモリ空間に対する引数の位置
は、レジスタ・マスクにより記載される。この方法は、
またレジスタを割り当てるよう配置されるレジスタ割当
器を用いてレジスタ割当を行うステップも含む。レジス
タ割当の間に、呼出規則に関連するコードが生成され
る。
【0022】本発明の他の様態によれば、オブジェクト
ベースのシステムにおけるサブルーチンへの呼び出しに
関連する呼出規則を構築する方法が、コンパイルに適す
るソース・コードを取得するステップと、各レジスタ・
マスクが関連するライブ・レンジを伴う関連する変数を
有する複数のレジスタ・マスクを作成するステップと、
該レジスタ・マスクの交差領域を判断するステップとを
備えることを特徴とする。レジスタ割当はこの交差領域
を用いて行われる。レジスタ割当は、レジスタを割り当
てることに加え、呼出規則に関連するコードを生成す
る。一実施例において、本方法は、呼出規則に関連する
コードを、コンピューティング・システムが実行するの
に適した機械命令に変換することを更に特徴とする。
【0023】呼出規則をレジスタ割当の間に構築するこ
とにより、即ち、レジスタ割当器がほぼ自動で呼出規則
コードを生成する場合に、呼出規則は容易に特徴づけら
れる。割当器は、割当を効果的に行うよう配置可能であ
る。更に、レジスタ割当器が呼出規則コードを生成する
場合に、呼出規則コードを生成するソース・コードは、
異なるプラットフォーム間を容易に出入りできる。
【0024】本発明の上記かつ他の利点は、以下の詳細
な説明の読了および各種図面の検討により明らかになろ
う。
【0025】本発明は、添付図面に基づく以下の説明で
明らかとなるが、ここで各図は次の通りである。
【0026】
【発明の実施の形態】最適化コンパイラ等のコンパイラ
は、プロセッサに関連するレジスタの数が有限であるた
め、レジスタに格納できない変数を保持するスタック・
スロットを割り当てるために使用するスタック・スロッ
ト割当器をしばしば備える。このようなコンパイラは、
一般に、サブルーチン呼出規則コードを構築するよう配
置される呼出規則コード・ジェネレータをも備える。コ
ンパイラがレジスタ割当てを行う前に、値の、即ち入り
引数のセットが、呼出規則により指定される固定位置に
置かれる。呼出規則の構築のためには、呼出規則に関連
する変数を格納するために用いられるスタック・フレー
ムのサイズ及びレジスタのセットのような追加情報が必
要とされる。このような情報は、レジスタ割当工程が完
了するまでは一般的に入手可能ではない。呼出規則を構
築する前にレジスタ割当工程の発生を要求すると、呼出
規則に対する小変更は呼出規則コードにおけるプラット
フォーム・ベースの大きな変更を生じさせることから、
呼出規則を含むコードの移植性が減少する。
【0027】スタック・ベースの値又は変数が機械レジ
スタと同様な方法で取り扱われる場合、特製のスタック
・スロット割当器は必要とされない。レジスタ割当器を
用いてスタック・スロットを割り当てることにより、ス
タック・スロットをレジスタと同様に取り扱うことが可
能になり、それによりスタック・スロットに格納される
値の処理に一般に用いられる経験則に関連するバグが除
去される。
【0028】更に、レジスタ割当器を用いて呼出規則コ
ードをほぼ自動的に生成することにより、サブルーチン
呼に対する入り引数のための位置が既知の場合に、呼出
規則コードが生成される。つまり、サブルーチン呼び出
し、入力などの命令の割当、および引数の割当に関する
命令の結果の割当を統合することにより、レジスタ割当
器は呼出規則コードを生成することができる。
【0029】レジスタ割当器に呼出規則コードを生成さ
せることは、レジスタ割当器への影響を最小限にする。
例として、レジスタ割当器は初期条件の設定により影響
を受ける可能性がある。従って、レジスタ割当器を用い
て、呼出規則コードを生成することにより、呼出規則コ
ードを含むコード全体の柔軟性が増加し、コードをより
高速で実行することができる。更に、レジスタ割当器を
使用して、呼出規則コードを生成することにより、呼出
規則コードがほぼ機械的に独立することを可能にする。
例えば、割当器は、仮想レジスタへ直接引数を移動させ
る代わりに、入り引数の実際の初期位置を知らされる。
入り位置が満足できると考えられる場合、仮想レジスタ
への移動は回避される。以下に図4aを用いて論考され
るように、引数"d"はスタック上を通過させられる。引
数"d"が仮想レジスタに引き上げられる場合、引数"d"
は、fooへの呼び出し全体にわたりスピルされる。引数"
d"をその初期位置におけるスタック上に残すことによ
り、このスピルが回避される。
【0030】一実施例においては、スピル・コード機構
がプロローグ・エピローグコードを構築するよう配置さ
れ、比較的単純なインターフェースを用いて被呼出保存
レジスタの作用を説明することができ、それにより異な
る中央処理装置(CPUs)に比較的容易に該インターフェー
スを移植することができるようになる。このようなイン
ターフェースにより被呼出保存レジスタのセット、つま
り同一CPU上の呼出規則の変更が可能になる。スピル・
コード機構を使用して呼出規則コード、例えばプロロー
グ・エピローグコードを構築することにより、スピル候
補選択の経験則と、被呼出保存レジスタをスピルする、
又はスピルしないことの影響とが包括的方法により組み
合わせられる。従来のスピル候補選択技法は、恐らく
は、一般にはめったに実行されないコードにおいて被呼
出保存レジスタを入手可能にするために、被呼出保存レ
ジスタを強制的にスピルさせ、獲得するか、或いは、被
呼出保存レジスタを用いるかどうかの決定を、割当全体
にわたるその決定の影響を確認する能力を持たずに局所
的に強制するか、のどちらかであり、一般的に不十分で
あった。
【0031】説明の実施例において、呼出規則コードを
挿入する代わりに、レジスタ割当器は、ほぼ全ての被呼
出保存レジスタが、入口でライブになり出口で用いられ
ることを宣言する。例えば、ほぼ全ての被呼出保存レジ
スタが、サブルーチンへの入口でライブになりサブルー
チンの出口で用いられることを宣言する。このような宣
言は、比較的長く、例えば、方法全体を網羅し得て、実
質的に単一の用途のみと単一の定義のみしか有しないラ
イブ・レンジのセットを効果的に作成する。このような
ライブ・レンジは、要求に応じて、理想的なスピル候補
を作成する。
【0032】被呼保存ライブ・レンジがスピルされる
と、そのライブ・レンジに挿入されるロードと格納は、
旧来のプロローグ・エピローグコードであることがわか
る。従来のスピル機構を用いてスピルする被呼保存ライ
ブ・レンジの作用がまさにプロローグ・エピローグコー
ドを生成するので、特別なプロローグ・エピローグコー
ドは必要とされないことは充分理解されるべきである。
【0033】図4aを用いて、呼出規則コードを生成す
るよう配置されるレジスタ割当器を備えるコンパイラ
が、本発明の一実施例により説明される。ソース・コー
ド402がコンパイラ406への入力として設けられ
る。本実施例において、コンパイラ406は最適化コン
パイラである。ソース・コード402は、入り引数41
2とともに、サブルーチン410への呼び出し408を
備える。入り引数412は、呼び出し108に関連す
る。即ち、入り引数412の位置が呼び出し108に対
して指定される。入り引数の位置は、以下に図4bを用
いて説明されるように、レジスタ・マスクに指定しても
よい。一実施例において、各入り引数は関連するレジス
タ・マスクを有する。
【0034】最適化コンパイラ406に含まれるレジス
タ割当器416は、ソース・コード402に用いられる
ためメモリ空間を割り当てるよう配置される。以下に図
5及び6を用いて論考されるように、レジスタ割当器4
16は、レジスタ空間が割り当てられるのと同様の方法
で、スタック空間を割り当てるよう配置される。レジス
タ割当器416は更に、入り引数412を用いて呼出規
則コードを作成するよう配置される。呼出規則コード
は、ソース・コード402の内部表現420に含まれて
いる。換言すれば、被呼出保存レジスタに対しライブ・
レンジが付加される。図4aにおいては、機械レジスタ
EDIに対するライブ・レンジが付加される。ライブ・レ
ンジは、サブルーチンへの入口でライブになるよう定義
され、サブルーチンの戻りの際にEDIに戻るよう要求さ
れる。最適化コンパイラ406は更に、内部表現420
を、実行に適する機械命令424に変換するよう配置さ
れる。
【0035】上述のように、呼出規則を構築するレジス
タ割当器によって用いられる各入り引数、又は入力変数
は、関連するレジスタ・マスクを有してよい。レジスタ
・マスクはビットの集合か、又はビットマスクであり、
有効レジスタ、場合によってはスタック・スロットを表
わす。換言すればレジスタ・マスクは、全ての可能な機
械レジスタを表わし、適切であればスタック・スロット
を表示するよう配置される数空間である。レジスタ・マ
スクにおけるビットの数は、機械命令が実行されるべき
プラットフォーム次第で変化してよい。例として、例え
ばカリフォルニア州、Santa ClaraのIntel Corporation
から市販されているPentiumプロセッサを有するプラッ
トフォームなどの、Intelプラットフォームにおいて、
レジスタ・マスクは96ビットの集合であってよい。
【0036】図4bは、本発明の一実施例によるレジス
タ・マスクを示す図である。レジスタ・マスク452
は、複数のビット460を備える。各ビット460は、
レジスタ・マスク452が関連する変数に対して、特定
のレジスタが有効であるかどうかを示すよう設定され
る。ビット460の数は、少なくとも部分的に、特定の
プロセッサに関連するレジスタ又はスタック・スロット
の数に依っている。本実施例においては、あるビット、
例えばビット460bが"1"の値に設定される場合、ビ
ット460bに関連するレジスタが有効であると暗示さ
れる。或いはあるビット、例えばビット460aが"0"
の値に設定される場合、関連するレジスタが有効ではな
いことが示される。一実施例においては、ビット460
が整数や浮動小数点数等の単精度値を表わすため、レジ
スタ・マスク452の多くても一つのビット460が、
たとえば"1"に設定される。他の実施例においては、ビ
ット460が倍精度整数を表わす例として、2つのビッ
ト460を設定してよい。
【0037】図5は、本発明の一実施例にしたがった機
械命令の生成に関連するステップを説明した工程フロー
図である。すなわち、レジスタ割当器によって判断され
る呼出規則を有する機械命令を生成することに関連する
ステップが説明される。レジスタ割当器を備える最適化
コンパイラを用いて機械命令を生成する工程502は、
レジスタ・マスクが呼出規則に対して取得される、ステ
ップ504から開始する。上記のように、レジスタ・マ
スクとは、有効なレジスタの集合を表わすビットの集合
またはビット・マスクであり、場合によってはスタック
・スロットである。レジスタ・マスクに含まれるビット
数は、例えば、コンピューティング・システムに関連す
るプロセッサの種類に大きく依存して変化してよい。レ
ジスタ・マスクは、呼出規則に関連する値の位置を説明
するために効果的に用いられる。
【0038】一度レジスタ・マスクが得られれば、次に
ステップ506において、レジスタ・マスクの交差領域
がライブ・レンジのために収集される。ライブ・レンジ
は、上述のように、特定の変数がアクセス可能に保持さ
れる範囲や距離である。レジスタ・マスクの交差領域
は、一般に、一つより多い値によって用いられるレジス
タ又はスタック・スロットを識別する。換言すれば、レ
ジスタ・マスクの交差領域は、以下に図6を用いて論考
されるように、干渉グラフ色付け工程のための「節点」
のセットを提供する。一般的に残りの色が存在するの
で、レジスタ・マスクの交差領域を用いることにより、
色付け工程は簡略化される。特定のライブ・レンジに対
するレジスタ・マスクの交差の後に、レジスタ・マスク
に色がなければ、ライブ・レンジは即座にスピルしなけ
ればならない。例えば、入り引数がレジスタECXを通過
させられ、しかしEDXにおいて出引数として用いられる
場合、ECXとEDXしか含有しないレジスタ・マスクの交差
領域は空になる。少なくとも、ECXとEDX間のコピーが要
求される。
【0039】レジスタ・マスクの交差領域を取得した後
に、ステップ508においてレジスタ割当を行う。最適
化コンパイラにレジスタとスタック・スロットを割り当
てさせる方法の一実施例が、以下に図6を用いて論考さ
れる。レジスタの割当により、呼出規則コードを含む割
当選択肢が生成される。ステップ508のレジスタ割当
工程から生じる割当選択肢は、ステップ510において
機械命令に変換される。一般的に最適化コンパイラは、
割当選択肢を機械命令に変換する。一度割当選択肢が変
換されると、機械命令を生成するステップは完了する。
【0040】図6を参照し、適切にレジスタとスタック
・スロットを割り当てる一工程に関連するステップ、即
ち図5のステップ508が、本発明の一実施例に関して
説明される。即ち、図6はレジスタとスタック・スロッ
トの割当と連絡してソース・コードに色付けする干渉グ
ラフの手順を説明する。レジスタ割当工程は、しばしば
干渉グラフ色付け工程に関連する。メモリ空間を割り当
てる工程は、被呼保存ライブ・レンジがソース・コード
に対して挿入されるステップ601から開始する。工程
フローは、ステップ601からステップ604に進み、
ステップ604では干渉グラフがソース・コードの特定
のセグメントに対して作成、又は「構築」される。ソー
ス・コードのセグメントは、例えばCプログラミング言
語又はJavaバイトコード等の実質的に適する任意のプロ
グラミング言語で書かれるソフトウェア・アプリケーシ
ョンの一部分であってよい。一般に、干渉グラフの作成
には、上記のように、ソース・コードにおける変数又は
値に関連するライブ・レンジの表示と、ライブ・レンジ
間の干渉の表示が含まれる。干渉グラフの「節点」は、
図5を用いて述べたように、レジスタ・マスクの交差領
域から得られる。
【0041】一度干渉グラフが構築されると、ステップ
608において干渉グラフを色付けする試みがなされ
る。干渉グラフの色付けには、異なる変数に対する、衝
突又は干渉のないレジスタの割振が含まれる。当業者に
は理解されるように、干渉グラフを用いてレジスタ割当
を行う方法は、広範囲に変化してよい。このような方法
は、それに限定されるものではないが、Briggs-Chaitin
レジスタ割当方法、Chow式割当方法、直線走査割当方法
を含んでよい。
【0042】ステップ612において、干渉グラフの色
付けの試みが成功したかどうかについて判断される。換
言すれば、衝突なしに干渉グラフに関連する全ての変数
にレジスタの割り振りが可能かどうかに関して判断がな
される。干渉グラフの色付けの試みが成功しなかったと
判断された場合には、干渉グラフに関連する全ての変数
を、衝突なしに割り振ることを可能とするに足るレジス
タがないことが示される。このように、本実施例におい
ては、全ての可能なレジスタが用いられる場合に、スタ
ック・スロットが変数の記憶のために割り当てられる。
【0043】工程フローは、ステップ612からステッ
プ616に進み、ステップ616では干渉グラフに関連
するライブ・レンジの一覧がスピル候補として得られ
る。つまり、スタック・スロットにおいてスピルされ得
る値が識別される。一般に、ほぼどのような経験則でも
スピル候補を選ぶために用いてよい。一般的に、選択肢
は、設定された被呼保存ライブ・レンジ、即ち干渉グラ
フの色付けを試みる前の、ステップ601における設定
を含む。被呼保存ライブ・レンジは、スピル候補選択工
程の部分として選択してよい。本実施例においては、被
呼保存ライブ・レンジをスピルすることにより、プロロ
ーグ・エピローグコードが効果的に構築される。
【0044】スピル候補が識別された後に、ステップ6
20において、スピル候補に関連する定義と用途に関
し、コピー指示が効果的に割り振られるか、又は挿入さ
れる。本実施例においては、コピー指示は、スピル候補
に関連する定義の後、かつ、例えば用途等のスピル候補
に関連する指示の前に割り振られる。定義又は用途指示
に関し一般的に割り振られるコピー指示は、レジスタ間
の、即ち「レジ間(reg-reg)」のコピー指示の様相を呈
する。当業者には理解されるように、コピー指示は、ス
タックへの値の配置を含んでよいが、一般にスタックへ
の値の配置を要求するものではない。一度ステップ62
0においてスピル候補に関連する定義と用途に関してコ
ピー指示が割り振られると、工程フローは、新しい干渉
グラフが構築されるステップ604に戻る。
【0045】ステップ612に戻り、色付けの試みが成
功したかどうかを判断し、成功したと判断されると、ス
ピルは不要であることが示される。つまり、色付けが成
功したと判断された場合には、変数を記憶するための追
加スタック・スロットは要求されない。本実施例におい
ては、色付け工程に関連する残りの色が一般に存在す
る。従って、色付けの試みは一般的に成功する。従っ
て、定義と用途に関し割り振られるコピー指示に関連す
る各コピーを評定し、記憶指示、ロード指示、又はレジ
スタ間コピー指示に対応するかどうかを決定するステッ
プ628に工程フローは進む。CPUにおける現実のコピ
ー指示は、一般にスタック・スロットとレジスタ間で値
を移動させることができないので、このような判断が必
要である。スタック・スロットとレジスタ間で値を移動
させるためには、ロード及び記憶の指示が一般的に要求
される。
【0046】ステップ628からステップ632へ工程
フローは進み、ステップ624で割り当てられたスタッ
ク・スロットを含むスタック・フレームのサイズが判断
される。上述のように、呼出規則コードの生成には、ス
タック・フレームのサイズ等の情報が用いられる。スタ
ック・フレームのサイズは様々な異なる要因に依存する
が、本実施例においては、当業者には理解されるよう
に、関連する名前空間における最大のスタック・スロッ
トに依存する。一度スタック・フレームのサイズが判断
されると、スタックはステップ636において一掃され
る。スタックの一掃には一般に、コピーを適切にロード
および格納に変換することが含まれる。本実施例におい
ては、被呼出保存レジスタの保存と復元、つまりプロロ
ーグ・エピローグコードを生成する特別な「パス」は要
求されない。スタックが一掃されると、割当を行う工程
は完了する。
【0047】図7は、本発明の実施に適する、一般的な
汎用コンピュータ・システムを示す。コンピュータ・シ
ステム1030は、主記憶装置1034(一般的にラン
ダム・アクセス・メモリ、RAM)と主記憶装置1036
(一般的に読み出し専用メモリ、ROM)を含むメモリ装
置に接続される、任意の数のプロセッサ1032(中央
処理装置、又はCPU)を備える。
【0048】コンピュータ・システム1030は、より
具体的にはCPU1032は、当業者には理解されるよう
に、仮想機械を支持するよう配置され得る。コンピュー
タ・システム1030において支持される仮想マシンの
一例を、以下図8を用いて説明する。本分野においてよ
く知られるように、RAMが一般的に双方向にデータと指
示を転送するために用いられる一方で、ROMは、CPU10
32へ一方向にデータと指示を転送するよう動作する。
CPU1032は、任意の数のプロセッサを備えてよい。
主記憶装置1034と1036は、任意の適するコンピ
ュータ読み取り可能媒体を備えてよい。一般的に大量メ
モリ装置である副記憶媒体1038もCPU1032に双
方向に接続され、付加的データ記憶容量を提供する。大
量メモリ装置1038は、コンピュータ・コード、デー
タなどを含むプログラムを記憶するために用いることの
できるコンピュータ読み取り可能媒体である。一般的
に、大量メモリ装置1038は、主記憶装置1034と
1036より低速のハードディスクやテープ等の記憶媒
体である。大量メモリ記憶装置1038は、磁気や紙テ
ープの読取器や、他の良く知られた装置の形態をとり得
る。大量メモリ装置1038内に保たれる情報は、適切
な場合には、仮想メモリであるRAM1036の部分とし
て、標準的な方法で内蔵されることができる。CD-ROM等
の特定の主記憶装置1034は、CPU1032に一方向
にデータを渡すこともできる。
【0049】CPU1032は、それに限定されるもので
はないが、ビデオモニタ、トラックボール、マウス、キ
ーボード、マイクロフォン、タッチ・センシティブ・デ
ィスプレイ、トランスジューサ・カード・リーダ、磁気
又は紙テープリーダ、タブレット、スタイラス、音声又
は手書き認識器、他に言うまでもなく他コンピュータ等
を含むことのできる、一つ以上の入出力装置1040に
接続される。最後に、CPU1032は、1012に一般
に示されるようなネットワーク接続を用いて、コンピュ
ータ又は電気通信ネットワーク、例えばローカルエリア
ネットワーク、インターネットネットワーク、イントラ
ネットネットワーク等に任意に接続されてよい。このよ
うなネットワーク接続により、CPU1032が、上記方
法のステップを行う過程で、ネットワークから情報を受
け取り、又はネットワークに情報を出力することが予想
される。このような情報は、CPU1032を用いて実行
される一連の指示としてしばしば表され、例えば、搬送
波内で具象化されるコンピュータ・データ信号の形でネ
ットワークから受け取られ、又はネットワークへ出力さ
れ得る。上記の装置及び材料は、コンピュータのハード
ウェア及びソフトウェア技術の当業者にはよく知られて
いるものである。
【0050】上述のように、仮想機械は、コンピュータ
・システム1030上で実行され得る。図8は、図7の
コンピュータ・システム1030により指示され、本発
明の実施に適する仮想機械を示す図である。コンピュー
タ・プログラム、例えば、カリフォルニア州Palo Alto
のSun Microsystems社により開発されたJavaTMプログラ
ミング言語で書かれたコンピュータ・プログラム、が実
行されると、ソース・コード1110が、コンパイル時
間環境1105内のコンパイラ1120に提供される。
コンパイラ1120により、ソース・コード1110
は、バイトコード1130に書き換えられる。一般に、
ソース・コード1110は、ソフトウェア開発者により
作成されるときに、バイトコード1130に書き換えら
れる。
【0051】バイトコード1130は、一般に、再生さ
れ、ダウンロードされ、または例えば図7のネットワー
ク1012のようなネットワークを通して分配され、あ
るいは図7の主記憶装置1034等の記憶装置に記憶さ
れてよい。本実施例においては、バイトコード1130
は、プラットフォーム独立である。即ち、バイトコード
1130は、適当な仮想機械1140を運行しているほ
ぼどのようなコンピュータシステム上でも実行可能であ
る。例えば、JavaTM環境では、バイトコード1130
は、JavaTM仮想計算機を運行しているコンピュータ・シ
ステム上で実行されてよい。
【0052】バイトコード1130は、仮想機械114
0を含むルーチン環境1135に提供される。ルーチン
環境1135は、一般に図7のCPU1032等のプロセ
ッサを用い実行され得る。仮想機械1140には、コン
パイラ1142、インタプリタ1144、ルーチン・シ
ステム1146が含まれる。バイトコード1130は、
一般にコンパイラ1142、インタプリタ1144のい
ずれか一方に提供される。
【0053】バイトコード1130がコンパイラ114
2に提供されると、上記のように、バイトコード113
0内に含まれる方法が、機械命令にコンパイルされる。
一方では、バイトコード1130がインタプリタ114
4に提供されると、バイトコード1130は、一度に1
バイトコードずつインタプリタ1144内に読み込まれ
る。次に、インタプリタ1144は、各バイトコードが
インタプリタ1144内に読み込まれる毎に、各バイト
コードが定義する操作を実行する。一般に、インタプリ
タ1144は、ほぼ継続的に、バイトコード1130を
処理し、バイトコード1130に関連する操作を実行す
る。
【0054】オペレーティング・システム1160から
ある方法が呼び出されると、該方法が解釈された方法と
して発動されるものと判定された場合に、ルーチンシス
テム1146が、その方法をインタプリタ1144から
得ることができる。一方では、該方法が、コンパイルさ
れた方法として発動されるものと判定された場合に、ル
ーチンシステム1146は、コンパイラ1142を作動
させる。次に、コンパイラ1142が、バイトコード1
130から機械命令を生成し、機械言語指示を実行す
る。一般に、機械言語指示は、仮想機械1140が終了
すると廃棄される。
【0055】以上、本発明の実施例を2、3説明した
が、本発明の精神又は範囲を逸脱することなく、他の多
くの具体的形態が可能である。例として、呼出規則に関
連する機械命令の生成に含まれるステップは、記録、削
除又は付加され得る。一般に、本発明の方法に含まれる
ステップは、本発明の精神又は範囲を逸脱することな
く、記録、削除又は付加され得る。
【0056】当業者には理解されるように、被呼出保存
レジスタは、サブルーチン呼び出しがその内容を破壊す
ることのないレジスタである。被呼出保存レジスタの一
例として、Intel 80×86 CPUにおけるEDIレジスタが挙
げられる。一般的に、コンピュータ・システムは被呼出
保存レジスタに関連するレジスタ空間を用いることはな
い。代わりに、使用中の被呼出保存レジスタの数が数え
られ、前もって全ての被呼出保存レジスタを補償するス
タック・スロットを得るようにスピルが行われる。本発
明は、被呼出保存レジスタを共に使用するために、被呼
出保存レジスタに関連する情報をスタックに保存し、
「通常の」レジスタである被呼出保存レジスタを用い、
続いて被呼出保存レジスタに関連する情報を戻すことに
より、実施される。即ち、可能な時はいつでも、被呼出
保存レジスタに関連する空間使用を回避するよう試みら
れる。しかしながら、空間が必要である場合には、該空
間が使用のため請求される。ほぼ自動的に呼出規則コー
ドを生成し得るレジスタ割当器は、呼び出しへの入り引
数、呼び出しからの出引数、被呼出保存レジスタ、及び
呼出保存レジスタを取り扱うよう一般に配置されること
は理解されるべきである。
【0057】レジスタ割当器を用いて呼出規則を構築す
る方法を、必要によりスタック・スロットを割り当てる
レジスタ割当器の使用を含めて説明してきたが、スタッ
ク・スロットの割当には、代替的方法及び機構を代わり
に用いてよいことは理解されるべきである。例えば、ス
タック・スロットは、従来の方法を用いて割り当てられ
てよい。
【0058】レジスタ・マスクに関連するビットの数
は、例えばレジスタ・マスクが関連するプラットフォー
ム次第で広範囲に可変されてよい。本発明は、Intelプ
ラットフォームの使用に適するものとして説明してきた
が、本発明は、それに限定されるものではないが、Powe
r PCプラットフォーム及びSparcプラットフォームを含
む、実質的に適する任意のプラットフォームを用いて実
施してよい。 それ故に、本例は、例示的なものであ
り、何ら限定を加えるものではなく、本発明は、ここに
与えられた詳細な説明に限定されず、添付の特許請求の
範囲内における修正が可能である。
【図面の簡単な説明】
【図1】呼出規則を構築するよう配置されるコンパイラ
を示す図である。
【図2】機械命令の生成に関連するステップを示す工程
フロー図である。
【図3】スタック空間の割当に関連するステップ、即ち
図2のステップ212を示す工程フロー図である。
【図4】aは、本発明の一実施例に係わる呼出規則を構
築するよう配置されるレジスタ割当器を含むコンパイラ
を示す図である。bは、本発明の一実施例に係わるレジ
スタ・マスクを示す図である。
【図5】本発明の一実施例に係わる機械命令の生成に関
連するステップを示す工程フロー図である。
【図6】本発明の一実施例に係わるスタック・スロット
を割り当てる工程に係わるステップ、即ち図4のステッ
プ508を示す工程フロー図である。
【図7】本発明の実施に適する汎用コンピュータ・シス
テムを示す図である。
【図8】図7のコンピュータ・システムにより支持さ
れ、本発明の実施に適する仮想機械を示す図である。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 クリフォード エヌ. クリック, ジュ ニア アメリカ合衆国, カリフォルニア州, サン ノゼ, ウォーレイス ドライヴ 955 (72)発明者 クリストファー エー. ヴィック アメリカ合衆国, カリフォルニア州, サン ノゼ, リオ グランデ ドライヴ 5290 (72)発明者 マイケル エイチ. パレッツィニィ アメリカ合衆国, カリフォルニア州, サニーヴェイル, アリバ ドライヴ 241 ナンバー 10

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 呼出規則に関連するコードを生成する、
    コンピュータにより実施される方法であって、前記コン
    ピュータにより実施される方法は、 ソース・コードを取得するステップであって、前記ソー
    ス・コードはコンパイラによるコンパイルに適してい
    て、前記コンパイラはメモリ空間を割り当てるよう配置
    されるレジスタ割当器を含む、ソース・コードを取得す
    るステップと、 メモリ空間における引数の位置がレジスタ・マスクによ
    り記載される、前記呼出規則に関連する少なくとも一つ
    の引数を識別するステップと、 前記呼出規則に関連するコードを生成するよう配置され
    たレジスタ割当工程を、前記レジスタ割当器を用いて行
    うステップと、 を備えることを特徴とする、コンピュータにより実施さ
    れる方法。
  2. 【請求項2】 呼出規則を構築する、コンピュータによ
    り実施される方法であって、前記呼出規則がオブジェク
    トベースのシステムにおいてサブルーチンへの呼び出し
    に関連している、前記コンピュータにより実施される方
    法は、 ソース・コードを取得するステップであって、前記ソー
    ス・コードがコンパイルに適する、ソース・コードを取
    得するステップと、 複数のレジスタ・マスクを作成するステップであって、
    複数のレジスタ・マスクの各々が関連する変数を有し、
    各々の関連する変数が関連するライブ・レンジを有し、
    各々の関連する変数が更に前記ソース・コードに含まれ
    る、複数のレジスタ・マスクを作成するステップと、 前記複数のレジスタ・マスクの交差領域を判断するステ
    ップと、 前記交差領域を使用することと前記呼出規則に関連する
    コードを生成することを含むレジスタ割当を行うステッ
    プと、 を備えることを特徴とする、コンピュータにより実施さ
    れる方法。
  3. 【請求項3】 機械命令に前記呼出規則に関連するコー
    ドを変換するステップであって、前記機械命令がコンピ
    ューティング・システムによる実行に適する、機械命令
    に前記呼出規則に関連するコードを変換するステップを
    更に備えることを特徴とする、請求項2に記載のコンピ
    ュータにより実施される方法。
  4. 【請求項4】 前記複数のレジスタ・マスクの交差領域
    を判断するステップが、交差領域に関連する変数に対す
    る有効レジスタを識別するステップを更に備えることを
    特徴とする、請求項2、3のいずれか一項に記載のコン
    ピュータにより実施される方法。
  5. 【請求項5】 前記複数のレジスタ・マスクの交差領域
    を判断するステップが、交差領域に関連する変数に対す
    るスタック・スロットを識別するステップを備えること
    を特徴とする、請求項2、3のいずれか一項に記載のコ
    ンピュータにより実施される方法。
  6. 【請求項6】 前記交差領域を用いて干渉グラフを生成
    するステップを更に含むことを特徴とする、請求項2乃
    至5のいずれか一項に記載のコンピュータにより実施さ
    れる方法。
  7. 【請求項7】 前記干渉グラフを着色するステップを更
    に含むことを特徴とする、請求項6に記載のコンピュー
    タにより実施される方法。
  8. 【請求項8】 前記レジスタ割当を行うステップが、 レジスタを割り当てるステップと、 スタック・スロットを割り当てるステップと を含むことを特徴とする、請求項2乃至7のいずれか一
    項に記載のコンピュータにより実施される方法。
  9. 【請求項9】 呼出規則を構築するよう配置されたコン
    ピュータ・システムであって、前記呼出規則がコンピュ
    ータ・システムに関連するオブジェクトベースのシステ
    ムにおけるサブルーチンに対する呼び出しに関連してい
    る、前記コンピュータ・システムは、 プロセッサと、 コンパイルに適するソース・コードを取得するよう配置
    されたソース・コード入力機構と、 複数のレジスタ・マスクを作成するよう配置されたレジ
    スタ・マスク・ジェネレータであって、前記複数のレジ
    スタ・マスクの各々が関連変数を有し、各々の関連変数
    が関連ライブ・レンジを有する、複数のレジスタ・マス
    クを作成するよう配置されたレジスタ・マスク・ジェネ
    レータと、 複数のレジスタ・マスクの交差領域を判断するよう配置
    された判断器と、 コンパイラであって、前記コンパイラがレジスタ割当器
    を含み、前記レジスタ割当器が交差領域を用いて呼出規
    則に関連するコードを生成するよう配置された、コンパ
    イラとを備えることを特徴とする、コンピュータ・シス
    テム。
  10. 【請求項10】 前記コンパイラは前記呼出規則に関連
    するコードを機械命令に変換するよう配置され、前記機
    械命令は実行に適していることを特徴とする、請求項9
    に記載のコンピュータ・システム。
  11. 【請求項11】 前記レジスタ割当器が、更にレジスタ
    を割り当て、スタック・スロットを割り当てるよう配置
    されたことを特徴とする、請求項9、10のいずれか一
    項に記載のコンピュータ・システム。
  12. 【請求項12】 オブジェクトベースのシステムにおい
    て呼出規則を構築するコンピュータ・プログラム製品で
    あって、前記コンピュータ・プログラム製品は、 複数のレジスタ・マスクを作成するコンピュータ・コー
    ドであって、前記複数のレジスタ・マスクの各々が関連
    変数を有し、各々の関連変数が関連ライブ・レンジを有
    する、複数のレジスタ・マスクを作成するコンピュータ
    ・コードと、 前記複数のレジスタ・マスクの交差領域を判断するコン
    ピュータ・コードと、 レジスタを割り当てるコンピュータ・コードであって、
    前記レジスタを割り当てるコンピュータ・コードが呼出
    規則を生成する交差領域を用いるコンピュータ・コード
    を含む、レジスタを割り当てるコンピュータ・コードと
    前記コンピュータ・コードを格納するコンピュータ読み
    取り可能媒体とを備えることを特徴とする、コンピュー
    タ・プログラム製品。
  13. 【請求項13】 前記コンピュータ読み取り可能媒体が
    搬送波、フロッピー(登録商標)ディスク、CD-ROM、テ
    ープドライブ、光学ドライブ、フラッシュメモリ及びハ
    ードドライブにおいて具象化されるデータ信号より成る
    群から選択されるものであることを特徴とする、請求項
    12に記載のコンピュータ・プログラム製品。
JP2000123052A 1999-04-23 2000-04-24 レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置 Pending JP2000347874A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/298411 1999-04-23
US09/298,411 US6408433B1 (en) 1999-04-23 1999-04-23 Method and apparatus for building calling convention prolog and epilog code using a register allocator

Publications (1)

Publication Number Publication Date
JP2000347874A true JP2000347874A (ja) 2000-12-15

Family

ID=23150399

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000123052A Pending JP2000347874A (ja) 1999-04-23 2000-04-24 レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置

Country Status (6)

Country Link
US (1) US6408433B1 (ja)
EP (1) EP1049008A3 (ja)
JP (1) JP2000347874A (ja)
CN (1) CN1186722C (ja)
AU (1) AU775007B2 (ja)
CA (1) CA2306535A1 (ja)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6408433B1 (en) * 1999-04-23 2002-06-18 Sun Microsystems, Inc. Method and apparatus for building calling convention prolog and epilog code using a register allocator
JP3605327B2 (ja) * 1999-11-18 2004-12-22 富士通株式会社 プログラム実行装置
US20020013938A1 (en) * 2000-02-09 2002-01-31 Evelyn Duesterwald Fast runtime scheme for removing dead code across linked fragments
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
US6912647B1 (en) 2000-09-28 2005-06-28 International Business Machines Corportion Apparatus and method for creating instruction bundles in an explicitly parallel architecture
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
US6966055B2 (en) * 2001-03-02 2005-11-15 International Business Machines Corporation Optimizing post-link code
JP3763518B2 (ja) * 2001-05-29 2006-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、そのコンパイル方法およびプログラム
JP3956112B2 (ja) 2002-06-12 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、レジスタ割当装置、プログラム、記録媒体、コンパイル方法、及びレジスタ割当方法
WO2004040445A1 (en) * 2002-10-29 2004-05-13 Freescale Semiconductor, Inc. Method and apparatus for selectively optimizing interpreted language code
US7191318B2 (en) * 2002-12-12 2007-03-13 Alacritech, Inc. Native copy instruction for file-access processor with copy-rule-based validation
JP3974063B2 (ja) * 2003-03-24 2007-09-12 松下電器産業株式会社 プロセッサおよびコンパイラ
WO2005124556A2 (en) * 2004-06-14 2005-12-29 Koninklijke Philips Electronics N.V. Interface device for debugging and/or tracing a computer system comprising one or multiple masters and one or multiple slaves working together.
US20050289520A1 (en) * 2004-06-29 2005-12-29 Redvers Consulting, Ltd. Unidirectional cloaking device for source code
US7324106B1 (en) * 2004-07-27 2008-01-29 Nvidia Corporation Translation of register-combiner state into shader microcode
US7640421B1 (en) * 2006-07-28 2009-12-29 Nvidia Corporation Method and system for determining context switch state
US8180805B2 (en) * 2008-08-25 2012-05-15 Sap Ag Systems and methods for assigning hosts in response to a data query
US8468511B2 (en) * 2008-12-31 2013-06-18 International Business Machines Corporation Use of name mangling techniques to encode cross procedure register assignment
CN101710291B (zh) * 2009-11-27 2012-12-12 中国科学院声学研究所 一种优化堆栈空间的寄存器分配方法
JP2011141676A (ja) * 2010-01-06 2011-07-21 Toshiba Corp 言語処理装置、言語処理方法およびコンピュータプログラムプロダクト
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8756591B2 (en) * 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
CN103853532B (zh) * 2012-11-29 2017-09-29 国际商业机器公司 用于函数调用的方法和装置
US9329875B2 (en) * 2014-04-28 2016-05-03 International Business Machines Corporation Global entry point and local entry point for callee function
US9864518B2 (en) * 2014-11-10 2018-01-09 International Business Machines Corporation Assigning home memory addresses to function call parameters
US9557917B2 (en) * 2014-11-10 2017-01-31 International Business Machines Corporation Conditional stack frame allocation
US10452409B2 (en) * 2015-10-23 2019-10-22 Oracle International Corporation Universal adapter for native calling
US11556319B2 (en) * 2020-09-01 2023-01-17 Huawei Technologies Co., Ltd. Systems and methods for extending a live range of a virtual scalar register
WO2023142005A1 (en) * 2022-01-28 2023-08-03 Intel Corporation Concept for handling memory spills
CN114661296B (zh) * 2022-03-28 2022-12-09 优视科技有限公司 程序代码编译方法、装置、电子设备及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1072952A (en) * 1910-01-22 1913-09-09 Benjamin Rush Jolly Specific-gravity balance.
CN1149476C (zh) * 1995-03-16 2004-05-12 松下电器产业株式会社 资源分配装置
US5729748A (en) * 1995-04-03 1998-03-17 Microsoft Corporation Call template builder and method
US5784066A (en) * 1995-11-22 1998-07-21 International Business Machines Corporation Method and apparatus for using partner information to color nodes in an interference graph within a computer system
US6072952A (en) * 1998-04-22 2000-06-06 Hewlett-Packard Co. Method and apparatus for coalescing variables
US6408433B1 (en) * 1999-04-23 2002-06-18 Sun Microsystems, Inc. Method and apparatus for building calling convention prolog and epilog code using a register allocator
JP2003047874A (ja) * 2001-08-06 2003-02-18 Tetsuo Sekiya 電動式生ゴミ処理器

Also Published As

Publication number Publication date
US6408433B1 (en) 2002-06-18
AU775007B2 (en) 2004-07-15
EP1049008A3 (en) 2006-12-06
CA2306535A1 (en) 2000-10-23
CN1186722C (zh) 2005-01-26
AU2891600A (en) 2000-10-26
EP1049008A2 (en) 2000-11-02
CN1271889A (zh) 2000-11-01

Similar Documents

Publication Publication Date Title
JP2000347874A (ja) レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置
US6553565B2 (en) Method and apparatus for debugging optimized code
US6363522B1 (en) Method and apparatus for handling exceptions as normal control flow
US6434743B1 (en) Method and apparatus for allocating stack slots
EP0732650B1 (en) Resource assigning apparatus
US5586328A (en) Module dependency based incremental compiler and method
US9015683B2 (en) Method and apparatus for transforming program code
US5761514A (en) Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system
KR100624248B1 (ko) 어레이 정적 초기화 방법, 데이터 처리 시스템에서의 방법, 데이터 처리 시스템 및 컴퓨터 판독 가능한 매체
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
US6421824B1 (en) Method and apparatus for producing a sparse interference graph
US20030079210A1 (en) Integrated register allocator in a compiler
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
Lang Improved stack allocation using escape analysis in the KESO multi-JVM
JP2001075814A (ja) コンパイル装置およびその方法
JPH11149380A (ja) コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体
KR100649799B1 (ko) 고속 서브-클레스 검사 및 서브-타입 검사를 컴퓨터에 의해 구현하는 방법 그 시스템
Rosenfeld et al. Issues in optimizing Ada code
Makarov The top-down regional register allocator for irregular register file architectures