JPH0336632A - コンパイル時における最適化方法 - Google Patents

コンパイル時における最適化方法

Info

Publication number
JPH0336632A
JPH0336632A JP2165866A JP16586690A JPH0336632A JP H0336632 A JPH0336632 A JP H0336632A JP 2165866 A JP2165866 A JP 2165866A JP 16586690 A JP16586690 A JP 16586690A JP H0336632 A JPH0336632 A JP H0336632A
Authority
JP
Japan
Prior art keywords
subgraph
optimization
program
array
code
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
Application number
JP2165866A
Other languages
English (en)
Other versions
JPH0552971B2 (ja
Inventor
Joyce M Janczyn
ジヨイス・マリイ・ジヤンクスン
Peter W Markstein
ピイーター・ウイリイ・マークステイーン
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)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 A、産業上の利用分野 本発明は最適化コンパイラに関し、さらに詳しくは、大
域的最適化アルゴリズム(ここでは「指定プロシージャ
(specified procedure) Jと呼
ぶ)を用いるコンパイラで大きなプログラムをコンパイ
ルするときに、メモリ・スペースの不足から最適化プロ
セスが中止されることのないようにし、もって生成され
るコードの質を高める方法に関する。
B、従来技術 最適化コンパイラは、プログラマにとって、ターゲツト
CPUの有効性及び効率を高める重要なツールである。
最適化コンパイラの目的は、書かれた通りのプログラム
機能、を正確に複製する、可能な限り最小かつ最速のオ
ブジェクト・コード・セットを生成することにある。高
水準言語で書かれたコンピュータ・プログラムについて
コンパクトかつ効率の良いオブジェクト・コードを生成
するためには1.かかる言語に用いられるコンパイラは
、ラン・タイムやプログラムの必要とするメモリ量を減
らすための様々な指定プロシージャを一般に用いる精巧
な大域的最適化a(オプテイマイザ)を活用する必要が
ある。例えば、コンパイラは、部分式削除、コード・モ
ーション(コード移動)、ストレングス・リダクション
(強さの軽減、つまり遅い動作を等価な高速動作で置換
すること〉、ストア・モーション、不要コード・シーク
ェンス除去といったことの何れかを、あるいはすべてを
、実行してもよい。このような最適化に関するいくつか
の記述は、下記の文献に見出される。
J、T、Schwartz、 On Programm
ing−An InterimReport on t
he 5ETL Language、 Install
ment II:The 5ETL Language
 and Examples of its Use。
Courant In5titute of Math
’ 5ciences+NYU、 1983、pp、2
93−310゜ E、Morel and C,Renvoise、Gl
obalOptimization by 5uppr
ession of PartialRedundan
cies、 CACM、Vol、22、No、2、pp
、96−103、1979゜ A、Aho  and  J、Ul1man+ Pr1
nciples  of  Con+pilerDes
ign、Addison−Wesley、1977゜こ
れらの最適化指定プロシージャの各々は、中間言語(I
L)プログラムを、意味的には等価だがより効率的なI
Lプログラムに変換する。中間レベル言語は、その名の
示す通り、複雑性及び洗練度において、高水準ソース・
プログラムとマシン・コードの中間にある。中間レベル
言語は、複数の高水準言語の任意のものを複数のマシン
の任意のものをターゲットとするマシン・コードに変換
することのできるコンパイラを準備するのに特に有用で
ある。それによれば、すべての翻訳を共通の中間レベル
言語を通じて行い得るので、広範囲のマシン・タイプと
プログラミング言語の両方をカバーするために開発され
ねばならないプロダクトの数が著しく減少することにな
る。たいていの最適化が普通に行われるのは、中間言語
レベルにおいてである。
最適化コンパイラにおける最重要の最適化は、局所的つ
まり基本ブロック・レベルではなくて、大域的に、つま
りプログラム・ワイドのレベルで実行される。これらの
最適化の何れを実行するときも、一連のデータ・フロー
方程式を解かなければならない。その際、コンパイラは
、コンパイルされるプログラムの中の式の情報を集める
。そのような情報は、プログラム中の制御フローに依存
する。それ自身のユニークなコード変換のために、どの
最適化も、コンパイル時に所与の任意の式がプログラム
全体を通じて、いつ、どのように利用可能であるかを追
跡する方法を持たなければならない。
この情報は、プログラムの可能な実行パス(Path)
を表わす有向グラフであるところの制御フローグラフか
ら導がれる。低次のフローグラフでは、ノードがプログ
ラムの基本ブロックを表現し、かつノードはプログラム
の制御がそれに沿って流れるところのパスを表現する有
向辺によって結ばれている。高次のフローグラフでは、
ノードは基本ブロック又は強連結された領域からなる。
本明細書において、「基本ブロック」とは、オブジェク
ト・コードであれソース・コードであれ、分岐が到達す
るのはその最初の命令においてのみであり、かつ制御が
離れるのはその最後の命令の後においてのみであるよう
な直列型のコード・シークェンスである、コンピュータ
・プログラム中の任意の命令のセットのことを言う。「
強連結(された)領域」とは、プログラム制御によって
、繰り返して、かつ当該領域の外のノードを通過するこ
となしに、フォローされ得るパスが存在する、ノードの
セットを意味する。強連結領域は、コンパイラの設計に
おいては周知の概念である。「唯一の入口を持つ強連結
領域」とは、外から当領域に到達することのできるノー
ドがtつしかないようなものを言う。以後、「領域」と
は唯一の入口を持つ連連結領域を言う。
「サブグラフ」とは、フローグラフ内のノードの任意の
組合せを言う。すべての強連結領域はサブグラフでもあ
る。しかし、すべてのサブグラフが強連結領域とは限ら
ない、「エンティティ(entities) Jは、コ
ンパイル中のプログラムを記述するのに用いられる中間
表現のコンポーネントを指す、これには、変数エントリ
、辞書エントリ、結果1式、命令、及びプログラムの基
本ブロックが含まれる。
プログラムが大きな複雑なものになればなるほど、その
フローグラフは巨大でからみ合ったものになり、計算数
は増え、かつデータフロ一方程式を解かなければならな
い式の数も増える。コンパイルに必要なメモリ及び処理
時間は、大域的最適化の対象となるソース・プログラム
・サイズの2次関数として増加する。スペースが制限さ
れることからコンパイラがプログラム全体を最適化でき
ないような状況が生じると、過去においては最適化を中
止せざるを得なかった。そこで、最適化の質を高めるた
めの試みがなされてきた6USP4506325は、情
報理論の符号化技術をプログラムのセグメントに適用し
てオペレータとオペランドを符号化することにより、コ
ンパイラの必要とする記憶量を減少させる方法を開示す
る。しかしながら、プログラムをどのように分けるかに
ついては触れられていない。
US P4571678は、レジスタ割振り技術を改良
することによって、ターゲット・コンピュータの限られ
た数のレジスタを活用する方法を開示する。しかしなが
ら、ターゲット・コンピュータの一般的なメモリ利用可
能性を上回る巨大プログラムの処理については全く触れ
られていない。
C0発明が解決しようとする課題 ハードウェア又はプログラムがコンパイルされるコンピ
ュータの制約の中で最適化が実行不可能であっても、簡
単にあきらめることのないようなプログラム・コンパイ
ル技術が必要とされている。
D6問題点を解決するための手段 最適化が適用されるスコープは制限可能であること、及
びそれでも最適化の利点の多くが実現され得ることが発
見された。プログラム・ユニットは、その制御フロー構
造に基づいて、コンパイラによる処理が可能なほどに十
分小さなセクションに区分される。
したがって1本発明は、生成されるコードの品質を向上
させる方法を識別するために指定プロシージャを用いる
最適化コンパイラにおいて、実際に最適化を行うのに先
立って、コンパイルされるプログラムを最適化する方法
であって、(1)指定プロシージャに関し、上記プログ
ラムについてのすべての可能な実行バスを表現する制御
フローグラフを展開(develoρ)し、(2)上記
プログラム中のサブグラフを識別し、(3)以下のサブ
・ステップからなるステップを実行することを特徴とす
る方法である。
(a)最適化のための検査を行うサブグラフを選択する
。ただし、1番最初の繰り返しで選択されるサブグラフ
はプログラム全体である。
(b)上記サブグラフ中のコード・シークェンスを検査
することによって、上記指定プロシージャにおいてデー
タ・フロー方程式を表現するのに用いられるアレイの各
ディメンションに関連する上記サブグラフ中のエンティ
ティの数を決定する。
(C)上記アレイを収容するのに必要なメモリの量を決
定する。
(d)上記メモリ量が上記コンパイルについての所定の
メモリ使用限度を越えしたがって上記サブグラフのノー
ド中のコードの最適化が不成功に終ることを示す場合に
は下記(e)のサブ・ステップを上記サブグラフに適用
し、そうでない場合は上記指定プロシージャを上記サブ
グラフに適用する。
(e)サブ・ステップ(d)で、発見された記憶領域が
不十分であった上記サブグラフに含まれるすべてのサブ
グラフについて、サブ・ステップ(b)〜(d)を適用
する。
E、実施例 El、概要 本発明法を実施する最初のステップは、最適化されるプ
ログラムのフローグラフを作成することである。フロー
グラフの作成は周知の技術であり、本発明の目的のため
には標準的な技術をもってすることができる0次にフロ
ーグラフの中の適当なすべてのサブグラフが識別される
。サブグラフの選択は、実行される最適化プロシージャ
に依存する0強連結領域は有用であることが多い、しか
し、インターバル、ハンモック、及びツリーも使用可能
である。そして、極端な場合、サブグラフが単独のノー
ドから成り立っていることもある。本実施例では、サブ
グラフは強連結領域のコレクションであるとする。特定
の最適化のために指定プロシージャを書くためには、最
適化の際に形成されるアレイの数とディメンションが知
られていなければならない。それらのディメンションは
1例えば命令、結果、式、辞書エントリ、コード・シー
クェンス中の基本ブロックといったエンティティの量に
依拠する0作成される特定のエンティティは、引′き受
は中の指定プロシージャに依存する。
これらの量はプログラムのサブグラフごとに一定である
ので、最適化の実行前に必要なメモリ量を簡単に計算す
ることができる。コンパイラに課されるメモリの限度は
、コンパイラのライターによって1以上のレベルで予め
定めることも可能だし、あるいはコンパイラがシステム
・リソースの使用を評価して動的に決定することもでき
る。選択(された)プロシージャにとって利用可能なメ
モリ量を制約する理由の1つは、選択プロシージャの実
行時間を制約することにもある。指定プロシージャのプ
ログラム全体への適用につき必要メモリ量が決定された
後、その量は利用可能メモリ量と比較され、利用可能メ
モリ量が十分であるならば、最適化が実行される。メモ
リが不十分ならば、スペースが不十分であったサブグラ
フ内の、最大級の個別サブグラフの各々に対して該指定
プロシージャを適用することが試みられる。利用可能な
メモリが依然不十分である被包含サブグラフの各々につ
いて、その被包含サブグラフが最適化される。もしこれ
らの被包含サブグラフが最適化不可能であるならば、被
包含サブグラフの各々がさらなる被包含サブグラフに分
解される。この反復は、最適化に必要なメモリ量が十分
小さいので割当メモリの範囲内で最適化の実行が可能で
あるサブグラフが検査されそして最適化が実行されるま
で継続する。本発明法は1以上の最適化とともに用いる
ことができる。複数の最適化を実行するとき。
その順序はどのようであってもよい。
特定的な最適化の例は、共通部分式除去及びコード・モ
ーションとして知られる最適化技法である。この最適化
に関し、フローグラフを分解して得るサブグラフは強連
結領域である。計算されるデータ・セットの1つは、最
適化中の最外側の領域内の各基本ブロック及び領域の出
口で利用可能な式のセット(″avai1″セット)で
ある。この場合+  ”avail”セットのサイズを
決定するためには、2つのタイプのエンティティをカウ
ントしなければならない。異なる式の数と、共通化(c
oauwoned )中の領域を含む基本ブロック及び
領域の数である。
利用可能性の情報は、最適化中の最外側領域(つまり、
低次の制御フローグラフ)の基本ブロック中のコードを
通過し、どの式が計算されその後の引数の再定義によっ
て殺されないかをマークすることによって、収集される
。これらのデータは外側レベル領域を通じて外方向に伝
播し、すべての領域の出口で利用可能な式がどれかが確
定される。このステップの後、最外側領域の入口で利用
可能なものは何もないという仮定がなされ、この新しい
情報は逆に内側領域へと伝播される。フローグラフの領
域の内外の間でのデータ・フロー情報を処理する必要性
は、領域を含むループの性質によって決まる。明らかに
、共通部分式削除は、巨大で複雑なプログラムについて
の細分化から恩恵を受ける。全体プログラムの基本ブロ
ック・領域の内外の間で情報を伝播させるための処理時
間は莫大なものになり得る。さらに、アレイの要するス
ペースも巨大になり得る。本発明法に従ってプログラム
を区分することにより、# avaj、 l II上セ
ツト第2デイメンシヨンのみならず第1のディメンショ
ンも影響を受ける。たいていの場合、内側領域に現れる
式のセットをpわすユニバースは、外側領域で見つかる
式のセットについてのユニバースのサブセットである。
したがって、高次フローグラフ中の次レベルの領域に関
し最適化を行うことによって、アレイのサイズを著しく
減少させることができる。なぜなら、複数のディメンシ
ョンが影響される蓋然性が高いからである。
E2.具体例 第1図を参照して1本発明の詳細な説明する。
第1図には、典型的な被コンパイル・プログラムの一部
分が示されている。この例では、用いられるサブグラフ
のタイプは強連結領域(SCR)である、ノード1〜1
5は、1つの入口とlっの出口ポイントを持つ、1ライ
ン以上のコードからなる基本ブロックである。第1図に
示されるフローグラフ全体は、強連結領域20である。
フローグラフの内側からノード1へ至るリターン・パス
が存在しないので古典的な定義には適合しないけれども
、これは真であると定義(define)される。
次に内側のSCRのサーチは公知の方法で行うことがで
き1本発明法にとってクリティカルなものではない。こ
の例では、ノード2はノード12から戻るパスを持つけ
れども、その後のノードから戻るパスはない。フローグ
ラフにおいて次に内側のSCRは、ノード2〜12を含
む領域工9ということになる。次に5CR19の内側に
含まれるSCRも同様に解析される。したがって、ノー
ド3〜11を含むパスを反復的にトレースすることがで
き、領域18が定義される。同様に、第1図のフローグ
ラフ中の他の2つのSCRのうち、1つはノード8.9
.10から成る領域17であり、もう1つはノード7か
ら成る領域16である。
ノード7は、それ自身の内的なリターン・パスを具備し
ている。ノード13〜15はSCRを構成しない、なぜ
なら、当該ノード・グループの中に。
グループ外のノードを通ることなしに制御が繰り返し流
れることを可能にするリターン・パスがないからである
本発明法のプログラムに関しての実行は、まず第1図に
示すようなフローグラフを作成することから始まる0次
に、プログラム全体が最適化プロシージャのためにテス
トされる。コンパイラがプログラム全体を通じて作動す
る間、データ・フロー方程式を表現するアレイのサイズ
を決定するエンティティの数を含めて、最適化プロシー
ジャによって使用されるエンティティのカウントが維持
される。カウントがインクリメントされるとき、各7レ
イの各ディメンションのユニット・サイズがノートされ
、アレイ中のエレメントの総数が計算される。これは割
当(られた)メモリと比較される。必要なメモリが割当
メモリを上回ったならば、上述のようにして次に小さな
SCRを発見し、同様の調査を行う、最適化を成功させ
ることの可能な十分水さな領域が見つかったなら、最適
化はその領域について行われる。他の指定プロシージャ
に関して最適化を行う前に、制御フローグラフを作り直
しても差し支えない。
最適化できるサブグラフが処理された後で、より大きな
サブグラフの最適化を試みることが望ましいこともある
1選択(された)プロシージャの適用によってサブグラ
フ中のコードのサイズは減少しているので、含む側の(
con’taining)サブグラフをユニットとして
扱うことが可能になっている。しかしながら、そのよう
な再検査はコンパイル時間を増大させる。しかるに1本
発明の趣意は最適化の際のコンパイル時間とスペースを
制限することにある。かかるステップを実行する場合、
順次高レベルの領域が検査される点を除いて、先のコー
ド・シークェンス検査と同じやり方で実行される。
本発明を実施する最良の態様のもう一つの例が、添付の
表の擬似コード・フラグメントによって示される。コー
ドは実際のプログラムから翻案されたものであり、以下
のように動作する。最適化器は、入力として、最適化を
制約するメモリの制限を受は取る。最適化器は、最適化
指定プロシージャ(ここでは、共通化(commoni
ng)とコード・モーションである)についてデータフ
ロ一方程式を解くために使われることになる。エンティ
ティ・セットのユニバースを記述するべく生成されるマ
ツプをリセットする。最適化器は、所与の領域に含まれ
る基本ブロック、辞書エントリの数、及び所与の領域の
中で発見される異なるシンボリック・レジスタの使用数
を、マツプしかつカウントする。
また、指定プロシージャによって使用されるアレイのサ
イズも計算する。最適化器は、この合計を割当メモリと
比較し、必要なメモリが割当を越える場合は、そのノー
ドが最も新しくマツプされた領域に対応する数を返す、
そうでない場合は1次の内側に含まれるレベル(the
 next containedleve1)の領域を
発見する。そのような領域が見つかった場合には、先に
実行されたステップをその含まれる(containe
d)領域について繰り返す。
領域に含まれる領域がない場合には、同一レベルにある
次の領域をサーチする。同一レベルに領域がない場合は
、次に高いレベルの領域を捜す。領域が見つかるまで、
さもなければ上昇すべきレベルがなくなるまで、フロー
グラフ・レベルを通じて上昇が繰り返される。レベルが
残っていない場合、指定プロシージャに対して、プログ
ラム内に最適化すべき領域の見つからないことが報告さ
れる。コード内のコメントも、本発明の理解に役立つ。
本発明は、RISCを含む、コンパイル・プロセスに中
間レベル言語を用いるどのマシンも使用することができ
る0本発明はまた。最適化器によって活用されるメモリ
の制限を調整することによって、様々なコンピュータ・
システムと一緒に用いられるコンパイラとともに使用す
ることが可能である。同じ手段によって、ユーザは同一
ソース・プログラムの様々なレベルでの最適化を達成す
ることができる。最適化が中間言語レベルで行われるの
で、本発明は、 FORTRAN、 PL/I、Cob
ol、 C。
S丁EL、Pa5calを含む高級言語の何れをも処理
する最適化コンパイラとともに使用することが可能であ
る。本発明を使用すれば、最適化プロセスの実行に用い
るコンピュータのメモリの制約ゆえに最適化が不可能と
なってしまうであろう巨人プログラムについて、少なく
とも部分的な最適化を実行することが可能になる。本発
明のさらなる利点は、大きなプログラムの最適化時に生
じるレジスタ・プレッシャが軽減されることである。例
えば、多くの式がループの外へ移動されるとき、それら
を収めることのできるレジスタの数を越えることがある
。そのとき、レジスタ割振を行うコードは、これらのレ
ジスタ要求に応えようとして、多くの処理時間とメモリ
・スペースを必要とし、その結果、レジスタ値を後でそ
の値が用いられるときに検索できるように一時記憶装置
に退避させなければならなくなる。大きなプログラムで
の細分化された(partitioned )最適化に
よれば、上記のようなタイプのコード移動(movem
ent )は内側のサブ領域に限定され、したがってレ
ジスタ割当はその使用により近いものになる。これは、
内側ループの始まりに移される式が外側領域中の定数(
constant )でもある場合には、理論的には最
善の選択ではないかもしれないとはいえ、先の最適化の
効果をひっくり返さなければならず、その結果コードの
質を低下させるという無駄な処理をしばしば回避する。
commoninLmap: proc(scr#) 
returns(integer):/**6++1*
*****I°******************
*************** *ll*** os
 **4+*****/ l◆                      0
1/” Procedure Name: commo
ning−map          ”//” r’
unction: Build maps or th
e basic blocks and the us
ed items”/ l・    items m the diction
ary and tbe reg 1able for
 a  ”//”    5pecil’ic reg
ion、           ”//”      
                 ”//” Inp
uts: scr#−1ndicates the n
ode in the noWgraph where
 ”//”       we 5tart look
ing for a region for whic
h to ”/l◆     build the r
eg−map and die−map、 If 5t
arL m  ◆I/”      node cou
nt then we’旧ry buildjng L
he maps◆l/”       for the
 whole program、 01henvise
、 iL means ”//”      we’v
e already pmcessed 1his r
egion and wC”//”      wan
l to find all>ers in Ihe 
pro炉un shuting ”//”      
from where we 1eft olT、  
    。l/” 0utputs: dic−map
、 reg−m:Ip、 map−info、 nod
e−mip、      。1ノ◆         
                         
      1100***************
************** 6060406+00
400644666$44 ***◆00◆氈氓 dcl 5crl    integer value
;(ICI partcom   bit;del (
i、j、k)  integer;dcl node 
  integer;del 11m1t   int
eger; ! 11m1t rar vector 
5izes for parlitioncd c盾高
高盾獅奄獅■ dclsmalJ−1imit 1iterally(
204&);  !2kdcl medium−1im
it 1iterally(+024000); ! 
1 megdcl large−limit 1ite
rally(2048000); ! 2 megM 
indebug(’r’c−OFF’) = = Ot
hen ! ir partitioning is 
turned offpwtcom x false;
     ! then set the flag 
to false1se do;         ! 01henvise、 
set the nag to true andpx
com m true;     ! choose 
the correct data 5pacc 11
m1t。
:r indebug(’r’c−S’) = = O
then ! N0TE: the defau旧s 
the medium 11高t。
11m1t w small 11m1t;1se if indcbug(′r’c−L′) ” w O
thenlimit z large−limit;C
1ぺC 0而t w medium−1imit;end; !
el箕 ! Auocate the arrays used
 to map the entities whic
h wiu be collモモ狽モ■ ! by commoning。
ffalloca(ion(dic−map) = O
thcndo;  ! M dic−map isn’
t allocated 山cn none or t
he maps arc alloc奄撃モモ戟 ! Find a region small eno
uglt to work With、、。
do while (scr# −w O);! Re
5et the maps rot the regi
onnext−rcg、 next−dic m O;
$zero(dic−map); $y、cro(re
g−map); Sy、ero(unmap−rag)
;$y、cro(node−map); $y、ero
(unmap−node);! ]1hc 1oop 
pre−hcadcr notle maps 1nt
o position l or unmap−bb 
a獅■ ! tltc posl−exit node whi
ch is always basic block 
l l rnaps int ! position Owhich is not 
explicitly done here 5inc
e node−map is! zcroed abo
ve。
unmap−noclc(0) W posl−cxi
l;node−map(pre−bcadcr) W 
l;unmap−nodc(1)  −pre−hca
dcr;node−map(post−cxit) x
 O;curr−node m l; map−node(scr//); ! Loop thru the 1nstructi
ons in the noclcs that ha
ve bccn mappeп do k w  l lo curr−node;  
! donlneed to 璽ook at lhe
 post−cxit noр■ ! 5ince il is a ”l’1ction
al” node wlsicb conlains!
 no code and is used 10 s
implify oplimiy、ation! a1
gorilhms+ node m unmap−nodc(k);V 5c
r(nodc) then 1lcrate;1se do i w e+sch 1nstruction 
in the basic block −nodc”
do i−each operand in the 
cum:nt 1nstruction 1−「j i
s a rcgister and hasn’t b
een maPped yet then、、。
next−reg m next−reg + 1 ;
end; ! if j is a register
1se if j is a dictionary entr
y and hasn’t been mapped 
yet then、、。
next−dicx nexl−dic+ l;dic
−map(i)−next−dic;cnd; ! i
f i is a dictionary entry
end do i; end do轟: end do k: ! It partilioned commonin
g is turned off 011 EL’sE
 p、trlilionedcommoning 口S being performed and th
is region l5NTtoo big、 th
en pcrform! commoning on 
this region。
if(=paricom)l◆(=too−big)t
henrctum (scr#); ! O1l+envisc、 1ook for an
ollter region lo map xvit
11in山is regio氏 do i x WCb node in the re
L!1onif 5cr(i)山cn Icavc;e
nd do iH ! if there are no 1nner r
egions in 5crl、 rmd the n
ext one! at the same or h
iIther 1cvel。
「i > number of nodes in t
he region −5crffscrfl m f
ind−next−region(scrtI);el
se ! e−ne the first 1nner
 region of ’scd/Fscr#雪i; end; ! do While (scr# = −
0)! Ir We reached here、 t
hen tbere are no more reg
ions which can b■ ! optimized。
retum(0); map−nodes: proc(scr#);! R
ecursive procedure to map
 au the basic block and s
cr nodes c盾獅拍■獅モ■ ! in the region ’5cri’。
dcl scr#integer value;dcl
 i   integer; ! Map e3ch node in lhe re
gion ’scr#”。
do i t= e+Ich node 1nthe 
region! If this node is 1
tscff a strongly connecte
d region、 than map 奄狽■ ! nodes first。
if 5cr(i) then map−nodes(i); 1se do; ! NoL :r strongly con
ncctcd region (lhcrcrore、
 ivs a buic b撃盾モ求 ! so go 3ht+Ld :Ln map it
curr node x curr node + I
;end; !else end do i; ! AFler mapping all or it
s nodes、 add the ’5crll″n
ode to the! node−map、 too
curr node = curr node + I
;unmap−node(curr−node) = 
scr#;end; ! map−nodes too−big: proc returns (bi
t);!■■ゴ0R VECTORDIMENSIONS SIZF、 OF へ5INGLIE VnCrORE
l、EM[EN’r! avail−regs ! dcyd−rcgs ! avail dies ! rcg−kills next−rcg x node−cnunt  2 
bytes (halr a word)next−r
ag x nocle−count    2 byt
eancx(die x noclc count  
2 bylesncxt−rcg x next−rC
g  I byte (one quaner or 
a word)i「 (2°(next−reg ” 
node−counl ” 、5)+  ! sjy、
cs rat avail−rCgs anпdcXl
d−rags l ” (next−dic ” node−coun
t ” 、5) + ! 5ize for avai
l−diesl ” (next−reg ” nex
t−reg ” 、25)  ! 5ize for 
reg−kills) > 11m1L then !
 lr 1olal amount or memor
y needed by theseretum(Ir
ue);  ! vcclors is greate
r than lhe 11m1t then rct
umelse      ! true bccaus
e the region is too bit t
o be commoned。
end; !roo−big ! 1’l+is procedure take a
 region number and I’1nds
 the next reg奄盾氏in the ! +1(1%V grapb which is a
t the same or higher 1eve
l as regn−、Th■node ! numberor that next regi
on wiu be returned、  11th
ere is no 5uc■ ! rcgion、 lhe value Ois r
etumed Lo 1ndicate this。
dcl regn  integer value;d
cl cr  integer、   ! conta
ining regiondcl i  1ntc杯!
 1oop counterj Wc quit ir
 we arc already at thc ou
termost region 1evel。
do while(regn′= node−cnun
t);! ’cr−is the region wh
ich contains −rcgp−cr  = 
 containing−rrgion(rcgn);
! Loop through the remain
ing siblings in the conta
ining region。
do i = regn + I to 1ast n
ode in″cr−! If there is a
nother region、 retum its 
number。
! At (his point、 we have 
lo ascend a 1evel and 5ea
rch the sibli獅■■ ! or regn’s containing re
gion。
regn s++ cr; end; ! do while (regn = =
 node count);! No more re
gions Io eLILrrlirIe、、。
reLum(0); end; ! fuld−next−regj、one
nd commoning−map;F、効果 本発明によれば、巨大なプログラムについても最適化を
行うことが可能になる。
【図面の簡単な説明】
第1図は、各最適化ステップに先立ってコンパイルによ
って作成されるプログラムの一部分のフローグラフの典
型例の説明図である。 出願人  インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人  弁理士  頓  宮  孝  −(外1名)

Claims (9)

    【特許請求の範囲】
  1. (1)生成されるコードの品質を向上させる方法を識別
    するために指定プロシージャを用いる最適化コンパイラ
    によるプログラムのコンパイルに際して、最適化を実行
    するために、 (a)指定プロシージャを実行する前に、上記プログラ
    ムについてのすべての可能な実行パスを表現する制御フ
    ローグラフを展開し、 (b)上記プログラムに含まれるサブグラフを識別し、 (b)以下のサブ・ステップからなるステップを実行す
    ることを特徴とする方法。 (c1)最適化のための検査を行うサブグラフを定義す
    る。ただし、1番最初に定義されるサブグラフはプログ
    ラム全体である。 (c2)上記サブグラフ中のコード・シークェンスを検
    査することによって、上記指定プロシージャにおいてデ
    ータ・フロー方程式を表現するのに用いられるアレイの
    各ディメンシヨンに関連する上記サブグラフ中のエンテ
    ィティの数を決定する。 (c3)上記アレイを収容するのに必要なメモリの量を
    決定する。 (c4)上記メモリ量が上記コンパイルについての所定
    のメモリ使用限度を越えしたがって上記指定プロシージ
    ャの適用が不成功に終ることを示す場合には下記(c5
    )のサブ・ステップを上記サブグラフに適用し、そうで
    ない場合は上記指定プロシージャを上記サブグラフに適
    用する。 (c5)サブ・ステップ(c4)で利用可能なメモリが
    不十分であると判断された上記サブグラフに含まれるす
    べてのサブグラフについて、サブ・ステップ(c2)〜
    (c4)を適用する。
  2. (2)複数の指定プロシージャが実行される請求項1記
    載の方法。
  3. (3)上記サブグラフは上記プログラム内の強く連結さ
    れた領域である請求項1記載の方法。
  4. (4)上記指定プロシージャは、コード・モーション、
    ストア・モーション、冗長コード・シークェンス除去、
    不要コード・シークェンス除去、及び式簡略化からなる
    グループから選択される請求項1記載の方法。
  5. (5)上記エンティティは、命令、結果、式、辞書エン
    トリ、ソース・コード・プログラム中の領域、ソース・
    コード・プログラム中の基本ブロック、及びそれらの組
    合せからなるグループから選択される請求項1記載の方
    法。
  6. (6)アレイごとに、各ディメンションのユニット・サ
    イズを掛け合わせて該アレイ中のエレメントの総数を求
    め、 1アレイ・エレメントのサイズとアレイ・エレメントの
    数を掛け合わせて、該アレイの占めるメモリ・ユニット
    の数を求め、 アレイの必要とするメモリ量を加算して特定の最適化が
    必要とするメモリの総量を求める ことにより、上記コンパイラによって生成されるすべて
    のエンティティを収容するのに必要なメモリ量を計算す
    る 請求項1記載の方法。
  7. (7)最適化の定義と実行に成功した後、当該最適化の
    実行されたサブグラフを含むサブグラフについて、上記
    指定プロシージャによる最適化が可能か否かを検査する
    請求項1記載の方法。
  8. (8)最適化の定義と実行に成功した後、含む側の強連
    結領域について、上記指定プロシージャによる最適化が
    可能か否かを検査する請求項1記載の方法。
  9. (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
US371487 1989-06-26
US07/371,487 US5193190A (en) 1989-06-26 1989-06-26 Partitioning optimizations in an optimizing compiler

Publications (2)

Publication Number Publication Date
JPH0336632A true JPH0336632A (ja) 1991-02-18
JPH0552971B2 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)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006256209A (ja) * 2005-03-18 2006-09-28 Teijin Chem Ltd 積層膜付成形体
JP2013149164A (ja) * 2012-01-20 2013-08-01 Hitachi Automotive Systems Ltd ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム

Families Citing this family (37)

* 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 富士通株式会社 コンパイル装置
WO1994025917A1 (en) * 1993-04-26 1994-11-10 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
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
US5519866A (en) * 1993-06-28 1996-05-21 Taligent, Inc. Method and apparatus of incrementally linking components of a modeled computer program
US5457799A (en) * 1994-03-01 1995-10-10 Digital Equipment Corporation Optimizer for program loops
EP0703532B1 (en) * 1994-09-22 2001-11-28 Sun Microsystems, Inc. Embedded program flow information for object code manipulation
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
CA2166254C (en) * 1995-12-28 2000-02-01 Robert James Blainey Improving memory layout based on connectivity considerations
CA2166253C (en) * 1995-12-28 2000-02-08 Robert James Blainey Connectivity based program partitioning
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
CA2288614C (en) 1999-11-08 2004-05-11 Robert J. Blainey Loop allocation for optimizing compilers
US6567975B1 (en) * 1999-11-08 2003-05-20 Sun Microsystems, Inc. Method and apparatus for inserting data prefetch operations using data flow analysis
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
US20060265695A1 (en) * 2003-01-28 2006-11-23 Catena Corporation Software development preprocessing method, solftware control method, software development method, and software development device
US7765539B1 (en) 2004-05-19 2010-07-27 Nintendo Co., Ltd. System and method for trans-compiling video games
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
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
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
US4642764A (en) * 1984-08-13 1987-02-10 International Business Machines Corporation Method of developing formal identities and program bases 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

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006256209A (ja) * 2005-03-18 2006-09-28 Teijin Chem Ltd 積層膜付成形体
JP4700379B2 (ja) * 2005-03-18 2011-06-15 帝人化成株式会社 積層膜付成形体の製造方法
JP2013149164A (ja) * 2012-01-20 2013-08-01 Hitachi Automotive Systems Ltd ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム

Also Published As

Publication number Publication date
EP0405845A3 (en) 1992-08-12
CA2019787C (en) 1994-09-13
CA2019787A1 (en) 1990-12-26
EP0405845A2 (en) 1991-01-02
US5193190A (en) 1993-03-09
EP0405845B1 (en) 1997-09-17
BR9002995A (pt) 1991-08-20
JPH0552971B2 (ja) 1993-08-06
DE69031442D1 (de) 1997-10-23

Similar Documents

Publication Publication Date Title
JPH0336632A (ja) コンパイル時における最適化方法
Ammarguellat A control-flow normalization algorithm and its complexity
US6381739B1 (en) Method and apparatus for hierarchical restructuring of computer code
US6173444B1 (en) Optimizing compilation of pointer variables in the presence of indirect function calls
EP0273130B1 (en) Reassociation process for code optimization
US5889999A (en) Method and apparatus for sequencing computer instruction execution in a data processing system
Liu et al. From recursion to iteration: what are the optimizations?
JPH06507990A (ja) コンピュータのための最適化コンパイラ
Cifuentes Structuring decompiled graphs
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
Rodríguez et al. Trace-based affine reconstruction of codes
Lomet Data flow analysis in the presence of procedure calls
Das et al. Index array flattening through program transformation
US20030233640A1 (en) Structuring program code
Wang et al. Capitalizing on live variables: new algorithms for efficient Hessian computation via automatic differentiation
Autrey et al. Initial results for glacial variable analysis
Williams et al. Restructuring pascal programs containing goto statements
Marin et al. Towards a framework for generating program dependence graphs from source code
Wang et al. A platform-specific code smell alert system for high performance computing applications
Pérard-Gayot et al. A data layout transformation for vectorizing compilers
Feautrier Array dataflow analysis
US20240232666A9 (en) Replacing lambda expressions in a rete network with corresponding code classes
US20240135210A1 (en) Replacing lambda expressions in a rete network with corresponding code classes
Boyland et al. Attributed transformational code generation for dynamic compilers