(57)【要約】      （修正有）【課題】ソースファイルから実行可能ファイルを生成するまでに要する時間を短縮する。【解決手段】コンパイル方法は、リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してリンク時最適化とコンパイルとを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含む第２のオブジェクトファイルを生成する。リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する。【選択図】図１
2018120389.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第２のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する、
処理を実行させるコンパイルプログラム。
【請求項２】
前記コンピュータに、
前記リンク時最適化の実行指示を含まない第２のコンパイルコマンドを受信した場合、前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含み且つ前記ソースコードの情報を含まない第４のオブジェクトファイルを生成し、
前記第２のリンクコマンドを受信した場合、前記第４のオブジェクトファイルをリンカに出力する、
処理をさらに実行させる請求項１記載のコンパイルプログラム。
【請求項３】
前記コンピュータに、
前記第１のリンクコマンドを受信した場合、前記第４のオブジェクトファイルを前記リンカに出力する、
処理をさらに実行させる請求項２記載のコンパイルプログラム。
【請求項４】
前記コンピュータに、
前記リンク時最適化の実行指示を含まない第３のリンクコマンドをさらに受信した場合、前記第３のオブジェクトファイルをリンカに出力する、
処理をさらに実行させる請求項１記載のコンパイルプログラム。
【請求項５】
前記第１のオブジェクトファイルを生成する処理において、
前記オブジェクトコードの生成を省略したことを示す第１の情報を、前記第１のオブジェクトファイルの所定のセクションに書き込み、
前記第３のオブジェクトファイルを生成する処理において、
前記第１の情報が前記オブジェクトファイルの前記所定のセクションに書き込まれているか否かに基づき、前記第２のリンクコマンドで指定されたオブジェクトファイルが前記第１のオブジェクトファイルであるか判定する、
請求項１乃至４のいずれか１つ記載のコンパイルプログラム。
【請求項６】
コンピュータが、
リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第２のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する、
処理を実行するコンパイル方法。
【請求項７】
リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、前記リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第２のオブジェクトファイルを生成する第１生成部と、
前記リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する第２生成部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイル技術に関する。
【背景技術】
【０００２】
Ｃ、Ｃ＋＋及びＦｏｒｔｒａｎなどのプログラミング言語で記述されたソースプログラムを含むソースファイルに対しては、ソースファイル間の最適化（例えば、インライン展開や定数伝播など）が有効である場合がある。ソースファイル間の最適化は、リンク時に揃うオブジェクトファイルを基にして全ソースファイルを確認したうえで行われる。リンク時に実行されるソースファイル間の最適化は、リンク時最適化（ＬＴＯ：Link  Time  Optimization）と呼ばれる。
【０００３】
リンク時最適化を実行する場合、コンパイルコマンドに従って実行されるコンパイル（以下、１パス目のコンパイルと呼ぶ）により生成されたオブジェクトコードとソースプログラム情報とを含むオブジェクトファイルが生成される。そして、リンク時にオブジェクトファイル内のソースプログラム情報を利用して最適化が行われ、最適化の結果に対して再度コンパイル（以下、２パス目のコンパイルと呼ぶ）が実行される。実行結果であるオブジェクトコードがリンクされるとビルドが完了し、実行可能ファイルが生成される。
【０００４】
リンク時最適化を実行しない場合、１パス目のコンパイルの結果を含むオブジェクトファイルはリンクされる。しかし、リンク時最適化を実行する場合、２パス目のコンパイルの結果を含むオブジェクトファイルがリンクされるので、１パス目のコンパイルの結果を含むオブジェクトファイルはリンクされることが無い。
【０００５】
従って、リンク時最適化を実行する場合には１パス目のコンパイルは無駄な処理であるが、リンク時最適化を実行する場合およびリンク時最適化を実行しない場合の両方に対応できるようにするためこのような方法が採用されている。しかし、これがソースファイルから実行可能ファイルを生成するまでの時間を長くする一因となっている。従来技術においては、リンク時最適化のこのような問題に対する検討は行われていない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−２６７８６０号公報
【特許文献２】特開平１０−２７５０８８号公報
【特許文献３】特開２００４−１５２２８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、１つの側面では、ソースファイルから実行可能ファイルを生成するまでに要する時間を短縮するための技術を提供することである。
【課題を解決するための手段】
【０００８】
一態様に係るコンパイル方法は、リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してリンク時最適化とコンパイルとを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含む第２のオブジェクトファイルを生成し、リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する処理を含む。
【発明の効果】
【０００９】
１つの側面では、ソースファイルから実行可能ファイルを生成するまでに要する時間を短縮できるようになる。
【図面の簡単な説明】
【００１０】
【図１】図１は、情報処理装置の機能ブロック図である。
【図２】図２は、コンパイルコマンドおよびリンクコマンドの一例を示す図である。
【図３】図３は、ソースファイルからオブジェクトファイルを生成する処理の処理フローを示す図である。
【図４】図４は、第１コンパイル実行部が実行する処理の処理フローを示す図である。
【図５】図５は、ソースファイルから生成されるオブジェクトファイルの一例を示す図である。
【図６】図６は、ソースファイルから生成されるオブジェクトファイルの一例を示す図である。
【図７】図７は、リンク時の処理の処理フローを示す図である。
【図８】図８は、検証処理の処理フローを示す図である。
【図９】図９は、遅延コンパイル処理の処理フローを示す図である。
【図１０】図１０は、第２コンパイル実行部が実行する処理の処理フローを示す図である。
【図１１】図１１は、リンク時の処理について説明するための図である。
【図１２】図１２は、リンク時の処理について説明するための図である。
【図１３】図１３は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１１】
図１に、本実施の形態の情報処理装置１の機能ブロック図を示す。情報処理装置１は、コンパイラドライバ１１と、データ格納部１３と、コンパイラ１４と、ファイル間最適化部１５と、リンカ１６とを含む。コンパイラドライバ１１は、コンパイル制御部１１１と、リンク制御部１１２と、検証部１１３と、遅延コンパイル制御部１１４とを含む。コンパイラ１４は、第１コンパイル実行部１４１と、第２コンパイル実行部１４２とを含む。
【００１２】
コンパイラドライバ１１、コンパイラ１４、ファイル間最適化部１５及びリンカ１６は、例えば、図１３に示したメモリ２５０１にロードされたプログラムがＣＰＵ（Central Processing Unit）２５０３により実行されることで実現される。データ格納部１３は、例えば、メモリ２５０１及びＨＤＤ（Hard Disk Drive）２５０５に設けられる。
【００１３】
コンパイラドライバ１１は、コマンドラインから呼び出され、コンパイラ１４、ファイル間最適化部１５及びリンカ１６を制御する。コンパイル制御部１１１は、コンパイラ１４を制御する。リンク制御部１１２は、ファイル間最適化部１５およびリンカ１６を制御する。検証部１１３は、オブジェクトファイルにオブジェクトコードが含まれるか判定する。遅延コンパイル制御部１１４は、第２コンパイル実行部１４２が遅延コンパイルを実行することを制御する。本実施の形態におけるオブジェクトファイルとは、オブジェクトコード及びソースプログラムデータの少なくともいずれかを含む。オブジェクトコードは、ソースファイルに対するコンパイル（ここでは、狭義コンパイルのこと。以下、特に指定した場合以外は同様とする。）により生成される命令列を含むプログラムである。ソースプログラムデータは、ソースプログラムについてのデータ（例えば、ソースプログラムそのもの）を含む。ソースファイルとは、ソースプログラムを含むファイルである。
【００１４】
データ格納部１３は、本実施の形態の処理に使用されるデータ及び本実施の形態の処理の結果のデータを格納する。コンパイルは、オブジェクトコードの生成処理とオブジェクトファイルの生成処理とを含む。なお、広義コンパイルとは、ソースファイルからオブジェクトファイルを生成するまでの一連の処理のことであり、広義コンパイルは狭義コンパイルを含む。
【００１５】
コンパイラ１４は、コンパイルを実行する。第１コンパイル実行部１４１は、コンパイルコマンドに応じてコンパイルを実行する。第２コンパイル実行部１４２は、リンクコマンドに応じてコンパイルを実行する。
【００１６】
ファイル間最適化部１５は、ファイル間最適化を実行してファイル間最適化中間ファイルを生成する。ファイル間最適化とは、複数のソースプログラムにまたがる最適化である。ファイル間最適化中間ファイルは、ファイル間最適化中間プログラムを含む。ファイル間最適化中間プログラムは、コンパイラ１４が読み取ることができる形式のプログラムであり、ソースプログラム又は中間情報を含む。
【００１７】
リンカ１６は、リンク処理を実行し実行可能ファイルを生成する。実行可能ファイルは、プロセッサ（例えばＣＰＵ或いはＭＰＵ（Micro-Processing Unit））が解釈する機械語の命令及びその他のデータ等を含む。
【００１８】
図２に、ユーザにより入力されるコンパイルコマンドおよびリンクコマンドの一例を示す。図２の例では、コンパイルコマンドおよびリンクコマンドとして「ｆｃｃ」が用いられている。また、オプション「−ｏ」の後に出力ファイル名が指定される。よって、図２に示したコンパイルコマンドによれば、オブジェクトファイル「ａ．ｏ」がソースファイル「ａ．ｃ」から生成され、オブジェクトファイル「ｂ．ｏ」がソースファイル「ｂ．ｃ」から生成され、オブジェクトファイル「ｃ．ｏ」がソースファイル「ｃ．ｃ」から生成され、オブジェクトファイル「ｄ．ｏ」がソースファイル「ｄ．ｃ」から生成される。また、実行可能ファイル「ｘ．ｅｘｅ」がオブジェクトファイル「ａ．ｏ」及び「ｂ．ｏ」から生成され、実行可能ファイル「ｙ．ｅｘｅ」がオブジェクトファイル「ａ．ｏ」及び「ｃ．ｏ」から生成され、実行可能ファイル「ｚ．ｅｘｅ」がオブジェクトファイル「ａ．ｏ」及び「ｄ．ｏ」から生成される。
【００１９】
リンク時最適化を実行するか否かは、コンパイル時のコマンドのオプション及びリンク時のコマンドのオプション等などの指示により切り替えることができる。図２の例では、リンク時最適化を指示するオプションは「−Ｋｌｔｏ」であり、リンク時最適化が実行されるための条件は「−Ｋｌｔｏ」がコンパイルコマンド及びリンクコマンドの両方に含まれることであるとする。この場合、オブジェクトファイル「ａ．ｏ」を生成するためのコンパイルコマンドと、オブジェクトファイル「ｂ．ｏ」を生成するためのコンパイルコマンドと、オブジェクトファイル「ａ．ｏ」と「ｂ．ｏ」とをリンクして実行可能ファイル「ｘ．ｅｘｅ」を生成するためのリンクコマンドとに上記オプションが含まれるので、リンク時最適化が実行される。すなわち、ソースファイル「ａ．ｃ」に対応するファイル間最適化中間ファイルと、ソースファイル「ｂ．ｃ」に対応するファイル間最適化中間ファイルが生成され、コンパイルおよびリンクを経て実行可能ファイル「ｘ．ｅｘｅ」が生成される。
【００２０】
次に、図３乃至図１２を用いて、情報処理装置１が実行する処理について説明する。まず、図３乃至図６を用いて、ソースファイルからオブジェクトファイルを生成する処理について説明する。
【００２１】
まず、コンパイル制御部１１１は、ユーザの端末又は情報処理装置１の入力装置等から受信したコンパイルコマンドに、リンク時最適化の実行を指示するオプションが含まれるか判定する（図３：ステップＳ１）。
【００２２】
受信したコンパイルコマンドに、リンク時最適化の実行を指示するオプションが含まれる場合（ステップＳ１：Ｙｅｓルート）、コンパイル制御部１１１はコンパイラ１４を呼び出し、オブジェクトコードの生成を省略することをコンパイラ１４に指示する（ステップＳ３）。
【００２３】
一方、受信したコンパイルコマンドに、リンク時最適化の実行を指示するオプションが含まれない場合（ステップＳ１：Ｎｏルート）、コンパイル制御部１１１は、オブジェクトコードの生成を省略することをコンパイラ１４に指示することなく、コンパイラ１４を呼び出す（ステップＳ５）。そして処理は終了する。
【００２４】
ここで、図４を用いて、コンパイル制御部１１１からの呼出に応じてコンパイラ１４の第１コンパイル実行部１４１が実行する処理を説明する。
【００２５】
第１コンパイル実行部１４１は、オブジェクトコードの生成を省略することをコンパイル制御部１１１から指示されたか判定する（図４：ステップＳ１１）。
【００２６】
オブジェクトコードの生成を省略することをコンパイル制御部１１１から指示された場合（ステップＳ１１：Ｙｅｓルート）、第１コンパイル実行部１４１は、以下の処理を実行する。具体的には、第１コンパイル実行部１４１は、オブジェクトコードをソースファイルのコンパイルにより生成することなく、ソースプログラムデータを含むオブジェクトファイルを生成する（ステップＳ１３）。ソースプログラムデータは、例えば、予めデータ格納部１３に格納されているとする。
【００２７】
第１コンパイル実行部１４１は、ステップＳ１３において生成したオブジェクトファイルの所定セクション（例えば、「．ｃｏｍｍｅｎｔ」セクション）に、オブジェクトコードの生成を省略したことを示す情報を書き込む（ステップＳ１５）。そして、第１コンパイル実行部１４１は、オブジェクトファイルをデータ格納部１３に格納する。
【００２８】
一方、オブジェクトコードの生成を省略することをコンパイル制御部１１１から指示されていない場合（ステップＳ１１：Ｎｏルート）、第１コンパイル実行部１４１は、以下の処理を実行する。具体的には、第１コンパイル実行部１４１は、データ格納部１３に格納されているソースファイルに含まれるソースプログラムに対してコンパイルを実行し、オブジェクトコードを生成する（ステップＳ１７）。
【００２９】
第１コンパイル実行部１４１は、ステップＳ１７において生成したオブジェクトコードを含み且つソースプログラムデータを含まないオブジェクトファイルを生成し（ステップＳ１９）、生成したオブジェクトファイルをデータ格納部１３に格納する。そして処理は終了する。
【００３０】
以上のような処理を実行すると、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれない場合、例えば図５（ａ）に示すように、オブジェクトコードを含み且つソースプログラムデータを含まないオブジェクトファイルが生成される。一方、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれる場合、例えば図５（ｂ）に示すように、オブジェクトコードを含まず且つソースプログラムデータを含むオブジェクトファイルが生成される。
【００３１】
これに対して、従来の技術においては、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれない場合、例えば図６（ａ）に示すように、オブジェクトコードを含み且つソースプログラムデータを含まないオブジェクトファイルが生成される。そして、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれる場合、例えば図６（ｂ）に示すように、オブジェクトコードを含み且つソースプログラムデータを含むオブジェクトファイルが生成される。
【００３２】
背景技術の欄で述べたように、リンク時最適化を実行する場合には１パス目のオブジェクトコードはリンクされないため、コンパイルにより生成されたオブジェクトコードが無駄になる。図２の例であれば、コンパイルコマンド「ｆｃｃ ｂ．ｃ −ｏ ｂ．ｏ −ｃ −Ｋｌｔｏ」においてオプション「−Ｋｌｔｏ」に従って生成されるオブジェクトファイル「ｂ．ｏ」に含まれるオブジェクトコードは、それ以降のリンクコマンドによってはリンクされない。
【００３３】
しかし、本実施の形態の方法のように、コンパイルコマンドにリンク時最適化を指示するオプションが含まれる場合、すなわち、リンク時最適化が実行される可能性がある場合に、オブジェクトコードの生成を省略すれば、無駄なオブジェクトコードを生成することがなくなる。
【００３４】
但し、リンク時最適化を指示するオプションがコンパイルコマンドに含まれていたとしても、リンク時最適化を指示するオプションがリンクコマンドに含まれていない場合には、リンク時最適化は実行されない。リンク時最適化が実行されない場合、オブジェクトコードが生成されていないとリンクをすることができなくなる。そこで本実施の形態においては、以下のような方法でリンク時にオブジェクトコードを生成する。
【００３５】
次に、図７乃至図１２を用いて、リンク時の処理について説明する。
【００３６】
まず、リンク制御部１１２は、ユーザの端末又は情報処理装置１の入力装置等から受信したリンクコマンドに、リンク時最適化の実行を指示するオプションが含まれるか判定する（図７：ステップＳ２１）。
【００３７】
受信したリンクコマンドに、リンク時最適化の実行を指示するオプションが含まれる場合（ステップＳ２１：Ｙｅｓルート）、リンク制御部１１２は、ファイル間最適化部１５を呼び出す。そして、ファイル間最適化部１５は、リンクコマンドの引数のオブジェクトファイルのうちソースプログラムデータを含むオブジェクトファイルの各々から、ファイル間最適化によりファイル間最適化中間ファイルを生成する（ステップＳ２３）。ファイル間最適化部１５は、生成したファイル間最適化中間ファイルをコンパイラ１４に渡す。各オブジェクトファイルはコンパイルコマンドの実行によって生成されデータ格納部１３に格納されているとする。ファイル間最適化中間ファイルとは、ファイル間最適化中間プログラムを含むファイルである。ファイル間最適化中間プログラムは、ファイル間最適化が行われたプログラムであって、コンパイラ１４が読み取ることができる形式を有するソースプログラムまたは中間情報である。
【００３８】
コンパイラ１４の第１コンパイル実行部１４１は、ファイル間最適化部１５から受け取ったファイル間最適化中間ファイルの各々から、コンパイルによりファイル間最適化オブジェクトファイルを生成する（ステップＳ２５）。第１コンパイル実行部１４１は、生成したファイル間最適化オブジェクトファイルをデータ格納部１３に格納する。ファイル間最適化オブジェクトファイルとは、ファイル間最適化中間ファイル対するコンパイルにより生成されるオブジェクトファイルであり、オブジェクトコードを含む。
【００３９】
第１コンパイル実行部１４１は、リンクコマンドの引数の全オブジェクトファイル（ここでは、ステップＳ２５において生成されたファイル間最適化オブジェクトファイルと、リンクコマンドの引数のオブジェクトファイルのうちソースプログラムデータを含まないオブジェクトとを含む）をリンカ１６に渡す（ステップＳ２７）。
【００４０】
リンカ１６は、第１コンパイル実行部１４１から受け取ったオブジェクトファイルを用いてリンク処理を実行し（ステップＳ２９）、実行可能ファイルを生成する。リンカ１６は、生成した実行可能ファイルをデータ格納部１３に格納する。
【００４１】
一方、受信したリンクコマンドに、リンク時最適化の実行を指示するオプションが含まれない場合（ステップＳ２１：Ｎｏルート）、リンク制御部１１２は、以下の処理を実行する。具体的には、リンク制御部１１２は、リンクコマンドの引数のオブジェクトファイルのうち未処理のオブジェクトファイルを１つ特定する（ステップＳ３１）。
【００４２】
リンク制御部１１２は検証部１１３を呼び出し、検証部１１３は、検証処理を実行する（ステップＳ３３）。検証処理については、図８を用いて説明する。
【００４３】
まず、検証部１１３は、ステップＳ３１において特定されたオブジェクトファイルを、リンク制御部１１２から受け取る（図８：ステップＳ５１）。
【００４４】
検証部１１３は、ステップＳ５１において受け取ったオブジェクトファイルに、オブジェクトコードの生成を省略したことを示す情報が含まれるか判定する（ステップＳ５３）。
【００４５】
オブジェクトコードの生成を省略したことを示す情報が含まれない場合（ステップＳ５５：Ｎｏルート）、検証部１１３は、オブジェクトファイルにオブジェクトコードが含まれていることを示す情報を生成し（ステップＳ５７）、生成した情報をデータ格納部１３に格納する。
【００４６】
一方、オブジェクトコードの生成を省略したことを示す情報が含まれる場合（ステップＳ５５：Ｙｅｓルート）、検証部１１３は、オブジェクトファイルにオブジェクトコードが含まれていないことを示す情報を生成し（ステップＳ５９）、生成した情報をデータ格納部１３に格納する。そして処理は呼び出し元に戻る。
【００４７】
図７の説明に戻り、リンク制御部１１２は、検証部１１３がデータ格納部１３に格納した情報を基づき、ステップＳ３１において特定したオブジェクトファイルにオブジェクトコードが含まれるか判定する（ステップＳ３５）。ステップＳ３１において特定したオブジェクトファイルにオブジェクトコードが含まれる場合（ステップＳ３５：Ｙｅｓルート）、コンパイルを実行しなくてもよいので、処理はステップＳ３９に移行する。
【００４８】
一方、ステップＳ３１において特定したオブジェクトファイルにオブジェクトコードが含まれない場合（ステップＳ３５：Ｎｏルート）、リンク制御部１１２は遅延コンパイル制御部１１４を呼び出し、遅延コンパイル制御部１１４は、遅延コンパイル処理を実行する（ステップＳ３７）。遅延コンパイル処理については、図９及び図１０を用いて説明する。
【００４９】
まず、遅延コンパイル制御部１１４は、ステップＳ３１において特定されたオブジェクトファイルをリンク制御部１１２から受け取る。そして、遅延コンパイル制御部１１４は、受け取ったオブジェクトファイルからソースプログラムデータを取り出す（図９：ステップＳ６１）。オブジェクトファイルにオブジェクトコードが含まれていない場合には、オブジェクトファイルにソースプログラムデータが含まれている。
【００５０】
遅延コンパイル制御部１１４は、ステップＳ６１において取り出したソースプログラムデータをソースプログラムデータファイルに出力する（ステップＳ６３）。ソースプログラムデータファイルはコンパイラ１４が処理可能な形式のファイルであり、ソースプログラムデータを含む。コンパイラ１４がソースプログラムデータを直接処理することが可能である場合には、ステップＳ６３をスキップしてもよい。
【００５１】
遅延コンパイル制御部１１４は、ソースプログラムデータファイルをコンパイラ１４に渡し、オブジェクトコードをオブジェクトファイルに埋め込むことをコンパイラ１４に指示する（ステップＳ６５）。そして処理は呼び出し元に戻る。なお、この指示は、ステップＳ３１において特定されたオブジェクトファイルを埋め込み先に設定する指示を含む。これにより、ステップＳ３１において特定されたオブジェクトファイルにはソースプログラムデータが含まれるが、さらにオブジェクトコードが埋め込まれるようになる。
【００５２】
ここで、遅延コンパイル制御部１１４からソースプログラムデータファイルを受け取ったコンパイラ１４が実行する処理を説明する。
【００５３】
コンパイラ１４の第２コンパイル実行部１４２は、オブジェクトファイルにオブジェクトコードを埋め込む指示を遅延コンパイル制御部１１４から受け付けたか判定する（図１０：ステップＳ７１）。
【００５４】
オブジェクトファイルにオブジェクトコードを埋め込む指示を受け付けていない場合（ステップＳ７１：Ｎｏルート）、第２コンパイル実行部１４２は、コンパイルを実行する（ステップＳ７３）。具体的には、第２コンパイル実行部１４２は、遅延コンパイル制御部１１４から受け取ったソースプログラムデータファイルから、ソースプログラムデータとオブジェクトコードとを含むファイル内最適化オブジェクトファイルをコンパイルにより生成する。第２コンパイル実行部１４２は、生成したファイル内最適化オブジェクトファイルをデータ格納部１３に格納する。ファイル内最適化オブジェクトファイルとは、単一のファイルに閉じた最適化のみで生成されるオブジェクトファイルである。なお、ステップＳ７３の処理は従来のコンパイルであり、ステップＳ７３において生成されるオブジェクトファイルは、ステップＳ３１において特定されたオブジェクトファイルとは異なる。
【００５５】
一方、オブジェクトファイルにオブジェクトコードを埋め込む指示を受け付けた場合（ステップＳ７１：Ｙｅｓルート）、第２コンパイル実行部１４２は、遅延コンパイル制御部１１４から受け取ったソースプログラムデータファイルに対するコンパイルを実行する（ステップＳ７５）。さらに、第２コンパイル実行部１４２は、コンパイルにより生成したオブジェクトコードを、ステップＳ３１において特定されたオブジェクトファイルに埋め込む（ステップＳ７７）。
【００５６】
第２コンパイル実行部１４２は、ステップＳ７７においてオブジェクトコードが埋め込まれたオブジェクトファイルの所定セクションから、オブジェクトコードの生成を省略したことを示す情報を削除する（ステップＳ７９）。第２コンパイル実行部１４２は、ステップＳ７９の処理が実行されたオブジェクトファイルをデータ格納部１３に格納する。そして処理は終了する。
【００５７】
図７の説明に戻り、リンク制御部１１２は、リンクコマンドの引数のオブジェクトファイルに未処理のオブジェクトファイルが有るか判定する（ステップＳ３９）。未処理のオブジェクトファイルが有る場合（ステップＳ３９：Ｙｅｓルート）、処理はステップＳ３１に戻る。
【００５８】
一方、未処理のオブジェクトファイルが無い場合（ステップＳ３９：Ｎｏルート）、リンク制御部１１２は、引数の全オブジェクトファイルをデータ格納部１３から読み出し、リンカ１６に渡す（ステップＳ４１）。
【００５９】
リンカ１６は、リンク制御部１１２から受け取ったオブジェクトファイルを用いてリンク処理を実行し（ステップＳ４３）、実行可能ファイルを生成する。リンカ１６は、生成した実行可能ファイルをデータ格納部１３に格納する。そして処理は終了する。
【００６０】
以上のような処理を実行すれば、オブジェクトファイルにオブジェクトコードが含まれていないがリンク時最適化を実行しない場合においても、リンクされるオブジェクトコードを用意することができるようになる。すなわち、１パス目のコンパイルを省略した場合であっても、適切な実行可能ファイルを生成することができるようになる。
【００６１】
図１１及び図１２を用いて、リンク時の処理について説明を追加する。
【００６２】
図１１を用いて、リンク時最適化を指示するオプションがリンクコマンドに含まれていない場合の処理について説明する。リンクの対象であるオブジェクトファイルは、ソースプログラムデータを含むオブジェクトファイル１１０１、ソースプログラムデータ及びオブジェクトコードを含むファイル内最適化オブジェクトファイル１１０２、及びオブジェクトコードを含むファイル内最適化オブジェクトファイル１１０３である。
【００６３】
ファイル内最適化オブジェクトファイル１１０２は、図３乃至図６を用いて説明した処理によって直接生成されるわけではなく、ソースプログラムデータを含むオブジェクトファイルに対して遅延コンパイルが実行されてオブジェクトコードが埋め込まれることで生成される。すなわち、ファイル内最適化オブジェクトファイル１１０２は、少なくとも一度リンクに供されたオブジェクトファイルであり、本リンク処理に再利用されている。例えば、或るリンクコマンドに係るリンク時において「ａ．ｏ」にオブジェクトコードが埋め込まれてリンクに供された場合、オブジェクトファイル「ａ．ｏ」はデータ格納部１３に保存される。そして、別のリンクコマンドに係るオブジェクトファイルとして「ａ．ｏ」が指定された場合には、新たにオブジェクトファイル「ａ．ｏ」にオブジェクトコードを埋め込むのではなく、すでに生成されたオブジェクトファイル「ａ．ｏ」に含まれるオブジェクトコードが再利用される。これにより、実行可能ファイルを生成するまでに要する時間をさらに短縮することができるようになる。
【００６４】
ファイル内最適化オブジェクトファイル１１０２及びファイル内最適化オブジェクトファイル１１０３は、オブジェクトコードを含むため、リンク時にコンパイルは実行されずオブジェクトコードがそのままリンクに供される。
【００６５】
一方、オブジェクトファイル１１０１はオブジェクトコードを含まない。従って、第２コンパイル実行部１４２が、ソースプログラムデータファイルから、ソースプログラムデータ及びオブジェクトコードを含むファイル内最適化オブジェクトファイル１１０４を生成する。生成されたファイル内最適化オブジェクトファイルはリンクに供される。また、生成されたファイル内最適化オブジェクトファイルは、データ格納部１３に格納されて、別のリンク処理に再利用される。
【００６６】
図１２を用いて、リンク時最適化を指示するオプションがリンクコマンドに含まれている場合の処理について説明する。リンクの対象であるオブジェクトファイルは、ソースプログラムデータを含むオブジェクトファイル１２０１、ソースプログラムデータ及びオブジェクトコードを含むファイル内最適化オブジェクトファイル１２０２、及びオブジェクトコードを含むファイル内最適化オブジェクトファイル１２０３である。
【００６７】
ファイル内最適化オブジェクトファイル１２０２は、図３乃至図６を用いて説明した処理によって直接生成されるわけではなく、ソースプログラムデータを含むオブジェクトファイルに対して遅延コンパイルが実行されてオブジェクトコードが埋め込まれることで生成される。これについては、図１１を用いて説明したとおりである。
【００６８】
オブジェクトファイル１２０１及びファイル内最適化オブジェクトファイル１２０２に対しては、ファイル間最適化部１５によってファイル間最適化が実行され、ファイル間最適化中間ファイルが生成される。さらに、ファイル最適化中間ファイルに対しては、コンパイラ１４の第１コンパイル実行部１４１によってコンパイルが実行され、オブジェクトコードを含むファイル間最適化オブジェクトファイルが生成される。生成されたファイル間最適化オブジェクトファイルはリンクに供される。これに対して、ファイル内最適化オブジェクトファイル１２０３は、直接リンクに供される。
【００６９】
以上のように、本実施の形態の方法によれば、リンクされず無駄であるオブジェクトコードを作成する処理を省略できるので、結果として、実行可能ファイルの完成までに要する時間を短縮することができるようになる。また、一部のオブジェクトコードの生成を省略したとしても、リンクは適切に行われる。
【００７０】
また、コンパイルコマンドの実行時に生成されるオブジェクトファイルは、リンク時最適化の実行を指示するオプションが指定されているか否かにかかわらずリンクの入力として指定されることが可能である。そのため、コンパイルコマンド及びリンクコマンドの入力については、ユーザインタフェースは従来のユーザインタフェースと同じであればよい。
【００７１】
図２のコマンド群を例として、本実施の形態の方法をより具体的に説明する。上で述べたように、コンパイルコマンドおよびリンクコマンドは「ｆｃｃ」で表され、リンク時最適化を指示するオプションを「−Ｋｌｔｏ」とする。また、コンパイルコマンドおよびリンクコマンドの両方にオプション「−Ｋｌｔｏ」が含まれる場合にリンク時最適化が有効になるとする。
【００７２】
まず、コンパイルコマンド「ｆｃｃ ａ．ｃ −ｏ ａ．ｏ −ｃ −Ｋｌｔｏ」にはオプション「−Ｋｌｔｏ」が含まれるので、コンパイル制御部１１１は、オブジェクトコードの生成を省略することをコンパイラ１４に指示する。コンパイラ１４の第１コンパイル実行部１４１は、オブジェクトコードを生成せずにオブジェクトファイル「ａ．ｏ」を生成し、ソースファイル「ａ．ｃ」に関するソースプログラムデータをオブジェクトファイル「ａ．ｏ」に埋め込む。また、第１コンパイル実行部１４１は、オブジェクトファイル「ａ．ｏ」に、オブジェクトコードの生成を省略したことを示す情報を書き込む。
【００７３】
コンパイルコマンド「ｆｃｃ ｂ．ｃ −ｏ ｂ．ｏ −ｃ −Ｋｌｔｏ」にはオプション「−Ｋｌｔｏ」が含まれるので、同様に、オブジェクトコードは生成されずにオブジェクトファイル「ｂ．ｏ」を生成し、ソースファイル「ｂ．ｃ」に関するソースプログラムデータをオブジェクトファイル「ｂ．ｏ」に埋め込む。また、第１コンパイル実行部１４１は、オブジェクトファイル「ｂ．ｏ」に、オブジェクトコードの生成を省略したことを示す情報を書き込む。
【００７４】
コンパイルコマンド「ｆｃｃ ｃ．ｃ −ｏ ｃ．ｏ −ｃ」にはオプション「−Ｋｌｔｏ」が含まれていないので、コンパイル制御部１１１は、オブジェクトコードの生成を省略することをコンパイラ１４に指示することなく、コンパイラ１４を呼び出す。コンパイラ１４における第１コンパイル実行部１４１は、ソースファイル「ｃ．ｃ」に含まれるソースプログラムに対してコンパイルを実行してオブジェクトファイル「ｃ．ｏ」を生成する。
【００７５】
コンパイルコマンド「ｆｃｃ ｄ．ｃ −ｏ ｄ．ｏ −ｃ」にはオプション「−Ｋｌｔｏ」が含まれていないので、同様に、第１コンパイル実行部１４１は、ソースファイル「ｄ．ｃ」に含まれるソースプログラムに対してコンパイルを実行してオブジェクトファイル「ｄ．ｏ」を生成する。
【００７６】
リンクコマンド「ｆｃｃ ａ．ｏ ｂ．ｏ −ｏ ｘ．ｅｘｅ −Ｋｌｔｏ」にはオプション「−Ｋｌｔｏ」が含まれているので、リンク時最適化が実行され、実行可能ファイル「ｘ．ｅｘｅ」が生成される。
【００７７】
リンクコマンド「ｆｃｃ ａ．ｏ ｃ．ｏ −ｏ ｙ．ｅｘｅ」にはオプション「−Ｋｌｔｏ」が含まれていないので、オブジェクトファイル「ａ．ｏ」にオブジェクトコードが含まれているか否かが検証部１１３により判定される。ここでは、オブジェクトファイル「ａ．ｏ」にオブジェクトコードが含まれていないと判定されるので、第２コンパイル実行部１４２によりオブジェクトコードが生成され、オブジェクトファイル「ａ．ｏ」に埋め込まれる。オブジェクトファイル「ｃ．ｏ」についても、オブジェクトコードが含まれているか否かが検証部１１３により判定される。ここでは、オブジェクトファイル「ｃ．ｏ」にオブジェクトコードが含まれていると判定され、オブジェクトファイル「ｃ．ｏ」はそのままリンカ１６に出力される。そして、オブジェクトファイル「ａ．ｏ」及びオブジェクトファイル「ｃ．ｏ」についてリンクが実行され、実行可能ファイル「ｙ．ｅｘｅ」が生成される。
【００７８】
最後に、リンクコマンド「ｆｃｃ ａ．ｏ ｄ．ｏ −ｏ ｚ．ｅｘｅ」にはオプション「−Ｋｌｔｏ」が含まれていないので、オブジェクトファイル「ａ．ｏ」にオブジェクトコードが含まれているか否かが検証部１１３により判定される。ここでは、オブジェクトファイル「ａ．ｏ」にオブジェクトコードが含まれている（すなわち、既に生成されたオブジェクトファイル「ａ．ｏ」のオブジェクトコードを再利用できる）と判定され、オブジェクトファイル「ａ．ｏ」はそのままリンカ１６に出力される。オブジェクトファイル「ｄ．ｏ」についても、オブジェクトコードが含まれているか否かが検証部１１３により判定される。ここでは、オブジェクトファイル「ｄ．ｏ」にオブジェクトコードが含まれていると判定され、オブジェクトファイル「ｄ．ｏ」はそのままリンカ１６に出力される。そして、オブジェクトファイル「ａ．ｏ」及びオブジェクトファイル「ｄ．ｏ」についてリンクが実行され、実行可能ファイル「ｚ．ｅｘｅ」が生成される。
【００７９】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００８０】
また、上で説明したデータ構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００８１】
なお、上で述べた情報処理装置１は、コンピュータ装置であって、図１３に示すように、メモリ２５０１とＣＰＵ２５０３とＨＤＤ２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００８２】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００８３】
本実施の形態の第１の態様に係るコンパイル方法は、（Ａ）リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、（Ｂ）リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してリンク時最適化とコンパイルとを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含む第２のオブジェクトファイルを生成し、（Ｃ）リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する処理を含む。
【００８４】
オブジェクトコードを無駄に生成することがないので、最終的に実行可能ファイルを生成するまでに要する時間を短縮できるようになる。
【００８５】
また、本コンパイル方法は、（Ｄ）リンク時最適化の実行指示を含まない第２のコンパイルコマンドを受信した場合、ソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含み且つソースコードの情報を含まない第４のオブジェクトファイルを生成し、（Ｅ）第２のリンクコマンドを受信した場合、第４のオブジェクトファイルをリンカに出力する処理をさらに含んでもよい。
【００８６】
従来の技術では、リンク時最適化が実行されない場合にはリンクコマンド実行時にオブジェクトコードが生成されない。そこで、上で述べたような処理を実行すれば、適切なオブジェクトコードを含むオブジェクトファイルがリンカに出力されるようになる。
【００８７】
また、本コンパイル方法は、（Ｆ）第１のリンクコマンドを受信した場合、第４のオブジェクトファイルをリンカに出力する処理をさらに含んでもよい。
【００８８】
コンパイルコマンド及びリンクコマンドの両方にリンク時最適化の実行指示が含まれていなければリンク時最適化が実行されないことがある。そこで、上で述べたような処理を実行すれば、適切なオブジェクトファイルがリンカに出力されるようになる。
【００８９】
また、本コンパイル方法は、（Ｇ）リンク時最適化の実行指示を含まない第３のリンクコマンドをさらに受信した場合、第３のオブジェクトファイルをリンカに出力する処理をさらに含んでもよい。
【００９０】
ソースコードに対応するオブジェクトコードを生成する処理を省略できるようになる。すなわち、第３のオブジェクトファイルを再利用することができるようになる。
【００９１】
また、第１のオブジェクトファイルを生成する処理において、（ａ１）オブジェクトコードの生成を省略したことを示す第１の情報を、第１のオブジェクトファイルの所定のセクションに書き込み、第３のオブジェクトファイルを生成する処理において、（ｃ１）第１の情報がオブジェクトファイルの所定のセクションに書き込まれているか否かに基づき、第２のリンクコマンドで指定されたオブジェクトファイルが第１のオブジェクトファイルであるか判定してもよい。
【００９２】
本実施の形態の第２の態様に係る情報処理装置は、（Ｈ）リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してリンク時最適化とコンパイルとを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含む第２のオブジェクトファイルを生成する第１生成部（例えば、第１コンパイル実行部１４１）と、（Ｉ）リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、第１のオブジェクトファイルに含まれるソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する第２生成部（例えば、第２コンパイル実行部１４２）とを有する。
【００９３】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００９４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９５】
（付記１）
コンピュータに、
リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第２のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する、
処理を実行させるコンパイルプログラム。
【００９６】
（付記２）
前記コンピュータに、
前記リンク時最適化の実行指示を含まない第２のコンパイルコマンドを受信した場合、前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含み且つ前記ソースコードの情報を含まない第４のオブジェクトファイルを生成し、
前記第２のリンクコマンドを受信した場合、前記第４のオブジェクトファイルをリンカに出力する、
処理をさらに実行させる付記１記載のコンパイルプログラム。
【００９７】
（付記３）
前記コンピュータに、
前記第１のリンクコマンドを受信した場合、前記第４のオブジェクトファイルを前記リンカに出力する、
処理をさらに実行させる付記２記載のコンパイルプログラム。
【００９８】
（付記４）
前記コンピュータに、
前記リンク時最適化の実行指示を含まない第３のリンクコマンドをさらに受信した場合、前記第３のオブジェクトファイルをリンカに出力する、
処理をさらに実行させる付記１記載のコンパイルプログラム。
【００９９】
（付記５）
前記第１のオブジェクトファイルを生成する処理において、
前記オブジェクトコードの生成を省略したことを示す第１の情報を、前記第１のオブジェクトファイルの所定のセクションに書き込み、
前記第３のオブジェクトファイルを生成する処理において、
前記第１の情報が前記オブジェクトファイルの前記所定のセクションに書き込まれているか否かに基づき、前記第２のリンクコマンドで指定されたオブジェクトファイルが前記第１のオブジェクトファイルであるか判定する、
付記１乃至４のいずれか１つ記載のコンパイルプログラム。
【０１００】
（付記６）
コンピュータが、
リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第２のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する、
処理を実行するコンパイル方法。
【０１０１】
（付記７）
リンク時最適化の実行指示を含む第１のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第１のオブジェクトファイルを生成し、前記リンク時最適化の実行指示を含む第１のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第２のオブジェクトファイルを生成する第１生成部と、
前記リンク時最適化の実行指示を含まない第２のリンクコマンドを受信した場合、前記第１のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第３のオブジェクトファイルを生成する第２生成部と、
を有する情報処理装置。
【符号の説明】
【０１０２】
１  情報処理装置    １１  コンパイラドライバ
１１１  コンパイル制御部    １１２  リンク制御部
１１３  検証部    １１４  遅延コンパイル制御部
１３  データ格納部    １４  コンパイラ
１４１  第１コンパイル実行部    １４２  第２コンパイル実行部
１５  ファイル間最適化部    １６  リンカ
【図１】
2018120389.tif 000003
【図２】
2018120389.tif 000004
【図３】
2018120389.tif 000005
【図４】
2018120389.tif 000006
【図５】
2018120389.tif 000007
【図６】
2018120389.tif 000008
【図７】
2018120389.tif 000009
【図８】
2018120389.tif 000010
【図９】
2018120389.tif 000011
【図１０】
2018120389.tif 000012
【図１１】
2018120389.tif 000013
【図１２】
2018120389.tif 000014
【図１３】
2018120389.tif 000015