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
Application number
JP2165866A
Other languages
English (en)
Other versions
JPH0336632A (ja
Inventor
Marii Jankusun Joisu
Uirii Maakusuteiin Piiitaa
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH0336632A publication Critical patent/JPH0336632A/ja
Publication of JPH0552971B2 publication Critical patent/JPH0552971B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

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)」と呼
ぶ)を用いるコンパイラで大きなプラグラムをコ
ンパイルするときに、メモリ・スペースの不足か
ら最適化プロセスが中止されることのないように
し、もつて生成されるコードの質を高める方法に
関する。
B 従来技術 最適化コンパイラは、プログラムにとつて、タ
ーゲツト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プログラムに変換する。中間
レベル言語は、その名の示す通り、複雑性及び洗
練度において、高水準ソース・プログラムとマシ
ン・コードの中間にある。中間レベル言語は、複
数の高水準言語の任意のものを複数のマシンの任
意のものをターゲツトとするマシン・コードに変
換することのできるコンパイラを準備するのに特
に有用である。それによれば、すべての翻訳を共
通の中間レベル言語を通じて行い得るので、広範
囲のマシン・タイプとプログラミング言語の両方
をカバーするために開発されねばならないプロダ
クトの数が著しく減少することになる。たいてい
の最適化が普通に行われるのは、中間言語レベル
においてである。
最適化コンパイラにおける最重要の最適化は、
局所的つまり基本ブロツク・レベルではなくて、
大域的に、つまりプログラム・ワイドのレベルで
実行される。これらの最適化の何れを実行すると
きも、一連のデータ・フロー方程式を解かなけれ
ばならない。その際、コンパイラは、コンパイル
されるプログラムの中の式の情報を集める。その
ような情報は、プログラム中の制御フローに依存
する。それ自身のユニークなコード変換のため
に、どの最適化も、コンパイル時に所与の任意の
式がプログラム全体を通じて、いつ、どのように
利用可能であるかを追跡する方法を持たなければ
ならない。
この情報は、プログラムの可能な実行パス
(path)を表わす有向グラフであるところの制御
フローグラフから導かれる。低次のフローグラフ
では、ノードがプログラムの基本ブロツクを表現
し、かつノードはプログラムの制御がそれに沿つ
て流れるところのパスを表現する有向辺によつて
結ばれている。高次のフローグラフでは、ノード
は基本ブロツク又は強連結された領域からなる。
本明細書において、「基本ブロツク」とは、オ
ブジエクト・コードであれソース・コードであ
れ、分岐が到達するのはその最初の命令において
のみであり、かつ制御が離れるのはその最後の命
令の後においてのみであるような直列型のコー
ド・シークエンスである、コンピユータ・プログ
ラム中の任意の命令のセツトのことを言う。「強
連結(された)領域」とは、プログラム制御によ
つて、繰り返して、かつ当該領域の外のノードを
通過することなしに、フオローされ得るパスが存
在する、ノードのセツトを意味する。強連結領域
は、コンパイラの設計においては周知の概念であ
る。「唯一の入口を持つ強連結領域」とは、外か
ら当領域に到達することのできるノードが1つし
かないようなものを言う。以後、「領域」とは唯
一の入口を持つ連連結領域を言う。
「サブグラフ」とは、フローグラフ内のノード
の任意の組合せを言う。すべての強連結領域はサ
ブグラフでもある。しかし、すべてのサブグラフ
が強連結領域とは限らない。「エンテイテイ
(entities)」は、コンパイル中のプログラムを記
述するのに用いられる中間表現のコンポーネント
を指す。これには、変数エントリ、辞書エント
リ、結果、式、命令、及びプログラムの基本ブロ
ツクが含まれる。
プログラムが大きな複雑なものになればなるほ
ど、そのフローグラフは巨大でからみ合つたもの
になり、計算数は増え、かつデータフロー方程式
を解かなければならない式の数も増える。コンパ
イルに必要なメモリ及び処理時間は、大域的最適
化の対象となるソース・プログラム・サイズの2
次関数として増加する。スペースが制限されるこ
とからコンパイラがプログラム全体を最適化でき
ないような状況が生じると、過去においては最適
化を中止せざるを得なかつた。そこで、最適化の
質を高めるための試みがなされてきた。
USP4506325は、情報理論の符号化技術をプロ
グラムのセグメントに適用してオペレータとオペ
ランドを符号化することにより、コンパイラの必
要とする記憶量を減少させる方法を開示する。し
かしながら、プログラムをどのように分けるかに
ついては触れられていない。
USP4571678は、レジスタ割振り技術を改良す
ることによつて、ターゲツト・コンピユータの限
られた数のレジスタを活用する方法を開示する。
しかしながら、ターゲツト・コンピユータの一般
的なメモリ利用可能性を上回る巨大プログラムの
処理については全く触れられていない。
C 発明が解決しようとする課題 ハードウエア又はプログラムがコンパイルされ
るコンピユータの制約の中で最適化が実行不可能
であつても、簡単にあきらめることのないような
プログラム・コンパイル技術が必要とされてい
る。
D 問題点を解決するための手段 最適化が適用されるスコープは制限可能である
こと、及びそれでも最適化の利点の多くが実現さ
れ得ることが発見された。プログラム・ユニツト
は、その制御フロー構造に基づいて、コンパイラ
による処理が可能なほどに十分小さなセクシヨン
に区分される。
したがつて、本発明は、生成されるコードの品
質を向上させる方法を識別するために指定プロシ
ージヤを用いる最適化コンパイラにおいて、実際
に最適化を行うのに先立つて、コンパイルされる
プログラムを最適化する方法であつて、 (1) 指定プロシージヤに関し、上記プログラムに
ついてのすべての可能な実行パスを表現する制
御フローグラフを展開(develop)し、 (2) 上記プログラム中のサブグラフを識別し、 (3) 以下のサブ・ステツプからなるステツプを実
行することを特徴とする方法である。
(a) 最適化のための検査を行うサブグラフを選
択する。ただし、1番最初の繰り返しで選択
されるサブグラフはプログラム全体である。
(b) 上記サブグラフ中のコード・シークエンス
を検査することによつて、上記指定プロシー
ジヤにおいてデータ・フロー方程式を表現す
るのに用いられるアレイの各デイメンシヨン
に関連する上記サブグラフ中のエンテイテイ
の数を決定する。
(c) 上記アレイを収容するのに必要なメモリの
量を決定する。
(d) 上記メモリ量が上記コンパイルについての
所定のメモリ使用限度を越えしたがつて上記
サブグラフのノード中のコードの最適化が不
成功に終ることを示す場合には下記(e)のサ
ブ・ステツプを上記サブグラフに適用し、そ
うでない場合は上記指定プロシージヤを上記
サブグラフに適用する。
(e) サブ・ステツプ(d)で、発見された記憶領域
が不十分であつた上記サブグラフに含まれる
すべてのサブグラフについて、サブ・ステツ
プ(b)〜(d)を適用する。
E 実施例 E1 概要 本発明法を実施する最初のステツプは、最適化
されるプログラムのフローグラフを作成すること
である。フローグラフの作成は周知の技術であ
り、本発明の目的のためには標準的な技術をもつ
てすることができる。次にフローグラフの中の適
当なすべてのサブグラフが識別される。サブグラ
フの選択は、実行される最適化プロシージヤに依
存する。強連結領域は有用であることが多い。し
かし、インターバル、ハンモツク、及びツリーも
使用可能である。そして、極端な場合、サブグラ
フが単独のノードから成り立つていることもあ
る。本実施例では、サブグラフは強連結領域のコ
レクシヨンであるとする。特定の最適化のために
指定プロシージヤを書くためには、最適化の際に
形成されるアレイの数とデイメンシヨンが知られ
ていなければならない。それらのデイメンシヨン
は、例えば命令、結果、式、辞書エントリ、コー
ド・シークエンス中の基本ブロツクといつたエン
テイテイの量に依拠する。作成される特定のエン
テイテイは、引き受け中の指定プロシージヤに依
存する。これらの量はプログラムのサブグラフご
とに一定であるので、最適化の実行前に必要なメ
モリ量を簡単に計算することができる。コンパイ
ラに課されるメモリの限度は、コンパイラのライ
ターによつて1以上のレベルで予め定めることも
可能だし、あるいはコンパイラがシステム・リソ
ースの使用を評価して動的に決定することもでき
る。選択(された)プロシージヤにとつて利用可
能なメモリ量を制約する理由の1つは、選択プロ
シージヤの実行時間を制約することにもある。特
定プロシージヤのプログラム全体への適用につき
必要メモリ量が決定された後、その量は利用可能
メモリ量と比較され、利用可能メモリ量が十分で
あるならば、最適化が実行される。メモリが不十
分ならば、スペースが不十分であつたサブグラフ
内の、最大級の個別サブグラフの各々に対して該
指定プロシージヤを適用することが試みられる。
利用可能なメモリが依然不十分である被包含サブ
グラフの各々について、その被包含サブグラフが
最適化される。もしこれらの被包含サブグラフが
最適化不可能であるならば、被包含サブグラフの
各々がさらなる被包含サブグラフに分解される。
この反復は、最適化に必要なメモリ量が十分小さ
いので割当メモリの範囲内で最適化の実行が可能
であるサブグラフが検査されそして最適化が実行
されるまで継続する。本発明法は1以上の最適化
とともに用いることができる。複数の最適化を実
行するとき、その順序はどのようであつてもよ
い。
特定的な最適化の例は、共通部分式除去及びコ
ード・モーシヨンとして知られる最適化技法であ
る。この最適化に関し、フローグラフを分解して
得るサブグラフは強連結領域である。計算される
データ・セツトの1つは、最適化中の最外側の領
域内の各基本ブロツク及び領域の出口で利用可能
な式のセツト(“avail”セツト)である。この場
合、“avail”セツトのサイズを決定するために
は、2つのタイプのエンテイテイをカウントしな
ければならない。異なる式の数と、共通化
(commoned)中を領域を含む基本ブロツク及び
領域の数である。
利用可能性の情報は、最適化中の最外側領域
(つまり、低次の制御フローグラフ)の基本ブロ
ツク中のコードを通過し、どの式が計算されその
後の引数の再定義によつて殺されないかをマーク
することによつて、収集される。これらのデータ
は外側レベル領域を通じて外方向に伝播し、すべ
ての領域の出口で利用可能な式がどれかが確定さ
れる。このステツプの後、最外側領域の入口で利
用可能なものは何もないという仮定がなされ、こ
の新しい情報は逆に内側領域へと伝播される。フ
ローグラフの領域の内外の間でのデータ・フロー
情報を処理する必要性は、領域を含むループの性
質によつて決まる。明らかに、共通部分式削除
は、巨大で複雑なプログラムについての細分化か
ら思恵を受ける。全体プログラムの基本ブロツ
ク・領域の内外の間で情報を伝播させるための処
理時間は莫大なものになり得る。さらに、アレイ
の要するスペースも巨大になり得る。本発明法に
従つてプログラムを区分することにより、
“avail”セツトの第2デイメンシヨンのみならず
第1のデイメンシヨンも影響を受ける。たいてい
の場合、内側領域に現れる式のセツトを表わすユ
ニバースは、外側領域で見つかる式のセツトにつ
いてのユニバースのサブセツトである。したがつ
て、高次フローグラフ中の次レベルの領域に関し
最適化を行うことによつて、アレイのサイズを著
しく減少させることができる。なぜなら、複数の
デイメンシヨンが影響される蓋然性が高いからで
ある。
E2 具体例 第1図を参照して、本発明の具体例を説明す
る。第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を
構成しない。なぜなら、当該ノード・グループの
中に、グループ外のノードを通ることなしに制御
が繰り返し流れることを可能にするリターン・パ
スがないからである。
本発明法のプログラムに関しての実行は、まず
第1図に示すようなフローグラフを作成すること
から始まる。次に、プログラム全体が最適化プロ
シージヤのためにテストされる。コンパイラがプ
ログラム全体を通じて作動する間、データ・フロ
ー方程式を表現するアレイのサイズを決定するエ
ンテイテイの数を含めて、最適化プロシージヤに
よつて使用されるエンテイテイのカウントが維持
される。カウントがインクリメントされるとき、
各アレイの各デイメンシヨンのユニツト・サイズ
がノートされ、アレイ中のエレメントの総数が計
算される。これは割当(られた)メモリと比較さ
れる。必要なメモリが割当メモリを上回つたなら
ば、上述のようにして次に小さなSCRを発見し、
同様の調査を行う。最適化を成功させることの可
能な十分小さな領域が見つかつたなら、最適化は
その領域について行われる。他の指定プロシージ
ヤに関して最適化を行う前に、制御フローグラフ
を作り直しても差し支えない。
最適化できるサブグラフが処理された後で、よ
り大きなサブグラフの最適化を試みることが望ま
しいこともある。選択(された)プロシージヤの
適用によつてサブグラフ中のコードのサイズは減
少しているので、含む側の(containing)サブグ
ラフをユニツトとして扱うことが可能になつてい
る。しかしながら、そのような再検査はコンパイ
ル時間を増大させる。しかるに、本発明の趣意は
最適化の際のコンパイル時間とスペースを制限す
ることにある。かかるステツプを実行する場合、
順次高レベルの領域が検査される点を除いて、先
のコード・シークエンス検査と同じやり方で実行
される。
本発明を実施する最良の態様のもう一つの例
が、添付の表の擬似コード・フラグメントによつ
て示される。コードは実際のプログラムから翻案
されたものであり、以下のように動作する。最適
化器は、入力として、最適化を制約するメモリの
制限を受け取る。最適化器は、最適化指定プロシ
ージヤ(ここでは、共通化(commoning)とコ
ード・モーシヨンである)についてデータフロー
方程式を解くために使われることになる、エンテ
イテイ・セツトのユニバースを記述するべく生成
されるマツプをリセツトする。最適化器は、所与
の領域に含まれる基本ブロツク、辞書エントリの
数、及び所与の領域の中で発見される異なるシン
ボリツク・レジスタの使用数を、マツプしかつカ
ウントする。また、指定プロシージヤによつて使
用されるアレイのサイズも計算する。最適化器
は、この合計を割当メモリと比較し、必要なメモ
リが割当を越える場合は、そのノードが最も新し
くマツプされた領域に対応する数を返す。そうで
ない場合は、次の内側に含まれるレベル(the
next contained level)の領域を発見する。その
ような領域が見つかつた場合には、先に実行され
たステツプをその含まれる(contained)領域に
ついて繰り返す。領域に含まれる領域がない場合
には、同一レベルにある次の領域をサーチする。
同一レベルに領域がない場合は、次に高いレベル
の領域を捜す。領域が見つかるまで、さもなけれ
ば上昇すべきレベルがなくなるまで、フローグラ
フ・レベルを通じて上昇が繰り返される。レベル
が残つていない場合、指定プロシージヤに対し
て、プログラム内に最適化すべき領域の見つから
ないことが報告される。コード内のコメントも、
本発明の理解に役立つ。
本発明は、RISCを含む、コンパイル・プロセ
スに中間レベル言語を用いるどのマシンも使用す
ることができる。本発明はまた、最適化器によつ
て活用されるメモリの制限を調整することによつ
て、様々なコンピユータ・システムと一緒に用い
られるコンパイラとともに使用することが可能で
ある。同じ手段によつて、ユーザは同一ソース・
プログラムの様々なレベルでの最適化を達成する
ことができる。最適化が中間言語レベルで行われ
るので、本発明は、FORTRAN、PL/I、
Cobol、C、STEL、Pascalを含む高級言語の何
れをも処理する最適化コンパイラとともに使用す
ることが可能である。本発明を使用すれば、最適
化プロセスの実行に用いるコンピユータのメモリ
の制約ゆえに最適化が不可能となつてしまうであ
ろう巨大プログラムについて、少なくとも部分的
な最適化を実行することが可能になる。本発明の
さらなる利点は、大きなプログラムの最適化時に
生じるレジスタ・プレツシヤが軽減されることで
ある。例えば、多くの式がループの外へ移動され
るとき、それらを収めることのできるレジスタの
数を越えることがある。そのとき、レジスタ割振
を行うコードは、これらのレジスタ要求に応えよ
うとして、多くの処理時間とメモリ・スペースを
必要とし、その結果、レジスタ値を後でその値が
用いられるときに検索できるように一時記憶装置
に退避させなければならなくなる。大きなプログ
ラムでの細分化された(partitioned)最適化に
よれば、上記のようなタイプのコード移動
(movement)は内側のサブ領域に限定され、し
たがつてレジスタ割当はその使用により近いもの
になる。これは、内側ループの始まりに移される
式が外側領域中の定数(constant)でもある場合
には、理論的には最善の選択ではないかもしれな
いとはいえ、先の最適化の効果をひつくり返さな
ければならず、その結果コードの質を低下させる
という無駄な処理をしばしば回避する。
F 効果 本発明によれば、巨大なプログラムについても
最適化を行うことが可能になる。
【図面の簡単な説明】
第1図は、各最適化ステツプに先立つてコンパ
イルによつて作成されるプログラムの一部分のフ
ローグラフの典型例の説明図である。

Claims (1)

  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記載の方法。
JP2165866A 1989-06-26 1990-06-26 コンパイル時における最適化方法 Granted JPH0336632A (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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