JPH0552971B2 - - Google Patents
Info
- Publication number
- JPH0552971B2 JPH0552971B2 JP2165866A JP16586690A JPH0552971B2 JP H0552971 B2 JPH0552971 B2 JP H0552971B2 JP 2165866 A JP2165866 A JP 2165866A JP 16586690 A JP16586690 A JP 16586690A JP H0552971 B2 JPH0552971 B2 JP H0552971B2
- Authority
- JP
- Japan
- Prior art keywords
- subgraph
- optimization
- program
- specified procedure
- array
- 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.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 claims description 56
- 238000005457 optimization Methods 0.000 claims description 54
- 230000014509 gene expression Effects 0.000 claims description 12
- 230000033001 locomotion Effects 0.000 claims description 7
- 238000007689 inspection Methods 0.000 claims 1
- 230000008901 benefit Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 238000010187 selection method Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009194 climbing Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 231100000935 short-term exposure limit Toxicity 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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)
Description
【発明の詳細な説明】
A 産業上の利用分野
本発明は最適化コンパイラに関し、さらに詳し
くは、大域的最適化アルゴリズム(ここでは「指
定プロシージヤ(specified procedure)」と呼
ぶ)を用いるコンパイラで大きなプラグラムをコ
ンパイルするときに、メモリ・スペースの不足か
ら最適化プロセスが中止されることのないように
し、もつて生成されるコードの質を高める方法に
関する。
くは、大域的最適化アルゴリズム(ここでは「指
定プロシージヤ(specified procedure)」と呼
ぶ)を用いるコンパイラで大きなプラグラムをコ
ンパイルするときに、メモリ・スペースの不足か
ら最適化プロセスが中止されることのないように
し、もつて生成されるコードの質を高める方法に
関する。
B 従来技術
最適化コンパイラは、プログラムにとつて、タ
ーゲツトCPUの有効性及び効率を高める重要な
ツールである。最適化コンパイラの目的は、書か
れた通りのプログラム機能を正確に複製する、可
能な限り最小かつ最速のオブジエクト・コード・
セツトを生成することにある。高水準言語で書か
れたコンピユータ・プログラムについてコンパク
トかつ効率の良いオブジエクト・コードを生成す
るためには、かかる言語に用いられるコンパイラ
は、ラン・タイムやプログラムの必要とするメモ
リ量を減らすための様々な指定プロシージヤを一
般に用いる精巧な大域的最適化器(オプテイマイ
ザ)を活用する必要がある。例えば、コンパイラ
は、部分式削除、コード・モーシヨン(コード移
動)、ストレングス・リダクシヨン(強さの軽減、
つまり遅い動作を等価な高速動作で置換するこ
と)、ストア・モーシヨン、不要コード・シーク
エンス除去といつたことの何れかを、あるいはす
べてを、実行してもよい。このような最適化に関
するいくつかの記述は、下記の文献に見出され
る。
ーゲツトCPUの有効性及び効率を高める重要な
ツールである。最適化コンパイラの目的は、書か
れた通りのプログラム機能を正確に複製する、可
能な限り最小かつ最速のオブジエクト・コード・
セツトを生成することにある。高水準言語で書か
れたコンピユータ・プログラムについてコンパク
トかつ効率の良いオブジエクト・コードを生成す
るためには、かかる言語に用いられるコンパイラ
は、ラン・タイムやプログラムの必要とするメモ
リ量を減らすための様々な指定プロシージヤを一
般に用いる精巧な大域的最適化器(オプテイマイ
ザ)を活用する必要がある。例えば、コンパイラ
は、部分式削除、コード・モーシヨン(コード移
動)、ストレングス・リダクシヨン(強さの軽減、
つまり遅い動作を等価な高速動作で置換するこ
と)、ストア・モーシヨン、不要コード・シーク
エンス除去といつたことの何れかを、あるいはす
べてを、実行してもよい。このような最適化に関
するいくつかの記述は、下記の文献に見出され
る。
J.T.Schwartz、On Programming−An
Interim Report on the SETL Langnage.
Installment II:The SETL Language and
Examples of its Use、Courant Institute of
Math Sciences、NYU、1983、pp.293−310. E.Morel and C.Renvoise、Global
Optimization by Suppression of Partial
Redundancies、CACM、Vol.22、No.2、pp.96−
103、1979. A.Aho and J.Ullman、Principles of
Compiler Design、Addison−Wesley、1977. これらの最適化指定プロシージヤの各々は、中
間言語(IL)プログラムを、意味的には等価だ
がより効率的なILプログラムに変換する。中間
レベル言語は、その名の示す通り、複雑性及び洗
練度において、高水準ソース・プログラムとマシ
ン・コードの中間にある。中間レベル言語は、複
数の高水準言語の任意のものを複数のマシンの任
意のものをターゲツトとするマシン・コードに変
換することのできるコンパイラを準備するのに特
に有用である。それによれば、すべての翻訳を共
通の中間レベル言語を通じて行い得るので、広範
囲のマシン・タイプとプログラミング言語の両方
をカバーするために開発されねばならないプロダ
クトの数が著しく減少することになる。たいてい
の最適化が普通に行われるのは、中間言語レベル
においてである。
Interim Report on the SETL Langnage.
Installment II:The SETL Language and
Examples of its Use、Courant Institute of
Math Sciences、NYU、1983、pp.293−310. E.Morel and C.Renvoise、Global
Optimization by Suppression of Partial
Redundancies、CACM、Vol.22、No.2、pp.96−
103、1979. A.Aho and J.Ullman、Principles of
Compiler Design、Addison−Wesley、1977. これらの最適化指定プロシージヤの各々は、中
間言語(IL)プログラムを、意味的には等価だ
がより効率的なILプログラムに変換する。中間
レベル言語は、その名の示す通り、複雑性及び洗
練度において、高水準ソース・プログラムとマシ
ン・コードの中間にある。中間レベル言語は、複
数の高水準言語の任意のものを複数のマシンの任
意のものをターゲツトとするマシン・コードに変
換することのできるコンパイラを準備するのに特
に有用である。それによれば、すべての翻訳を共
通の中間レベル言語を通じて行い得るので、広範
囲のマシン・タイプとプログラミング言語の両方
をカバーするために開発されねばならないプロダ
クトの数が著しく減少することになる。たいてい
の最適化が普通に行われるのは、中間言語レベル
においてである。
最適化コンパイラにおける最重要の最適化は、
局所的つまり基本ブロツク・レベルではなくて、
大域的に、つまりプログラム・ワイドのレベルで
実行される。これらの最適化の何れを実行すると
きも、一連のデータ・フロー方程式を解かなけれ
ばならない。その際、コンパイラは、コンパイル
されるプログラムの中の式の情報を集める。その
ような情報は、プログラム中の制御フローに依存
する。それ自身のユニークなコード変換のため
に、どの最適化も、コンパイル時に所与の任意の
式がプログラム全体を通じて、いつ、どのように
利用可能であるかを追跡する方法を持たなければ
ならない。
局所的つまり基本ブロツク・レベルではなくて、
大域的に、つまりプログラム・ワイドのレベルで
実行される。これらの最適化の何れを実行すると
きも、一連のデータ・フロー方程式を解かなけれ
ばならない。その際、コンパイラは、コンパイル
されるプログラムの中の式の情報を集める。その
ような情報は、プログラム中の制御フローに依存
する。それ自身のユニークなコード変換のため
に、どの最適化も、コンパイル時に所与の任意の
式がプログラム全体を通じて、いつ、どのように
利用可能であるかを追跡する方法を持たなければ
ならない。
この情報は、プログラムの可能な実行パス
(path)を表わす有向グラフであるところの制御
フローグラフから導かれる。低次のフローグラフ
では、ノードがプログラムの基本ブロツクを表現
し、かつノードはプログラムの制御がそれに沿つ
て流れるところのパスを表現する有向辺によつて
結ばれている。高次のフローグラフでは、ノード
は基本ブロツク又は強連結された領域からなる。
(path)を表わす有向グラフであるところの制御
フローグラフから導かれる。低次のフローグラフ
では、ノードがプログラムの基本ブロツクを表現
し、かつノードはプログラムの制御がそれに沿つ
て流れるところのパスを表現する有向辺によつて
結ばれている。高次のフローグラフでは、ノード
は基本ブロツク又は強連結された領域からなる。
本明細書において、「基本ブロツク」とは、オ
ブジエクト・コードであれソース・コードであ
れ、分岐が到達するのはその最初の命令において
のみであり、かつ制御が離れるのはその最後の命
令の後においてのみであるような直列型のコー
ド・シークエンスである、コンピユータ・プログ
ラム中の任意の命令のセツトのことを言う。「強
連結(された)領域」とは、プログラム制御によ
つて、繰り返して、かつ当該領域の外のノードを
通過することなしに、フオローされ得るパスが存
在する、ノードのセツトを意味する。強連結領域
は、コンパイラの設計においては周知の概念であ
る。「唯一の入口を持つ強連結領域」とは、外か
ら当領域に到達することのできるノードが1つし
かないようなものを言う。以後、「領域」とは唯
一の入口を持つ連連結領域を言う。
ブジエクト・コードであれソース・コードであ
れ、分岐が到達するのはその最初の命令において
のみであり、かつ制御が離れるのはその最後の命
令の後においてのみであるような直列型のコー
ド・シークエンスである、コンピユータ・プログ
ラム中の任意の命令のセツトのことを言う。「強
連結(された)領域」とは、プログラム制御によ
つて、繰り返して、かつ当該領域の外のノードを
通過することなしに、フオローされ得るパスが存
在する、ノードのセツトを意味する。強連結領域
は、コンパイラの設計においては周知の概念であ
る。「唯一の入口を持つ強連結領域」とは、外か
ら当領域に到達することのできるノードが1つし
かないようなものを言う。以後、「領域」とは唯
一の入口を持つ連連結領域を言う。
「サブグラフ」とは、フローグラフ内のノード
の任意の組合せを言う。すべての強連結領域はサ
ブグラフでもある。しかし、すべてのサブグラフ
が強連結領域とは限らない。「エンテイテイ
(entities)」は、コンパイル中のプログラムを記
述するのに用いられる中間表現のコンポーネント
を指す。これには、変数エントリ、辞書エント
リ、結果、式、命令、及びプログラムの基本ブロ
ツクが含まれる。
の任意の組合せを言う。すべての強連結領域はサ
ブグラフでもある。しかし、すべてのサブグラフ
が強連結領域とは限らない。「エンテイテイ
(entities)」は、コンパイル中のプログラムを記
述するのに用いられる中間表現のコンポーネント
を指す。これには、変数エントリ、辞書エント
リ、結果、式、命令、及びプログラムの基本ブロ
ツクが含まれる。
プログラムが大きな複雑なものになればなるほ
ど、そのフローグラフは巨大でからみ合つたもの
になり、計算数は増え、かつデータフロー方程式
を解かなければならない式の数も増える。コンパ
イルに必要なメモリ及び処理時間は、大域的最適
化の対象となるソース・プログラム・サイズの2
次関数として増加する。スペースが制限されるこ
とからコンパイラがプログラム全体を最適化でき
ないような状況が生じると、過去においては最適
化を中止せざるを得なかつた。そこで、最適化の
質を高めるための試みがなされてきた。
ど、そのフローグラフは巨大でからみ合つたもの
になり、計算数は増え、かつデータフロー方程式
を解かなければならない式の数も増える。コンパ
イルに必要なメモリ及び処理時間は、大域的最適
化の対象となるソース・プログラム・サイズの2
次関数として増加する。スペースが制限されるこ
とからコンパイラがプログラム全体を最適化でき
ないような状況が生じると、過去においては最適
化を中止せざるを得なかつた。そこで、最適化の
質を高めるための試みがなされてきた。
USP4506325は、情報理論の符号化技術をプロ
グラムのセグメントに適用してオペレータとオペ
ランドを符号化することにより、コンパイラの必
要とする記憶量を減少させる方法を開示する。し
かしながら、プログラムをどのように分けるかに
ついては触れられていない。
グラムのセグメントに適用してオペレータとオペ
ランドを符号化することにより、コンパイラの必
要とする記憶量を減少させる方法を開示する。し
かしながら、プログラムをどのように分けるかに
ついては触れられていない。
USP4571678は、レジスタ割振り技術を改良す
ることによつて、ターゲツト・コンピユータの限
られた数のレジスタを活用する方法を開示する。
しかしながら、ターゲツト・コンピユータの一般
的なメモリ利用可能性を上回る巨大プログラムの
処理については全く触れられていない。
ることによつて、ターゲツト・コンピユータの限
られた数のレジスタを活用する方法を開示する。
しかしながら、ターゲツト・コンピユータの一般
的なメモリ利用可能性を上回る巨大プログラムの
処理については全く触れられていない。
C 発明が解決しようとする課題
ハードウエア又はプログラムがコンパイルされ
るコンピユータの制約の中で最適化が実行不可能
であつても、簡単にあきらめることのないような
プログラム・コンパイル技術が必要とされてい
る。
るコンピユータの制約の中で最適化が実行不可能
であつても、簡単にあきらめることのないような
プログラム・コンパイル技術が必要とされてい
る。
D 問題点を解決するための手段
最適化が適用されるスコープは制限可能である
こと、及びそれでも最適化の利点の多くが実現さ
れ得ることが発見された。プログラム・ユニツト
は、その制御フロー構造に基づいて、コンパイラ
による処理が可能なほどに十分小さなセクシヨン
に区分される。
こと、及びそれでも最適化の利点の多くが実現さ
れ得ることが発見された。プログラム・ユニツト
は、その制御フロー構造に基づいて、コンパイラ
による処理が可能なほどに十分小さなセクシヨン
に区分される。
したがつて、本発明は、生成されるコードの品
質を向上させる方法を識別するために指定プロシ
ージヤを用いる最適化コンパイラにおいて、実際
に最適化を行うのに先立つて、コンパイルされる
プログラムを最適化する方法であつて、 (1) 指定プロシージヤに関し、上記プログラムに
ついてのすべての可能な実行パスを表現する制
御フローグラフを展開(develop)し、 (2) 上記プログラム中のサブグラフを識別し、 (3) 以下のサブ・ステツプからなるステツプを実
行することを特徴とする方法である。
質を向上させる方法を識別するために指定プロシ
ージヤを用いる最適化コンパイラにおいて、実際
に最適化を行うのに先立つて、コンパイルされる
プログラムを最適化する方法であつて、 (1) 指定プロシージヤに関し、上記プログラムに
ついてのすべての可能な実行パスを表現する制
御フローグラフを展開(develop)し、 (2) 上記プログラム中のサブグラフを識別し、 (3) 以下のサブ・ステツプからなるステツプを実
行することを特徴とする方法である。
(a) 最適化のための検査を行うサブグラフを選
択する。ただし、1番最初の繰り返しで選択
されるサブグラフはプログラム全体である。
択する。ただし、1番最初の繰り返しで選択
されるサブグラフはプログラム全体である。
(b) 上記サブグラフ中のコード・シークエンス
を検査することによつて、上記指定プロシー
ジヤにおいてデータ・フロー方程式を表現す
るのに用いられるアレイの各デイメンシヨン
に関連する上記サブグラフ中のエンテイテイ
の数を決定する。
を検査することによつて、上記指定プロシー
ジヤにおいてデータ・フロー方程式を表現す
るのに用いられるアレイの各デイメンシヨン
に関連する上記サブグラフ中のエンテイテイ
の数を決定する。
(c) 上記アレイを収容するのに必要なメモリの
量を決定する。
量を決定する。
(d) 上記メモリ量が上記コンパイルについての
所定のメモリ使用限度を越えしたがつて上記
サブグラフのノード中のコードの最適化が不
成功に終ることを示す場合には下記(e)のサ
ブ・ステツプを上記サブグラフに適用し、そ
うでない場合は上記指定プロシージヤを上記
サブグラフに適用する。
所定のメモリ使用限度を越えしたがつて上記
サブグラフのノード中のコードの最適化が不
成功に終ることを示す場合には下記(e)のサ
ブ・ステツプを上記サブグラフに適用し、そ
うでない場合は上記指定プロシージヤを上記
サブグラフに適用する。
(e) サブ・ステツプ(d)で、発見された記憶領域
が不十分であつた上記サブグラフに含まれる
すべてのサブグラフについて、サブ・ステツ
プ(b)〜(d)を適用する。
が不十分であつた上記サブグラフに含まれる
すべてのサブグラフについて、サブ・ステツ
プ(b)〜(d)を適用する。
E 実施例
E1 概要
本発明法を実施する最初のステツプは、最適化
されるプログラムのフローグラフを作成すること
である。フローグラフの作成は周知の技術であ
り、本発明の目的のためには標準的な技術をもつ
てすることができる。次にフローグラフの中の適
当なすべてのサブグラフが識別される。サブグラ
フの選択は、実行される最適化プロシージヤに依
存する。強連結領域は有用であることが多い。し
かし、インターバル、ハンモツク、及びツリーも
使用可能である。そして、極端な場合、サブグラ
フが単独のノードから成り立つていることもあ
る。本実施例では、サブグラフは強連結領域のコ
レクシヨンであるとする。特定の最適化のために
指定プロシージヤを書くためには、最適化の際に
形成されるアレイの数とデイメンシヨンが知られ
ていなければならない。それらのデイメンシヨン
は、例えば命令、結果、式、辞書エントリ、コー
ド・シークエンス中の基本ブロツクといつたエン
テイテイの量に依拠する。作成される特定のエン
テイテイは、引き受け中の指定プロシージヤに依
存する。これらの量はプログラムのサブグラフご
とに一定であるので、最適化の実行前に必要なメ
モリ量を簡単に計算することができる。コンパイ
ラに課されるメモリの限度は、コンパイラのライ
ターによつて1以上のレベルで予め定めることも
可能だし、あるいはコンパイラがシステム・リソ
ースの使用を評価して動的に決定することもでき
る。選択(された)プロシージヤにとつて利用可
能なメモリ量を制約する理由の1つは、選択プロ
シージヤの実行時間を制約することにもある。特
定プロシージヤのプログラム全体への適用につき
必要メモリ量が決定された後、その量は利用可能
メモリ量と比較され、利用可能メモリ量が十分で
あるならば、最適化が実行される。メモリが不十
分ならば、スペースが不十分であつたサブグラフ
内の、最大級の個別サブグラフの各々に対して該
指定プロシージヤを適用することが試みられる。
利用可能なメモリが依然不十分である被包含サブ
グラフの各々について、その被包含サブグラフが
最適化される。もしこれらの被包含サブグラフが
最適化不可能であるならば、被包含サブグラフの
各々がさらなる被包含サブグラフに分解される。
この反復は、最適化に必要なメモリ量が十分小さ
いので割当メモリの範囲内で最適化の実行が可能
であるサブグラフが検査されそして最適化が実行
されるまで継続する。本発明法は1以上の最適化
とともに用いることができる。複数の最適化を実
行するとき、その順序はどのようであつてもよ
い。
されるプログラムのフローグラフを作成すること
である。フローグラフの作成は周知の技術であ
り、本発明の目的のためには標準的な技術をもつ
てすることができる。次にフローグラフの中の適
当なすべてのサブグラフが識別される。サブグラ
フの選択は、実行される最適化プロシージヤに依
存する。強連結領域は有用であることが多い。し
かし、インターバル、ハンモツク、及びツリーも
使用可能である。そして、極端な場合、サブグラ
フが単独のノードから成り立つていることもあ
る。本実施例では、サブグラフは強連結領域のコ
レクシヨンであるとする。特定の最適化のために
指定プロシージヤを書くためには、最適化の際に
形成されるアレイの数とデイメンシヨンが知られ
ていなければならない。それらのデイメンシヨン
は、例えば命令、結果、式、辞書エントリ、コー
ド・シークエンス中の基本ブロツクといつたエン
テイテイの量に依拠する。作成される特定のエン
テイテイは、引き受け中の指定プロシージヤに依
存する。これらの量はプログラムのサブグラフご
とに一定であるので、最適化の実行前に必要なメ
モリ量を簡単に計算することができる。コンパイ
ラに課されるメモリの限度は、コンパイラのライ
ターによつて1以上のレベルで予め定めることも
可能だし、あるいはコンパイラがシステム・リソ
ースの使用を評価して動的に決定することもでき
る。選択(された)プロシージヤにとつて利用可
能なメモリ量を制約する理由の1つは、選択プロ
シージヤの実行時間を制約することにもある。特
定プロシージヤのプログラム全体への適用につき
必要メモリ量が決定された後、その量は利用可能
メモリ量と比較され、利用可能メモリ量が十分で
あるならば、最適化が実行される。メモリが不十
分ならば、スペースが不十分であつたサブグラフ
内の、最大級の個別サブグラフの各々に対して該
指定プロシージヤを適用することが試みられる。
利用可能なメモリが依然不十分である被包含サブ
グラフの各々について、その被包含サブグラフが
最適化される。もしこれらの被包含サブグラフが
最適化不可能であるならば、被包含サブグラフの
各々がさらなる被包含サブグラフに分解される。
この反復は、最適化に必要なメモリ量が十分小さ
いので割当メモリの範囲内で最適化の実行が可能
であるサブグラフが検査されそして最適化が実行
されるまで継続する。本発明法は1以上の最適化
とともに用いることができる。複数の最適化を実
行するとき、その順序はどのようであつてもよ
い。
特定的な最適化の例は、共通部分式除去及びコ
ード・モーシヨンとして知られる最適化技法であ
る。この最適化に関し、フローグラフを分解して
得るサブグラフは強連結領域である。計算される
データ・セツトの1つは、最適化中の最外側の領
域内の各基本ブロツク及び領域の出口で利用可能
な式のセツト(“avail”セツト)である。この場
合、“avail”セツトのサイズを決定するために
は、2つのタイプのエンテイテイをカウントしな
ければならない。異なる式の数と、共通化
(commoned)中を領域を含む基本ブロツク及び
領域の数である。
ード・モーシヨンとして知られる最適化技法であ
る。この最適化に関し、フローグラフを分解して
得るサブグラフは強連結領域である。計算される
データ・セツトの1つは、最適化中の最外側の領
域内の各基本ブロツク及び領域の出口で利用可能
な式のセツト(“avail”セツト)である。この場
合、“avail”セツトのサイズを決定するために
は、2つのタイプのエンテイテイをカウントしな
ければならない。異なる式の数と、共通化
(commoned)中を領域を含む基本ブロツク及び
領域の数である。
利用可能性の情報は、最適化中の最外側領域
(つまり、低次の制御フローグラフ)の基本ブロ
ツク中のコードを通過し、どの式が計算されその
後の引数の再定義によつて殺されないかをマーク
することによつて、収集される。これらのデータ
は外側レベル領域を通じて外方向に伝播し、すべ
ての領域の出口で利用可能な式がどれかが確定さ
れる。このステツプの後、最外側領域の入口で利
用可能なものは何もないという仮定がなされ、こ
の新しい情報は逆に内側領域へと伝播される。フ
ローグラフの領域の内外の間でのデータ・フロー
情報を処理する必要性は、領域を含むループの性
質によつて決まる。明らかに、共通部分式削除
は、巨大で複雑なプログラムについての細分化か
ら思恵を受ける。全体プログラムの基本ブロツ
ク・領域の内外の間で情報を伝播させるための処
理時間は莫大なものになり得る。さらに、アレイ
の要するスペースも巨大になり得る。本発明法に
従つてプログラムを区分することにより、
“avail”セツトの第2デイメンシヨンのみならず
第1のデイメンシヨンも影響を受ける。たいてい
の場合、内側領域に現れる式のセツトを表わすユ
ニバースは、外側領域で見つかる式のセツトにつ
いてのユニバースのサブセツトである。したがつ
て、高次フローグラフ中の次レベルの領域に関し
最適化を行うことによつて、アレイのサイズを著
しく減少させることができる。なぜなら、複数の
デイメンシヨンが影響される蓋然性が高いからで
ある。
(つまり、低次の制御フローグラフ)の基本ブロ
ツク中のコードを通過し、どの式が計算されその
後の引数の再定義によつて殺されないかをマーク
することによつて、収集される。これらのデータ
は外側レベル領域を通じて外方向に伝播し、すべ
ての領域の出口で利用可能な式がどれかが確定さ
れる。このステツプの後、最外側領域の入口で利
用可能なものは何もないという仮定がなされ、こ
の新しい情報は逆に内側領域へと伝播される。フ
ローグラフの領域の内外の間でのデータ・フロー
情報を処理する必要性は、領域を含むループの性
質によつて決まる。明らかに、共通部分式削除
は、巨大で複雑なプログラムについての細分化か
ら思恵を受ける。全体プログラムの基本ブロツ
ク・領域の内外の間で情報を伝播させるための処
理時間は莫大なものになり得る。さらに、アレイ
の要するスペースも巨大になり得る。本発明法に
従つてプログラムを区分することにより、
“avail”セツトの第2デイメンシヨンのみならず
第1のデイメンシヨンも影響を受ける。たいてい
の場合、内側領域に現れる式のセツトを表わすユ
ニバースは、外側領域で見つかる式のセツトにつ
いてのユニバースのサブセツトである。したがつ
て、高次フローグラフ中の次レベルの領域に関し
最適化を行うことによつて、アレイのサイズを著
しく減少させることができる。なぜなら、複数の
デイメンシヨンが影響される蓋然性が高いからで
ある。
E2 具体例
第1図を参照して、本発明の具体例を説明す
る。第1図には、典型的な被コンパイル・プログ
ラムの一部分が示されている。この例では、用い
られるサブグラフのタイプの強連結領域(SCR)
である。ノード1〜15は、1つの入口と1つの
出口ポイントを持つ、1ライン以上のコードから
なる基本ブロツクである。第1図に示されるフロ
ーグラフ全体は、強連結領域20である。フロー
グラフの内側からノード1へ至るリターン・パス
が存在しないので古典的な定義には適合しないけ
れども、これは真であると定義(define)され
る。
る。第1図には、典型的な被コンパイル・プログ
ラムの一部分が示されている。この例では、用い
られるサブグラフのタイプの強連結領域(SCR)
である。ノード1〜15は、1つの入口と1つの
出口ポイントを持つ、1ライン以上のコードから
なる基本ブロツクである。第1図に示されるフロ
ーグラフ全体は、強連結領域20である。フロー
グラフの内側からノード1へ至るリターン・パス
が存在しないので古典的な定義には適合しないけ
れども、これは真であると定義(define)され
る。
次に内側のSCRのサーチは公知の方法で行う
ことができ、本発明法にとつてクリテイカルなも
のではない。この例では、ノード2はノード12
から戻るパスを持つけれども、その後のノードか
ら戻るパスはない。フローグラフにおいて次に内
側のSCRは、ノード2〜12を含む領域19と
いうことになる。次にSCR19の内側に含まれ
るSCRも同様に解析される。したがつて、ノー
ド3〜11を含むパスを反復的にトレースするこ
とができ、領域18が定義される。同様に、第1
図のフローグラフ中の他の2つのSCRのうち、
1つはノード8,9,10から成る領域17であ
り、もう1つはノード7から成る領域16であ
る。ノード7は、それ自身の内的なリターン・パ
スを具備している。ノード13〜15はSCRを
構成しない。なぜなら、当該ノード・グループの
中に、グループ外のノードを通ることなしに制御
が繰り返し流れることを可能にするリターン・パ
スがないからである。
ことができ、本発明法にとつてクリテイカルなも
のではない。この例では、ノード2はノード12
から戻るパスを持つけれども、その後のノードか
ら戻るパスはない。フローグラフにおいて次に内
側のSCRは、ノード2〜12を含む領域19と
いうことになる。次にSCR19の内側に含まれ
るSCRも同様に解析される。したがつて、ノー
ド3〜11を含むパスを反復的にトレースするこ
とができ、領域18が定義される。同様に、第1
図のフローグラフ中の他の2つのSCRのうち、
1つはノード8,9,10から成る領域17であ
り、もう1つはノード7から成る領域16であ
る。ノード7は、それ自身の内的なリターン・パ
スを具備している。ノード13〜15はSCRを
構成しない。なぜなら、当該ノード・グループの
中に、グループ外のノードを通ることなしに制御
が繰り返し流れることを可能にするリターン・パ
スがないからである。
本発明法のプログラムに関しての実行は、まず
第1図に示すようなフローグラフを作成すること
から始まる。次に、プログラム全体が最適化プロ
シージヤのためにテストされる。コンパイラがプ
ログラム全体を通じて作動する間、データ・フロ
ー方程式を表現するアレイのサイズを決定するエ
ンテイテイの数を含めて、最適化プロシージヤに
よつて使用されるエンテイテイのカウントが維持
される。カウントがインクリメントされるとき、
各アレイの各デイメンシヨンのユニツト・サイズ
がノートされ、アレイ中のエレメントの総数が計
算される。これは割当(られた)メモリと比較さ
れる。必要なメモリが割当メモリを上回つたなら
ば、上述のようにして次に小さなSCRを発見し、
同様の調査を行う。最適化を成功させることの可
能な十分小さな領域が見つかつたなら、最適化は
その領域について行われる。他の指定プロシージ
ヤに関して最適化を行う前に、制御フローグラフ
を作り直しても差し支えない。
第1図に示すようなフローグラフを作成すること
から始まる。次に、プログラム全体が最適化プロ
シージヤのためにテストされる。コンパイラがプ
ログラム全体を通じて作動する間、データ・フロ
ー方程式を表現するアレイのサイズを決定するエ
ンテイテイの数を含めて、最適化プロシージヤに
よつて使用されるエンテイテイのカウントが維持
される。カウントがインクリメントされるとき、
各アレイの各デイメンシヨンのユニツト・サイズ
がノートされ、アレイ中のエレメントの総数が計
算される。これは割当(られた)メモリと比較さ
れる。必要なメモリが割当メモリを上回つたなら
ば、上述のようにして次に小さなSCRを発見し、
同様の調査を行う。最適化を成功させることの可
能な十分小さな領域が見つかつたなら、最適化は
その領域について行われる。他の指定プロシージ
ヤに関して最適化を行う前に、制御フローグラフ
を作り直しても差し支えない。
最適化できるサブグラフが処理された後で、よ
り大きなサブグラフの最適化を試みることが望ま
しいこともある。選択(された)プロシージヤの
適用によつてサブグラフ中のコードのサイズは減
少しているので、含む側の(containing)サブグ
ラフをユニツトとして扱うことが可能になつてい
る。しかしながら、そのような再検査はコンパイ
ル時間を増大させる。しかるに、本発明の趣意は
最適化の際のコンパイル時間とスペースを制限す
ることにある。かかるステツプを実行する場合、
順次高レベルの領域が検査される点を除いて、先
のコード・シークエンス検査と同じやり方で実行
される。
り大きなサブグラフの最適化を試みることが望ま
しいこともある。選択(された)プロシージヤの
適用によつてサブグラフ中のコードのサイズは減
少しているので、含む側の(containing)サブグ
ラフをユニツトとして扱うことが可能になつてい
る。しかしながら、そのような再検査はコンパイ
ル時間を増大させる。しかるに、本発明の趣意は
最適化の際のコンパイル時間とスペースを制限す
ることにある。かかるステツプを実行する場合、
順次高レベルの領域が検査される点を除いて、先
のコード・シークエンス検査と同じやり方で実行
される。
本発明を実施する最良の態様のもう一つの例
が、添付の表の擬似コード・フラグメントによつ
て示される。コードは実際のプログラムから翻案
されたものであり、以下のように動作する。最適
化器は、入力として、最適化を制約するメモリの
制限を受け取る。最適化器は、最適化指定プロシ
ージヤ(ここでは、共通化(commoning)とコ
ード・モーシヨンである)についてデータフロー
方程式を解くために使われることになる、エンテ
イテイ・セツトのユニバースを記述するべく生成
されるマツプをリセツトする。最適化器は、所与
の領域に含まれる基本ブロツク、辞書エントリの
数、及び所与の領域の中で発見される異なるシン
ボリツク・レジスタの使用数を、マツプしかつカ
ウントする。また、指定プロシージヤによつて使
用されるアレイのサイズも計算する。最適化器
は、この合計を割当メモリと比較し、必要なメモ
リが割当を越える場合は、そのノードが最も新し
くマツプされた領域に対応する数を返す。そうで
ない場合は、次の内側に含まれるレベル(the
next contained level)の領域を発見する。その
ような領域が見つかつた場合には、先に実行され
たステツプをその含まれる(contained)領域に
ついて繰り返す。領域に含まれる領域がない場合
には、同一レベルにある次の領域をサーチする。
同一レベルに領域がない場合は、次に高いレベル
の領域を捜す。領域が見つかるまで、さもなけれ
ば上昇すべきレベルがなくなるまで、フローグラ
フ・レベルを通じて上昇が繰り返される。レベル
が残つていない場合、指定プロシージヤに対し
て、プログラム内に最適化すべき領域の見つから
ないことが報告される。コード内のコメントも、
本発明の理解に役立つ。
が、添付の表の擬似コード・フラグメントによつ
て示される。コードは実際のプログラムから翻案
されたものであり、以下のように動作する。最適
化器は、入力として、最適化を制約するメモリの
制限を受け取る。最適化器は、最適化指定プロシ
ージヤ(ここでは、共通化(commoning)とコ
ード・モーシヨンである)についてデータフロー
方程式を解くために使われることになる、エンテ
イテイ・セツトのユニバースを記述するべく生成
されるマツプをリセツトする。最適化器は、所与
の領域に含まれる基本ブロツク、辞書エントリの
数、及び所与の領域の中で発見される異なるシン
ボリツク・レジスタの使用数を、マツプしかつカ
ウントする。また、指定プロシージヤによつて使
用されるアレイのサイズも計算する。最適化器
は、この合計を割当メモリと比較し、必要なメモ
リが割当を越える場合は、そのノードが最も新し
くマツプされた領域に対応する数を返す。そうで
ない場合は、次の内側に含まれるレベル(the
next contained level)の領域を発見する。その
ような領域が見つかつた場合には、先に実行され
たステツプをその含まれる(contained)領域に
ついて繰り返す。領域に含まれる領域がない場合
には、同一レベルにある次の領域をサーチする。
同一レベルに領域がない場合は、次に高いレベル
の領域を捜す。領域が見つかるまで、さもなけれ
ば上昇すべきレベルがなくなるまで、フローグラ
フ・レベルを通じて上昇が繰り返される。レベル
が残つていない場合、指定プロシージヤに対し
て、プログラム内に最適化すべき領域の見つから
ないことが報告される。コード内のコメントも、
本発明の理解に役立つ。
本発明は、RISCを含む、コンパイル・プロセ
スに中間レベル言語を用いるどのマシンも使用す
ることができる。本発明はまた、最適化器によつ
て活用されるメモリの制限を調整することによつ
て、様々なコンピユータ・システムと一緒に用い
られるコンパイラとともに使用することが可能で
ある。同じ手段によつて、ユーザは同一ソース・
プログラムの様々なレベルでの最適化を達成する
ことができる。最適化が中間言語レベルで行われ
るので、本発明は、FORTRAN、PL/I、
Cobol、C、STEL、Pascalを含む高級言語の何
れをも処理する最適化コンパイラとともに使用す
ることが可能である。本発明を使用すれば、最適
化プロセスの実行に用いるコンピユータのメモリ
の制約ゆえに最適化が不可能となつてしまうであ
ろう巨大プログラムについて、少なくとも部分的
な最適化を実行することが可能になる。本発明の
さらなる利点は、大きなプログラムの最適化時に
生じるレジスタ・プレツシヤが軽減されることで
ある。例えば、多くの式がループの外へ移動され
るとき、それらを収めることのできるレジスタの
数を越えることがある。そのとき、レジスタ割振
を行うコードは、これらのレジスタ要求に応えよ
うとして、多くの処理時間とメモリ・スペースを
必要とし、その結果、レジスタ値を後でその値が
用いられるときに検索できるように一時記憶装置
に退避させなければならなくなる。大きなプログ
ラムでの細分化された(partitioned)最適化に
よれば、上記のようなタイプのコード移動
(movement)は内側のサブ領域に限定され、し
たがつてレジスタ割当はその使用により近いもの
になる。これは、内側ループの始まりに移される
式が外側領域中の定数(constant)でもある場合
には、理論的には最善の選択ではないかもしれな
いとはいえ、先の最適化の効果をひつくり返さな
ければならず、その結果コードの質を低下させる
という無駄な処理をしばしば回避する。
スに中間レベル言語を用いるどのマシンも使用す
ることができる。本発明はまた、最適化器によつ
て活用されるメモリの制限を調整することによつ
て、様々なコンピユータ・システムと一緒に用い
られるコンパイラとともに使用することが可能で
ある。同じ手段によつて、ユーザは同一ソース・
プログラムの様々なレベルでの最適化を達成する
ことができる。最適化が中間言語レベルで行われ
るので、本発明は、FORTRAN、PL/I、
Cobol、C、STEL、Pascalを含む高級言語の何
れをも処理する最適化コンパイラとともに使用す
ることが可能である。本発明を使用すれば、最適
化プロセスの実行に用いるコンピユータのメモリ
の制約ゆえに最適化が不可能となつてしまうであ
ろう巨大プログラムについて、少なくとも部分的
な最適化を実行することが可能になる。本発明の
さらなる利点は、大きなプログラムの最適化時に
生じるレジスタ・プレツシヤが軽減されることで
ある。例えば、多くの式がループの外へ移動され
るとき、それらを収めることのできるレジスタの
数を越えることがある。そのとき、レジスタ割振
を行うコードは、これらのレジスタ要求に応えよ
うとして、多くの処理時間とメモリ・スペースを
必要とし、その結果、レジスタ値を後でその値が
用いられるときに検索できるように一時記憶装置
に退避させなければならなくなる。大きなプログ
ラムでの細分化された(partitioned)最適化に
よれば、上記のようなタイプのコード移動
(movement)は内側のサブ領域に限定され、し
たがつてレジスタ割当はその使用により近いもの
になる。これは、内側ループの始まりに移される
式が外側領域中の定数(constant)でもある場合
には、理論的には最善の選択ではないかもしれな
いとはいえ、先の最適化の効果をひつくり返さな
ければならず、その結果コードの質を低下させる
という無駄な処理をしばしば回避する。
F 効果
本発明によれば、巨大なプログラムについても
最適化を行うことが可能になる。
最適化を行うことが可能になる。
第1図は、各最適化ステツプに先立つてコンパ
イルによつて作成されるプログラムの一部分のフ
ローグラフの典型例の説明図である。
イルによつて作成されるプログラムの一部分のフ
ローグラフの典型例の説明図である。
Claims (1)
- 【特許請求の範囲】 1 生成されるコードの品質を向上させる方法を
識別するために指定プロシージヤを用いる最適化
コンパイラによるプログラムのコンパイルに際し
て、最適化を実行するために、 (a) 指定プロシージヤを実行する前に、上記プロ
グラムについてのすべての可能な実行パスを表
現する制御フローグラフを展開し、 (b) 上記プログラムに含まれるサブグラフを識別
し、 (b) 以下のサブ・ステツプからなるステツプを実
行することを特徴とする方法。 (c1)最適化のための検査を行うサブグラフを定義
する。ただし、1番最初に定義されるサブグ
ラフはプログラム全体である。 (c2)上記サブグラフ中のコード・シークエンスを
検査することによつて、上記指定プロシージ
ヤにおいてデータ・フロー方程式を表現する
のに用いられるアレイの各デイメンシヨンに
関連する上記サブグラフ中のエンテイテイの
数を決定する。 (c3)上記アレイを収容するのに必要なメモリの量
を決定する。 (c4)上記メモリ量が上記コンパイルについての所
定のメモリ使用限度を越えしたがつて上記指
定プロシージヤの適用が不成功に終ることを
示す場合には下記(c5)のサブ・ステツプを
上記サブグラフに適用し、そうでない場合は
上記指定プロシージヤを上記サブグラフに適
用する。 (c5)サブ・ステツプ(c4)で利用可能なメモリが
不十分であると判断された上記サブグラフに
含まれるすべてのサブグラフについて、サ
ブ・ステツプ(c2)〜(c4)を適用する。 2 複数の指定プロシージヤが実行される請求項
1記載の方法。 3 上記サブグラフは上記プログラム内の強く連
結された領域である請求項1記載の方法。 4 上記指定プロシージヤは、コード・モーシヨ
ン、ストア・モーシヨン、冗長コード・シークエ
ンス除去、不要コード・シークエンス除去、及び
式簡略化からなるグループから選択される請求項
1記載の方法。 5 上記エンテイテイは、命令、結果、式、辞書
エントリ、ソース・コード・プログラム中の領
域、ソース・コード・プログラム中の基本ブロツ
ク、及びそれらの組合せからなるグループから選
択される請求項1記載の方法。 6 アレイごとに、各デイメンシヨンのユニツ
ト・サイズを掛け合わせて該アレイ中のエレメン
トの総数を求め、 1アレイ・エレメントのサイズとアレイ・エレ
メントの数を掛け合わせて該アレイの占めるメモ
リ・ユニツトの数を求め、 アレイの必要とするメモリ量を加算して特定の
最適化が必要とするメモリの総量を求める ことにより、上記コンパイラによつて生成される
すべてのエンテイテイを収容するのに必要なメモ
リ量を計算する 請求項1記載の方法。 7 最適化の定義と実行に成功した後、当該最適
化の実行されたサブグラフを含むサブグラフにつ
いて、上記指定プロシージヤによる最適化が可能
か否かを検査する請求項1記載の方法。 8 最適化の定義と実行に成功した後、含む側の
強連結領域について、上記指定プロシージヤによ
る最適化が可能か否かを検査する請求項1記載の
方法。 9 (a) 少なくとも1つの内側サブグラフについ
て最適化の定義と実行に成功した後、含む側の
サブグラフについて上記指定プロシージヤによ
る最適化が可能か否かを検査し、 (b) 上記含む側のサブグラフが最適化可能なら
ば、含む側の強連結領域について同様に検査を
行い、最適化可能ならば上記最適化を実行する
請求項1記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/371,487 US5193190A (en) | 1989-06-26 | 1989-06-26 | Partitioning optimizations in an optimizing compiler |
US371487 | 1989-06-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0336632A JPH0336632A (ja) | 1991-02-18 |
JPH0552971B2 true JPH0552971B2 (ja) | 1993-08-06 |
Family
ID=23464175
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2165866A Granted JPH0336632A (ja) | 1989-06-26 | 1990-06-26 | コンパイル時における最適化方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US5193190A (ja) |
EP (1) | EP0405845B1 (ja) |
JP (1) | JPH0336632A (ja) |
BR (1) | BR9002995A (ja) |
CA (1) | CA2019787C (ja) |
DE (1) | DE69031442D1 (ja) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0816871B2 (ja) * | 1990-12-07 | 1996-02-21 | 富士ゼロックス株式会社 | プログラム翻訳装置およびプログラム翻訳方法 |
US5333304A (en) * | 1991-05-03 | 1994-07-26 | International Business Machines Corporation | Method and apparatus for software application evaluation utilizing compiler applications |
US5355494A (en) * | 1991-12-12 | 1994-10-11 | Thinking Machines Corporation | Compiler for performing incremental live variable analysis for data-parallel programs |
US5319784A (en) * | 1991-12-18 | 1994-06-07 | International Business Machines Corp. | System for automatic and selective compile-time installation of fastpath into program for calculation of function/procedure without executing the function/procedure |
US5410701A (en) * | 1992-01-29 | 1995-04-25 | Devonrue Ltd. | System and method for analyzing programmed equations |
US5418959A (en) * | 1992-11-30 | 1995-05-23 | Intel Corporation | Instruction operation size optimization |
JP3280449B2 (ja) * | 1993-03-01 | 2002-05-13 | 富士通株式会社 | コンパイル装置 |
AU6774894A (en) * | 1993-04-26 | 1994-11-21 | Comdisco Systems, Inc. | Method for scheduling synchronous data flow graphs |
US5495561A (en) * | 1993-06-21 | 1996-02-27 | Taligent, Inc. | Operating system with object-oriented printing interface |
US5325533A (en) * | 1993-06-28 | 1994-06-28 | Taligent, Inc. | Engineering system for modeling computer programs |
US5519866A (en) * | 1993-06-28 | 1996-05-21 | Taligent, Inc. | Method and apparatus of incrementally linking components of a modeled computer program |
US5758160A (en) * | 1993-06-28 | 1998-05-26 | Object Technology Licensing Corporation | Method and apparatus for building a software program using dependencies derived from software component interfaces |
US5457799A (en) * | 1994-03-01 | 1995-10-10 | Digital Equipment Corporation | Optimizer for program loops |
DE69524170T2 (de) * | 1994-09-22 | 2002-05-29 | Sun Microsystems Inc | Eingebettete Programmablaufinformation zwecks Zielcodemanipulation |
US5737623A (en) * | 1995-04-19 | 1998-04-07 | Liebrock; Lorie M. | Multi-processor parallel computer architecture using a parallel machine with topology-based mappings of composite grid applications |
US5787285A (en) * | 1995-08-15 | 1998-07-28 | International Business Machines Corporation | Apparatus and method for optimizing applications for multiple operational environments or modes |
US5805863A (en) * | 1995-12-27 | 1998-09-08 | Intel Corporation | Memory pattern analysis tool for use in optimizing computer program code |
CA2166253C (en) * | 1995-12-28 | 2000-02-08 | Robert James Blainey | Connectivity based program partitioning |
CA2166254C (en) * | 1995-12-28 | 2000-02-01 | Robert James Blainey | Improving memory layout based on connectivity considerations |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US5778232A (en) * | 1996-07-03 | 1998-07-07 | Hewlett-Packard Company | Automatic compiler restructuring of COBOL programs into a proc per paragraph model |
US6745384B1 (en) * | 1998-05-29 | 2004-06-01 | Microsoft Corporation | Anticipatory optimization with composite folding |
US6698011B1 (en) * | 1999-01-29 | 2004-02-24 | Intel Corporation | Isolation of program translation failures |
US6580431B1 (en) | 1999-03-04 | 2003-06-17 | Nexmem | System, method, and computer program product for intelligent memory to accelerate processes |
US20020135611A1 (en) * | 1999-03-04 | 2002-09-26 | Trevor Deosaran | Remote performance management to accelerate distributed processes |
US6675374B2 (en) | 1999-10-12 | 2004-01-06 | Hewlett-Packard Development Company, L.P. | Insertion of prefetch instructions into computer program code |
US6567975B1 (en) * | 1999-11-08 | 2003-05-20 | Sun Microsystems, Inc. | Method and apparatus for inserting data prefetch operations using data flow analysis |
CA2288614C (en) | 1999-11-08 | 2004-05-11 | Robert J. Blainey | Loop allocation for optimizing compilers |
US6986128B2 (en) * | 2000-01-07 | 2006-01-10 | Sony Computer Entertainment Inc. | Multiple stage program recompiler and method |
US6922830B1 (en) * | 2000-03-10 | 2005-07-26 | International Business Machines Corporation | Skip list data storage during compilation |
US7085815B2 (en) * | 2001-07-17 | 2006-08-01 | International Business Machines Corporation | Scalable memory management of token state for distributed lock managers |
JPWO2004068342A1 (ja) * | 2003-01-28 | 2006-05-25 | カテナ株式会社 | ソフトウェア開発前処理方法、ソフトウェア制御方法、ソフトウェア開発方法並びにソフトウェア開発装置 |
US7765539B1 (en) | 2004-05-19 | 2010-07-27 | Nintendo Co., Ltd. | System and method for trans-compiling video games |
JP4700379B2 (ja) * | 2005-03-18 | 2011-06-15 | 帝人化成株式会社 | 積層膜付成形体の製造方法 |
JP2009076002A (ja) * | 2007-09-25 | 2009-04-09 | Nec Electronics Corp | 制御タイミング調整方法、コンパイルプログラム、コンパイル装置、及び情報処理装置 |
US8484630B2 (en) * | 2008-12-23 | 2013-07-09 | International Business Machines Corporation | Code motion based on live ranges in an optimizing compiler |
JP5865091B2 (ja) * | 2012-01-20 | 2016-02-17 | 日立オートモティブシステムズ株式会社 | ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム |
US9081583B2 (en) | 2012-08-23 | 2015-07-14 | National Instruments Corporation | Compile time execution |
CN110321130B (zh) * | 2019-06-24 | 2021-04-16 | 大连理工大学 | 基于系统调用日志的不可重复编译定位方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4506325A (en) * | 1980-03-24 | 1985-03-19 | Sperry Corporation | Reflexive utilization of descriptors to reconstitute computer instructions which are Huffman-like encoded |
US4435753A (en) * | 1980-10-31 | 1984-03-06 | International Business Machines Corporation | Register allocation system using recursive queuing during source code compilation |
US4571678A (en) * | 1982-11-05 | 1986-02-18 | International Business Machines Corporation | Register allocation and spilling via graph coloring |
US4567574A (en) * | 1983-03-14 | 1986-01-28 | International Business Machines Corporation | Optimizing cobol object code instruction path length with respect to perform statements |
US4642764A (en) * | 1984-08-13 | 1987-02-10 | International Business Machines Corporation | Method of developing formal identities and program bases in an optimizing compiler |
US4656583A (en) * | 1984-08-13 | 1987-04-07 | International Business Machines Corporation | Method for improving global common subexpression elimination and code motion in an optimizing compiler |
US4656582A (en) * | 1985-02-04 | 1987-04-07 | International Business Machines Corporation | Generating storage reference instructions in an optimizing compiler |
US4642765A (en) * | 1985-04-15 | 1987-02-10 | International Business Machines Corporation | Optimization of range checking |
US4782444A (en) * | 1985-12-17 | 1988-11-01 | International Business Machine Corporation | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering |
JPH0685148B2 (ja) * | 1986-03-07 | 1994-10-26 | 株式会社日立製作所 | 配列デ−タフロ−解析装置 |
US4953084A (en) * | 1987-11-16 | 1990-08-28 | Hewlett-Packard Company | Method and apparatus using variable ranges to support symbolic debugging of optimized code |
US4961141A (en) * | 1988-12-16 | 1990-10-02 | International Business Machines Corporation | Generating efficient code for a computer with dissimilar register spaces |
-
1989
- 1989-06-26 US US07/371,487 patent/US5193190A/en not_active Expired - Lifetime
-
1990
- 1990-06-21 DE DE69031442T patent/DE69031442D1/de not_active Expired - Lifetime
- 1990-06-21 EP EP90306822A patent/EP0405845B1/en not_active Expired - Lifetime
- 1990-06-26 CA CA002019787A patent/CA2019787C/en not_active Expired - Fee Related
- 1990-06-26 BR BR909002995A patent/BR9002995A/pt unknown
- 1990-06-26 JP JP2165866A patent/JPH0336632A/ja active Granted
Also Published As
Publication number | Publication date |
---|---|
US5193190A (en) | 1993-03-09 |
EP0405845A2 (en) | 1991-01-02 |
JPH0336632A (ja) | 1991-02-18 |
CA2019787A1 (en) | 1990-12-26 |
CA2019787C (en) | 1994-09-13 |
EP0405845A3 (en) | 1992-08-12 |
EP0405845B1 (en) | 1997-09-17 |
DE69031442D1 (de) | 1997-10-23 |
BR9002995A (pt) | 1991-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH0552971B2 (ja) | ||
Hall | Managing interprocedural optimization | |
Ammarguellat | A control-flow normalization algorithm and its complexity | |
Briggs et al. | Value numbering | |
Whitfield et al. | An approach for exploring code improving transformations | |
EP0273130B1 (en) | Reassociation process for code optimization | |
US5802375A (en) | Outer loop vectorization | |
Liu et al. | From recursion to iteration: what are the optimizations? | |
US6249910B1 (en) | Apparatus and method for incrementally update static single assignment form for cloned variable name definitions | |
US6117185A (en) | Skip list data storage during compilation | |
WO1992022029A1 (en) | Optimizing compiler for computers | |
Cifuentes | Structuring decompiled graphs | |
Kessler | Pattern-driven automatic parallelization | |
Das et al. | Index array flattening through program transformation | |
Lu et al. | Compiler optimization of implicit reductions for distributed memory multiprocessors | |
Stawinoga et al. | Predictable thread coarsening | |
Fegaras et al. | Translation of array-based loops to distributed data-parallel programs | |
Insa et al. | Automatic transformation of iterative loops into recursive methods | |
Johnson et al. | Automatic parallel code generation for message passing on distributed memory systems | |
Fahringer et al. | A unified symbolic evaluation framework for parallelizing compilers | |
US6922830B1 (en) | Skip list data storage during compilation | |
Su et al. | Processor Tagged Descriptors: A Data Structure for Compiling for Distributed-Memory Multicomputers. | |
Wang et al. | Capitalizing on live variables: new algorithms for efficient Hessian computation via automatic differentiation | |
Kessler | Pattern-driven automatic program transformation and parallelization | |
Hwang et al. | Identifying parallelism in programs with cyclic graphs |