(57)【要約】【課題】サブルーチン化の対象範囲を可変にして、最適なサブルーチン化を実現することができる。【解決手段】本発明に係るプログラム変換方法は、第１の類似部分検出手段が、１つ以上の基本ブロックから構成されているソースプログラムについて、基本ブロック内の制御命令を除く命令列に対して類似部分を検出するステップ（Ｓ１０１）と、第１のサブルーチン化手段が、第１の類似部分検出手段により検出された類似部分をサブルーチン化するステップ（Ｓ１０２）と、第２の類似部分検出手段が、基本ブロック内の制御命令を除いた全ての命令列が第１のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出するステップ（Ｓ１０３）と、第２のサブルーチン化手段が、第２の類似部分検出手段により検出された類似部分をサブルーチン化するステップ（Ｓ１０４）と、を有する。【選択図】図１
2010108213.tif 000002
【特許請求の範囲】
【請求項１】
プログラム変換装置内の第１の類似部分検出手段が、１つ以上の基本ブロックから構成されているソースプログラムについて、前記基本ブロック内の制御命令を除く命令列に対して類似部分を検出する第１のステップと、
前記プログラム変換装置内の第１のサブルーチン化手段が、前記第１の類似部分検出手段により検出された類似部分をサブルーチン化する第２のステップと、
前記プログラム変換装置内の第２の類似部分検出手段が、前記基本ブロック内の制御命令を除いた全ての命令列が前記第１のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出する第３のステップと、
前記プログラム変換装置内の第２のサブルーチン化手段が、前記第２の類似部分検出手段により検出された類似部分をサブルーチン化する第４のステップと、を有する
ことを特徴とするプログラム変換方法。
【請求項２】
前記プログラム変換装置内の判定手段が、前記第２のサブルーチン化手段によるサブルーチン化の結果が、以前のサブルーチン化の結果と比較して変化しているか否かを判定する第５のステップを更に有し、
前記判定手段による判定の結果、前記第２のサブルーチン化手段によるサブルーチン化の結果が、以前のサブルーチン化の結果と比較して変化しなくなるまでの間、
前記第２の類似部分検出手段が、前記基本ブロック内の制御命令を除いた全ての命令列が前記第２のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出し、さらに、前記第２のサブルーチン化手段が、前記第２の類似部分検出手段により検出された類似部分をサブルーチン化する
ことを特徴とする請求項１に記載のプログラム変換方法。
【請求項３】
前記第４のステップにおいて、
前記第２のサブルーチン化手段が、前記第２の類似部分検出手段により検出された類似部分を新たなサブルーチンとして生成することによりサブルーチン化するときに、前記生成する新たなサブルーチンが前記第１のサブルーチン化手段により生成したサブルーチンを呼び出す場合には、前記第２のステップにおいて生成したサブルーチンを前記生成する新たなサブルーチン内に展開して生成する
ことを特徴とする請求項１又は２に記載のプログラム変換方法。
【請求項４】
１つ以上の基本ブロックから構成されているソースプログラムについて、前記基本ブロック内の制御命令を除く命令列に対して類似部分を検出する第１の類似部分検出手段と、
前記第１の類似部分検出手段により検出された類似部分をサブルーチン化する第１のサブルーチン化手段と、
前記基本ブロック内の制御命令を除いた全ての命令列が前記第１のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出する第２の類似部分検出手段と、
前記第２の類似部分検出手段により検出された類似部分をサブルーチン化する第２のサブルーチン化手段と、を有する
ことを特徴とするプログラム変換装置。
【請求項５】
前記第２のサブルーチン化手段によるサブルーチン化の結果が、前記第２のサブルーチン化手段による以前のサブルーチン化の結果と比較して変化しているか否かを判定する判定手段を更に有し、
前記判定手段による判定の結果、前記第２のサブルーチン化手段によるサブルーチン化の結果が、前記第２のサブルーチン化手段による以前のサブルーチン化の結果と比較して変化しなくなるまでの間、
前記第２の類似部分検出手段は、前記基本ブロック内の制御命令を除いた全ての命令列が前記第２のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出し、さらに、前記第２のサブルーチン化手段は、前記第２の類似部分検出手段により検出された類似部分をサブルーチン化する
ことを特徴とする請求項４に記載のプログラム変換装置。
【請求項６】
前記第２のサブルーチン化手段は、
前記第２の類似部分検出手段により検出された類似部分を新たなサブルーチンとして生成することによりサブルーチン化するときに、前記生成する新たなサブルーチンが前記第１のサブルーチン化手段により生成したサブルーチンを呼び出す場合には、前記第１のサブルーチン化手段で生成したサブルーチンを前記生成する新たなサブルーチン内に展開して生成する
ことを特徴とする請求項４又は５に記載のプログラム変換装置。
【請求項７】
前記制御命令が、他の基本ブロックへの分岐を制御する分岐命令である
ことを特徴とする請求項４乃至６いずれか１項に記載のプログラム変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラの最適化分野に関し、特に、出力コードサイズをより多く削減するようにプログラムを変換するプログラム変換方法及びプログラム変換装置に関する。
【背景技術】
【０００２】
近年、組込みソフトウェアの規模の増大に伴って、出力コードサイズの削減がコンパイラに求められている。出力コードサイズの削減を実現する技術の一つとして、サブルーチン化がある。サブルーチン化とは、ソースプログラムの論理中の類似部分をサブルーチンとして抽出する技術であり、大別して二つの処理により構成される。一つは、ソースプログラムの論理において類似部分を検出する処理である。もう一つは、検出した部分の論理と等価なサブルーチンを生成し、元々の論理を等価なサブルーチンの呼び出しに置換するなどして出力コードの削減を行う処理である。
【０００３】
サブルーチン化の関連技術としては、例えば、特許文献１や特許文献２などが挙げられる。まず、図８乃至１０を参照して、特許文献１に開示される技術の構成及び動作を説明する。図８は、特許文献１に開示されるプログラム変換装置の構成を示す図である。図８に示すプログラム変換装置は、基本ブロック内の中間コードに対して類似部分を検出する処理を含んでいる。図８に示すプログラム変換装置は、ソースプログラムを中間コードに変換する際に各演算を解析し、その結果を記録する。そして、ある演算の列が別に記録した演算の列と等価な演算であった場合に、演算対象の変数を引数とするサブルーチンに置換する。特許文献１に開示されるプログラム変換装置による効果の具体例として、例えば、図９に示すソースプログラムを入力とした場合には、図１０に示す出力が得られる。
【０００４】
次いで、図１１及び１２を参照して、特許文献２に開示される技術の構成及び動作を説明する。図１１は、特許文献２に開示されるプログラム圧縮方法の構成を示す図である。図１１に示すプログラム圧縮方法は、関数単位で類似部分を検出する処理を含んでいる。
図１１に示すプログラム圧縮方法は、ソースプログラムを機械語命令列に変換し、各関数定義の機械語命令列を記録する。そして、ある関数を機械語命令列に変換する際に、既に記録された機械語命令列と同一の場合には、既に記録された関数の呼び出し命令に置換を行う(これらの処理を図１２のフローチャート図に示す。)。
【特許文献１】特開２００３−１６２４１６号公報
【特許文献２】特開２０００−２５９４２７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示される技術では、基本ブロックを跨がない類似部分が存在するプログラムに対して特に効果を発揮するものである。また、特許文献２に開示される技術では、同一定義の関数が存在する場合にのみ効果を発揮するものである。すなわち、特許文献１や特許文献２に開示される関連する技術では、サブルーチン化の対象範囲が固定であるという問題を有する。より具体的には、サブルーチン化の対象範囲が、関数全体、或いは、基本ブロック内の一部の論理のみである。
【０００６】
ソースプログラム中に散在する類似部分は、関数全体であったり、基本ブロックの一部であったり、可変長である。このため、サブルーチン化の対象範囲が固定である場合には、最適なサブルーチン化を行うことができない。こうした背景から、類似部分の検出範囲を可変とし、より多くの出力コードサイズを削減するサブルーチン化を実現する技術が求められている。
【課題を解決するための手段】
【０００７】
本発明に係るプログラム変換方法は、プログラム変換装置内の第１の類似部分検出手段が、１つ以上の基本ブロックから構成されているソースプログラムについて、前記基本ブロック内の制御命令を除く命令列に対して類似部分を検出する第１のステップと、前記プログラム変換装置内の第１のサブルーチン化手段が、前記第１の類似部分検出手段により検出された類似部分をサブルーチン化する第２のステップと、前記プログラム変換装置内の第２の類似部分検出手段が、前記基本ブロック内の制御命令を除いた全ての命令列が前記第１のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出する第３のステップと、前記プログラム変換装置内の第２のサブルーチン化手段が、前記第２の類似部分検出手段により検出された類似部分をサブルーチン化する第４のステップと、を有するものである。
【０００８】
これにより、サブルーチン化の対象範囲を可変にして、最適なサブルーチン化を実現することができる。
【０００９】
本発明に係るプログラム変換装置は、１つ以上の基本ブロックから構成されているソースプログラムについて、前記基本ブロック内の制御命令を除く命令列に対して類似部分を検出する第１の類似部分検出手段と、前記第１の類似部分検出手段により検出された類似部分をサブルーチン化する第１のサブルーチン化手段と、前記基本ブロック内の制御命令を除いた全ての命令列が前記第１のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出する第２の類似部分検出手段と、前記第２の類似部分検出手段により検出された類似部分をサブルーチン化する第２のサブルーチン化手段と、を有するものである。
【００１０】
これにより、サブルーチン化の対象範囲を可変にして、最適なサブルーチン化を実現することができる。
【発明の効果】
【００１１】
本発明にかかるプログラム変換方法及びプログラム変換装置によれば、サブルーチン化の対象範囲を可変にして、最適なサブルーチン化を実現することができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明を実施するための最良の形態について、図面を参照しながら詳細に説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡潔化がなされている。各図面において同一の構成又は機能を有する構成要素及び相当部分には、同一の符号を付し、その説明を省略する。
【００１３】
上述した関連する技術では、サブルーチン化の対象範囲が固定であるという問題があった。これに対して、本発明では、まず、途中に分岐を含まない表現であって、特定のプロセッサの命令形式に依存しない表現の列を対象にして、サブルーチン化を行う。（尚、以下では、途中に分岐を含まない表現であって、特定のプロセッサの命令形式に依存しない表現を「中間コード」と称する。また、中間コードの列を「基本ブロック」と称する。）そして、基本ブロック内の全命令がサブルーチン化された基本ブロックへの分岐を持つ基本ブロックについても再帰的に解析を行い、サブルーチン化の対象範囲を可変にするものである。
【００１４】
まず、図１を参照して、本発明に係るプログラム変換方法について、その概略を説明する。図１は、本発明に係るプログラム変換方法を示すフローチャート図である。図１に示すように、本発明に係るプログラム変換方法においては、まず、プログラム変換装置内の第１の類似部分検出手段が、１つ以上の基本ブロックから構成されているソースプログラムについて、基本ブロック内の制御命令を除く命令列に対して、類似部分を検出する（ステップＳ１０１）。次いで、プログラム変換装置内の第１のサブルーチン化手段が、ステップＳ１０１において検出された類似部分をサブルーチン化する（ステップＳ１０２）。次いで、プログラム変換装置内の第２の類似部分検出手段が、基本ブロック内の制御命令を除いた全ての命令列がステップＳ１０２においてサブルーチン化された基本ブロックに対して、類似部分を検出する（ステップＳ１０３）。次いで、プログラム変換装置内の第２のサブルーチン化手段が、ステップＳ１０３において検出された類似部分をサブルーチン化する（ステップＳ１０４）。
【００１５】
このように、本発明に係るプログラム変換方法では、基本ブロック内の一部の論理から関数全体の論理までの範囲を対象としてサブルーチン化を行う。すなわち、可変長の範囲をサブルーチン化の対象とする。従って、サブルーチン化の対象範囲を可変にして、最適なサブルーチン化を実現することができる。
【００１６】
実施の形態１．
以下、図２乃至７を参照して、実施の形態１に係るプログラム変換方法及びプログラム変換装置について説明する。
【００１７】
図２は、本発明に係るプログラム変換装置の構成例を示す図である。図２に示す例では、プログラム変換装置は、Ｃソースプログラムを実行ファイルに変換する。図２に示すように、プログラム変換装置１００は、中間コード生成部１０３、サブルーチン化部１０６、コード生成部１０９、リンカ１１２を含む。
【００１８】
中間コード生成部１０３は、Ｃソースプログラムを中間コードに変換する。この場合に、中間コード生成部１０３は、一つのＣソースプログラムに対して、一つの中間コードを生成する。図２に示す例では、異なるＣソースプログラム１０１及び１０２に対して、別々の中間コード１０４及び１０５を生成する。
【００１９】
サブルーチン化部１０６は、中間コード生成部１０３により生成された中間コードを解析して、サブルーチン化を行った中間コードへと変換する。この場合に、サブルーチン化部１０６は、一つの中間コードに対して、一つのサブルーチン化を行った中間コードを生成する。図２に示す例では、異なる中間コード１０４及び１０５に対して、別々のサブルーチン化を行った中間コード１０７及び１０８を生成する。
【００２０】
また、サブルーチン化部１０６は、図示しない第１の類似部分検出手段、第１のサブルーチン化手段、第２の類似部分検出手段、第２のサブルーチン化手段、及び判定手段を有している。第１の類似部分検出手段は、１つ以上の基本ブロックから構成されているソースプログラムについて、基本ブロック内の制御命令を除く命令列に対して類似部分を検出する。第１のサブルーチン化手段は、第１の類似部分検出手段により検出された類似部分をサブルーチン化する。第２の類似部分検出手段は、基本ブロック内の制御命令を除いた全ての命令列が第１のサブルーチン化手段によりサブルーチン化された基本ブロックに対して類似部分を検出する。第２のサブルーチン化手段は、第２の類似部分検出手段により検出された類似部分をサブルーチン化する。判定手段は、第２のサブルーチン化手段によるサブルーチン化の結果が、第２のサブルーチン化手段による以前のサブルーチン化の結果と比較して変化しているか否かを判定する。尚、サブルーチン化部１０６による処理の詳細については後述する。
【００２１】
コード生成部１０９は、中間コードをターゲットプロセッサ用オブジェクトへと変換する。この場合に、コード生成部１０９は、一つの中間コードに対して、一つのターゲットプロセッサ用オブジェクトを生成する。図２に示す例では、サブルーチン化部１０６により生成した別々の中間コード１０７及び１０８に対して、別々のターゲットプロセッサ用オブジェクト１１０及び１１１を生成する。
【００２２】
リンカ１１２は、複数のターゲットプロセッサ用オブジェクトを１つの実行ファイルへと変換する。図２に示す例では、２つのターゲットプロセッサ用オブジェクトファイル１１０及び１１１から、一つの実行ファイル１１３を生成する。
【００２３】
次に、図３を参照してサブルーチン化部１０６による処理について説明する。図３は、サブルーチン化部１０６による処理を説明するためのフローチャート図である。
【００２４】
図３に示すように、サブルーチン化部１０６による処理は、基本ブロック内の類似部分を検出するステップ（ステップＳ２０２）と、１つの基本ブロックを対象にサブルーチン化を行うステップ（ステップＳ２０３）と、ステップＳ２０３の結果として、分岐命令を除く全ての命令列がサブルーチン化された基本ブロックへの分岐命令を持つ基本ブロックに対して、類似部分を検出するステップ（ステップＳ２０４）と、ステップＳ２０４の結果に基づいて、複数の基本ブロックを対象にサブルーチン化を行うステップ（ステップＳ２０５）と、サブルーチン化の結果が以前のサブルーチン化から変化しているか否かを判定するステップ（ステップＳ２０６）を含むことを特徴とする。
【００２５】
まず、プログラム変換装置１００により最適化前の中間コードがサブルーチン化部１０６に入力される（ステップＳ２０１）。次いで、サブルーチン化部１０６は、基本ブロック内の最後に存在する分岐命令を除く命令列に対して、類似部分検出を行う（ステップＳ２０２）。より具体的には、サブルーチン化部１０６は、入力された最適化前の中間コードについて当該中間コード内で同一の命令列を検出する。
【００２６】
次いで、サブルーチン化部１０６は、１つの基本ブロックを対象にサブルーチン化を行う（ステップＳ２０３）。より具体的には、サブルーチン化部１０６は、最適化前の中間コードとステップＳ２０２で検出した類似部分の情報とから、基本ブロック内の命令列を対象にサブルーチン化を行う。
【００２７】
次いで、サブルーチン化部１０６は、特定の基本ブロックに対して、類似部分を検出する（ステップＳ２０４）。ここで、特定の基本ブロックとは、分岐命令を除く全ての命令列がサブルーチン化された基本ブロックへの分岐命令を持つ基本ブロックである。より具体的には、プログラム変換装置１００によりステップＳ２０３における出力である中間コード、或いは、後述するステップＳ２０５における出力である中間コードのいずれかがサブルーチン化部１０６に対して入力される。そして、サブルーチン化部１０６は、当該入力についてその基本ブロック内の最後に存在する分岐命令を除く全命令がサブルーチン化されていた場合には、当該基本ブロックへの分岐命令を持つ基本ブロックを対象として類似部分を検出する。
【００２８】
次いで、サブルーチン化部１０６は、複数の基本ブロックを対象にサブルーチン化を行う（ステップＳ２０５）。より具体的には、サブルーチン化部１０６は、ステップＳ２０４における類似部分の検出結果に基づいて、複数の基本ブロックを対象としてサブルーチン化が可能である場合には、複数の基本ブロックを対象として新たにサブルーチン化を行う。
【００２９】
次いで、サブルーチン化部１０６は、サブルーチン化の結果が以前のサブルーチン化から変化しているか否かを判定する（ステップＳ２０６）。より具体的には、サブルーチン化部１０６は、ステップＳ２０５の結果として出力される中間コードが、ステップＳ２０４において入力した中間コードと同一か否かを判定する。判定の結果、中間コードが同一である場合（ステップＳ２０７でｎｏの場合。）には、これ以上のサブルーチン化の効果が望めないため、サブルーチン化の処理を終了する。そして、プログラム変換装置１００は、サブルーチン化を行った中間コードを出力する（ステップＳ２０８）。一方で、中間コードが同一でない場合（ステップＳ２０７でｙｅｓの場合。）には、さらにサブルーチン化の効果が期待できるため、ステップＳ２０４へと戻る。
【００３０】
上述した関連するサブルーチン化方法では、サブルーチン化の対象とする範囲が関数全体を構成する命令列が同一である場合か、或いは、基本ブロックを構成する命令列の一部が同一である場合のみを対象とした。これに対して、本発明に係るプログラム変換方法及びプログラム変換装置では、基本ブロック内の命令列を対象にサブルーチン化を行うのに加えて、さらに可能である場合には当該基本ブロックへの分岐命令を持つ基本ブロックをも含めてサブルーチン化を行う。
【００３１】
次に、図４乃至７に示す具体例を参照して、本発明に係るプログラム変換方法及びプログラム変換装置による効果について説明する。ここでは、効果を示す一例として、図４に示すサンプルＣソースコードへの適用を考える。尚、図４において、大文字のアルファベットＡ−Ｈはそれぞれ異なる演算を行う行を示すものとし、condは条件分岐のための式を示すものとする。
【００３２】
図５は、図４に示したサンプルＣソースコードから生成された中間コードのイメージを示す図である。ここで、図５に示す大文字のアルファベットＡ−Ｈは、図４に示すＣソースコードのＡ−Ｈから生成した中間コードをそれぞれ示している。すなわち、図５は、図４に示すサンプルＣソースコードから生成される中間コードを示す例である。中間コード生成部１０３は、図４に示すソースコードを入力として、図５に示すような中間コードを生成する。
【００３３】
中間コード生成部１０３は、ソースコードを解析して、基本ブロックを構成する。基本ブロックは、ブロックの最後の命令以外に分岐命令を含まない命令列により構成されるものである。また、基本ブロック間は、分岐命令により遷移するように構成される。図４に示す例の場合には、中間コード生成部１０３は、ソースコードを解析して、３つの基本ブロックを構成する。すなわち、図４に示すfunc0は、図５に示すように３つの基本ブロックblock0：{FABCD}、block1：{CDEF}、block2：{GH}として構成される。そして、図５において、基本ブロックblock0と基本ブロックblock1及び基本ブロックblock2間の遷移は、基本ブロックblock0に配置された分岐命令(if文)により行われる。尚、func1についても同様に基本ブロック及びその遷移が構成される。
【００３４】
図６は、図５の中間コードに対して、サブルーチン化部１０６によるサブルーチンの生成結果を示す図である。まず、サブルーチン化部１０６は、func0内の基本ブロックblock0〜2と、func1内の基本ブロックblock0〜2をそれぞれ対比して類似部分を検出し、検出した類似部分からサブルーチンを生成する。ここでは、この処理を第１のサブルーチン化と称する。図５に示す例では、func0内の基本ブロックblock0と、func1内の基本ブロックblock0とについて、{ABCD}が類似する部分である。このため、この類似部分をサブルーチンSUB0として生成する（図６においてサブルーチンSUB0  １１４として示す。）。同様にして、サブルーチンSUB1及びサブルーチンSUB2を生成する（図６においてサブルーチンSUB1  １１５、サブルーチンSUB2  １１６として示す。）。尚、第１のサブルーチン化処理は、上述した図３に示した処理のうち、ステップＳ２０２及びステップＳ２０３における処理に相当する。
【００３５】
各中間コードに対するサブルーチン化処理の完了後に、サブルーチン化部１０６は、サブルーチン化が完了した中間コードに対して、更に、第２のサブルーチン化処理を行う。ここで、第１のサブルーチン化処理と同様に、第２のサブルーチン化処理についても中間コード内において類似部分を検出して、サブルーチン化を行うものであるが、基本ブロック間を跨いでサブルーチン化処理を行う点が、第１のサブルーチン化処理と異なる。尚、第２のサブルーチン化処理は、上述した図３に示した処理のうち、ステップＳ２０４及びステップＳ２０５における処理に相当する。
【００３６】
図６に示すように、func0内の基本ブロックblock0のFと、func1内の基本ブロックblock0のGとを除いた部分は共通であることが判る。よって、サブルーチン化部１０６は、この共通部分をサブルーチンとして新たにサブルーチンnewSUB0を生成する。その結果を図７において、サブルーチンnewSUB0  １１７として示す。
【００３７】
尚、func0内の基本ブロックblock1と基本ブロックblock2はともに、基本ブロック内の最後に存在する分岐命令を除く全命令がサブルーチン化された基本ブロックであり、func0内の基本ブロックblock0は、これら基本ブロックへの分岐命令を有している。また、func1内の基本ブロックblock0についても、基本ブロックblock1と基本ブロックblock2への分岐命令を有している。従って、これら基本ブロックを類似部分の検出対象とし、類似部分である共通部分が検出される。この共通部分を図６において破線により囲んだ部分で示している。
【００３８】
ただし、新たなサブルーチンnewSUB0を生成するときに、第１のサブルーチン化処理において生成したサブルーチンを呼び出すようなソースコードとなる場合には、当該呼び出すサブルーチンを展開して新たなサブルーチンの生成を行うようにする。これは、サブルーチンを呼び出す階層の増加に伴って、制御コードが増加するというデメリットを回避するためである。従って、図７に示す例の場合には、新たに生成したサブルーチンnewSUB0内の構成としては、サブルーチンnewSUB0から第１のサブルーチン化処理において生成したサブルーチンSUB0、サブルーチンSUB1、サブルーチンSUB2を呼び出すような構成とはせずに、サブルーチンnewSUB0内にこれらサブルーチンSUB0、サブルーチンSUB1、サブルーチンSUB2の中身を展開するように構成する。従って、図７に示すように、本発明によれば、基本ブロックを跨いでサブルーチン化処理を行うため、関連する従来の技術よりも多くのサブルーチン化効果が期待できる。
【００３９】
このように、本発明によれば、基本ブロック内の一部の論理から関数全体の論理までの範囲を対象として、可変長の範囲をサブルーチン化の対象とする。このため、基本ブロック内のサブルーチン化が完了した後に、基本ブロック内の最後に存在する制御命令（例えば、分岐命令）を除いた全命令列がサブルーチン化された基本ブロックに対して、該基本ブロックへの制御命令を持つ基本ブロックに対しても解析を行う。そして、解析を行った結果、該基本ブロックへの制御命令を持つ基本ブロック内の命令列も含めてサブルーチン化が可能である場合には、サブルーチン化の対象範囲を該基本ブロックと該基本ブロックへの制御命令を持つ基本ブロックへと拡大する。このようにサブルーチン化の範囲を１つの基本ブロック内から拡大していくことで、基本ブロックを跨いで最大で関数定義全体に対するサブルーチン化を実現することができる。従って、サブルーチン化の対象範囲を可変にして、最適なサブルーチン化を実現することができる。
【００４０】
尚、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００４１】
【図１】本発明に係るプログラム変換方法を示すフローチャート図である。
【図２】本発明の実施の形態１にプログラム変換装置の構成例を示す図である。
【図３】本発明の実施の形態１に係るサブルーチン化部による処理を説明するためのフローチャート図である。
【図４】本発明の実施の形態１に係るサンプルＣソースコードを示す図である。
【図５】本発明の実施の形態１に係るサンプルＣソースコードから生成された中間コードのイメージを示す図である。
【図６】本発明の実施の形態１に係る図５の中間コードに対して、サブルーチン化部によるサブルーチンの生成結果を示す図である。
【図７】本発明の実施の形態１に係る新たに生成したサブルーチンを示す図である。
【図８】関連するプログラム変換装置の構成を示す図である。
【図９】関連するプログラム変換装置に入力するソースプログラムを示す図である。
【図１０】関連するプログラム変換装置の出力結果を示す図である。
【図１１】関連するプログラム圧縮方法の構成を示す図である。
【図１２】関連するプログラム圧縮方法の処理を示すフローチャート図である。
【符号の説明】
【００４２】
１００  プログラム変換装置、
１０１、１０２  Ｃソースプログラム、
１０３  中間コード生成部、
１０４、１０５  中間コード、
１０６  サブルーチン化部、
１０７、１０８  サブルーチン化された中間コード、
１０９  コード生成部、
１１０、１１１  ターゲットプロセッサ用オブジェクト、
１１２  リンカ、
１１３  実行ファイル、
１１４、１１５、１１６、１１７  サブルーチン
【図１】
2010108213.tif 000003
【図２】
2010108213.tif 000004
【図３】
2010108213.tif 000005
【図４】
2010108213.tif 000006
【図５】
2010108213.tif 000007
【図６】
2010108213.tif 000008
【図７】
2010108213.tif 000009
【図８】
2010108213.tif 000010
【図９】
2010108213.tif 000011
【図１０】
2010108213.tif 000012
【図１１】
2010108213.tif 000013
【図１２】
2010108213.tif 000014