JP4754909B2 - コンパイラ装置、コンパイル方法、コンパイラプログラム - Google Patents
コンパイラ装置、コンパイル方法、コンパイラプログラム Download PDFInfo
- Publication number
- JP4754909B2 JP4754909B2 JP2005261030A JP2005261030A JP4754909B2 JP 4754909 B2 JP4754909 B2 JP 4754909B2 JP 2005261030 A JP2005261030 A JP 2005261030A JP 2005261030 A JP2005261030 A JP 2005261030A JP 4754909 B2 JP4754909 B2 JP 4754909B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- execution path
- variable
- branch
- intermediate code
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Description
最適化の方法として、プログラムの実行効率を上げるように命令の順序を並び替える命令スケジューリングが用いられる。
また、複数の分岐を含むプログラムにおいて、実行頻度が高い実行経路(以下「ホットパス」という)が分かっている場合がある。そのような場合、ホットパス上の命令文を移動させてホットパスの基本ブロックを拡大し、ホットパスの実行効率を上げる方法が知られている。(非特許文献1参照)
ここで、ホットパス上の基本ブロックを拡張する方法について図5(a)のプログラムを例に説明する。図5(a)はプログラムの一部を示しており、図5(b)はこのプログラムの制御の流れを示す制御フローグラフを表している。制御フローグラフは、基本ブロックB1〜B7の間を分岐や合流を表す有向辺で接続した有向グラフである。また、この例では破線矢印200上の基本ブロックB1、B2、B4、B5、B7を順に遷移する実行経路をホットパスとして説明する。
中田育男著「コンパイラの構成と最適化」朝倉出版、2004年、P358−381
そこで、本発明は上記問題に鑑みてなされたものであり、プログラムの整合性を保持しつつ、ある実行経路の基本ブロックを拡張することができるようにプログラムを変換するコンパイラ装置を提供することを目的とする。
また、前記コンパイラ装置は、ソースプログラムを構文解析して中間コードに変換し、中間コードを目的プログラムに変換するコンパイラ装置であり、前記実行経路コード生成手段は、前記一部命令列が前記構文解析によって変換された中間コードである部分中間コード上の変数に基づいて、前記変数の置換え対象である置換対象変数を算出する変数情報算出部と、前記部分中間コードの前記指定された実行経路に係る、分岐命令以外の各中間コードを少なくとも含む実行経路中間コードであって、前記置換対象変数をその他の変数に置換えた実行経路中間コードを生成する実行経路中間コード生成部と、前記実行経路中間コードに含まれる分岐命令毎に、前記指定された実行経路を実行できることを判定する分岐条件に変換し、各分岐条件に基づいて判定を行う判定中間コードに各々変換する判定中間コード生成部を備え、前記保証コード生成手段は、前記置換対象変数が前記指定された実行経路の出口で生存が必要とされる変数の場合に、当該置換対象変数から元の変数へ値の復元をする保証中間コードを生成する保証中間コード生成部を備え、前記分岐コード生成手段は、前記判定中間コードの分岐条件が成立しない場合に、前記部分中間コードの始点に分岐し、前記分岐条件が成立する場合に、前記保証中間コードの始点に向けて進む分岐中間コードを生成する分岐中間コード生成部と、前記部分中間コードと、前記実行経路中間コードと、前記判定中間コードと、前記保証中間コードと前記分岐中間コードを目的プログラムである実行コードに変換する実行コード生成部とを備えることとしてもよい。
また、本発明に係るコンパイラ装置は、前記ソースプログラムを逐次実行するインタプリタ機能を有し、前記インタプリタ機能により前記一部命令列における実行経路の情報を収集し、実行頻度が高い実行経路を抽出する抽出手段を備え、前記実行経路指定手段は、前記抽出手段によって抽出された実行経路を指定することとしてもよい。
また、本発明に係るコンパイラ装置は、前記部分コード生成手段と、前記実行経路コード生成手段と、前記保証コード生成手段と、前記分岐コード生成手段によって生成された目的コードに最適化を施すこととしてもよい。
<実施の形態>
本実施の形態に係るコンパイラ装置は、ソースプログラムを読み込み、プログラムを字句列に分解する字句解析を行い、字句の列に基づいてプログラミング言語の構文木を構築する構文解析を行い、構文解析によって構築された構文木に基づいて装置内部の中間語で記述された中間プログラムを生成し、中間プログラムについて命令スケジューリング等の最適化を行い、変数についてレジスタ等の資源割付を行った後の中間プログラムを実行形式プログラムに変換する。
<構成>
図1は、実施の形態におけるコンパイラ装置1の全体構成を示す機能ブロック図である。
コンパイラ装置1は、具体的には、マイクロプロセッサ、ROM(Read Only Memory)、RAM(Random Access Memory)、ハードディスク装置等を用いて実現されるコンピュータシステムである。前記ROM又は前記ハードディスク装置は、コンピュータプログラムを記憶している。
以下、各部の機能について説明する。
構文解析部11は、ソースプログラム51を読み出し、構文解析を行ってソースプログラム51中の制御構造を認識し、中間コード列である中間プログラムを生成し、コンパイラ装置1内に格納する。中間コードは、ソースプログラムの制御構造と等価な制御構造となるように条件分岐文とラベルとを用いて表したものである。
ここで、制御フロー解析は、中間プログラムの制御の流れを解析して中間プログラムを基本ブロックに分割することであり、データフロー解析は、変数の生存区間、定義箇所及び参照箇所を解析することである。
命令文において変数が保持する値が更新される場合に、その命令文において変数が定義されると言い、その命令文を変数の定義箇所と呼ぶ。また、命令文において変数が保持する値が使われる場合、その変数は、その命令文で参照されると言い、その命令文を変数の参照箇所と呼ぶ。
プログラム変換部120は、変数情報算出部121、実行経路中間コード生成部122、判定中間コード生成部123、保証中間コード生成部124と分岐中間コード生成部125を含んで構成される。
プログラム変換部120は、装置外からホットパス情報が入力されるとプログラム変換部120の内部に格納し、ホットパスを含むサブルーチンプログラムについてプログラム変換を行う。
変数情報算出部121は、最適化部12から送出された解析結果に基づき各基本ブロックにおける変数の生存情報及び定義情報を算出し、算出した生存情報と定義情報、及びホットパス情報に基づいてパス入力変数、パス出力変数、パス置換対象変数、パス保証変数を算出する。また、変数情報算出部121は、算出したパス置換対象変数を実行経路中間コード生成部122へ送出し、パス保証変数を保証中間コード生成部124へ送出する。
2に記載されているものと同様である。
パス置換対象変数は、パス入力変数であり、かつホットパス上で定義されている変数を示しており、パス保証変数は、パス置換対象変数であり、かつパス出力変数である変数を示している。
実行経路中間コード生成部122は、変数の識別子等の情報を表した変数名表に存在しない識別子に置換え、変数の置換えと同時にパス置換対象変数と置換した変数のペアを生成してプログラム変換部120内部に格納する。変数名表は、字句解析の際にプログラム上で宣言されている変数の識別子と変数の型等の情報を集めたものであり、コンパイラ装置1内に格納される。
分岐中間コード生成部125は、プログラム変換部120の実行経路中間コードに含まれる判定中間コードを読み出し、判定中間コードの条件が真である場合に、実行経路中間コードの実行に続いて保証中間コードを実行し、当該条件が偽である場合に、実行経路中間コードの実行に続いて部分中間コードを実行する分岐中間コードを生成する。また、分岐中間コード生成部125は、判定中間コードの実行に続いて分岐中間コードが実行されるように、判定中間コードを実行経路中間コードに挿入し、挿入後の実行経路中間コードをプログラム変換部120の内部に格納する。
実行コード生成部14は、資源割付が行われた全中間コードについて、機械語である実行コードに変換しコンパイラ装置外に出力する。
本実施の形態のコンパイラ装置1で用いるデータについて説明する。
図10(a)は、変数情報算出部121が図5(b)に示す制御フローグラフの基本ブロック毎に、変数の生存情報であるIN302,OUT304、定義情報であるDEF303を算出した結果を示している。
図10(c)は、実行経路中間コード生成部122が図9に示す制御フローグラフの各基本ブロックにおいて、パス置換対象変数と置換えた変数のペアの生成履歴を示している。図9に示す制御フローグラフは、実行経路中間コード生成部122が図5(b)のホットパス200の命令文を複写し、複写した命令文について変数置換処理を行い、新たに生成した実行経路を示している。
<動作>
次に、本発明の特徴部分であるプログラム変換部120内部の動作を中心に、図2に示す動作フローを説明する。
まず、構文解析部11は、部分プログラムが入力されると構文解析を行い、部分プログラムに対応する部分中間コードを生成し、コンパイラ装置1の内部に格納する(ステップS11)。
ステップS12に続いて最適化部12は、部分中間コードを読み出し、制御フロー解析、データフロー解析を行い、解析結果を変数情報算出部121へ送出し、変数情報算出部121は部分プログラムの各基本ブロックにおける変数の生存情報(IN,OUT)、定義情報(DEF)を算出する(ステップS13)。
次に、判定中間コード生成部123は、実行経路中間コードを受け取ると、実行経路中間コードに含まれている分岐命令をホットパスが実行される条件となるように変換した判定中間コードを生成し、分岐命令以外の命令文に続いて判定中間コードが実行されるように、判定中間コードを実行経路中間コードに挿入し、判定中間コードを含む実行経路中間コードをプログラム変換部120の内部に格納する(ステップS16)。
ステップS17に続いて、分岐中間コード生成部125は、ステップS16において格納された実行経路中間コードを読み出し、当該判定中間コードの条件が成立しない場合には、判定中間コードに続いてステップS11で生成された部分中間コードの始点から実行する。また、条件が成立する場合には、判定中間コードに続いてステップS17で生成された保証中間コードを実行するように分岐中間コードを生成し、実行経路中間コードに挿入する (ステップS18)。
<変数情報算出処理>
次に、変数情報算出処理について図3を用いて説明する。
続いて、変数情報算出部121は、ステップS22において算出された生存情報INのうちホットパスの始点となる基本ブロックにおける生存情報INをパス入力変数として算出し、ステップS22において算出された生存情報OUTのうち、ホットパスの終点となる基本ブロックにおける生存情報OUTをパス出力変数として算出する(ステップS23)。
続いて、変数情報算出部121はステップS24で算出したパス置換対象変数であり且つパス出力変数である変数をパス保証変数として算出し実行経路中間コード生成部122へパス保証変数及びパス置換対象変数を送出する(ステップS25)。
<変数置換処理>
実行経路中間コード生成部122は、変数情報算出部121から送出されたパス置換対象変数のデータを受け取ると、部分中間コードとホットパス情報を読み出し、部分中間コードのホットパスに対応する命令文を複製し、複製した命令文のパス置換対象変数に対し変数置換処理を繰り返し行い、パス置換対象変数と置換した変数のペア(以下「変数のペア」と言う)を生成する。
実行経路中間コード生成部122は、複製した命令文について繰り返し変数置換処理を行う(ステップS30)。
実行経路中間コード生成部122が、命令文でパス置換対象変数が参照され(ステップS31:YES)、既に生成された変数のペアに当該パス置換対象変数が含まれていると判断した場合(ステップS32:YES)、当該命令文で参照されているパス置換対象変数の識別子をペアに含まれている変数に置換え(ステップS33)、ステップS34へ進む。 また、ステップS31及びステップS32の判定においてパス置換対象変数が参照されていないと判断(ステップS31:NO)した場合もステップS34へ進む。
ステップS37において、定義されているパス置換対象変数を置換える変数を定め、定めた変数に置換え、当該パス置換対象変数と置換えた変数とのペアを新たに生成する。
<動作例>
次に、図5(a)のソースプログラムの一部である部分プログラムを例に、前述した図2に示す動作フローについて図5、図9〜図12を用いて説明する。尚、この例における中間コードはソースプログラムに近い中間コードで表したものとして説明する。
次に、ステップS12においてプログラム変換部120は、制御フローグラフ(図5(b))の基本ブロックB1、B2、B4、B5、B7の順に遷移する経路200をホットパスとするホットパス情報が入力されると、当該ホットパス情報をプログラム変換部120内に格納する。
パス入力変数401は、ホットパスの入口で生存する変数、すなわち基本ブロックB1(図5(b))の生存情報INであり、図10(a)のブロックB1のIN302に含まれている変数である。
パス置換対象変数403は、パス入力変数401とホットパス200上の基本ブロックB1、B2、B4、B5、B7におけるDEF303(図10(a))に含まれる変数である。
また、パス保証変数404は、パス出力変数402とパス置換対象変数403に含まれる変数である
この例では、図10(a)のDEF303に含まれる変数が{a,c,d,f,x}であり、パス入力変数が{b,c,d,e,g,z,w,y,}であるので{c,d}がパス置換対象変数となり、パス出力変数が[a,c,e,f,z,w,x,y]であるので、{c}がパス保証変数となる。
次に、ステップS15において実行経路中間コード生成部122は、部分中間コードとホットパス情報を読み出し、図5のホットパス200上の命令文S1〜命令文S15を複製し、複製した命令文を含む新たな基本ブロックB12〜B72を生成する。複製した命令文のパス置換対象変数について変数置換処理を行い、変数のペアを生成する。複製した命令文に変数置換処理を行い、新たに生成された実行経路を図9に示す。
変数置換処理前の基本ブロックB12に含まれる複製した命令文は、図5(b)に示す基本ブロックB1に含まれる命令文と同じである。基本ブロックB12の複製した命令文S12において、パス置換対象変数cは参照されているが(図4ステップS31:YES)、変数cのペアが存在していないため(図4ステップS32:NO)、実行経路中間コード生成部122は命令文S12の変数cについて変数置換処理を行わず、また命令文S12ではパス置換対象変数は定義されていないため(図4ステップS34:NO)、次の複製した命令文S22における変数に注目する。実行経路中間コード生成部122は、変数の置換え前の命令文S22において、パス置換対象変数cが定義されており(図4ステップS34:YES)、変数cのペアが存在しないと判断し(図4ステップS35:NO)、定義箇所の変数cの識別子を変数名表及び変数のペアで使われていないt1に定めて置換え、新たに変数のペア(c,t1)を生成する(図4ステップS37)。 次に命令文S32ではパス置換変数の参照も定義も存在しないので変数置換処理は行わず、次の基本ブロックB22の実行文S42に注目する。(なお、基本ブロックB12への変数置換処理を行った後のペアの生成状態は図10(c)のB12行の502に示すとおりである。)
引き続き、実行経路中間コード生成部122は、変数の置換え前の命令文S42において、パス置換変数cが参照されており(図4ステップS31:YES)、変数cのペア(c,t1)が存在しているので(図10(c)のB12行の502)、参照箇所の変数cの識別子をt1で置き換える。次に命令文S42ではパス置換対象変数cが定義もされており(図4ステップS34:YES)、変数cのペア(c,t1)が存在すると判断し(図4ステップS35:YES)、ペア(c,t1)を削除し(図4ステップS36)、定義箇所の変数cの識別子を変数名表及び変数のペアで使われていないt2に定めて置換え、新たに変数のペア(c,t2)を生成する(図4ステップS37)。
実行経路中間コード生成部122は、図10(c)に示すブロック501がB72の変数ペア(c,t2)及び(d,t3)を保証中間コード生成部124へ送出し、図9に示す実行経路中間コードの命令文S12〜命令文S152を判定中間コード生成部123へ送出する。
次に、ステップS17において保証中間コード生成部124は、変数情報算出部121から送出されたパス保証変数{c}と変数のペア(c,t2)より、t2をcに戻す保証中間コードの命令文S301を生成し、命令文S301を含む基本ブロックB103(図11)を生成する。
ステップS19において最適化部12は、ステップS18までの処理で生成された中間コードについて実行速度を向上させるように最適化を行う。
<変形例1>
上述した実施の形態では、判定中間コード生成部123は、ホットパス200が実行される条件となるように、図9に示す分岐条件S32と分岐条件S92を論理積で結合して分岐命令S201の分岐条件を生成したが、図13の命令文S202に示す様に、分岐条件S32及び分岐条件S92の各条件を反転させてもよい。
尚、部分プログラムの前後に配置された命令文の中間コードは、予めプログラム変換部120内部に格納されているものとする。
ステップS15において、実行経路中間コード生成部122は、ホットパス200上の命令文S1〜命令文S15を複製して変数置換処理を行い、実行経路中間コードの命令文S12〜命令文S152(図9)を生成する。
ステップS16において、判定中間コード生成部123は、受け取った命令文中の分岐条件S32と分岐条件S92の条件を反転させ、反転させた各分岐条件を複合した判定中間コードに変換する。判定中間コード生成部123は、プログラム変換部120内の命令文S12〜命令文S152と上記判定中間コードを含む基本ブロックB114を格納する。
ステップS18において分岐中間コード生成部125は、基本ブロックB114を読み出し、上記判定中間コードの分岐条件が成立する場合に、ブロックB1の命令文S1に分岐する分岐中間コードを生成して判定中間コードに挿入することにより命令文S202を生成し、命令文S202を含む基本ブロックB114をプログラム変換部120内に格納する。
上述の様に、部分プログラムをサブルーチンプログラムとし、部分プログラムを除くソースプログラムのコードと実行経路コードを主経路となるように配置することにより、実行経路コードの終点からソースプログラムへ分岐する命令が無いため、実行経路コードの実行確率が高い場合には、メモリ領域を効率良く割当てることができ、主経路全体の実行速度を向上させることができる。
<変形例2>
上述の変形例1では、判定中間コード生成部123によって生成された命令文S202は、分岐条件S3と分岐条件S9を複合させて生成したが、図14の命令文S202及び命令文S203に示す様に、分岐条件毎に判定中間コードに変換してもよい。
また、ステップS18において分岐中間コード生成部125は、命令文S32と命令文S92に係る上記各判定中間コードの条件が成立する場合に、ブロックB1の命令文S1に分岐する分岐中間コードを各々生成して、各判定中間コードに挿入することにより、命令文S202及び命令文S203を生成する。分岐中間コード生成部125は、命令文S202及び命令文S203を含む基本ブロックB134を生成してプログラム変換部120内に格納する。
図15に示す様に、分岐条件毎に判定中間コード及び分岐中間コードを生成することにより、ホットパスを実行できる条件の判定を早く行うことができるように最適化することができるので、ホットパスの実行確率が高くない場合には、他の経路を早く実行することができる。
<補足>
以上、本発明に係るコンパイラ装置について、実施の形態及び変形例に基づいて説明したが、本発明は実施の形態及び変形例に限られないことは勿論である。
(1)本実施の形態では、実行経路中間コード生成部122が変数置換処理を行う際に、中間コードのホットパスに対応する命令文を複製し、複製した命令文についてパス置換対象変数の変数置換処理を行っているが、ホットパスに対応する命令文を複製せず当該命令文を順次参照しながら変数置換処理を行い、実行経路中間コードを生成することとしてもよい。
(2)また、本実施の形態の変数置換処理では、定義されている場合は変数を置換え、置換える毎に変数のペアを生成し、参照されている場合は参照箇所を既存の変数のペアに含まれている識別子に置換えているが、パス置換対象変数の定義箇所と参照箇所を同じ識別子に置換えてもよい。
(3)本実施の形態では、ホットパス情報はユーザからプログラム変換部120へ入力されることとしているが、コンパイラ装置がプログラムを逐次実行するインタプリタ機能を有している場合や、コンパイラ装置がデバッガ装置などプログラム実行可能な装置と統合され動作する場合は、ソースプログラムを逐次実行して実行経路の情報を収集してメモリ等に格納し、プログラム変換部120が格納された実行経路の情報から実行頻度の高い経路を抽出することとしてもよい。
(4)本実施の形態では、プログラム変換部120は構文解析部11で変換した中間プログラムの中間コードについて変数置換処理を施してプログラム変換を行っているが、ソースプログラムのホットパスに係る命令文について変数置換処理を施し、プログラム変換を行うこととしてもよい。
(5)また、本発明は、プログラム又はデジタル信号を記録したコンピュータ読取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD−ROM、DVD−RAM、半導体メモリ等であるとしてもよい。また、本発明は、電気通信回線、無線又は有線通信回線、若しくはインターネットに代表されるネットワーク等を経由して伝送される前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
11 構文解析部
12 最適化部
13 資源割付部
14 実行コード生成部14
51 ソースプログラム
52 ホットパス情報
53 実行プログラム
120 プログラム変換部
121 変数情報算出部
122 実行経路中間コード生成部
123 判定中間コード生成部
124 保証中間コード生成部
125 分岐中間コード生成部
Claims (8)
- 分岐命令を含むソースプログラムを目的コード列である目的プログラムに変換するコンパイラ装置であって、
前記ソースプログラムのうち、途中に分岐命令を含む一部命令列についての複数の実行経路の一つを指定する実行経路指定手段と、
前記指定された実行経路上における、分岐命令以外の各命令列に対応する各目的コードを少なくとも含む実行経路コードであって、前記指定された実行経路の入口で生存が必要とされる変数でありかつ前記指定された実行経路上で定義されている変数を、その他の変数に置換えた実行経路コードを生成する実行経路コード生成手段と、
前記置換えられた変数のうち、前記指定された実行経路の出口で生存が必要とされる変数については、当該置換後の変数から元の変数へ値の復元をする保証コードを生成する保証コード生成手段と、
前記一部命令列に対応する部分コードを生成する部分コード生成手段と、
前記指定された実行経路中の分岐命令に分岐条件に基づいて、前記指定された実行経路を実行するための分岐条件が成立する場合には前記実行経路コードの終点から前記保証コードの始点に進み、前記分岐条件が成立しない場合には前記実行経路コードの終点から前記部分コードの始点に分岐する分岐コードを生成する分岐コード生成手段と
を備えることを特徴とするコンパイラ装置。 - 前記実行経路コード生成手段は、更に、前記一部命令列における始点の直前に配置された命令列の直後に生成した前記実行経路コードを配置し、
前記保証コード生成手段は、更に、前記実行経路コードの終点の直後に前記保証コードを配置し、前記一部命令列の終点に後続する命令列を保証コードの後に配置し、
前記分岐コード生成手段は、更に、前記部分コードの終点から、前記一部命令列の終点に後続する命令列に分岐する分岐コードを生成すること
を特徴とする請求項1記載のコンパイラ装置。 - 前記コンパイラ装置は、ソースプログラムを構文解析して中間コードに変換し、中間コードを目的プログラムに変換するコンパイラ装置であり、
前記実行経路コード生成手段は、前記一部命令列が前記構文解析によって変換された中間コードである部分中間コード上の変数に基づいて、前記変数の置換え対象である置換対象変数を算出する変数情報算出部と、
前記部分中間コードの前記指定された実行経路に係る、分岐命令以外の各中間コードを少なくとも含む実行経路中間コードであって、前記置換対象変数をその他の変数に置換えた実行経路中間コードを生成する実行経路中間コード生成部と、
前記実行経路中間コードに含まれる各分岐条件を、前記指定された実行経路を実行できることを判定する一つの分岐条件に変換し、その分岐条件に基づいて判定を行う判定中間コードに変換する判定中間コード生成部を備え、
前記保証コード生成手段は、前記置換対象変数が前記指定された実行経路の出口で生存が必要とされる変数の場合に、当該置換対象変数から元の変数へ値の復元をする保証中間コードを生成する保証中間コード生成部を備え、
前記分岐コード生成手段は、前記判定中間コードの分岐条件が成立しない場合に、前記部分中間コードの始点に分岐する分岐中間コードを生成する分岐中間コード生成部と、
前記部分中間コードと、前記実行経路中間コードと、前記判定中間コードと、前記保証中間コードと前記分岐中間コードを目的プログラムである実行コードに変換する実行コード生成部とを備えること
を特徴とする請求項2記載のコンパイラ装置。 - 前記コンパイラ装置は、ソースプログラムを構文解析して中間コードに変換し、中間コードを目的プログラムに変換するコンパイラ装置であり、
前記実行経路コード生成手段は、前記一部命令列が前記構文解析によって変換された中間コードである部分中間コード上の変数に基づいて、前記変数の置換え対象である置換対象変数を算出する変数情報算出部と、
前記部分中間コードの前記指定された実行経路に係る、分岐命令以外の各中間コードを少なくとも含む実行経路中間コードであって、前記置換対象変数をその他の変数に置換えた実行経路中間コードを生成する実行経路中間コード生成部と、
前記実行経路中間コードに含まれる分岐条件毎に、前記指定された実行経路を実行できることを判定する分岐条件に変換し、各分岐条件に基づいて判定を行う判定中間コードに各々変換する判定中間コード生成部を備え、
前記保証コード生成手段は、前記置換対象変数が前記指定された実行経路の出口で生存が必要とされる変数の場合に、当該置換対象変数から元の変数へ値の復元をする保証中間コードを生成する保証中間コード生成部を備え、
前記分岐コード生成手段は、前記判定中間コードの分岐条件が成立しない場合に、前記部分中間コードの始点に分岐し、前記分岐条件が成立する場合に、前記保証中間コードの始点に向けて進む分岐中間コードを生成する分岐中間コード生成部と、
前記部分中間コードと、前記実行経路中間コードと、前記判定中間コードと、前記保証中間コードと前記分岐中間コードを目的プログラムである実行コードに変換する実行コード生成部とを備えること
を特徴とする請求項2記載のコンパイラ装置。 - 前記コンパイラ装置は、前記ソースプログラムを逐次実行するインタプリタ機能を有し、
前記インタプリタ機能により前記一部命令列における実行経路の情報を収集し、実行頻度が高い実行経路を抽出する抽出手段を備え、
前記実行経路指定手段は、前記抽出手段によって抽出された実行経路を指定することを特徴とする請求項1記載のコンパイラ装置。 - 前記コンパイラ装置は、前記部分コード生成手段と、前記実行経路コード生成手段と、前記保証コード生成手段と、前記分岐コード生成手段によって生成された目的コードに最適化を施すことを特徴とする請求項1記載のコンパイラ装置。
- 分岐命令を含むソースプログラムを目的コード列である目的プログラムに変換するコンパイル方法であって、
前記ソースプログラムのうち、途中に分岐命令を含む一部命令列についての複数の実行経路の一つを指定する実行経路指定ステップと、
前記指定された実行経路上における、分岐命令以外の各命令列に対応する各目的コードを少なくとも含む実行経路コードであって、前記指定された実行経路の入口で生存が必要とされる変数でありかつ前記指定された実行経路上で定義されている変数を、その他の変数に置換えた実行経路コードを生成する実行経路コード生成ステップと、
前記置換えられた変数のうち、前記指定された実行経路の出口で生存が必要とされる変数については、当該置換後の変数から元の変数へ値の復元をする保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定された実行経路中の分岐命令の分岐条件に基づいて、前記指定された実行経路を実行するための分岐条件が成立する場合には前記実行経路コードの終点から前記保証コードの始点に進み、前記分岐条件が成立しない場合には前記実行経路コードの終点から前記部分コードの始点に分岐する分岐コードを生成する分岐コード生成ステップと
を含むことを特徴とするコンパイル方法。 - CPUを備える装置に分岐命令を含むソースプログラムを目的コード列である目的プログラムに変換させるためのコンパイラプログラムであって、
前記ソースプログラムのうち、途中に分岐命令を含む一部命令列についての複数の実行経路の一つを指定する実行経路指定ステップと、
前記指定された実行経路上における、分岐命令以外の各命令列に対応する各目的コードを少なくとも含む実行経路コードであって、前記指定された実行経路の入口で生存が必要とされる変数でありかつ前記指定された実行経路上で定義されている変数を、その他の変数に置換えた実行経路コードを生成する実行経路コード生成ステップと、
前記置換えられた変数のうち、前記指定された実行経路の出口で生存が必要とされる変数については、当該置換後の変数から元の変数へ値の復元をする保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定された実行経路中の分岐命令の分岐条件に基づいて、前記指定された実行経路を実行するための分岐条件が成立する場合には前記実行経路コードの終点から前記保証コードの始点に進み、前記分岐条件が成立しない場合には前記実行経路コードの終点から前記部分コードの始点に分岐する分岐コードを生成する分岐コード生成ステップと
を前記装置に実行させることを特徴とするコンパイラプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005261030A JP4754909B2 (ja) | 2004-09-22 | 2005-09-08 | コンパイラ装置、コンパイル方法、コンパイラプログラム |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004275573 | 2004-09-22 | ||
JP2004275573 | 2004-09-22 | ||
JP2005261030A JP4754909B2 (ja) | 2004-09-22 | 2005-09-08 | コンパイラ装置、コンパイル方法、コンパイラプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006120124A JP2006120124A (ja) | 2006-05-11 |
JP4754909B2 true JP4754909B2 (ja) | 2011-08-24 |
Family
ID=36537917
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005261030A Expired - Fee Related JP4754909B2 (ja) | 2004-09-22 | 2005-09-08 | コンパイラ装置、コンパイル方法、コンパイラプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4754909B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4884297B2 (ja) * | 2006-05-26 | 2012-02-29 | パナソニック株式会社 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
JP2010039536A (ja) * | 2008-07-31 | 2010-02-18 | Panasonic Corp | プログラム変換装置、プログラム変換方法およびプログラム変換プログラム |
JP6245573B2 (ja) | 2013-11-25 | 2017-12-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 制御フロー・グラフ上の実行パスの実行頻度情報を得るための方法、並びに、当該情報を得るためのコンピュータ及びそのコンピュータ・プログラム |
JP6366033B2 (ja) * | 2014-05-09 | 2018-08-01 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | プログラム中のif文の最適化方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09106351A (ja) * | 1995-10-12 | 1997-04-22 | Hitachi Ltd | 変数リネーム方法 |
JPH11149381A (ja) * | 1997-11-19 | 1999-06-02 | Fujitsu Ltd | コンパイラ装置およびプログラムを格納するプログラム格納記憶媒体および実行可能プログラム生成方法 |
JP3651579B2 (ja) * | 2000-04-06 | 2005-05-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータシステム、プログラム変換方法および記憶媒体 |
JP2003337707A (ja) * | 2002-05-20 | 2003-11-28 | Nec Corp | コンパイラおよびリスト構造データを処理するループの高速化方法 |
-
2005
- 2005-09-08 JP JP2005261030A patent/JP4754909B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2006120124A (ja) | 2006-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7784039B2 (en) | Compiler, compilation method, and compilation program | |
JP4884297B2 (ja) | コンパイラ装置、コンパイル方法およびコンパイラプログラム | |
JP4962564B2 (ja) | 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム | |
TWI463404B (zh) | 編譯系統以及編譯方法 | |
JP2016177454A (ja) | 動作合成方法、動作合成プログラムおよび動作合成装置 | |
JPH06507990A (ja) | コンピュータのための最適化コンパイラ | |
US20100199269A1 (en) | Program optimization device and program optimization method | |
JP4754909B2 (ja) | コンパイラ装置、コンパイル方法、コンパイラプログラム | |
JP2009187285A (ja) | プログラム変換方法、プログラム変換装置およびプログラム | |
US10013244B2 (en) | Apparatus and method to compile a variadic template function | |
JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
JP5041990B2 (ja) | ソフトウェア部品抽出支援装置 | |
JP4719415B2 (ja) | 情報処理システム及びコード生成方法 | |
CN113791770B (zh) | 代码编译器、代码编译方法、代码编译系统和计算机介质 | |
JP5275087B2 (ja) | プログラム生成装置およびブロック線図生成装置 | |
JP2012014526A (ja) | プログラムコードの構造変換装置、並びにコード構造変換プログラム | |
CN115907013A (zh) | 人工智能模型的算子的管理系统、方法、设备和介质 | |
JP2010128960A (ja) | プリフェッチ命令生成方法、コンパイラ、及びプログラム | |
JPH0756745A (ja) | 言語処理プログラムのコンパイラ処理方式 | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 | |
JP2016051367A (ja) | データ解析装置、データ解析方法、および、プログラム。 | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
JP7375835B2 (ja) | プログラム生成装置、プログラム生成方法及びプログラム | |
JP2006259805A (ja) | プロセッサ設計装置、プロセッサ設計方法およびプロセッサ設計プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080820 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100721 |
|
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: 20110510 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110526 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140603 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4754909 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |