JP3899046B2 - コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法 - Google Patents
コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法 Download PDFInfo
- Publication number
- JP3899046B2 JP3899046B2 JP2003079010A JP2003079010A JP3899046B2 JP 3899046 B2 JP3899046 B2 JP 3899046B2 JP 2003079010 A JP2003079010 A JP 2003079010A JP 2003079010 A JP2003079010 A JP 2003079010A JP 3899046 B2 JP3899046 B2 JP 3899046B2
- Authority
- JP
- Japan
- Prior art keywords
- exception
- handler
- captured
- target program
- exception handler
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/481—Exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法に関する。特に本発明は、例外処理を最適化するコンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法に関する。
【0002】
【従来の技術】
近年、プログラムの保守性及び堅牢性を高める目的で、例外処理を記述することのできるプログラム言語が普及してきている。このようなプログラム言語で記述されたプログラムは、プログラムにおいて例外が発生した場合に、プログラム中の例外が発生した箇所から、当該例外に対応する例外ハンドラに処理を移す。従来、例外ハンドラに処理を移すこの処理を最適化する技術として、頻繁に発生する例外の種類を検出し、検出した種類の例外を発生する命令を、例外ハンドラへの分岐命令に書き換える技術が用いられている(非特許文献1参照。)。
【0003】
【非特許文献1】
小笠原 武史、小松 秀昭、及び中谷 登志男著”A Study of Exception Handling and Its Dynamic Optimization in Java(登録商標)”Object−Oriented Programming Systems,Languages,and Applications(OOPSLA2001)会議録 2001年、邦題「Java(登録商標)における、例外処理及び例外処理の動的最適化の研究」
【0004】
【発明が解決しようとする課題】
しかしながら、上記技術は、発生させる例外の種類を特定できない場合に、例外ハンドラに処理を移す処理を最適化することができない。例えば、複数の種類の例外を捕捉する例外ハンドラが、捕捉した例外を再び発生させる場合には、コンパイラ装置は、何れの種類の例外を捕捉するかを予め定めることができないので、例外を再び発生させる命令をどのように最適化するべきかを決定することができない。
そこで本発明は、上記の課題を解決することのできるコンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【0005】
【課題を解決するための手段】
即ち、本発明の第1の形態によると、コンパイル対象のプログラムである対象プログラムの例外処理を最適化するコンパイラ装置であって、前記対象プログラムを取得して記憶装置に格納し、前記対象プログラムが実行された場合に発生する例外を捕捉する命令列である例外ハンドラのうち、互いに異なる複数の例外を捕捉して捕捉した例外を再び発生させる命令列である複数捕捉例外ハンドラを、前記記憶装置に格納した前記対象プログラムの各命令の中からCPUの動作により検出する例外ハンドラ検出部と、検出された前記複数補足例外ハンドラが捕捉して再び発生させる例外を捕捉する例外ハンドラを前記記憶装置に格納された前記対象プログラムから前記CPUの動作により検出して、検出された前記複数捕捉例外ハンドラが捕捉して再び発生させる前記複数の例外のうち、前記対象プログラム中の同一の例外ハンドラにより捕捉されて共通の処理に移行することとなる例外の組を前記CPUの動作により選択する例外選択部と、前記例外選択部により選択された例外の組を前記複数捕捉例外ハンドラに代わって捕捉して前記共通の処理に移行させる代替例外ハンドラを前記CPUの動作により生成して、前記記憶装置に格納する最適化後の前記対象プログラムに含める例外ハンドラ生成部とを備えるコンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法を提供する。
なお上記発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションも又発明となりうる。
【0006】
【発明の実施の形態】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、又実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、コンパイラ装置10の機能ブロック図を示す。コンパイラ装置10は、コンパイル対象のプログラムである対象プログラムのコンパイル時において、例外処理を最適化する装置であり、例外ハンドラ検出部100と、例外選択部110と、例外ハンドラ生成部120とを備える。例外ハンドラ検出部100は、対象プログラムを取得すると、当該対象プログラムで発生した例外を捕捉する例外ハンドラのうち、互いに異なる複数の例外を捕捉し、かつ捕捉した例外を再び発生させる複数捕捉例外ハンドラを検出し、検出結果を例外選択部110に送る。
【0007】
そして、例外選択部110は、例外ハンドラ検出部100により検出された複数捕捉例外ハンドラが捕捉する複数の例外のうち、複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択し、選択結果を例外ハンドラ生成部120に送る。そして、例外ハンドラ生成部120は、例外選択部110により選択された例外の組を複数捕捉例外ハンドラに代わって捕捉して共通の処理に移行する代替例外ハンドラを生成する。更に、例外ハンドラ生成部120は、生成した当該代替例外ハンドラにおいて、共通の処理に移行させる分岐命令を生成し、生成した分岐命令によって、共通の処理に移行させる。続いて、例外ハンドラ生成部120は、代替例外ハンドラ及び分岐命令を生成したプログラムを、コンパイル結果として出力する。
【0008】
ここで、例外は、例えば、対象プログラムの実行中に、プログラム言語に予め定められた規格に反する処理が行われた場合に発生する処理である。具体的には、例外とは、対象プログラム中の命令が、配列変数を、当該配列変数に定義された範囲外の添え字を用いてアクセスを試みた場合に発生する。これに代えて、プログラム言語に予め定められた規格に反するか否かに関わらず、例外を自律的に発生させる命令によって発生してもよい。一例としては、例外は、Java(登録商標)言語におけるエクセプション(Exception)である。
【0009】
なお、コンパイル対象の対象プログラムは、最適化を効率良く行うべくソースプログラムから生成された中間表現であり、例えば、Java(登録商標)言語のバイトコードである。これに代えて、対象プログラムは、RTL(Register Transfer Language)であってもよいし、四つ組表現であってもよい。また、対象プログラムとは、利用者により実行されるプログラム全体であってもよいし、対象プログラムのうちの一つの機能を示すモジュールであってもよい。モジュールとは、例えば、メソッド(method)、関数(function)、又は手続(procedure)である。
【0010】
図2は、コンパイラ装置10のフローチャートを示す。例外ハンドラ検出部100は、コンパイル対象の対象プログラムを取得すると、当該対象プログラムで発生した例外を捕捉する例外ハンドラのうち、互いに異なる複数の例外を捕捉し、かつ捕捉した例外を再び発生させる複数捕捉例外ハンドラを検出する(S200)。
【0011】
そして、例外選択部110は、例外ハンドラ検出部100により検出された複数捕捉例外ハンドラが捕捉する複数の例外のうち、複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択する(S210)。好ましくは、例外選択部110は、複数捕捉例外ハンドラにおいて発生する頻度が予め定められた基準頻度以上であることを更に条件として、例外の組を選択する。例えば、例外選択部110は、複数捕捉例外ハンドラにおいて例外が発生する頻度として、複数捕捉例外ハンドラが実行される回数当たりの、複数捕捉例外ハンドラにおいて例外の組の何れかが発生する回数を検出し、検出した当該回数に基づいて、例外の組を検出してもよい。
【0012】
例外が発生する頻度を検出する方法の一例としては、コンパイラ装置10は、他の方法により一旦コンパイルされた対象プログラムが実際に実行された場合の情報に基づいて検出してもよいし、対象プログラムの制御フロー及びデータフローの情報に基づいて、例外が発生する頻度の見積もり値を算出してもよい。
【0013】
例外ハンドラ生成部120は、例外選択部110により選択された例外の組を複数捕捉例外ハンドラに代わって捕捉して共通の処理に移行する代替例外ハンドラを生成する(S220)。更に、例外ハンドラ生成部120は、生成した当該代替例外ハンドラにおいて、共通の処理に移行させる分岐命令を生成し、生成した分岐命令によって、共通の処理に移行させる(S230)。また、例外ハンドラ生成部120は、対象プログラムの実行結果を保持するべく、複数捕捉例外ハンドラにおいて実行される処理と略同一の処理を、代替例外ハンドラに複写する。
【0014】
このように、コンパイラ装置10は、複数捕捉例外ハンドラに代わって例外を捕捉し、共通の処理に移行させる代替例外ハンドラを生成し、当該代替例外ハンドラにおいて、共通の処理に移行させる分岐命令を生成する。これにより、コンパイラ装置10は、捕捉した例外を再び発生させる処理を省略し、単なる分岐命令により共通の処理に移行させることができる。
【0015】
また、本図で示した一連の処理が行われるタイミングは、コンパイル対象の対象プログラムの実行が開始される前に限定されない。例えば、コンパイラ装置10は、一旦コンパイルされた対象プログラムの実行中に、代替例外ハンドラを生成してもよい。より具体的には、例外選択部110は、対象プログラムの実行中に、複数捕捉例外ハンドラにおいて発生する頻度が予め定められた基準頻度以上である例外の組を選択する。そして、例外選択部110は、選択した当該例外の組のうち、複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択する。これにより、例外ハンドラ生成部120は、対象プログラムの実行中に必要に応じて代替例外ハンドラを生成することができる。即ち、コンパイラ装置10とは、コンパイル対象の対象プログラムの実行が開始される前に当該対象プログラムを最適化する機能のみならず、当該対象プログラムの実行中に必要に応じて対象プログラムを最適化する機能、例えば、ランタイムライブラリとして実現される機能をも含む。
【0016】
図3は、コンパイル対象の対象プログラムの一例を示す。1行目から13行目に示した括弧は、13行目に示した例外ハンドラにより例外が捕捉される例外捕捉範囲を示している。2行目から9行目に示した括弧は、9行目から12行目に示した例外ハンドラによる例外捕捉範囲を示している。即ち、本図の対象プログラムにおいて、2行目から9行目の例外捕捉範囲において発生した例外は、9行目から12行目に示した例外ハンドラにより捕捉される。更に、9行目から12行目に示した例外ハンドラにおいて発生した例外は、13行目の例外ハンドラにより捕捉される。ただし、13行目の例外ハンドラは、9行目から12行目に示した例外ハンドラにおいて発生した例外のうち、例外1及び例外2を捕捉する。
【0017】
また、3行目及び4行目の命令は、例外1を発生させる命令である。5行目及び6行目の命令は、例外2を発生させる命令である。7行目及び8行目の命令は、例外3を発生させる命令である。また、10行目及び11行目の命令は、9行目から12行目に示した例外ハンドラにより捕捉された例外を、再び発生させる命令である。本図で示すように、例外を自律的に発生させる命令は、例外の種類を指定する。例えば、3行目及び4行目の命令は、例外1という種類の例外を発生させる。そして、例外ハンドラは、指定した例外の種類に該当する例外が発生した場合に、処理を開始する。例えば、13行目の例外ハンドラは、例外検出範囲において発生した例外のうち、指定した例外に該当する例外1及び例外2を捕捉し、13行目の処理を開始する。
【0018】
例外ハンドラ検出部100は、本図に示した対象プログラムを取得すると、複数捕捉例外ハンドラとして、9行目から12行目に示した例外ハンドラを検出する。そして、例外選択部110は、複数捕捉例外ハンドラが捕捉する複数の例外、即ち、例外1、例外2、及び例外3のうち、複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択する。例えば、複数捕捉例外ハンドラが、例外1及び例外2の何れを発生させた場合であっても、13行目に示した共通の処理に移行するので、例外選択部110は、共通の処理に移行する例外の組として、例外1及び例外2を選択する。
【0019】
なお、本図の例において、複数捕捉例外ハンドラとは、Java(登録商標)言語等において、例外検出範囲において発生した何れの例外をも捕捉するfinally節である。これに代えて、複数捕捉例外ハンドラは、Java(登録商標)言語において、複数の例外を捕捉するcatch節であってもよい。例えば、Java(登録商標)言語において、例外の種類は、例外の種類を識別するオブジェクトにより表される。また、catch節は、指定された例外のオブジェクトの子クラスとなる全てのオブジェクトを捕捉する。即ち、複数捕捉例外ハンドラは、複数のオブジェクトの親クラスであるオブジェクトとして表される例外を捕捉するcatch節であってもよい。
【0020】
また、例外ハンドラが例外を捕捉するとは、当該例外が発生したことを条件に、当該例外ハンドラの処理が開始される旨を示す。即ち、9行目から12行目の例外ハンドラが例外1を捕捉するとは、例外1が発生したことを条件に9行目から12行目の例外ハンドラの処理が開始される旨を示す。
【0021】
図4は、コンパイラ装置10による最適化後の対象プログラムの一例を示す。例外ハンドラ生成部120は、例外選択部110により選択された組である例外1及び例外2を捕捉して共通の処理に移行する代替例外ハンドラ、例えば、9行目及び10行目の命令を生成する。そして、例外ハンドラ生成部120は、複数捕捉例外ハンドラに代えて、代替例外ハンドラにおいて、例外選択部110により選択された組の例外である例外1及び例外2を捕捉させるべく、図3の9行目から12行目に示した複数捕捉例外ハンドラに代えて、例外3のみを捕捉する例外ハンドラを11行目から12行目に生成する。そして、例外ハンドラ生成部120は、代替例外ハンドラにおいて、共通の処理に移行させる分岐命令を10行目に生成し、生成した分岐命令によって、共通の処理に移行させる。
【0022】
このように、コンパイラ装置10は、複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択し、選択した例外の組を複数捕捉例外ハンドラに代わって捕捉し、共通の処理に移行させる代替例外ハンドラを生成する。更に、コンパイラ装置10は、代替例外ハンドラにおいて、共通の処理に移行させる分岐命令を生成する。これにより、コンパイラ装置10は、例外の発生により必要となる処理を省略し、単なる分岐命令により処理を移行させることができる。
【0023】
図5(a)は、コンパイル対象の対象プログラムの他の例である。コンパイラ装置10は、関数500−1〜Nを対象プログラムとして取得する。関数500−1は、例外ハンドラ510−1と、例外ハンドラ510−1の例外検出範囲において関数500−2を呼び出すコール(call)命令とを含む。関数500−2は、例外ハンドラ510−2と、例外ハンドラ510−2の例外検出範囲において関数500−3を呼び出すコール(call)命令を含む。関数500−3からN−1も関数500−1と同様であり、関数500−3からN−1は、この順に順次呼び出されることにより実行を開始する。また、関数500−Nは、関数500−(N−1)から呼び出されて実行を開始し、例外ハンドラ510−Nと、例外ハンドラ510−Nの例外検出範囲において例外を発生させる例外発生命令520を含む。なお、関数とは、対象プログラムの作成者により予め定められた対象プログラムの部分であり、メソッド(method)又は手続(procedure)であってもよい。
【0024】
例外ハンドラ検出部100は、この対象プログラムを取得すると、一の複数捕捉例外ハンドラである例外ハンドラ510−Nと、例外ハンドラ510−Nにおいて発生した少なくとも一の例外を捕捉する他の複数捕捉例外ハンドラである例外ハンドラ510−2との2つの複数捕捉例外ハンドラを検出する。そして、例外選択部110は、例外ハンドラ510−Nが捕捉する複数の例外のうち、例外ハンドラ510−Nが再び例外を発生させることにより例外ハンドラ510−2の処理に移行し、かつ例外ハンドラ510−2において捕捉した例外を再び発生させることにより共通の処理に移行する例外の組を選択する。例えば、本図に例において、例外1が発生した場合には、例外ハンドラ510−2により捕捉され、かつ例外ハンドラ510−2から例外ハンドラ510−1に処理が移行するので、例外選択部110は、例外1を選択する。
【0025】
これを受けて、例外ハンドラ生成部120は、この2つの複数捕捉例外ハンドラのそれぞれに対応付けて、2つの代替例外ハンドラのそれぞれを生成し、この2つの複数捕捉例外ハンドラのそれぞれに代えて、対応する2つの代替例外ハンドラのそれぞれにおいて、例外選択部110により選択された例外1を捕捉させる。
【0026】
図5(b)は、コンパイル対象の対象プログラムにおける各命令が、発生又は捕捉する例外の種類を、関数呼び出しおよび例外捕捉範囲の入れ子の深さに対応付けて示す。例えば、例外発生命令520は、例外1を発生させる命令であり、例外ハンドラ510−2及び例外ハンドラ510−Nのそれぞれは、例外1、例外2、及び例外3を捕捉する命令である。また、例外ハンドラ510−1は、例外1を捕捉する命令である。
【0027】
また、例外ハンドラ510−1は、関数呼び出しにより呼び出された関数500−2の処理中に発生した例外1を、関数呼び出しの外で捕捉する。また、例外ハンドラ510−2は、例外ハンドラ510−1を含む関数から呼び出された関数の内部で発生した例外を捕捉する。即ち、例外ハンドラ510−2は、関数500−2から関数500−Nで発生した例外を捕捉する。また、例外ハンドラ510−Nは、例外発生命令520が発生させる例外を捕捉する。
即ち、例外ハンドラ510−2は、関数呼び出しの入れ子が例外ハンドラ510−1より深い。更に、例外ハンドラ510−2は、例外検出範囲の入れ子が例外ハンドラ510−1より深い。同様に、例外ハンドラ510−3からNは、この順に、関数呼び出し及び例外検出範囲の入れ子が深くなる。
【0028】
このように、複数捕捉例外ハンドラの一例である例外ハンドラ510−Nは、共通の処理の一例である例外ハンドラ510−1に処理を移す過程で、他の例外ハンドラを経由する。従って、例外ハンドラ510−Nから例外ハンドラ510−1に移行する間に処理が経由する他の例外ハンドラの数がより多い場合に、例外が発生してから共通の処理に処理が移るまでにより多くの時間が必要となる。また、例外ハンドラ510−Nは、例外ハンドラ510−1に処理を移す過程で、関数500−Nから関数500−2の関数呼び出しから復帰する処理を経る。従って、例外ハンドラ510−1から例外ハンドラ510−Nに至る関数呼び出しの入れ子の深さがより深い場合に、例外が発生してから共通の処理に処理が移るまでにより多くの時間が必要となる。
【0029】
上記の処理に要する時間を減少させるべく、好ましくは、例外選択部110は、例外ハンドラ510−Nから例外ハンドラ510−1に移行する間に処理が経由する他の例外ハンドラの数が、予め定められた数より大きいことと、例外ハンドラ510−1から例外ハンドラ510−Nに至る関数呼び出しの入れ子の深さが予め定められた数より大きいことを更に条件として、例外の組を選択する。
即ち、例外選択部110は、例外ハンドラ510−Nが捕捉する複数の例外のうち、例外ハンドラ510−Nが再び例外を発生させることにより例外ハンドラ510−1に移行し、例外ハンドラ510−Nから例外ハンドラ510−1に移行する間に処理が経由する他の例外ハンドラの数が、予め定められた数より大きく、かつ例外ハンドラ510−1から例外ハンドラ510−Nに至る関数呼び出しの入れ子の深さが予め定められた数より大きい、例外の組合せを選択する。
なお、複数捕捉例外ハンドラが3つ以上検出された場合も同様であり、例えば、例外選択部110は、第1の複数捕捉例外ハンドラから、第2の複数捕捉例外ハンドラを経由して、第3の複数捕捉例外ハンドラに移行する間に処理が経由する他の例外ハンドラの数が、予め定められた数より大きいことと、第1の複数捕捉例外ハンドラから、第2の複数捕捉例外ハンドラを経由して、第3の複数捕捉例外ハンドラに至る関数呼び出しの入れ子の深さが予め定められた数より大きいことを更に条件として、例外の組を選択する。
【0030】
図6は、コンパイラ装置10のハードウェア構成の一例を示す。実施形態に係るコンパイラ装置10は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、グラフィックコントローラ1075、及び表示装置1080を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
【0031】
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたコンパイラプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【0032】
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して他の装置と通信する。ハードディスクドライブ1040は、コンパイラ装置10が使用するコンパイラプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。
【0033】
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、コンパイラ装置10の起動時にCPU1000が実行するブートプログラムや、コンパイラ装置10のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【0034】
コンパイラ装置10に提供されるコンパイラプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。コンパイラプログラムは、記録媒体から読み出され、入出力チップ1070を介してコンパイラ装置10にインストールされ、コンパイラ装置10において実行される。
【0035】
コンパイラ装置10にインストールされて実行されるコンパイラプログラムは、例外ハンドラ検出モジュールと、例外選択モジュールと、例外ハンドラ生成モジュールとを含む。各モジュールがコンパイラ装置10に働きかけて行わせる動作は、図1から図5において説明したコンパイラ装置10における、対応する部材の動作と同一であるから、説明を省略する。
【0036】
以上に示したプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してコンパイラプログラムをコンパイラ装置10に提供してもよい。
【0037】
このように、コンパイラ装置10は、複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択し、選択した例外の組を複数捕捉例外ハンドラに代わって捕捉し、共通の処理に移行させる代替例外ハンドラを生成する。更に、コンパイラ装置10は、代替例外ハンドラにおいて、共通の処理に移行させる分岐命令を生成する。これにより、コンパイラ装置10は、例外の発生により必要となる処理を省略し、単なる分岐命令により処理を移行させることができる。更に、コンパイラ装置10は、部分冗長性除去等の他の最適化処理が最適化の対象とする対象プログラム中の領域であるコンパイルスコープを広げることができるので、最適化の効率を高めることができる。
【0038】
以上、本発明を実施形態を用いて説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。上記実施形態に、多様な変更または改良を加えることができる。そのような変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【0039】
以上に示した実施形態によると、以下の各項目に示すコンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法を実現できる。
【0040】
(項目1) コンパイル対象のプログラムである対象プログラムの例外処理を最適化するコンパイラ装置であって、前記対象プログラムで発生した例外を捕捉する例外ハンドラのうち、互いに異なる複数の例外を捕捉し、かつ捕捉した例外を再び発生させる複数捕捉例外ハンドラを検出する例外ハンドラ検出部と、検出された前記複数捕捉例外ハンドラが捕捉する前記複数の例外のうち、前記複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択する例外選択部と、前記例外選択部により選択された例外の組を前記複数捕捉例外ハンドラに代わって捕捉し、前記共通の処理に移行させる代替例外ハンドラを生成する例外ハンドラ生成部とを備えるコンパイラ装置。
(項目2) 前記例外ハンドラ生成部は、前記代替例外ハンドラにおいて、前記共通の処理に移行させる分岐命令を生成し、生成した前記分岐命令によって前記共通の処理に移行させる項目1記載のコンパイラ装置。
【0041】
(項目3) 前記例外選択部は、前記複数捕捉例外ハンドラにおいて発生する頻度が予め定められた基準頻度以上であり、かつ前記共通の処理に移行する例外の組を選択する項目1記載のコンパイラ装置。
(項目4) 前記例外選択部は、前記複数捕捉例外ハンドラにおいて例外が発生する頻度として、前記複数捕捉例外ハンドラが実行される回数当たりの、前記複数捕捉例外ハンドラにおいて前記例外の組の何れかが発生する回数を検出する項目3記載のコンパイラ装置。
(項目5) 前記共通の処理は、関数呼び出しにより呼び出された関数の処理中に発生した例外を前記関数呼び出しの外で捕捉する処理を含み、前記複数例外捕捉ハンドラは、前記関数呼び出しの内部で例外を捕捉し、前記例外選択部は、前記共通の処理から前記複数捕捉例外ハンドラに至る関数呼び出しの入れ子の深さが、予め定められた数より大きいことを更に条件として、前記例外の組を選択する項目1記載のコンパイラ装置。
【0042】
(項目6) 前記例外選択部は、前記複数捕捉例外ハンドラから前記共通の処理に移行する間に処理が経由する他の例外ハンドラの数が、予め定められた数より大きいことを更に条件として、前記例外の組を選択する項目1記載のコンパイラ装置。
(項目7) 前記共通の処理は、関数呼び出しにより呼び出された関数の処理中に発生した例外を前記関数呼び出しの外で捕捉する処理を含み、前記複数例外捕捉ハンドラは、前記関数呼び出しの内部で例外を捕捉し、前記例外選択部は、前記共通の処理から前記複数捕捉例外ハンドラに至る関数呼び出しの入れ子の深さと、前記複数捕捉例外ハンドラから前記共通の処理に移行する間に処理が経由する他の例外ハンドラの数とに更に基づき、前記例外の組を選択する項目1記載のコンパイラ装置。
(項目8) 前記例外ハンドラ検出部は、一の前記複数捕捉例外ハンドラと、前記一の複数捕捉例外ハンドラにおいて発生した少なくとも一の例外を捕捉する他の前記複数捕捉例外ハンドラとの2つの前記複数捕捉例外ハンドラを検出し、前記例外選択部は、前記一の複数捕捉例外ハンドラが捕捉する複数の例外のうち、前記他の複数捕捉例外ハンドラにおいて捕捉した例外を再び発生させることにより前記共通の処理に移行する例外の組を選択し、前記例外ハンドラ生成部は、前記2つの複数捕捉例外ハンドラのそれぞれに対応付けて、2つの前記代替例外ハンドラのそれぞれを生成し、前記2つの複数捕捉例外ハンドラのそれぞれに代えて、対応する前記2つの代替例外ハンドラのそれぞれにおいて、前記例外選択部により選択された例外の組を捕捉させる項目1記載のコンパイラ装置。
【0043】
(項目9) コンパイル対象のプログラムである対象プログラムの例外処理を最適化するコンパイラ装置としてコンピュータを機能させるコンパイラプログラムであって、前記コンピュータを、前記対象プログラムで発生した例外を捕捉する例外ハンドラのうち、互いに異なる複数の例外を捕捉し、かつ捕捉した例外を再び発生させる複数捕捉例外ハンドラを検出する例外ハンドラ検出部と、検出された前記複数捕捉例外ハンドラが捕捉する前記複数の例外のうち、前記複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択する例外選択部と、前記例外選択部により選択された例外の組を前記複数捕捉例外ハンドラに代わって捕捉し、前記共通の処理に移行させる代替例外ハンドラを生成する例外ハンドラ生成部として機能させるコンパイラプログラム。
(項目10) 前記共通の処理は、関数呼び出しにより呼び出された関数の処理中に発生した例外を前記関数呼び出しの外で捕捉する処理を含み、前記複数例外捕捉ハンドラは、前記関数呼び出しの内部で例外を捕捉し、前記例外選択部は、前記共通の処理から前記複数捕捉例外ハンドラに至る関数呼び出しの入れ子の深さと、前記複数捕捉例外ハンドラから前記共通の処理に移行する間に処理が経由する他の例外ハンドラの数とに更に基づき、前記例外の組を選択する項目9記載のコンパイラプログラム。
【0044】
(項目11) 前記例外ハンドラ検出部は、一の前記複数捕捉例外ハンドラと、前記一の複数捕捉例外ハンドラにおいて発生した少なくとも一の例外を捕捉する他の前記複数捕捉例外ハンドラとの2つの前記複数捕捉例外ハンドラを検出し、前記例外選択部は、前記一の複数捕捉例外ハンドラが捕捉する複数の例外のうち、前記他の複数捕捉例外ハンドラにおいて捕捉した例外を再び発生させることにより前記共通の処理に移行する例外の組を選択し、前記例外ハンドラ生成部は、前記2つの複数捕捉例外ハンドラのそれぞれに対応付けて、2つの前記代替例外ハンドラのそれぞれを生成し、前記2つの複数捕捉例外ハンドラのそれぞれに代えて、対応する前記2つの代替例外ハンドラのそれぞれにおいて、前記例外選択部により選択された例外の組を捕捉させる項目9記載のコンパイラプログラム。
(項目12) 項目9から項目11の何れかに記載のコンパイラプログラムを記録した記録媒体。
【0045】
(項目13) コンパイル対象のプログラムである対象プログラムの例外処理を最適化するコンパイラ装置としてコンピュータを動作させるコンパイル方法であって、前記対象プログラムで発生した例外を捕捉する例外ハンドラのうち、互いに異なる複数の例外を捕捉し、かつ捕捉した例外を再び発生させる複数捕捉例外ハンドラを検出する例外ハンドラ検出段階と、検出された前記複数捕捉例外ハンドラが捕捉する前記複数の例外のうち、前記複数捕捉例外ハンドラが再び例外を発生させることにより共通の処理に移行する例外の組を選択する例外選択段階と、前記例外選択部により選択された例外の組を前記複数捕捉例外ハンドラに代わって捕捉し、前記共通の処理に移行させる代替例外ハンドラを生成する例外ハンドラ生成段階とを備えるコンパイル方法。
【0046】
【発明の効果】
上記説明から明らかなように、本発明によれば例外処理を最適化することができる。
【図面の簡単な説明】
【図1】図1は、コンパイラ装置10の機能ブロック図を示す。
【図2】図2は、コンパイラ装置10のフローチャートを示す。
【図3】図3は、コンパイル対象の対象プログラムの一例を示す。
【図4】図4は、コンパイラ装置10による最適化後の対象プログラムの一例を示す。
【図5】図5(a)は、コンパイル対象の対象プログラムの他の例である。図5(b)は、コンパイル対象の対象プログラムにおける各命令が、発生又は捕捉する例外の種類を、関数呼び出しおよび例外捕捉範囲の入れ子の深さに対応付けて示す。
【図6】図6は、コンパイラ装置10のハードウェア構成の一例を示す。
【符号の説明】
10 コンパイラ装置
100 例外ハンドラ検出部
110 例外選択部
120 例外ハンドラ生成部
500 関数
510 例外ハンドラ
520 例外発生命令
Claims (13)
- コンパイル対象のプログラムである対象プログラムの例外処理を最適化するコンパイラ装置であって、
前記対象プログラムを取得して記憶装置に格納し、前記対象プログラムが実行された場合に発生する例外を捕捉する命令列である例外ハンドラのうち、互いに異なる複数の例外を捕捉して捕捉した例外を再び発生させる命令列である複数捕捉例外ハンドラを、前記記憶装置に格納した前記対象プログラムの各命令の中からCPUの動作により検出する例外ハンドラ検出部と、
検出された前記複数補足例外ハンドラが捕捉して再び発生させる例外を捕捉する例外ハンドラを前記記憶装置に格納された前記対象プログラムから前記CPUの動作により検出して、検出された前記複数捕捉例外ハンドラが捕捉して再び発生させる前記複数の例外のうち、前記対象プログラム中の同一の例外ハンドラにより捕捉されて共通の処理に移行することとなる例外の組を前記CPUの動作により選択する例外選択部と、
前記例外選択部により選択された例外の組を前記複数捕捉例外ハンドラに代わって捕捉して前記共通の処理に移行させる代替例外ハンドラを前記CPUの動作により生成して、前記記憶装置に格納する最適化後の前記対象プログラムに含める例外ハンドラ生成部と
を備えるコンパイラ装置。 - 前記例外ハンドラ生成部は、前記最適化後の前記対象プログラムとして前記記憶装置に格納する前記代替例外ハンドラ中に前記共通の処理に移行させる分岐命令を前記CPUの動作により生成し、前記代替例外ハンドラが実行されると前記分岐命令によって前記共通の処理に移行させるようにする請求項1記載のコンパイラ装置。
- 前記例外選択部は、前記CPUの動作により、前記複数捕捉例外ハンドラにおいて発生する頻度を検出し、当該頻度が予め定められた基準頻度以上であり、かつ前記共通の処理に移行することとなる例外の組を選択する請求項1記載のコンパイラ装置。
- 前記例外選択部は、前記CPUの動作により、前記複数捕捉例外ハンドラにおいて例外が発生する頻度として、前記複数捕捉例外ハンドラが実行される回数当たりの、前記複数捕捉例外ハンドラにおいて前記例外の組の何れかが発生する回数を検出する請求項3記載のコンパイラ装置。
- 前記共通の処理は、関数呼び出しにより呼び出された関数の処理中に発生した例外を前記関数呼び出しの外で捕捉する処理を含み、
前記複数例外捕捉ハンドラは、呼び出された前記関数の内部で例外を捕捉する命令列であり、
前記例外選択部は、前記CPUの動作により、前記共通の処理から前記複数捕捉例外ハンドラに至る関数呼び出しの入れ子の深さが、予め定められた数より大きいことを更に条件として、前記例外の組を選択する請求項1記載のコンパイラ装置。 - 前記例外選択部は、前記CPUの動作により、前記複数捕捉例外ハンドラから前記共通の処理に移行する間に処理が経由する他の例外ハンドラの数が、予め定められた数より大きいことを更に条件として、前記例外の組を選択する請求項1記載のコンパイラ装置。
- 前記共通の処理は、関数呼び出しにより呼び出された関数の処理中に発生した例外を前記関数呼び出しの外で捕捉する処理を含み、
前記複数例外捕捉ハンドラは、呼び出された前記関数の内部で例外を捕捉する命令列であり、
前記例外選択部は、前記CPUの動作により、前記共通の処理から前記複数捕捉例外ハンドラに至る関数呼び出しの入れ子の深さと、前記複数捕捉例外ハンドラから前記共通の処理に移行する間に処理が経由する他の例外ハンドラの数とに更に基づき、前記例外の組を選択する請求項1記載のコンパイラ装置。 - 前記例外ハンドラ検出部は、前記記憶装置に格納した前記対象プログラムの各命令の中から、一の前記複数捕捉例外ハンドラと、前記一の複数捕捉例外ハンドラにおいて発生した少なくとも一の例外を捕捉する他の前記複数捕捉例外ハンドラとの2つの前記複数捕捉例外ハンドラを前記CPUの動作により検出し、
前記例外選択部は、前記一の複数捕捉例外ハンドラが捕捉して再び発生させる複数の例外のうち、前記他の複数捕捉例外ハンドラにおいて更に捕捉して当該例外を再び発生させることにより前記対象プログラム中の同一の例外ハンドラにより捕捉されて前記共通の処理に移行する例外の組を前記CPUの動作により選択し、
前記例外ハンドラ生成部は、前記CPUの動作により、前記2つの複数捕捉例外ハンドラのそれぞれに対応付けて、2つの前記代替例外ハンドラのそれぞれを生成し、前記2つの複数捕捉例外ハンドラのそれぞれに代えて、前記対象プログラムが実行されると、対応する前記2つの代替例外ハンドラのそれぞれにおいて、前記例外選択部により選択された例外の組を捕捉させるようにする請求項1記載のコンパイラ装置。 - コンパイル対象のプログラムである対象プログラムの例外処理を最適化するコンパイラ装置としてコンピュータを機能させるコンパイラプログラムであって、
前記コンピュータを、
前記対象プログラムを取得して前記コンピュータの記憶装置に格納し、前記対象プログラムが実行された場合に発生する例外を捕捉する命令列である例外ハンドラのうち、互いに異なる複数の例外を捕捉して捕捉した例外を再び発生させる命令列である複数捕捉例外ハンドラを、前記記憶装置に格納した前記対象プログラムの各命令の中から前記コンピュータのCPUの動作により検出する例外ハンドラ検出部と、
検出された前記複数補足例外ハンドラが捕捉して再び発生させる例外を捕捉する例外ハンドラを前記記憶装置に格納された前記対象プログラムから前記CPUの動作により検出して、検出された前記複数捕捉例外ハンドラが捕捉して再び発生させる前記複数の例外のうち、前記対象プログラム中の同一の例外ハンドラにより捕捉されて共通の処理に移行することとなる例外の組を前記CPUの動作により選択する例外選択部と、
前記例外選択部により選択された例外の組を前記複数捕捉例外ハンドラに代わって捕捉して前記共通の処理に移行させる代替例外ハンドラを前記CPUの動作により生成して、前記記憶装置に格納する最適化後の前記対象プログラムに含める例外ハンドラ生成部と
して機能させるコンパイラプログラム。 - 前記共通の処理は、関数呼び出しにより呼び出された関数の処理中に発生した例外を前記関数呼び出しの外で捕捉する処理を含み、
前記複数例外捕捉ハンドラは、呼び出された前記関数の内部で例外を捕捉する命令列であり、
前記例外選択部は、前記CPUの動作により、前記共通の処理から前記複数捕捉例外ハンドラに至る関数呼び出しの入れ子の深さと、前記複数捕捉例外ハンドラから前記共通の処理に移行する間に処理が経由する他の例外ハンドラの数とに更に基づき、前記例外の組を選択する請求項9記載のコンパイラプログラム。 - 前記例外ハンドラ検出部は、前記記憶装置に格納した前記対象プログラムの各命令の中から、一の前記複数捕捉例外ハンドラと、前記一の複数捕捉例外ハンドラにおいて発生した少なくとも一の例外を捕捉する他の前記複数捕捉例外ハンドラとの2つの前記複数捕捉例外ハンドラを前記CPUの動作により検出し、
前記例外選択部は、前記一の複数捕捉例外ハンドラが捕捉して再び発生させる複数の例外のうち、前記他の複数捕捉例外ハンドラにおいて更に捕捉して当該例外を再び発生させることにより前記対象プログラム中の同一の例外ハンドラにより捕捉されて前記共通の処理に移行する例外の組を前記CPUの動作により選択し、
前記例外ハンドラ生成部は、前記CPUの動作により、前記2つの複数捕捉例外ハンドラのそれぞれに対応付けて、2つの前記代替例外ハンドラのそれぞれを生成し、前記2つの複数捕捉例外ハンドラのそれぞれに代えて、前記対象プログラムが実行されると、対応する前記2つの代替例外ハンドラのそれぞれにおいて、前記例外選択部により選択された例外の組を捕捉させるようにする請求項9記載のコンパイラプログラム。 - 請求項9から請求項11の何れかに記載のコンパイラプログラムを記録した記録媒体。
- コンパイル対象のプログラムである対象プログラムの例外処理を最適化するコンパイラ装置としてコンピュータを動作させるコンパイル方法であって、
CPUの動作により、前記対象プログラムを取得して記憶装置に格納し、前記対象プログラムが実行された場合に発生する例外を捕捉する命令列である例外ハンドラのうち、互いに異なる複数の例外を捕捉して捕捉した例外を再び発生させる命令列である複数捕捉例外ハンドラを、前記記憶装置に格納した前記対象プログラムの各命令の中から検出する例外ハンドラ検出段階と、
前記CPUの動作により、検出された前記複数補足例外ハンドラが捕捉して再び発生させる例外を捕捉する例外ハンドラを前記記憶装置に格納された前記対象プログラムから検出して、検出された前記複数捕捉例外ハンドラが捕捉して再び発生させる前記複数の例外のうち、前記対象プログラム中の同一の例外ハンドラにより捕捉されて共通の処理に移行することとなる例外の組を選択する例外選択段階と、
前記CPUの動作により、前記例外選択部により選択された例外の組を前記複数捕捉例外ハンドラに代わって捕捉して前記共通の処理に移行させる代替例外ハンドラを生成して、前記記憶装置に格納する最適化後の前記対象プログラムに含める例外ハンドラ生成段階と
を備えるコンパイル方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003079010A JP3899046B2 (ja) | 2003-03-20 | 2003-03-20 | コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法 |
US10/801,879 US7526761B2 (en) | 2003-03-20 | 2004-03-16 | Exception handling compiler apparatus, program, recording medium, and compiling method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003079010A JP3899046B2 (ja) | 2003-03-20 | 2003-03-20 | コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004287844A JP2004287844A (ja) | 2004-10-14 |
JP3899046B2 true JP3899046B2 (ja) | 2007-03-28 |
Family
ID=33293313
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003079010A Expired - Fee Related JP3899046B2 (ja) | 2003-03-20 | 2003-03-20 | コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7526761B2 (ja) |
JP (1) | JP3899046B2 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7061487B2 (en) * | 2003-04-03 | 2006-06-13 | Silicon Integrated Systems Corp. | Method and apparatus for improving depth information communication bandwidth in a computer graphics system |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7539983B2 (en) | 2005-01-14 | 2009-05-26 | Microsoft Corporation | Tool for processing software programs using modified live-ness definition |
CA2604827C (en) * | 2005-04-18 | 2012-03-20 | Research In Motion Limited | Method for handling a detected error in a script-based application |
US8146085B2 (en) * | 2007-06-25 | 2012-03-27 | Microsoft Corporation | Concurrent exception handling using an aggregated exception structure |
US7861072B2 (en) * | 2007-06-25 | 2010-12-28 | Microsoft Corporation | Throwing one selected representative exception among aggregated multiple exceptions of same root cause received from concurrent tasks and discarding the rest |
US8667474B2 (en) * | 2009-06-19 | 2014-03-04 | Microsoft Corporation | Generation of parallel code representations |
US8806465B2 (en) * | 2010-12-03 | 2014-08-12 | International Busines Machines Corporation | Refactor exception class hierarchy for reduced footprint and faster application start |
US9396044B2 (en) * | 2014-04-25 | 2016-07-19 | Sony Corporation | Memory efficient thread-level speculation |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1139169A (ja) * | 1997-07-18 | 1999-02-12 | Toshiba Corp | コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体 |
JP3790683B2 (ja) * | 2001-07-05 | 2006-06-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータ装置、その例外処理プログラム及びコンパイル方法 |
-
2003
- 2003-03-20 JP JP2003079010A patent/JP3899046B2/ja not_active Expired - Fee Related
-
2004
- 2004-03-16 US US10/801,879 patent/US7526761B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20040230962A1 (en) | 2004-11-18 |
JP2004287844A (ja) | 2004-10-14 |
US7526761B2 (en) | 2009-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU780946B2 (en) | Method and apparatus for debugging optimized code | |
US7062755B2 (en) | Recovering from compilation errors in a dynamic compilation environment | |
US7577936B2 (en) | Optimization of conversion of a character coding system | |
US6363522B1 (en) | Method and apparatus for handling exceptions as normal control flow | |
US8205192B2 (en) | Compiler device, program, and recording medium | |
JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
EP2754044A2 (en) | Profile guided jit code generation | |
JP3899046B2 (ja) | コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法 | |
JP2002149416A (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
JP2008059279A (ja) | 文字列出力処理を最適化する技術 | |
JP4086791B2 (ja) | コンパイラプログラム、動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体 | |
JP5048949B2 (ja) | 非同期プログラムフローのモデリングを含むソフトウェアツール | |
JP2005529383A (ja) | シングルスレッドアプリケーションを支援する時間多重化推論的マルチスレッディング | |
US20100191693A1 (en) | Segmenting Sequential Data with a Finite State Machine | |
JP4093484B2 (ja) | コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体 | |
US7774767B2 (en) | System and method for compiler interprocedural optimization having support for object files in libraries | |
JP2003241967A (ja) | プログラム実行装置およびその方法、並びにそこで実行されるプログラム | |
JP2018124877A (ja) | コード生成装置、コード生成方法、およびコード生成プログラム | |
JP2005173645A (ja) | プログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体 | |
JP4788902B2 (ja) | コンパイル最適化方法およびコンパイラ | |
JP3927510B2 (ja) | コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法 | |
JP7026563B2 (ja) | 高位合成方法、高位合成プログラム、高位合成装置 | |
JP2000056983A (ja) | プログラムリンクシステム、方法及び記録媒体 | |
JP6547477B2 (ja) | ソースコード最適化装置、ソースコード最適化プログラム及びオブジェクトコード生成方法 | |
JP2024030940A (ja) | ソースコード変換プログラムおよびソースコード変換方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060829 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061002 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20061003 |
|
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: 20061219 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20061219 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061222 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |