JP6790869B2 - コンパイル方法、コンパイルプログラム及び情報処理装置 - Google Patents

コンパイル方法、コンパイルプログラム及び情報処理装置 Download PDF

Info

Publication number
JP6790869B2
JP6790869B2 JP2017010918A JP2017010918A JP6790869B2 JP 6790869 B2 JP6790869 B2 JP 6790869B2 JP 2017010918 A JP2017010918 A JP 2017010918A JP 2017010918 A JP2017010918 A JP 2017010918A JP 6790869 B2 JP6790869 B2 JP 6790869B2
Authority
JP
Japan
Prior art keywords
file
link
generated
object file
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.)
Active
Application number
JP2017010918A
Other languages
English (en)
Other versions
JP2018120389A (ja
Inventor
邦憲 石井
邦憲 石井
直樹 末安
直樹 末安
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017010918A priority Critical patent/JP6790869B2/ja
Priority to US15/861,724 priority patent/US10489131B2/en
Publication of JP2018120389A publication Critical patent/JP2018120389A/ja
Application granted granted Critical
Publication of JP6790869B2 publication Critical patent/JP6790869B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

Description

本発明は、コンパイル技術に関する。
C、C++及びFortranなどのプログラミング言語で記述されたソースプログラムを含むソースファイルに対しては、ソースファイル間の最適化(例えば、インライン展開や定数伝播など)が有効である場合がある。ソースファイル間の最適化は、リンク時に揃うオブジェクトファイルを基にして全ソースファイルを確認したうえで行われる。リンク時に実行されるソースファイル間の最適化は、リンク時最適化(LTO:Link Time Optimization)と呼ばれる。
リンク時最適化を実行する場合、コンパイルコマンドに従って実行されるコンパイル(以下、1パス目のコンパイルと呼ぶ)により生成されたオブジェクトコードとソースプログラム情報とを含むオブジェクトファイルが生成される。そして、リンク時にオブジェクトファイル内のソースプログラム情報を利用して最適化が行われ、最適化の結果に対して再度コンパイル(以下、2パス目のコンパイルと呼ぶ)が実行される。実行結果であるオブジェクトコードがリンクされるとビルドが完了し、実行可能ファイルが生成される。
リンク時最適化を実行しない場合、1パス目のコンパイルの結果を含むオブジェクトファイルはリンクされる。しかし、リンク時最適化を実行する場合、2パス目のコンパイルの結果を含むオブジェクトファイルがリンクされるので、1パス目のコンパイルの結果を含むオブジェクトファイルはリンクされることが無い。
従って、リンク時最適化を実行する場合には1パス目のコンパイルは無駄な処理であるが、リンク時最適化を実行する場合およびリンク時最適化を実行しない場合の両方に対応できるようにするためこのような方法が採用されている。しかし、これがソースファイルから実行可能ファイルを生成するまでの時間を長くする一因となっている。従来技術においては、リンク時最適化のこのような問題に対する検討は行われていない。
特開2000−267860号公報 特開平10−275088号公報 特開2004−152287号公報
本発明の目的は、1つの側面では、ソースファイルから実行可能ファイルを生成するまでに要する時間を短縮するための技術を提供することである。
一態様に係るコンパイル方法は、リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、第1のオブジェクトファイルに含まれるソースコードの情報に対してリンク時最適化とコンパイルとを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含む第2のオブジェクトファイルを生成し、リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、第1のオブジェクトファイルに含まれるソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する処理を含む。
1つの側面では、ソースファイルから実行可能ファイルを生成するまでに要する時間を短縮できるようになる。
図1は、情報処理装置の機能ブロック図である。 図2は、コンパイルコマンドおよびリンクコマンドの一例を示す図である。 図3は、ソースファイルからオブジェクトファイルを生成する処理の処理フローを示す図である。 図4は、第1コンパイル実行部が実行する処理の処理フローを示す図である。 図5は、ソースファイルから生成されるオブジェクトファイルの一例を示す図である。 図6は、ソースファイルから生成されるオブジェクトファイルの一例を示す図である。 図7は、リンク時の処理の処理フローを示す図である。 図8は、検証処理の処理フローを示す図である。 図9は、遅延コンパイル処理の処理フローを示す図である。 図10は、第2コンパイル実行部が実行する処理の処理フローを示す図である。 図11は、リンク時の処理について説明するための図である。 図12は、リンク時の処理について説明するための図である。 図13は、コンピュータの機能ブロック図である。
図1に、本実施の形態の情報処理装置1の機能ブロック図を示す。情報処理装置1は、コンパイラドライバ11と、データ格納部13と、コンパイラ14と、ファイル間最適化部15と、リンカ16とを含む。コンパイラドライバ11は、コンパイル制御部111と、リンク制御部112と、検証部113と、遅延コンパイル制御部114とを含む。コンパイラ14は、第1コンパイル実行部141と、第2コンパイル実行部142とを含む。
コンパイラドライバ11、コンパイラ14、ファイル間最適化部15及びリンカ16は、例えば、図13に示したメモリ2501にロードされたプログラムがCPU(Central Processing Unit)2503により実行されることで実現される。データ格納部13は、例えば、メモリ2501及びHDD(Hard Disk Drive)2505に設けられる。
コンパイラドライバ11は、コマンドラインから呼び出され、コンパイラ14、ファイル間最適化部15及びリンカ16を制御する。コンパイル制御部111は、コンパイラ14を制御する。リンク制御部112は、ファイル間最適化部15およびリンカ16を制御する。検証部113は、オブジェクトファイルにオブジェクトコードが含まれるか判定する。遅延コンパイル制御部114は、第2コンパイル実行部142が遅延コンパイルを実行することを制御する。本実施の形態におけるオブジェクトファイルとは、オブジェクトコード及びソースプログラムデータの少なくともいずれかを含む。オブジェクトコードは、ソースファイルに対するコンパイル(ここでは、狭義コンパイルのこと。以下、特に指定した場合以外は同様とする。)により生成される命令列を含むプログラムである。ソースプログラムデータは、ソースプログラムについてのデータ(例えば、ソースプログラムそのもの)を含む。ソースファイルとは、ソースプログラムを含むファイルである。
データ格納部13は、本実施の形態の処理に使用されるデータ及び本実施の形態の処理の結果のデータを格納する。コンパイルは、オブジェクトコードの生成処理とオブジェクトファイルの生成処理とを含む。なお、広義コンパイルとは、ソースファイルからオブジェクトファイルを生成するまでの一連の処理のことであり、広義コンパイルは狭義コンパイルを含む。
コンパイラ14は、コンパイルを実行する。第1コンパイル実行部141は、コンパイルコマンドに応じてコンパイルを実行する。第2コンパイル実行部142は、リンクコマンドに応じてコンパイルを実行する。
ファイル間最適化部15は、ファイル間最適化を実行してファイル間最適化中間ファイルを生成する。ファイル間最適化とは、複数のソースプログラムにまたがる最適化である。ファイル間最適化中間ファイルは、ファイル間最適化中間プログラムを含む。ファイル間最適化中間プログラムは、コンパイラ14が読み取ることができる形式のプログラムであり、ソースプログラム又は中間情報を含む。
リンカ16は、リンク処理を実行し実行可能ファイルを生成する。実行可能ファイルは、プロセッサ(例えばCPU或いはMPU(Micro-Processing Unit))が解釈する機械語の命令及びその他のデータ等を含む。
図2に、ユーザにより入力されるコンパイルコマンドおよびリンクコマンドの一例を示す。図2の例では、コンパイルコマンドおよびリンクコマンドとして「fcc」が用いられている。また、オプション「−o」の後に出力ファイル名が指定される。よって、図2に示したコンパイルコマンドによれば、オブジェクトファイル「a.o」がソースファイル「a.c」から生成され、オブジェクトファイル「b.o」がソースファイル「b.c」から生成され、オブジェクトファイル「c.o」がソースファイル「c.c」から生成され、オブジェクトファイル「d.o」がソースファイル「d.c」から生成される。また、実行可能ファイル「x.exe」がオブジェクトファイル「a.o」及び「b.o」から生成され、実行可能ファイル「y.exe」がオブジェクトファイル「a.o」及び「c.o」から生成され、実行可能ファイル「z.exe」がオブジェクトファイル「a.o」及び「d.o」から生成される。
リンク時最適化を実行するか否かは、コンパイル時のコマンドのオプション及びリンク時のコマンドのオプション等などの指示により切り替えることができる。図2の例では、リンク時最適化を指示するオプションは「−Klto」であり、リンク時最適化が実行されるための条件は「−Klto」がコンパイルコマンド及びリンクコマンドの両方に含まれることであるとする。この場合、オブジェクトファイル「a.o」を生成するためのコンパイルコマンドと、オブジェクトファイル「b.o」を生成するためのコンパイルコマンドと、オブジェクトファイル「a.o」と「b.o」とをリンクして実行可能ファイル「x.exe」を生成するためのリンクコマンドとに上記オプションが含まれるので、リンク時最適化が実行される。すなわち、ソースファイル「a.c」に対応するファイル間最適化中間ファイルと、ソースファイル「b.c」に対応するファイル間最適化中間ファイルが生成され、コンパイルおよびリンクを経て実行可能ファイル「x.exe」が生成される。
次に、図3乃至図12を用いて、情報処理装置1が実行する処理について説明する。まず、図3乃至図6を用いて、ソースファイルからオブジェクトファイルを生成する処理について説明する。
まず、コンパイル制御部111は、ユーザの端末又は情報処理装置1の入力装置等から受信したコンパイルコマンドに、リンク時最適化の実行を指示するオプションが含まれるか判定する(図3:ステップS1)。
受信したコンパイルコマンドに、リンク時最適化の実行を指示するオプションが含まれる場合(ステップS1:Yesルート)、コンパイル制御部111はコンパイラ14を呼び出し、オブジェクトコードの生成を省略することをコンパイラ14に指示する(ステップS3)。
一方、受信したコンパイルコマンドに、リンク時最適化の実行を指示するオプションが含まれない場合(ステップS1:Noルート)、コンパイル制御部111は、オブジェクトコードの生成を省略することをコンパイラ14に指示することなく、コンパイラ14を呼び出す(ステップS5)。そして処理は終了する。
ここで、図4を用いて、コンパイル制御部111からの呼出に応じてコンパイラ14の第1コンパイル実行部141が実行する処理を説明する。
第1コンパイル実行部141は、オブジェクトコードの生成を省略することをコンパイル制御部111から指示されたか判定する(図4:ステップS11)。
オブジェクトコードの生成を省略することをコンパイル制御部111から指示された場合(ステップS11:Yesルート)、第1コンパイル実行部141は、以下の処理を実行する。具体的には、第1コンパイル実行部141は、オブジェクトコードをソースファイルのコンパイルにより生成することなく、ソースプログラムデータを含むオブジェクトファイルを生成する(ステップS13)。ソースプログラムデータは、例えば、予めデータ格納部13に格納されているとする。
第1コンパイル実行部141は、ステップS13において生成したオブジェクトファイルの所定セクション(例えば、「.comment」セクション)に、オブジェクトコードの生成を省略したことを示す情報を書き込む(ステップS15)。そして、第1コンパイル実行部141は、オブジェクトファイルをデータ格納部13に格納する。
一方、オブジェクトコードの生成を省略することをコンパイル制御部111から指示されていない場合(ステップS11:Noルート)、第1コンパイル実行部141は、以下の処理を実行する。具体的には、第1コンパイル実行部141は、データ格納部13に格納されているソースファイルに含まれるソースプログラムに対してコンパイルを実行し、オブジェクトコードを生成する(ステップS17)。
第1コンパイル実行部141は、ステップS17において生成したオブジェクトコードを含み且つソースプログラムデータを含まないオブジェクトファイルを生成し(ステップS19)、生成したオブジェクトファイルをデータ格納部13に格納する。そして処理は終了する。
以上のような処理を実行すると、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれない場合、例えば図5(a)に示すように、オブジェクトコードを含み且つソースプログラムデータを含まないオブジェクトファイルが生成される。一方、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれる場合、例えば図5(b)に示すように、オブジェクトコードを含まず且つソースプログラムデータを含むオブジェクトファイルが生成される。
これに対して、従来の技術においては、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれない場合、例えば図6(a)に示すように、オブジェクトコードを含み且つソースプログラムデータを含まないオブジェクトファイルが生成される。そして、リンク時最適化の実行を指示するオプションがコンパイルコマンドに含まれる場合、例えば図6(b)に示すように、オブジェクトコードを含み且つソースプログラムデータを含むオブジェクトファイルが生成される。
背景技術の欄で述べたように、リンク時最適化を実行する場合には1パス目のオブジェクトコードはリンクされないため、コンパイルにより生成されたオブジェクトコードが無駄になる。図2の例であれば、コンパイルコマンド「fcc b.c −o b.o −c −Klto」においてオプション「−Klto」に従って生成されるオブジェクトファイル「b.o」に含まれるオブジェクトコードは、それ以降のリンクコマンドによってはリンクされない。
しかし、本実施の形態の方法のように、コンパイルコマンドにリンク時最適化を指示するオプションが含まれる場合、すなわち、リンク時最適化が実行される可能性がある場合に、オブジェクトコードの生成を省略すれば、無駄なオブジェクトコードを生成することがなくなる。
但し、リンク時最適化を指示するオプションがコンパイルコマンドに含まれていたとしても、リンク時最適化を指示するオプションがリンクコマンドに含まれていない場合には、リンク時最適化は実行されない。リンク時最適化が実行されない場合、オブジェクトコードが生成されていないとリンクをすることができなくなる。そこで本実施の形態においては、以下のような方法でリンク時にオブジェクトコードを生成する。
次に、図7乃至図12を用いて、リンク時の処理について説明する。
まず、リンク制御部112は、ユーザの端末又は情報処理装置1の入力装置等から受信したリンクコマンドに、リンク時最適化の実行を指示するオプションが含まれるか判定する(図7:ステップS21)。
受信したリンクコマンドに、リンク時最適化の実行を指示するオプションが含まれる場合(ステップS21:Yesルート)、リンク制御部112は、ファイル間最適化部15を呼び出す。そして、ファイル間最適化部15は、リンクコマンドの引数のオブジェクトファイルのうちソースプログラムデータを含むオブジェクトファイルの各々から、ファイル間最適化によりファイル間最適化中間ファイルを生成する(ステップS23)。ファイル間最適化部15は、生成したファイル間最適化中間ファイルをコンパイラ14に渡す。各オブジェクトファイルはコンパイルコマンドの実行によって生成されデータ格納部13に格納されているとする。ファイル間最適化中間ファイルとは、ファイル間最適化中間プログラムを含むファイルである。ファイル間最適化中間プログラムは、ファイル間最適化が行われたプログラムであって、コンパイラ14が読み取ることができる形式を有するソースプログラムまたは中間情報である。
コンパイラ14の第1コンパイル実行部141は、ファイル間最適化部15から受け取ったファイル間最適化中間ファイルの各々から、コンパイルによりファイル間最適化オブジェクトファイルを生成する(ステップS25)。第1コンパイル実行部141は、生成したファイル間最適化オブジェクトファイルをデータ格納部13に格納する。ファイル間最適化オブジェクトファイルとは、ファイル間最適化中間ファイル対するコンパイルにより生成されるオブジェクトファイルであり、オブジェクトコードを含む。
第1コンパイル実行部141は、リンクコマンドの引数の全オブジェクトファイル(ここでは、ステップS25において生成されたファイル間最適化オブジェクトファイルと、リンクコマンドの引数のオブジェクトファイルのうちソースプログラムデータを含まないオブジェクトとを含む)をリンカ16に渡す(ステップS27)。
リンカ16は、第1コンパイル実行部141から受け取ったオブジェクトファイルを用いてリンク処理を実行し(ステップS29)、実行可能ファイルを生成する。リンカ16は、生成した実行可能ファイルをデータ格納部13に格納する。
一方、受信したリンクコマンドに、リンク時最適化の実行を指示するオプションが含まれない場合(ステップS21:Noルート)、リンク制御部112は、以下の処理を実行する。具体的には、リンク制御部112は、リンクコマンドの引数のオブジェクトファイルのうち未処理のオブジェクトファイルを1つ特定する(ステップS31)。
リンク制御部112は検証部113を呼び出し、検証部113は、検証処理を実行する(ステップS33)。検証処理については、図8を用いて説明する。
まず、検証部113は、ステップS31において特定されたオブジェクトファイルを、リンク制御部112から受け取る(図8:ステップS51)。
検証部113は、ステップS51において受け取ったオブジェクトファイルに、オブジェクトコードの生成を省略したことを示す情報が含まれるか判定する(ステップS53)。
オブジェクトコードの生成を省略したことを示す情報が含まれない場合(ステップS55:Noルート)、検証部113は、オブジェクトファイルにオブジェクトコードが含まれていることを示す情報を生成し(ステップS57)、生成した情報をデータ格納部13に格納する。
一方、オブジェクトコードの生成を省略したことを示す情報が含まれる場合(ステップS55:Yesルート)、検証部113は、オブジェクトファイルにオブジェクトコードが含まれていないことを示す情報を生成し(ステップS59)、生成した情報をデータ格納部13に格納する。そして処理は呼び出し元に戻る。
図7の説明に戻り、リンク制御部112は、検証部113がデータ格納部13に格納した情報を基づき、ステップS31において特定したオブジェクトファイルにオブジェクトコードが含まれるか判定する(ステップS35)。ステップS31において特定したオブジェクトファイルにオブジェクトコードが含まれる場合(ステップS35:Yesルート)、コンパイルを実行しなくてもよいので、処理はステップS39に移行する。
一方、ステップS31において特定したオブジェクトファイルにオブジェクトコードが含まれない場合(ステップS35:Noルート)、リンク制御部112は遅延コンパイル制御部114を呼び出し、遅延コンパイル制御部114は、遅延コンパイル処理を実行する(ステップS37)。遅延コンパイル処理については、図9及び図10を用いて説明する。
まず、遅延コンパイル制御部114は、ステップS31において特定されたオブジェクトファイルをリンク制御部112から受け取る。そして、遅延コンパイル制御部114は、受け取ったオブジェクトファイルからソースプログラムデータを取り出す(図9:ステップS61)。オブジェクトファイルにオブジェクトコードが含まれていない場合には、オブジェクトファイルにソースプログラムデータが含まれている。
遅延コンパイル制御部114は、ステップS61において取り出したソースプログラムデータをソースプログラムデータファイルに出力する(ステップS63)。ソースプログラムデータファイルはコンパイラ14が処理可能な形式のファイルであり、ソースプログラムデータを含む。コンパイラ14がソースプログラムデータを直接処理することが可能である場合には、ステップS63をスキップしてもよい。
遅延コンパイル制御部114は、ソースプログラムデータファイルをコンパイラ14に渡し、オブジェクトコードをオブジェクトファイルに埋め込むことをコンパイラ14に指示する(ステップS65)。そして処理は呼び出し元に戻る。なお、この指示は、ステップS31において特定されたオブジェクトファイルを埋め込み先に設定する指示を含む。これにより、ステップS31において特定されたオブジェクトファイルにはソースプログラムデータが含まれるが、さらにオブジェクトコードが埋め込まれるようになる。
ここで、遅延コンパイル制御部114からソースプログラムデータファイルを受け取ったコンパイラ14が実行する処理を説明する。
コンパイラ14の第2コンパイル実行部142は、オブジェクトファイルにオブジェクトコードを埋め込む指示を遅延コンパイル制御部114から受け付けたか判定する(図10:ステップS71)。
オブジェクトファイルにオブジェクトコードを埋め込む指示を受け付けていない場合(ステップS71:Noルート)、第2コンパイル実行部142は、コンパイルを実行する(ステップS73)。具体的には、第2コンパイル実行部142は、遅延コンパイル制御部114から受け取ったソースプログラムデータファイルから、ソースプログラムデータとオブジェクトコードとを含むファイル内最適化オブジェクトファイルをコンパイルにより生成する。第2コンパイル実行部142は、生成したファイル内最適化オブジェクトファイルをデータ格納部13に格納する。ファイル内最適化オブジェクトファイルとは、単一のファイルに閉じた最適化のみで生成されるオブジェクトファイルである。なお、ステップS73の処理は従来のコンパイルであり、ステップS73において生成されるオブジェクトファイルは、ステップS31において特定されたオブジェクトファイルとは異なる。
一方、オブジェクトファイルにオブジェクトコードを埋め込む指示を受け付けた場合(ステップS71:Yesルート)、第2コンパイル実行部142は、遅延コンパイル制御部114から受け取ったソースプログラムデータファイルに対するコンパイルを実行する(ステップS75)。さらに、第2コンパイル実行部142は、コンパイルにより生成したオブジェクトコードを、ステップS31において特定されたオブジェクトファイルに埋め込む(ステップS77)。
第2コンパイル実行部142は、ステップS77においてオブジェクトコードが埋め込まれたオブジェクトファイルの所定セクションから、オブジェクトコードの生成を省略したことを示す情報を削除する(ステップS79)。第2コンパイル実行部142は、ステップS79の処理が実行されたオブジェクトファイルをデータ格納部13に格納する。そして処理は終了する。
図7の説明に戻り、リンク制御部112は、リンクコマンドの引数のオブジェクトファイルに未処理のオブジェクトファイルが有るか判定する(ステップS39)。未処理のオブジェクトファイルが有る場合(ステップS39:Yesルート)、処理はステップS31に戻る。
一方、未処理のオブジェクトファイルが無い場合(ステップS39:Noルート)、リンク制御部112は、引数の全オブジェクトファイルをデータ格納部13から読み出し、リンカ16に渡す(ステップS41)。
リンカ16は、リンク制御部112から受け取ったオブジェクトファイルを用いてリンク処理を実行し(ステップS43)、実行可能ファイルを生成する。リンカ16は、生成した実行可能ファイルをデータ格納部13に格納する。そして処理は終了する。
以上のような処理を実行すれば、オブジェクトファイルにオブジェクトコードが含まれていないがリンク時最適化を実行しない場合においても、リンクされるオブジェクトコードを用意することができるようになる。すなわち、1パス目のコンパイルを省略した場合であっても、適切な実行可能ファイルを生成することができるようになる。
図11及び図12を用いて、リンク時の処理について説明を追加する。
図11を用いて、リンク時最適化を指示するオプションがリンクコマンドに含まれていない場合の処理について説明する。リンクの対象であるオブジェクトファイルは、ソースプログラムデータを含むオブジェクトファイル1101、ソースプログラムデータ及びオブジェクトコードを含むファイル内最適化オブジェクトファイル1102、及びオブジェクトコードを含むファイル内最適化オブジェクトファイル1103である。
ファイル内最適化オブジェクトファイル1102は、図3乃至図6を用いて説明した処理によって直接生成されるわけではなく、ソースプログラムデータを含むオブジェクトファイルに対して遅延コンパイルが実行されてオブジェクトコードが埋め込まれることで生成される。すなわち、ファイル内最適化オブジェクトファイル1102は、少なくとも一度リンクに供されたオブジェクトファイルであり、本リンク処理に再利用されている。例えば、或るリンクコマンドに係るリンク時において「a.o」にオブジェクトコードが埋め込まれてリンクに供された場合、オブジェクトファイル「a.o」はデータ格納部13に保存される。そして、別のリンクコマンドに係るオブジェクトファイルとして「a.o」が指定された場合には、新たにオブジェクトファイル「a.o」にオブジェクトコードを埋め込むのではなく、すでに生成されたオブジェクトファイル「a.o」に含まれるオブジェクトコードが再利用される。これにより、実行可能ファイルを生成するまでに要する時間をさらに短縮することができるようになる。
ファイル内最適化オブジェクトファイル1102及びファイル内最適化オブジェクトファイル1103は、オブジェクトコードを含むため、リンク時にコンパイルは実行されずオブジェクトコードがそのままリンクに供される。
一方、オブジェクトファイル1101はオブジェクトコードを含まない。従って、第2コンパイル実行部142が、ソースプログラムデータファイルから、ソースプログラムデータ及びオブジェクトコードを含むファイル内最適化オブジェクトファイル1104を生成する。生成されたファイル内最適化オブジェクトファイルはリンクに供される。また、生成されたファイル内最適化オブジェクトファイルは、データ格納部13に格納されて、別のリンク処理に再利用される。
図12を用いて、リンク時最適化を指示するオプションがリンクコマンドに含まれている場合の処理について説明する。リンクの対象であるオブジェクトファイルは、ソースプログラムデータを含むオブジェクトファイル1201、ソースプログラムデータ及びオブジェクトコードを含むファイル内最適化オブジェクトファイル1202、及びオブジェクトコードを含むファイル内最適化オブジェクトファイル1203である。
ファイル内最適化オブジェクトファイル1202は、図3乃至図6を用いて説明した処理によって直接生成されるわけではなく、ソースプログラムデータを含むオブジェクトファイルに対して遅延コンパイルが実行されてオブジェクトコードが埋め込まれることで生成される。これについては、図11を用いて説明したとおりである。
オブジェクトファイル1201及びファイル内最適化オブジェクトファイル1202に対しては、ファイル間最適化部15によってファイル間最適化が実行され、ファイル間最適化中間ファイルが生成される。さらに、ファイル最適化中間ファイルに対しては、コンパイラ14の第1コンパイル実行部141によってコンパイルが実行され、オブジェクトコードを含むファイル間最適化オブジェクトファイルが生成される。生成されたファイル間最適化オブジェクトファイルはリンクに供される。これに対して、ファイル内最適化オブジェクトファイル1203は、直接リンクに供される。
以上のように、本実施の形態の方法によれば、リンクされず無駄であるオブジェクトコードを作成する処理を省略できるので、結果として、実行可能ファイルの完成までに要する時間を短縮することができるようになる。また、一部のオブジェクトコードの生成を省略したとしても、リンクは適切に行われる。
また、コンパイルコマンドの実行時に生成されるオブジェクトファイルは、リンク時最適化の実行を指示するオプションが指定されているか否かにかかわらずリンクの入力として指定されることが可能である。そのため、コンパイルコマンド及びリンクコマンドの入力については、ユーザインタフェースは従来のユーザインタフェースと同じであればよい。
図2のコマンド群を例として、本実施の形態の方法をより具体的に説明する。上で述べたように、コンパイルコマンドおよびリンクコマンドは「fcc」で表され、リンク時最適化を指示するオプションを「−Klto」とする。また、コンパイルコマンドおよびリンクコマンドの両方にオプション「−Klto」が含まれる場合にリンク時最適化が有効になるとする。
まず、コンパイルコマンド「fcc a.c −o a.o −c −Klto」にはオプション「−Klto」が含まれるので、コンパイル制御部111は、オブジェクトコードの生成を省略することをコンパイラ14に指示する。コンパイラ14の第1コンパイル実行部141は、オブジェクトコードを生成せずにオブジェクトファイル「a.o」を生成し、ソースファイル「a.c」に関するソースプログラムデータをオブジェクトファイル「a.o」に埋め込む。また、第1コンパイル実行部141は、オブジェクトファイル「a.o」に、オブジェクトコードの生成を省略したことを示す情報を書き込む。
コンパイルコマンド「fcc b.c −o b.o −c −Klto」にはオプション「−Klto」が含まれるので、同様に、オブジェクトコードは生成されずにオブジェクトファイル「b.o」を生成し、ソースファイル「b.c」に関するソースプログラムデータをオブジェクトファイル「b.o」に埋め込む。また、第1コンパイル実行部141は、オブジェクトファイル「b.o」に、オブジェクトコードの生成を省略したことを示す情報を書き込む。
コンパイルコマンド「fcc c.c −o c.o −c」にはオプション「−Klto」が含まれていないので、コンパイル制御部111は、オブジェクトコードの生成を省略することをコンパイラ14に指示することなく、コンパイラ14を呼び出す。コンパイラ14における第1コンパイル実行部141は、ソースファイル「c.c」に含まれるソースプログラムに対してコンパイルを実行してオブジェクトファイル「c.o」を生成する。
コンパイルコマンド「fcc d.c −o d.o −c」にはオプション「−Klto」が含まれていないので、同様に、第1コンパイル実行部141は、ソースファイル「d.c」に含まれるソースプログラムに対してコンパイルを実行してオブジェクトファイル「d.o」を生成する。
リンクコマンド「fcc a.o b.o −o x.exe −Klto」にはオプション「−Klto」が含まれているので、リンク時最適化が実行され、実行可能ファイル「x.exe」が生成される。
リンクコマンド「fcc a.o c.o −o y.exe」にはオプション「−Klto」が含まれていないので、オブジェクトファイル「a.o」にオブジェクトコードが含まれているか否かが検証部113により判定される。ここでは、オブジェクトファイル「a.o」にオブジェクトコードが含まれていないと判定されるので、第2コンパイル実行部142によりオブジェクトコードが生成され、オブジェクトファイル「a.o」に埋め込まれる。オブジェクトファイル「c.o」についても、オブジェクトコードが含まれているか否かが検証部113により判定される。ここでは、オブジェクトファイル「c.o」にオブジェクトコードが含まれていると判定され、オブジェクトファイル「c.o」はそのままリンカ16に出力される。そして、オブジェクトファイル「a.o」及びオブジェクトファイル「c.o」についてリンクが実行され、実行可能ファイル「y.exe」が生成される。
最後に、リンクコマンド「fcc a.o d.o −o z.exe」にはオプション「−Klto」が含まれていないので、オブジェクトファイル「a.o」にオブジェクトコードが含まれているか否かが検証部113により判定される。ここでは、オブジェクトファイル「a.o」にオブジェクトコードが含まれている(すなわち、既に生成されたオブジェクトファイル「a.o」のオブジェクトコードを再利用できる)と判定され、オブジェクトファイル「a.o」はそのままリンカ16に出力される。オブジェクトファイル「d.o」についても、オブジェクトコードが含まれているか否かが検証部113により判定される。ここでは、オブジェクトファイル「d.o」にオブジェクトコードが含まれていると判定され、オブジェクトファイル「d.o」はそのままリンカ16に出力される。そして、オブジェクトファイル「a.o」及びオブジェクトファイル「d.o」についてリンクが実行され、実行可能ファイル「z.exe」が生成される。
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置1の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
また、上で説明したデータ構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
なお、上で述べた情報処理装置1は、コンピュータ装置であって、図13に示すように、メモリ2501とCPU2503とHDD2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態の第1の態様に係るコンパイル方法は、(A)リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、(B)リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、第1のオブジェクトファイルに含まれるソースコードの情報に対してリンク時最適化とコンパイルとを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含む第2のオブジェクトファイルを生成し、(C)リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、第1のオブジェクトファイルに含まれるソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する処理を含む。
オブジェクトコードを無駄に生成することがないので、最終的に実行可能ファイルを生成するまでに要する時間を短縮できるようになる。
また、本コンパイル方法は、(D)リンク時最適化の実行指示を含まない第2のコンパイルコマンドを受信した場合、ソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含み且つソースコードの情報を含まない第4のオブジェクトファイルを生成し、(E)第2のリンクコマンドを受信した場合、第4のオブジェクトファイルをリンカに出力する処理をさらに含んでもよい。
従来の技術では、リンク時最適化が実行されない場合にはリンクコマンド実行時にオブジェクトコードが生成されない。そこで、上で述べたような処理を実行すれば、適切なオブジェクトコードを含むオブジェクトファイルがリンカに出力されるようになる。
また、本コンパイル方法は、(F)第1のリンクコマンドを受信した場合、第4のオブジェクトファイルをリンカに出力する処理をさらに含んでもよい。
コンパイルコマンド及びリンクコマンドの両方にリンク時最適化の実行指示が含まれていなければリンク時最適化が実行されないことがある。そこで、上で述べたような処理を実行すれば、適切なオブジェクトファイルがリンカに出力されるようになる。
また、本コンパイル方法は、(G)リンク時最適化の実行指示を含まない第3のリンクコマンドをさらに受信した場合、第3のオブジェクトファイルをリンカに出力する処理をさらに含んでもよい。
ソースコードに対応するオブジェクトコードを生成する処理を省略できるようになる。すなわち、第3のオブジェクトファイルを再利用することができるようになる。
また、第1のオブジェクトファイルを生成する処理において、(a1)オブジェクトコードの生成を省略したことを示す第1の情報を、第1のオブジェクトファイルの所定のセクションに書き込み、第3のオブジェクトファイルを生成する処理において、(c1)第2のリンクコマンドで指定されたオブジェクトファイルの所定のセクションに第1の情報が書き込まれているか否かに基づき、第2のリンクコマンドで指定されたオブジェクトファイルが第1のオブジェクトファイルであるか否かを判定してもよい。
本実施の形態の第2の態様に係る情報処理装置は、(H)リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、第1のオブジェクトファイルに含まれるソースコードの情報に対してリンク時最適化とコンパイルとを実行することでオブジェクトコードを生成し、生成したオブジェクトコードを含む第2のオブジェクトファイルを生成する第1生成部(例えば、第1コンパイル実行部141)と、(I)リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、第1のオブジェクトファイルに含まれるソースコードの情報に対してコンパイルを実行することでオブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する第2生成部(例えば、第2コンパイル実行部142)とを有する。
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
コンピュータに、
リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第2のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する、
処理を実行させるコンパイルプログラム。
(付記2)
前記コンピュータに、
前記リンク時最適化の実行指示を含まない第2のコンパイルコマンドを受信した場合、前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含み且つ前記ソースコードの情報を含まない第4のオブジェクトファイルを生成し、
前記第2のリンクコマンドを受信した場合、前記第4のオブジェクトファイルをリンカに出力する、
処理をさらに実行させる付記1記載のコンパイルプログラム。
(付記3)
前記コンピュータに、
前記第1のリンクコマンドを受信した場合、前記第4のオブジェクトファイルを前記リンカに出力する、
処理をさらに実行させる付記2記載のコンパイルプログラム。
(付記4)
前記コンピュータに、
前記リンク時最適化の実行指示を含まない第3のリンクコマンドをさらに受信した場合、前記第3のオブジェクトファイルをリンカに出力する、
処理をさらに実行させる付記1記載のコンパイルプログラム。
(付記5)
前記第1のオブジェクトファイルを生成する処理において、
前記オブジェクトコードの生成を省略したことを示す第1の情報を、前記第1のオブジェクトファイルの所定のセクションに書き込み、
前記第3のオブジェクトファイルを生成する処理において、
前記第2のリンクコマンドで指定されたオブジェクトファイルの前記所定のセクションに前記第1の情報が書き込まれているか否かに基づき、前記第2のリンクコマンドで指定されたオブジェクトファイルが前記第1のオブジェクトファイルであるか否かを判定する、
付記1乃至4のいずれか1つ記載のコンパイルプログラム。
(付記6)
コンピュータが、
リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第2のオブジェクトファイルを生成し、
前記リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する、
処理を実行するコンパイル方法。
(付記7)
リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、前記リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第2のオブジェクトファイルを生成する第1生成部と、
前記リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する第2生成部と、
を有する情報処理装置。
1 情報処理装置 11 コンパイラドライバ
111 コンパイル制御部 112 リンク制御部
113 検証部 114 遅延コンパイル制御部
13 データ格納部 14 コンパイラ
141 第1コンパイル実行部 142 第2コンパイル実行部
15 ファイル間最適化部 16 リンカ

Claims (7)

  1. コンピュータに、
    リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、
    前記リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第2のオブジェクトファイルを生成し、
    前記リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する、
    処理を実行させるコンパイルプログラム。
  2. 前記コンピュータに、
    前記リンク時最適化の実行指示を含まない第2のコンパイルコマンドを受信した場合、前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含み且つ前記ソースコードの情報を含まない第4のオブジェクトファイルを生成し、
    前記第2のリンクコマンドを受信した場合、前記第4のオブジェクトファイルをリンカに出力する、
    処理をさらに実行させる請求項1記載のコンパイルプログラム。
  3. 前記コンピュータに、
    前記第1のリンクコマンドを受信した場合、前記第4のオブジェクトファイルを前記リンカに出力する、
    処理をさらに実行させる請求項2記載のコンパイルプログラム。
  4. 前記コンピュータに、
    前記リンク時最適化の実行指示を含まない第3のリンクコマンドをさらに受信した場合、前記第3のオブジェクトファイルをリンカに出力する、
    処理をさらに実行させる請求項1記載のコンパイルプログラム。
  5. 前記第1のオブジェクトファイルを生成する処理において、
    前記オブジェクトコードの生成を省略したことを示す第1の情報を、前記第1のオブジェクトファイルの所定のセクションに書き込み、
    前記第3のオブジェクトファイルを生成する処理において、
    前記第2のリンクコマンドで指定されたオブジェクトファイルの前記所定のセクションに前記第1の情報が書き込まれているか否かに基づき、前記第2のリンクコマンドで指定されたオブジェクトファイルが前記第1のオブジェクトファイルであるか否かを判定する、
    請求項1乃至4のいずれか1つ記載のコンパイルプログラム。
  6. コンピュータが、
    リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、
    前記リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第2のオブジェクトファイルを生成し、
    前記リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する、
    処理を実行するコンパイル方法。
  7. リンク時最適化の実行指示を含む第1のコンパイルコマンドを受信した場合、オブジェクトコードを含まず且つソースコードの情報を含む第1のオブジェクトファイルを生成し、前記リンク時最適化の実行指示を含む第1のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記リンク時最適化とコンパイルとを実行することで前記オブジェクトコードを生成し、生成した前記オブジェクトコードを含む第2のオブジェクトファイルを生成する第1生成部と、
    前記リンク時最適化の実行指示を含まない第2のリンクコマンドを受信した場合、前記第1のオブジェクトファイルに含まれる前記ソースコードの情報に対して前記コンパイルを実行することで前記オブジェクトコードを生成し、生成した当該オブジェクトコードを含む第3のオブジェクトファイルを生成する第2生成部と、
    を有する情報処理装置。
JP2017010918A 2017-01-25 2017-01-25 コンパイル方法、コンパイルプログラム及び情報処理装置 Active JP6790869B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017010918A JP6790869B2 (ja) 2017-01-25 2017-01-25 コンパイル方法、コンパイルプログラム及び情報処理装置
US15/861,724 US10489131B2 (en) 2017-01-25 2018-01-04 Efficient compilation for link time optimization

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017010918A JP6790869B2 (ja) 2017-01-25 2017-01-25 コンパイル方法、コンパイルプログラム及び情報処理装置

Publications (2)

Publication Number Publication Date
JP2018120389A JP2018120389A (ja) 2018-08-02
JP6790869B2 true JP6790869B2 (ja) 2020-11-25

Family

ID=62906454

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017010918A Active JP6790869B2 (ja) 2017-01-25 2017-01-25 コンパイル方法、コンパイルプログラム及び情報処理装置

Country Status (2)

Country Link
US (1) US10489131B2 (ja)
JP (1) JP6790869B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110119274A (zh) * 2018-02-05 2019-08-13 北京智明星通科技股份有限公司 一种数据编译的方法、装置以及电子终端、计算机可读存储介质
CN112698835B (zh) * 2021-01-05 2023-08-18 潍柴动力股份有限公司 一种单片机编译链接方法、装置、计算机设备及存储介质
US11550554B2 (en) 2021-01-07 2023-01-10 Microsoft Technology Licensing, Llc Merged machine-level intermediate representation optimizations

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5850554A (en) * 1995-12-29 1998-12-15 Intel Corporation Compiler tool set for efficiently generating and easily managing multiple program versions of different types
JPH10275088A (ja) 1997-03-31 1998-10-13 Hitachi Ltd リンク最適化方法
JP2000267860A (ja) 1999-03-17 2000-09-29 Matsushita Electric Ind Co Ltd アセンブラ最適化方法およびその装置
US6769115B1 (en) * 2000-05-01 2004-07-27 Emc Corporation Adaptive interface for a software development environment
US7086043B2 (en) 2002-10-29 2006-08-01 International Business Machines Corporation Compiler apparatus and method for unrolling a superblock in a computer program
US7607123B2 (en) * 2004-09-21 2009-10-20 Hewlett-Packard Development Company, L.P. Systems and methods for validating debug information for optimized code
JP2010231478A (ja) * 2009-03-27 2010-10-14 Toshiba Corp コンパイル方法、コンパイルプログラムおよび半導体集積回路製造方法
US20160357530A1 (en) * 2015-06-05 2016-12-08 Apple Inc. Method and apparatus for intermediate representation of applications
US10061571B2 (en) * 2015-11-16 2018-08-28 Qualcomm Innovation Center, Inc. System and method for link time optimization
US10248545B2 (en) * 2016-02-17 2019-04-02 Parasoft Corporation Method for tracking high-level source attribution of generated assembly language code
JP6759851B2 (ja) 2016-08-22 2020-09-23 富士通株式会社 プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム

Also Published As

Publication number Publication date
US10489131B2 (en) 2019-11-26
US20180210718A1 (en) 2018-07-26
JP2018120389A (ja) 2018-08-02

Similar Documents

Publication Publication Date Title
JP4909877B2 (ja) デバッグ装置及びデバッグ方法
US6233733B1 (en) Method for generating a Java bytecode data flow graph
US10133560B2 (en) Link time program optimization in presence of a linker script
JP6790869B2 (ja) コンパイル方法、コンパイルプログラム及び情報処理装置
US10269087B2 (en) Language translation using preprocessor macros
US20060143523A1 (en) Apparatus and method for debugging embedded software
JP2004164554A (ja) プログラム実行監視装置および方法
US20050188362A1 (en) Method and system for performing link-time code optimization without additional code analysis
JP2007304840A (ja) コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
US8930925B2 (en) Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives
JPH0926884A (ja) バイナリ操作を必要とするタスク中に必要なフロー情報を使用可能とする方法および装置
JP6759851B2 (ja) プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
JP4719415B2 (ja) 情報処理システム及びコード生成方法
JP2016224724A (ja) 情報処理装置、コンパイル方法、及びコンパイラプログラム
JP2017091070A (ja) 実行可能コード生成プログラムおよび実行可能コード生成装置
US20110099534A1 (en) Information processing apparatus, execution program operation modification method, and recording medium
JP5021584B2 (ja) マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体
JP2007004516A (ja) 組込みシステムのプログラムデバッグ方法
JP6326838B2 (ja) プログラム処理装置、プログラム処理方法、及びプログラム処理プログラム
JP4594704B2 (ja) プログラム開発支援システム、プログラムおよび記録媒体
JP2002259121A (ja) ソースラインデバッグ装置
JP3956113B2 (ja) データ処理装置及びプログラム
JP2006221556A (ja) プログラム実行装置、プログラム実行方法およびプログラム
JP2007188366A (ja) コンパイル装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191008

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200811

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200812

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200824

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: 20201006

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201019

R150 Certificate of patent or registration of utility model

Ref document number: 6790869

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150