(57)【要約】【課題】コンパイルにより生成するオブジェクトコードのデータサイズを小さくすること【解決手段】サブルーチン検出部１３１は、ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出する。サブルーチン生成部１３２は、サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成する。この際、サブルーチン生成部１３２は、類似命令列に関する処理を置換可能に構成したサブルーチンを生成する。サブルーチン呼び出し部１３３は、オブジェクトコードに対し、類似命令列の各々に応じた処理を埋め込む。【選択図】図１
2012256150.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル装置であって、
前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出するサブルーチン検出部と、
前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成するサブルーチン生成部と、
前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込むサブルーチン呼び出し部と、を備え、
前記サブルーチン生成部は、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記サブルーチンを生成する、コンパイル装置。
【請求項２】
前記命令列は、命令種別と、オペランドタイプと、オペランド情報と、を含み、
前記所定規則は、前記オペランドタイプが記述されるテーブル形式のデータであり、
前記サブルーチン検出部は、前記命令種別及び前記オペランドタイプが一致し、前記所定規則に定義された前記オペランドタイプを持つ命令列同士を前記類似命令列と判定することを特徴とする請求項１に記載のコンパイル装置。
【請求項３】
前記類似命令列は、定数値をレジスタにロードする処理を示すことを特徴とする請求項１または請求項２に記載のコンパイル装置。
【請求項４】
ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル方法であって、
前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出し、
前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成する際に、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記オブジェクトコードを生成し、
前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込む、コンパイル方法。
【請求項５】
請求項４に記載のコンパイル方法をコンピュータに行わせるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンパイル装置、コンパイル方法、及びプログラムに関し、特にサブルーチン化処理を行うコンパイル装置、コンパイル方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、マイクロコンピュータ等で使用される組み込みソフトウェアのソースコードのコード規模が増大している。コード規模の増大に伴って、ソースコードのコンパイル結果であるオブジェクトコードのコードサイズの削減がコンパイラに求められている。
【０００３】
オブジェクトコードのコードサイズを削減するための技術の一つとして、サブルーチン化が挙げられる。サブルーチン化とは、ソースプログラム内の同じコードパターンをサブルーチンとして抽出する技術である。以下、一般的なサブルーチン化の概要について説明する。
【０００４】
コンパイラは、ソースプログラム中の同じコードパターンを検出し、検出した部分の論理と等価なサブルーチンを生成する。そして、コンパイラは、オブジェクトコードにおいて検出したコード箇所に、生成したサブルーチン呼び出しのコードを挿入する。
【０００５】
図１０は、コンパイラによる一般的なサブルーチン化の処理を示す図である。図１０では、コンパイラは、同一コードパターン"data1 = 0x1030005"を検出し、オブジェクトコードにおいてこのコードパターンと等価な処理を行うサブルーチン"bs_S0009"を生成している。そして、コンパイラは、オブジェクトコードにおいてコードパターン"data1 = 0x1030005"の記載位置に対応する箇所に"bs_S0009"の呼び出し処理を記載している。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、コンパイラは、同一コードパターンを検出し、サブルーチン化を行っている。しかしながら、コンパイラは、完全に同一のコードパターンのみを検出しており、コードパターンの一部のみが異なる類似のコードパターンをサブルーチン化の対象とできない。
【０００７】
図２は、当該問題を説明するためのソースコード及びオブジェクトコードである。このソースコードに含まれる代入文は、代入する定数値のみが異なる。しかしながら、上述のコンパイラは、異なるコードパターンであると判定し、オブジェクトコードを生成する。
【０００８】
サブルーチン化は、同一コードパターンが複数回出現し、オブジェクトコードにおいて当該コードパターンの出現位置にサブルーチンの呼び出し命令を記載しても全体のコードサイズが削減される場合に有効である。そのため、たとえば１回のみ出現するコードパターンに対してサブルーチン化を行うと、サブルーチンの呼び出し命令の分だけコードサイズが大きくなってしまう。
【０００９】
図１１は、１回だけ出現するコードパターン"data1 = 0x1030005"をサブルーチン化の対象とした場合の各オブジェクトコードの比較を示す図である。図示するように、この場合にはサブルーチン化を行った方がオブジェクトコードのコードサイズが大きくなってしまう。
【００１０】
すなわち、上述のコンパイラは、同一コードパターンのみをサブルーチン化の対象としているため、十分にオブジェクトコードのコードサイズを小さくすることが出来ないという問題があった。
【課題を解決するための手段】
【００１１】
本発明にかかるコンパイル装置の一態様は、
ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル装置であって、
前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出するサブルーチン検出部と、
前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成するサブルーチン生成部と、
前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込むサブルーチン呼び出し部と、を備え、
前記サブルーチン生成部は、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記サブルーチンを生成する、ものである。
【００１２】
本発明にかかるコンパイル方法の一態様は、
ソースプログラムをコンパイルし、オブジェクトコードを生成するコンパイル方法であって、
前記ソースプログラムの解析から得られる中間コードに含まれる命令列に対し、所定規則により類似と判定される類似命令列をも同一命令列とみなす比較を行い、サブルーチン化可能な命令列群であるサブルーチン対象命令列群を検出し、
前記サブルーチン対象命令列群から前記オブジェクトコード内に埋め込むサブルーチンを生成する際に、前記所定規則に基づいて、前記類似命令列に関する処理を置換可能に構成した前記オブジェクトコードを生成し、
前記オブジェクトコードに対し、前記所定規則に基づいて、前記類似命令列の各々に応じた処理を埋め込む、ものである。
【００１３】
本発明にかかるプログラムの一態様は、上述した本発明にかかるコンパイル方法をコンピュータに行わせるためのプログラムである。
【００１４】
本発明にかかるコンパイル装置は、同一命令列に限らず、類似命令列をもオブジェクトコード内でのサブルーチン化の対象（サブルーチン対象命令群）として検出している。コンパイル装置は、サブルーチン対象命令群をサブルーチン化するとともに、類似命令列かかる箇所を差し替え可能に構成し、サブルーチン呼び出しの後に各類似命令列に応じた処理に差し替えている。これにより、論理的に誤りのないオブジェクトコードを生成できるとともに、サブルーチン化の対象となる命令列を増加させることができ、オブジェクトコードのデータサイズを削減できる。
【発明の効果】
【００１５】
本発明では、データサイズを削減したオブジェクトコードを生成するコンパイル装置、コンパイル方法、及びプログラムを提供することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１にかかるコンパイル装置の構成を示すブロック図である。
【図２】実施の形態１にかかるコンパイル装置の処理対象となるソースプログラムを示す図である。
【図３】実施の形態１にかかるコンパイル装置の処理対象となる中間コードを示す図である。
【図４】実施の形態１にかかる類似命令パターンマッチ部の処理の流れを示すフローチャートである。
【図５】実施の形態１にかかる類似パターンテーブルを示す図である。
【図６】実施の形態１にかかるサブルーチン生成部の処理の流れを示すフローチャートである。
【図７】実施の形態１にかかるコンパイル装置が生成するオブジェクトコードを示す図である。
【図８】実施の形態１にかかるサブルーチン呼び出し部の処理の流れを示すフローチャートである。
【図９】実施の形態１にかかるコンパイル装置を実現するためのコンピュータシステムのハードウェア構成例を示すブロック図である。
【図１０】一般のコンパイラによるオブジェクトコードの生成を示す図である。
【図１１】一般のコンパイラによるオブジェクトコードの生成を示す図である。
【発明を実施するための形態】
【００１７】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかるコンパイル装置の構成を示すブロック図である。コンパイル装置１００は、構文解析部１１０と、中間コード生成部１２０と、サブルーチン化部１３０と、オブジェクト出力部１４０と、を備える。サブルーチン化部１３０は、サブルーチン検出部１３１と、サブルーチン生成部１３２と、サブルーチン呼び出し部１３３と、を備える。サブルーチン検出部１３１は、類似命令パターンマッチ部１３４を備える。サブルーチン生成部１３２は、類似命令コード生成部１３５を備える。サブルーチン呼び出し部１３３は、類似コードパターン呼び出し部１３６を備える。
【００１８】
コンパイル装置１００には、ソースプログラム２００が入力される。コンパイル装置は、ソースプログラム２００に対するコンパイル処理の結果としてオブジェクトコード３００を出力する。以下の説明では、ソースプログラム２００は、Ｃ言語により記載されたプログラムである図２に記載のプログラムとする。図２には、３つの関数を含むプログラムが記載されている。以下、各処理部の動作詳細について説明する。
【００１９】
構文解析部１１０は、コンパイルの際に必要となる字句解析及び構文解析を行う処理部である。この解析は、既知の手法を用いれば良い。構文解析部１１０は、解析結果を中間コード生成部１２０に供給する。
【００２０】
中間コード生成部１２０は、構文解析部１１０から供給された解析結果を基に、オブジェクトコードの基となる中間的なコード（以下の説明では中間コードと記載する。）を作成する。中間コード生成部１２０が図２に記載のプログラムを基に作成した中間コードの概要を図３に示す。図３は、図２のソースプログラムを基に作成した中間コードであり、３つの関数に対応する命令列が記載されている。なお、図３では説明の便宜を図るため、各命令列に通し番号（３０１〜３１２）を付している。中間コード生成部１２０は、作成した中間コードをサブルーチン化部１３０に供給する。
【００２１】
中間コードの各命令列は、命令種別と、オペランドタイプと、オペランド情報と、を含んで構成される。命令 に"ＯＰ＿ＭＯＶＷ"と記載され、オペランドタイプに"ＯＰＴ＿ＡＸ＿ＣＯＮ"と記載されている命令列は、レジスタａｘにオペランド情報に記載された定数をロードすることを意味している。命令 に"ＯＰ＿ＭＯＶＷ"と記載され、オペランドタイプに"ＯＰＴ＿ＳＹＭ＿ＡＸ"と記載されている命令列は、レジスタａｘに格納された値をメモリにストアすることを意味している。この命令列のオペランド情報は、シンボル及びオフセットを示す。
【００２２】
中間コードは、サブルーチン化部１３０内のサブルーチン検出部１３１に供給される。サブルーチン検出部１３１は、中間コードを基にサブルーチンの対象となる命令列を特定する処理部である。サブルーチン検出部１３１内の類似命令パターンマッチ部１３４は、同一ではないもののサブルーチン化が可能な類似命令列をもサブルーチンの対象として抽出する処理部である。類似命令パターンマッチ部１３４の処理の流れを図４のフローチャートを参照して説明する。
【００２３】
類似命令パターンマッチ部１３４は、中間コードから一つの命令列を抽出し、当該命令列と同一の命令列のパターンマッチを行う（Ｓ１１）。そして、処理対象の命令列と同一の命令列があるか否かを判定する（Ｓ１２）。例えば命令列３０１を処理対象としている場合、中間コード内に命令種別、オペランドタイプ、及びオペランド情報が完全に一致する命令列が無いため、類似命令パターンマッチ部１３４は、同一命令列は無いと判定する（Ｓ１２：Ｎｏ）。
【００２４】
一方、命令列３０２を処理対象としている場合、命令列３０６及び命令列３１０と完全一致するため、類似命令パターンマッチ部１３４は、同一命令列があると判定する（Ｓ１２：Ｙｅｓ）。同一命令列がある場合、類似命令パターンマッチ部１３４は、パターンマッチの結果として"ＴＲＵＥ"をリターンする（Ｓ１５）。
【００２５】
同一命令列は無いと判定した場合（Ｓ１２：Ｎｏ）、類似命令パターンマッチ部１３４は、処理対象の命令列のオペランドタイプが類似パターンテーブルに登録されているか否かを判定する（Ｓ１３）。類似パターンテーブルとは、同一ではないが類似（または略同一）であるとしてサブルーチン化の処理においては同一命令列として扱っても良いと判定するための規則を定めたテーブルである。本例では、類似パターンテーブルには、オペランド情報のみが異なる命令列を同一の命令列と扱っても良いと判定するために参照するテーブルであり、オペランドタイプが登録される。図５は、類似パターンテーブルを示す図である。図示するように、"ＯＰＴ＿ＡＸ＿ＣＯＮ"が登録されている。
【００２６】
類似命令パターンマッチ部１３４は、処理対象の命令列と同じ命令種別及びオペランドタイプを持ち、当該オペランドタイプが類似パターンテーブルに登録されている場合に、オペランド情報を記憶部（図示せず）に登録する（Ｓ１３：Ｙｅｓ、Ｓ１４）。そして、類似命令パターンマッチ部１３４は、パターンマッチの結果として"ＴＲＵＥ"をリターンする（Ｓ１５）。
【００２７】
たとえば命令列３０１を処理対象とする場合、類似命令パターンマッチ部１３４は、命令列３０５及び命令列３０９と類似の命令列であると判定し（Ｓ１３：Ｙｅｓ）、オペランド情報"０ｘ０００３"を記憶部に登録する（Ｓ１４）。
【００２８】
一方、処理対象の命令列と類似する命令列が無かった場合、類似命令パターンマッチ部１３４は、パターンマッチの結果として"ＦＡＬＳＥ"をリターンする（Ｓ１６）。
【００２９】
類似命令パターンマッチ部１３４は、上記一連の処理（Ｓ１１〜Ｓ１６）を各命令列に対して実行する。これにより、"ｆｕｎｃ１"の各命令列３０１〜３０４は、"ｆｕｎｃ２"の各命令列３０５〜３０８、及び"ｆｕｎｃ３"の各命令列３０９〜３１２と同一、または類似と判定される。すなわち、類似命令パターンマッチ部１３４は、"ｆｕｎｃ１"の各命令列と、"ｆｕｎｃ２"の各命令列と、"ｆｕｎｃ３"の各命令列と、がサブルーチン化できると判定する。また、類似命令パターンマッチ部１３４は、命令列３０１、３０５、３０９が類似すると判定し、当該命令列のオペランド情報"０ｘ０００３"、"０ｘ０００５"、"０ｘ０００６"を記憶部に格納する。
【００３０】
サブルーチン検出部１３１は、類似命令パターンマッチ部１３４の判定結果を含む情報、すなわちサブルーチン化できる命令列の情報（サブルーチン対象命令列群）をサブルーチン生成部１３２に通知する。
【００３１】
サブルーチン生成部１３２は、オブジェクトコードに埋め込むサブルーチンを生成する処理部である。サブルーチン生成部１３２（または他の処理部）は、サブルーチンの対象ではない命令列を、オブジェクトコードの各行に変換する。以下、サブルーチン生成部１３２によるサブルーチンの生成処理について説明する。図６は、サブルーチン生成部１３２内の類似命令コード生成部１３５の処理を主に示すフローチャートである。
【００３２】
類似命令コード生成部１３５は、サブルーチン化の対象とされた命令列を１命令列毎に処理対象とする。類似命令コード生成部１３５は、処理対象の命令列がサブルーチン検出部１３１により類似命令列と判定された命令列であるか否かを判定する（Ｓ２１）。類似命令列である場合（Ｓ２１：Ｙｅｓ）、類似命令コード生成部１３５は、類似パターンテーブルを基に、後ほど置換可能な処理をオブジェクトコード内に埋め込む（Ｓ２２）。
【００３３】
Ｓ２２の処理の詳細について図３、及び図７を参照して説明する。図７は、図３に示す中間コードをオブジェクトコードにする処理を示す図である。ここで、図７には、サブルーチンを行わないオブジェクトコードも参考に記載している。
【００３４】
類似命令コード生成部１３５は、命令 に"ＯＰ＿ＭＯＶＷ"と記載され、オペランドタイプに"ＯＰＴ＿ＡＸ＿ＣＯＮ"と記載される命令列３０１、３０５、３０９に対応するコードとして以下の処理をオブジェクトコードに記載する。
ｍｏｖｗ        ａｘ，［ｓｐ＋０］
ｍｏｖｗ        ｄｅ，ａｘ
ｉｎｃｗ        ａｘ
ｉｎｃｗ        ａｘ
ｍｏｖｗ        ［ｓｐ＋０］，ａｘ
ｍｏｖｗ        ａｘ，［ｄｅ］
【００３５】
上記の処理は、後の処理（Ｓ３３）で設定するオペランド情報を、呼び出し元の関数への戻りアドレスから取得する処理、呼び出し元の関数への戻りアドレスをオペランド情報の設定の後ろに位置するように補正する処理、及び取り出したオペランド情報にアクセスする処理を生成する処理を含む。
【００３６】
上述の処理は、オペランドタイプの"ＯＰＴ＿ＡＸ＿ＣＯＮ"に対応した処理であり、他のオペランドタイプが類似パターンテーブルに定義されている場合には他の処理が記載される。すなわち、類似命令コード生成部１３５は、類似命令列にかかる処理を、サブルーチン呼び出しの後で補正できるような処理を生成する。
【００３７】
一方、処理対象の命令列が類似命令列ではない場合（Ｓ２１：Ｎｏ）、類似命令コード生成部１３５（または他の処理部）は、処理対象の命令列を、オブジェクトコードの各行に変換する（Ｓ２３）。
【００３８】
上述の処理により、サブルーチン生成部１３２は、サブルーチン（図７における"ｂｓ＿Ｓ０００９"）を含むオブジェクトコードを生成する。サブルーチン生成部１３２は、サブルーチン化した処理を含むオブジェクトコードをサブルーチン呼び出し部１３３に供給する。
【００３９】
サブルーチン呼び出し部１３３は、供給されたオブジェクトコードに対し、類似命令列の各々に応じた処理を埋め込む処理部である。以下、サブルーチン呼び出し部１３３内の類似コードパターン呼び出し部１３６の処理を図７及び図８を参照して説明する。図８は、サブルーチン呼び出し部１３３の処理の流れを示すフローチャートである。
【００４０】
サブルーチン呼び出し部１３３は、一般的なコンパイラの処理と同様にサブルーチンを呼び出す処理（図７における"ｃａｌｌ  ＄！ｂｓ＿Ｓ０００９"）を呼び出し箇所に追加する（Ｓ３１）。
【００４１】
次に、類似コードパターン呼び出し部１３６は、呼び出したサブルーチンの生成の際に類似命令列が含まれていたか否かを判定する（Ｓ３２）。類似命令列が含まれていた場合（Ｓ３２：Ｙｅｓ）、類似命令パターンマッチ部１３４が記憶部に書き込んだオペランド情報と類似パターンテーブルを基に、類似命令列の各々に応じた処理を埋め込む。ここで、類似コードパターン呼び出し部１３６は、類似パターンテーブルにオペランドタイプ"ＯＰＴ＿ＡＸ＿ＣＯＮ"が規定されており、命令列３０１のオペランド情報として"０ｘ０００３"がメモリに格納されているため、オブジェクトコードに"ＤＷ  ０３Ｈ"という行を追加する。同様に類似コードパターン呼び出し部１３６は、オブジェクトコードに"ＤＷ  ０５Ｈ"、"ＤＷ  ０６Ｈ"という行を追加する。
【００４２】
サブルーチン呼び出し部１３３は、全てのサブルーチン呼び出しについて処理を行ったオブジェクトコード（図７参照）をオブジェクト出力部１４０に出力する。なお、図７では、図面での説明の便宜上、３つの関数を用いて説明を行ったが、一般のソースプログラムでは定数を設定する処理は多いため、サブルーチン化によりオブジェクトコードのサイズが削減できる。
【００４３】
オブジェクト出力部１４０は、供給されたオブジェクトコード３００を任意の記憶装置（ハードディスク等）に書き込む。
【００４４】
続いて、本実施の形態にかかるコンパイル装置の効果について説明する。コンパイル装置１００は、同一命令列に限らず、類似命令列をもオブジェクトコード内でのサブルーチン化の対象（サブルーチン対象命令群）として検出している。コンパイル装置１００は、サブルーチン対象命令群をサブルーチン化するとともに、類似命令列かかる箇所を差し替え可能に構成し、サブルーチン呼び出しの後に各類似命令列に応じた処理に差し替えている。これにより、論理的に誤りのないオブジェクトコードを生成できるとともに、サブルーチン化の対象となる命令列を増加させることができ、オブジェクトコードのデータサイズを削減できる。
【００４５】
一般に、マイクロコントローラが使用される組み込みシステムにおいて、当該システムに用いられるプログラム処理は、定数値をメモリに設定する処理が多い。そのため、定数値をレジスタにロードする処理が多い。すなわち、設定する定数値のみが異なる同様の処理が多い。そのため、これらの命令を類似命令列と扱い、サブルーチン化することにより、サブルーチンの適用範囲が広くなり、オブジェクトコードのサイズの削減の効果が大きく成る。
【００４６】
コンパイル装置１００の各処理部（構文解析部１１０、中間コード生成部１２０、サブルーチン化部１３０、及びオブジェクト出力部１４０）の処理は、任意のコンピュータ内で動作するプログラムとして実現することが可能である。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００４７】
図９は、コンパイル装置１００を実現するためのコンピュータシステムのハードウェア構成例を示している。例えば、このシステムは、中央処理装置（ＣＰＵ）４１０とメモリ４２０とを含んでいる。ＣＰＵ４１０とメモリ４２０とは、バスを介して補助記憶装置としてのハードディスク装置（ＨＤＤ）４３０に接続される。このシステムは、典型的には、ユーザ・インターフェース・ハードウェアを備える。ユーザ・インターフェース・ハードウェアとしては、例えば、入力をするためのポインティング・デバイス（マウス、ジョイスティック等）やキーボード等の入力装置４４０や、視覚データをユーザに提示するための液晶ディスプレイなどの表示装置４５０がある。ハードディスク装置４３０等の記憶媒体にはオペレーティングシステムと共同してＣＰＵ４１０等に命令を与え、このシステムの各部の機能を実施するためのコンピュータ・プログラムを記憶することができる。すなわち、プログラムがメモリ４２０上に展開され、ＣＰＵ４１０がプログラムに従って処理を行い、他のハードウェア構成と協働することによって、コンパイル装置１００の各ブロックが構成されている。そして、コンパイル装置１００による各処理は、ＣＰＵ４１０において所定のプログラムが実行されることで実現されている。尚、これらのシステムは、単一のコンピュータでなくとも、複数のコンピュータによって構成することも可能である。
【００４８】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の説明ではＣ言語を対象として説明を行ったが必ずしもこれに限られず、コンパイルを要する任意のプログラム言語に本発明のコンパイル手法を適用することができる。
【００４９】
また、上述の説明では、類似パターンテーブルに上記以外の処理（たとえば、メモリ上のデータをレジスタにロードする、レジスタ上のデータをメモリにストアする等）を登録し、これらの処理に対応するサブルーチン化のアルゴリズムを追加しても良い。これにより、サブルーチン化の対象範囲が広くなり、更なるオブジェクトコードの削減が期待できる。
【符号の説明】
【００５０】
１００  コンパイル装置
１１０  構文解析部
１２０  中間コード生成部
１３０  サブルーチン化部
１３１  サブルーチン検出部
１３２  サブルーチン生成部
１３３  サブルーチン呼び出し部
１３４  類似命令パターンマッチ部
１３５  類似命令コード生成部
１３６  類似コードパターン呼び出し部
１４０  オブジェクト出力部
２００  ソースプログラム
３００  オブジェクトコード
４１０  ＣＰＵ
４２０  メモリ
４３０  ＨＤＤ
４４０  入力装置
４５０  表示装置
【図１】
2012256150.tif 000003
【図２】
2012256150.tif 000004
【図３】
2012256150.tif 000005
【図４】
2012256150.tif 000006
【図５】
2012256150.tif 000007
【図６】
2012256150.tif 000008
【図７】
2012256150.tif 000009
【図８】
2012256150.tif 000010
【図９】
2012256150.tif 000011
【図１０】
2012256150.tif 000012
【図１１】
2012256150.tif 000013