JPH1031591A - 関数のインライン展開装置 - Google Patents

関数のインライン展開装置

Info

Publication number
JPH1031591A
JPH1031591A JP18447596A JP18447596A JPH1031591A JP H1031591 A JPH1031591 A JP H1031591A JP 18447596 A JP18447596 A JP 18447596A JP 18447596 A JP18447596 A JP 18447596A JP H1031591 A JPH1031591 A JP H1031591A
Authority
JP
Japan
Prior art keywords
function
call
definition
inline expansion
stored
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
JP18447596A
Other languages
English (en)
Inventor
Hideki Yamamoto
秀喜 山本
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.)
KOBE NIPPON DENKI SOFTWARE KK
NEC Software Kobe Ltd
Original Assignee
KOBE NIPPON DENKI SOFTWARE KK
NEC Software Kobe 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 KOBE NIPPON DENKI SOFTWARE KK, NEC Software Kobe Ltd filed Critical KOBE NIPPON DENKI SOFTWARE KK
Priority to JP18447596A priority Critical patent/JPH1031591A/ja
Publication of JPH1031591A publication Critical patent/JPH1031591A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】異なるコンパイル単位に存在する関数のインラ
イン展開を可能化。 【解決手段】関数呼出し発見手段1は、複数のオブジェ
クトプログラム中に関数呼出しが存在するかどうかを判
定し、存在する場合は、関数呼出し情報テーブル6を作
成する。関数定義発見手段2は、関数呼出し情報テーブ
ル6に格納されている関数呼出しの関数定義を検索し、
関数定義テーブルを作成し、該当関数のサイズ、および
関数のオブジェクトをコピーする。プロローグ・エピロ
ーグ除去手段3は、関数定義テーブルに格納されている
関数のオブジェクトに対して、インライン展開により不
要になるプロローグ及び、エピローグの除去を行う。関
数インライン展開手段4は、関数定義テーブルに格納さ
れている関数について、関数呼出しテーブルを参照し、
関数呼出し箇所に関数テーブルに格納されているオブジ
ェクトを埋め込み、関数呼出し命令を削除する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラムにおい
て呼び出される関数のインライン展開装置に関する。
【0002】
【従来の技術】高級言語におけるプログラムの作成の手
順では、一般に、機能毎に関数の作成およびファイルの
分割を行うことになる。この機能毎に作成された関数
は、小さな単位のものが多く、関数呼び出し部分での引
数の受渡し処理、戻り番地の設定、返却値の処理、関数
呼び出し(以下、呼び出し列と記す)、呼び出された関
数のはじめに行う動的スタックの割り当て、退避の必要
なレジスタの退避、戻り番地の保存などの処理(以下、
プロローグ処理と記す)および呼び出された関数の終り
で行う動的スタックの解放、退避したレジスタの復帰、
返却値の設定、戻り番地へ戻る処理(以下、エピローグ
処理と記す)などの関数呼び出しであるために生成され
るコードが生成され、関数本体が小さい程そのオーバー
ヘッドの割合が大きくなる。
【0003】このオーバーヘッドをなくすため従来は、
コンパイラがソースをコンパイルする際、ソースプログ
ラム単位内に関数の呼び出しがあり、その関数の定義が
同一のソースプログラム単位内に存在する場合に、その
関数の呼び出し箇所で呼び出し列のコードを生成し関数
の呼び出しのを行うのではなく、関数の呼び出し列の代
りに、プロローグ処理、エピローグ処理を除いた関数の
本体のコードを埋め込む処理(以下、インライン展開と
記す)を行い、上述した、関数呼び出し時の呼び出し
列、呼び出された関数のプロローグ処理、エピローグ処
理などの関数の本体とは関係のないコードを削除する事
により実行プログラム実行速度を向上させている。
【0004】
【発明が解決しようとする課題】上述した従来の関数イ
ンライン展開方式では、呼出し頻度の高い関数が存在し
たとしても、コンパイラは、ソースプログラム単位にコ
ンパイルを行うため、関数を呼び出しているソースプロ
グラムと、関数の定義があるソースプログラムが異なる
場合、関数を呼び出しているソースプログラムのコンパ
イル時に、関数のコードを解決する事ができず、関数オ
インライン展開を行えないという問題点がある。
【0005】本発明は、上述の点に鑑みなされたもので
あり、実行プログラムの実行速度を向上させるために関
数のインライン展開をコンパイル時に行うのではなく、
オブジェクトプログラムのリンク時に、リンカによる各
関数の呼出し部分に関数定義のオブジェクトを埋め込
み、関数のインライン展開を行う関数インライン展開装
置を提供することにある。
【0006】
【課題を解決するための手段】本発明の関数のインライ
ン展開装置は、プログラムで呼出される関数のインライ
ン展開を、当該プログラムのオブジェクトファイルをま
とめて、実行プログラムを作成するリンク時に行うこと
を特徴とする。
【0007】より具体的には、本発明に係わる関数のイ
ンライン展開装置は、オブジェクトプログラムを読み込
んで、実行プログラムを作成するリンク過程に於いて、
複数のオブジェクトプログラム中に関数呼出しが存在す
る場合、呼び出し関数の関数名、および関数の呼出し位
置を構成要素とし、各関数呼出し毎に作成される関数呼
出し情報テーブルと、関数呼出し情報テーブルから検索
された関数が末端関数かどうかを判定し、末端関数であ
る場合に、関数のサイズ、関数のオブジェクトを構成要
素とする関数定義テーブルと、オブジェクトプログラム
中の関数呼出しを検索し、関数呼び出しテーブルを作成
する関数呼出し発見手段と、関数呼出し情報テーブルに
格納されている関数呼出しの関数定義を検索し、その関
数が末端関数かどうかを判定し、関数定義テーブルを作
成する関数定義発見手段と、関数定義テーブルに格納さ
れている関数のオブジェクトに対して、インライン展開
により不要になる、関数のプロローグ及びエピローグ命
令の除去を行うプロローグ・エピローグ除去手段と、関
数定義テーブルに格納されている関数について、関数呼
出しテーブルを参照し、関数呼出し箇所に関数テーブル
に格納されているオブジェクトを埋め込み、関数呼出し
命令を削除する関数インライン展開手段と、関数インラ
イン展開手段によりインライン関数の親関数のオブジェ
クト内のジャンプ命令とジャンプ命令先の相対アドレス
を修正する参照アドレス変更手段とを有している。
【0008】
【発明の実施の形態】以下、本発明の実施例につき図面
を参照して説明する。
【0009】図1は、本発明のリンカによる関数のイン
ライン展開装置の一実施例を示す構成図であり、オブジ
ェクトプログラム(図示せず)を入力して関数呼出し情
報テーブル6を作成する関数呼出し発見手段1と、関数
呼出し情報テーブル6を参照し関数定義テーブル7を作
成する関数定義発見手段2と、関数定義テーブル7内の
関数のオブジェクトのプロローグ、及びエピローグを削
除するプロローグ・エピローグ除去手段3と、関数定義
テーブル7と関数呼出し情報テーフル6を参照し関数の
インラインを行う関数インライン展開手段4と、インラ
イン展開後のオブジェクトのラベル参照の相対アドレス
を補正する参照アドレス変更手段5とから構成されてい
る。
【0010】本発明のリンカによる関数のインライン展
開装置は、通常のリンカのリンク処理に先だって、以下
に記する処理を行うことにより、実行速度の最適化を行
うものである。
【0011】先ず、関数呼出し発見手段1は、全てのオ
ブジェクトプログラムのデータ部のエントリのうち、関
数の呼び出し位置、シンボルテーブルへのインデック
ス、およびリロケーションタイプなどの情報を持つエン
トリ(以下、リロケーションエントリと記す)を検索
し、また、そのリロケーションエントリが示すシンボル
名、関数の先頭アドレス、関数の終了アドレスなどの情
報を持つシンボルテーブルをオブジェクトプログラムか
ら検索する。これらの検索の結果、検出したリロケーシ
ョンエントリ、およびシンボルテーブルから関数呼び出
し情報テーブル6を生成する。
【0012】関数呼出し情報テーブル6は、図2に示す
ように、呼出し関数の関数名、および呼出し関数の関数
の呼出し位置を構成要素として構成されており、関数呼
び出し発見手段1で検出したオブジェクトプログラムの
データ部のリロケーションエントリから得られる関数の
呼び出し位置を関数呼び出し情報テーブル6に設定す
る。また、関数呼び出し手段1により検出したシンボル
テーブルから得られる関数名を関数呼び出しテーブル6
に設定して関数呼び出し情報テーブル6を生成する。
【0013】次に、関数定義発見手段2は、関数呼び出
し、および関数定義単位に作成されていて複数個存在す
るシンボルテーブルから、関数の先頭アドレス、および
終了アドレスが設定されているシンボルテーブルを選定
し、更に関数の先頭アドレス、および終了アドレスが設
定されているシンボルテーブルの中から関数呼出し発見
手段1が作成した関数呼出し情報テーブル6の関数名に
対応するシンボルテーブルを選定する。ここで、関数呼
び出しで作成されたシンボルテーブルは、コンパイラが
シンボルテーブルの作成時、関数の先頭アドレス、およ
び関数の終了アドレスは解決できていないため、関数の
先頭アドレス、および関数の終了アドレスを設定してい
ない。関数定義発見手段2は、選定したシンボルテーブ
ルの関数の先頭アドレス、関数の終了アドレスから関数
のサイズを取得し、関数定義テーブル7に設定する。
【0014】また、関数定義発見手段2は、オブジェク
トプログラムのオブジェクト内の検出したシンボルテー
ブルの関数の先頭アドレスから、関数の終了アドレスま
でのオブジェクトを関数定義テーブル7に設定する。ま
た、関数のオブジェクトの全ての命令を調べ他の関数呼
び出し命令があるかどうかを判定する。関数呼び出し命
令がない場合、関数の呼び出しのない関数(以下、末端
関数と記す)と判定し、関数定義テーブル7を生成す
る。
【0015】関数定義テーブル7は、図3に示すよう
に、関数のサイズ、および関数のオブジェクトを構成要
素として構成されており、関数定義発見手段2で検出し
た該当関数の関数のサイズと関数定義のオブジェクトを
コピーし、関数定義テーブル7が生成される。
【0016】次に、プロローグ・エピローグ除去手段3
は、関数定義発見手段2が作成した関数定義テーブル7
の各関数のオブジェクトについて、関数をインライン展
開することにより不要になる、プロローグ処理の命令、
エピローグ処理の命令を除去する。
【0017】次に、関数インライン展開手段4は、プロ
ローグ・エピローグ除去手段3で、プロローグ・エピロ
ーグ命令の除去済みの関数定義テーブル7の各関数のオ
ブジェクトを、関数呼出し情報テーブル6の関数呼出し
位置を参照し、その呼出し位置に埋め込む。オブジェク
トを呼出し位置に埋め込んだ後、該当関数の呼出し命令
等の呼び出し列の命令を除去する。
【0018】最後に、参照アドレス変更処理5は、関数
インライン手段4でインライン展開を行った該当関数
(以下、インライン関数と記す)を呼び出している関数
(以下、親関数と記す)に、インライン関数を跨ぐジャ
ンプ命令が存在する場合、インライン関数をインライン
展開したことにより、ジャンプ命令と、ジャンプ先との
相対アドレスを変化するため、ジャンプ命令とジャンプ
先命令との相対アドレスを計算し修正する。また、親関
数のサイズも再計算し、親関数のシンボルテーブルの関
数の終了アドレスを更新する。
【0019】以上の実施例は、インライン関数が末端関
数の場合であるが、本発明は、これに限定されることな
く、インライン関数が末端関数でない場合にも適用でき
る。すなわち、このような発明は、上述の実施例におけ
る関数呼び出し発見手段1,関数定義発見手段2,プロ
ローグ・エピローグ除去手段3,関数インライン展開手
段4および参照アドレス変更手段5を関数呼び出しがな
くなるまで繰り返し機能させることにより実現できる。
【0020】
【発明の効果】以上説明したように、本発明は、リンカ
による関数のインライン展開による実行速度の最適化を
行うものであって、ソースプログラム単位の異なる関数
の呼出し関係があっても関数のインライン展開が行える
ため、関数呼出しによるオーバーヘッドを小さくするこ
とができ実行プログラムの実行速度が向上するという効
果がある。
【図面の簡単な説明】
【図1】本発明の一実施例を示す構成図である。
【図2】本発明の構成要素である関数呼出し情報テーブ
ルの構成図である。
【図3】本発明の構成要素である関数定義テーブルの構
成図である。
【符号の説明】
1 関数呼び出し発見手段 2 関数定義発見手段 3 プロローグ・エピローグ除去手段 4 関数インライン展開手段 5 参照アドレス変更手段 6 関数呼出し情報テーブル 7 関数定義テーブル

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 プログラムで呼出される関数のインライ
    ン展開を、当該プログラムのオブジェクトファイルをま
    とめて、実行プログラムを作成するリンク時に行うこと
    を特徴とする関数のインライン展開装置。
  2. 【請求項2】 複数のオブジェクトプログラム中の関数
    呼出しが存在する場合、呼び出し関数の関数名、および
    関数の呼出し位置を構成要素とし、各関数呼出し毎に作
    成される関数呼出し情報テーブルと、 該関数呼出し情報テーブルから検出された関数のサイ
    ズ、関数のオブジェクトを構成要素とする関数定義テー
    ブルと、 オブジェクトプログラム中の関数呼出しを検索し、前記
    関数呼び出しテーブルを作成する関数呼出し発見手段
    と、 前記関数呼出し情報テーブルに格納されている関数呼出
    しの関数定義を検索し、前記関数定義テーブルを作成す
    る関数定義発見手段と、 前記関数定義テーブルに格納されている関数のオブジェ
    クトに対して、インライン展開により不要になる、関数
    のプロローグ及びエピローグ命令の除去を行うプロロー
    グ・エピローグ除去手段と、 前記関数定義テーブルに格納されている関数について、
    関数呼出しテーブルを参照し、関数呼出し箇所に関数テ
    ーブルに格納されているオブジェクトを埋め込み、関数
    呼出し命令を削除する関数インライン展開手段と、 前記関数インライン展開手段によるインライン関数の親
    関数のオブジェクト内のジャンプ命令とジャンプ命令先
    の相対アドレスを修正する参照アドレス変更手段とを有
    することを特徴とする請求項1記載の関数のインライン
    展開装置。
  3. 【請求項3】 前記関数定義発見手段は、前記関数呼出
    し情報テーブルから検索された関数が末端関数かどうか
    を判定し、前記関数定義テーブルを作成することを特徴
    とする請求項2記載の関数のインライン展開装置。
JP18447596A 1996-07-15 1996-07-15 関数のインライン展開装置 Pending JPH1031591A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP18447596A JPH1031591A (ja) 1996-07-15 1996-07-15 関数のインライン展開装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP18447596A JPH1031591A (ja) 1996-07-15 1996-07-15 関数のインライン展開装置

Publications (1)

Publication Number Publication Date
JPH1031591A true JPH1031591A (ja) 1998-02-03

Family

ID=16153825

Family Applications (1)

Application Number Title Priority Date Filing Date
JP18447596A Pending JPH1031591A (ja) 1996-07-15 1996-07-15 関数のインライン展開装置

Country Status (1)

Country Link
JP (1) JPH1031591A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008217193A (ja) * 2007-03-01 2008-09-18 Nec Corp プレリンクシステム、プレリンク方法、及びプログラム
JP2012198823A (ja) * 2011-03-22 2012-10-18 Fujitsu Ltd シーケンス処理プログラム、シーケンス処理装置およびシーケンス処理方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008217193A (ja) * 2007-03-01 2008-09-18 Nec Corp プレリンクシステム、プレリンク方法、及びプログラム
JP2012198823A (ja) * 2011-03-22 2012-10-18 Fujitsu Ltd シーケンス処理プログラム、シーケンス処理装置およびシーケンス処理方法

Similar Documents

Publication Publication Date Title
JP2811990B2 (ja) プログラム処理装置及びプログラム処理方法
JP3190773B2 (ja) 言語処理プログラムのコンパイル処理方法
JP4181326B2 (ja) コード最適化のための方法、装置及びプログラム
JP4118456B2 (ja) プログラム言語処理システム、コード最適化方法、及び機械読み出し可能な記憶媒体
EP0740251B1 (en) Optimization apparatus for removing hazards by arranging instruction order
US8510727B2 (en) Link-time redundant code elimination using functional equivalence
US20110119660A1 (en) Program conversion apparatus and program conversion method
US20010032306A1 (en) Memory disambiguation scheme for partially redundant load removal
JPH02205929A (ja) コンパイル方法
JPH11242597A (ja) Javaバイトコードデータのフローグラフの生成方法
JPH0926884A (ja) バイナリ操作を必要とするタスク中に必要なフロー情報を使用可能とする方法および装置
US7689975B2 (en) Processing of a compileable computer program
JPH1031591A (ja) 関数のインライン展開装置
US6976247B1 (en) Generating an executable file
JPH0689187A (ja) インライン展開最適化方法
JP2585793B2 (ja) コンパイラシステム
JP2000056981A (ja) プログラム変換装置
JPH11149380A (ja) コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体
JP2002073347A (ja) 例外処理方法及びコンパイラ
JP3714201B2 (ja) コール命令並び替え方法と装置並びにプログラム
JP2001290656A (ja) 差分コンパイル方式
JPH08297577A (ja) 無条件分岐最適化方式
JPH10312291A (ja) コンパイラ装置
JP3604936B2 (ja) 最適化方法,最適化装置及び記録媒体
JPH08263300A (ja) インライン展開方式

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19990907