JPH09128246A - コンパイラ装置 - Google Patents
コンパイラ装置Info
- Publication number
- JPH09128246A JPH09128246A JP28177895A JP28177895A JPH09128246A JP H09128246 A JPH09128246 A JP H09128246A JP 28177895 A JP28177895 A JP 28177895A JP 28177895 A JP28177895 A JP 28177895A JP H09128246 A JPH09128246 A JP H09128246A
- Authority
- JP
- Japan
- Prior art keywords
- inline
- expansion
- intermediate text
- processing
- function
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
各関数のインライン展開を行うコンパイラ装置を提供す
る。 【解決手段】 ソース変換手段101で得られた中間テ
キストを最適化手段102が最適化し、コード変換手段
103がオブジェクトコードに変換するコンパイラ装置
において、ソース変換手段101は、ソースコードを中
間テキスト列に変換する解釈手段111と、関数呼び出
し言をインライン展開する展開手段112と、インライ
ン展開を示す展開情報を付加する展開情報付加手段11
3とを備え、最適化手段102は、中間テキスト列を解
析して静的制御情報を収集する制御情報収集手段121
と、静的制御情報に基づいて、各関数をインライン展開
したことの当否を評価する第1評価手段122と、評価
結果に応じて、該当するインライン展開部分を元の関数
呼び出し言に復元する復元手段123とを備える。
Description
処理して最適化を図るコンパイラ装置に関するものであ
る。近年、コンピュータシステムに対する高速化の要求
がより高まっており、これに応じて様々の種類のプロセ
ッサが開発されている。これに伴って、それぞれのプロ
セッサの特徴を活かして、更なる高速処理を実現するた
めに、コンパイラ装置の最適化機能に対する要求も高度
化している。コンパイラ装置における最適化処理におい
ては、様々な機能が利用されており、関数呼び出しの検
出に応じて、該当する関数の本体を呼び出し元に展開す
るインライン展開機能もその一つである。このインライ
ン展開機能により、関数呼び出しのためのオーバーヘッ
ドの解消や分岐命令の実行回数の削減による直接的な実
行速度の向上効果が得られる。また、インライン展開に
よって明らかにされた引数などの情報に基づいて、更に
最適化が可能となることによる間接的な実行速度の向上
効果が得られる。このため、インライン展開機能は、コ
ンパイラ装置に必須の機能となっている。
により、大きな最適化効果が得られる反面、インライン
展開によって、オブジェクトコードそのものが大幅に増
大し、プログラム格納のためのディスクスペースを圧迫
したり、命令キャッシュミスが増大するなどの不利益が
ある。また、必要なレジスタ数の増大を招いたり、翻訳
時間が増大したりといったデメリットが生じることも知
られている。
は、プログラム全体について、コンパイルオプションに
より、コンパイラ装置に対する様々な指示とともにイン
ライン展開の要否を指定する場合がある。図11に、従
来のコンパイラ装置の構成例を示す。図11において、
フロントエンド部401は、入力されたソースプログラ
ムを解釈して中間テキストに変換し、インライン展開部
402は、コンパイル制御部403からの指示に応じ
て、関数呼び出しに対応する関数を表す中間テキストを
インライン展開し、最適化処理部404による処理に供
する構成となっている。
は、バックエンド部405およびコード出力部406に
よる処理に供され、最終的なオブジェクトプログラムが
作成される。このとき、コンパイル制御部403は、プ
ログラム開発者の判断で指定されたコンパイルオプショ
ンに応じて、インライン展開部402の動作を制御して
おり、オプションなどで指定されたインライン可能なオ
ブジェクトサイズ以下の全ての関数がインライン展開対
象として指示される。
数は、呼び出し回数にかかわらずにインライン展開され
るのに対して、オブジェクトサイズの大きい関数は、呼
び出し回数が多くてもインライン展開されないため、イ
ンライン展開による効果が充分に得られない場合があっ
た。このような問題点を解決するために、様々な技法が
提案されている。
ンライン展開方式」で開示された技法は、コンパイル処
理の中間段階で得られる中間テキストに基づいて、各関
数の静的な参照回数を計数し、この参照回数に応じて、
それぞれの関数をインライン展開するか否かを判定する
ものである。また、特開平6−202875「インライ
ン展開による最適化を行うコンパイラ」で開示された技
法は、中間テキストに基づいて、各関数の実行回数を予
測して重み付けを行い、この重みに応じて、インライン
展開を行うか否かを判定するものである。
ム変換方式」で開示された技法は、全ての関数呼び出し
を保存した仮の実行プログラムを作成し、この仮の実行
プログラムを実行した際に得られる動的な関数の呼び出
し回数やループ回数に基づいて、各関数をインライン展
開するか否かを判定するものである。
パイル制御部403において、個々の関数の呼び出し回
数を考慮してインライン展開部402を制御することが
可能となり、インライン展開による最適化効果を高める
ことができる。一方、特開平5−73335「プログラ
ム自動インライン展開方式」で開示された技法は、ソー
スプログラムを解析することにより、他の関数を呼び出
していない関数を判別し、該当する関数をインライン展
開するものであり、上述したような静的な参照回数や動
的な参照回数を計数する手間を省いて、翻訳時間の短縮
を図っている。
来の技法は、全て、インライン展開に先だって、その要
否を判定するものであり、インライン展開後に明らかと
なる情報は一切考慮されていない。例えば、インライン
展開によって拡大した各変数の生存期間は、インライン
展開以前に予測することは困難である。一方、実行可能
なオブジェクトプログラムを効率良く作成するために
は、各時点において必要なレジスタの数を一定数以下に
抑えておく必要があるから、この拡大された生存期間に
基づいて各変数にレジスタを割付けなければならない。
さもないと、不要なレジスタの内容をメモリに退避する
ためのコード(スピルコード)が出力され、性能低下を
招くからである。
いては、インライン展開後の変数の生存期間の拡大は考
慮されていないから、ある関数をインライン展開したこ
とによって、バックエンド部405における割付処理な
どが厳しく制約されてしまい、最適化効率が低下する場
合がある。
それまで関数名の陰に隠されていた様々な情報が明らか
にされ、これらの情報が、後の最適化処理による効果を
大きく左右するのである。本発明は、インライン展開後
に得られる情報に応じて、各関数のインライン展開を行
うコンパイラ装置を提供することを目的とする。
請求項3のコンパイラ装置の原理ブロック図である。請
求項1の発明は、入力されたソースコードをソース変換
手段101によって中間テキストに変換して最適化手段
102の処理に供し、この最適化手段102による処理
結果をコード変換手段103によってオブジェクトコー
ドに変換するコンパイラ装置において、ソース変換手段
101は、ソースコードのそれぞれを解釈して対応する
中間テキスト言に変換する解釈手段111と、中間テキ
ストに含まれる関数呼び出し言を該当する関数本体で置
換することで関数のインライン展開を行う展開手段11
2と、展開手段112でインライン展開された部分の範
囲を示す展開情報を中間テキストに付加して出力する展
開情報付加手段113とを備えた構成であり、最適化手
段102は、ソース変換手段101で得られた中間テキ
スト列を解析し、実行時の制御の流れおよびデータの流
れに関する静的制御情報を収集する制御情報収集手段1
21と、静的制御情報に基づいて、展開情報で示された
関数本体部分のそれぞれについて、該当する関数をイン
ライン展開したことの当否を評価して、インライン展開
部分ごとに評価結果を出力する第1評価手段122と、
評価結果に応じて、該当するインライン展開部分を元の
関数呼び出し言に復元する復元手段123とを備えた構
成であることを特徴とする。
において、展開手段112が、解釈手段111によって
得られた関数呼び出し言を該当する関数本体に置換した
ときに、展開情報付加手段113により、インライン展
開された中間テキストの範囲を示す展開情報を付加し、
最適化手段102の処理に供している。したがって、最
適化手段102において、第1評価手段122および復
元手段123は、上述した展開情報によってインライン
展開された部分を知ることができる。
収集手段121で得られた静的制御情報に基づいて、各
インライン展開部分についての評価を行うことができ、
また、この評価結果に応じて、復元手段123が動作す
ることにより、インライン展開したことが妥当でないと
されたインライン展開部分を元の関数呼び出し言に戻す
ことができる。以下、インライン展開された関数本体を
元の関数呼び出し言に戻す操作を、「インライン」に対
して「アウトライン」と称する。
明らかとなる情報を考慮して、インライン展開による最
適化の効果を判断し、関数呼び出しの方が適切であるも
のについてはアウトラインすることにより、有効なイン
ライン展開部分のみを含んだ中間テキスト列をコード変
換手段103に送出することが可能であるから、インラ
イン展開による最適化効果を十分に引き出すことができ
る。
ンパイラ装置の原理ブロック図である。請求項2の発明
は、入力されたソースコードをソース変換手段101に
よって中間テキストに変換して最適化手段102の処理
に供し、この最適化手段102による処理結果をコード
変換手段103によってオブジェクトコードに変換する
コンパイラ装置において、ソース変換手段101は、ソ
ースコードのそれぞれを解釈して対応する中間テキスト
言に変換する解釈手段111と、中間テキストに含まれ
る関数呼び出し言を該当する関数本体で置換することで
関数のインライン展開を行う展開手段112と、展開手
段112でインライン展開された部分の範囲を示す展開
情報を中間テキストに付加して出力する展開情報付加手
段113とを備えた構成であり、最適化手段102は、
変換手段101で得られた中間テキスト列を擬似的に実
行して得られる各中間テキストの実行回数を含む動的制
御情報の入力を受け付ける入力受付手段124と、動的
制御情報に基づいて、展開情報で示された関数本体部分
のそれぞれについて、該当する関数をインライン展開し
たことの当否を評価して、インライン展開部分ごとに評
価結果を出力する第2評価手段125と、評価結果に応
じて、該当するインライン展開部分を元の関数呼び出し
言に復元する復元手段123とを備えた構成であること
を特徴とする。
ース変換手段101の解釈手段111、展開手段112
および展開情報付加手段113の動作により、インライ
ン展開された部分の範囲を示す展開情報を含んだ中間テ
キスト列が得られ、最適化手段102の処理に供され
る。この場合は、入力受付手段124を介して、各中間
テキストの実行回数を正当に評価した動的制御情報が、
第2評価手段125の処理に供され、これにに基づい
て、各インライン展開部分についての評価が行われるか
ら、インライン展開したことの当否をより正当に評価す
ることができる。
手段123が動作することにより、インライン展開が真
に有効なもののみをインライン展開した状態で保存して
コード変換手段103の処理に供することができる。請
求項3の発明は、請求項1または請求項2に記載のコン
パイラ装置において、最適化手段102は、ソース変換
手段101で得られた中間テキスト列に対して、インラ
イン展開部分の範囲の境界を保存しながら最適化処理を
行い、処理結果をインライン展開の当否を評価する処理
に供する前処理手段126を備えた構成であることを特
徴とする。
る処理結果を第1評価手段122または第2評価手段1
25の処理に供することにより、限定された最適化処理
による効果を考慮して、インライン展開の当否を評価す
ることができる。なお、この前処理手段126におい
て、インライン展開部分の境界を跨いだ中間テキストの
移動を禁止すれば、インライン展開部分の境界を保存し
た最適化結果を得ることができる。
パイラ装置において、最適化手段102は、復元手段1
23による処理結果に対して、インライン展開部分と他
の部分とを同等のものとして最適化処理を行う後処理手
段127を備えた構成であることを特徴とする。請求項
4の発明は、復元手段123による処理結果の入力に応
じて、後処理手段127が動作することにより、インラ
イン展開部分の境界を跨いだ中間テキストの移動を含ん
だ最大限の最適化を中間テキストの施すことができ、実
行性能の向上を図ることができる。
2に記載のコンパイラ装置において、コード変換手段1
03は、入力された中間テキスト列に含まれた展開情報
に基づいて、インライン展開された部分に対応するオブ
ジェクトコード列それぞれに、インライン展開された部
分である旨を示すコード情報を付加するコード付加手段
131を備えた構成であることを特徴とする。
のコード付加手段131が、中間テキストに残された展
開情報に基づいて動作することにより、インライン展開
された部分に対応するオブジェクトコードの範囲を示す
情報として、例えばコメント文などをオブジェクトコー
ドの中に挿入し、デバッグ作業に供することができる。
実施例について詳細に説明する。
構成図である。図3に示したコンパイラ装置は、図11
に示したコンパイラ装置のインライン展開部402と最
適化処理部404とに代えてインライン展開部210と
最適化前処理部220および最適化後処理部230とを
備えた構成となっている。このコンパイラ装置におい
て、インライン展開部210は、コンパイル制御部40
3からの指示に応じて、解釈手段111に相当するフロ
ントエンド部401で得られた中間テキスト列について
インライン展開処理を行い、この処理結果を最適化前処
理部220の処理に供する構成となっている。
果に基づいて、アウトライン判定部240およびアウト
ライン処理部250が動作し、このアウトライン処理部
250による処理結果が、最適化後処理部230、バッ
クエンド部405およびコード出力部406の処理に供
され、オブジェクトプログラムが作成される構成となっ
ている。
図4に示すように、フロントエンド部401により中間
テキストが作成され(ステップ301)、コンパイラオ
プションに応じて、コンパイル制御部403がインライ
ン展開を指示すると(ステップ302の肯定判定)、イ
ンライン展開部210により、全ての関数呼び出しを対
象として一律にインライン展開処理が行われる(ステッ
プ303)。
化処理が行われ(ステップ304)、この処理結果に応
じて、アウトライン判定部240とアウトライン処理部
250とにより、上述したインライン展開処理部210
によって展開された関数のうち、不適切なものが元の関
数呼び出しに戻される(ステップ305、306)。こ
のようにして得られた中間テキスト列に対して、最適化
後処理部230により再度の最適化の試みが行われ(ス
テップ307)、次いで、ステップ308において、オ
ブジェクトプログラムの作成処理が行われる。
の場合は、最適化前処理部220および最適化後処理部
230により、従来と同様の最適化処理を行い(ステッ
プ309)、その後、処理を終了すればよい。図3に示
したインライン展開部210において、受付処理部21
1は、未処理の中間テキストから関数呼び出しを示すテ
キスト(以下、関数呼び出し言と称する)を抽出し、サ
イズ判定部212に送出する構成となっている。
て、疑似言挿入部213および展開処理部214は、上
述したサイズ判定部212による判定結果に応じて動作
し、受付処理部211で抽出された関数呼び出し言を受
け取って、後述する所定の疑似言と関数本体の中間テキ
スト列とに変換する構成となっている。ここで、疑似言
挿入部213は、図5に示すように、インライン展開さ
れた関数の先頭および末尾に、それぞれインライン開始
言(*BeginInline)とインライン終了言(*EndInline)
とを挿入すればよい。
は、疑似言挿入部213が挿入した疑似言と元の関数呼
び出し言との対応関係を示す関数情報および2つの疑似
言の対応関係を示す対応情報を作成し、上述したインラ
イン開始言およびインライン終了言のオペランドとして
付加する構成となっている。この疑似言修飾部215
は、例えば、展開処理部214から元の関数呼び出し言
や展開された中間テキストの数を受け取って、これらを
示す関数情報を作成し、また、疑似言挿入部213から
上述した2つの疑似言をアドレスを受け取って、これら
をそのまま対応情報として、それぞれ対となる疑似言の
オペランドに付加すればよい。
を示す。受付処理部211は、未処理の中間テキストを
1言ずつ順次に読み込んでいき(ステップ311)、関
数呼び出し言を読み込んだときに、ステップ312の肯
定判定として、サイズ判定部212に該当する関数呼び
出し言を通知する。この通知に応じて、サイズ判定部2
12は、該当する関数本体を見つけ出し、存在すればそ
の関数本体の中間テキスト列を計数し(ステップ31
3)、この計数値が所定の閾値以下であれば、ステップ
314の肯定判定として、疑似言挿入部213を起動す
るとともに、該当する関数呼び出し言を展開処理部21
4に通知する。
は、関数呼び出し言に代えて、上述したインライン開始
言を挿入し(ステップ314)、展開処理部214は、
このインライン開始言に続いて、該当する関数本体の中
間テキスト列を未処理の中間テキスト列に挿入する(ス
テップ315)。このときに、必要であれば、引数の受
け渡しのための中間テキストも挿入する。次いで、疑似
言挿入部213は、ステップ316において、上述した
インライン終了言を未処理の中間テキストとして挿入す
ればよい。
17において、上述した関数情報および対応情報を作成
し、ステップ314およびステップ316で挿入した疑
似言のオペランドとして付加すればよい。一方、ステッ
プ312の否定判定の場合は、該当する中間テキストを
そのまま処理済みの中間テキストとして、後述するステ
ップ318に進めばよい。
間テキストが残っているか否かを判定し(ステップ31
8)、肯定判定の場合は、ステップ311に戻って新し
い中間テキストについての処理を行い、否定判定の場合
は、インライン展開処理を終了すればよい。このよう
に、受付処理部211およびサイズ判定部212による
判定結果に応じて、疑似言挿入部213と展開処理部2
14とが動作することにより、展開手段112と展開情
報付加手段113との機能を実現し、展開可能な全ての
関数呼び出しをインライン展開するとともに、インライ
ン展開された部分を示す展開情報として上述した2つの
疑似言を付加することができる。
は、図3に示すように、最適化前処理部220に送出さ
れ、後述する基本的な最適化処理が施される。図3に示
した最適化前処理部220において、基本処理部221
は、請求項3で述べた前処理手段126に相当するもの
であり、上述した疑似言で挟まれた範囲内での中間テキ
ストの移動や共通式の除去および演算の強さの縮小など
の基本的な最適化を行う構成となっている。
御フロー収集部223は、請求項1で述べた制御情報収
集手段121に相当するものであり、インライン展開部
210を介して受け取った中間テキスト列を解析し、各
変数の生存期間やループ範囲などを示す制御情報を収集
し、アウトライン判定部240の処理に供する構成とな
っている。
ループ判定部241は、インライン開始言を検出するご
とに、そのアドレスと制御情報として受け取ったループ
範囲とを照合し、該当するインライン開始言がループ内
に含まれているか否かを判定する構成となっている。こ
の判定結果に応じて、サイズ判定部242とレジスタ数
判定部243とが動作し、該当するインライン開始言と
対応するインライン終了言との間に挟まれた部分につい
て、そのサイズが所定の閾値以下であるか否か、および
生存中の変数の数が所定の閾値以下であるか否かをそれ
ぞれ判定する構成となっている。
結果に応じて、アウトライン候補を決定し、該当するイ
ンライン開始言を候補リスト245に順次に格納し、ア
ウトライン処理部250の処理に供する構成となってい
る 図7に、アウトライン判定動作を表す流れ図を示す。ま
ず、ループ判定部241は、未処理の中間テキストを順
次に読み出して(ステップ321)、インライン開始言
であるか否かを判定し(ステップ322)、肯定判定の
場合は、制御情報に基づいて、該当するインライン開始
言がループ範囲に含まれているか否かを判定する(ステ
ップ323)。
ズ判定部242は、該当するインライン開始言と対応す
るインライン終了言との間の中間テキストの数を計数し
(ステップ324)、この計数値Ntが所定の閾値Ths を
超えているか否かを判定する(ステップ325)。
レジスタ数判定部243が、該当するインライン開始言
と対応するインライン終了言との間の中間テキスト列に
ついて、上述した制御情報に基づいて同時に生存してい
る変数の数の最大値Maxvを求め(ステップ326)、こ
の最大値Maxvが、所定の閾値Thv を超えているか否かを
判定する(ステップ327)。
および変数の数の閾値Thv は、それぞれ情報処理装置の
性能およびプロセッサに備えられているレジスタの数に
応じて予め決定しておき、例えば、コンパイル制御部4
03により、それぞれサイズ判定部242およびレジス
タ数判定部243の処理に供すればよい。上述したステ
ップ327の肯定判定あるいは、上述したステップ32
5の肯定判定の場合に、候補決定部244は、該当する
インライン開始言を候補リスト245に格納する(ステ
ップ328)。
るか否かを判定し(ステップ329)、肯定判定の場合
は、上述したステップ321に戻って新しい中間テキス
トについての処理を行えばよい。また、上述したステッ
プ322の否定判定の場合およびステップ323の肯定
判定の場合は、上述したアウトライン判定処理をスキッ
プし、そのままステップ329に進めばよい。
示に応じて、サイズ判定部242およびレジスタ数判定
部243が動作することにより、請求項1で述べた第1
評価手段122の機能を実現し、中間テキストに含まれ
る全てのインライン関数について、インライン展開した
ことの当否を判定することができる。また、ステップ3
23の判定処理において、ループの次元を考慮に入れる
ことも可能である。
ックしていき、全ての中間テキストについての処理が終
了したときに、ステップ329の否定判定としてアウト
ライン判定処理を終了し、その結果をアウトライン処理
部250の処理に供すればよい。図3において、アウト
ライン処理部250は、候補検出部251が、上述した
候補リスト245に基づいて、入力される中間テキスト
から該当するインライン開始言を検出し、これに応じ
て、削除処理部252と置換処理部253とが動作する
構成となっている。
出部251を介して中間テキスト列を受け取り、アウト
ライン候補として検出されたインライン開始言から対応
するインライン終了言までの中間テキストを削除する構
成となっている。また、置換処理部253は、該当する
インライン開始言にオペランドとして付加された関数情
報に基づいて、インライン開始言およびインライン終了
言を元の関数呼び出し言で置換する構成となっている。
図をそれぞれ示す。まず、候補検出部251は、中間テ
キストを1言ずつ読み出して、インライン開始言である
か否かを判定し(ステップ331、332)、インライ
ン開始言である場合(ステップ332の肯定判定)は、
該当するインライン開始言が上述した候補リスト245
に格納されているか否かを判定する(ステップ33
3)。
削除処理部251が動作し、該当するインライン開始言
と対応するインライン終了言とで挟まれた中間テキスト
を削除する(ステップ334)。次に、復元処理部25
3が動作し、該当するインライン開始言に付加された関
数情報からもとの関数呼び出し言を得て、この関数呼び
出し言を例えば上述したインライン開始言の直後に挿入
し(ステップ335)、更に、該当するインライン開始
言およびこれに対応するインライン終了言を削除する
(ステップ336)。
たステップ332およびステップ333の否定判定の場
合は、未処理の中間テキストがあるか否かを判定し(ス
テップ337)、肯定判定の場合は、ステップ331に
戻って新しい中間テキストについての処理を行えばよ
い。このように、候補検出部251からの指示に応じ
て、削除処理部252と復元処理部253とが動作する
ことにより、請求項1で述べた復元手段123の機能を
実現し、中間テキストの中からインライン展開の効果が
否定された部分を抽出し、元の関数呼び出しに戻すこと
ができる。
ライン候補を元の関数呼び出し言に戻した後に、ステッ
プ337の否定判定に応じて、アウトライン処理を終了
し、得られた処理結果を最適化後処理部230の処理に
供すればよい。この最適化後処理部230は、請求項4
で述べた後処理手段127に相当するものであり、イン
ライン開始言およびインライン終了言を跨いだ中間テキ
ストの移動を含めて、アウトライン処理後の中間テキス
トに対して、再度の最適化処理を行い、バックエンド部
405に中間テキスト列を送出すればよい。
出力部406とが、従来と同様に動作することにより、
最適化された中間テキストに対応するオブジェクトコー
ドが得られる。この場合は、上述したように、全ての関
数呼び出しをインライン展開した後に、展開によって明
らかにされた情報を踏まえてインライン展開の当否を判
定し、展開が展開が効果的であるとされた関数呼び出し
のみを最適化後の中間テキストに保存することができ
る。
される情報を考慮して、レジスタ割付処理などへの負担
を軽減し、真に効果的なインライン展開結果のみを含ん
だ中間テキストに対応するオブジェクトコードを得るこ
とができるから、コンパイラ装置のインライン展開機能
により、充分な最適化効果を得ることが可能となる。
めのアプリケーションプログラムのコンパイルに利用す
れば、得られたオブジェクトコードによる処理効率を向
上することが可能となる。特に、近年のプロセッサの開
発競争においては、レジスタ本数や演算器の数などが多
様化していることを考えれば、インライン展開後に詳細
となる情報を利用して、インライン展開する関数を選択
することが可能であることによる最適化効果は非常に大
きく、それに必要とされるコンパイル時間の増大などの
デメリットを十分に補うことができる。
インライン展開部の実際の実行回数に応じて、アウトラ
インするか否かを判定することもできる。図9に、請求
項2のコンパイラ装置の実施例構成図を示す。図9にお
いて、請求項2のコンパイラ装置は、図3に示したコン
パイラ装置に、プロファイル抽出部261と実行処理部
262とを付加し、また、アウトライン判定部250に
代えてアウトライン判定部270を備えた構成となって
いる。
最適化前処理部220による処理結果を実行制御部26
2に送出してその実行を指示し、これに応じて、実行処
理部262が中間テキスト列を擬似的に実行したとき
に、プロファイル抽出部261が、各中間テキストの動
的な実行回数などを示すプロファイル情報を抽出すれば
よい。
1と実行処理部262とにより、請求項2で述べた動的
制御情報を作成し、この動的制御情報をアウトライン判
定部270の実行回数判定部271に入力することによ
り、請求項2で述べた入力受付手段124の機能が実現
されている。
が、上述した動的制御情報で示された実行回数に応じ
て、サイズ判定部242およびレジスタ数判定部243
の動作を制御すればよい。例えば、実行回数判定部27
1により、図7に示したステップ322の肯定判定に応
じて、該当するインライン開始言の実行回数Nex が、所
定の閾値Thn を超えているか否かを判定し、否定判定の
場合にステップ324からステップ328の判定処理を
実行すればよい。
などで予め決定しておけばよい。また、コンパイルオプ
ションとして、利用者が指定できるようにしても良い。
この場合は、動的な実行回数に基づいて、サイズ判定部
242およびレジスタ数判定部243を動作させること
により、請求項2で述べた第2評価手段125の機能を
実現し、インライン展開の当否をより正当に評価するこ
とが可能である。
な関数呼び出しのみをインライン展開して、インライン
展開による最適化効果を充分に引き出すことができ、効
率的に作業を処理可能なオブジェクトコードを得ること
ができる。また、更に、上述したインライン展開過程で
挿入した疑似言をアセンブラコードのでバッグ作業に利
用することもできる。
施例構成図を示す。図10において、請求項5のコンパ
イラ装置は、図3に示したコンパイラ装置に置換処理部
281を付加し、最適化後処理部230による処理結果
に含まれる疑似言を後述するコメント文に置換して、バ
ックエンド部405に送出する構成となっている。
言とインライン終了言とを検出し、それぞれ該当する関
数名を含んだコメント文(!Inline Begin 関数名)およ
びコメント文(!Inline End 関数名)に置換すればよ
い。
05により、そのままアセンブラソースとして出力され
るから、これらのコメント文により、インライン展開さ
れた部分およびその関数名を示すことができる。上述し
たように、インライン処理部210で挿入された疑似言
の入力に応じて、置換処理部281が動作することによ
り、請求項5で述べたコード付加手段131の機能を実
現し、アセンブラソースにおいて、インライン展開され
た部分を示す情報を提供し、利用者のデバッグ作業に役
立てることができる。
処理とバックエンド処理とにおいて実現されているか
ら、アウトライン判定処理およびアウトライン処理を実
行したか否かにかかわらず、インライン展開された部分
についての情報を利用者に提供することができる。例え
ば、図10に点線で示すように、コンパイルオプション
に応じて、コンパイル制御部403が、最適化前処理部
220および最適化後処理部230を制御して、最適化
前処理部220による処理結果を直接に最適化後処理部
230に送出すれば、アウトライン処理をスキップし
て、従来のコンパイラ装置と同等のコンパイル処理を行
うことができる。
報を最適化処理に活用することはできないが、翻訳に要
する時間を従来のコンパイラ装置とほぼ同等とすること
ができ、また、上述した置換処理部281の動作によ
り、インライン展開された部分に関する情報を含んだア
センブラソースを得ることができ、デバッグ作業に役立
てることができる。
よれば、インライン展開後に得られる静的な制御情報に
基づいて、インライン展開によるメリットとデメリット
とを比較評価し、効果的でないインライン展開部分を元
の関数呼び出しに戻すことができるから、有効なインラ
イン展開部分のみをオブジェクトコードへの変換処理に
供することが可能である。これにより、インライン展開
による最適化効果を充分に引き出して、処理効率の高い
オブジェクトコードを得ることができるから、情報処理
装置の処理能力の向上に大きく貢献することができる。
制御情報に基づいて、真に有効なインライン展開部分を
判別することにより、処理効率の高いオブジェクトコー
ドを得ることができるから、特に実行頻度の高いプログ
ラムのコンパイルに利用すれば、大きな処理能力向上効
果が期待できる。また、請求項3の発明によれば、静的
制御情報あるいは動的制御情報に加えて、制限付きの最
適化処理による効果を考慮して、インライン展開部分を
より精密に評価し、インライン展開による最適化効果を
向上することができる。
クトコードへの変換処理に先立って、インライン展開部
分を含んだ中間テキストに対して、無制限の最適化処理
を施すことにより、より処理効率の高いオブジェクトコ
ードを得ることが可能となる。また、請求項5の発明に
よれば、オブジェクトコードにインライン展開部分を示
す情報を残してデバッグ作業に供し、デバッグ作業を支
援することができるから、プログラム開発者の作業負担
を更に軽減することが可能である。
理ブロック図である。
の原理ブロック図である。
る。
る。
ある。
る。
Claims (5)
- 【請求項1】 入力されたソースコードをソース変換手
段によって中間テキストに変換して最適化手段の処理に
供し、この最適化手段による処理結果をコード変換手段
によってオブジェクトコードに変換するコンパイラ装置
において、 前記ソース変換手段は、 ソースコードのそれぞれを解釈して対応する中間テキス
ト言に変換する解釈手段と、 前記中間テキストに含まれる関数呼び出し言を該当する
関数本体で置換することで関数のインライン展開を行う
展開手段と、 前記展開手段でインライン展開された部分の範囲を示す
展開情報を中間テキストに付加して出力する展開情報付
加手段とを備えた構成であり、 前記最適化手段は、 前記ソース変換手段で得られた中間テキスト列を解析
し、実行時の制御の流れおよびデータの流れに関する静
的制御情報を収集する制御情報収集手段と、 前記静的制御情報に基づいて、前記展開情報で示された
関数本体部分のそれぞれについて、該当する関数をイン
ライン展開したことの当否を評価して、インライン展開
部分ごとに評価結果を出力する第1評価手段と、 前記評価結果に応じて、該当するインライン展開部分を
元の関数呼び出し言に復元する復元手段とを備えた構成
であることを特徴とするコンパイラ装置。 - 【請求項2】 入力されたソースコードをソース変換手
段によって中間テキストに変換して最適化手段の処理に
供し、この最適化手段による処理結果をコード変換手段
によってオブジェクトコードに変換するコンパイラ装置
において、 前記ソース変換手段は、 ソースコードのそれぞれを解釈して対応する中間テキス
ト言に変換する解釈手段と、 前記中間テキストに含まれる関数呼び出し言を該当する
関数本体で置換することで関数のインライン展開を行う
展開手段と、 前記展開手段でインライン展開された部分の範囲を示す
展開情報を中間テキストに付加して出力する展開情報付
加手段とを備えた構成であり、 前記最適化手段は、 前記変換手段で得られた中間テキスト列を擬似的に実行
して得られる各中間テキストの実行回数を含む動的制御
情報の入力を受け付ける入力受付手段と、 前記動的制御情報に基づいて、前記展開情報で示された
関数本体部分のそれぞれについて、該当する関数をイン
ライン展開したことの当否を評価して、インライン展開
部分ごとに評価結果を出力する第2評価手段と、 前記評価結果に応じて、該当するインライン展開部分を
元の関数呼び出し言に復元する復元手段とを備えた構成
であることを特徴とするコンパイラ装置。 - 【請求項3】 請求項1または請求項2に記載のコンパ
イラ装置において、 最適化手段は、 ソース変換手段で得られた中間テキスト列に対して、イ
ンライン展開部分の範囲の境界を保存しながら最適化処
理を行い、処理結果をインライン展開の当否を評価する
処理に供する前処理手段を備えた構成であることを特徴
とするコンパイラ装置。 - 【請求項4】 請求項3に記載のコンパイラ装置におい
て、 最適化手段は、 復元手段による処理結果に対して、インライン展開部分
と他の部分とを同等のものとして最適化処理を行う後処
理手段を備えた構成であることを特徴とするコンパイラ
装置。 - 【請求項5】 請求項1または請求項2に記載のコンパ
イラ装置において、 コード変換手段は、入力された中間テキスト列に含まれ
た展開情報に基づいて、インライン展開された部分に対
応するオブジェクトコード列それぞれに、インライン展
開された部分である旨を示すコード情報を付加するコー
ド付加手段を備えた構成であることを特徴とするコンパ
イラ装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP28177895A JP3606654B2 (ja) | 1995-10-30 | 1995-10-30 | コンパイラ装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP28177895A JP3606654B2 (ja) | 1995-10-30 | 1995-10-30 | コンパイラ装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH09128246A true JPH09128246A (ja) | 1997-05-16 |
| JP3606654B2 JP3606654B2 (ja) | 2005-01-05 |
Family
ID=17643852
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP28177895A Expired - Fee Related JP3606654B2 (ja) | 1995-10-30 | 1995-10-30 | コンパイラ装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3606654B2 (ja) |
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2000045260A1 (en) * | 1999-01-29 | 2000-08-03 | Fujitsu Limited | Compiler, compiling method, and storage medium stored with program therefor |
| WO2006061884A1 (ja) * | 2004-12-07 | 2006-06-15 | Hitachi, Ltd. | 自動車用制御装置とそのソフトウエア作成方法及びシステム |
| JP2007233805A (ja) * | 2006-03-02 | 2007-09-13 | Oki Electric Ind Co Ltd | プログラム変換システム |
| JP2009134462A (ja) * | 2007-11-29 | 2009-06-18 | Toshiba Corp | デバッグ装置及びデバッグ方法 |
| JP2014164379A (ja) * | 2013-02-22 | 2014-09-08 | International Business Maschines Corporation | 実フットプリント算出方法、該算出方法を用いたインラインするメソッドの決定方法、装置及びプログラム |
| US8947076B2 (en) | 2010-01-18 | 2015-02-03 | Bourns, Inc. | High resolution non-contacting multi-turn position sensor |
| JP2015184737A (ja) * | 2014-03-20 | 2015-10-22 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | インライニングのための方法及びそのコンピュータ・プログラム、並びに、当該インライニングを実行するためのコンピュータ |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9830134B2 (en) | 2015-06-15 | 2017-11-28 | Qualcomm Incorporated | Generating object code from intermediate code that includes hierarchical sub-routine information |
-
1995
- 1995-10-30 JP JP28177895A patent/JP3606654B2/ja not_active Expired - Fee Related
Cited By (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2000045260A1 (en) * | 1999-01-29 | 2000-08-03 | Fujitsu Limited | Compiler, compiling method, and storage medium stored with program therefor |
| US7073167B2 (en) | 1999-01-29 | 2006-07-04 | Fujitsu Limited | Compiler system compiling method, and storage medium for storing compiling program |
| WO2006061884A1 (ja) * | 2004-12-07 | 2006-06-15 | Hitachi, Ltd. | 自動車用制御装置とそのソフトウエア作成方法及びシステム |
| JP2007233805A (ja) * | 2006-03-02 | 2007-09-13 | Oki Electric Ind Co Ltd | プログラム変換システム |
| JP2009134462A (ja) * | 2007-11-29 | 2009-06-18 | Toshiba Corp | デバッグ装置及びデバッグ方法 |
| US8370810B2 (en) | 2007-11-29 | 2013-02-05 | Kabushiki Kaisha Toshiba | Debugging device and debugging method |
| US8947076B2 (en) | 2010-01-18 | 2015-02-03 | Bourns, Inc. | High resolution non-contacting multi-turn position sensor |
| US9518840B2 (en) | 2010-01-18 | 2016-12-13 | Bourns, Inc. | High resolution non-contacting multi-turn position sensor |
| JP2014164379A (ja) * | 2013-02-22 | 2014-09-08 | International Business Maschines Corporation | 実フットプリント算出方法、該算出方法を用いたインラインするメソッドの決定方法、装置及びプログラム |
| JP2015184737A (ja) * | 2014-03-20 | 2015-10-22 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | インライニングのための方法及びそのコンピュータ・プログラム、並びに、当該インライニングを実行するためのコンピュータ |
Also Published As
| Publication number | Publication date |
|---|---|
| JP3606654B2 (ja) | 2005-01-05 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| USRE45199E1 (en) | Compiler apparatus | |
| US7725883B1 (en) | Program interpreter | |
| JP3819572B2 (ja) | 動的分岐予測システム | |
| US5920723A (en) | Compiler with inter-modular procedure optimization | |
| US5901308A (en) | Software mechanism for reducing exceptions generated by speculatively scheduled instructions | |
| US6308322B1 (en) | Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints | |
| JP3311462B2 (ja) | コンパイル処理装置 | |
| US6233733B1 (en) | Method for generating a Java bytecode data flow graph | |
| US6986130B1 (en) | Methods and apparatus for compiling computer programs using partial function inlining | |
| JP2003029977A (ja) | コンピュータ装置、その例外処理プログラム及び変換プログラム、並びにコンパイル方法 | |
| JPH07129412A (ja) | コンパイル方法及び装置 | |
| JPH06314203A (ja) | コンパイラの最適化方法および装置 | |
| JP3813087B2 (ja) | プログラム変換方法、コンピュータ装置及びプログラム | |
| US7784039B2 (en) | Compiler, compilation method, and compilation program | |
| KR20010086159A (ko) | 자바 프로그램들 및 이를 위한 소프트웨어 프러덕트의플랫폼 특정 효율 강화를 위한 방법 | |
| JP2000081983A (ja) | ル―プに対するバ―ジョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベ―シック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコ―ドを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法 | |
| US6526572B1 (en) | Mechanism for software register renaming and load speculation in an optimizer | |
| JP3606654B2 (ja) | コンパイラ装置 | |
| US6665864B1 (en) | Method and apparatus for generating code for array range check and method and apparatus for versioning | |
| US10013244B2 (en) | Apparatus and method to compile a variadic template function | |
| JPH08263300A (ja) | インライン展開方式 | |
| Dooley et al. | Detecting and using critical paths at runtime in message driven parallel programs | |
| JPH11149380A (ja) | コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体 | |
| JPH04165537A (ja) | プログラム自動インライン展開方式 | |
| JPH06214800A (ja) | 目的プログラムの最適化処理システム |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040901 |
|
| 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: 20040928 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041005 |
|
| R150 | Certificate of patent (=grant) or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071015 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081015 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081015 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091015 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091015 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Year of fee payment: 6 Free format text: PAYMENT UNTIL: 20101015 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Year of fee payment: 6 Free format text: PAYMENT UNTIL: 20101015 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Year of fee payment: 7 Free format text: PAYMENT UNTIL: 20111015 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Year of fee payment: 7 Free format text: PAYMENT UNTIL: 20111015 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121015 Year of fee payment: 8 |
|
| LAPS | Cancellation because of no payment of annual fees |