JP4093484B2 - コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体 - Google Patents

コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体 Download PDF

Info

Publication number
JP4093484B2
JP4093484B2 JP2004019506A JP2004019506A JP4093484B2 JP 4093484 B2 JP4093484 B2 JP 4093484B2 JP 2004019506 A JP2004019506 A JP 2004019506A JP 2004019506 A JP2004019506 A JP 2004019506A JP 4093484 B2 JP4093484 B2 JP 4093484B2
Authority
JP
Japan
Prior art keywords
instruction
variable
content
storage area
instruction sequence
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 - Fee Related
Application number
JP2004019506A
Other languages
English (en)
Other versions
JP2005215830A (ja
Inventor
基弘 川人
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 JP2004019506A priority Critical patent/JP4093484B2/ja
Priority to US11/045,923 priority patent/US7409678B2/en
Publication of JP2005215830A publication Critical patent/JP2005215830A/ja
Application granted granted Critical
Publication of JP4093484B2 publication Critical patent/JP4093484B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体に関する。特に、本発明は、プログラムの所定の変数が特定の内容であるものとして特殊化する最適化を行うコンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体に関する。
近年、プログラマの負担を軽減し、プログラムの堅牢性・保守性等を高める目的で、オブジェクト指向言語等のプログラム言語が広く用いられている。プログラム言語で記述されたプログラムを機械語に翻訳するコンパイラは、一般的に、プログラムの実行速度を向上するために、様々な最適化を行う。
従来、プログラムの実行速度を向上させる最適化の1つとして、プログラムの一部を、プログラムにより参照される変数が特定の値である場合の処理に特殊化する手法(specialization)が提案されている。例えば、プログラム内の各メソッドについて、そのメソッドが呼び出される毎に変数の値が特定の値であるか判断させ、その判断結果に応じて、特殊化した命令列及び特殊化していない命令列の何れかに分岐して実行させる手法が提案されている(特許文献1参照。)。
また、オブジェクト内でのみ使用されるプライベート変数(private variable)について、そのオブジェクトの生成時にのみ、その変数に値が代入されることが予め分かっている場合に、当該オブジェクト内でその変数を使用する全てのメソッドを特殊化してコンパイルする技術が用いられている(非特許文献1参照。)。
非特許文献2については後述する。
特開2002−259135号公報 藤波順久 著。「オブジェクト指向言語の実行時最適化。」日本ソフトウェア科学会第12回大会論文集、1995年9月、245-248ページ 川人基弘、小松秀昭、中谷登志男 著。「Java言語に対する投機的なメモリアクセスの最適化手法。」情報処理学会論文誌、Vol. 44、No. 3、883-896ページ。2003年。(Javaは登録商標)
上記特許文献1の技術によると、コンパイラは、変数の値が特定の値であるか否か判断する命令を、メソッドの処理の冒頭に生成する。このため、そのメソッドが呼び出される毎に、この判断処理が毎回行なわれる。しかしながら、変数の値が特定の値であるか否かを一旦判断すれば、その後にその変数の値が更新されない限り、この判断を再度行う必要はない。このため、不必要な判断処理を行っている場合があった。
更に、この技術によると、コンパイラは、特殊化により短縮される処理時間が、変数の値が特定の値であるか否かの判断に要する処理時間を超える場合にのみ、プログラム全体の効率が向上すると判断して、プログラムを特殊化してコンパイルする。従って、不必要な判断処理の処理時間により、プログラムの特殊化が適切に行われない場合があった。
また、上記非特許文献1によると、コンパイラは、変数にある特定の値が代入され易い場合であっても、その値が必ず代入されることが確かめられなければ、最適化を行うことができない。このため、特殊化すれば実行効率が高まる場合であっても最適化が適切に行なわれない場合があった。
そこで本発明は、上記の課題を解決することのできるコンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
上記課題を解決するために、本発明の第1の形態においては、コンピュータの制御によりプログラムを最適化する最適化コンパイラ装置であって、オブジェクト指向プログラム言語で記述された対象プログラム、および、対象プログラムにおいて呼び出される各メソッドの識別情報に当該メソッドをコンパイルした命令列のアドレスを対応付けたメソッドテーブルを記憶している記憶装置と、前記記憶装置にアクセスして、前記対象プログラムにおいて、変数の内容又は変数により指定される記憶領域の内容を更新する更新命令を前記コンピュータのCPUの制御により検出する更新命令検出部と、呼び出し先のメソッドの識別情報に対応するアドレスを前記メソッドテーブルから読み出すと共に当該アドレスに制御を移す制御移行命令、および、当該制御移行命令により制御が移行されて、前記変数の内容又は前記記憶領域の内容に応じて異なる処理を行う命令列を前記CPUの制御により検出する命令列検出部と、検出した当該命令列を、前記CPUの制御により、前記変数の内容又は前記記憶領域の内容が予め定められた特定の内容である場合の処理に最適化してコンパイルし、前記記憶装置に格納する命令列コンパイル部と、前記対象プログラムにおける、前記更新命令から前記制御移行命令までの間に、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合に実行され、前記命令列コンパイル部により最適化された命令列のアドレスを前記メソッドテーブルに格納する命令である設定命令を前記CPUの制御により生成して、当該設定命令を生成した対象プログラムを前記記憶装置に格納する設定命令生成部とを備える最適化コンパイラ装置、コンピュータを最適化コンパイラ装置として機能させるコンパイラプログラム、コンパイラプログラムを記録した記録媒体、及び最適化コンパイラ装置を用いたコンパイル方法を提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
本発明によれば、より多くの命令列を、変数が特定の値である場合の処理に最適化してコンパイルすることができる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、最適化コンパイラ10の機能ブロック図である。最適化コンパイラ10は、オブジェクト指向言語等で記述された最適化対象の対象プログラム20を入力し、対象プログラム20において呼び出される各メソッドを、対象プログラム20のオブジェクトで用いられるメンバー変数が所定の内容である場合の処理に最適化する。これにより、対象プログラム20の実行速度を高めることを目的とする。
最適化コンパイラ10は、更新命令検出部100と、本発明に係る命令列検出部の一例であるメソッド検出部110と、最適化効果算出部120と、最適化オーバヘッド算出部130と、本発明に係る命令列コンパイル部の一例であるメソッドコンパイル部140と、設定命令生成部150とを備える。更新命令検出部100は、対象プログラム20における各変数について、その変数の内容またはその変数により指定される記憶領域の内容を更新する更新命令を検出する。
例えば、更新命令検出部100は、その変数が数値を示す場合に、その変数に数値を代入する代入命令を検出してもよいし、その変数の数値を増加するインクリメント命令を検出してもよい。また、更新命令検出部100は、その変数が配列変数である場合に、その配列変数を初期化するべくその配列変数の大きさを示す数値をその変数により指定される記憶領域に格納する命令を、更新命令として検出してもよい。
メソッド検出部110は、対象プログラム20において、他の命令列に制御を移す制御移行命令により制御が移行されて、変数の内容又は記憶領域の内容に応じて異なる処理を行う命令列を検出する。ここで、命令列とは、例えば、オブジェクト指向言語におけるメソッドである。これに代えて、命令列とは、関数型プログラム言語における関数・手続であってもよいし、所定のサブルーチンであってもよい。
また、制御移行命令とは、メソッドを呼び出して実行させる呼出命令である。この命令は、メソッド・インボーク命令又はメソッド・コール命令とも呼ばれるが、本実施例の以降の説明においては、この命令を呼出命令と呼ぶ。これに代えて、対象プログラム20が、関数型プログラム言語で記述されている場合には、制御移行命令とは、関数呼出命令であってもよい。更に他の例として、制御移行命令とは、他の命令列に処理を移す場合にその後に元の命令列に制御を戻すための処理を行わない、分岐命令であってもよい。
そして、最適化効果算出部120は、メソッド検出部110が検出した各メソッドを、変数の内容又は記憶領域の内容が特定の内容である場合の処理に最適化した場合に、当該処理に最適化せずにコンパイルした場合と比較して、短縮される実行時間の見積を算出する。そして、最適化効果算出部120は、算出した各メソッドについての当該実行時間の見積に、そのメソッドの実行頻度を乗じることにより、最適化の効果を算出する。
最適化オーバヘッド算出部130は、変数の内容又は記憶領域の内容が特定の内容である場合に実行され、メソッド呼出命令の呼出先アドレスを、メソッドコンパイル部140により最適化される命令列のアドレスに設定する設定命令を生成した場合における、その設定命令に要する処理時間の見積を計算する。そして、最適化オーバヘッド算出部130は、算出したその処理時間の見積に、その設定命令の実行頻度の見積を乗じることにより、最適化のオーバヘッドを算出する。
続いて、メソッドコンパイル部140は、各メソッドについての最適化の効果の合計が、各設定命令についての最適化のオーバヘッドの合計を超える場合に、メソッド検出部110により検出された各メソッドを、当該変数の内容又は当該記憶領域の内容が特定の内容である場合の処理に最適化してコンパイルする。この最適化は、特殊化(specialization)と呼ばれる最適化であり、例えば、メソッドコンパイル部140は、当該変数に基づく条件分岐命令を削除して、その変数が特定の値である場合に実行される分岐先の命令列のみをコンパイルする最適化を行ってもよい。
なお、以降の説明において、メソッドコンパイル部140により変数の内容又は記憶領域の内容が特定の内容である場合の処理に最適化されたメソッドを、その変数又はその記憶領域について特殊化されたメソッドと呼ぶ。
同様に、当該最適化の効果の合計が当該最適化のオーバヘッドの合計を超える場合に、更新命令毎に、設定命令生成部150は、その更新命令から何れかの呼出命令までの間に、設定命令を生成する。ここで、好ましくは、設定命令生成部150は、各更新命令が実行されるメソッド内に、設定命令を生成する。一例としては、設定命令生成部150は、各更新命令の直後に実行される箇所に、設定命令を生成する。そして、設定命令生成部150は、以上の様に最適化された対象プログラム20を、コンパイル結果の結果プログラム30として出力する。
図2は、最適化コンパイラ10がメソッドを最適化する処理の動作フローの一例を示す。最適化コンパイラ10は、対象プログラム20における各変数又はその変数により指定される各記憶領域について、以下の処理を繰り返す(S200)。まず、更新命令検出部100は、その変数又はその記憶領域の内容を更新する全ての更新命令を検出する(S210)。一部の更新命令だけしか検出することができなかった場合、即ち全ての更新命令を検出できたと保障することはできない場合には(S220:NO)、最適化コンパイラ10は、S270に処理を移して、次の変数又は記憶領域についての判断を繰り返す。一方、全ての更新命令が検出できた場合に(S220:YES)、メソッド検出部110は、その変数又はその記憶領域の内容に応じて異なる処理を行う全てのメソッドを検出する(S230)。
続いて、最適化効果算出部120は、検出した各メソッドについて、そのメソッドを、その変数又はその記憶領域の内容が特定の内容である場合の処理に最適化した場合に、その処理に最適化せずにコンパイルした場合と比較して、短縮される実行時間の見積を算出する(S240)。例えば、最適化効果算出部120は、その処理に最適化した場合に生成される機械語コードの実行サイクル数から、その処理に最適化しない場合に生成される機械語コードの実行サイクル数を減じた値を、短縮される実行時間の見積として算出してもよい。
より具体的には、最適化効果算出部120は、メソッド検出部110が検出したメソッドにおいて、当該変数又は当該記憶領域の内容を読み出す命令より先に実行される範囲に、当該変数又は当該記憶領域の内容を変更し得る命令が含まれないことを条件として、当該変数又は当該記憶領域の内容をメモリから読み出す命令を削除することにより短縮される実行時間の見積を算出する。ここで、変数又は変数により指定される記憶領域の内容を変更し得る命令とは、例えば、メモリの何れかのアドレスにデータを格納するストア命令、メソッドの呼出命令、又は他のスレッドと同期を取る命令等である。
但し、最適化効果算出部120は、当該変数又は当該記憶領域の内容を読み出す命令に先立って実行されるストア命令が、当該変数又は当該記憶領域の内容を変更しないことを、エイリアス解析等により判断した場合には、このストア命令を、当該変数又は当該記憶領域の内容を変更し得る命令から除外する。この解析は、例えば、非特許文献2に記載される技術により実現される。同様に、最適化効果算出部120は、当該変数又は当該記憶領域の内容を読み出す命令に先立って実行される呼出命令の呼出先のメソッドが、当該変数又は当該記憶領域の内容を変更しないと判断した場合には、この呼出命令を、当該変数又は当該記憶領域の内容を変更し得る命令から除外する。
更に、対象プログラム20を記述したプログラム言語によっては、プログラマは、対象プログラム20の各変数に、当該変数の内容が他のスレッドの処理により更新され得ることを示すボラタイル属性を定めることができる場合がある。このような場合には、最適化効果算出部120は、検出した更新命令により更新される変数又はその更新命令により更新される記憶領域を指定する変数に、このボラタイル属性が定められていないことを更に条件として、当該変数又は当該記憶領域の内容をメモリから読み出す命令を削除することにより短縮される実行時間の見積を算出する。但し、一般的に、プログラマが変数にボラタイル属性を定めることは稀である。
そして、最適化効果算出部120は、各メソッドについて、そのメソッドについて算出したその実行時間の見積に、そのメソッドの実行頻度の見積を乗じることにより、最適化の効果を算出する。例えば、最適化効果算出部120は、各メソッドの実行頻度として、対象プログラム20が1回実行される毎にそのメソッドが呼び出される回数を取得してもよい。より具体的には、最適化コンパイラ10が、対象プログラム20を実行しているインタプリタからの指示で対象プログラム20をコンパイルする実行時コンパイラである場合には、最適化効果算出部120は、このインタプリタが各メソッドを実行していた回数を取得してもよい。
続いて、最適化オーバヘッド算出部130は、メソッドコンパイル部140により設定命令が生成された場合に、その設定命令に要する処理時間の見積を計算する(S250)。そして、最適化オーバヘッド算出部130は、算出したその処理時間の見積に、その設定命令の実行頻度の見積を乗じることにより、最適化のオーバヘッドを算出する。最適化効果算出部120と同様に、最適化オーバヘッド算出部130は、設定命令の実行頻度の見積として、対象プログラム20において設定命令を生成すべき箇所が実行される回数を取得してもよい。より具体的には、最適化コンパイラ10が、対象プログラム20を実行しているインタプリタからの指示で対象プログラム20をコンパイルする実行時コンパイラである場合には、最適化オーバヘッド算出部130は、このインタプリタが各箇所を実行していた回数を取得してもよい。
続いて、メソッドコンパイル部140は、各メソッドについての最適化の効果の合計が、各設定命令についての最適化のオーバヘッドの合計を超える場合に、メソッド検出部110により検出された各メソッドを、当該変数の内容又は当該記憶領域の内容が特定の内容である場合の処理に最適化してコンパイルすべきものであると判断する(S260)。
最適化オーバヘッド算出部130は、対象プログラム20内の各命令の実行頻度を取得できない場合には、以上の処理に代えて、コンストラクタ内に生成する設定命令に要する処理時間を、極めて小さい、例えば0であると取り扱ってもよい。この結果、メソッドコンパイル部140は、オブジェクトのコンストラクタ内に生成する設定命令の実行頻度が極めて小さいとみなすことができるので、メソッド検出部110により検出されたメソッドを特殊化してコンパイルすることができる。
最適化コンパイラ10は、以上の処理を、各変数又はその変数により指定される各記憶領域について繰り返す(S270)。これにより、最適化コンパイラ10は、何れのメソッドを、何れの変数又は記憶領域が特定の値である場合の処理に最適化するべきかを判断することができる。
図3は、図2に続く処理の動作フローを示す。最適化コンパイラ10は、図2の処理における判断の結果に基づいて、以下の処理を各メソッドについて繰り返す(S300)。まず、メソッドコンパイル部140は、当該メソッドを特殊化せずにコンパイルする(S310)。そして、メソッドコンパイル部140は、当該メソッドが、特殊化してコンパイルするべきメソッドか否かを判断する(S320)。特殊化してコンパイルするべきメソッドである場合に(S320:YES)、メソッドコンパイル部140は、そのメソッドを、S260において判断された各変数又は各記憶領域が特定の値である場合の処理に特殊化してコンパイルする(S330)。
メソッドコンパイル部140が特殊化の対象とする変数又は記憶領域は複数でもよく、例えば、メソッドコンパイル部140は、あるメソッドを、ある変数が第1の特定の値であり、他の変数が第2の特定の値である場合の処理に特殊化してコンパイルしてもよい。以上の処理を、最適化コンパイラ10は、各メソッドについて繰り返す(S340)。続いて、設定命令生成部150は、特殊化すべきであると判断した変数の各更新命令について、その更新命令から、その更新命令により更新される変数又は記憶領域の内容について特殊化したメソッドの呼出命令までの間に、設定命令を生成する(S350)。
以上、本図において、最適化コンパイラ10がメソッドを最適化する処理の一例を説明したが、最適化コンパイラ10による処理順序はこの例に限定されるものではない。例えば、最適化コンパイラ10が、メソッド呼出の毎に呼び出されるメソッドをコンパイルする動的コンパイラである場合には、S310及びS330に示すコンパイル処理は、メソッド呼出のタイミングで行なわれてもよい。
図4は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第1の例を示す。本図を用いて、設定命令生成部150が設定命令を生成する処理の詳細を説明する。図4(a)は、最適化前の対象プログラム20を示す。更新命令検出部100は、更新命令として、オブジェクトthisのメンバー変数Vに、何らかの値を代入する代入命令(1)を検出する。なお、オブジェクトthisのメンバー変数Vを、this.Vと表記する。
図4(b)は、最適化後の対象プログラム、即ち結果プログラム30を示す。結果プログラム30は、実際には、コンピュータによって実行可能な機械語の命令列にコンパイルされている。本図においては、説明の便宜上、結果プログラム30を、機械語の命令列の意味を示すソースプログラムとして表記する。以降の各図の説明における最適化後の対象プログラムについても同様である。
設定命令生成部150は、変数this.Vの内容に応じて異なる処理をするメソッドを最適化すると判断した場合に、代入命令(1)から呼出命令までの間、例えば、代入命令の直後に実行される箇所に、設定命令(2)を生成する。より具体的には、まず、設定命令生成部150は、設定命令として、this.Vが特殊化の条件を満たす場合に実行され、thisのメソッドテーブルであるmethod_tableを、特殊化したメソッドのアドレスを含むメソッドテーブルに設定する命令を4行目に生成する。
ここで、オブジェクトthisのメソッドテーブルとは、オブジェクトthisの複数のメソッドについて、各メソッドの識別情報を、そのメソッドをコンパイルした命令列のアドレスに対応付けたデータ構造である。即ち、呼出命令は、呼び出す対象のメソッドの識別情報に対応付けられたアドレスをメソッドテーブルから選択して、そのアドレスに制御を移行することにより、そのメソッドを呼び出す。設定命令は、このメソッドテーブルを書換えることにより、呼出命令の呼出先アドレスを設定する。
次に、設定命令生成部150は、設定命令として、呼出命令のオペランドを、this.Vについて特殊化したメソッドのアドレスに書換える命令を、5行目に生成する。呼出命令は、他の例として、制御の移行を指示する命令コードと、制御の移行先アドレスを示すオペランドとを含む場合がある。この呼出命令は、メソッドテーブルを用いることなく、呼出先アドレスを直接オペランドとして指定する。設定命令は、このような呼出命令のオペランドを、this.Vについて特殊化したメソッドのアドレスに書換えることにより、この呼出命令の呼出先アドレスを適切に設定することができる。
更に、設定命令生成部150は、設定命令として、this.Vが特殊化の条件を満たさない場合に実行され、オブジェクトthisのメソッドテーブルを、各メソッドをthis.Vについて特殊化せずにコンパイルした命令列へのアドレスのみを含むメソッドテーブル(通常のメソッドテーブル)に書換える命令を7行目に生成する。そして、同様に、設定命令生成部150は、this.Vが特殊化の条件を満たさない場合に実行され、呼出命令のオペランドを、通常のメソッドのアドレス、即ち、this.Vについて特殊化せずにコンパイルした命令列のアドレスに書換える命令を8行目に生成する。
また、この代入命令(1)が、複数のスレッドにより並行して実行される場合には、設定命令生成部150は、1行目から10行目を何れか1つのスレッドにより排他的に実行させる旨を示すsynchronized命令を生成する。この結果、3行目においてthis.Vが特殊化の条件を満たすと判断してから、4行目においてメソッドテーブルを書換える処理までの間に、this.Vの内容が他のスレッドにより変更される事態を防ぐことができる。
なお、好ましくは、設定命令生成部150は、this.Vの内容を更新する更新命令が、常に単一のスレッドにより実行されると判断した場合に、synchronized命令を生成しな。この場合、synchronized命令に要する処理時間を削減することにより対象プログラム20をより高速に実行させることができる。
図5は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第2の例を示す。図5(a)は、最適化前の対象プログラム20を示す。更新命令検出部100は、更新命令として、オブジェクトthisのメンバー変数V1に、何らかの値を代入する代入命令(1)を検出する。なお、オブジェクトthisのメンバー変数V1を、this.V1と表記する。また、このオブジェクトthisは、メンバー変数であるV2を更に有している。オブジェクトthisのメンバー変数V2を、同様に、this.V2と表記する。
また、本図の説明の前提として、メソッドコンパイル部140は、対象プログラム20におけるあるメソッド群を、this.V1及びthis.V2について特殊化してコンパイルする。更に、this.V1及びthis.V2の何れかが特殊化の条件を満たさない事態に備え、メソッドコンパイル部140は、そのメソッド群を、this.V1のみについて特殊化してコンパイルすると共に、this.V2のみについて特殊化してコンパイルする。更に、メソッドコンパイル部140は、そのメソッド群を、this.V1及びthis.V2のいずれについても特殊化せずにコンパイルする。
図5(b)は、最適化後の対象プログラム、即ち結果プログラム30を示す。設定命令生成部150は、変数this.V1又はthis.V2の内容に応じて異なる処理をするメソッドを最適化すると判断した場合に、代入命令(1)から呼出命令までの間、例えば、代入命令の直後に実行される箇所に、設定命令(2)を生成する。より具体的には、まず、設定命令生成部150は、設定命令(2)として、this.V1が特殊化の条件を満たすか否か判断する命令を3行目に生成する。
次に、設定命令生成部150は、オブジェクトthisのメソッドテーブルが、this.V2に特殊化したメソッドのアドレスを含むメソッドテーブルであるか否か判断する命令を4行目に生成する。この命令により、this.V1の内容を更新する更新命令が実行された時に、既に他の設定命令によって、thisのメソッドテーブルに、this.V2に特殊化したメソッドのアドレスが設定されているか否か判断することができる。
そして、設定命令生成部150は、3行目及び4行目の双方の命令による判断結果が真である場合、即ち、this.V1及びthis.V2の双方が特殊化の条件を満たす場合に実行される命令を以下のように生成する。まず、設定命令生成部150は、オブジェクトthisのメソッドテーブルを、this.V1及びthis.V2の双方について特殊化したメソッドのアドレスを含むメソッドテーブルに書換える命令を、5行目に生成する。そして、設定命令生成部150は、各呼出命令のオペランドを、this.V1及びthis.V2の双方について特殊化したメソッドのアドレスに書換える命令を6行目に生成する。
また、設定命令生成部150は、3行目の命令による判断結果が真でありかつ4行目の判断結果が偽である場合、即ち、this.V1が特殊化の条件を満たしthis.V2が特殊化の条件を満たさない場合に実行される命令を以下のように生成する。まず、設定命令生成部150は、オブジェクトthisのメソッドテーブルを、this.V1について特殊化したメソッドのアドレスを含むメソッドテーブルに書換える命令を、8行目に生成する。そして、設定命令生成部150は、各呼出命令のオペランドを、this.V1について特殊化したメソッドのアドレスに書換える命令を9行目に生成する。
続いて、設定命令生成部150は、オブジェクトthis.V1が特殊化の条件を満たさない場合に実行され、オブジェクトthisのメソッドテーブルが、this.V2に特殊化したメソッドのアドレスを含むメソッドテーブルであるか否か判断する命令を12行目に生成する。
そして、設定命令生成部150は、3行目による判断結果が偽であり、12行目による判断結果が真である場合、即ち、this.V1が特殊化の条件を満たさず、this.V2が特殊化の条件を満たす場合に実行される命令を以下のように生成する。まず、設定命令生成部150は、オブジェクトthisのメソッドテーブルを、this.V2について特殊化したメソッドのアドレスを含むメソッドテーブルに書換える命令を、13行目に生成する。そして、設定命令生成部150は、各呼出命令のオペランドを、this.V2について特殊化したメソッドのアドレスに書換える命令を14行目に生成する。
また、設定命令生成部150は、3行目及び12行目の双方の命令による判断結果が偽である場合、即ち、this.V1及びthis.V2のいずれもが特殊化の条件を満たさない場合に実行される命令を以下のように生成する。まず、設定命令生成部150は、オブジェクトthisのメソッドテーブルを、this.V1及びthis.V2の何れについても特殊化されていないメソッドのアドレスを含むメソッドテーブルに書換える命令を、16行目に生成する。そして、設定命令生成部150は、各呼出命令のオペランドを、this.V1及びthis.V2の何れについても特殊化されていないメソッドのアドレスに書換える命令を17行目に生成する。
以上、本図の例で示すように、メソッドを複数の変数について特殊化した場合には、設定命令生成部150は、各更新命令が実行される毎に実行され、その実行時点において何れの変数が特殊化の条件を満たすか否かを判断する命令を生成する。これにより、特殊化の条件を満たす変数の組に応じて、できる限り特殊化したメソッドを実行させることができる。
図6は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第3の例における、対象プログラム20を示す。対象プログラム20は、オブジェクトのコンストラクタでないメソッドscanSubset、init、及びfrequentlyCalledMethodを含む。そして、メソッドfrequentlyCalledMethodは、メソッドscanSubset及びinitと比較して、頻繁に実行されることが分かっている。また、対象プログラム20は、オブジェクトのメンバー変数であるfCalledを定義している。
本図の対象プログラム20は、コンストラクタでないメソッドscanSubset及びメソッドinit内に更新命令を含むので、非特許文献1の技術によっては最適化されない。また、仮に対象プログラム20が、特許文献1の技術により最適化された場合には、変数fCalledの内容が0か否かに応じて処理1又は処理2を実行する命令列が、frequentlyCalledMethod内に生成される。この場合、最適化前の処理と比較して速度が向上しない。実際には、特許文献1に記載のインパクト解析により、最適化の効果がないと判断されるので、この最適化は行なわれない。このように、本図の対象プログラム20を、従来の技術により最適化することはできなかった。これに対し、本実施例に係る最適化コンパイラ10は、対象プログラム20を最適化することができる。以下にその詳細を示す。
まず、本図の例におけるオブジェクトのメンバー変数であるfCalledには、対象プログラム20のうち、その変数の内容を読み書きする命令の実行が許可される読み書き許可範囲を示す属性が定められている。例えば、変数fCalledには、1行目において、その変数の内容を読み書きする命令の実行が、その変数の属するオブジェクト内のみにおいて許可される旨を示す、private属性が定められている。
また、読み書き許可範囲を示す属性とは、private属性の他、その変数の内容を読み書きする命令の実行を、その変数が属するオブジェクトを承継して生成された他のオブジェクトのみにおいて許可するprotected属性であってもよいし、その変数の内容を読み書きする命令の実行を、何れのオブジェクトにおいても許可するpublic属性であってもよい。更に他の例として、読み書き許可範囲を示す属性とは、一旦値が代入された後は変更されないことを示すfinal属性であってもよい。
更新命令検出部100は、変数fCalledの読み書き許可範囲、例えばこの変数の属するオブジェクト内の各メソッドから、その変数の全ての更新命令を検出する。例えば、更新命令検出部100は、変数fCalledの更新命令として、この変数をインクリメントするインクリメント命令(1)を5行目において検出し、この変数に0を代入する代入命令(2)を7行目において検出する。
続いて、メソッド検出部110は、変数fCalledの読み書き許可範囲、例えばこの変数の属するオブジェクト内の各メソッドから、その変数に応じて異なる処理を行うメソッドを検出する。例えば、メソッド検出部110は、変数fCalledが0か否かにより異なる処理を行うメソッドfrequentlyCalledMethodを、8行目から13行目において検出する。
図7は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第3の例における、結果プログラム30を示す。メソッドコンパイル部140は、メソッドfrequentlyCalledMethodを、変数fCalledの内容が0である場合の処理に特殊化してコンパイルすることにより、16行目及び17行目に、frequentlyCalledMethod_Specialを生成する。このメソッドを特殊化命令列と呼ぶ。また、メソッドコンパイル部140は、メソッドfrequentlyCalledMethodを、変数fCalledの内容が0である場合の処理に最適化せずにコンパイルすることにより、10行目から15行目にメソッドfrequentlyCalledMethodをコンパイルした命令列を生成する。この命令列を、通常命令列と呼ぶ。
そして、設定命令生成部150は、5行目のインクリメント命令(1)の直後に実行される6行目に、オブジェクトthisのメソッドテーブルであるmethod_tableに対して、メソッドfrequentlyCalledMethodのアドレスを含む通常のメソッドテーブルを設定する設定命令を生成する。この結果、fCalledの値がインクリメントされて数値が不明である場合には、特殊化していないメソッドfrequentlyCalledMethodを実行させることができる。
また、設定命令生成部150は、8行目の代入命令(2)の直後に実行される9行目に、method_tableに対して、メソッドfrequentlyCalledMethod_Specialのアドレスを含むメソッドテーブルを設定する設定命令を生成する。この結果、変数fCalledに0が代入された場合には、特殊化したメソッドfrequentlyCalledMethod_Specialを実行させて処理を効率化できる。
このように、設定命令生成部150は、更新命令検出部100により検出された各更新命令について、その更新命令からメソッドの呼出命令までの間に、その更新命令により更新された内容が特定の内容である場合には、呼出命令の呼出先アドレスを特殊化命令列のアドレスに設定し、その更新命令により更新された内容が特定の内容でない場合には、呼出命令の呼出先アドレスを通常命令列のアドレスに設定する命令を、設定命令として生成する。これにより、変数の内容が更新され得る場合にのみ設定命令を実行させることができるので、メソッドの特殊化に伴って発生するオーバヘッドを低減することができる。
なお、本図において、設定命令生成部150は、設定命令として、変数等の内容が特定の内容であるか判断する判断命令を生成しなくともよい。即ち、設定命令生成部150は、対象プログラム20をコンパイルする時点で変数等の内容が予め定まっている場合、例えば変数fCalledに0が代入される等の場合には、その内容に応じてメソッドテーブルを書換える命令を生成すればよい。これにより、不要な判断命令を削除して結果プログラム30の実行効率を一層高めることができる。
また、本図の例において変数fCalledにはprivate属性が定められているので、変数fCalledを読み書きする命令は、変数fCalledが定義されるオブジェクト内でのみ実行される。従って、設定命令生成部150は、オブジェクト内のみの各更新命令について、その更新命令が実行される直後に設定命令を生成すればよい。これにより、更新命令の検出に要する処理時間を低減できる。
但し、プログラム言語によっては、プログラマは、private属性が定められた変数の内容を、例外的に、他のオブジェクトのメソッドから変更することができる。そこで、対象プログラム20が例えばJava(登録商標)で記述されている場合には、設定命令生成部150は、変数又は記憶領域の内容をその変数の読み書き範囲外から書換えるリフレクションメソッド(例えば、java.lang.reflect.Field.set()メソッド)内に、呼出命令の呼出先アドレスを通常命令列のアドレスに設定する設定命令を更に生成する。
図8は、メソッドテーブルの構造を説明する図である。図6に示す対象プログラム20がコンパイルされて実行される場合に、対象プログラム20を実行するランタイムシステムは、オブジェクト800と、オブジェクト800のメソッドテーブルである第1メソッドテーブル820及び第2メソッドテーブル840と、変数fCalledについて特殊化せずにコンパイルされた命令列830と、変数fCalledについて特殊化してコンパイルされた命令列850とを生成する。なお、最適化コンパイラ10がJust In Timeコンパイラ等の動的コンパイラである場合には、命令列830は、メソッドfrequentlyCalledMethodをコンパイルしてから実行する命令列であってもよい。同様に、命令列850は、メソッドfrequentlyCalledMethodを特殊化してコンパイルしてから実行する命令列であってもよい。
第1メソッドテーブル820及び第2メソッドテーブル840は、オブジェクト800の複数のメソッドについて、各メソッドの識別情報を、そのメソッドをコンパイルした命令列のアドレスに対応付けて格納する。例えば、第1メソッドテーブル820は、メソッドの識別情報1に対応付けて、命令列830のアドレスを格納している。また、第2メソッドテーブル840は、メソッドの識別情報1に対応付けて、命令列850のアドレスを格納している。
そして、設定命令生成部150により生成された設定命令は、変数等が特殊化の条件を満たす場合に、ポインタ810を、第1メソッドテーブル820のアドレスから、第2メソッドテーブル840のアドレスを指すように書換える。これにより、以降に実行される呼出命令は、メソッドテーブルとして第2メソッドテーブル840を参照することにより、識別情報が1のメソッドのアドレスとして命令列850のアドレスを取得して、そのアドレスに制御を移行する。これにより、設定命令が一旦実行され、変数等が特殊化の条件を満たしていると判断された場合には、その後に設定命令を実行することなく、特殊化されたメソッドが適切に呼び出される。
図9(a)は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第4の例における、対象プログラム20を示す。図9及び図10を用いて、設定命令生成部150が、設定命令を生成することにより、呼出命令のオペランドを書換えさせる処理を説明する。まず、図6及び図7と同様に、更新命令検出部100は、更新命令として、インクリメント命令(1)を6行目において検出し、代入命令(2)を8行目において検出する。そして、メソッド検出部110は、変数fCalledの内容に応じて異なる処理を行うメソッドとして、9行目から14行目に、メソッドfrequentlyCalledMethodを検出する。
そして、設定命令生成部150は、メソッドfrequentlyCalledMethodを呼び出す呼出命令(5)及び呼出命令(6)を、18行目及び19行目において検出する。これらの呼出命令は、プログラムの実行時に呼出先アドレスが変更されないことを示すstatic属性の付されたメソッドを呼び出す。従って、これらの各呼出命令は、制御の移行を指示する命令コードであるcallと、制御の移行先アドレスを示すオペランドである0x12345678とにコンパイルされる。そして、設定命令生成部150は、検出した呼出命令のアドレスを、呼出先アドレスを書換えるべき命令のリストとして管理する。
図9(b)は、設定命令生成部150により管理される、呼出先アドレスを書換えるべき命令のリストの一例を示す。設定命令生成部150は、呼び出すメソッドの識別情報、例えばメソッドの名称に対応付けて、そのメソッドが特殊化された場合に書換えるべき呼出命令のアドレスを管理している。具体的には、設定命令生成部150は、メソッドの名称frequentlyCalledMethodに対応付けて、(5)及び(6)のアドレスを管理している。
設定命令生成部150は、新たに呼出命令がコンパイルされた場合には、その呼出命令のアドレスを、書換えるべき呼出命令のアドレスのリストに追加する。一方、設定命令生成部150は、他の最適化等により呼出命令が除去された場合には、その呼出命令のアドレスを、書換えるべき呼出命令のアドレスのリストから削除する。
図10は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第4の例における、結果プログラム30を示す。設定命令生成部150は、インクリメント命令(1)の直後に実行される位置に、呼出命令のオペランドを、特殊化していないメソッドのアドレスである0x12345678に書換える設定命令を生成する。処理の詳細として、設定命令は、図9(b)に示した呼出先アドレスを書換えるべき命令のリストを参照することにより、呼出先アドレスを書換えるべき呼出命令を選択し、選択したそれらの呼出命令のオペランドを、メソッドfrequentlyCalledMethodのアドレスに書換える。
一方、設定命令生成部150は、代入命令(2)の直後に実行される位置に、呼出命令のオペランドを、特殊化したメソッドのアドレスである0x12346000に書換える設定命令を生成する。処理の詳細として、設定命令は、図9(b)に示した呼出先アドレスを書換えるべき命令のリストを参照することにより、呼出先アドレスを書換えるべき呼出命令を選択し、選択したそれらの呼出命令のオペランドを、メソッドfrequentlyCalledMethod_Specialのアドレスに書換える。
これにより、22行目及び23行目に示す命令コードcallのオペランドは、設定命令により、0x12345678及び0x12346000の何れかに書換えられる。この結果、22行目及び23行目の呼出命令は、変数fCalledの内容に応じて、frequentlyCalledMethod及び又はfrequentlyCalledMethod_Specialの何れかを適切に呼び出すことができる。
図11は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第5の例を示す。図11(a)は、最適化前の対象プログラム20を示す。更新命令検出部100は、オブジェクトのメンバー変数fEncodingTypeの更新命令として、変数fEncodingTypeに、メソッドinitの引数encodingTypeの内容を代入する代入命令(1)を、対象プログラム20の5行目に検出する。また、メソッド検出部110は、メンバー変数fEncodingTypeの内容に応じて異なる処理を行うメソッドconvertCharsToBytesを、対象プログラム20の6行目から19行目に検出する。
図11(b)は、最適化後の結果プログラム30を示す。本図において、最適化効果算出部120は、検出したメソッドconvertCharsToBytesについて、そのメソッドを、fEncodingTypeが特定の内容である場合の処理に最適化した場合に、その処理に最適化せずにコンパイルした場合と比較して、短縮される実行時間の見積を算出する。例えば、最適化効果算出部120は、代入命令(1)において代入される値がEncodingSupport.U16BEである確率が、他の値が代入される確率より高く、例えば90%である旨のプロファイル情報を取得する。
そして、最適化効果算出部120は、メソッドconvertCharsToBytesについて、そのメソッドを、fEncodingTypeがEncodingSupport.U16BEである場合の処理に最適化した場合に、その処理に最適化せずにコンパイルした場合と比較して、短縮される実行時間の見積を算出する。これを受けて、メソッドコンパイル部140は、最適化の効果が最適化のオーバヘッドを超えると判断した場合に、メソッドconvertCharsToBytesを、変数fEncodingTypeがEncodingSupport.U16BEである場合の処理に最適化してコンパイルする。このコンパイル結果を、図11(b)の10行目から16行目のメソッドconvertCharsToBytes_Specialとして示す。メソッドコンパイル部140は、図11(a)の8行目に記述されていたswitch文を除去することができた。
そして、設定命令生成部150は、変数fEncodingTypeの内容がEncodingSupport.U16BEである場合に実行され、メソッドコンパイル部140により最適化されたメソッドのアドレスを、メソッドテーブルに格納する設定命令(2)を生成する。更に、設定命令生成部150は、設定命令(2)として、変数fEncodingTypeの内容がEncodingSupport.U16BEでない場合に実行され、メソッドコンパイル部140により最適化されていないメソッドのアドレスを、メソッドテーブルに格納する命令を9行目に格納する。
以上、本図に示すように、最適化コンパイラ10は、プロファイル情報に基づいて、最適化の効果及びオーバヘッドを算出することにより、特殊化により実行速度が向上する場合にのみ適切に最適化を行うことができる。
図12は、最適化コンパイラ10が対象プログラム20を最適化してコンパイルする第6の例を示す。更新命令検出部100は、配列変数tableの属性を参照することにより、配列変数privateが同一のオブジェクトのみから参照されることを検出する。更新命令検出部100は、オブジェクト内の全てのメソッドを解析した結果、配列変数tableの更新命令として、配列変数tableを初期化する初期化命令(1)を、オブジェクトのコンストラクタ内において検出する。ここで、初期化命令(1)は、配列変数table用の記憶領域を確保してその記憶領域へのポインタを代入するとともに、配列変数tableにより指定されるメモリ上の記憶領域内に、配列変数tableの大きさを示すHASHTABLE_SIZEの値を格納する。このように、更新命令とは、数値を変数に代入する命令のみならず、変数により指定された記憶領域に数値を格納する命令を含む。
そして、メソッド検出部110は、配列変数tableの内容に応じて異なる処理を行うメソッドgetを、対象プログラム20の8行目から12行目に検出する。例えば、メソッドgetは、12行目において配列変数tableを参照する参照命令(2)を有し、参照結果に基づいて以降の処理を行う。また、参照命令(2)は、変数の内容の参照に先立って、配列変数tableの添字である変数hashが、配列変数として確保した記憶領域を指すか否かの条件を判断し、条件が満たされない場合には、例外(Exception)の発生を利用者に通知する処理を行う。以降、この処理を配列境界チェック処理と呼ぶ。
続いて、メソッドコンパイル部140は、メソッドgetを、変数HASHTABLE_SIZEが128である場合の処理に最適化してコンパイルする。この結果、特殊化されたメソッドにおいて、配列変数tableの添字である変数hashは、常に128未満となる。これにより、メソッドコンパイル部140は、参照命令(2)において配列境界チェック処理を除去することができる。
以上、本図に示すように、最適化コンパイラ10は、各メソッドを、変数の内容自体のみならず、変数により指定される記憶領域に格納された内容が特定の内容である場合の処理に最適化することができる。これにより、最適化する対象のメソッドを増加させて、プログラムの実行効率を一層高めることができる。更に、メソッドコンパイル部140は、メソッドgetを処理する命令列を他のメソッドの命令列内にコピーし、他のメソッドの一部として実行させる最適化であるインライン処理を行う場合であっても、特殊化したメソッドgetを、他のメソッドの命令列内にコピーすることが好ましい。
なお、本図で示すように、配列変数の参照命令は、配列境界チェック処理と、配列変数の内容を参照する処理とを含んでいる。これらの処理は、配列変数として確保した記憶領域の大きさをメモリから読み出して添字と比較する命令と、配列変数の内容をメモリから読み出すロード命令とにコンパイルされる。ここで、メソッドコンパイル部140が、特殊化により配列境界チェック処理を除去した場合であっても、他のスレッドがこの配列変数の内容を変更する場合を考慮すると、配列変数の内容をメモリから読み出すロード命令は、除去されずに実行される。
本図の例と異なり、配列変数を初期化する命令又は配列変数のサイズを拡張する命令が、コンストラクタ以外のメソッドで実行される場合には、配列変数の内容をメモリから読み出すロード命令の読出先アドレスが、どのメソッドにより初期化された配列変数であるか不明である。このため、配列境界チェック命令を除去してしまうと、通知すべき例外を通知できない等の不都合がある。従って、最適化コンパイラ10は、特殊化をしても依然としてロード命令が実行されるメソッドについては、本図のように変更命令をコンストラクタのみにおいて検出した場合にのみ、特殊化を行う。
図13は、最適化コンパイラ10として機能するコンピュータのハードウェア構成の一例を示す。最適化コンパイラ10は、ホストコントローラ1382により相互に接続されるCPU1300、RAM1320、グラフィックコントローラ1375、及び表示装置1380を有するCPU周辺部と、入出力コントローラ1384によりホストコントローラ1382に接続される通信インターフェイス1330、ハードディスクドライブ1340、及びCD−ROMドライブ1360を有する入出力部と、入出力コントローラ1384に接続されるROM1310、フレキシブルディスクドライブ1350、及び入出力チップ1370を有するレガシー入出力部とを備える。
ホストコントローラ1382は、RAM1320と、高い転送レートでRAM1320をアクセスするCPU1300及びグラフィックコントローラ1375とを接続する。CPU1300は、ROM1310及びRAM1320に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1375は、CPU1300等がRAM1320内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1380上に表示させる。これに代えて、グラフィックコントローラ1375は、CPU1300等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1384は、ホストコントローラ1382と、比較的高速な入出力装置である通信インターフェイス1330、ハードディスクドライブ1340、及びCD−ROMドライブ1360を接続する。通信インターフェイス1330は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ1340は、最適化コンパイラ10が使用するプログラム及びデータを格納する。CD−ROMドライブ1360は、CD−ROM1395からプログラム又はデータを読み取り、RAM1320を介して入出力チップ1370に提供する。
また、入出力コントローラ1384には、ROM1310と、フレキシブルディスクドライブ1350や入出力チップ1370等の比較的低速な入出力装置とが接続される。ROM1310は、最適化コンパイラ10の起動時にCPU1300が実行するブートプログラムや、最適化コンパイラ10のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1350は、フレキシブルディスク1390からプログラム又はデータを読み取り、RAM1320を介して入出力チップ1370に提供する。入出力チップ1370は、フレキシブルディスク1390や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
最適化コンパイラ10に提供されるプログラム、例えば本発明に係る変換プログラムは、フレキシブルディスク1390、CD−ROM1395、又はICカード等の記録媒体に格納されて利用者によって提供される。変換プログラムは、入出力チップ1370及び/又は入出力コントローラ1384を介して、記録媒体から読み出され最適化コンパイラ10にインストールされて実行される。
最適化コンパイラ10にインストールされて実行される変換プログラムは、更新命令検出モジュールと、メソッド検出モジュールと、最適化効果算出モジュールと、最適化オーバヘッド算出モジュールと、メソッドコンパイルモジュールと、設定命令生成モジュールとを含む。各モジュールが最適化コンパイラ10に働きかけて行わせる動作は、図1から図12において説明した最適化コンパイラ10における、対応する部材の動作と同一であるから、説明を省略する。
以上に示したプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1390、CD−ROM1395の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを最適化コンパイラ10に提供してもよい。
以上、本実施例で示すように、最適化コンパイラ10は、変数等の内容を更新する更新命令が実行される毎に実行される箇所に、その更新命令により更新された内容が、メソッドの特殊化の条件を満たすか否か判断して、メソッドの呼出先を切り換える設定命令を生成する。この結果、この設定命令が一旦実行され、変数等が特殊化の条件を満たしていると判断された場合には、その後に設定命令を実行することなく、特殊化されたメソッドが適切に呼び出される。これにより、変数等の更新命令と比較して変数等を参照するメソッドが頻繁に実行される場合には、設定命令を実行する頻度を低減して、プログラムの実行効率を高めることができる。
また、最適化コンパイラ10は、変数に対して定められた属性を参照することにより、対象プログラムにおいて更新命令又はメソッドを検出する範囲を適切に選択する。これにより、ある変数を更新する全ての更新命令を高速に検出できると共に、その変数の内容に応じて異なる処理を行うメソッドを高速に検出できる。また、最適化コンパイラ10は、対象プログラムの実行時プロファイル情報に基づいて、最適化の効果及びオーバヘッドを算出することにより、特殊化により実行速度が向上する場合にのみ最適化を行うことができる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
以上に示す実施例によると、以下の各項目に示すコンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体が実現される。
(項目1) 最適化の対象プログラムにおいて、変数の内容又は変数により指定される記憶領域の内容を更新する更新命令を検出する更新命令検出部と、前記対象プログラムにおいて、他の命令列に制御を移す制御移行命令により制御が移行されて、前記変数の内容又は前記記憶領域の内容に応じて異なる処理を行う命令列を検出する命令列検出部と、検出した当該命令列を、前記変数の内容又は前記記憶領域の内容が予め定められた特定の内容である場合の処理に最適化してコンパイルする命令列コンパイル部と、前記対象プログラムにおける、前記更新命令から前記制御移行命令までの間に、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合に実行され、前記制御移行命令の移行先アドレスを、前記命令列コンパイル部により最適化された前記命令列のアドレスに設定する設定命令を生成する設定命令生成部とを備える最適化コンパイラ。
(項目2) 前記対象プログラムは、オブジェクト指向プログラム言語で記述されており、前記命令列は、オブジェクトのメソッドであり、前記制御移行命令は、当該オブジェクトの複数のメソッドについて、各メソッドの識別情報を、当該メソッドをコンパイルした命令列のアドレスに対応付けたメソッドテーブルから、呼び出す対象のメソッドの識別情報に対応付けられたアドレスを選択して、当該アドレスに制御を移行することにより、当該メソッドを呼び出し、前記設定命令生成部は、前記設定命令として、前記更新命令により更新された内容が前記特定の内容である場合に実行され、前記命令列コンパイル部により最適化された命令列のアドレスを、前記メソッドテーブルに格納する命令を生成する項目1記載の最適化コンパイラ。
(項目3) 前記制御移行命令は、制御の移行を指示する命令コードと、制御の移行先アドレスを示すオペランドとを含み、前記設定命令生成部は、前記設定命令として、前記更新命令により更新された内容が前記特定の内容である場合に実行され、前記制御移行命令のオペランドを、前記命令列コンパイル部により最適化された前記命令列のアドレスに書換える命令を生成する項目1記載の最適化コンパイラ。
(項目4) 前記対象プログラムの各変数には、前記対象プログラムのうち、当該変数の内容を読み書きする命令の実行が許可される読み書き許可範囲を示す属性が定められており、前記更新命令検出部は、各変数の前記読み書き許可範囲から、当該変数の更新命令を検出し、前記命令列検出部は、各変数の前記読み書き許可範囲から、当該変数の内容又は当該変数により指定される記憶領域の内容に応じて異なる処理を行う命令列を検出する項目1記載の最適化コンパイラ。
(項目5) 前記更新命令検出部は、前記対象プログラムの各変数について、当該変数の読み書き許可範囲から、当該変数又は当該変数により指定される記憶領域の全ての更新命令を検出し、前記更新命令検出部により当該変数又は当該変数により指定される記憶領域の全ての更新命令が検出された場合において、前記命令列コンパイル部は、前記命令列検出部が検出した前記命令列を、当該変数の内容又は当該記憶領域の内容が前記特定の内容である場合の処理に最適化してコンパイルした特殊化命令列と、当該命令列を、当該処理に最適化せずにコンパイルした通常命令列とを生成し、前記設定命令生成部は、前記更新命令検出部により検出された各更新命令について、当該更新命令から前記制御移行命令までの間に実行される範囲に、当該更新命令により更新された内容が前記特定の内容である場合には、前記移行先アドレスを前記特殊化命令列のアドレスに設定し、当該更新命令により更新された内容が前記特定の内容でない場合には、前記移行先アドレスを前記通常命令列のアドレスに設定する命令を、前記設定命令として生成する項目4記載の最適化コンパイラ。
(項目6) 前記設定命令生成部は、更に、変数の内容又は変数により指定される記憶領域の内容を当該変数の前記読み書き許可範囲外から書換えるリフレクションメソッド内に、各制御移行命令の移行先アドレスを前記通常命令列に設定する設定命令を生成する項目5記載の最適化コンパイラ。
(項目7) 前記命令列検出部が検出した前記命令列を、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合の処理に最適化した場合に、当該処理に最適化せずにコンパイルした場合と比較して、短縮される実行時間の見積を算出し、算出した当該実行時間の見積に、当該命令列の実行頻度の見積を乗じることにより、最適化の効果を算出する最適化効果算出部と、前記設定命令を生成した場合に当該設定命令に要する処理時間の見積を算出し、算出した当該処理時間の見積に、当該設定命令の実行頻度の見積を乗じることにより、最適化のオーバヘッドを算出する最適化オーバヘッド算出部とを更に備え、前記設定命令生成部は、各命令列についての前記最適化の効果の合計が、各設定命令についての前記最適化のオーバヘッドの合計を超える場合に設定命令を生成する項目1記載の最適化コンパイラ。
(項目8) 前記最適化効果算出部は、前記命令列検出部が検出した命令列において、前記変数又は前記記憶領域の内容を読み出す命令より先に実行される範囲に、当該変数又は当該記憶領域の内容を変更し得る命令が含まれない場合に、当該変数又は当該記憶領域の内容をメモリから読み出す命令を削除することにより短縮される実行時間の見積を算出する項目7記載の最適化コンパイラ。
(項目9) 前記対象プログラムのプログラマは、前記対象プログラムにおける各変数に、当該変数の内容が他のスレッドの処理により更新され得ることを示すボラタイル属性を定めることができ、前記最適化効果算出部は、前記更新命令により更新される前記変数又は前記更新命令により更新される前記記憶領域を指定する変数に、前記ボラタイル属性が定められていない場合に、前記命令列検出部が検出した命令列から当該変数の内容又は当該記憶領域の内容をメモリから読み出す命令を削除することにより短縮される実行時間の見積を算出する項目7記載の最適化コンパイラ。
(項目10) 前記対象プログラムは、オブジェクト指向プログラム言語で記述されており、前記命令列は、オブジェクトのメソッドであり、前記命令列コンパイル部は、前記対象プログラムにおいて所定の変数又は記憶領域の更新命令がオブジェクトのコンストラクタのみにおいて検出された場合に、当該変数又は記憶領域の内容に応じて異なる処理を行う命令列を、当該変数又は記憶領域の内容が特定の内容である場合の処理に最適化してコンパイルする項目1記載の最適化コンパイラ。
(項目11) 前記対象プログラムは、オブジェクト指向プログラミング言語により記述されており、前記更新命令検出部は、前記更新命令として、オブジェクトのメンバー変数の内容又はメンバー変数により指定される記憶領域の内容を更新する命令を検出し、前記命令列検出部は、メソッド呼び出し命令により呼び出されて実行され、前記メンバー変数の内容又は前記メンバー変数により指定される記憶領域の内容に応じて異なる処理を行うメソッドを、前記命令列として検出し、前記命令列コンパイル部は、前記命令列検出部により検出されたメソッドを、メンバー変数の内容又はメンバー変数により指定される記憶領域の内容が前記特定の内容である場合の処理に最適化してコンパイルし、前記設定命令生成部は、前記設定命令として、前記更新命令により更新された内容が前記特定の内容である場合に実行され、前記メソッド呼出命令による呼出先アドレスを、前記命令列コンパイル部により最適化されたメソッドのアドレスに設定する命令を生成する項目1記載の最適化コンパイラ。
(項目12) 最適化の対象プログラムをコンピュータにより最適化するコンパイル方法であって、前記コンピュータにより、前記対象プログラムにおいて、変数の内容又は変数により指定される記憶領域の内容を更新する更新命令を検出する更新命令検出段階と、前記対象プログラムにおいて、他の命令列に制御を移す制御移行命令により制御が移行されて、前記変数の内容又は前記記憶領域の内容に応じて異なる処理を行う命令列を検出する命令列検出段階と、検出した当該命令列を、前記変数の内容又は前記記憶領域の内容が予め定められた特定の内容である場合の処理に最適化してコンパイルする命令列コンパイル段階と、前記対象プログラムにおける、前記更新命令から前記制御移行命令までの間に、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合に実行され、前記制御移行命令の移行先アドレスを、前記命令列コンパイル段階において最適化された前記命令列のアドレスに設定する設定命令を生成する設定命令生成段階とを備えるコンパイル方法。
(項目13) 最適化の対象プログラムをコンピュータにより最適化させるコンパイルプログラムであって、前記コンピュータを、前記対象プログラムにおいて、変数の内容又は変数により指定される記憶領域の内容を更新する更新命令を検出する更新命令検出部と、前記対象プログラムにおいて、他の命令列に制御を移す制御移行命令により制御が移行されて、前記変数の内容又は前記記憶領域の内容に応じて異なる処理を行う命令列を検出する命令列検出部と、検出した当該命令列を、前記変数の内容又は前記記憶領域の内容が予め定められた特定の内容である場合の処理に最適化してコンパイルする命令列コンパイル部と、前記対象プログラムにおける、前記更新命令から前記制御移行命令までの間に、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合に実行され、前記制御移行命令の移行先アドレスを、前記命令列コンパイル部により最適化された前記命令列のアドレスに設定する設定命令を生成する設定命令生成部として機能させるコンパイルプログラム。
(項目14) 項目13記載のコンパイルプログラムを記録した記録媒体。
図1は、最適化コンパイラ10の機能ブロック図である。 図2は、最適化コンパイラ10がメソッドを最適化する処理の動作フローの一例を示す。 図3は、図2に続く処理の動作フローを示す。 図4は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第1の例を示す。 図5は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第2の例を示す。 図6は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第3の例における、対象プログラム20を示す。 図7は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第3の例における、結果プログラム30を示す。 図8は、メソッドテーブルの構造を説明する図である。 図9は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第4の例における、対象プログラム20を示す。 図10は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第4の例における、結果プログラム30を示す。 図11は、最適化コンパイラ10が対象プログラム20を結果プログラム30に最適化してコンパイルする第5の例を示す。 図12は、最適化コンパイラ10が対象プログラム20を最適化してコンパイルする第6の例を示す。 図13は、最適化コンパイラ10として機能するコンピュータのハードウェア構成の一例を示す。
符号の説明
10 最適化コンパイラ
20 対象プログラム
30 結果プログラム
100 更新命令検出部
110 メソッド検出部
120 最適化効果算出部
130 最適化オーバヘッド算出部
140 メソッドコンパイル部
150 設定命令生成部
800 オブジェクト
810 ポインタ
820 第1メソッドテーブル
830 命令列
840 第2メソッドテーブル
850 命令列

Claims (12)

  1. コンピュータの制御によりプログラムを最適化する最適化コンパイラ装置であって、
    オブジェクト指向プログラム言語で記述された対象プログラム、および、対象プログラムにおいて呼び出される各メソッドの識別情報に当該メソッドをコンパイルした命令列のアドレスを対応付けたメソッドテーブルを記憶している記憶装置と、
    前記記憶装置にアクセスして、前記対象プログラムにおいて、変数の内容又は変数により指定される記憶領域の内容を更新する更新命令を前記コンピュータのCPUの制御により検出する更新命令検出部と、
    呼び出し先のメソッドの識別情報に対応するアドレスを前記メソッドテーブルから読み出すと共に当該アドレスに制御を移す制御移行命令、および、当該制御移行命令により制御が移行されて、前記変数の内容又は前記記憶領域の内容に応じて異なる処理を行う命令列を前記CPUの制御により検出する命令列検出部と、
    検出した当該命令列を、前記CPUの制御により、前記変数の内容又は前記記憶領域の内容が予め定められた特定の内容である場合の処理に最適化してコンパイルし、前記記憶装置に格納する命令列コンパイル部と、
    前記対象プログラムにおける、前記更新命令から前記制御移行命令までの間に、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合に実行され、前記命令列コンパイル部により最適化された命令列のアドレスを前記メソッドテーブルに格納する命令である設定命令を前記CPUの制御により生成して、当該設定命令を生成した対象プログラムを前記記憶装置に格納する設定命令生成部と
    を備える最適化コンパイラ装置
  2. 前記対象プログラムは、制御の移行を指示する命令コードと、制御の移行先アドレスを示すオペランドとを含む制御移行命令を有し、
    前記設定命令生成部は、前記制御移行命令が前記命令コードおよび前記オペランドを含む場合には、前記設定命令として、前記更新命令により更新された内容が前記特定の内容である場合に実行され、前記制御移行命令のオペランドを、前記命令列コンパイル部により最適化された前記命令列のアドレスに書換える命令を生成する
    請求項1記載の最適化コンパイラ装置
  3. 前記対象プログラムの各変数には、前記対象プログラムのうち、当該変数の内容を読み書きする命令の実行が許可される読み書き許可範囲を示す属性が定められており、
    前記更新命令検出部は、各変数の前記読み書き許可範囲から、当該変数の更新命令を検出し、
    前記命令列検出部は、各変数の前記読み書き許可範囲から、当該変数の内容又は当該変数により指定される記憶領域の内容に応じて異なる処理を行う命令列を検出する
    請求項1記載の最適化コンパイラ装置
  4. 前記更新命令検出部は、前記対象プログラムの各変数について、当該変数の読み書き許可範囲から、当該変数又は当該変数により指定される記憶領域の全ての更新命令を検出し、
    前記更新命令検出部により当該変数又は当該変数により指定される記憶領域の全ての更新命令が検出された場合において、
    前記命令列コンパイル部は、前記命令列検出部が検出した前記命令列を、当該変数の内容又は当該記憶領域の内容が前記特定の内容である場合の処理に最適化してコンパイルした特殊化命令列と、当該命令列を、当該処理に最適化せずにコンパイルした通常命令列とを生成し、
    前記設定命令生成部は、前記更新命令検出部により検出された各更新命令について、当該更新命令から前記制御移行命令までの間に実行される範囲に、当該更新命令により更新された内容が前記特定の内容である場合には、制御移行命令の移行先アドレスを前記特殊化命令列のアドレスに設定し、当該更新命令により更新された内容が前記特定の内容でない場合には、前記移行先アドレスを前記通常命令列のアドレスに設定する命令を、前記設定命令として生成する
    請求項3記載の最適化コンパイラ装置
  5. 前記設定命令生成部は、更に、変数の内容又は変数により指定される記憶領域の内容を当該変数の前記読み書き許可範囲外から書換えるリフレクションメソッド内に、各制御移行命令の移行先アドレスを前記通常命令列に設定する設定命令を生成する
    請求項4記載の最適化コンパイラ装置
  6. 前記命令列検出部が検出した前記命令列を、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合の処理に最適化した場合に、当該処理に最適化せずにコンパイルした場合と比較して、短縮される実行時間の見積を、前記対象プログラムに基づいて前記CPUの制御により算出し、算出した当該実行時間の見積に、当該命令列の実行頻度の見積を乗じることにより、最適化の効果を前記CPUの制御により算出する最適化効果算出部と、
    前記設定命令を生成した場合に当該設定命令に要する処理時間の見積を前記対象プログラムに基づいて前記CPUの制御により算出し、算出した当該処理時間の見積に、当該設定命令の実行頻度の見積を乗じることにより、最適化のオーバヘッドを前記CPUの制御により算出する最適化オーバヘッド算出部と
    を更に備え、
    前記設定命令生成部は、各命令列についての前記最適化の効果の合計が、各設定命令についての前記最適化のオーバヘッドの合計を超える場合に設定命令を生成する
    請求項1記載の最適化コンパイラ装置
  7. 前記最適化効果算出部は、前記命令列検出部が検出した命令列において、前記変数又は前記記憶領域の内容を読み出す命令より先に実行される範囲に、当該変数又は当該記憶領域の内容を変更し得る命令が含まれない場合に、当該変数又は当該記憶領域の内容をメモリから読み出す命令を削除することにより短縮される実行時間の見積を算出する
    請求項6記載の最適化コンパイラ装置
  8. 前記対象プログラムのプログラマは、前記対象プログラムにおける各変数に、当該変数の内容が他のスレッドの処理により更新され得ることを示すボラタイル属性を定めることができ、
    前記最適化効果算出部は、前記更新命令により更新される前記変数又は前記更新命令により更新される前記記憶領域を指定する変数に、前記ボラタイル属性が定められていない場合に、前記命令列検出部が検出した命令列から当該変数の内容又は当該記憶領域の内容をメモリから読み出す命令を削除することにより短縮される実行時間の見積を算出する
    請求項6記載の最適化コンパイラ装置
  9. 前記対象プログラムは、オブジェクト指向プログラム言語で記述されており、
    前記命令列は、オブジェクトのメソッドであり、
    前記命令列コンパイル部は、前記対象プログラムにおいて所定の変数又は記憶領域の更新命令がオブジェクトのコンストラクタのみにおいて検出された場合に、当該変数又は記憶領域の内容に応じて異なる処理を行う命令列を、当該変数又は記憶領域の内容が特定の内容である場合の処理に最適化してコンパイルする
    請求項1記載の最適化コンパイラ装置
  10. 前記対象プログラムは、オブジェクト指向プログラミング言語により記述されており、
    前記更新命令検出部は、前記更新命令として、オブジェクトのメンバー変数の内容又はメンバー変数により指定される記憶領域の内容を更新する命令を検出し、
    前記命令列検出部は、メソッド呼び出し命令により呼び出されて実行され、前記メンバー変数の内容又は前記メンバー変数により指定される記憶領域の内容に応じて異なる処理を行うメソッドを、前記命令列として検出し、
    前記命令列コンパイル部は、前記命令列検出部により検出されたメソッドを、メンバー変数の内容又はメンバー変数により指定される記憶領域の内容が前記特定の内容である場合の処理に最適化してコンパイルし、
    前記設定命令生成部は、前記設定命令として、前記更新命令により更新された内容が前記特定の内容である場合に実行され、メソッド呼出命令による呼出先アドレスを、前記命令列コンパイル部により最適化されたメソッドのアドレスに設定する命令を生成する
    請求項1記載の最適化コンパイラ装置
  11. 最適化の対象プログラムをコンピュータにより最適化するコンパイル方法であって、
    前記コンピュータは、オブジェクト指向プログラム言語で記述された対象プログラム、および、対象プログラムにおいて呼び出される各メソッドの識別情報に当該メソッドをコンパイルした命令列のアドレスを対応付けたメソッドテーブルを記憶している記憶装置を備え、
    前記記憶装置にアクセスして、前記対象プログラムにおいて、変数の内容又は変数により指定される記憶領域の内容を更新する更新命令を前記コンピュータのCPUの制御により検出する更新命令検出段階と、
    呼び出し先のメソッドの識別情報に対応するアドレスを前記メソッドテーブルから読み出すと共に当該アドレスに制御を移す制御移行命令、および、当該制御移行命令により制御が移行されて、前記変数の内容又は前記記憶領域の内容に応じて異なる処理を行う命令列を前記CPUの制御により検出する命令列検出段階と、
    検出した当該命令列を、前記CPUの制御により、前記変数の内容又は前記記憶領域の内容が予め定められた特定の内容である場合の処理に最適化してコンパイルし、前記記憶装置に格納する命令列コンパイル段階と、
    前記対象プログラムにおける、前記更新命令から前記制御移行命令までの間に、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合に実行され、前記命令列コンパイル段階において最適化された命令列のアドレスを前記メソッドテーブルに格納する命令である設定命令を前記CPUの制御により生成して、当該設定命令を生成した対象プログラムを前記記憶装置に格納する設定命令生成段階と
    を備えるコンパイル方法。
  12. 最適化の対象プログラムをコンピュータにより最適化させるコンパイルプログラムであって、
    前記コンピュータは、オブジェクト指向プログラム言語で記述された対象プログラム、および、対象プログラムにおいて呼び出される各メソッドの識別情報に当該メソッドをコンパイルした命令列のアドレスを対応付けたメソッドテーブルを記憶している記憶装置を備え、
    前記コンピュータを、
    前記記憶装置にアクセスして、前記対象プログラムにおいて、変数の内容又は変数により指定される記憶領域の内容を更新する更新命令を前記コンピュータのCPUの制御により検出する更新命令検出部と、
    呼び出し先のメソッドの識別情報に対応するアドレスを前記メソッドテーブルから読み出すと共に当該アドレスに制御を移す制御移行命令、および、当該制御移行命令により制御が移行されて、前記変数の内容又は前記記憶領域の内容に応じて異なる処理を行う命令列を前記CPUの制御により検出する命令列検出部と、
    検出した当該命令列を、前記CPUの制御により、前記変数の内容又は前記記憶領域の内容が予め定められた特定の内容である場合の処理に最適化してコンパイルし、前記記憶装置に格納する命令列コンパイル部と、
    前記対象プログラムにおける、前記更新命令から前記制御移行命令までの間に、前記変数の内容又は前記記憶領域の内容が前記特定の内容である場合に実行され、前記命令列コンパイル部により最適化された命令列のアドレスを前記メソッドテーブルに格納する命令である設定命令を前記CPUの制御により生成して、当該設定命令を生成した対象プログラムを前記記憶装置に格納する設定命令生成部と
    して機能させるコンパイルプログラム。
JP2004019506A 2004-01-28 2004-01-28 コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体 Expired - Fee Related JP4093484B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004019506A JP4093484B2 (ja) 2004-01-28 2004-01-28 コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体
US11/045,923 US7409678B2 (en) 2004-01-28 2005-01-28 Compiler, compilation and storage

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004019506A JP4093484B2 (ja) 2004-01-28 2004-01-28 コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体

Publications (2)

Publication Number Publication Date
JP2005215830A JP2005215830A (ja) 2005-08-11
JP4093484B2 true JP4093484B2 (ja) 2008-06-04

Family

ID=34903698

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004019506A Expired - Fee Related JP4093484B2 (ja) 2004-01-28 2004-01-28 コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体

Country Status (1)

Country Link
JP (1) JP4093484B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5042487B2 (ja) * 2005-11-22 2012-10-03 株式会社日立ソリューションズ コンピュータの動作方法、プログラム、コンピュータ
JP5039948B2 (ja) * 2007-10-30 2012-10-03 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムを最適化するコンパイラ
JP4806060B2 (ja) * 2009-09-15 2011-11-02 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
JP2011103026A (ja) * 2009-11-10 2011-05-26 Hitachi Ltd 実行命令数計測方法、実行クロック数計測方法及び計算機システム
JP5846581B2 (ja) 2012-04-25 2016-01-20 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation コードを投機的に最適化するための方法、並びにそのコンピュータ及びコンピュータ・プログラム
JP5950288B2 (ja) 2014-09-16 2016-07-13 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation プログラミング言語の処理系を実現する装置及び方法
CN110244954B (zh) * 2019-05-22 2022-12-09 深圳赛安特技术服务有限公司 一种应用程序的编译方法及设备
CN110333893B (zh) * 2019-06-28 2023-04-18 百度在线网络技术(北京)有限公司 应用程序的修复方法、装置、设备和存储介质

Also Published As

Publication number Publication date
JP2005215830A (ja) 2005-08-11

Similar Documents

Publication Publication Date Title
EP4099153B1 (en) Extending a virtual machine instruction set architecture
US20050166195A1 (en) Compiler, compilation and storage
US8627281B2 (en) Method, computer program and computer system for converting source code written in dynamically typed language into target code written in statically typed language and executing target code
US6907519B2 (en) Systems and methods for integrating emulated and native code
US9690604B2 (en) Language-based model for asynchronous operations
US7185327B2 (en) System and method for optimizing operations via dataflow analysis
US20020095665A1 (en) Marking memory elements based upon usage of accessed information during speculative execution
US20100095286A1 (en) Register reduction and liveness analysis techniques for program code
JP2007522584A (ja) 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置
US20050177821A1 (en) Compiler, dynamic compiler, and replay compiler
KR20110136749A (ko) 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체
US8291393B2 (en) Just-in-time compiler support for interruptible code
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
US20030192035A1 (en) Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment
KR100577366B1 (ko) 이종의 자바 메소드를 실행하는 방법 및 장치
JP2000347876A (ja) スタック・スロット割当て方法および装置
JP5845221B2 (ja) 高速パッチベースメソッドコール
US7739674B2 (en) Method and apparatus for selectively optimizing interpreted language code
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
JP4093484B2 (ja) コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
US8589899B2 (en) Optimization system, optimization method, and compiler program
US8490073B2 (en) Controlling tracing within compiled code
US7451437B2 (en) Compiler device, program, and recording medium
US6925636B2 (en) Method and apparatus for refining an alias set of address taken variables

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071106

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071210

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: 20080226

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20080228

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080229

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

Free format text: PAYMENT UNTIL: 20110314

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

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

Free format text: PAYMENT UNTIL: 20110314

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees