JPH08263300A - インライン展開方式 - Google Patents

インライン展開方式

Info

Publication number
JPH08263300A
JPH08263300A JP7087553A JP8755395A JPH08263300A JP H08263300 A JPH08263300 A JP H08263300A JP 7087553 A JP7087553 A JP 7087553A JP 8755395 A JP8755395 A JP 8755395A JP H08263300 A JPH08263300 A JP H08263300A
Authority
JP
Japan
Prior art keywords
function
condition
code
inline expansion
calling
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
JP7087553A
Other languages
English (en)
Inventor
Saori Nakamura
さおり 中村
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP7087553A priority Critical patent/JPH08263300A/ja
Publication of JPH08263300A publication Critical patent/JPH08263300A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 目的プログラムの実行効率の向上を図り、か
つ目的プログラムのコードサイズの増加を抑える。 【構成】 関数情報抽出手段1は、原始プログラム11
中の条件包含関数(条件判断部分とその条件判断部分の
条件に対する条件依存処理とからなる関数)を検出し、
当該条件包含関数に対する関数情報を抽出する。関数生
成手段2は、関数情報に基づき、条件包含関数から条件
判断部分を除いた関数である条件判断除去関数を生成す
る。インライン展開手段3は、関数情報に基づき、条件
包含関数を呼び出している呼出し部分を検出し、当該呼
出し部分に当該条件包含関数中の条件判断部分のコード
と当該条件包含関数に対する条件判断除去関数の呼出し
コードとをインライン展開する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、原始プログラムを目的
プログラムに変換するコンパイラに関し、特に、より実
行効率の良い目的プログラムを生成することを目的とし
てコンパイラ内のコード最適化部においてインライン展
開を行うインライン展開方式に関する。
【0002】
【従来の技術】従来より、コンパイラにおけるコード最
適化の手法の1つとして、「インライン展開」の手法が
存在する。
【0003】このインライン展開は、原始プログラム中
の関数(副手続き)を呼び出している部分(呼出し部
分)に対して、関数呼出しのコード(「call…」と
いったコード)を生成する代わりに、呼び出される関数
のコードを直接展開する手法である。なお、本願明細書
では、呼び出される関数のコードの全てではなくその一
部を呼出し部分に展開する場合にも、「インライン展
開」と呼ぶものとする。
【0004】一般的に、あるプログラム(単に「プログ
ラム」というときは原始プログラムも目的プログラムも
包含した概念を示している)が関数呼出しを含む場合に
は、呼び出される関数内で使用されるレジスタの退避お
よび復帰や、呼び出される関数のスタックフレームの生
成および削除等の処理が必要になるため、そのプログラ
ムの実行速度が遅くなる。
【0005】このような場合に、インライン展開が行わ
れると、「呼び出される関数」が呼出し部分の一部とな
るので、関数呼出し時のオーバヘッドを回避することが
できる。したがって、このようなインライン展開の手法
はコード最適化の手法の1つとして採用されている。
【0006】ただし、このようなインライン展開を行う
従来のインライン展開方式では、呼び出される関数の全
てのコードが呼出し部分に展開されるため、目的プログ
ラムのサイズが大きくなるという問題点があった。
【0007】このような問題点を解決するための従来の
インライン展開方式としては、必要な関数のみの選択的
なインライン展開を行う方式が提案されている(例え
ば、特開昭61−264441号公報,特開平3−26
8030号公報および特開平5−73335号公報参
照)。
【0008】ここで、「必要な関数のみの選択的なイン
ライン展開」における「必要な関数」の選択の手法とし
ては、次の〜に示すようなもの等がある(および
の手法は利用者による明示的な指定によって選択する
手法であり、の手法はコンパイラの自動的な判断によ
って選択する手法である)。 コンパイラに対してオプション(原始プログラム以
外の情報)による指示が与えられ、その指示で指定され
た関数のみの選択的なインライン展開が行われる。 コンパイラに対して原始プログラム中の指示行によ
って指示が与えられ、その指示で指定された関数のみの
選択的なインライン展開が行われる。 呼び出される関数のサイズや呼出し回数を解析する
ことによってコンパイラが自動的にインライン展開すべ
き関数を判断し、その判断に基づいて選択的なインライ
ン展開が行われる。
【0009】
【発明が解決しようとする課題】上述したように、従来
のインライン展開方式では、呼び出される関数の全ての
コードが呼出し部分に展開されるため、目的プログラム
のサイズが大きくなるという問題点があった。
【0010】従来のインライン展開方式では、このよう
に目的プログラムのサイズが大きくなることに起因し
て、以下のおよびに示す欠点が生じていた。 コンパイル時間の増加を招く。 目的プログラムを実行するコンピュータシステム
(ターゲットシステム)のプログラムキャッシュ容量が
小さい場合には、キャッシュに収める必要のあるプログ
ラム部分がキャッシュに収まりきらなくなり、キャッシ
ュを採用しているにもかかわらず逆に実行速度が著しく
遅くなる。
【0011】また、「インライン展開する関数を制限す
ることによって目的プログラムのコードサイズの増加を
防止する」という従来のインライン展開方式において
も、選択的にインライン展開された関数に関してはその
関数の全てのコードが呼出し部分に展開されているの
で、その関数の呼出し部分におけるコードサイズの増加
は避けられず、その呼出し部分については依然として上
述の欠点が生じるという問題点があった。
【0012】さらに、従来のインライン展開方式では、
関数について選択的なインライン展開を行う方式も含め
て、インライン展開以外のコード最適化との関連につい
ての考慮は特になされていなかったので、インライン展
開によるコード最適化と他のコード最適化とを総合した
全体的なコード最適化の効果の増大を図ることが難しい
という問題点があった。
【0013】本発明の目的は、上述の点に鑑み、インラ
イン展開の対象となる関数が条件判断部分とその条件が
成立した場合または成立しなかった場合にのみ実行され
る処理(条件判断の結果に依存して実行されるか実行さ
れないかが決まる処理。以下、「条件依存処理」とい
う)とから構成されている場合に、そのような特徴的な
構造を有する関数(このような関数を、以下、条件包含
関数という)の構造的特徴を利用して、展開対象の関数
(条件包含関数)中の一部のコードのみを呼出し部分に
インライン展開することにより、以下のおよびに示
すような特長を有するインライン展開方式を提供するこ
とにある。 目的プログラムのコードサイズの増加を抑えること
ができる。 目的プログラムの全体的なコード最適化の可能性を
向上させて、当該目的プログラムの実行効率の向上を図
ることができる。
【0014】なお、特開昭61−264441号公報,
特開平3−268030号公報および特開平5−733
35号公報等に記載されている「必要な関数のみの選択
的なインライン展開」を行う従来のインライン展開方式
と本願発明に係るインライン展開方式とを比べると、従
来の方式はプログラム中の一部の関数について選択的に
インライン展開を行っているのに対し、本願発明の方式
は展開すべき関数中の一部のコードについて選択的にイ
ンライン展開を行っている。すなわち、両者は、共通の
目的を有しているが、その目的を達成するための考え方
の方向性を異にしている。
【0015】
【課題を解決するための手段】本発明のインライン展開
方式は、条件判断部分とその条件判断部分の条件に対す
る条件依存処理とからなる条件包含関数,およびその条
件包含関数を呼び出している呼出し部分を有する原始プ
ログラムを目的プログラムに変換するコンパイラにおい
て、条件包含関数を検出し、「当該条件包含関数に対す
る条件判断除去関数の生成」,「当該条件包含関数を呼
び出している呼出し部分の検出」,および「当該呼出し
部分への当該条件包含関数中の条件判断部分のコードと
当該条件判断除去関数の呼出しコードとのインライン展
開」のために必要な関数情報を抽出する関数情報抽出手
段と、前記関数情報抽出手段により抽出された関数情報
に基づいて、条件包含関数から条件判断部分を除いた関
数である条件判断除去関数を生成する関数生成手段と、
前記関数情報抽出手段により抽出された関数情報に基づ
いて、条件包含関数を呼び出している呼出し部分を検出
し、当該呼出し部分に当該条件包含関数中の条件判断部
分のコードと当該条件包含関数に対するものとして前記
関数生成手段により生成された条件判断除去関数の呼出
しコードとをインライン展開するインライン展開手段と
を有する。
【0016】
【作用】本発明のインライン展開方式では、関数情報抽
出手段が条件包含関数(条件判断部分とその条件判断部
分の条件に対する条件依存処理とからなる関数)を検出
して当該条件包含関数に対する関数情報(「当該条件包
含関数に対する条件判断除去関数の生成」,「当該条件
包含関数を呼び出している呼出し部分の検出」,および
「当該呼出し部分への当該条件包含関数中の条件判断部
分のコードと当該条件判断除去関数の呼出しコードとの
インライン展開」のために必要な情報)を抽出し、関数
生成手段が関数情報抽出手段により抽出された関数情報
に基づいて条件包含関数から条件判断部分を除いた関数
である条件判断除去関数を生成し、インライン展開手段
が関数情報抽出手段により抽出された関数情報に基づい
て条件包含関数を呼び出している呼出し部分を検出し当
該呼出し部分に当該条件包含関数中の条件判断部分のコ
ードと当該条件包含関数に対するものとして関数生成手
段により生成された条件判断除去関数の呼出しコードと
をインライン展開する。
【0017】
【実施例】次に、本発明について図面を参照して詳細に
説明する。
【0018】図1は、本発明のインライン展開方式の一
実施例が適用されるコンパイラ10の構成を示すブロッ
ク図である。
【0019】コンパイラ10は、原始プログラム11を
入力し目的プログラム16を出力する言語処理系であ
り、構文意味解析部12と、コード最適化部13と、レ
ジスタ割付け部14と、コード生成部15とを含んで構
成されている。
【0020】本実施例のインライン展開方式は、コンパ
イラ最適化部13において実現され、条件包含関数(条
件判断部分と条件依存処理とのみからなる関数。なお、
条件依存処理よりも先に条件判断部分が実行される)の
定義,およびその条件包含関数を呼び出している呼出し
部分の定義を含むプログラムを対象としてインライン展
開を行う方式であり、関数情報抽出手段1と、関数生成
手段2と、インライン展開手段3とを含んで構成されて
いる。
【0021】図2は、本実施例のインライン展開方式に
よる処理を含むコード最適化部13における処理を示す
流れ図である。この処理は、全関数終了判定ステップ2
01と、関数構造解析ステップ202と、関数構造判定
ステップ203と、関数情報抽出ステップ204と、条
件判断除去関数生成ステップ205と、条件包含関数呼
出し部分検索ステップ206と、インライン展開ステッ
プ207と、他コード最適化適用ステップ208とから
なる。この流れ図で明らかなように、本実施例のインラ
イン展開方式によるインライン展開(コード最適化の1
つ)は、その他のコード最適化(ステップ208参照)
に先立って最初に行われる。これによって、目的プログ
ラム16に対する全体としてのコード最適化の実効を上
げることが可能になる。なお、「インライン展開手段3
によって行われるインライン展開によるコード最適化が
他のコード最適化に先立って行われること」がなくて
も、本発明のインライン展開方式を実現することは可能
であり、その場合にも「インライン展開を行いつつ、目
的プログラムのコードサイズの増加を抑える」という効
果を達成することはできる。
【0022】図3は、条件包含関数の構造を示す図であ
る。条件包含関数は、関数の入口と、条件判断部分(条
件が成立するか否かを判断する部分)と、条件判断部分
の条件が成立した場合にのみ実行される条件依存処理
と、関数の出口とからなる。すなわち、実体的には、条
件判断部分と条件依存処理とのみからなる(図3に示す
ように、条件判断部分は、条件依存処理よりも先に実行
される)。なお、図3では、条件依存処理が「条件判断
部分の条件が成立した場合にのみ実行される処理」であ
るとしたが、条件依存処理が「条件判断部分の条件が成
立しなかった場合にのみ実行される処理」であってもか
まわない。ただし、条件についての捉え方次第で、「条
件が成立しなかった場合にのみ実行される処理」とは
「条件が成立しないという条件が成立した場合にのみ実
行される処理」であると考えれば、全ての条件包含関数
を図3に示す構造で表現することが可能である。
【0023】図4〜図6は、本実施例のインライン展開
方式の具体的な動作を説明するための図である。
【0024】次に、このように構成された本実施例のイ
ンライン展開方式の動作について説明する。
【0025】コンパイラ10においては、原始プログラ
ム11に対する構文意味解析部12による解析処理の後
にコード最適化部13が起動され、コード最適化部13
は図2に示すような処理を行う。すなわち、コード最適
化部13は、各種のコード最適化の中で最初に、本実施
例のインライン展開方式によるコード最適化(関数情報
抽出手段1,関数生成手段2およびインライン展開手段
3によって実現されるインライン展開)を行う。
【0026】関数情報抽出手段1は、まず原始プログラ
ム11における全ての関数について後述するステップ2
02〜205の処理が終了したか否かを判定し(ステッ
プ201)、「終了していない」と判定した場合には未
処理の関数の1つの構造の解析を行い(ステップ20
2)、その関数が図3に示すような構造を持っているか
否か(その関数が条件包含関数であるか否か)をチェッ
クする(ステップ203)。
【0027】関数情報抽出手段1は、ステップ203で
「その関数が条件包含関数ではない(その関数が本発明
によるインライン展開の適用可能な構造ではない)」と
判定した場合には、再びステップ201の判定を行う。
【0028】関数情報抽出手段1は、ステップ203で
「その関数が条件包含関数である」と判定した場合に
は、その条件包含関数に対する関数情報を抽出して蓄積
する(ステップ204)。
【0029】ここで、当該条件包含関数に対する関数情
報とは、「当該条件包含関数に対する条件判断除去関数
(後述するステップ205で生成される新たな関数)の
生成」,「当該条件包含関数を呼び出している呼出し部
分の検出」,および「当該呼出し部分への当該条件包含
関数中の条件判断部分のコードと当該条件判断除去関数
の呼出しコードとのインライン展開」のために必要な情
報をいう。具体的には、以下のおよびに示す内容の
情報が考えられる(これらに限定されるものではな
い)。 当該条件包含関数の内容自体を示す情報 「当該条件包含関数の識別情報」と「当該条件判断
部分の内容および当該条件判断除去関数の識別情報(当
該条件判断除去関数が生成されることはステップ204
の時点で分かっているので当該条件判断除去関数に識別
情報を付与することは可能である)」との対応情報
【0030】次に、関数生成手段2は、ステップ204
で抽出された関数情報に基づいて、当該条件包含関数に
おける条件依存処理の部分のみからなる新たな関数(当
該条件包含関数から条件判断部分を除いた関数。条件判
断除去関数)を生成する(ステップ205)。
【0031】関数情報抽出手段1は、ステップ201で
「コンパイル対象の原始プログラム11に含まれる全て
の関数についてのステップ202〜205の処理が終了
した」と判定した場合には、インライン展開手段3に制
御を渡す。
【0032】インライン展開手段3は、1以上の条件包
含関数に対する関数情報(図2に示すように1以上の関
数情報が所定のファイル等に蓄積されている)に基づい
て、原始プログラム11中において条件包含関数を呼び
出している呼出し部分を検索する(ステップ206)。
【0033】次に、インライン展開手段3は、ステップ
206の検索で検出した呼出し部分に、当該呼出し部分
に対応する「条件判断部分を示すコードとステップ20
5で生成された条件判断除去関数の呼出しコードとの組
み合わせ」をインライン展開する(ステップ207)。
【0034】なお、コード最適化部13は、以上のよう
な本実施例のインライン展開方式による処理(インライ
ン展開)が終了した後に、さらにその他のコード最適化
を行う(ステップ208)。
【0035】ちなみに、コンパイラ10は、レジスタ割
付け部14およびコード生成部15の処理により、コー
ド最適化部13によるコード最適化が適用された目的プ
ログラム16を生成し出力する。
【0036】次に、本実施例のインライン展開方式の具
体的な動作および効果について説明する。ここでは、図
4に示すソースコード群を有する原始プログラム11に
対して本実施例のインライン展開方式が適用される場合
を例にとって説明する。
【0037】図4に示すソースコード群中の関数fおよ
び関数gは以下のおよびに示すような関数である。 関数fは、引数pが0である場合には所定の処理
(条件依存処理)を行わずに終了し、それ以外の場合に
のみ当該所定の処理を行う条件包含関数である。 関数gは、関数fの呼出し部分を含む関数である。
【0038】インライン展開が適用されない場合には、
図4に示すソースコード群に対して、図5に示すような
コード群(目的プログラム16中のコード群の基となる
コード群。図6でも同様)が生成される。
【0039】一方、本実施例のインライン展開方式によ
るインライン展開が適用される場合には、この原始プロ
グラム11に対して、図6に示すようなコード群が生成
される。
【0040】なお、図5および図6において、#で始ま
る行は、実際には様々な処理を含んでいる。また、図5
および図6中の(1)〜(16)は行番号を示してい
る。
【0041】初めに、本実施例のインライン展開方式に
よるインライン展開が適用された図6に示すコード群に
関する説明の前に、図5に示すコード群について説明す
る。
【0042】図5において、1行目のコードは関数fの
始まりを示し、2行目のコードは関数fの入口において
実行される処理(# prolog of f)を示
す。この「# prolog of f」で、レジスタ
の退避やスタックフレームの生成等が行われる。
【0043】3行目のコードは、引数pが置かれたレジ
スタp1の内容と0とを比較する処理を示す。
【0044】4行目のコードは、3行目の比較で両者が
等しい場合に関数fの終わりのラベルL2(6行目)に
跳ぶ処理を示す。
【0045】5行目のコードは、3行目の比較で両者が
等しくない場合に実行される関数f本体の処理(# b
ody of f。この処理が条件依存処理に該当す
る)を示す。
【0046】7行目のコードは、関数fの出口において
実行される処理(# epilogof f)を示す。
この「# epilog of f」で、レジスタの復
帰やスタックフレームの削除等が行われる(この後、8
行目のコードによって呼出し側に戻る)。
【0047】10行目以降のコード群は関数gに対する
コード群であり、入口の処理(11行目の「# pro
log of g」)の後に、関数g本体の処理(#…
の部分の処理)が行われる。
【0048】ここで、13〜15行目のコード群は関数
fの関数呼出しの処理を示す。すなわち、まず引数とし
て渡す値がメモリ$iから作業用レジスタw1にロード
され(13行目)、これが引数用のレジスタp1に渡さ
れ(14行目)、その後で関数fが呼び出される(15
行目)。
【0049】インライン展開が行われない場合には、上
述の13〜15行目に示すように、関数fの関数呼出し
が必要になり、当該コード群に基づいて生成される目的
プログラム16の実行効率が低下する。一方、従来のイ
ンライン展開方式によるインライン展開では、関数fの
全てのコード群を関数g内の「関数fの呼出し部分」に
展開する必要があり、目的プログラム16のコードサイ
ズが過大になる。
【0050】続いて、図6に示すコード群について、上
述の図5に示すコード群と対比して説明する。これによ
って、本実施例のインライン展開方式の具体的な動作お
よび効果を明らかにする。
【0051】関数fは、本実施例のインライン展開方式
によるインライン展開が適用可能な関数(条件包含関
数)であるので、関数fに対しては図6中の1行目から
5行目までに示すような関数f_のコード群が出力され
る。このような関数f_が関数生成手段2によって生成
される「条件判断除去関数」に該当する。このとき、関
数f中の条件判断部分のコード群は関数f_内に生成さ
れない。
【0052】また、関数fに対する関数情報は、関数情
報抽出手段1によって、図4に示すソースコード群から
抽出されて蓄積されている。
【0053】7行目以降のコード群は、関数gに対する
コード群であり、図5中の10行目以降のコード群に対
応するものである。
【0054】これらのコード群の中の10〜14行目の
コード群は、先に関数情報抽出手段1によって抽出され
た関数情報(関数fに対する関数情報)に基づいてイン
ライン展開が行われた部分である。このようなインライ
ン展開は、インライン展開手段3によって関数g内の関
数fの呼出し部分が検出された結果として、その呼出し
部分(関数呼出しの処理を実行する部分)に対して行わ
れるものである。
【0055】10および11行目のコード群は、引数と
して渡される変数(制御変数)の値が条件判断部分に適
用される部分である。これらのコード群の存在によっ
て、条件(p(関数g中ではi)≠0)が成立する場合
にのみ関数f_が呼び出され、成立しない場合には呼出
し部分の後のラベルL10(15行目)に制御が跳ぶ。
【0056】このようなインライン展開によって最適化
されたコード群(図6に示すコード群)では、関数gの
実行の過程で変数iの値が0であれば関数f_の関数呼
出しが起こらないので、図5に示すコード群で生じてい
た関数呼出しの際のオーバヘッドを削減することができ
る。
【0057】ここで、関数fに対する呼出し部分が1箇
所であれば、図5に示すコード群に対する図6に示すコ
ード群のコードサイズの増加は生じない。
【0058】また、このようなインライン展開によるコ
ード最適化の後に行われる関数g内の他のコード最適化
の結果として、変数iに定数が伝播することがあれば、
図6中の11および12行目の条件判断部分自体を削除
することが可能となり、インライン展開によるコード最
適化と他のコード最適化とを総合した全体的なコード最
適化の効果の増大を図ることができる。
【0059】
【発明の効果】以上説明したように本発明は、条件包含
関数についてはその構造的な特徴を利用して条件判断部
分と所定の呼出し部分(関数生成手段によって生成され
る条件判断除去関数の呼出しコード)とに関するインラ
イン展開だけが行われるので、条件判断部分の条件判断
の結果によっては関数呼出しが起こらず、インライン展
開が行われない場合に比べて関数呼出しのオーバヘッド
を削減することができるという効果を有する。
【0060】また、インライン展開が適用された呼出し
部分における他のコード最適化(インライン展開以外の
コード最適化)の結果として条件判断部分の条件判断の
結果がコンパイル時に一義的に決定されたならば、条件
判断部分自体を削除することが可能になるので、インラ
イン展開によるコード最適化と他のコード最適化とを総
合した全体的なコード最適化の効果の増大を図ることが
できるという効果がある。例えば、呼出し部分に対して
インライン展開された条件判断部分の制御変数に定数が
伝播することがあれば当該条件判断部分の条件判断の結
果が一義的に決まるので、その条件判断部分を削除する
ことができ、より大きなコード最適化の効果を得ること
ができる。
【0061】さらに、本発明によるインライン展開を経
て生成された目的プログラムのコードサイズは、インラ
イン展開を適用しない場合に比べて、呼出し部分側での
増加は条件判断部分の増加のみに抑えられ、呼び出され
る条件包含関数側ではかえって減少する。したがって、
本発明によると、プログラム中の呼出し部分(インライ
ン展開の展開箇所)が1箇所であれば、インライン展開
が適用されない目的プログラムと比べて、目的プログラ
ム全体としてのコードサイズの増加なしに、その目的プ
ログラムの実行効率を向上させることができるという効
果がある(たとえ展開箇所が複数箇所であっても大幅な
コードサイズの増加は生じない)。
【図面の簡単な説明】
【図1】本発明のインライン展開方式の一実施例が適用
されるコンパイラの構成を示すブロック図である。
【図2】図1中のコード最適化部における処理を示す流
れ図である。
【図3】条件包含関数の構造を示す図である。
【図4】本発明のインライン展開方式の具体的な動作を
説明するための図(図1中の原始プログラム中のソース
コード群の一例を示す図)である。
【図5】本発明のインライン展開方式の具体的な動作を
説明するための図(インライン展開が適用されない場合
の図4に示すソースコード群に対するコード群(図1中
の目的プログラム16中のコード群の基となるコード
群。図6でも同様)を示す図)である。
【図6】本発明のインライン展開方式の具体的な動作を
説明するための図(図1に示すインライン展開方式によ
るインライン展開が適用された場合の図4に示すソース
コード群に対するコード群を示す図)である。
【符号の説明】
1 関数情報抽出手段 2 関数生成手段 3 インライン展開手段 10 コンパイラ 11 原始プログラム 12 構文意味解析部 13 コード最適化部 14 レジスタ割付け部 15 コード生成部 16 目的プログラム

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 条件判断部分とその条件判断部分の条件
    に対する条件依存処理とからなる条件包含関数,および
    その条件包含関数を呼び出している呼出し部分を有する
    原始プログラムを目的プログラムに変換するコンパイラ
    において、 条件包含関数を検出し、「当該条件包含関数に対する条
    件判断除去関数の生成」,「当該条件包含関数を呼び出
    している呼出し部分の検出」,および「当該呼出し部分
    への当該条件包含関数中の条件判断部分のコードと当該
    条件判断除去関数の呼出しコードとのインライン展開」
    のために必要な関数情報を抽出する関数情報抽出手段
    と、 前記関数情報抽出手段により抽出された関数情報に基づ
    いて、条件包含関数から条件判断部分を除いた関数であ
    る条件判断除去関数を生成する関数生成手段と、 前記関数情報抽出手段により抽出された関数情報に基づ
    いて、条件包含関数を呼び出している呼出し部分を検出
    し、当該呼出し部分に当該条件包含関数中の条件判断部
    分のコードと当該条件包含関数に対するものとして前記
    関数生成手段により生成された条件判断除去関数の呼出
    しコードとをインライン展開するインライン展開手段と
    を有することを特徴とするインライン展開方式。
  2. 【請求項2】 関数情報抽出手段により抽出される関数
    情報が条件包含関数の内容自体を示す情報であることを
    特徴とする請求項1記載のインライン展開方式。
  3. 【請求項3】 関数情報抽出手段により抽出される関数
    情報が「条件包含関数の識別情報」と「条件判断部分の
    内容および条件判断除去関数の識別情報」との対応情報
    であることを特徴とする請求項1記載のインライン展開
    方式。
  4. 【請求項4】 インライン展開手段によって行われるイ
    ンライン展開によるコード最適化が他のコード最適化に
    先立って行われることを特徴とする請求項1,請求項2
    または請求項3記載のインライン展開方式。
JP7087553A 1995-03-20 1995-03-20 インライン展開方式 Pending JPH08263300A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7087553A JPH08263300A (ja) 1995-03-20 1995-03-20 インライン展開方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7087553A JPH08263300A (ja) 1995-03-20 1995-03-20 インライン展開方式

Publications (1)

Publication Number Publication Date
JPH08263300A true JPH08263300A (ja) 1996-10-11

Family

ID=13918187

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7087553A Pending JPH08263300A (ja) 1995-03-20 1995-03-20 インライン展開方式

Country Status (1)

Country Link
JP (1) JPH08263300A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10340193A (ja) * 1997-06-06 1998-12-22 Nec Corp 言語処理装置、言語処理方法およびその記録媒体
JP2019003437A (ja) * 2017-06-15 2019-01-10 富士通株式会社 情報処理装置、コンパイラ方法、およびコンパイラプログラム

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62267832A (ja) * 1986-05-16 1987-11-20 Hitachi Ltd コンパイル方式

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62267832A (ja) * 1986-05-16 1987-11-20 Hitachi Ltd コンパイル方式

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10340193A (ja) * 1997-06-06 1998-12-22 Nec Corp 言語処理装置、言語処理方法およびその記録媒体
JP2019003437A (ja) * 2017-06-15 2019-01-10 富士通株式会社 情報処理装置、コンパイラ方法、およびコンパイラプログラム

Similar Documents

Publication Publication Date Title
US6292939B1 (en) Method of reducing unnecessary barrier instructions
US6412109B1 (en) Method for optimizing java bytecodes in the presence of try-catch blocks
JP3284956B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6233733B1 (en) Method for generating a Java bytecode data flow graph
US8423982B2 (en) Speculative compilation
JP3311462B2 (ja) コンパイル処理装置
US6546550B1 (en) Method to determine dynamic compilation time and to select bytecode execution mode
US6044221A (en) Optimizing code based on resource sensitive hoisting and sinking
US6986130B1 (en) Methods and apparatus for compiling computer programs using partial function inlining
JPH07129412A (ja) コンパイル方法及び装置
JP2003196106A (ja) プログラム変換方法、コンピュータ装置及びプログラム
JP3606654B2 (ja) コンパイラ装置
JPH08263300A (ja) インライン展開方式
KR100305097B1 (ko) 최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법
JP3032030B2 (ja) ループ最適化方法及び装置
JPH0887417A (ja) コンパイラ装置
JPH0573335A (ja) プログラムの自動インライン展開方式
JP3305767B2 (ja) ソート処理方法及びコンパイル方法
JP2002073347A (ja) 例外処理方法及びコンパイラ
JP3714201B2 (ja) コール命令並び替え方法と装置並びにプログラム
JP3018783B2 (ja) コンパイル方式
JP2002140198A (ja) インライン展開方法
JPH1031591A (ja) 関数のインライン展開装置
JPH11272473A (ja) プログラム言語処理装置のコード最適化方式
JPH04165537A (ja) プログラム自動インライン展開方式