JPH10312291A - コンパイラ装置 - Google Patents
コンパイラ装置Info
- Publication number
- JPH10312291A JPH10312291A JP12248997A JP12248997A JPH10312291A JP H10312291 A JPH10312291 A JP H10312291A JP 12248997 A JP12248997 A JP 12248997A JP 12248997 A JP12248997 A JP 12248997A JP H10312291 A JPH10312291 A JP H10312291A
- Authority
- JP
- Japan
- Prior art keywords
- function
- argument
- inline
- cost
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
ン展開を行い、プログラムサイズの低減を図ることを課
題とする。 【解決手段】 この発明は、インライン展開の対象関数
に引数がありその引数が最適化の結果定数であると評価
された場合には、最適化された引数の値を用いて対象関
数を最適化し、最適化後の関数のコストを計算し、最適
化後の関数のコストが関数コールのコストよりも小さい
場合に対象関数をインライン展開するように構成され
る。
Description
されたプログラムにおける関数のインライン展開を行う
コンパイラ装置に関する。
ン展開とは、関数呼び出しのオーバヘッドよりもコード
サイズが小さい関数に対して関数を呼び出す関数コール
を行うのではなく、その場に関数のコードを展開するも
のである。このような関数のインライン展開の従来の手
法にあっては、プログラマによりインライン展開が指定
された関数に対して、 1.無条件にインライン展開する。
を決めてインライン展開する。
開判断部101において何等の判断処理も行っておら
ず、指定された関数はすべてインライン展開されてい
た。このような手法にあっては、無条件に展開を行うた
め通常の場合コードサイズが増大するが、その反面関数
に定数の引数がある場合にその引数が最適化され、最適
化された引数により関数がインライン展開され、関数の
コードサイズが小さくなるという利点があった。
すように展開判断部102の判断処理部103において
関数の引数に関係なく展開可能なコードサイズの上限と
展開対象の関数のコードサイズを比較し、比較結果に基
づいて関数をインライン展開するか否かを次の処理に渡
していた。このように、上記2に示す手法においては、
上記1に示す手法のように無条件に展開を行わず展開可
能なコードサイズに上限を設けているためコードサイズ
の増大はないが、その反面引数が定数で最適化が行われ
る場合おいても展開を行うことができないという欠点が
あった。
関数のインライン展開において、無条件に展開するとい
う従来の手法にあっては、関数の内容によっては関数コ
ールを行う場合に比べてコードサイズが大きくなり、プ
ログラムが増大するといった不具合を招いていた。一
方、展開サイズに制限を設けるようにした従来の手法に
あっては、引数の内容に応じて関数をインライン展開し
てコードサイズを小さくすることができなかった。この
ように、従来のいずれの手法にあっても、インライン展
開を有効に利用してプログラムサイズをより一層低減す
ることは困難になっていた。
たものであり、その目的とするところは、引数を考慮し
て関数のインライン展開を行い、プログラムサイズの低
減を図ったコンパイラ装置を提供することにある。
に、請求項1記載の発明は、高級言語で記述されたソー
スプログラムの関数をインライン展開するインライン展
開部を備えたコンパイラ装置おいて、インライン展開の
対象となる対象関数に受け渡される引数がある場合に、
前記引数を最適化し、最適化の結果前記引数が定数であ
るか否かを評価する引数評価部と、前記評価部において
前記引数が定数であると評価された場合は、前記引数を
用いて前記対象関数を最適化し、最適化された関数のコ
ストならびに前記対象関数をコールする際のコストを計
算するコスト計算処理部と、前記コスト計算処理部によ
って計算された両コストを比較し、前記引数により最適
化された前記対象関数のコストが前記対象関数をコール
する際のコストよりも小さい場合に前記対象関数をイン
ライン展開すると判断し、判断結果を前記インライン展
開部に与える判断処理部を有することを特徴とする。
ンパイラ装置において、ソースプログラムから中間コー
ドを生成した後アセンブラコードを生成し続いてオブジ
ェクトプログラムを作成するコンパイラ装置であって、
中間コードが生成される段階でインライン展開を行うか
否かを判断してインライン展開を行うことを特徴とす
る。
ンパイラ装置において、ソースプログラムからアセンブ
ラコードを生成した後オブジェクトプログラムを作成す
るコンパイラ装置であって、アセンブラコードが生成さ
れる段階でインライン展開を行うか否かを判断してイン
ライン展開を行うことを特徴とする。
実施形態を説明する。
形態に係るコンパイラ装置の構成を示す図であり、図2
は請求項1又は3記載の発明の一実施形態に係るコンパ
イラ装置の構成を示す図である。
グラムから中間コードを生成した後アセンブラコードを
生成してオブジェクトコードを作成する装置であり、ソ
ースプログラムを読み込んで前処理を行う前処理部1
と、前処理部1の処理結果を受けて中間コードを生成す
る中間コード生成部2と、中間コード生成部2で生成さ
れた中間コードを受けて最適化する中間コード最適化部
3と、中間コード最適化部3で最適化された中間コード
を受けてアセンブラコードを生成するアセンブラコード
生成部4と、アセンブラコード生成部4で生成されたア
センブラコードを受けてオブジェクトコードに翻訳する
アセンブラコードコンパイル部5を備え、中間コード生
成部2は、関数のインライン展開を行うインライン展開
部6と、インライン展開の対象となる対象関数に受け渡
される引数がある場合に、その引数を最適化し、最適化
の結果引数が定数であるか否かを評価する引数評価処理
を含めて中間コードを生成するために必要となるその他
の処理を行うその他の処理部7を有して構成されてい
る。
グラムからアセンブラコードを生成した後オブジェクト
コードを作成する装置であり、ソースプログラムを読み
込んで前処理を行う前処理部1と、前処理部1の処理結
果を受けてアセンブラコードを生成するアセンブラコー
ド生成部8と、アセンブラコード生成部8で生成された
アセンブラコードを受けてオブジェクトコードに翻訳す
るアセンブラコードコンパイル部5を備え、アセンブラ
コード生成部8は、関数のインライン展開を行うインラ
イン展開部6と、アセンブラコードを最適化するアセン
ブラコード最適化部9と、インライン展開の対象となる
対象関数に受け渡される引数がある場合に、その引数を
最適化し、最適化の結果引数が定数であるか否かを評価
する引数評価処理を含めてアセンブラコードを生成する
ために必要となるその他の処理を行うその他の処理部7
を有して構成されている。
は、図3に示すように関数をインライン展開するか否か
を判断する展開判断部10を備え、展開判断部10は、
コスト計算処理部11と判断処理部12を有して構成さ
れている。
る関数を呼び出す関数コールのコードと、その他の処理
部7で行われた引数の評価処理において引数が定数であ
る場合は最適化された引数を受けて、最適化された引数
の値を用いて関数を最適化し、最適化した関数のコード
サイズや使用レジスタ数等のコスト、ならびに関数をコ
ールする際のコストを計算する。判断処理部12は、コ
スト計算部11によって計算された両コストを比較し、
引数により最適化された関数のコストが関数をコールす
る際のコストよりも小さい場合に関数をインライン展開
すると判断し、判断結果をインライン展開部6に与え
る。インライン展開部6は、判断処理部12によってイ
ンライン展開を行う旨判断された場合は関数をインライ
ン展開して展開コードを生成し、判断処理部12によっ
てインライン展開しない旨判断された場合には関数のイ
ンライン展開は行わず関数コールのコードそのままアセ
ンブラコードコンパイル部5に与える。
置において、インライン展開されない場合とインライン
展開される場合のプログラム例を図4〜図9を参照して
説明する。
ており、同図(a)に示すプログラム(a)は、swi
tch文のインライン展開判断のコスト計算を行う例で
ある。関数fは引数a,bを受け取りa,bの値により
処理が異なる。関数gでは関数fを呼び出しその返却値
を変数に代入している。なお、プログラム中の「……」
の部分は説明には関係ない部分を省略していることを表
している。プログラム(a)の関数g中での関数fの呼
び出しの部分で関数fのコストを計算すると、関数コー
ルを行う場合より低くなるのでインライン展開を行って
いる。その結果プログラム(a)は図4(b)に示すプ
ログラム(b)のようになり、インライン展開を行うこ
とによってコードサイズが削減される。
ており、同図(a)に示すプログラム(a)はif文の
インライン展開判断のコスト計算を行う例である。関数
fは引数a,bを受け取りaの値により処理が異なる。
関数gでは関数fを呼び出しその返却値を変数に代入し
ている。なお、プログラム中の「……」の部分は、説明
には関係ない部分を省略していることを表している。プ
ログラム(a)の関数g中での関数fの呼び出しの部分
で関数fのコストを計算すると関数コールを行う場合よ
り低くなるので、インライン展開を行っている。その結
果プログラム(a)は図5(b)に示すプログラム
(b)のようになり、インライン展開を行うことによっ
てコードサイズが削減される。
ており、同図(a)に示すプログラム(a)は引数を用
いた計算のインライン展開判断のコスト計算を行う例で
ある。関数fは引数a,bを受け取りaとbを用いて計
算を行い、その結果を返している。関数gでは関数fを
呼び出しその返却値を変数に代入している。なお、プロ
グラム中の「……」の部分は説明には関係ない部分を省
略していることを表している。プログラム(a)の関数
g中での関数fの呼び出しの部分で関数fのコストを計
算すると関数コールを行う場合より低くなるので、イン
ライン展開を行っている。その結果プログラム(a)は
図6(b)に示すプログラム(b)のようになり、イン
ライン展開を行うことによってコードサイズが削減され
る。
ており、同図(a)に示すプログラム(a)はアドレス
計算のインライン展開判断のコスト計算を行う例であ
る。関数fは引数p,a,bを受け取り配列pのa番目
にbを代入し、代入する前に入っていた値を返却するも
のである。関数gでは関数fを呼び出しその返却値を変
数に代入している。なお、プログラム中の「……」の部
分は説明には関係ない部分を省略していることを表して
いる。プログラム(a)の関数g中での関数fの呼び出
しの部分で関数fのコストを計算すると関数コールを行
う場合より低くなるので、インライン展開を行ってい
る。その結果プログラム(a)は図7(b)に示すプロ
グラム(b)のようになり、インライン展開を行うこと
によってコードサイズが削減される。
ており、同図(a)に示すプログラム(a)は最適化の
結果引数が定数と評価できる場合のインライン展開判断
のコスト計算を行う例である。関数fは図5に示す関数
fと同じものである。関数gでは自動変数a,bを宣言
し、関数fをa,b引数として呼び出しその返却値を変
数に代入いている。なお、プログラム中の「……」の部
分は説明には関係ない部分を省略していることを表して
いる。プログラム(a)の関数g中での関数fの呼び出
しの部分で関数fの引数は最適化の結果定数となるの
で、関数fのコストを計算すると関数コールを行う場合
より低くなるので、インライン展開を行っている。その
結果プログラム(a)は図8(b)に示すプログラム
(b)のようになり、インライン展開を行うことによっ
てコードサイズが削減される。
の手法を用いた場合と本発明を用いた場合とで比較した
ものである。同図(a)に示すプログラムはC言語で書
かれたソースプログラムであり、関数fは図5に示す関
数fと同じものであり、関数gは関数fをコールしてい
る。同図(b)は図11に示す従来の手法を用いて同図
(a)に示すソースプログラムをコンパイルした結果の
アセンブラコードを示している。図9(c)は本発明を
用いて同図(a)に示すソースプログラムをコンパイル
した結果のアセンブラコードを示している。図9(b)
に示すコンパイル例ではコード数が38ステップである
のに対して、同図(c)に示すコンパイル例ではコード
数が5ステップとなり、引数を考慮してインライン展開
することによりコード数が86%減少する。また、関数
fのコードを含まない関数gのコードで比較しても75
%減少する。
て関数の静的コードサイズが大きい場合でも、定数とな
る引数で関数を最適化してコードサイズが上限より小さ
くなる場合についてはインライン展開を行うことができ
るようになる。
ば、インライン展開の対象となる関数に定数となる引数
があり、この引数を用いて最適化した後の関数のコスト
が関数コールした際のコストよりも小さくなる場合に
は、関数をインライン展開するようにしたので、インラ
イン展開により関数のコードサイズが小さくなり、プロ
グラム全体のコードを削減することができる。
コンパイラ装置の構成を示す図である。
コンパイラ装置の構成を示す図である。
合のプログラム例を示す図である。
合の他のプログラム例を示す図である。
合の他のプログラム例を示す図である。
合の他のプログラム例を示す図である。
合の他のプログラム例を示す図である。
合の他のプログラム例を示す図である。
の構成を示す図である。
の他の構成を示す図である。
Claims (3)
- 【請求項1】 高級言語で記述されたソースプログラム
の関数をインライン展開するインライン展開部を備えた
コンパイラ装置おいて、 インライン展開の対象となる対象関数に受け渡される引
数がある場合に、前記引数を最適化し、最適化の結果前
記引数が定数であるか否かを評価する引数評価部と、 前記評価部において前記引数が定数であると評価された
場合は、前記引数を用いて前記対象関数を最適化し、最
適化された関数のコストならびに前記対象関数をコール
する際のコストを計算するコスト計算処理部と、 前記コスト計算処理部によって計算された両コストを比
較し、前記引数により最適化された前記対象関数のコス
トが前記対象関数をコールする際のコストよりも小さい
場合に前記対象関数をインライン展開すると判断し、判
断結果を前記インライン展開部に与える判断処理部を有
することを特徴とするコンパイラ装置。 - 【請求項2】 ソースプログラムから中間コードを生成
した後アセンブラコードを生成し続いてオブジェクトプ
ログラムを作成するコンパイラ装置であって、 中間コ
ードが生成される段階でインライン展開を行うか否かを
判断してインライン展開を行うことを特徴とする請求項
1記載のコンパイラ装置。 - 【請求項3】 ソースプログラムからアセンブラコード
を生成した後オブジェクトプログラムを作成するコンパ
イラ装置であって、 アセンブラコードが生成される段階でインライン展開を
行うか否かを判断してインライン展開を行うことを特徴
とする請求項1記載のコンパイラ装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP12248997A JPH10312291A (ja) | 1997-05-13 | 1997-05-13 | コンパイラ装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP12248997A JPH10312291A (ja) | 1997-05-13 | 1997-05-13 | コンパイラ装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH10312291A true JPH10312291A (ja) | 1998-11-24 |
Family
ID=14837118
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP12248997A Pending JPH10312291A (ja) | 1997-05-13 | 1997-05-13 | コンパイラ装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH10312291A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9383980B2 (en) | 2013-02-22 | 2016-07-05 | International Business Machines Corporation | Determining a method to inline using an actual footprint calculation |
| US10445095B2 (en) | 2017-06-15 | 2019-10-15 | Fujitsu Limited | Information processing device, compiler method, and recording medium recording compiler program |
-
1997
- 1997-05-13 JP JP12248997A patent/JPH10312291A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9383980B2 (en) | 2013-02-22 | 2016-07-05 | International Business Machines Corporation | Determining a method to inline using an actual footprint calculation |
| US10445095B2 (en) | 2017-06-15 | 2019-10-15 | Fujitsu Limited | Information processing device, compiler method, and recording medium recording compiler program |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7373641B2 (en) | Method, computer unit and program for converting a program | |
| JPH05257709A (ja) | 並列化判別方法およびそれを用いた並列化支援方法 | |
| JPH1097430A (ja) | 最適化のためにアセンブリコードルーチンをソースコードルーチンに挿入する方法およびそのシステム | |
| JPH11242597A (ja) | Javaバイトコードデータのフローグラフの生成方法 | |
| JPH07105012A (ja) | 言語処理プログラムのコンパイル処理方式 | |
| JPH06314203A (ja) | コンパイラの最適化方法および装置 | |
| US20040015918A1 (en) | Program optimization method and compiler using the program optimization method | |
| US20050188362A1 (en) | Method and system for performing link-time code optimization without additional code analysis | |
| JPH10312291A (ja) | コンパイラ装置 | |
| JPH06202875A (ja) | インライン展開による最適化を行うコンパイラ | |
| US7043721B2 (en) | Initial object capacity determination | |
| JP2956591B2 (ja) | ループ外への条件付き飛び出しがあるループの並列化方法及び装置 | |
| JPH10326193A (ja) | インライン展開関数の最適化のためのコンパイル方法 | |
| JPH05298117A (ja) | 定数を引数とする手続きの最適化方式 | |
| JPH0573335A (ja) | プログラムの自動インライン展開方式 | |
| JPH07192034A (ja) | インタプリタ型シミュレーション方法 | |
| JP2518504B2 (ja) | 目的プログラム生成装置 | |
| JPH1083311A (ja) | シミュレータ | |
| JP2853604B2 (ja) | 無限ループのベクトル化処理方式 | |
| JPH07234794A (ja) | マルチプロセッサシステムにおける目的プログラム生成方法 | |
| JPH03268030A (ja) | インライン展開の制御方式 | |
| JP2004062234A (ja) | インライン展開処理方法及びそれに用いたコンパイルプログラム | |
| JPH08263300A (ja) | インライン展開方式 | |
| JPH0736708A (ja) | インライン展開方式 | |
| JPH04336333A (ja) | 原始プログラムの自動インライン展開方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041019 |
|
| A521 | Written amendment |
Effective date: 20041216 Free format text: JAPANESE INTERMEDIATE CODE: A523 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050222 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050425 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20050712 |