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
Application number
JP12248997A
Other languages
English (en)
Inventor
Ai Tangoda
愛 丹後田
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP12248997A priority Critical patent/JPH10312291A/ja
Publication of JPH10312291A publication Critical patent/JPH10312291A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 この発明は、引数を考慮して関数のインライ
ン展開を行い、プログラムサイズの低減を図ることを課
題とする。 【解決手段】 この発明は、インライン展開の対象関数
に引数がありその引数が最適化の結果定数であると評価
された場合には、最適化された引数の値を用いて対象関
数を最適化し、最適化後の関数のコストを計算し、最適
化後の関数のコストが関数コールのコストよりも小さい
場合に対象関数をインライン展開するように構成され
る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、高級言語で記述
されたプログラムにおける関数のインライン展開を行う
コンパイラ装置に関する。
【0002】
【従来の技術】プログラムに記述された関数のインライ
ン展開とは、関数呼び出しのオーバヘッドよりもコード
サイズが小さい関数に対して関数を呼び出す関数コール
を行うのではなく、その場に関数のコードを展開するも
のである。このような関数のインライン展開の従来の手
法にあっては、プログラマによりインライン展開が指定
された関数に対して、 1.無条件にインライン展開する。
【0003】2.展開対象の関数のコードサイズの上限
を決めてインライン展開する。
【0004】の2つがあった。
【0005】1に示す手法では、図10に示すように展
開判断部101において何等の判断処理も行っておら
ず、指定された関数はすべてインライン展開されてい
た。このような手法にあっては、無条件に展開を行うた
め通常の場合コードサイズが増大するが、その反面関数
に定数の引数がある場合にその引数が最適化され、最適
化された引数により関数がインライン展開され、関数の
コードサイズが小さくなるという利点があった。
【0006】一方、上記2に示す手法では、図11に示
すように展開判断部102の判断処理部103において
関数の引数に関係なく展開可能なコードサイズの上限と
展開対象の関数のコードサイズを比較し、比較結果に基
づいて関数をインライン展開するか否かを次の処理に渡
していた。このように、上記2に示す手法においては、
上記1に示す手法のように無条件に展開を行わず展開可
能なコードサイズに上限を設けているためコードサイズ
の増大はないが、その反面引数が定数で最適化が行われ
る場合おいても展開を行うことができないという欠点が
あった。
【0007】
【発明が解決しようとする課題】以上説明したように、
関数のインライン展開において、無条件に展開するとい
う従来の手法にあっては、関数の内容によっては関数コ
ールを行う場合に比べてコードサイズが大きくなり、プ
ログラムが増大するといった不具合を招いていた。一
方、展開サイズに制限を設けるようにした従来の手法に
あっては、引数の内容に応じて関数をインライン展開し
てコードサイズを小さくすることができなかった。この
ように、従来のいずれの手法にあっても、インライン展
開を有効に利用してプログラムサイズをより一層低減す
ることは困難になっていた。
【0008】そこで、この発明は、上記に鑑みてなされ
たものであり、その目的とするところは、引数を考慮し
て関数のインライン展開を行い、プログラムサイズの低
減を図ったコンパイラ装置を提供することにある。
【0009】
【課題を解決するための手段】上記目的を達成するため
に、請求項1記載の発明は、高級言語で記述されたソー
スプログラムの関数をインライン展開するインライン展
開部を備えたコンパイラ装置おいて、インライン展開の
対象となる対象関数に受け渡される引数がある場合に、
前記引数を最適化し、最適化の結果前記引数が定数であ
るか否かを評価する引数評価部と、前記評価部において
前記引数が定数であると評価された場合は、前記引数を
用いて前記対象関数を最適化し、最適化された関数のコ
ストならびに前記対象関数をコールする際のコストを計
算するコスト計算処理部と、前記コスト計算処理部によ
って計算された両コストを比較し、前記引数により最適
化された前記対象関数のコストが前記対象関数をコール
する際のコストよりも小さい場合に前記対象関数をイン
ライン展開すると判断し、判断結果を前記インライン展
開部に与える判断処理部を有することを特徴とする。
【0010】請求項2記載の発明は、請求項1記載のコ
ンパイラ装置において、ソースプログラムから中間コー
ドを生成した後アセンブラコードを生成し続いてオブジ
ェクトプログラムを作成するコンパイラ装置であって、
中間コードが生成される段階でインライン展開を行うか
否かを判断してインライン展開を行うことを特徴とす
る。
【0011】請求項3記載の発明は、請求項1記載のコ
ンパイラ装置において、ソースプログラムからアセンブ
ラコードを生成した後オブジェクトプログラムを作成す
るコンパイラ装置であって、アセンブラコードが生成さ
れる段階でインライン展開を行うか否かを判断してイン
ライン展開を行うことを特徴とする。
【0012】
【発明の実施の形態】以下、図面を用いてこの発明の一
実施形態を説明する。
【0013】図1は請求項1又は2記載の発明の一実施
形態に係るコンパイラ装置の構成を示す図であり、図2
は請求項1又は3記載の発明の一実施形態に係るコンパ
イラ装置の構成を示す図である。
【0014】図1に示すコンパイラ装置は、ソースプロ
グラムから中間コードを生成した後アセンブラコードを
生成してオブジェクトコードを作成する装置であり、ソ
ースプログラムを読み込んで前処理を行う前処理部1
と、前処理部1の処理結果を受けて中間コードを生成す
る中間コード生成部2と、中間コード生成部2で生成さ
れた中間コードを受けて最適化する中間コード最適化部
3と、中間コード最適化部3で最適化された中間コード
を受けてアセンブラコードを生成するアセンブラコード
生成部4と、アセンブラコード生成部4で生成されたア
センブラコードを受けてオブジェクトコードに翻訳する
アセンブラコードコンパイル部5を備え、中間コード生
成部2は、関数のインライン展開を行うインライン展開
部6と、インライン展開の対象となる対象関数に受け渡
される引数がある場合に、その引数を最適化し、最適化
の結果引数が定数であるか否かを評価する引数評価処理
を含めて中間コードを生成するために必要となるその他
の処理を行うその他の処理部7を有して構成されてい
る。
【0015】図2に示すコンパイラ装置は、ソースプロ
グラムからアセンブラコードを生成した後オブジェクト
コードを作成する装置であり、ソースプログラムを読み
込んで前処理を行う前処理部1と、前処理部1の処理結
果を受けてアセンブラコードを生成するアセンブラコー
ド生成部8と、アセンブラコード生成部8で生成された
アセンブラコードを受けてオブジェクトコードに翻訳す
るアセンブラコードコンパイル部5を備え、アセンブラ
コード生成部8は、関数のインライン展開を行うインラ
イン展開部6と、アセンブラコードを最適化するアセン
ブラコード最適化部9と、インライン展開の対象となる
対象関数に受け渡される引数がある場合に、その引数を
最適化し、最適化の結果引数が定数であるか否かを評価
する引数評価処理を含めてアセンブラコードを生成する
ために必要となるその他の処理を行うその他の処理部7
を有して構成されている。
【0016】図1又は図2に示すインライン展開部6
は、図3に示すように関数をインライン展開するか否か
を判断する展開判断部10を備え、展開判断部10は、
コスト計算処理部11と判断処理部12を有して構成さ
れている。
【0017】コスト計算処理部11は、展開の対象とな
る関数を呼び出す関数コールのコードと、その他の処理
部7で行われた引数の評価処理において引数が定数であ
る場合は最適化された引数を受けて、最適化された引数
の値を用いて関数を最適化し、最適化した関数のコード
サイズや使用レジスタ数等のコスト、ならびに関数をコ
ールする際のコストを計算する。判断処理部12は、コ
スト計算部11によって計算された両コストを比較し、
引数により最適化された関数のコストが関数をコールす
る際のコストよりも小さい場合に関数をインライン展開
すると判断し、判断結果をインライン展開部6に与え
る。インライン展開部6は、判断処理部12によってイ
ンライン展開を行う旨判断された場合は関数をインライ
ン展開して展開コードを生成し、判断処理部12によっ
てインライン展開しない旨判断された場合には関数のイ
ンライン展開は行わず関数コールのコードそのままアセ
ンブラコードコンパイル部5に与える。
【0018】次に、このように構成されたコンパイラ装
置において、インライン展開されない場合とインライン
展開される場合のプログラム例を図4〜図9を参照して
説明する。
【0019】図4に示すプログラム例はC言語で書かれ
ており、同図(a)に示すプログラム(a)は、swi
tch文のインライン展開判断のコスト計算を行う例で
ある。関数fは引数a,bを受け取りa,bの値により
処理が異なる。関数gでは関数fを呼び出しその返却値
を変数に代入している。なお、プログラム中の「……」
の部分は説明には関係ない部分を省略していることを表
している。プログラム(a)の関数g中での関数fの呼
び出しの部分で関数fのコストを計算すると、関数コー
ルを行う場合より低くなるのでインライン展開を行って
いる。その結果プログラム(a)は図4(b)に示すプ
ログラム(b)のようになり、インライン展開を行うこ
とによってコードサイズが削減される。
【0020】図5に示すプログラム例はC言語で書かれ
ており、同図(a)に示すプログラム(a)はif文の
インライン展開判断のコスト計算を行う例である。関数
fは引数a,bを受け取りaの値により処理が異なる。
関数gでは関数fを呼び出しその返却値を変数に代入し
ている。なお、プログラム中の「……」の部分は、説明
には関係ない部分を省略していることを表している。プ
ログラム(a)の関数g中での関数fの呼び出しの部分
で関数fのコストを計算すると関数コールを行う場合よ
り低くなるので、インライン展開を行っている。その結
果プログラム(a)は図5(b)に示すプログラム
(b)のようになり、インライン展開を行うことによっ
てコードサイズが削減される。
【0021】図6に示すプログラム例はC言語で書かれ
ており、同図(a)に示すプログラム(a)は引数を用
いた計算のインライン展開判断のコスト計算を行う例で
ある。関数fは引数a,bを受け取りaとbを用いて計
算を行い、その結果を返している。関数gでは関数fを
呼び出しその返却値を変数に代入している。なお、プロ
グラム中の「……」の部分は説明には関係ない部分を省
略していることを表している。プログラム(a)の関数
g中での関数fの呼び出しの部分で関数fのコストを計
算すると関数コールを行う場合より低くなるので、イン
ライン展開を行っている。その結果プログラム(a)は
図6(b)に示すプログラム(b)のようになり、イン
ライン展開を行うことによってコードサイズが削減され
る。
【0022】図7に示すプログラム例はC言語で書かれ
ており、同図(a)に示すプログラム(a)はアドレス
計算のインライン展開判断のコスト計算を行う例であ
る。関数fは引数p,a,bを受け取り配列pのa番目
にbを代入し、代入する前に入っていた値を返却するも
のである。関数gでは関数fを呼び出しその返却値を変
数に代入している。なお、プログラム中の「……」の部
分は説明には関係ない部分を省略していることを表して
いる。プログラム(a)の関数g中での関数fの呼び出
しの部分で関数fのコストを計算すると関数コールを行
う場合より低くなるので、インライン展開を行ってい
る。その結果プログラム(a)は図7(b)に示すプロ
グラム(b)のようになり、インライン展開を行うこと
によってコードサイズが削減される。
【0023】図8に示すプログラム例はC言語で書かれ
ており、同図(a)に示すプログラム(a)は最適化の
結果引数が定数と評価できる場合のインライン展開判断
のコスト計算を行う例である。関数fは図5に示す関数
fと同じものである。関数gでは自動変数a,bを宣言
し、関数fをa,b引数として呼び出しその返却値を変
数に代入いている。なお、プログラム中の「……」の部
分は説明には関係ない部分を省略していることを表して
いる。プログラム(a)の関数g中での関数fの呼び出
しの部分で関数fの引数は最適化の結果定数となるの
で、関数fのコストを計算すると関数コールを行う場合
より低くなるので、インライン展開を行っている。その
結果プログラム(a)は図8(b)に示すプログラム
(b)のようになり、インライン展開を行うことによっ
てコードサイズが削減される。
【0024】図9はオブジェクトコードのサイズを従来
の手法を用いた場合と本発明を用いた場合とで比較した
ものである。同図(a)に示すプログラムはC言語で書
かれたソースプログラムであり、関数fは図5に示す関
数fと同じものであり、関数gは関数fをコールしてい
る。同図(b)は図11に示す従来の手法を用いて同図
(a)に示すソースプログラムをコンパイルした結果の
アセンブラコードを示している。図9(c)は本発明を
用いて同図(a)に示すソースプログラムをコンパイル
した結果のアセンブラコードを示している。図9(b)
に示すコンパイル例ではコード数が38ステップである
のに対して、同図(c)に示すコンパイル例ではコード
数が5ステップとなり、引数を考慮してインライン展開
することによりコード数が86%減少する。また、関数
fのコードを含まない関数gのコードで比較しても75
%減少する。
【0025】このように、関数のインライン展開におい
て関数の静的コードサイズが大きい場合でも、定数とな
る引数で関数を最適化してコードサイズが上限より小さ
くなる場合についてはインライン展開を行うことができ
るようになる。
【0026】
【発明の効果】以上説明したように、この発明によれ
ば、インライン展開の対象となる関数に定数となる引数
があり、この引数を用いて最適化した後の関数のコスト
が関数コールした際のコストよりも小さくなる場合に
は、関数をインライン展開するようにしたので、インラ
イン展開により関数のコードサイズが小さくなり、プロ
グラム全体のコードを削減することができる。
【図面の簡単な説明】
【図1】請求項1又は2記載の発明の一実施形態に係る
コンパイラ装置の構成を示す図である。
【図2】請求項1又は3記載の発明の一実施形態に係る
コンパイラ装置の構成を示す図である。
【図3】インライン展開部の構成を示す図である。
【図4】インライン展開を行った場合と行わなかった場
合のプログラム例を示す図である。
【図5】インライン展開を行った場合と行わなかった場
合の他のプログラム例を示す図である。
【図6】インライン展開を行った場合と行わなかった場
合の他のプログラム例を示す図である。
【図7】インライン展開を行った場合と行わなかった場
合の他のプログラム例を示す図である。
【図8】インライン展開を行った場合と行わなかった場
合の他のプログラム例を示す図である。
【図9】インライン展開を行った場合と行わなかった場
合の他のプログラム例を示す図である。
【図10】インライン展開を判断する従来の展開判断部
の構成を示す図である。
【図11】インライン展開を判断する従来の展開判断部
の他の構成を示す図である。
【符号の説明】 1 前処理部 2 中間コード生成部 3 中間コード最適部 4,8 アセンブラコード生成部 5 アセンブラコードコンパイル部 6 インライン展開部 7 その他の処理部 9 アセンブラコード最適部 10 展開判断部 11 コスト計算処理部 12 判断処理部

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 高級言語で記述されたソースプログラム
    の関数をインライン展開するインライン展開部を備えた
    コンパイラ装置おいて、 インライン展開の対象となる対象関数に受け渡される引
    数がある場合に、前記引数を最適化し、最適化の結果前
    記引数が定数であるか否かを評価する引数評価部と、 前記評価部において前記引数が定数であると評価された
    場合は、前記引数を用いて前記対象関数を最適化し、最
    適化された関数のコストならびに前記対象関数をコール
    する際のコストを計算するコスト計算処理部と、 前記コスト計算処理部によって計算された両コストを比
    較し、前記引数により最適化された前記対象関数のコス
    トが前記対象関数をコールする際のコストよりも小さい
    場合に前記対象関数をインライン展開すると判断し、判
    断結果を前記インライン展開部に与える判断処理部を有
    することを特徴とするコンパイラ装置。
  2. 【請求項2】 ソースプログラムから中間コードを生成
    した後アセンブラコードを生成し続いてオブジェクトプ
    ログラムを作成するコンパイラ装置であって、 中間コ
    ードが生成される段階でインライン展開を行うか否かを
    判断してインライン展開を行うことを特徴とする請求項
    1記載のコンパイラ装置。
  3. 【請求項3】 ソースプログラムからアセンブラコード
    を生成した後オブジェクトプログラムを作成するコンパ
    イラ装置であって、 アセンブラコードが生成される段階でインライン展開を
    行うか否かを判断してインライン展開を行うことを特徴
    とする請求項1記載のコンパイラ装置。
JP12248997A 1997-05-13 1997-05-13 コンパイラ装置 Pending JPH10312291A (ja)

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)

* Cited by examiner, † Cited by third party
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

Cited By (2)

* Cited by examiner, † Cited by third party
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