JPH07129412A - コンパイル方法及び装置 - Google Patents
コンパイル方法及び装置Info
- Publication number
- JPH07129412A JPH07129412A JP6183802A JP18380294A JPH07129412A JP H07129412 A JPH07129412 A JP H07129412A JP 6183802 A JP6183802 A JP 6183802A JP 18380294 A JP18380294 A JP 18380294A JP H07129412 A JPH07129412 A JP H07129412A
- Authority
- JP
- Japan
- Prior art keywords
- procedure
- compiling
- program
- code
- target
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 高水準言語のコードから実行可能なプログラ
ムを生成する最適化コンパイル方法を与える。 【構成】 本方法は呼び出しグラフが形成されるデータ
を生成している間にコードをコンパイルし、次に、ハー
ドウエア・レジスタの使用を監視している間に、呼び出
しグラフの図形順序とは逆の順序で呼び出しグラフ中で
識別された手続きを再コンパイルする。希にしか呼び出
されないか、全く呼び出されない手続き、またはプログ
ラムを終了する手続きが識別され、必要ならば修正す
る。呼び出されたならば、修飾できるレジスタは、手続
きの実行前に保存され、ストアされる。従つて、呼び出
し手続きにおいて後で再コンパイル処理して、呼び出さ
れた手続きによりレジスタの使用可能性の心配をなく
す。
ムを生成する最適化コンパイル方法を与える。 【構成】 本方法は呼び出しグラフが形成されるデータ
を生成している間にコードをコンパイルし、次に、ハー
ドウエア・レジスタの使用を監視している間に、呼び出
しグラフの図形順序とは逆の順序で呼び出しグラフ中で
識別された手続きを再コンパイルする。希にしか呼び出
されないか、全く呼び出されない手続き、またはプログ
ラムを終了する手続きが識別され、必要ならば修正す
る。呼び出されたならば、修飾できるレジスタは、手続
きの実行前に保存され、ストアされる。従つて、呼び出
し手続きにおいて後で再コンパイル処理して、呼び出さ
れた手続きによりレジスタの使用可能性の心配をなく
す。
Description
【0001】
【産業上の利用分野】本発明は、ターゲツト・コンピユ
ータにおいて実行するのに適したオブジエクト・コード
を生成するために、高水準言語で書かれたコンピユータ
・プログラムのソース・コードをコンパイルすること、
より詳細に言えば、プログラムの実行及びコンパイル動
作の両方において最大の効率を与えるための再コンパイ
ル(recompilation)技術を用いて上述のコードを最適
化することに関する。
ータにおいて実行するのに適したオブジエクト・コード
を生成するために、高水準言語で書かれたコンピユータ
・プログラムのソース・コードをコンパイルすること、
より詳細に言えば、プログラムの実行及びコンパイル動
作の両方において最大の効率を与えるための再コンパイ
ル(recompilation)技術を用いて上述のコードを最適
化することに関する。
【0002】
【従来の技術】高水準言語のステートメントは、ステー
トメントを実行することのできる手続き(procedure)
にコンパイルしている間に翻訳される。しかし、これら
の手続きは、この言語のステートメントが生じるすべて
の環境において機能することのできるものでなければな
らないから、最適化(optimization)を受けなければ、
生成されるコードが大きな冗長性と妥協とを含む傾向を
持つことになる。本明細書において用いられる用語「手
続き」は、コンパイル時に、呼び出し位置から手続き呼
び出しを生じるルーチン及び機能を含むものとして捉え
ねばならない。
トメントを実行することのできる手続き(procedure)
にコンパイルしている間に翻訳される。しかし、これら
の手続きは、この言語のステートメントが生じるすべて
の環境において機能することのできるものでなければな
らないから、最適化(optimization)を受けなければ、
生成されるコードが大きな冗長性と妥協とを含む傾向を
持つことになる。本明細書において用いられる用語「手
続き」は、コンパイル時に、呼び出し位置から手続き呼
び出しを生じるルーチン及び機能を含むものとして捉え
ねばならない。
【0003】最適化は、コンパイルの効率を増加するた
めに、ソース・コード、オブジエクト・コード、また
は、コンパイルに機能化するすべての中間コードに適用
される修正のために使用される総括的な用語である。プ
ログラムを開発する際に、繰り返し行なわれる再コンパ
イルが次第に必要となることを念頭において、本明細書
において用いられる用語、効率化(efficency)は、プ
ログラムの開発の際の生産性を向上するために、最終的
なオブジエクト・コードの実行の速度を向上すること、
オブジエクト・コードのサイズを減少すること、また
は、コンパイル速度を向上することを意味する。
めに、ソース・コード、オブジエクト・コード、また
は、コンパイルに機能化するすべての中間コードに適用
される修正のために使用される総括的な用語である。プ
ログラムを開発する際に、繰り返し行なわれる再コンパ
イルが次第に必要となることを念頭において、本明細書
において用いられる用語、効率化(efficency)は、プ
ログラムの開発の際の生産性を向上するために、最終的
なオブジエクト・コードの実行の速度を向上すること、
オブジエクト・コードのサイズを減少すること、また
は、コンパイル速度を向上することを意味する。
【0004】最適化はコンパイル処理の間の幾つかの段
階において行なわれるが、最適化の技術は2つのカテゴ
リに分類される。即ち、最適化の技術は、冗長性及び不
使用コードを除去するようにソース・コード、または中
間コードが修正される前半部と、通常、実行速度を改善
するために、生成されるオブジエクト・コードが修正さ
れる後半部とに分けられる。
階において行なわれるが、最適化の技術は2つのカテゴ
リに分類される。即ち、最適化の技術は、冗長性及び不
使用コードを除去するようにソース・コード、または中
間コードが修正される前半部と、通常、実行速度を改善
するために、生成されるオブジエクト・コードが修正さ
れる後半部とに分けられる。
【0005】プログラム可能な汎用コンピユータに用い
られる中央処理装置は、プログラムの実行中に用いられ
るデータ項目を保持するためにハードウエアのレジスタ
を大量に使用する。従つて、このようなレジスタの使用
個数及び使用制限は、多様なプロセツサによつて大きく
変化するけれども、メモリを参照することに関連したす
べての負担を避けることと、ハードウエア・レジスタの
効率的な管理とが、コンパイラの最適化について主要な
側面を形成することになる。上述の管理に関連した或る
一般的原理は1973年1月発行のIBMテクニカル・
デイスクロージヤ・ブレテイン中の2640頁乃至26
45頁の「Effective Register Management During Cod
e Generation」に記載されている。縮小命令セツト・コ
ンピユータ(RISC)に対するコンパイラの最適化の
技術は、IBM社により1990年に刊行された刊行物
「IBM RISC System/6000 Technology」に記載されてい
る。上述の2つの刊行物は、ハードウエア・レジスタの
効率的な使用の重要性を強調している。
られる中央処理装置は、プログラムの実行中に用いられ
るデータ項目を保持するためにハードウエアのレジスタ
を大量に使用する。従つて、このようなレジスタの使用
個数及び使用制限は、多様なプロセツサによつて大きく
変化するけれども、メモリを参照することに関連したす
べての負担を避けることと、ハードウエア・レジスタの
効率的な管理とが、コンパイラの最適化について主要な
側面を形成することになる。上述の管理に関連した或る
一般的原理は1973年1月発行のIBMテクニカル・
デイスクロージヤ・ブレテイン中の2640頁乃至26
45頁の「Effective Register Management During Cod
e Generation」に記載されている。縮小命令セツト・コ
ンピユータ(RISC)に対するコンパイラの最適化の
技術は、IBM社により1990年に刊行された刊行物
「IBM RISC System/6000 Technology」に記載されてい
る。上述の2つの刊行物は、ハードウエア・レジスタの
効率的な使用の重要性を強調している。
【0006】通常、代表的なプロセツサにおいては、汎
用目的に使用することのできるレジスタの数は制限され
ており、そして、コンパイラは、これらの汎用目的レジ
スタがコンパイルの間で参照される任意のプロシージヤ
によつて修正される可能性について、通常、悲観的な想
定をしなければならない。コンパイラあるいはプロセツ
サの性質に従つて、幾つかのレジスタは、本来的に、手
続きによつて修正可能なレジスタ、即ち「揮発性」レジ
スタとして識別することができる。IBM社のRISC
システム6000のターゲツト・プロセツサにおいて、
例えば、条件レジスタ(condition register)0乃至7
の内の2乃至4は揮発性レジスタであり、0乃至31の
汎用目的レジスタの内の3乃至12は揮発性レジスタで
あり、そして、0乃至31の浮動小数点レジスタの内の
0乃至13は揮発性レジスタであるように、多くのレジ
スタが揮発性レジスタである。個々の手続きは、すべて
のレジスタか、または少数のレジスタが修正を受けるこ
とにより特徴付けられるが、ある手続きが呼び出される
環境において、修正を受けるレジスタの実際の数は少な
い。この情報は、今日まで、複数の手続きを含むループ
において殆ど使用されていない。通常、ある手続きへの
進入は、その手続き、またはその手続きによつて呼び出
される他の手続きによつて修正を受けるすべてのレジス
タの内容を保存することを必要とし、これは、保存動作
(及び後続する復元動作)を実行するのに必要なマシン
・サイクルの期間と、スタツクの使用という両方の観点
から著しいオーバヘツドを課すことになる。
用目的に使用することのできるレジスタの数は制限され
ており、そして、コンパイラは、これらの汎用目的レジ
スタがコンパイルの間で参照される任意のプロシージヤ
によつて修正される可能性について、通常、悲観的な想
定をしなければならない。コンパイラあるいはプロセツ
サの性質に従つて、幾つかのレジスタは、本来的に、手
続きによつて修正可能なレジスタ、即ち「揮発性」レジ
スタとして識別することができる。IBM社のRISC
システム6000のターゲツト・プロセツサにおいて、
例えば、条件レジスタ(condition register)0乃至7
の内の2乃至4は揮発性レジスタであり、0乃至31の
汎用目的レジスタの内の3乃至12は揮発性レジスタで
あり、そして、0乃至31の浮動小数点レジスタの内の
0乃至13は揮発性レジスタであるように、多くのレジ
スタが揮発性レジスタである。個々の手続きは、すべて
のレジスタか、または少数のレジスタが修正を受けるこ
とにより特徴付けられるが、ある手続きが呼び出される
環境において、修正を受けるレジスタの実際の数は少な
い。この情報は、今日まで、複数の手続きを含むループ
において殆ど使用されていない。通常、ある手続きへの
進入は、その手続き、またはその手続きによつて呼び出
される他の手続きによつて修正を受けるすべてのレジス
タの内容を保存することを必要とし、これは、保存動作
(及び後続する復元動作)を実行するのに必要なマシン
・サイクルの期間と、スタツクの使用という両方の観点
から著しいオーバヘツドを課すことになる。
【0007】
【発明が解決しようとする課題】本発明の目的は、処理
コードの量を減少することによつて、上述した不必要な
オーバヘツドを減らすとともに、他の技術を適用した場
合のコンパイル時間の見地から能率を向上させるための
上述の後半部の最適化技術を与えることにある。
コードの量を減少することによつて、上述した不必要な
オーバヘツドを減らすとともに、他の技術を適用した場
合のコンパイル時間の見地から能率を向上させるための
上述の後半部の最適化技術を与えることにある。
【0008】
【課題を解決するための手段】本発明は、ターゲツト・
コンピユータにおいて実行可能なプログラムを与えるた
めに、高水準言語で書かれたコンピユータ・プログラム
をコンパイルする方法を与える。このコンパイル方法
は、プログラムを事前にコンパイルすることと、プログ
ラムが含んでいる手続きに関する呼び出しグラフのデー
タ及びこれらの手続きが呼び出される位置情報を収集す
ることと、通常の実行の間では呼び出されないか、希に
しか呼び出されないか、または呼び出しから復帰しない
ターゲツト手続きを識別することと、呼び出しグラフの
データによつて表示された図形順序に対して反対の図形
順序で上記実行可能なプログラムを与えるために、プロ
グラムを再コンパイルすることと、ターゲツト手続きに
よりレジスタの使用ができ、かつ、ターゲツト手続きを
呼び出す非ターゲツト手続きを再コンパイルしている間
では無視されるように、ターゲツトの手続き中で必要と
するすべてのコードを含むこととで構成されている。
コンピユータにおいて実行可能なプログラムを与えるた
めに、高水準言語で書かれたコンピユータ・プログラム
をコンパイルする方法を与える。このコンパイル方法
は、プログラムを事前にコンパイルすることと、プログ
ラムが含んでいる手続きに関する呼び出しグラフのデー
タ及びこれらの手続きが呼び出される位置情報を収集す
ることと、通常の実行の間では呼び出されないか、希に
しか呼び出されないか、または呼び出しから復帰しない
ターゲツト手続きを識別することと、呼び出しグラフの
データによつて表示された図形順序に対して反対の図形
順序で上記実行可能なプログラムを与えるために、プロ
グラムを再コンパイルすることと、ターゲツト手続きに
よりレジスタの使用ができ、かつ、ターゲツト手続きを
呼び出す非ターゲツト手続きを再コンパイルしている間
では無視されるように、ターゲツトの手続き中で必要と
するすべてのコードを含むこととで構成されている。
【0009】本発明は、プログラムの実行中にプログラ
ムによつて使用されるデータを格納するのに使用可能な
ハードウエア・レジスタを有するターゲツト・コンピユ
ータにおいて、実行可能なオブジエクト・コードを与え
るために、高レベルの言語か、または中間レベルの言語
のコード・モジユールからコンピユータ・プログラムを
コンパイルする方法に拡張されている。この方法は、コ
ード・モジユールをコンパイルすることと、コード・モ
ジユールの少なくとも1つをコンパイルする間に生じた
データを処理することと、含まれた手続きの呼び出しグ
ラフをプログラムにより発生し、かつ、プログラムの通
常の実行の間で希にしか呼び出されないか、全く呼び出
されない手続きか、または呼び出しから全く復帰しない
手続きかのうちの少なくとも1つのカテゴリの中のター
ゲツト手続きを識別するために、モジュールをリンクす
ることにより発生される実行可能なプログラムを実行す
ることと、手続きを再コンパイルすることと、手続きに
より修正可能なすべてのハードウエア・レジスタを保存
するために、手続きの入口の位置においてコードを含ま
せ、かつ、若し手続きが復帰するならば、保存されたレ
ジスタを復帰するためのコードを含ませて、識別された
ターゲツト手続きを再コンパイルし、これにより、上記
ターゲツト手続きはハードウエア・レジスタを使用しな
いように、それらの呼び出し位置を含む手続きをコンパ
イルする時に考慮されることとを含んでいる。
ムによつて使用されるデータを格納するのに使用可能な
ハードウエア・レジスタを有するターゲツト・コンピユ
ータにおいて、実行可能なオブジエクト・コードを与え
るために、高レベルの言語か、または中間レベルの言語
のコード・モジユールからコンピユータ・プログラムを
コンパイルする方法に拡張されている。この方法は、コ
ード・モジユールをコンパイルすることと、コード・モ
ジユールの少なくとも1つをコンパイルする間に生じた
データを処理することと、含まれた手続きの呼び出しグ
ラフをプログラムにより発生し、かつ、プログラムの通
常の実行の間で希にしか呼び出されないか、全く呼び出
されない手続きか、または呼び出しから全く復帰しない
手続きかのうちの少なくとも1つのカテゴリの中のター
ゲツト手続きを識別するために、モジュールをリンクす
ることにより発生される実行可能なプログラムを実行す
ることと、手続きを再コンパイルすることと、手続きに
より修正可能なすべてのハードウエア・レジスタを保存
するために、手続きの入口の位置においてコードを含ま
せ、かつ、若し手続きが復帰するならば、保存されたレ
ジスタを復帰するためのコードを含ませて、識別された
ターゲツト手続きを再コンパイルし、これにより、上記
ターゲツト手続きはハードウエア・レジスタを使用しな
いように、それらの呼び出し位置を含む手続きをコンパ
イルする時に考慮されることとを含んでいる。
【0010】また、本発明は、モジユラ・ソース・コー
ドを、ターゲツト・コンピユータにおいて実行可能なオ
ブジエクト・コードに変換するためにコンピユータ・プ
ログラムをコンパイルするための装置にも拡張されてお
り、この装置は、本発明の方法に従つて、本発明を実施
するコンパイラ・プログラムをロードすることによつ
て、本発明の方法を遂行するように構成された汎用コン
ピユータを含んでいる。更に、本発明は、上述のように
構成された汎用コンピユータのためのコンパイラ・プロ
グラムによつて記録された記録媒体にも拡張されてい
る。
ドを、ターゲツト・コンピユータにおいて実行可能なオ
ブジエクト・コードに変換するためにコンピユータ・プ
ログラムをコンパイルするための装置にも拡張されてお
り、この装置は、本発明の方法に従つて、本発明を実施
するコンパイラ・プログラムをロードすることによつ
て、本発明の方法を遂行するように構成された汎用コン
ピユータを含んでいる。更に、本発明は、上述のように
構成された汎用コンピユータのためのコンパイラ・プロ
グラムによつて記録された記録媒体にも拡張されてい
る。
【0011】本発明の最適化技術は、代表的な内部手続
き式の通常の最適化技術とは異なつて、手続き相互間の
関係に依存しており、従つて、希にしか使用されない手
続き、即ち、殆ど使用しない手続きは、より頻繁に使用
されこの手続きを呼び出す他の手続きの性能を改善する
ために、その性能を低下するような態様で修正される。
本発明を適用するためには、これらの手続き間関係を分
析せねばならない。よつて後述する本発明の実施例のよ
うに、そのような分析を利用することのできる他の最適
化技術と関連させて本発明を適用することが有利であり
便利であるし。そりわうに分析の特性としてこのことを
考慮することができる。然しながら、他の最適化技術は
本発明の一部を形成するものではない。
き式の通常の最適化技術とは異なつて、手続き相互間の
関係に依存しており、従つて、希にしか使用されない手
続き、即ち、殆ど使用しない手続きは、より頻繁に使用
されこの手続きを呼び出す他の手続きの性能を改善する
ために、その性能を低下するような態様で修正される。
本発明を適用するためには、これらの手続き間関係を分
析せねばならない。よつて後述する本発明の実施例のよ
うに、そのような分析を利用することのできる他の最適
化技術と関連させて本発明を適用することが有利であり
便利であるし。そりわうに分析の特性としてこのことを
考慮することができる。然しながら、他の最適化技術は
本発明の一部を形成するものではない。
【0012】
【実施例】本発明を実行するために、プログラムは、第
1に手続き間関係に関する情報を与えるためと、第2に
集められたこれらの情報を適用するための2度コンパイ
ルされなければならない。
1に手続き間関係に関する情報を与えるためと、第2に
集められたこれらの情報を適用するための2度コンパイ
ルされなければならない。
【0013】従つて、図1のコンパイラ中に組み込まれ
ているシステムは、2バスのシステムである。コンパイ
ル時間において遂行される第1のバスは、コンパイルさ
れた各手続きのためのサマリ(要約)情報を収集する。
リンク時間において遂行される第2のバスは、収集され
た情報を併合し、そしてこの併合された情報を使用し
て、アプリケーシヨン全体に対する手続き間関係の解法
(interprocedual solution)を計算する。次に、アプ
リケーシヨンは、最適化を増強するためにこの手続き間
解法を用いて再構成される。図1に示した実施例におい
て、ソース・コード・モジユールをコンパイルするため
の呼び出しを行なうと、コンパイラ2に対するコマンド
選択により、ソース・コード・モジユールをコンパイル
する手続きについての手続き間情報を収集させる。そし
て、コンパイラによつて作成されるオブジエクト・コー
ドをリンクするための呼び出しを行なうと、コンパイラ
のループ・モジユール4に対するコマンド選択により、
ループ・モジユールによつて、増強された最適化機能で
モジユールを再コンパイルするための手続き間関係で最
適化されたオブジエクト・コードのバージヨンをリンク
させて、高度に最適化された(golden)出力フアイル1
0を形成する。
ているシステムは、2バスのシステムである。コンパイ
ル時間において遂行される第1のバスは、コンパイルさ
れた各手続きのためのサマリ(要約)情報を収集する。
リンク時間において遂行される第2のバスは、収集され
た情報を併合し、そしてこの併合された情報を使用し
て、アプリケーシヨン全体に対する手続き間関係の解法
(interprocedual solution)を計算する。次に、アプ
リケーシヨンは、最適化を増強するためにこの手続き間
解法を用いて再構成される。図1に示した実施例におい
て、ソース・コード・モジユールをコンパイルするため
の呼び出しを行なうと、コンパイラ2に対するコマンド
選択により、ソース・コード・モジユールをコンパイル
する手続きについての手続き間情報を収集させる。そし
て、コンパイラによつて作成されるオブジエクト・コー
ドをリンクするための呼び出しを行なうと、コンパイラ
のループ・モジユール4に対するコマンド選択により、
ループ・モジユールによつて、増強された最適化機能で
モジユールを再コンパイルするための手続き間関係で最
適化されたオブジエクト・コードのバージヨンをリンク
させて、高度に最適化された(golden)出力フアイル1
0を形成する。
【0014】コンパイル処理中の情報の収集は、指定さ
れたコマンド選択を使用することによつて開始される。
フアイル及び各手続きのためのサマリ情報は、コンパイ
ル処理中で収集され、そして、リンクにおいて使用する
ために、生成されたオブジエクト・フアイル6に書き込
まれる。各オブジエクト・フアイル6は、付加情報を含
む適当な識別部分に関連付けられる。勿論、上述の方法
より簡便な場合には、この情報は別個のフアイル中に収
集することができる。
れたコマンド選択を使用することによつて開始される。
フアイル及び各手続きのためのサマリ情報は、コンパイ
ル処理中で収集され、そして、リンクにおいて使用する
ために、生成されたオブジエクト・フアイル6に書き込
まれる。各オブジエクト・フアイル6は、付加情報を含
む適当な識別部分に関連付けられる。勿論、上述の方法
より簡便な場合には、この情報は別個のフアイル中に収
集することができる。
【0015】このサマリ情報は下記の情報を含んでい
る。 ・完全に修飾されたソース・フアイルの名称。 ・内包する各手続きの名称(曖昧さを避けるため充分な
情報を持つ)。 ・呼び出されるコンパイラの選択(オプシヨン)。 ・各手続きの全呼び出し位置のリスト(識別の際に曖昧
さを避けるため充分な情報を持つ)。 ・各呼び出し位置のパラメータの一定の伝播情報。 ・各手続きの別名の情報。 ・他の最適化技術(例えばインラインや化クローン化)
のための適合性に関する情報、即ち各手続きに対する中
間言語のサイズ、自動的なストレージの使用及び一定の
パラメータ等。
る。 ・完全に修飾されたソース・フアイルの名称。 ・内包する各手続きの名称(曖昧さを避けるため充分な
情報を持つ)。 ・呼び出されるコンパイラの選択(オプシヨン)。 ・各手続きの全呼び出し位置のリスト(識別の際に曖昧
さを避けるため充分な情報を持つ)。 ・各呼び出し位置のパラメータの一定の伝播情報。 ・各手続きの別名の情報。 ・他の最適化技術(例えばインラインや化クローン化)
のための適合性に関する情報、即ち各手続きに対する中
間言語のサイズ、自動的なストレージの使用及び一定の
パラメータ等。
【0016】・呼び出し位置のポスト優性(post-domin
ance)の情報。 ・モレル−レインベスト(Morel-Reinvest)及び共通サ
ブエクスプレツシヨン・アルゴリズムにより計算された
ループからのコード移動の大きさ。 ・レジスタ・プレツシヤ/カラーリング(使用)の情
報。
ance)の情報。 ・モレル−レインベスト(Morel-Reinvest)及び共通サ
ブエクスプレツシヨン・アルゴリズムにより計算された
ループからのコード移動の大きさ。 ・レジスタ・プレツシヤ/カラーリング(使用)の情
報。
【0017】アプリケーシヨン中のすべてのフアイルが
コンパイルされる時、ユーザは、再度、上述のコマンド
選択によつてコンパイラを通してコンパイラ・ループ・
モジユール4を呼び出す。リンク時間ドライバ8は、オ
ブジエクト・フアイルから、そして、付加的にはオブジ
エクト・フアイル6の前のリンク動作によつて生成され
た出力フアイル上のプロフアイラ(profiler)を動作す
ることにより生成されるプロフアイリング・サンプル1
2からサマリ情報を読み取り、既知の呼び出しグラフの
技術を用いてアプリケーシヨンの呼び出しグラフ(call
graph)を計算する。
コンパイルされる時、ユーザは、再度、上述のコマンド
選択によつてコンパイラを通してコンパイラ・ループ・
モジユール4を呼び出す。リンク時間ドライバ8は、オ
ブジエクト・フアイルから、そして、付加的にはオブジ
エクト・フアイル6の前のリンク動作によつて生成され
た出力フアイル上のプロフアイラ(profiler)を動作す
ることにより生成されるプロフアイリング・サンプル1
2からサマリ情報を読み取り、既知の呼び出しグラフの
技術を用いてアプリケーシヨンの呼び出しグラフ(call
graph)を計算する。
【0018】例えば、下記に示すアプリケーシヨンを考
えてみる。 File a.c: File b.c: main() bar() { { ... ... foo() foobar(); ... ... bar()'; } } File c.: foobar() foo() { { ... ... foo(); } ... }
えてみる。 File a.c: File b.c: main() bar() { { ... ... foo() foobar(); ... ... bar()'; } } File c.: foobar() foo() { { ... ... foo(); } ... }
【0019】図2は上述の例の呼び出しグラフを示す図
である。リンク時間ドライバ8にアプリケーシヨンの呼
び出しグラフを作成する情報は、3つのオブジエクト・
フアイルの各々の中に含まれている。本発明によつて増
強する最適化のために、リンク時間ドライバは、アプリ
ケーシヨンの再コンパイル14を、下部から上部へ(図
1に示した図形の順序を逆順に)実行させる。図示の実
施例における順序はa.c(foo)、c.c(foobar)、b.c
(bar)及びa.c(main)である。最適化装置は、アプリ
ケーシヨン全体に対する手続き間解法が完了した後に、
ドライバのプログラムにより、この順序で反復して呼び
出される。
である。リンク時間ドライバ8にアプリケーシヨンの呼
び出しグラフを作成する情報は、3つのオブジエクト・
フアイルの各々の中に含まれている。本発明によつて増
強する最適化のために、リンク時間ドライバは、アプリ
ケーシヨンの再コンパイル14を、下部から上部へ(図
1に示した図形の順序を逆順に)実行させる。図示の実
施例における順序はa.c(foo)、c.c(foobar)、b.c
(bar)及びa.c(main)である。最適化装置は、アプリ
ケーシヨン全体に対する手続き間解法が完了した後に、
ドライバのプログラムにより、この順序で反復して呼び
出される。
【0020】手続き間解法は下記のような幾つかのステ
ツプで計算される。 ・各手続きの別名情報は、呼び出しグラフの経路に対し
て上方に伝播される。 ・一定のパラメータ情報は、呼び出しグラフの経路に対
して下方に伝播される。 ・若し使用可能ならば、プロフアイル情報が読み取ら
れ、そして呼び出しグラフのエツジが遮断カウントによ
りマークされる(図3参照)。 ・本発明の最適化技術を含む種々の最適化技術の候補を
識別するための発見的アルゴリズム、即ちユーリステツ
ク・アルゴリズムが実行される。
ツプで計算される。 ・各手続きの別名情報は、呼び出しグラフの経路に対し
て上方に伝播される。 ・一定のパラメータ情報は、呼び出しグラフの経路に対
して下方に伝播される。 ・若し使用可能ならば、プロフアイル情報が読み取ら
れ、そして呼び出しグラフのエツジが遮断カウントによ
りマークされる(図3参照)。 ・本発明の最適化技術を含む種々の最適化技術の候補を
識別するための発見的アルゴリズム、即ちユーリステツ
ク・アルゴリズムが実行される。
【0021】アプリケーシヨン中の各手続きが再コンパ
イルされると、レジスタ使用情報が保持され、そして後
続する再コンパイル中に送り戻される。コンパイルされ
た手続きによつて、どの使用可能なハードウエア・レジ
スタが修正可能であるかに関する規則を考慮すること
は、特定のハードウエア・プラツトフオームのために設
計されたコンパイラに対して有用である。例えば、RI
SCシステム/6000のターゲツト・プロセツサにお
いて、リンケージ規則は、汎用レジスタ9、1及び3乃
至12と、浮動小数点レジスタ0乃至13と、条件レジ
スタ9、1、5、6及び7と、カウント・レジスタとは
揮発性レジスタであることを指示する。反対に、情報が
ない場合、呼び出し側(発呼側)は、揮発性レジスタ中
に含まれた値が呼び出された側(被呼側)によつて消去
されていることを仮定しなければならない。
イルされると、レジスタ使用情報が保持され、そして後
続する再コンパイル中に送り戻される。コンパイルされ
た手続きによつて、どの使用可能なハードウエア・レジ
スタが修正可能であるかに関する規則を考慮すること
は、特定のハードウエア・プラツトフオームのために設
計されたコンパイラに対して有用である。例えば、RI
SCシステム/6000のターゲツト・プロセツサにお
いて、リンケージ規則は、汎用レジスタ9、1及び3乃
至12と、浮動小数点レジスタ0乃至13と、条件レジ
スタ9、1、5、6及び7と、カウント・レジスタとは
揮発性レジスタであることを指示する。反対に、情報が
ない場合、呼び出し側(発呼側)は、揮発性レジスタ中
に含まれた値が呼び出された側(被呼側)によつて消去
されていることを仮定しなければならない。
【0022】コンパイラは、リンク時に、呼び出しグラ
フの図形的順序の逆順でアプリケーシヨンを再コンパイ
ルする。従つて、被呼側の手続きは、それらの発呼側の
手続きより前に再コンパイルされる。メモリ28に被呼
側における実際のレジスタ使用情報26をストアするこ
とによつて、無変更の揮発性レジスタは、以然として発
呼側で使用可能である。この手続きはレジスタ・リサレ
クシヨン(register resurrection−レジスタ復帰)と
呼ばれる。レジスタ・リサレクシヨンは、使用可能なハ
ードウエア・レジスタのフアイルより良好にアプリケー
シヨンに使用させることができる。アプリケーシヨンが
遭遇するストレージ・トラフイツク、つまり手続きにサ
ービスするために利用可能なハードウエア・レジスタが
不充分であることに起因するデータ・スタツクでの交通
量、またはデータ・スタツクからの交通量は、レジスタ
保存/復元コード及びレジスタ・スピル(spill)コー
ドの縮小によつて少なくしなければならない。
フの図形的順序の逆順でアプリケーシヨンを再コンパイ
ルする。従つて、被呼側の手続きは、それらの発呼側の
手続きより前に再コンパイルされる。メモリ28に被呼
側における実際のレジスタ使用情報26をストアするこ
とによつて、無変更の揮発性レジスタは、以然として発
呼側で使用可能である。この手続きはレジスタ・リサレ
クシヨン(register resurrection−レジスタ復帰)と
呼ばれる。レジスタ・リサレクシヨンは、使用可能なハ
ードウエア・レジスタのフアイルより良好にアプリケー
シヨンに使用させることができる。アプリケーシヨンが
遭遇するストレージ・トラフイツク、つまり手続きにサ
ービスするために利用可能なハードウエア・レジスタが
不充分であることに起因するデータ・スタツクでの交通
量、またはデータ・スタツクからの交通量は、レジスタ
保存/復元コード及びレジスタ・スピル(spill)コー
ドの縮小によつて少なくしなければならない。
【0023】分析の結果、手続きに対する参照がレジス
タの内容を無効にすることが決定されたとしても、呼び
出し(発呼側)手続きにおいていずれにせよ必要とされ
るレジスタの保存及び復帰コードを移動することには利
益がある。この技術は、デバツグ処理手続き及びエラー
処理手続きのように、手続きが極めて希にしか参照され
ないことが分つている場合にも利益がある。
タの内容を無効にすることが決定されたとしても、呼び
出し(発呼側)手続きにおいていずれにせよ必要とされ
るレジスタの保存及び復帰コードを移動することには利
益がある。この技術は、デバツグ処理手続き及びエラー
処理手続きのように、手続きが極めて希にしか参照され
ないことが分つている場合にも利益がある。
【0024】1例を挙げる。 Preserve.f Do I=1,00000 C ... (多くのスカラまたはアレイを操作するコード) IF (X1(I).GT.1.OE32) CALL ERROR1(X1(I)) IF (x1(I).LT.0.1E-32) CALL ERROR2(X1(I)) C ... (これらのスカラまたはアレイでさらに処理を行なうコード) ENDDO
【0025】呼び出された(被呼側)手続きの修正がな
いと、コンパイラは、リンケージ規則の揮発性レジスタ
がERROR1及びERROR2への参照によつて無効にされ、従つ
て、参照前にレジスタ中にあり、参照後に必要とされる
すべての値を復元するための付加的なコードが生成され
ることを想定する。この付加的なコードは、性能を劣下
させ、ループのコード・サイズを増加させ、インストラ
クシヨン・キヤツシユ・ミス遅延を増加する。然しなが
ら、若しERROR1及びERROR2が殆ど呼び出されないものな
ら、無効にされたレジスタを保存し復元するコードは、
手続き中に転送することができるので、参照したプロセ
スの中に値を再ロードする必要がない。これは、各手続
きの開始時にレジスタ保存コードを置き、かつその手続
きの終了時にレジスタ復元コードを置くことによつて行
なわれる。
いと、コンパイラは、リンケージ規則の揮発性レジスタ
がERROR1及びERROR2への参照によつて無効にされ、従つ
て、参照前にレジスタ中にあり、参照後に必要とされる
すべての値を復元するための付加的なコードが生成され
ることを想定する。この付加的なコードは、性能を劣下
させ、ループのコード・サイズを増加させ、インストラ
クシヨン・キヤツシユ・ミス遅延を増加する。然しなが
ら、若しERROR1及びERROR2が殆ど呼び出されないものな
ら、無効にされたレジスタを保存し復元するコードは、
手続き中に転送することができるので、参照したプロセ
スの中に値を再ロードする必要がない。これは、各手続
きの開始時にレジスタ保存コードを置き、かつその手続
きの終了時にレジスタ復元コードを置くことによつて行
なわれる。
【0026】これは、より大きなオブジエクト・フアイ
ルを生じるけれども、レジスタ保存コードがインストラ
クシヨン・キヤツシユ中に殆どロードされず、かつ殆ど
実行されないので、インストラクシヨン・キヤツシユ及
びプロセツサの使用は改善される。
ルを生じるけれども、レジスタ保存コードがインストラ
クシヨン・キヤツシユ中に殆どロードされず、かつ殆ど
実行されないので、インストラクシヨン・キヤツシユ及
びプロセツサの使用は改善される。
【0027】レジスタ保存及び復帰コードを移動するこ
とは、エラーまたは範囲外の値が殆ど見出されない場合
には、エラーの処理または範囲をチエツクする手続きに
対して有用である。
とは、エラーまたは範囲外の値が殆ど見出されない場合
には、エラーの処理または範囲をチエツクする手続きに
対して有用である。
【0028】若し参照された手続きがプログラムを常に
終了するならば、そのプロセスが参照される時にレジス
タを無効にする理由はない。下記のCの例において、標
準機能exit()が条件ブロツクで呼び出される。通常、コ
ンパイラは、呼び出しにより無効にされるであろうすべ
ての要求されたレジスタを保存し復元するために、exit
()に対する呼び出しの前後にコードを挿入する。
終了するならば、そのプロセスが参照される時にレジス
タを無効にする理由はない。下記のCの例において、標
準機能exit()が条件ブロツクで呼び出される。通常、コ
ンパイラは、呼び出しにより無効にされるであろうすべ
ての要求されたレジスタを保存し復元するために、exit
()に対する呼び出しの前後にコードを挿入する。
【0029】int main(void) { /* ... */ for (i=0;i<10000;i++) { if (a[i]>10000.0) bailout(-1); else a[i]+=b[i]*c[i] } /* ... */ } int bailout(int retcode) { printf("Error: %5?n",msg[-retcode]); exit(retcode); }
【0030】コンパイラは、exit()が決して復帰しない
機能であることと、従つてbailout()への参照において
レジスタを保存することが重要でないこととを知らな
い。また、これは、RISCシステム6000のターゲ
ツト環境、FORTRANのSTOP(停止)ステートメン
トその他の終了手続きにおいて、C機能のabort()(放
棄)及びterminate()(終了)(または、assert()(表
明))に対してもあてはまる。リンカ(linker)は、ex
itの二次オプシヨンを特定することによつて、ある種の
標準的な手続きを終了手続きとして取り扱うように命令
することができる。この二次オプシヨンは手続きを終了
させることはできない。然しながら、呼び出しグラフ
は、ある手続きが常に終了手続きを呼び出すことを設定
することができ、そして、レジスタの保存が無効になる
呼び出しをした時に、終了手続きへの参照に関してレジ
スタが保存されないように、この情報を呼び出しチエー
ンの上方へ伝播することができる。
機能であることと、従つてbailout()への参照において
レジスタを保存することが重要でないこととを知らな
い。また、これは、RISCシステム6000のターゲ
ツト環境、FORTRANのSTOP(停止)ステートメン
トその他の終了手続きにおいて、C機能のabort()(放
棄)及びterminate()(終了)(または、assert()(表
明))に対してもあてはまる。リンカ(linker)は、ex
itの二次オプシヨンを特定することによつて、ある種の
標準的な手続きを終了手続きとして取り扱うように命令
することができる。この二次オプシヨンは手続きを終了
させることはできない。然しながら、呼び出しグラフ
は、ある手続きが常に終了手続きを呼び出すことを設定
することができ、そして、レジスタの保存が無効になる
呼び出しをした時に、終了手続きへの参照に関してレジ
スタが保存されないように、この情報を呼び出しチエー
ンの上方へ伝播することができる。
【0031】然しながら、本発明の最も利点のある適用
例は、プロフアイリング・データのフイードバツクと関
連している。プロフアイリング・サンプル12において
決して呼び出されることのない機能は、予め決められた
頻度よりも小さい頻度で呼び出される他の機能のよう
に、上述のように修正される。プロフアイリング情報は
単一のラン(実行)から収集してもよいし、幾つかの代
表的なランからユーザが収集してもよい。いずれの場合
でも、得られたサンプルは、実行中のアプリケーシヨン
の代表として考慮され、これに従つて修正のための手続
きが選択される。図3から理解できるように、呼び出し
グラフ中にプロフアイリング情報を含ませることは、頻
繁に呼び出される手続き16と、希にしか呼び出されな
いかまたは決して呼び出されない手続き18、20、2
2との間の境界にある手続きを上述のように修正するこ
とができる。希にしか呼び出されない手続きは本質的に
それ自身で頻度の低い呼び出しとなりうるので、本発明
のアプリケーシヨンは、しばしば実行される手続きが呼
び出し頻度の低い手続きを呼び出した位置においてのみ
必要とされることに注意を向ける必要がある。
例は、プロフアイリング・データのフイードバツクと関
連している。プロフアイリング・サンプル12において
決して呼び出されることのない機能は、予め決められた
頻度よりも小さい頻度で呼び出される他の機能のよう
に、上述のように修正される。プロフアイリング情報は
単一のラン(実行)から収集してもよいし、幾つかの代
表的なランからユーザが収集してもよい。いずれの場合
でも、得られたサンプルは、実行中のアプリケーシヨン
の代表として考慮され、これに従つて修正のための手続
きが選択される。図3から理解できるように、呼び出し
グラフ中にプロフアイリング情報を含ませることは、頻
繁に呼び出される手続き16と、希にしか呼び出されな
いかまたは決して呼び出されない手続き18、20、2
2との間の境界にある手続きを上述のように修正するこ
とができる。希にしか呼び出されない手続きは本質的に
それ自身で頻度の低い呼び出しとなりうるので、本発明
のアプリケーシヨンは、しばしば実行される手続きが呼
び出し頻度の低い手続きを呼び出した位置においてのみ
必要とされることに注意を向ける必要がある。
【0032】インライン化(inlining)やクローン化
(cloning)のような他の最適化技術は、上述のプロフ
アイリング情報の使用から利益を受ける。呼び出される
ことのない手続き、または希にしか呼び出されない手続
きのインライン化またはクローン化は利益がない。これ
は、過剰なインライン化によつて生じたコード・サイズ
の爆発的増大についての問題が直ちに因子にはならない
ので、使用頻度の高いルーチンのインライン化またはク
ローン化を積極的に進めることができる。図3は、プロ
フアイリングのフイードバツクを介して、ドラバースさ
れた頻度でエツジが記号付けられている総括的な呼び出
しグラフを示す図である。この情報によつて、ルーチン
18及び20の修正は、このような修正によつて作成さ
れた「防火壁(fire wall)」24以降のサブトリーを
隔離する。防火壁24は、手続き18、20及び22に
よるレジスタの使用が手続き16に対して見えないこと
を保証し、よつて、防火壁の背後の呼び出しに対しては
インライン技術またはクローニング技術を適用すること
には利益がないことを表わす。
(cloning)のような他の最適化技術は、上述のプロフ
アイリング情報の使用から利益を受ける。呼び出される
ことのない手続き、または希にしか呼び出されない手続
きのインライン化またはクローン化は利益がない。これ
は、過剰なインライン化によつて生じたコード・サイズ
の爆発的増大についての問題が直ちに因子にはならない
ので、使用頻度の高いルーチンのインライン化またはク
ローン化を積極的に進めることができる。図3は、プロ
フアイリングのフイードバツクを介して、ドラバースさ
れた頻度でエツジが記号付けられている総括的な呼び出
しグラフを示す図である。この情報によつて、ルーチン
18及び20の修正は、このような修正によつて作成さ
れた「防火壁(fire wall)」24以降のサブトリーを
隔離する。防火壁24は、手続き18、20及び22に
よるレジスタの使用が手続き16に対して見えないこと
を保証し、よつて、防火壁の背後の呼び出しに対しては
インライン技術またはクローニング技術を適用すること
には利益がないことを表わす。
【0033】コード・モジユール中に「防火壁」を作成
する必要が決定された後に、図4の模式的な流れ図に示
された発生ステツプが続けられる。
する必要が決定された後に、図4の模式的な流れ図に示
された発生ステツプが続けられる。
【0034】レジスタ割り当て処理40は、ターゲツト
・コンピユータ中のレジスタの各非結合クラスのための
解法を計算するために、プログラム・コードをレジスタ
割り当てアルゴリズムを通すことによつて達成される。
適切なレジスタ割り当てアルゴリズムは、例えば、19
81年のコンピユータ言語(Computer Language)6:
47−57の中のチヤイテイン(Chaitin)等による「R
egister Allocation and Spilling Via Graph Colorin
g」と題する開示に記載されている。
・コンピユータ中のレジスタの各非結合クラスのための
解法を計算するために、プログラム・コードをレジスタ
割り当てアルゴリズムを通すことによつて達成される。
適切なレジスタ割り当てアルゴリズムは、例えば、19
81年のコンピユータ言語(Computer Language)6:
47−57の中のチヤイテイン(Chaitin)等による「R
egister Allocation and Spilling Via Graph Colorin
g」と題する開示に記載されている。
【0035】レジスタ割り当て処理40は各レジスタ・
クラスに対してレジスタ割り当て出力42を発生する。
クラスに対してレジスタ割り当て出力42を発生する。
【0036】レジスタ割り当てループ40、42の複数
の通路は、ターゲツト・コンピユータのためのすべての
レジスタ・クラスに対する解法を計算し、かつ割り当て
るのに必要とされる。例えば、RISCシステム/60
00のターゲツト環境において、3つのレジスタ・クラ
スがあるので、レジスタ割り当てアルゴリズムの3つの
フエーズが必要である。
の通路は、ターゲツト・コンピユータのためのすべての
レジスタ・クラスに対する解法を計算し、かつ割り当て
るのに必要とされる。例えば、RISCシステム/60
00のターゲツト環境において、3つのレジスタ・クラ
スがあるので、レジスタ割り当てアルゴリズムの3つの
フエーズが必要である。
【0037】レジスタのすべてのクラスのためのレジス
タ割り当てに続いて、修正された揮発性レジスタのすべ
てを保持するために、プログラムのプロローグ(入口部
分)の中に、自動スタツクのストレージ部分を保留する
ためのコードが生成される44。勿論、このスタツク・
ストレージは、動作時間において割り当てられる。
タ割り当てに続いて、修正された揮発性レジスタのすべ
てを保持するために、プログラムのプロローグ(入口部
分)の中に、自動スタツクのストレージ部分を保留する
ためのコードが生成される44。勿論、このスタツク・
ストレージは、動作時間において割り当てられる。
【0038】次に、修正された各レジスタに対して、下
記のように各モジユールの中にコードが生成される4
6。すなわち、保留されたストレージ中の次に使用可能
なスロツト中に適当な幅のストアを実施するためのコー
ドがプロローグ中に生成され、保留されたストレージ中
の同じスロツトから同じ揮発性レジスタの中に適当な幅
のロードを実行するためのコードがプログラムのエピロ
ーグ(出口部分)の中に生成される。
記のように各モジユールの中にコードが生成される4
6。すなわち、保留されたストレージ中の次に使用可能
なスロツト中に適当な幅のストアを実施するためのコー
ドがプロローグ中に生成され、保留されたストレージ中
の同じスロツトから同じ揮発性レジスタの中に適当な幅
のロードを実行するためのコードがプログラムのエピロ
ーグ(出口部分)の中に生成される。
【0039】コンピユータ・プログラムにおいて生成さ
れた各モジユールは、 プロローグ・コード モジユールのためのメーン・コード エピローグ・コード を含んでいる。
れた各モジユールは、 プロローグ・コード モジユールのためのメーン・コード エピローグ・コード を含んでいる。
【0040】図5は、レギユラー・コンパイラが実行さ
れるのか、またはクロス・コンパイラが実行されるのか
に依存してコンパイルのターゲツト・コンピユータと同
じか、または同じでない汎用コンピユータ30におい
て、本発明のコンパイル方法が実施されることを説明す
る図である。汎用コンピユータ30は、ユーザとの対話
を与える通常のコンソール32と、データ34及びプロ
グラム36の両方のための通常のストレージとを持つて
いる。適当な媒体にストアされているプログラム38
は、コンパイル状態としてそのプログラムを構成するた
めに、コンピユータのプログラム・ストレージの中にロ
ードされる。データ・ストレージ34は、同じコンピユ
ータを使用するか、または別個のコンピユータを使用し
て実行されるプロフアイラ40からの入力データを受け
取ることができる。
れるのか、またはクロス・コンパイラが実行されるのか
に依存してコンパイルのターゲツト・コンピユータと同
じか、または同じでない汎用コンピユータ30におい
て、本発明のコンパイル方法が実施されることを説明す
る図である。汎用コンピユータ30は、ユーザとの対話
を与える通常のコンソール32と、データ34及びプロ
グラム36の両方のための通常のストレージとを持つて
いる。適当な媒体にストアされているプログラム38
は、コンパイル状態としてそのプログラムを構成するた
めに、コンピユータのプログラム・ストレージの中にロ
ードされる。データ・ストレージ34は、同じコンピユ
ータを使用するか、または別個のコンピユータを使用し
て実行されるプロフアイラ40からの入力データを受け
取ることができる。
【0041】このコンパイラは、通常の高水準言語か、
または、高水準言語が既に翻訳されている中間言語(I
L)かのいずれかを入力として受け取ることができ、そ
して、上述の中間言語は、適当なフロント・エンド・モ
ジユールによつて共通の中間言語に翻訳される幾つかの
異なつた言語に対して共通のコンパイラ位置を作る多く
のプログラムを受け入れることができる点で利益がある
ことには、注意を向ける必要がある。
または、高水準言語が既に翻訳されている中間言語(I
L)かのいずれかを入力として受け取ることができ、そ
して、上述の中間言語は、適当なフロント・エンド・モ
ジユールによつて共通の中間言語に翻訳される幾つかの
異なつた言語に対して共通のコンパイラ位置を作る多く
のプログラムを受け入れることができる点で利益がある
ことには、注意を向ける必要がある。
【0042】まとめとして、本発明の構成に関して以下
の事項を開示する。
の事項を開示する。
【0043】(1)コンピユータにおいて実行可能なプ
ログラムを与えるために、高水準言語で書かれたコンピ
ユータ・プログラムをコンパイルする方法において、プ
ログラムを事前にコンパイルし、該プログラムが含む手
続きに関する呼び出しグラフのデータを収集し、通常の
実行の時には希にしか呼び出されないかまたは全く呼び
出されないターゲツト手続き、または呼び出しから復帰
しないターゲツト手続きを識別するステツプと、上記実
行可能なプログラムを与えるためにプログラムを再コン
パイルするとともに、ターゲツト手続きを呼び出す非タ
ーゲツト手続きの再コンパイル中はターゲツト手続きに
よるレジスタの使用が無視されるようなコードを、該タ
ーゲツト手続きに含ませるステツプとを含む、コンパイ
ル方法。 (2)プログラムは、上記呼び出しグラフのデータによ
つて示されたトポロジの逆順で再コンパイルされる、
(1)に記載のコンパイル方法。 (3)非ターゲツト手続きによつて形成されたプログラ
ム部分に対して付加的な最適化技術を適用する、(1)
に記載のコンパイル方法。 (4)プログラムの実行中に使用されるデータを格納す
るために使用可能なハードウエア・レジスタを有するタ
ーゲツト・コンピユータにおいて実行可能なオブジエク
ト・コードを与えるために、高水準言語もしくは中間言
語のコード・モジユールからコンピユータ・プログラム
をコンパイルする方法において、コード・モジユールを
コンパイルするステツプと、コード・モジユールのコン
パイル中、並びに該モジュールをリンクすることにより
生成された実行可能なプログラムの実行中に生成された
データを処理し、該プログラムによつて構成された手続
きの呼び出しグラフを生成し、かつ、プログラムの通常
の実行の間で希にしか呼び出されないかもしくは全く呼
び出されない手続きか、または呼び出しから全く復帰し
ない手続きのうちの少なくとも1つのカテゴリにあるタ
ーゲツト手続きを識別するステツプと、前記手続きを再
コンパイルするステツプであつて、復帰しない手続き以
外の識別されたターゲツト手続きについては、修正可能
なすべてのハードウエア・レジスタを保存するためのコ
ードを該手続きの入口において含ませ、かつ保存された
レジスタを復元するためのコードを該手続きの出口にお
いて含ませて再コンパイルし、呼び出し位置を含む手続
きのコンパイル時に、上記ターゲツト手続きがハードウ
エア・レジスタを使用しないように考慮する再コンパイ
ル・ステツプとからなるコンパイル方法。 (5)識別されたターゲツト手続きは、その呼び出しに
よつてプログラムから出て行く手続きを含む、(4)に
記載のコンパイル方法。 (6)処理される前記データは、コンパイルされたモジ
ユールをリンクすることによつて生成される実行可能な
プログラム上のプロフアイラを動作することにより生成
されるデータを含み、かつ、前記ターゲツト手続きは、
若し希にしか呼び出されないものであれば、プロフアイ
ラによつて識別される手続きを含む、(4)に記載のコ
ンパイル方法。 (7)前記ターゲツト手続きは、生成されたデータを基
礎として、オペレータによつて選択された手続きを含
む、(4)に記載のコンパイル方法。 (8)レジスタ保存及び復元コードのターゲツト手続き
への導入を、レジスタ保存及び復帰コードを含む元の手
続きのコードに、プロローグ・コード及びエピローグ・
コードを付加することによつて実行する、(4)に記載
のコンパイル方法。 (9)前記手続きは、呼び出しグラフによつて示されて
いる呼び出し順序とは逆の順序で再コンパイルされ、か
つ、ターゲツト手続きの再コンパイルは、上記ターゲツ
ト手続きの呼び出し位置を含む手続きの再コンパイルよ
りも先行する、(4)に記載のコンパイル方法。 (10)ユーザ・インターフエースと、データ・ストレ
ージ及びプログラム・ストレージとを有するコンピユー
タにおいて、第1コンパイル手段と第2コンパイル手段
とを設け、コード・モジユールから実行可能なプログラ
ムを生成するコンパイル装置であつて、上記第1コンパ
イル手段が、各手続きを識別するデータ、各手続きにお
ける呼び出し位置及びレジスタ使用情報を含む、コンパ
イルされた各ソース・コード・モジユールに関するデー
タを生成する手段を含むとともに、上記第2コンパイル
手段が、第1コンパイル手段によつて生成されたデータ
を受け取つて呼び出しグラフのデータを形成する手段
と、コード・モジユール中に含まれた手続きを修正する
ための手段と、ハードウエア・レジスタの使用情報をデ
ータ・ストレージにストアしている間に、これらの手続
きを再コンパイルする手段と、再コンパイルされたコー
ド・モジユールをリンクして実行可能なプログラムを生
成する手段とを含み、上記第2コンパイル手段中の上記
修正手段は、実行可能なプログラムの通常の実行の間で
希にしか用いられないか、または全く用いられないター
ゲツト手続きを識別する手段と、レジスタを保存及び復
元するために必要なコードを挿入することにより該手続
きを修正し、修正された該手続きの呼び出し位置を含む
後続の再コンパイルされた手続きについては、呼び出さ
れた手続きによるハードウエア・レジスタの修正を考慮
することなくコンパイルできるようにする手段を含むコ
ンパイル装置。 (11)コード・モジユール中に含まれた手続きを再コ
ンパイルする上記手段は、呼び出しグラフのデータによ
つて定義された図形の順序とは逆の順序でこれらの手続
きを再コンパイルする、(10)に記載のコンパイル装
置。 (12)ターゲツト手続きを識別する上記手段はプロフ
アイラを含んでいる、(10)に記載のコンパイル装
置。 (13)ターゲツト手続きを識別する上記手段はプログ
ラムを終了に導く手続きを検知する手段を含む、(1
0)に記載のコンパイル装置。
ログラムを与えるために、高水準言語で書かれたコンピ
ユータ・プログラムをコンパイルする方法において、プ
ログラムを事前にコンパイルし、該プログラムが含む手
続きに関する呼び出しグラフのデータを収集し、通常の
実行の時には希にしか呼び出されないかまたは全く呼び
出されないターゲツト手続き、または呼び出しから復帰
しないターゲツト手続きを識別するステツプと、上記実
行可能なプログラムを与えるためにプログラムを再コン
パイルするとともに、ターゲツト手続きを呼び出す非タ
ーゲツト手続きの再コンパイル中はターゲツト手続きに
よるレジスタの使用が無視されるようなコードを、該タ
ーゲツト手続きに含ませるステツプとを含む、コンパイ
ル方法。 (2)プログラムは、上記呼び出しグラフのデータによ
つて示されたトポロジの逆順で再コンパイルされる、
(1)に記載のコンパイル方法。 (3)非ターゲツト手続きによつて形成されたプログラ
ム部分に対して付加的な最適化技術を適用する、(1)
に記載のコンパイル方法。 (4)プログラムの実行中に使用されるデータを格納す
るために使用可能なハードウエア・レジスタを有するタ
ーゲツト・コンピユータにおいて実行可能なオブジエク
ト・コードを与えるために、高水準言語もしくは中間言
語のコード・モジユールからコンピユータ・プログラム
をコンパイルする方法において、コード・モジユールを
コンパイルするステツプと、コード・モジユールのコン
パイル中、並びに該モジュールをリンクすることにより
生成された実行可能なプログラムの実行中に生成された
データを処理し、該プログラムによつて構成された手続
きの呼び出しグラフを生成し、かつ、プログラムの通常
の実行の間で希にしか呼び出されないかもしくは全く呼
び出されない手続きか、または呼び出しから全く復帰し
ない手続きのうちの少なくとも1つのカテゴリにあるタ
ーゲツト手続きを識別するステツプと、前記手続きを再
コンパイルするステツプであつて、復帰しない手続き以
外の識別されたターゲツト手続きについては、修正可能
なすべてのハードウエア・レジスタを保存するためのコ
ードを該手続きの入口において含ませ、かつ保存された
レジスタを復元するためのコードを該手続きの出口にお
いて含ませて再コンパイルし、呼び出し位置を含む手続
きのコンパイル時に、上記ターゲツト手続きがハードウ
エア・レジスタを使用しないように考慮する再コンパイ
ル・ステツプとからなるコンパイル方法。 (5)識別されたターゲツト手続きは、その呼び出しに
よつてプログラムから出て行く手続きを含む、(4)に
記載のコンパイル方法。 (6)処理される前記データは、コンパイルされたモジ
ユールをリンクすることによつて生成される実行可能な
プログラム上のプロフアイラを動作することにより生成
されるデータを含み、かつ、前記ターゲツト手続きは、
若し希にしか呼び出されないものであれば、プロフアイ
ラによつて識別される手続きを含む、(4)に記載のコ
ンパイル方法。 (7)前記ターゲツト手続きは、生成されたデータを基
礎として、オペレータによつて選択された手続きを含
む、(4)に記載のコンパイル方法。 (8)レジスタ保存及び復元コードのターゲツト手続き
への導入を、レジスタ保存及び復帰コードを含む元の手
続きのコードに、プロローグ・コード及びエピローグ・
コードを付加することによつて実行する、(4)に記載
のコンパイル方法。 (9)前記手続きは、呼び出しグラフによつて示されて
いる呼び出し順序とは逆の順序で再コンパイルされ、か
つ、ターゲツト手続きの再コンパイルは、上記ターゲツ
ト手続きの呼び出し位置を含む手続きの再コンパイルよ
りも先行する、(4)に記載のコンパイル方法。 (10)ユーザ・インターフエースと、データ・ストレ
ージ及びプログラム・ストレージとを有するコンピユー
タにおいて、第1コンパイル手段と第2コンパイル手段
とを設け、コード・モジユールから実行可能なプログラ
ムを生成するコンパイル装置であつて、上記第1コンパ
イル手段が、各手続きを識別するデータ、各手続きにお
ける呼び出し位置及びレジスタ使用情報を含む、コンパ
イルされた各ソース・コード・モジユールに関するデー
タを生成する手段を含むとともに、上記第2コンパイル
手段が、第1コンパイル手段によつて生成されたデータ
を受け取つて呼び出しグラフのデータを形成する手段
と、コード・モジユール中に含まれた手続きを修正する
ための手段と、ハードウエア・レジスタの使用情報をデ
ータ・ストレージにストアしている間に、これらの手続
きを再コンパイルする手段と、再コンパイルされたコー
ド・モジユールをリンクして実行可能なプログラムを生
成する手段とを含み、上記第2コンパイル手段中の上記
修正手段は、実行可能なプログラムの通常の実行の間で
希にしか用いられないか、または全く用いられないター
ゲツト手続きを識別する手段と、レジスタを保存及び復
元するために必要なコードを挿入することにより該手続
きを修正し、修正された該手続きの呼び出し位置を含む
後続の再コンパイルされた手続きについては、呼び出さ
れた手続きによるハードウエア・レジスタの修正を考慮
することなくコンパイルできるようにする手段を含むコ
ンパイル装置。 (11)コード・モジユール中に含まれた手続きを再コ
ンパイルする上記手段は、呼び出しグラフのデータによ
つて定義された図形の順序とは逆の順序でこれらの手続
きを再コンパイルする、(10)に記載のコンパイル装
置。 (12)ターゲツト手続きを識別する上記手段はプロフ
アイラを含んでいる、(10)に記載のコンパイル装
置。 (13)ターゲツト手続きを識別する上記手段はプログ
ラムを終了に導く手続きを検知する手段を含む、(1
0)に記載のコンパイル装置。
【0044】
【発明の効果】本発明は、高水準言語で書かれたコンピ
ユータ・プログラムをターゲツト・コンピユータにおい
て実行可能なオブジエクト・プログラムのソース・コー
ドにコンパイルする場合に、他のコンパイル技術で処理
されるコードの量を減少させて、プログラムの実行動作
及びコンパイルの動作の両方に最大の効率を与える。
ユータ・プログラムをターゲツト・コンピユータにおい
て実行可能なオブジエクト・プログラムのソース・コー
ドにコンパイルする場合に、他のコンパイル技術で処理
されるコードの量を減少させて、プログラムの実行動作
及びコンパイルの動作の両方に最大の効率を与える。
【図1】本発明を実施するためのコンパイラの関連部分
の構成を説明するためのブロツク図である。
の構成を説明するためのブロツク図である。
【図2】簡単なプログラムの呼び出しグラフを示す模式
図である。
図である。
【図3】呼び出しグラフに適用された現在の情報の動作
を説明するための模式図である。
を説明するための模式図である。
【図4】本発明の方法を実施するためのコンピユータで
実施されるステツプを説明するための流れ図である。
実施されるステツプを説明するための流れ図である。
【図5】本発明を実施するために使用される装置のブロ
ツク図である。
ツク図である。
2 コンパイラ 4 ループ・モジユール 6、10 オブジエクト・フアイル 8 リンク時間ドライバ 12 プロフアイル・サンプル 14 再コンパイル 24 防火壁 26 レジスタ情報 28 共有メモリ 30 コンピユータ 32 コンソール 34 データ・ストレージ 36 プログラム・ストレージ 38 コンピユータ・プログラム 40 プロフアイラ
Claims (13)
- 【請求項1】コンピユータにおいて実行可能なプログラ
ムを与えるために、高水準言語で書かれたコンピユータ
・プログラムをコンパイルする方法において、 プログラムを事前にコンパイルし、該プログラムが含む
手続きに関する呼び出しグラフのデータを収集し、通常
の実行の時には希にしか呼び出されないかまたは全く呼
び出されないターゲツト手続き、または呼び出しから復
帰しないターゲツト手続きを識別するステツプと、 上記実行可能なプログラムを与えるためにプログラムを
再コンパイルするとともに、ターゲツト手続きを呼び出
す非ターゲツト手続きの再コンパイル中はターゲツト手
続きによるレジスタの使用が無視されるようなコード
を、該ターゲツト手続きに含ませるステツプとを含む、
コンパイル方法。 - 【請求項2】プログラムは、上記呼び出しグラフのデー
タによつて示されたトポロジの逆順で再コンパイルされ
る、請求項1に記載のコンパイル方法。 - 【請求項3】非ターゲツト手続きによつて形成されたプ
ログラム部分に対して付加的な最適化技術を適用する、
請求項1に記載のコンパイル方法。 - 【請求項4】プログラムの実行中に使用されるデータを
格納するために使用可能なハードウエア・レジスタを有
するターゲツト・コンピユータにおいて実行可能なオブ
ジエクト・コードを与えるために、高水準言語もしくは
中間言語のコード・モジユールからコンピユータ・プロ
グラムをコンパイルする方法において、 コード・モジユールをコンパイルするステツプと、 コード・モジユールのコンパイル中、並びに該モジュー
ルをリンクすることにより生成された実行可能なプログ
ラムの実行中に生成されたデータを処理し、該プログラ
ムによつて構成された手続きの呼び出しグラフを生成
し、かつ、プログラムの通常の実行の間で希にしか呼び
出されないかもしくは全く呼び出されない手続きか、ま
たは呼び出しから全く復帰しない手続きのうちの少なく
とも1つのカテゴリにあるターゲツト手続きを識別する
ステツプと、 前記手続きを再コンパイルするステツプであつて、復帰
しない手続き以外の識別されたターゲツト手続きについ
ては、修正可能なすべてのハードウエア・レジスタを保
存するためのコードを該手続きの入口において含ませ、
かつ保存されたレジスタを復元するためのコードを該手
続きの出口において含ませて再コンパイルし、呼び出し
位置を含む手続きのコンパイル時に、上記ターゲツト手
続きがハードウエア・レジスタを使用しないように考慮
する再コンパイル・ステツプとからなるコンパイル方
法。 - 【請求項5】識別されたターゲツト手続きは、その呼び
出しによつてプログラムから出て行く手続きを含む、請
求項4に記載のコンパイル方法。 - 【請求項6】処理される前記データは、コンパイルされ
たモジユールをリンクすることによつて生成される実行
可能なプログラム上のプロフアイラを動作することによ
り生成されるデータを含み、かつ、前記ターゲツト手続
きは、若し希にしか呼び出されないものであれば、プロ
フアイラによつて識別される手続きを含む、請求項4に
記載のコンパイル方法。 - 【請求項7】前記ターゲツト手続きは、生成されたデー
タを基礎として、オペレータによつて選択された手続き
を含む、請求項4に記載のコンパイル方法。 - 【請求項8】レジスタ保存及び復元コードのターゲツト
手続きへの導入を、レジスタ保存及び復帰コードを含む
元の手続きのコードに、プロローグ・コード及びエピロ
ーグ・コードを付加することによつて実行する、請求項
4に記載のコンパイル方法。 - 【請求項9】前記手続きは、呼び出しグラフによつて示
されている呼び出し順序とは逆の順序で再コンパイルさ
れ、かつ、ターゲツト手続きの再コンパイルは、上記タ
ーゲツト手続きの呼び出し位置を含む手続きの再コンパ
イルよりも先行する、請求項4に記載のコンパイル方
法。 - 【請求項10】ユーザ・インターフエースと、データ・
ストレージ及びプログラム・ストレージとを有するコン
ピユータにおいて、第1コンパイル手段と第2コンパイ
ル手段とを設け、コード・モジユールから実行可能なプ
ログラムを生成するコンパイル装置であつて、 上記第1コンパイル手段が、各手続きを識別するデー
タ、各手続きにおける呼び出し位置及びレジスタ使用情
報を含む、コンパイルされた各ソース・コード・モジユ
ールに関するデータを生成する手段を含むとともに、上
記第2コンパイル手段が、第1コンパイル手段によつて
生成されたデータを受け取つて呼び出しグラフのデータ
を形成する手段と、コード・モジユール中に含まれた手
続きを修正するための手段と、ハードウエア・レジスタ
の使用情報をデータ・ストレージにストアしている間
に、これらの手続きを再コンパイルする手段と、再コン
パイルされたコード・モジユールをリンクして実行可能
なプログラムを生成する手段とを含み、 上記第2コンパイル手段中の上記修正手段は、実行可能
なプログラムの通常の実行の間で希にしか用いられない
か、または全く用いられないターゲツト手続きを識別す
る手段と、レジスタを保存及び復元するために必要なコ
ードを挿入することにより該手続きを修正し、修正され
た該手続きの呼び出し位置を含む後続の再コンパイルさ
れた手続きについては、呼び出された手続きによるハー
ドウエア・レジスタの修正を考慮することなくコンパイ
ルする手段を含むコンパイル装置。 - 【請求項11】コード・モジユール中に含まれた手続き
を再コンパイルする上記手段は、呼び出しグラフのデー
タによつて定義された図形の順序とは逆の順序でこれら
の手続きを再コンパイルする、請求項10に記載のコン
パイル装置。 - 【請求項12】ターゲツト手続きを識別する上記手段は
プロフアイラを含んでいる、請求項10に記載のコンパ
イル装置。 - 【請求項13】ターゲツト手続きを識別する上記手段は
プログラムを終了に導く手続きを検知する手段を含む、
請求項10に記載のコンパイル装置。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CA002102089A CA2102089C (en) | 1993-10-29 | 1993-10-29 | Recompilation of computer programs for enhanced optimization |
| CA2102089 | 1993-10-29 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH07129412A true JPH07129412A (ja) | 1995-05-19 |
| JP3337174B2 JP3337174B2 (ja) | 2002-10-21 |
Family
ID=4152045
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP18380294A Expired - Fee Related JP3337174B2 (ja) | 1993-10-29 | 1994-08-04 | コンパイル方法 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US5768595A (ja) |
| EP (1) | EP0651327A3 (ja) |
| JP (1) | JP3337174B2 (ja) |
| CA (1) | CA2102089C (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH09274570A (ja) * | 1996-04-08 | 1997-10-21 | Mitsubishi Electric Corp | コンパイル方法及びコンパイラシステム |
| US9383980B2 (en) | 2013-02-22 | 2016-07-05 | International Business Machines Corporation | Determining a method to inline using an actual footprint calculation |
Families Citing this family (37)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CA2166253C (en) * | 1995-12-28 | 2000-02-08 | Robert James Blainey | Connectivity based program partitioning |
| CA2166252C (en) * | 1995-12-28 | 1999-08-24 | Robert James Blainey | Global variable coalescing |
| US5937195A (en) * | 1996-11-27 | 1999-08-10 | Hewlett-Packard Co | Global control flow treatment of predicated code |
| US6016398A (en) * | 1997-04-01 | 2000-01-18 | Intel Corporation | Method for using static single assignment to color out artificial register dependencies |
| US6072951A (en) * | 1997-10-15 | 2000-06-06 | International Business Machines Corporation | Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure) |
| US7337173B1 (en) * | 1997-12-04 | 2008-02-26 | Netscape Communications Corporation | Compiler having global element optimization |
| US6029000A (en) * | 1997-12-22 | 2000-02-22 | Texas Instruments Incorporated | Mobile communication system with cross compiler and cross linker |
| US6175956B1 (en) * | 1998-07-15 | 2001-01-16 | International Business Machines Corporation | Method and computer program product for implementing method calls in a computer system |
| US6195793B1 (en) * | 1998-07-22 | 2001-02-27 | International Business Machines Corporation | Method and computer program product for adaptive inlining in a computer system |
| US6983459B1 (en) * | 1999-04-06 | 2006-01-03 | International Business Machines Corporation | Incorporating register pressure into an inlining compiler |
| JP4462676B2 (ja) * | 1999-10-27 | 2010-05-12 | 富士通株式会社 | プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体 |
| US6862730B1 (en) * | 2000-04-26 | 2005-03-01 | Lucent Technologies Inc. | Register allocation in code translation between processors |
| US6658656B1 (en) * | 2000-10-31 | 2003-12-02 | Hewlett-Packard Development Company, L.P. | Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions |
| US7086044B2 (en) * | 2001-03-22 | 2006-08-01 | International Business Machines Corporation | Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization |
| US7017154B2 (en) * | 2001-03-23 | 2006-03-21 | International Business Machines Corporation | Eliminating store/restores within hot function prolog/epilogs using volatile registers |
| US7010785B2 (en) * | 2001-03-23 | 2006-03-07 | International Business Machines Corporation | Eliminating cold register store/restores within hot function prolog/epilogs |
| US7275242B2 (en) * | 2002-10-04 | 2007-09-25 | Hewlett-Packard Development Company, L.P. | System and method for optimizing a program |
| US7269827B2 (en) * | 2002-10-21 | 2007-09-11 | Intel Corporation | Method and apparatus for compiling code |
| US7685581B2 (en) * | 2003-06-27 | 2010-03-23 | Microsoft Corporation | Type system for representing and checking consistency of heterogeneous program components during the process of compilation |
| US7559050B2 (en) * | 2003-06-30 | 2009-07-07 | Microsoft Corporation | Generating software development tools via target architecture specification |
| US7707566B2 (en) | 2003-06-26 | 2010-04-27 | Microsoft Corporation | Software development infrastructure |
| US7120898B2 (en) | 2003-06-26 | 2006-10-10 | Microsoft Corporation | Intermediate representation for multiple exception handling models |
| US7305666B2 (en) * | 2003-07-23 | 2007-12-04 | Microsoft Corporation | Description language for an extensible compiler and tools infrastructure |
| US7146606B2 (en) * | 2003-06-26 | 2006-12-05 | Microsoft Corporation | General purpose intermediate representation of software for software development tools |
| US7086041B2 (en) * | 2003-06-27 | 2006-08-01 | Microsoft Corporation | Extensible type system for representing and checking consistency of program components during the process of compilation |
| US7788652B2 (en) * | 2003-06-27 | 2010-08-31 | Microsoft Corporation | Representing type information in a compiler and programming tools framework |
| US7661095B2 (en) * | 2005-04-14 | 2010-02-09 | Hewlett-Packard Development Company, L.P. | System and method to build a callgraph for functions with multiple entry points |
| US7493602B2 (en) * | 2005-05-02 | 2009-02-17 | International Business Machines Corporation | Methods and arrangements for unified program analysis |
| US20070089104A1 (en) * | 2005-10-13 | 2007-04-19 | Arie Tal | Method and system for managing heuristic properties |
| US7987452B2 (en) * | 2005-12-15 | 2011-07-26 | International Business Machines Corporation | Profile-driven lock handling |
| WO2007095642A2 (en) * | 2006-02-16 | 2007-08-23 | The Regents Of The University Of California | Dynamic incremental compiler and method |
| US8117604B2 (en) * | 2006-07-31 | 2012-02-14 | International Business Machines Corporation | Architecture cloning for power PC processors |
| US8370821B2 (en) * | 2007-08-21 | 2013-02-05 | International Business Machines Corporation | Method for enabling profile-based call site tailor-ing using profile gathering of cloned functions |
| US8473935B2 (en) * | 2008-04-21 | 2013-06-25 | Microsoft Corporation | Just-ahead-of-time compilation |
| US8522218B2 (en) * | 2010-03-12 | 2013-08-27 | Microsoft Corporation | Cross-module inlining candidate identification |
| US9996325B2 (en) | 2013-03-06 | 2018-06-12 | Qualcomm Incorporated | Dynamic reconfigurable compiler |
| US9027007B2 (en) * | 2013-03-06 | 2015-05-05 | Qualcomm Incorporated | Reducing excessive compilation times |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH03172936A (ja) * | 1989-11-13 | 1991-07-26 | Hewlett Packard Co <Hp> | 手順間レジスタ割付けを伴うコンピュータプログラムのコンパイル方法及び装置 |
Family Cites Families (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5339238A (en) * | 1991-03-07 | 1994-08-16 | Benson Thomas R | Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph |
| US5301325A (en) * | 1991-03-07 | 1994-04-05 | Digital Equipment Corporation | Use of stack depth to identify architechture and calling standard dependencies in machine code |
| US5339428A (en) * | 1991-09-04 | 1994-08-16 | Digital Equipment Corporation | Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register |
-
1993
- 1993-10-29 CA CA002102089A patent/CA2102089C/en not_active Expired - Fee Related
-
1994
- 1994-08-04 JP JP18380294A patent/JP3337174B2/ja not_active Expired - Fee Related
- 1994-10-14 EP EP94307568A patent/EP0651327A3/en not_active Withdrawn
-
1996
- 1996-02-07 US US08/598,065 patent/US5768595A/en not_active Expired - Fee Related
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH03172936A (ja) * | 1989-11-13 | 1991-07-26 | Hewlett Packard Co <Hp> | 手順間レジスタ割付けを伴うコンピュータプログラムのコンパイル方法及び装置 |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH09274570A (ja) * | 1996-04-08 | 1997-10-21 | Mitsubishi Electric Corp | コンパイル方法及びコンパイラシステム |
| US9383980B2 (en) | 2013-02-22 | 2016-07-05 | International Business Machines Corporation | Determining a method to inline using an actual footprint calculation |
Also Published As
| Publication number | Publication date |
|---|---|
| EP0651327A3 (en) | 1995-06-21 |
| JP3337174B2 (ja) | 2002-10-21 |
| CA2102089A1 (en) | 1995-04-30 |
| US5768595A (en) | 1998-06-16 |
| CA2102089C (en) | 1999-05-25 |
| EP0651327A2 (en) | 1995-05-03 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3337174B2 (ja) | コンパイル方法 | |
| US6973644B2 (en) | Program interpreter | |
| US6072951A (en) | Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure) | |
| US5778233A (en) | Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program | |
| Krall | Efficient JavaVM just-in-time compilation | |
| US5768596A (en) | System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation | |
| US6173444B1 (en) | Optimizing compilation of pointer variables in the presence of indirect function calls | |
| US7493610B1 (en) | Versioning optimization for dynamically-typed languages | |
| US6078744A (en) | Method and apparatus for improving compiler performance during subsequent compilations of a source program | |
| US8769511B2 (en) | Dynamic incremental compiler and method | |
| US5586328A (en) | Module dependency based incremental compiler and method | |
| EP0646864B1 (en) | Optimising compiler | |
| US5761514A (en) | Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system | |
| US6072952A (en) | Method and apparatus for coalescing variables | |
| US20070226720A1 (en) | System and Method for Efficiently Passing Information Between Compiler and Post-Compile-Time Software | |
| Suganuma et al. | A region-based compilation technique for a Java just-in-time compiler | |
| Jagannathan et al. | Flow-directed inlining | |
| US6895580B2 (en) | Expression reduction during compilation through routine cloning | |
| US7124407B1 (en) | Method and apparatus for caching native code in a virtual machine interpreter | |
| Hummel et al. | Annotating the Java bytecodes in support of optimization | |
| Suganuma et al. | A region-based compilation technique for dynamic compilers | |
| US5854933A (en) | Method for optimizing a computer program by moving certain load and store instructions out of a loop | |
| US20040015918A1 (en) | Program optimization method and compiler using the program optimization method | |
| US6820258B1 (en) | System and method for dynamically optimizing executing activations | |
| Leopoldseder et al. | Fast-path loop unrolling of non-counted loops to enable subsequent compiler optimizations |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| LAPS | Cancellation because of no payment of annual fees |