JP2003256215A - プログラム変換方法、これを用いたデータ処理装置及びプログラム - Google Patents

プログラム変換方法、これを用いたデータ処理装置及びプログラム

Info

Publication number
JP2003256215A
JP2003256215A JP2002051246A JP2002051246A JP2003256215A JP 2003256215 A JP2003256215 A JP 2003256215A JP 2002051246 A JP2002051246 A JP 2002051246A JP 2002051246 A JP2002051246 A JP 2002051246A JP 2003256215 A JP2003256215 A JP 2003256215A
Authority
JP
Japan
Prior art keywords
register
function
program
variable
execution
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
JP2002051246A
Other languages
English (en)
Other versions
JP3871312B2 (ja
Inventor
Satoshi Koseki
聰 古関
Kiyokuni Kochiya
清久仁 河内谷
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2002051246A priority Critical patent/JP3871312B2/ja
Priority to US10/375,761 priority patent/US7219334B2/en
Publication of JP2003256215A publication Critical patent/JP2003256215A/ja
Application granted granted Critical
Publication of JP3871312B2 publication Critical patent/JP3871312B2/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

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)【要約】 【課題】 レジスタの内容の退避・復元を効率的に行
い、コンパイル処理の実行効率を向上させる。 【解決手段】 実行プログラム中の所定の変数に関し
て、所定の関数呼び出しを越えて生存するか否か、及び
越える関数呼び出しの種類を判断し、この判断に基づい
て、揮発性レジスタ(volatile register)、不揮発性
レジスタ(non-volatile register)、準揮発性レジス
タ(semi-volatile register)のいずれに前記変数を割
り付けるかを決定する。また、実行プログラムを実行し
た際の関数の実行頻度に基づいて、この関数の呼び出し
を越えて生存する変数をいずれのレジスタに割り付ける
かを決定する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムのコンパイルにおいて実行されるレジスタ割付に
関する。
【0002】
【従来の技術】コンピュータプログラム(以下、単にプ
ログラムと称す)は、複数の関数(メソッド)の集合体
として構成される。プログラムをコンパイルする場合、
コンパイラは、プログラムを構成するそれぞれの関数に
対して同一のレジスタセットを用いてレジスタの割り当
てを行う。したがって、プログラムの所定の部分でレジ
スタの値が関数呼び出しを越えて生存する場合は、その
レジスタ値を一時的にメモリに保存することが必要とな
る。
【0003】ところで、CPUが提供するレジスタに
は、関数を越えるとレジスタ値が保持されない揮発性レ
ジスタ(volatile register)と、関数を越えてもレジ
スタ値が保持される不揮発性レジスタ(non-volatile r
egister)とがある。そこで、プログラムの所定の部分
でレジスタの値が関数呼び出しを越えて生存する場合
に、レジスタ値を保存する方法には次の2つの方法があ
る。一つは、変数を揮発性レジスタに割り当て、関数呼
び出しの前にレジスタを退避し、復帰の後にレジスタを
復元する方法、すなわちコーラーメソッド(callermeth
od:呼び出し側メソッド(関数))においてレジスタ値
を退避・復元する方法である。もう一つは、変数を不揮
発性レジスタに割り当て、呼び出された関数において、
当該レジスタの使用前にレジスタ値を退避し、使用後に
退避前のレジスタ値を復元する方法、すなわちコーリー
メソッド(callee method:被呼び出し側メソッド(関
数))においてレジスタ値を退避・復元する方法であ
る。
【0004】不揮発性レジスタと揮発性レジスタの分類
は、レジスタ使用慣習として、マシン(CPU)の供給
者が定めるものである。したがって、ソフトウェアによ
るシステムの開発者は、この慣習に従って開発を行わな
ければならない。従来のシステム開発では、マシンの供
給者が定めたレジスタ使用慣習に従い、通常、関数を越
えて生存しない変数には揮発性レジスタを割り当て、関
数を越えて生存する変数には不揮発性レジスタを割り当
てていた。また、インプリメンテーションのバリエーシ
ョンとしては、関数を越えて生存する変数に揮発性レジ
スタを割り当てる方式も存在するが、これは、不揮発性
レジスタが供給されていない等の特殊な事情がないかぎ
り合理的な方法とは考えられていない。
【0005】
【発明が解決しようとする課題】複数の相互リンク可能
なソフトウェアによるシステムがある場合、通常、それ
ぞれのシステムにおいて、上記従来の技術で説明したよ
うに、定められた不揮発性レジスタと揮発性レジスタの
使用慣習に従ってコード生成を行う。これは、各システ
ムが相互にリンクされる、すなわち相互に関数呼び出し
が行われることを前提としている。ここで、相互リンク
可能なシステムの一方がJIT(Just In Time)コンパ
イラであるとし、JITコンパイラにて生成されたコー
ドとオブジェクト生成等の外部関数との関係を考える
と、JITコンパイラにて生成されたコードが外部関数
を呼び出す場合がほとんどであり、その逆は極めて稀で
ある。このような場合、外部関数で不揮発性レジスタと
定められているレジスタの値を、必ずしもJITコンパ
イラ内で保存しなければならないとは限らない。しかし
ながら、従来は、マシンの供給者により定められた不揮
発性レジスタをそのまま固定的に不揮発性レジスタとし
て使用しているので、本質的には必要とないレジスタ内
容の退避・復元が実行されていた。
【0006】また、上述したように、関数を越えて生存
する変数には通常、不揮発性レジスタが割り当てられ
る。これは、そのような変数を揮発性レジスタに割り付
けるよりも不揮発性レジスタに割り付けたほうが、有利
なコードパターンが多く発生すると考えられているから
である。すなわち、関数を越えて生存する変数を揮発性
レジスタに割り付けた場合、最悪の場合で、その変数が
定義されて最後に使用されるまでに呼び出された関数の
数だけ退避・復元が必要となるのに対し、不揮発性レジ
スタに割り付けた場合は、その変数の生存区間の外側で
多くても1度だけ退避・復元を行えばよいと言える。し
かしながら、関数を越えて生存する変数が存在しても、
その関数が稀にしか呼び出されない場合がある。そし
て、上記従来の手法では、そのような変数も不揮発性レ
ジスタに割り付けられるため、その変数の生存区間の前
後でのレジスタ内容の退避・復元が、ほとんどの場合に
無駄になってしまっていた。
【0007】そこで、本発明は、関数を越えて生存する
変数のレジスタへの割り付を工夫することにより、レジ
スタの内容の退避・復元を効率的に行い、コンパイル処
理の実行効率を向上させることを目的とする。
【0008】
【課題を解決するための手段】上記の目的を達成する本
発明は、コンピュータを制御して、実行プログラムのソ
ースコードをコンパイルして機械語コードを生成する、
次のようなプログラム変換(コンパイル)方法として実
現される。すなわち、このプログラム変換方法は、処理
対象である実行プログラム中の所定の変数に関して、所
定の関数呼び出しを越えて生存するか否かを判断し、こ
の変数が関数呼び出しを越えて生存する場合、さらに、
この関数呼び出しがコンパイラにて生成された関数の呼
び出しか、外部関数の呼び出しかを判断するステップ
と、この判断に基づいて、揮発性レジスタ(volatile r
egister)、不揮発性レジスタ(non-volatile registe
r)、または外部関数の呼び出しが行われてもレジスタ
値が保存されるがコンパイラにて生成された関数の呼び
出しが行われるとレジスタ値が破壊される準揮発性レジ
スタ(semi-volatile register)のいずれに、この変数
を割り付けるかを決定するステップと、この決定に基づ
いて機械語コードを生成するステップとを含むことを特
徴とする。ここで、この変数の割付先を決定するステッ
プは、所定の変数の生存区間が外部関数の呼び出しのみ
を越える場合(すなわち、コンパイラにて生成された関
数の呼び出しを越えない場合)に、この変数を準揮発性
レジスタに割り付けるステップを含む。
【0009】また、本発明の他のプログラム変換方法
は、実行プログラムを実行した際の、かかる実行プログ
ラムを構成する関数の実行頻度を調べてメモリに格納す
るステップと、この実行プログラム中の変数に対して、
この変数が所定の関数呼び出しを越えて生存する場合
に、この関数の実行頻度に応じて、揮発性レジスタまた
は不揮発性レジスタのどちらに変数を割り当てるかを決
定するステップと、この決定されたレジスタの割り当て
を反映して機械語コードを生成するステップとを含むこ
とを特徴とする。ここで、この変数の割付先を決定する
ステップは、所定の変数の生存区間が実行頻度の低い関
数の呼び出しを越える場合に、この変数を揮発性レジス
タに割り付けるステップを含む。
【0010】また、本発明のさらに他のプログラム変換
方法は、実行プログラムを実行した際の、かかる実行プ
ログラムを構成する関数の実行頻度を調べてメモリに格
納するステップと、この実行プログラム中の変数に対し
て、この変数が所定の関数呼び出しを越えて生存する場
合に、この関数の実行頻度に応じて、レジスタに割り付
けられた変数を関数呼び出しの前後で退避・復元するコ
ード、またはこの変数を呼び出された関数内で退避・復
元するコードのどちらを付加するかを決定するステップ
と、この決定に基づいて機械語コードを生成し、メモリ
に格納するステップとを含むことを特徴とする。ここ
で、この変数の割付先を決定するステップは、レジスタ
に割り付けられた所定の変数の生存区間が実行頻度の低
い関数の呼び出しを越える場合に、この変数を呼び出さ
れた関数内で退避・復元するコードを実行プログラムに
付加する処理を含む。
【0011】さらにまた、本発明の他のプログラム変換
方法は、処理対象である実行プログラム中の所定の変数
を、 A群:生存区間がコンパイラにて生成された関数であっ
て頻繁に実行される関数を跨ぐような変数と、 B群:生存区間が頻繁に実行される外部関数を跨ぎ、か
つ前記コンパイラにて生成された関数であって頻繁に実
行される関数を跨がないような変数と、 C群:その他の変数とに分類するステップと、A群に分
類された変数を不揮発性レジスタ(non-volatile regis
ter)に割り当て、B群に分類された変数を外部関数の
呼び出しが行われてもレジスタ値が保存されるが前記コ
ンパイラにて生成された関数の呼び出しが行われるとレ
ジスタ値が破壊される準揮発性レジスタ(semi-volatil
e register)に割り当て、C群に分類された変数を揮発
性レジスタ(volatile register)に割り当てるステッ
プと、この割り当てにしたがって、機械語コードを生成
するステップとを含むことを特徴とする。
【0012】また、上記の目的を達成する本発明は、実
行プログラムのソースコードを読み込み、機械語コード
に変換する、次のように構成されたデータ処理装置とし
て実現される。すなわち、このデータ処理装置は、実行
プログラム中の変数に対して論理レジスタの割付を行う
論理レジスタ割付部と、所定の変数が所定の関数呼び出
しを越えて生存するか否かを解析し、かつ、この変数が
関数呼び出しを越えて生存する場合に、この関数呼び出
しがコンパイラにて生成された関数の呼び出しか、外部
関数の呼び出しかを解析する論理レジスタ性質解析部
と、この解析結果に基づいて、揮発性レジスタ(volati
le register)、不揮発性レジスタ(non-volatile regi
ster)、または外部関数の呼び出しが行われてもレジス
タ値が保存されるがコンパイラにて生成された関数の呼
び出しが行われるとレジスタ値が破壊される準揮発性レ
ジスタ(semi-volatile register)のいずれかに、この
変数を割り付ける物理レジスタ割付部と、レジスタ割付
の決定を反映させて機械語コードを生成するコード生成
部とを備えることを特徴とする。
【0013】さらに、本発明による他のデータ処理装置
は、実行プログラム中の変数に対して、この変数が所定
の関数呼び出しを越えて生存する場合に、この関数の実
行頻度に応じて、揮発性レジスタ(volatile registe
r)または不揮発性レジスタ(non-volatile register)
のどちらかに変数を割り付けるレジスタ割付部と、揮発
性レジスタに割り付けられた変数を関数呼び出しの前後
で退避・復元するコードを実行プログラムに付加し、前
記不揮発性レジスタに割り付けられた変数を呼び出され
た関数内で退避・復元するコードを実行プログラムに付
加するための情報を生成する退避・復元情報生成部と、
生成された情報に基づいて機械語コードを生成するコー
ド生成部とを備えることを特徴とする。
【0014】さらにまた、本発明は、上述したプログラ
ム変換方法の各ステップに対応する処理をコンピュータ
に実行させ、またはコンピュータを用いて上記のデータ
処理装置の各機能を実現させるプログラム(例えば、J
ava(登録商標)におけるJITコンパイラのよう
な、実行プログラムの実行に際して動的(ダイナミッ
ク)にコンパイルを行うコンパイラ)として実現するこ
とができる。このプログラムは、磁気ディスクや光ディ
スク、半導体メモリ、その他の記録媒体に格納して配布
したり、ネットワークを介して配信したりすることによ
り提供することができる。
【0015】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいて、この発明を詳細に説明する。図1は、本実
施の形態によるデータ処理方法を実現するコンピュータ
システムのシステム構成を示す図である。図1を参照す
ると、本実施の形態におけるコンピュータシステムは、
ソースプログラム(入力コード)をコンパイルするコン
パイラ100と、コンパイラ100にてコンパイルされ
たオブジェクトプログラム(出力コード)を実行して種
々の処理を行うプログラム実行部200と、メモリ30
0とを備える。コンパイラ100及びプログラム実行部
200は、パーソナルコンピュータやワークステーショ
ンなどのコンピュータシステムにおけるプログラム制御
されたCPUにて実現される。メモリ300は、コンピ
ュータ装置のメインメモリであり、RAM等で実現され
る。メモリ300には、CPUを制御してコンパイラ1
00として動作させるためのプログラムやコンパイルの
対象のプログラムが格納されると共に、コンパイラ10
0のコンパイル処理において、レジスタから退避される
変数が一時的に格納される。なお、メモリ300に格納
されるプログラムは、必要に応じて、適宜磁気ディスク
その他の外部記録装置に保存されることは言うまでもな
い。
【0016】図1において、コンパイラ100は、バイ
トコード(byte code)で記述された入力コードを入力
して処理し、機械語で記述された出力コードを生成して
出力する。この入力コードの入力は、コード生成装置4
00にて生成された入力コードを直接入力したり、コー
ド生成装置400にて生成された入力コードを記憶した
記憶装置500から入力したり、ネットワーク600上
に存在するコード生成装置400や記憶装置500から
ネットワーク600を介して入力したりすることにより
行われる。コンパイラ100により生成された出力コー
ドは、プログラム実行部200により実行される。な
お、本実施の形態において、コンパイラ100は、Ja
vaにおけるJITコンパイラのような、実行プログラ
ムを実行する際に動的に実行プログラムのコンパイル処
理を行うコンパイラである。以下、本実施の形態では、
JavaのJITコンパイラを例として説明する。ま
た、プログラム実行部200は、コンパイラ100にて
コンパイルされた実行プログラムのオブジェクトコード
(機械語コード)を実行するほか、当該実行プログラム
をインタープリタによっても実行する。そして、実行プ
ログラムを実行した際に、その実行プロファイル(以
下、単にプロファイル)を取得してメモリ300に蓄積
する。
【0017】図2は、本実施の形態におけるコンパイラ
100の構成を説明する図である。図2を参照すると、
コンパイラ100は、コンパイルの対象であるプログラ
ムに対して論理レジスタの割付を行う論理レジスタ割付
部110と、各論理レジスタに関して、割り付けられた
変数の生存区間がどのように関数を跨いでいるかを解析
する論理レジスタ性質解析部120と、論理レジスタ性
質解析部120による解析結果に基づき論理レジスタと
物理レジスタのマッピングを行う物理レジスタ割付部1
30と、物理レジスタ割付部130によるマッピングの
結果に基づき、各物理レジスタにおいてどのような退避
・復元を実行するかについての情報を生成する退避・復
元情報生成部140と、退避・復元情報生成部140に
より生成された情報を反映させてオブジェクトコードを
生成するコード生成部150とを備える。
【0018】図2に示したコンパイラ100の各構成要
素は、コンピュータプログラムにより制御されたCPU
にて実現される仮想的なソフトウェアブロックである。
CPUを制御する当該コンピュータプログラムは、CD
−ROMやフロッピー(登録商標)ディスクなどの記録
媒体に格納して配布したり、ネットワークを介して伝送
したりすることにより提供される。なお、図2に示した
コンパイラ100の構成要素は、本実施の形態における
特徴的な機能に関するものである。図示しないが、コン
パイラ100は、実際には、入力コードの字句解析や構
文解析、各種の最適化処理といったコンパイル処理にお
ける一般的な機能を有することは言うまでもない。
【0019】本実施の形態では、プログラムにおける変
数が関数呼び出しを越えて生存する場合に、レジスタ値
である当該変数の退避・復元を効率的に行うため、次に
説明する二つの手法にて変数のレジスタへの割付を行
う。一つは、本実施の形態にて定義される準揮発性レジ
スタを用いる手法、もう一つは、変数を用いる関数の呼
び出し頻度を考慮する手法である。
【0020】1.準揮発性レジスタを用いる手法 ・準揮発性レジスタの導入 JavaのJITコンパイラなどで行われる動的なコン
パイル処理(DynamicCompilation)では、コンパイラ1
00は、プログラムの実行中にオブジェクトコードを動
的に生成し、当該プログラムの実行中だけ使用する。従
って、外部関数からの呼び出しがあったかどうかを完全
に把握できるため、外部関数からの呼び出し点で不揮発
性レジスタを退避しておけば、コンパイラ100が生成
したコードの中では、その不揮発性レジスタを自由に揮
発性レジスタに変更できる。プログラムの定常実行状態
では、外部関数からの呼び出しはほとんど無いため、不
揮発性レジスタを揮発性レジスタに変更することの不都
合は事実上無いと言ってよい。
【0021】そこで、マシンで定められている不揮発性
レジスタの一部を、コンパイラ100が生成したコード
内では揮発性レジスタとして使用する。ここでは、その
ように用いられるレジスタを準揮発性レジスタ(semi-v
olatile register)と呼称する。準揮発性レジスタは、
次のように扱われる。 (1)定められた不揮発性レジスタの中からコンパイラ
100が生成したコード内で揮発性レジスタとして使用
する準揮発性レジスタを決定する。その個数は不揮発性
レジスタの数を超えない限りいくつでもよい。 (2)コンパイラ100にて生成されたコードが外部か
ら呼び出されるポイントでは、準揮発性レジスタを退避
する。例えば、インタープリタとコンパイラとが混在す
る実行環境(mixed-mode execution環境)では、コンパ
イラ100にて生成されたコードをインタープリタが呼
び出すときに準揮発性レジスタの内容を退避する。
【0022】図3は、インタープリタとコンパイラとが
混在する実行環境での関数呼び出しの様子を示す図であ
る。図3において、準揮発性レジスタは、コンパイラ1
00にて生成されたコード(図ではJIT関数と記載)
内では揮発性レジスタとして扱われ、インタープリタ及
び外部関数の実行においては不揮発性レジスタとして扱
われる。コンパイラ100にて生成されたコードが外部
関数を呼び出す場合には、直接関数呼び出しが行われる
が、外部関数がコンパイラ100にて生成されたコード
を呼び出す場合には、インタープリタ及びJIT Invoker
を介して関数呼び出しが行われるため、ここで準揮発性
レジスタの内容が退避される。
【0023】・準揮発性レジスタを用いたレジスタ内容
の退避・復元回数の削減 図4は、レジスタの種類と性質を示す図表である。図4
に示すように、準揮発性レジスタの導入により、レジス
タの種類は揮発性レジスタ、準揮発性レジスタ、不揮発
性レジスタの3種類となる。これらのレジスタを、プロ
グラム中の変数の種類に応じて使い分ける。すなわち、
プログラムの解析により、変数を、生存区間が関数を跨
がないものと、生存区間がコンパイラ100にて生成さ
れた関数を跨ぐものと、生存区間が外部関数を跨ぐがコ
ンパイラ100にて生成された関数は跨がないものとに
分ける。このうち、生存区間が関数を跨がない変数には
揮発性レジスタを割り当て、生存区間がコンパイラ10
0にて生成された関数を跨ぐものには不揮発性レジスタ
を割り当てるのは、これまで通りである。そして、生存
区間が外部関数を跨ぐがコンパイラ100にて生成され
た関数は跨がない変数を準揮発性レジスタに割り当て
る。
【0024】図5は、生存区間が外部関数を跨ぐがコン
パイラ100にて生成された関数は跨がない変数に関し
て必要となるレジスタ内容の退避・復元を説明する図で
ある。生存区間が外部関数を跨ぐがコンパイラ100に
て生成された関数は跨がない変数を準揮発性レジスタに
割り当てることにより、図5に示すように、当該変数に
ついては、コンパイラ100にて生成されたコード内で
は、レジスタ内容の退避・復元を伴わずにレジスタ割り
当てできるようになる。一方、従来のレジスタ割付で
は、そのような変数を揮発性レジスタに割り当てた場
合、関数呼び出し前後のレジスタ内容の退避・復元が必
要であり、また、不揮発性レジスタに割り当てた場合は
レジスタ使用前後の退避・復元が必要であった。したが
って、かかるレジスタ内容の退避・復元を削減すること
により、コンパイル処理の実行効率が向上する。
【0025】2.変数を用いる関数の呼び出し頻度を考
慮する手法 生存区間が関数を跨ぐ変数に対しては、不揮発性レジス
タを割り当てる方が有利なコードパターンが多く発生す
ると考えられることから、通常、この種の変数には不揮
発性レジスタが割り当てられている。しかし、稀にしか
呼ばれない関数を跨ぐ変数に不揮発性レジスタを割り当
ててしまうと、その変数の生存区間の前後におけるレジ
スタ内容の退避・復元が無駄になってしまう。そこで、
所定の変数に関し、プロファイル等の情報を利用して、
当該変数が跨ぐ関数の呼び出しが稀に実行されるもので
あるかどうかを判断し、判断結果に応じて割り当てるレ
ジスタを選択する。
【0026】すなわち、変数が跨ぐ関数の全てが稀にし
か実行されない場合、その変数を揮発性レジスタに割り
当て、関数呼び出しの前にレジスタ内容を退避し、復帰
の後に退避前のレジスタ内容を復元する(コーラーメソ
ッドによるレジスタ値の退避・復元)。一方、変数が跨
ぐ関数のうち、1つでも頻繁に実行されるものがある場
合は、その変数を不揮発性レジスタに割り当て、そのレ
ジスタの使用前にレジスタ内容を退避し、使用後に退避
前のレジスタ内容を復元する(コーリーメソッドによる
レジスタ値の退避・復元)。
【0027】図6は、関数の実行頻度に応じたレジスタ
の割り当てによるレジスタ内容の退避・復元を説明する
図である。図6に示すように、関数の実行頻度を考慮す
ることにより、稀にしか実行されない関数を跨ぐレジス
タ値の復元・退避が行われる位置は、そのレジスタの生
存区間の前後から生存区間が跨ぐ関数の前後に変更され
る。この関数は稀にしか実行されないので、その関数の
前後の復元・退避も稀にしか行われない。すなわち、事
実上、レジスタ内容の退避・復元のコストが削減される
ことになる。
【0028】上述した1.2.の手法を統合すると、プ
ログラム中の関数が割り付けられるレジスタを選択する
には、次の基準が必要であることがわかる。すなわち、 (1)変数の生存区間がコンパイラ100にて生成され
た関数(コード)を跨ぐか。 (2)変数の生存区間が外部関数を跨ぐか。 (3)変数の生存区間が跨ぐ関数自体の呼び出しの発生
頻度。 これらの基準のさまざまな組み合わせを考慮した上で、
本実施の形態では、割り当てるレジスタを決定するため
の変数の範疇を以下の3つと定める。 A群:生存区間がコンパイラ100にて生成された関数
を頻繁に実行されるパスで跨ぐことがある変数 B群:生存区間が、外部関数を頻繁に実行されるパスで
跨ぐことがあり、かつコンパイラ100にて生成された
関数を頻繁に実行されるパスで跨ぐことがない(コンパ
イラ100にて生成された関数を全て稀にしか実行され
ないパスで跨ぐか、もしくは全く跨がない)変数 C群:その他の(全ての関数を稀にしか実行されないパ
スのみで跨ぐか、もしくは全く跨がない)変数
【0029】次に、本実施の形態で提案した上記の手法
を、図1、図2に示したコンパイラ100にて実現する
場合の、各構成要素の動作について説明する。図2に示
したコンパイラ100の構成において、論理レジスタ割
付部110は、メモリ300から読み出されて構文解析
などの前処理が行われたプログラムに対して、従来と同
様の方法で論理レジスタの割付を行う。また、コード生
成部150は、従来と同様の方法でオブジェクトコード
の生成を行い、生成されたオブジェクトコードをメモリ
300に格納する。
【0030】論理レジスタ性質解析部120は、次のよ
うにして、各論理レジスタに関して、割り付けられた変
数の生存区間がどのように関数を跨いでいるかを解析す
る。図7は、論理レジスタ性質解析部120による解析
処理の動作を説明するフローチャートである。特に図示
しないが、プログラム実行部200によりコンパイル対
象であるプログラムがインタープリタやコンパイル処理
を経て実行された際に、そのプロファイルが取得されて
メモリ300に格納されているものとする。図7を参照
すると、論理レジスタ性質解析部120は、まず全ての
関数に関して、メモリ300に格納されているプロファ
イル等の情報を取得し、この情報を利用して、その関数
が存在するパスの実行頻度(稀にしか実行されないパス
か、頻繁に実行されるパスか)を解析する(ステップ7
01)。そして、全ての論理レジスタに対して順次以下
の処理を実行する(ステップ702)。
【0031】まず、着目中の論理レジスタに対して、そ
の論理レジスタの生存区間が、コンパイラ100が生成
する関数を、頻繁に実行されるパスで跨ぐかどうかを判
定する(ステップ703)。もしそうであるならば、当
該論理レジスタをA群に分類する(ステップ704)。
次に、その論理レジスタの生存区間が、外部関数を頻繁
に実行されるパスで跨ぐかどうかを判定する(ステップ
705)。もしそうであるならば、当該論理レジスタを
B群に分類する(ステップ706)。そしてさらに、そ
の論理レジスタの生存区間が、全ての関数を稀にしか実
行されないパスで跨ぐか、またはまったく関数を跨いで
いないならば、当該論理レジスタをC群に分類する(ス
テップ707)。なお、論理レジスタの性質上、A、
B、C群のいずれかに当てはまることが保証されてい
る。以上の処理が全ての論理レジスタに対して行われた
ならば、論理レジスタ性質解析部120の処理を終了す
る(ステップ702)。
【0032】物理レジスタ割付部130は、論理レジス
タ性質解析部120による解析結果に基づいて、論理レ
ジスタと物理レジスタのマッピングを行う。図8は、物
理レジスタ割付部130によるマッピング処理の動作を
説明するフローチャートである。図8を参照すると、物
理レジスタ割付部130は、各論理レジスタに対して、
順次以下の処理を実行する(ステップ801)。まず、
着目中の論理レジスタに対して、その論理レジスタがA
群に分類されているならば、その論理レジスタを不揮発
性レジスタに割り付ける(ステップ802、803)。
次に、その論理レジスタがB群に分類されているなら
ば、その論理レジスタを準揮発性レジスタに割り付ける
(ステップ804、805)。そしてさらに、その論理
レジスタがC群に分類されているならば、その論理レジ
スタを揮発性レジスタに割り付ける(ステップ80
6)。以上の処理が全ての論理レジスタに対して行われ
たならば、物理レジスタ割付部130の処理を終了する
(ステップ801)。
【0033】退避・復元情報生成部140は、物理レジ
スタ割付部130によるマッピングの結果に基づいて、
各物理レジスタにおいてどのような退避・復元を実行す
るかについての情報を生成する。図9は、退避・復元情
報生成部140による情報生成処理の動作を説明するフ
ローチャートである。図9を参照すると、退避・復元情
報生成部140は、物理レジスタ割付部130にて割り
付けが行われた各物理レジスタに対して、順次以下の処
理を実行する(ステップ901)。まず、着目中の物理
レジスタに対して、その物理レジスタが不揮発性レジス
タであれば、コンパイル対象となっているメソッドの入
口に、その物理レジスタの内容をメモリに退避すること
を表す情報を付加し、出口にその物理レジスタの内容を
メモリから復元することを表す情報を付加する(ステッ
プ902、903)。次に、その物理レジスタが準揮発
性レジスタまたは揮発性レジスタであれば、その物理レ
ジスタに割り付けられている変数の生存区間が跨ぐ各関
数に対して、その関数を呼び出す関数呼び出しの前にそ
の論理レジスタの内容をメモリに退避することを表す情
報を付加し、関数呼び出しの後にその論理レジスタの内
容をメモリから復元することを表す情報を付加する(ス
テップ904)。以上の処理が全ての論理レジスタに対
して行われたならば、退避・復元情報生成部140の処
理を終了する(ステップ901)。この後、退避・復元
情報生成部140にて生成された情報に基づき、コード
生成部150によるオブジェクトコードの生成処理にお
いて、実際の退避・復元コードが生成される。
【0034】
【発明の効果】以上説明したように、本発明によれば、
レジスタの内容の退避・復元を効率的に行い、コンパイ
ル処理の実行効率を向上させることができる。
【図面の簡単な説明】
【図1】 本実施の形態によるデータ処理方法を実現す
るコンピュータシステムのシステム構成を示す図であ
る。
【図2】 本実施の形態におけるコンパイラの構成を説
明する図である。
【図3】 インタープリタとコンパイラとが混在する実
行環境での関数呼び出しの様子を示す図である。
【図4】 本実施の形態において用いられるレジスタの
種類と性質を示す図表である。
【図5】 生存区間が外部関数を跨ぐがコンパイラにて
生成された関数は跨がない変数に関して必要となるレジ
スタ内容の退避・復元を説明する図である。
【図6】 関数の実行頻度に応じたレジスタの割り当て
によるレジスタ内容の退避・復元を説明する図である。
【図7】 論理レジスタ性質解析部による解析処理の動
作を説明するフローチャートである。
【図8】 物理レジスタ割付部によるマッピング処理の
動作を説明するフローチャートである。
【図9】 退避・復元情報生成部による情報生成処理の
動作を説明するフローチャートである。
【符号の説明】
100…コンパイラ、110…論理レジスタ割付部、1
20…論理レジスタ性質解析部、130…物理レジスタ
割付部、140…退避・復元情報生成部、150…コー
ド生成部、200…プログラム実行部、300…メモリ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 古関 聰 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 (72)発明者 河内谷 清久仁 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B081 AA09 CC25

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータを制御して、実行プログラ
    ムのソースコードをコンパイルして機械語コードを生成
    するプログラム変換方法において、 メモリから処理対象である実行プログラムを読み出し、
    当該実行プログラム中の所定の変数が所定の関数呼び出
    しを越えて生存するか否かを判断し、かつ当該変数が関
    数呼び出しを越えて生存する場合に、当該関数呼び出し
    がコンパイラにて生成された関数の呼び出しか、外部関
    数の呼び出しかを判断するステップと、 前記判断に基づいて、関数呼び出しが行われるとレジス
    タ値が破壊される揮発性レジスタ、関数呼び出しが行わ
    れてもレジスタ値が保存される不揮発性レジスタ、また
    は外部関数の呼び出しが行われてもレジスタ値が保存さ
    れるがコンパイラにて生成された関数の呼び出しが行わ
    れるとレジスタ値が破壊される準揮発性レジスタのいず
    れに前記変数を割り付けるかを決定するステップと、 前記決定に基づいて機械語コードを生成し、メモリに格
    納するステップとを含むことを特徴とするプログラム変
    換方法。
  2. 【請求項2】 コンピュータを制御して、実行プログラ
    ムのソースコードを読み込み、機械語コードに変換する
    プログラム変換方法において、 前記実行プログラムを実行した際の、当該実行プログラ
    ムを構成する関数の実行頻度を調べてメモリに格納する
    ステップと、 前記実行プログラム中の変数に対して、当該変数が所定
    の関数呼び出しを越えて生存する場合に、当該関数の実
    行頻度を前記メモリから読み出し、当該実行頻度に応じ
    て、関数呼び出しが行われるとレジスタ値が破壊される
    揮発性レジスタまたは関数呼び出しが行われてもレジス
    タ値が保存される不揮発性レジスタのどちらに当該変数
    を割り当てるかを決定するステップと、 決定されたレジスタの割り当てを反映して機械語コード
    を生成し、メモリに格納するステップとを含むことを特
    徴とするプログラム変換方法。
  3. 【請求項3】 コンピュータを制御して、実行プログラ
    ムのソースコードを読み込み、機械語コードに変換する
    プログラム変換方法において、 前記実行プログラムを実行した際の、当該実行プログラ
    ムを構成する関数の実行頻度を調べてメモリに格納する
    ステップと、 前記実行プログラム中の所定の変数が所定の関数呼び出
    しを越えて生存する場合に、前記関数の実行頻度を前記
    メモリから読み出し、当該実行頻度に応じて、レジスタ
    に割り付けられた当該変数を関数呼び出しの前後で退避
    ・復元するコード、または当該変数を呼び出された関数
    内で退避・復元するコードのどちらを付加するかを決定
    するステップと、 前記決定に基づいて機械語コードを生成し、メモリに格
    納するステップとを含むことを特徴とするプログラム変
    換方法。
  4. 【請求項4】 コンピュータを制御して、実行プログラ
    ムのソースコードをコンパイルして機械語コードを生成
    するプログラム変換方法において、 前記実行プログラム中の所定の変数を、 A群:生存区間がコンパイラにて生成された関数であっ
    て頻繁に実行される関数を跨ぐような変数と、 B群:生存区間が頻繁に実行される外部関数を跨ぎ、か
    つ前記コンパイラにて生成された関数であって頻繁に実
    行される関数を跨がないような変数と、 C群:その他の変数と に分類するステップと、A群に分類された変数を関数呼
    び出しが行われてもレジスタ値が保存される不揮発性レ
    ジスタに割り当て、B群に分類された変数を外部関数の
    呼び出しが行われてもレジスタ値が保存されるが前記コ
    ンパイラにて生成された関数の呼び出しが行われるとレ
    ジスタ値が破壊される準揮発性レジスタに割り当て、C
    群に分類された変数を関数呼び出しが行われるとレジス
    タ値が破壊される揮発性レジスタに割り当てるステップ
    と、 前記割り当てにしたがって、機械語コードを生成し、メ
    モリに格納するステップとを含むことを特徴とするプロ
    グラム変換方法。
  5. 【請求項5】 実行プログラムのソースコードを読み込
    み、機械語コードに変換するデータ処理装置において、 前記実行プログラム中の変数に対して論理レジスタの割
    付を行う論理レジスタ割付部と、 所定の前記変数が所定の関数呼び出しを越えて生存する
    か否かを解析し、かつ当該変数が関数呼び出しを越えて
    生存する場合に、当該関数呼び出しがコンパイラにて生
    成された関数の呼び出しか、外部関数の呼び出しかを解
    析する論理レジスタ性質解析部と、 前記論理レジスタ性質解析部による解析結果に基づい
    て、関数呼び出しが行われるとレジスタ値が破壊される
    揮発性レジスタ、関数呼び出しが行われてもレジスタ値
    が保存される不揮発性レジスタ、または外部関数の呼び
    出しが行われてもレジスタ値が保存されるがコンパイラ
    にて生成された関数の呼び出しが行われるとレジスタ値
    が破壊される準揮発性レジスタのいずれかに前記変数を
    割り付ける物理レジスタ割付部と、 前記物理レジスタ割付部によるレジスタの割付の決定を
    反映させて機械語コードを生成するコード生成部とを備
    えることを特徴とするデータ処理装置。
  6. 【請求項6】 実行プログラムのソースコードを読み込
    み、機械語コードに変換するデータ処理装置において、 前記実行プログラム中の変数に対して、当該変数が所定
    の関数呼び出しを越えて生存する場合に、当該関数の実
    行頻度に応じて、関数呼び出しが行われるとレジスタ値
    が破壊される揮発性レジスタまたは関数呼び出しが行わ
    れてもレジスタ値が保存される不揮発性レジスタのどち
    らかに当該変数を割り付けるレジスタ割付部と、 前記揮発性レジスタに割り付けられた変数を関数呼び出
    しの前後で退避・復元するコードを前記実行プログラム
    に付加し、前記不揮発性レジスタに割り付けられた変数
    を呼び出された関数内で退避・復元するコードを前記実
    行プログラムに付加するための情報を生成する退避・復
    元情報生成部と、 前記退避・復元情報生成部にて生成された情報に基づい
    て機械語コードを生成するコード生成部とを備えること
    を特徴とするデータ処理装置。
  7. 【請求項7】 コンピュータを制御して、所定の実行プ
    ログラム中の変数に対してレジスタ割付を行うプログラ
    ムであって、 前記実行プログラム中の所定の変数が所定の関数呼び出
    しを越えて生存するか否かを判断し、かつ当該変数が関
    数呼び出しを越えて生存する場合に、当該関数呼び出し
    がコンパイラにて生成された関数の呼び出しか、外部関
    数の呼び出しかを判断する処理と、 前記判断に基づいて、関数呼び出しが行われるとレジス
    タ値が破壊される揮発性レジスタ、関数呼び出しが行わ
    れてもレジスタ値が保存される不揮発性レジスタ、また
    は外部関数の呼び出しが行われてもレジスタ値が保存さ
    れるがコンパイラにて生成された関数の呼び出しが行わ
    れるとレジスタ値が破壊される準揮発性レジスタのいず
    れかに前記変数を割り付ける処理とを前記コンピュータ
    に実行させることを特徴とするプログラム。
  8. 【請求項8】 前記プログラムによる前記変数の割付先
    を決定する処理は、所定の変数の生存区間が外部関数の
    呼び出しのみを越える場合に、当該変数を前記準揮発性
    レジスタに割り付ける処理を含むことを特徴とする請求
    項7に記載のプログラム。
  9. 【請求項9】 コンピュータを制御して、所定の実行プ
    ログラム中の変数に対してレジスタ割付を行うプログラ
    ムであって、 前記実行プログラム中の変数のうち、生存区間が外部関
    数を跨ぎ、かつコンパイラにて生成された関数を跨がな
    いような変数を抽出する処理と、 抽出された変数を外部関数の呼び出しが行われてもレジ
    スタ値が保存されるが前記コンパイラにて生成された関
    数の呼び出しが行われるとレジスタ値が破壊される準揮
    発性レジスタに割り当てる処理とを前記コンピュータに
    実行させることを特徴とするプログラム。
  10. 【請求項10】 コンピュータを制御して、所定の実行
    プログラム中の変数に対してレジスタ割付を行うプログ
    ラムであって、 前記実行プログラムを実行した際の、当該実行プログラ
    ムを構成する関数の実行頻度に関する情報を取得する処
    理と、 前記実行プログラム中の変数に対して、当該変数が所定
    の関数呼び出しを越えて生存する場合に、当該関数の実
    行頻度に応じて、関数呼び出しが行われるとレジスタ値
    が破壊される揮発性レジスタまたは関数呼び出しが行わ
    れてもレジスタ値が保存される不揮発性レジスタのどち
    らかに当該変数を割り付ける処理とを前記コンピュータ
    に実行させることを特徴とするプログラム。
  11. 【請求項11】 前記プログラムによる前記変数の割付
    先を決定する処理は、所定の変数の生存区間が実行頻度
    の低い関数の呼び出しを越える場合に、当該変数を前記
    揮発性レジスタに割り付ける処理を含むことを特徴とす
    る請求項10に記載のプログラム。
  12. 【請求項12】 コンピュータを制御して、所定の実行
    プログラム中の変数に対してレジスタ割付を行うプログ
    ラムであって、 前記実行プログラムを実行した際の、当該実行プログラ
    ムを構成する関数の実行頻度に関する情報を取得する処
    理と、 前記実行プログラム中の所定の変数が所定の関数呼び出
    しを越えて生存する場合に、前記関数の実行頻度に応じ
    て、レジスタに割り付けられた当該変数を関数呼び出し
    の前後で退避・復元するコード、または当該変数を呼び
    出された関数内で退避・復元するコードのどちらかを当
    該実行プログラムに付加する処理とを前記コンピュータ
    に実行させることを特徴とするプログラム。
  13. 【請求項13】 前記プログラムによる前記変数の割付
    先を決定する処理は、レジスタに割り付けられた所定の
    変数の生存区間が実行頻度の低い関数の呼び出しを越え
    る場合に、前記変数を呼び出された関数内で退避・復元
    するコードを前記実行プログラムに付加する処理を含む
    ことを特徴とする請求項12に記載のプログラム。
  14. 【請求項14】 コンピュータを制御して、所定の実行
    プログラム中の変数に対してレジスタ割付を行うプログ
    ラムであって、 前記実行プログラム中の所定の変数を、 A群:生存区間がコンパイラにて生成された関数であっ
    て頻繁に実行される関数を跨ぐような変数と、 B群:生存区間が頻繁に実行される外部関数を跨ぎ、か
    つ前記コンパイラにて生成された関数であって頻繁に実
    行される関数を跨がないような変数と、 C群:その他の変数と に分類する処理と、A群に分類された変数を関数呼び出
    しが行われてもレジスタ値が保存される不揮発性レジス
    タに割り当て、B群に分類された変数を外部関数の呼び
    出しが行われてもレジスタ値が保存されるが前記コンパ
    イラにて生成された関数の呼び出しが行われるとレジス
    タ値が破壊される準揮発性レジスタに割り当て、C群に
    分類された変数を関数呼び出しが行われるとレジスタ値
    が破壊される揮発性レジスタに割り当てる処理とを前記
    コンピュータに実行させることを特徴とするプログラ
    ム。
  15. 【請求項15】 前記プログラムは、コンピュータが前
    記実行プログラムを実行する際に動的(ダイナミック)
    にコンパイルを行うコンパイラであることを特徴とする
    請求項14に記載のプログラム。
  16. 【請求項16】 コンピュータを制御して所定の実行プ
    ログラム中の変数に対してレジスタ割付を行うプログラ
    ムを、当該コンピュータが読み取り可能に記録した記録
    媒体であって、 前記プログラムは、 前記実行プログラム中の所定の変数が所定の関数呼び出
    しを越えて生存するか否かを判断し、かつ当該変数が関
    数呼び出しを越えて生存する場合に、当該関数呼び出し
    がコンパイラにて生成された関数の呼び出しか、外部関
    数の呼び出しかを判断する処理と、 前記判断に基づいて、関数呼び出しが行われるとレジス
    タ値が破壊される揮発性レジスタ、関数呼び出しが行わ
    れてもレジスタ値が保存される不揮発性レジスタ、また
    は外部関数の呼び出しが行われてもレジスタ値が保存さ
    れるがコンパイラにて生成された関数の呼び出しが行わ
    れるとレジスタ値が破壊される準揮発性レジスタのいず
    れかに前記変数を割り付ける処理とを前記コンピュータ
    に実行させることを特徴とする記録媒体。
  17. 【請求項17】 コンピュータを制御して所定の実行プ
    ログラム中の変数に対してレジスタ割付を行うプログラ
    ムを、当該コンピュータが読み取り可能に記録した記録
    媒体であって、 前記プログラムは、 前記実行プログラムを実行した際の、当該実行プログラ
    ムを構成する関数の実行頻度に関する情報を取得する処
    理と、 前記実行プログラム中の変数に対して、当該変数が所定
    の関数呼び出しを越えて生存する場合に、当該関数の実
    行頻度に応じて、関数呼び出しが行われるとレジスタ値
    が破壊される揮発性レジスタまたは関数呼び出しが行わ
    れてもレジスタ値が保存される不揮発性レジスタのどち
    らかに当該変数を割り付ける処理とを前記コンピュータ
    に実行させることを特徴とする記録媒体。
  18. 【請求項18】 コンピュータを制御して所定の実行プ
    ログラム中の変数に対してレジスタ割付を行うプログラ
    ムを、当該コンピュータが読み取り可能に記録した記録
    媒体であって、 前記プログラムは、 前記実行プログラムを実行した際の、当該実行プログラ
    ムを構成する関数の実行頻度に関する情報を取得する処
    理と、 前記実行プログラム中の所定の変数が所定の関数呼び出
    しを越えて生存する場合に、前記関数の実行頻度に応じ
    て、レジスタに割り付けられた当該変数を関数呼び出し
    の前後で退避・復元するコード、または当該変数を呼び
    出された関数内で退避・復元するコードのどちらかを当
    該実行プログラムに付加する処理とを前記コンピュータ
    に実行させることを特徴とする記録媒体。
JP2002051246A 2002-02-27 2002-02-27 プログラム変換方法、これを用いたデータ処理装置及びプログラム Expired - Fee Related JP3871312B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2002051246A JP3871312B2 (ja) 2002-02-27 2002-02-27 プログラム変換方法、これを用いたデータ処理装置及びプログラム
US10/375,761 US7219334B2 (en) 2002-02-27 2003-02-26 Program conversion method, data processing apparatus and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002051246A JP3871312B2 (ja) 2002-02-27 2002-02-27 プログラム変換方法、これを用いたデータ処理装置及びプログラム

Publications (2)

Publication Number Publication Date
JP2003256215A true JP2003256215A (ja) 2003-09-10
JP3871312B2 JP3871312B2 (ja) 2007-01-24

Family

ID=28034791

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002051246A Expired - Fee Related JP3871312B2 (ja) 2002-02-27 2002-02-27 プログラム変換方法、これを用いたデータ処理装置及びプログラム

Country Status (2)

Country Link
US (1) US7219334B2 (ja)
JP (1) JP3871312B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009301326A (ja) * 2008-06-13 2009-12-24 Nec System Technologies Ltd コンパイル装置、コンパイラ、コンパイル方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7539983B2 (en) * 2005-01-14 2009-05-26 Microsoft Corporation Tool for processing software programs using modified live-ness definition
US8225295B2 (en) * 2007-09-21 2012-07-17 Jens Palsberg Register allocation by puzzle solving
US20100199270A1 (en) * 2009-01-30 2010-08-05 Ivan Baev System, method, and computer-program product for scalable region-based register allocation in compilers
JP2011141676A (ja) * 2010-01-06 2011-07-21 Toshiba Corp 言語処理装置、言語処理方法およびコンピュータプログラムプロダクト
US8832672B2 (en) * 2011-01-28 2014-09-09 International Business Machines Corporation Ensuring register availability for dynamic binary optimization
KR102492871B1 (ko) * 2015-12-15 2023-01-30 삼성전자주식회사 사용자 단말장치, 서버, 및 그 어플리케이션 실행 방법

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
US20020166115A1 (en) * 1999-06-10 2002-11-07 A.V.S. Sastry System and method for computer program compilation using scalar register promotion and static single assignment representation
JP3641997B2 (ja) * 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009301326A (ja) * 2008-06-13 2009-12-24 Nec System Technologies Ltd コンパイル装置、コンパイラ、コンパイル方法

Also Published As

Publication number Publication date
US20030177479A1 (en) 2003-09-18
JP3871312B2 (ja) 2007-01-24
US7219334B2 (en) 2007-05-15

Similar Documents

Publication Publication Date Title
JP3220055B2 (ja) 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。
US6023583A (en) Optimized variable allocation method, optimized variable allocation system and computer-readable memory containing an optimized variable allocation program
US7725883B1 (en) Program interpreter
JP5897816B2 (ja) 依存性グラフのパラメータのスコーピング
US7069548B2 (en) Inter-procedure global register allocation method
US6925639B2 (en) Method and system for register allocation
US5960197A (en) Compiler dispatch function for object-oriented C
US7143402B2 (en) Method and apparatus for precision optimization in compiled programs
JP2002527811A (ja) オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法
JP2012164350A (ja) 携帯型データ記憶媒体のメモリ管理
JP2003196106A (ja) プログラム変換方法、コンピュータ装置及びプログラム
JPH09212369A (ja) 記憶域割り付け装置
US20020062478A1 (en) Compiler for compiling source programs in an object-oriented programming language
US20070300210A1 (en) Compiling device, list vector area assignment optimization method, and computer-readable recording medium having compiler program recorded thereon
JP2002366366A (ja) コンパイル方法、コード生成方法、スタックレジスタ使用方法、コンパイラ、これらを実現するプログラム及び記憶媒体
JP2003256215A (ja) プログラム変換方法、これを用いたデータ処理装置及びプログラム
US20090187897A1 (en) Compiling method and compiling program
US20030079210A1 (en) Integrated register allocator in a compiler
US6571387B1 (en) Method and computer program product for global minimization of sign-extension and zero-extension operations
JP2005129001A (ja) プログラム実行装置、マイクロプロセッサ及びプログラム実行方法
JP3790707B2 (ja) プログラム変換方法、これを用いたコンピュータ装置及びプログラム
KR20060035077A (ko) 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
US6134708A (en) Program compilation execution system
JP2000353097A (ja) 低密回の干渉グラフを生成する方法および装置
WO2001057649A2 (en) Global constant pool to allow deletion of constant pool entries

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060605

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060613

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060828

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060926

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20060929

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20061016

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091027

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101027

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101027

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111027

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees