(57)【要約】【課題】複数のソース情報に対するコンパイル処理プログラムに関し、大規模なプログラムのソース情報を実用的な時間で処理できる処理プログラムを提供する。【解決手段】ソース情報入力部１１はプロファイル情報３２またはユーザ指定情報３４をもとに選択したソース情報を入力し、構文解析部１２はそのソース情報を構文解析し、手続き属性解析部１３は解析結果からソース情報に出現する手続き（親手続き）で呼び出される手続呼出し（子手続き）の属性を解析して手続き属性表１９に記憶する。インライン展開部１４は、インライン展開の際に子手続きの属性が手続き属性表１９に登録されていなければ親手続きに最適化不要をマークし、さらに最適化部１５は、最適化不要がマークされている親手続きを除いて他の手続きを最適化する。【選択図】　　　　　図２
2004102597.tif 000002
【特許請求の範囲】
【請求項１】
複数のソース情報を一回の翻訳実行で処理するコンパイル処理をコンピュータに実行させるための処理プログラムであって、
前記複数のソース情報の全部または一部を入力するソース情報入力処理と、
入力されたソース情報を構文解析する構文解析処理と、
前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理と、
前記手続き属性解析処理結果である手続き属性情報を記憶する手続き属性情報記憶処理と、
前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理と、
前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理とを、
コンピュータに実行させる
ことを特徴とするコンパイル処理プログラム。
【請求項２】
請求項１に記載のコンパイル処理プログラムにおいて、
ユーザが指定した情報を入力して記憶するユーザ指定情報入力処理と、
前記ソース情報入力処理では、前記複数のソース情報からユーザが指定した情報にもとづいて選択したソース情報を入力する処理とを、
コンピュータに実行させる
ことを特徴とするコンパイル処理プログラム。
【請求項３】
請求項１に記載のコンパイル処理プログラムにおいて、
前記目的コードの実行履歴情報を入力する実行履歴情報入力処理と、
前記ソース情報入力処理では、前記複数のソース情報から前記ソース情報の実行履歴情報にもとづいて選択したソース情報を入力する処理とを、
コンピュータに実行させる
ことを特徴とするコンパイル処理プログラム。
【請求項４】
複数のソース情報を一回の翻訳実行で処理するコンパイル処理方法において、
前記複数のソース情報の全部または一部を入力するソース情報入力処理過程と、
入力されたソース情報を構文解析する構文解析処理過程と、
前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理過程と、
前記手続き属性解析処理過程の解析結果である手続き属性情報を記憶する手続き属性情報記憶処理過程と、
前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理過程と、
前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理過程とを備える
ことを特徴とするコンパイル処理方法。
【請求項５】
複数のソース情報を一回の翻訳実行で処理するコンパイル処理をコンピュータに実行させるための処理プログラムを記録した記録媒体であって、
前記複数のソース情報の全部または一部を入力するソース情報入力処理と、
入力されたソース情報を構文解析する構文解析処理と、
前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理と、
前記手続き属性解析処理結果である手続き属性情報を記憶する手続き属性情報記憶処理と、
前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理と、
前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理とを、
コンピュータに実行させる処理プログラムを記録した
ことを特徴とするコンパイル処理プログラム記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のソースプログラムファイル（ソースファイル）やソースファイルから変換された中間言語コードなどのソース情報から一回の翻訳でオブジェクトコードを生成するコンパイル処理プログラム、コンパイル処理方法、およびコンパイル処理プログラム記録媒体に関する。
【０００２】
近年の大規模な実用プログラムは、複数人の共同作業によって製作されることが主流となっているため、開発の効率化のために複数のソースファイルから構成される傾向がある。また、実用プログラムを構造化して全体の構成を把握しやすくするために、個々のファイルには、相互に関連の深い少数の機能ユニット（例えば手続き、変数など）のみについて記述されるという傾向がある。
【０００３】
このように、大規模な実用プログラムは、複数のファイルに跨がる手続き間呼出し関係を従来に比べてより多く持つようになっている。そのため、このようなプログラムに対しても高速に実行できるような最適化機能付きのコンパイル処理をコンピュータに実行させるためのコンパイル処理プログラムやコンパイル処理方法、コンパイル処理プログラムを記録した記録媒体などが求められている。
【０００４】
【従来の技術】
大規模な実用プログラムの複数のファイルにわたる呼出し関係を解析して、他の最適化処理に利用する手法をクロスファイル最適化と呼ぶ。
【０００５】
従来クロスファイル最適化では、複数のソースファイルをコンパイル処理する場合に、手続き間の呼出し関係を表す情報を取得して保持しておき、この呼出し関係情報をもとにコンパイル時にソースに定義された手続きに係わる最適化を施したコードを生成する（例えば、特許文献１参照）。
【特許文献１】
特開平９−２７４５７０号公報
【０００６】
【発明が解決しようとする課題】
従来、クロスファイル最適化を行うためには、プログラムを構成する全てのソースファイルを一回の翻訳実行で読み込む必要がある。その理由は、あるファイルに定義されている手続きＡと別のファイルに定義されている手続きＢとが直接／間接的に呼出し関係にある場合に、手続きＡの翻訳時に手続きＢで行われている処理に関する情報が参照できないとすると、手続きＡと手続きＢとが直接の呼出し関係にあるかどうかに関わらず、以下のような危険があるからである。
【０００７】
１）手続きＡの中で定義もしくは参照している大域変数が、手続きＢによって定義もしくは参照されている可能性がある。この場合に、手続きＡで使用されている全ての大域変数に関する最適化が結果を誤る恐れなしには実行できない。
【０００８】
２）同様に、手続きＢがポインタを引数に採る手続きであるような場合に、手続きＡ内で使用されるメモリ領域のうち、手続きＢに渡される可能性があるポインタと全く重ならないことが確実に分からない限り、結果を誤る恐れなしには最適化が実行できない。
【０００９】
上記のような問題があるために、従来のクロスファイル最適化では翻訳時に全てのソース情報が与えられている必要があった。
【００１０】
しかし、近年の大規模な実用プログラムなどは、プログラムを構成する全てのソース情報を一度に解析するには規模が大き過ぎ、実用的な時間では翻訳処理ができないという問題が生じている。
【００１１】
本発明の目的は、プログラムを構成する全てのソース情報が与えられていない場合に、大域変数に関する最適化、ポインタに対する最適化などの問題を生じうる可能性のある最適化を自動的に抑止し、かつ、安全に行える最適化については実施するようなコンパイル処理をコンピュータに実行させるためのコンパイル処理プログラム、コンパイル処理方法およびコンパイル処理プログラム記録媒体を提供することである。
【００１２】
【課題を解決するための手段】
上記課題を解決するため、本発明は、複数のソース情報を一回の翻訳実行で処理するコンパイル処理をコンピュータに実行させるための処理プログラムであって、前記複数のソース情報の全部または一部を入力するソース情報入力処理と、入力されたソース情報を構文解析する構文解析処理と、前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理と、前記手続き属性解析処理結果である手続き属性情報を記憶する手続き属性情報記憶処理と、前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理と、前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理とを、コンピュータに実行させるものである。
【００１３】
また、本発明は、複数のソース情報を一回の翻訳実行で処理するコンパイル処理方法において、前記複数のソース情報の全部または一部を入力するソース情報入力処理過程と、入力されたソース情報を構文解析する構文解析処理過程と、前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理過程と、前記手続き属性解析処理過程の解析結果である手続き属性情報を記憶する手続き属性情報記憶処理過程と、前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理過程と、前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理過程とを備える。
【００１４】
また本発明は、前記コンパイル処理プログラムを記録した記録媒体である。
【００１５】
本発明は、以下のように作用する。あるプログラムについての複数のソースファイルまたはソースファイルに対応する中間言語情報などのソース情報の全部または一部を入力する。そして、入力されたソース情報を構文解析し、その構文解析の結果から当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析して手続き属性情報を記憶しておく。そして、ソース情報をインライン展開する際に、出現する手続きが内部で呼び出す呼出し関係の属性が前記手続き属性情報に含まれないものである場合には、その呼出し関係を含む手続きに「最適化不要」をマークしてインライン展開を行う。インライン展開後、ソース情報を最適化する際に、当該ソース情報に出現する手続きに「最適化不要」がマークされている場合には、その手続きの最適化を抑止し、当該手続き以外の手続きを最適化して目的コードを出力する。
【００１６】
本発明では、翻訳の際に翻訳対象としてすべてのソース情報を入力しないことにより、ある手続きが内部で呼び出す手続き呼出しの定義／参照に関する情報が不明である場合には、その手続きの呼出しに関する情報が不完全であるとしてインライン展開および最適化を行わないようにする。
【００１７】
これにより、従来のように、大規模なプログラムを構成する全てのソース情報を入力する必要がなく、手続きの実行回数などの手続き頻度情報やユーザ指定情報にもとづいて選択したソース情報のみを翻訳対象とすることができる。
【００１８】
そのため、実行回数が多い手続きを含むソース情報を選択的に入力して、プログラムの実行頻度が高い部分だけを実用的な処理時間でコンパイル処理することが可能となる。また、ユーザが任意に指定した文字列を含むようなソース情報を選択的に入力し、プログラムの特定の用途に関する部分だけを実用的な処理時間でコンパイル処理することが可能となる。
【００１９】
【発明の実施の形態】
図１に、本発明の実施の形態におけるシステム構成例を示す。本発明を実施するシステムは、ＣＰＵ１、メモリ２および外部記憶装置３から構成される。
【００２０】
本発明を実現するコンパイル処理プログラム（コンパイラ）１０は、外部記憶装置３に記憶された複数のソースファイル３０やソースファイル３０から変換された中間言語情報などのソース情報から、プロファイル情報３２やユーザ指定情報３４にもとづいて選択したソース情報を一回の翻訳で入力し最適化を含む翻訳を実行して目的コード４０を出力する処理プログラムである。
【００２１】
プロファイル情報３２は、目的コード４０の実行履歴情報であって、コンパイラ１０が目的コード４０とともに出力するプロファイル情報生成コード４２により生成される情報である。また、ユーザ指定情報３４は、ユーザが入力装置（図示しない）などを通じて設定したソース情報を選択するため基準となる情報である。
【００２２】
一時データ２０には、入力されたソースファイル３０、プロファイル情報３２などコンパイラ１０が使用するデータを一時的に記憶する領域である。
【００２３】
図２に、コンパイル処理プログラム（コンパイラ）１０の内部構成例を示す。コンパイラ１０は、ソース情報入力部１１、構文解析部１２、手続き属性解析部１３、インライン展開部１４、最適化部１５、目的コード出力部１６、プロファイル情報生成コード出力部１７、および手続き属性記憶部１８を備える。
【００２４】
ソース情報入力部１１は、翻訳の対象とするソース情報を入力する手段であって、選択情報入力部１１１およびソースファイル選択部１１２を備える。選択情報入力部１１１は、ソースファイル３０、ソースファイル３０から変換された中間言語情報などのソース情報から、翻訳対象として入力するソース情報を選択する際の基準となる情報（選択情報）であるプロファイル情報３２またはユーザ指定情報３４を入力する手段である。
【００２５】
本形態では、外部記憶装置３に記憶するＣ言語で記述されたソースファイル３０をソース情報とする。ソースファイル３０それぞれのファイル名は、ｐｒｏｇ．ｃ、ｓｕｂ１．ｃ、およびｓｕｂ２．ｃとする。図３に、ソースファイルのコード例を示す。図３（Ａ）は、ソースファイルｐｒｏｇ．ｃ、図３（Ｂ）はソースファイルｓｕｂ１．ｃ、および図３（Ｃ）はソースファイルｓｕｂ２．ｃを示す図である。
【００２６】
プロファイル情報３２は、ソース情報が実行された場合の実行履歴情報であって、コンパイラ１０で生成された目的コード４０に含まれるプロファイル情報生成コード４２により生成される。プロファイル情報３２は、例えば、ソースファイル３０のファイル名、そのソースコード中で実行される手続き名、基本ブロック数、各基本ブロック実行回数、分岐命令数、各分岐命令の成立回数などの情報を含む。ここで、基本ブロックとは、その終端以外に分岐処理を含まずに一連となって実行されるプログラムの断片である。
【００２７】
図４に、ソースファイルｐｒｏｇ．ｃのプロファイル情報の例を示す。ソースファイルｐｒｏｇ．ｃは、分岐や判定処理がなく一連の手続きが１つであるので（図３（Ａ）参照）、プロファイル情報生成コード４２は、基本ブロック数＝１、第１基本ブロックの実行回数＝１などを内容とするプロファイル情報３２を生成する。
【００２８】
ユーザ指定情報３４は、入力装置などを通じてユーザが任意に指定した情報である。ユーザは、ソースファイル３０のファイル名の文字列の一部、記述された関数の文字列の一部などをユーザ指定情報３４として指定することができる。
【００２９】
ソースファイル選択部１１２は、プロファイル情報３２またはユーザ指定情報３４をもとに、外部記憶装置３に記憶された複数のソースファイル３０から、翻訳対象とするソースファイルを選択する手段である。ソースファイル選択部１１２は、プロファイル情報３２を参照して、基本ブロックの実行回数が所定回数以上であるソースファイル３０を選択する。または、ソースファイル選択部１１２は、ファイル名や手続き名にユーザ指定情報３４で指定された文字列を含むソースファイル３０を選択する。
【００３０】
構文解析部１２は、ソース情報入力部１１が入力したソースファイル３０の構文を解析する手段である。構文解析部１２は、既知の種々の構文解析手法を用いて処理を行う。
【００３１】
手続き属性解析部１３は、構文解析部１２の解析結果をもとに、ソースファイル３０に出現する手続きの定義ごとに、例えば、引数の型、内部で呼び出している手続き（手続き呼出し）、内部で定義または参照している大域変数（グローバル変数）などの手続き属性に関する情報（手続き属性情報）を抽出して手続き属性表１９に登録する手段である。
【００３２】
図５に、手続き属性表１９の例を示す。ここで、ソース情報入力部１１が、図３に示す３つのソースファイル（ｐｒｏｇ．ｃ、ｓｕｂ１．ｃ、ｓｕｂ２．ｃ）を選択して入力したと仮定する。
【００３３】
手続き属性解析部１３は、これら３つのソースファイル３０に含まれる手続きｍａｉｎ、ｓｕｂ１、ｓｕｂ２、ｐｒｉｎｔｆのそれぞれから、手続きの引数、手続き内部で呼び出される手続き呼出し、使用する大域参照、大域定義などを解析して手続き属性表１９に登録する。また、ｐｒｉｎｔｆは、Ｃ言語の標準ライブラリ関数であるので、「標準ライブラリ：ｙｅｓ」を登録する。
【００３４】
なお、手続き属性表１９には、ソースファイル３０が記述されているプログラミング言語の標準的な関数群（標準ライブラリ関数など）が、予め登録されているように構成されていてもよい。
【００３５】
インライン展開部１４は、手続き属性表１９を参照して、入力されたソースファイル３０に出現する手続きの内部で呼び出す手続き呼出しのうち、その手続き属性情報が手続き属性表１９に登録されていない手続き呼出しには「最適化不要」の印を付加し、一方、その手続き属性情報が手続き属性表１９に登録されていて、かつ所定の判断基準に合致する手続き呼出しについてインライン展開を行う手段である。所定の判断基準として、例えば、手続き呼出しの実行回数、手続き呼出しのインライン展開後の命令数、ループ処理の有無、繰り返しの回数のような手続き内容の複雑性に関する情報などを用いる。
【００３６】
最適化部１５は、インライン展開後に、ソースファイル３０に出現する個々の手続きの最適化を行う手段であって、最適化対象判断部１５１を備える。最適化対象判断部１５１は、手続きの内部で呼び出す手続き呼出しがあれば、手続き属性表１９を参照して直接的または間接的に呼ばれる全ての手続きを検索する。そして、最適化部１５は、最適化対象判断部１５１の検索結果をもとに、その手続きが呼び出す手続き呼出しの属性情報が手続き属性表１９に登録されていないものである場合には、その手続き内での大域変数およびポインタに関する最適化を抑止する。
【００３７】
目的コード出力部１６は、ソース情報の最適化された目的コード４０を生成して出力する手段である。プロファイル情報生成コード出力部１７は、プロファイル情報３２が要求されている場合に、プロファイル情報３２を生成するための処理コード（プロファイル情報生成コード）４２を目的コード４０内部に構成されるように出力する手段である。手続き属性記憶部１８は、手続き属性表１９を記憶する手段である。
【００３８】
図６〜図９に、本発明の処理の流れを示す。図６は、ソース情報入力処理の処理フローを示す。
【００３９】
ソース情報入力部１１の選択情報入力部１１１は、外部記憶装置３に記憶されたソースファイル３０などのソース情報に対応するプロファイル情報３２またはユーザ指定情報３４などの選択情報があるかどうかをチェックして、選択情報が記憶されていれば、その選択情報を読み込む（ステップＳ１０）。そして、ソースファイル選択部１１２は、プロファイル情報３２の処理の基本ブロック、手続き、もしくは関数ごとの実行頻度、ユーザ指定情報３４の指定されたソースファイル３０の文字列などをもとに、翻訳対象とするソース情報を選択し（ステップＳ１１）、選択したソース情報を入力する（ステップＳ１２）。
【００４０】
例えば、ソース情報として、図３に示す３つのソースファイル３０が外部記憶装置３に記憶されているとし、ユーザ指定情報３４により、文字列「ｐｒｏｇ」、「ｓｕｂ２」が指定されているとする。ソース情報入力部１１は、ユーザ指定情報３４の文字列「ｐｒｏｇ」、「ｓｕｂ２」をキーに外部記憶装置３を検索し、ソースファイルｐｒｏｇ．ｃおよびｓｕｂ２．ｃを翻訳対象として抽出し入力する。
【００４１】
その後、全てのソース情報に対して以下のステップＳ１４およびステップＳ１５の処理を行う（ステップＳ１３）。まず、構文解析部１２は、構文解析処理を行う（ステップＳ１４）。そして、手続き属性解析部１３は、ソース情報に出現する手続きの属性を解析し、引数の個数と型、内部で呼び出している手続き呼出し、内部で参照または定義している大域変数などの解析結果を手続き属性表１９に登録し、手続き属性記憶部１８で記憶する（ステップＳ１５）。
【００４２】
ここで、手続き属性解析部１３は、解析結果をもとに、図５に示す手続き属性表１９の手続きと同様の登録内容で、ｐｒｏｇ．ｃおよびｓｕｂ２．ｃに出現する手続きｍａｉｎおよびｓｕｂ２の属性情報を手続き属性表１９に登録する。
【００４３】
図７に、インライン展開処理の処理フローを示す。インライン展開部１４は、ソース情報に出現する全ての手続きについて以下のステップＳ２１からステップＳ２９までの処理を行い（ステップＳ２０）、さらに、手続きを一つ取り出して、その手続きの内部で呼び出す全ての手続き呼出しについて以下のステップＳ２３からステップＳ２９までの処理を行う（ステップＳ２２）。
【００４４】
まず、インライン展開部１４は、手続き呼出しを一つ取り出して（ステップＳ２３）、手続き呼出しの実行回数は十分に多いかどうかをプロファイル情報３２を参照して判断する（ステップＳ２４）。手続き呼出しが十分な回数で実行されていなければ、ステップＳ２２の処理へ戻り、次の手続き呼出しを取り出す（ステップＳ２３）。一方、手続き呼出しが十分な回数で実行されていれば、さらに、当該手続き呼出しが標準ライブラリ関数かどうかを判断する（ステップＳ２５）。
【００４５】
手続き属性表１９を参照して、当該手続き呼出しが標準ライブラリ関数であれば、ステップＳ２２の処理へ戻り、次の手続き呼出しを取り出す（ステップＳ２３）。一方、当該手続き呼出しが標準ライブラリ関数でなければ、当該手続き呼出しが手続き属性表１９に登録済みであるかどうかを判断する（ステップＳ２６）。そして、当該手続き呼出しが手続き属性表１９に登録されていなければ、当該手続き呼出しを行う手続きに「最適化不要」をマークする（ステップＳ２７）。最適化不要のマークは、手続き属性表１９の該当する手続きに対する最適化の項目に「不要」を設定することで行う。または、別途、最適化不要手続き表（図示しない）を備えるようにして、この最適化不要手続き表に、最適化をしない手続きを追加することで行う。
【００４６】
一方、当該手続き呼出しが手続き属性表１９に登録されていれば、さらに、既知のインライン展開予測機能を用いて、インライン展開後の命令数についても十分に小さいかどうかを判断する（ステップＳ２８）。当該手続き呼出しがインライン展開後も十分に小さければ、当該手続き呼出しをインライン展開する（ステップＳ２９）。また、当該手続き呼出しがインライン展開後に十分に小さくなければ、ステップＳ２２の処理へ戻り、次の手続き呼出しを取り出す（ステップＳ２３）。
【００４７】
上記の処理を繰り返して、全ての手続き呼出しを処理し（ステップＳ２２）、さらに、全ての手続きを処理したら、インライン展開処理を終了する。
【００４８】
ここで、インライン展開部１４は、まず、ソースファイルｐｒｏｇ．ｃを取り出し、手続きｍａｉｎを取り出す。そして、手続き属性表１９から、手続きｍａｉｎの項目を抽出し、
引数：なし
手続き呼出し：ｓｕｂ１、ｓｕｂ２
大域参照および大域定義：ｇｖａｒ
を参照する。そして、手続き呼出しｓｕｂ１、ｓｕｂ２をキーに手続き属性表１９を検索した結果、ｓｕｂ１が登録されていないので、手続き属性表１９の手続きｍａｉｎの項目に、
最適化：不要
を追加する。続いて、手続きｓｕｂ２が手続き属性表１９に登録されているので、手続きｓｕｂ２をインライン展開する。図８に、インライン展開したソースファイルｐｒｏｇ．ｃのソース情報イメージを示す。
【００４９】
図９に、最適化処理の処理フローを示す。最適化部１５は、全ての手続きについて以下のステップＳ３１からステップＳ３３までの処理を行う（ステップＳ３０）。
【００５０】
まず、最適化部１５は、手続き（親手続き）を一つ取り出す（ステップＳ３１）。そして、最適化対象判断部１５１は、手続き属性表１９を参照して当該手続きに最適化不要の印があるかどうかを判断する（ステップＳ３２）。最適化部１５は、当該手続きに最適化不要のマークがなければ、その手続きを最適化する（ステップＳ３３）。当該手続きに最適化不要のマークがあれば、最適化を行わずに、ステップＳ３０の処理へ戻る。そして、全ての手続きについて処理を行っていれば、最適化処理を終了する。
【００５１】
ここで、最適化部１５は、手続き属性表１９の手続きｍａｉｎの項目に「最適化：不要」が設定されているので、図８に示す内容のソース情報の手続きｍａｉｎに対する最適化を行わない。
【００５２】
図１０に、目的コード出力処理の処理フローを示す。目的コード出力部１６は、全ての手続きについて以下のステップＳ４１からステップＳ４５までの処理を行う（ステップＳ４０）。
【００５３】
まず、目的コード出力部１６は、手続きを一つ取り出して（ステップＳ４１）、目的コード４０を生成する（ステップＳ４２）。そして、プロファイル情報３２の生成が要求されていれば（ステップＳ４３）、プロファイル情報生成コード出力部１７により、プロファイル情報生成コード４２を生成して出力する（ステップＳ４４）。その後、目的コード出力部１６は、翻訳済みコード（目的コード）を出力する（ステップＳ４５）。ここで、図８に示すソース情報イメージを内容とする目的コード４０が出力される。
【００５４】
これにより、例えばエラー処理ルーチンなどの基本ブロック単位の実行回数が少ない手続きに関するソースファイル３０を翻訳対象から除外して、プログラムの実行頻度が高い部分だけを実用的な処理時間でコンパイル処理することが可能となる。また、ユーザが任意に指定した文字列を含むようなソースファイル３０を選択的に入力することにより、プログラムの特定の用途に関する部分だけを実用的な処理時間でコンパイル処理することが可能となる。
【００５５】
本発明の処理と従来の技術との比較のために、図１１（Ａ）に、図３に示すソース情報に対する従来のインライン展開後のソース情報イメージを示し、図１１（Ｂ）に、従来の最適化後のソース情報イメージを示す。図８に示す本発明により翻訳処理されたソース情報イメージと図１１（Ｂ）に示す従来の翻訳処理されたソース情報イメージとの比較から明らかなように、本発明による最適化の結果は、従来のクロスファイル最適化に比べて最適化の程度が低くなる。
【００５６】
しかし、本発明は、膨大なソース情報で構成される実用プログラムについても、実用的な時間で翻訳処理を行うことが可能となる。また、本発明では任意のソース情報を組み合わせて翻訳対象とするため、特定の用途のソース情報だけを処理対象とすることができ、効率的な翻訳処理を行うことが可能となる。
【００５７】
例えば、ハードウェア性能評価用プログラムにおいて、評価ごとに指定されたある特定のデータだけを実行する場合には、その特定データに関するソース情報のみを翻訳対象とすればよいので、本発明を適用することにより実用的かつ効率的なコンパイル処理を行うことができる。また、モノクロ印刷およびカラー印刷の両方の機能を備えるプリンタ制御プログラムにおいても、本発明を適用することにより、頻繁に使用されるモノクロ印刷制御に関するソース情報だけを翻訳対象として、実用的かつ効率的なコンパイル処理を行うことができる。
【００５８】
以上、本発明をその実施の形態により説明したが、本発明はその主旨の範囲において種々の変形が可能であることは当然である。本形態では、ソース情報に出現する手続きと手続き内部で呼び出す手続き呼出しとの関係が１階層である場合を例に説明した。しかし、手続き（「親手続き」とする）内の手続き呼出し（「子手続き」とする）において、さらに子手続き内部で呼び出す手続き呼出し（「孫手続き」とする）がある場合には、子手続きと孫手続きとの関係を、親手続きと子手続きとの関係と同様に扱って処理を行うこともできる。
【００５９】
また、本形態では、インライン展開部１４は、図７に示すような処理フローにより処理するものとして説明したが、図７に示す各処理のうち、少なくともステップＳ２６に示す判定処理を実行するものであればよい。インライン展開部１４は、例えばステップＳ２４およびステップＳ２８の処理を実行せずにインライン展開を行うことも可能であり、また、本形態で説明した判定処理以外にも既知の判定処理を用いてインライン展開を行うことも可能である。
【００６０】
なお、本発明にかかる手段、要素または機能は、コンピュータにより読み取られ実行される処理プログラムとして実現することができる。また、本発明を実現する処理プログラムは、コンピュータが読み取り可能な、可搬媒体メモリ、半導体メモリ、ハードディスクなどの適当な記録媒体に格納することができ、これらの記録媒体に記録して提供され、または、通信インタフェースを介して種々の通信網を利用した送受信により提供されるものである。
【００６１】
本発明の形態および実施例の特徴を列記すると以下のとおりである。
【００６２】
（付記１）　複数のソース情報を一回の翻訳実行で処理するコンパイル処理をコンピュータに実行させるための処理プログラムであって、
前記複数のソース情報の全部または一部を入力するソース情報入力処理と、
入力されたソース情報を構文解析する構文解析処理と、
前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理と、
前記手続き属性解析処理結果である手続き属性情報を記憶する手続き属性情報記憶処理と、
前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理と、
前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理とを、
コンピュータに実行させる
ことを特徴とするコンパイル処理プログラム。
【００６３】
（付記２）　前記付記１に記載のコンパイル処理プログラムにおいて、
ユーザが指定した情報を入力して記憶するユーザ指定情報入力処理と、
前記ソース情報入力処理では、前記複数のソース情報からユーザが指定した情報にもとづいて選択したソース情報を入力する処理とを、
コンピュータに実行させる
ことを特徴とするコンパイル処理プログラム。
【００６４】
（付記３）　前記付記１に記載のコンパイル処理プログラムにおいて、
前記目的コードの実行履歴情報を入力する実行履歴情報入力処理と、
前記ソース情報入力処理では、前記複数のソース情報から前記ソース情報の実行履歴情報にもとづいて選択したソース情報を入力する処理とを、
コンピュータに実行させる
ことを特徴とするコンパイル処理プログラム。
【００６５】
（付記４）　複数のソース情報を一回の翻訳実行で処理するコンパイル処理方法において、
前記複数のソース情報の全部または一部を入力するソース情報入力処理過程と、
入力されたソース情報を構文解析する構文解析処理過程と、
前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理過程と、
前記手続き属性解析処理過程の解析結果である手続き属性情報を記憶する手続き属性情報記憶処理過程と、
前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理過程と、
前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理過程とを備える
ことを特徴とするコンパイル処理方法。
【００６６】
（付記５）　複数のソース情報を一回の翻訳実行で処理するコンパイル処理をコンピュータに実行させるための処理プログラムを記録した記録媒体であって、
前記複数のソース情報の全部または一部を入力するソース情報入力処理と、
入力されたソース情報を構文解析する構文解析処理と、
前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理と、
前記手続き属性解析処理結果である手続き属性情報を記憶する手続き属性情報記憶処理と、
前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理と、
前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理とを、
コンピュータに実行させる処理プログラムを記録した
ことを特徴とするコンパイル処理プログラム記録媒体。
【００６７】
（付記６）　複数のソース情報を一回の翻訳実行で処理するコンパイル処理装置であって、
前記複数のソース情報の全部または一部を入力するソース情報入力処理部と、
入力されたソース情報を構文解析する構文解析処理部と、
前記構文解析の結果から、当該入力されたソース情報に出現する手続きにおいて定義された他の手続きとの呼出し関係の属性を解析する手続き属性解析処理部と、
前記手続き属性解析処理結果である手続き属性情報を記憶する手続き属性情報記憶処理部と、
前記手続き属性情報に含まれない呼出し関係に最適化不要をマークして前記入力されたソース情報のインライン展開を行うインライン展開処理部と、
前記入力されたソース情報について前記最適化不要がマークされた呼出し関係を除いて最適化する最適化処理部とを備える
ことを特徴とするコンパイル処理装置。
【００６８】
【発明の効果】
以上説明したように、本発明によれば、手続きの実行回数などが記録されたプロファイル情報もしくはユーザが特定の用途などを文字列により指定したユーザ指定情報をもとに、実用プログラムを構成する複数のファイルからなるソース情報から任意のソース情報のみを翻訳対象とする。そして、ソース情報に出現する手続きが内部で呼び出す手続き呼出しの大域定義や大域参照などの呼出し関係についての属性情報を記憶しておき、インライン展開の際にソース情報に出現した手続きの内部で呼び出される呼出し手続きの定義や参照などの属性情報が不明であれば、その手続きにおいてその手続呼出しに関するインライン展開を行わず、さらに、最適化の際にも属性情報が不明な手続呼出しを含む手続きの最適化を行わないようにする。
【００６９】
従来のコンパイル処理では、インライン展開および最適化において呼出し関係の属性情報をすべて完全にしておく必要があるため、大規模なプログラムを構成する全てのソース情報を入力する必要があった。
【００７０】
しかし、本発明では、属性情報が不完全な呼出し関係についてインライン展開および最適化を抑止することが可能であるため、プログラムを構成する全てのソース情報を入力する必要がなく、コンパイル処理環境に応じた実用的な処理時間で処理が可能なコンパイル処理をコンピュータに実行させるためのコンパイル処理プログラム、コンパイル処理方法およびコンパイル処理プログラム記録媒体を提供することができる。
【００７１】
特に、手続きの実行回数などの手続き頻度情報やユーザ指定情報にもとづいて選択したソース情報のみを翻訳対象とすることができ、プログラムの実行頻度が高い部分またはプログラムの特定の用途に関する部分だけを選択的に翻訳実行することが可能となり、効率的な処理が可能なコンパイル処理をコンピュータに実行させるためのコンパイル処理プログラム、コンパイル処理方法およびコンパイル処理プログラム記録媒体を提供することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態におけるシステム構成例を示す図である。
【図２】コンパイル処理プログラム（コンパイラ）の内部構成例を示す図である。
【図３】ソースファイルのコード例を示す図である。
【図４】プロファイル情報の例を示す図である。
【図５】手続き属性表の例を示す図である。
【図６】ソース情報入力処理の処理フローを示す図である。
【図７】インライン展開処理の処理フローを示す図である。
【図８】インライン展開したソースファイルｐｒｏｇ．ｃのソース情報イメージを示す図である。
【図９】最適化処理の処理フローを示す図である。
【図１０】目的コード出力処理の処理フローを示す図である。
【図１１】従来のインライン展開後のソース情報イメージおよび従来の最適化後のソース情報イメージを示す図である。
【符号の説明】
１　ＣＰＵ
２　メモリ
３　外部記憶装置
１０　コンパイル処理プログラム（コンパイラ）
１１　ソース情報入力部
１１１　選択情報入力部
１１２　ソースファイル選択部
１２　構文解析部
１３　手続き属性解析部
１４　インライン展開部
１５　最適化部
１５１　最適化対象判断部
１６　目的コード出力部
１７　プロファイル情報生成コード出力部
１８　手続き属性記憶部
１９　手続き属性表
２０　一時データ
３０　ソースファイル
３２　プロファイル情報
３４　ユーザ指定情報
４０　目的コード
４２　プロファイル情報生成コード
【図１】
2004102597.tif 000003
【図２】
2004102597.tif 000004
【図３】
2004102597.tif 000005
【図４】
2004102597.tif 000006
【図５】
2004102597.tif 000007
【図６】
2004102597.tif 000008
【図７】
2004102597.tif 000009
【図８】
2004102597.tif 000010
【図９】
2004102597.tif 000011
【図１０】
2004102597.tif 000012
【図１１】
2004102597.tif 000013