JPS6149242A - コード最適化方法 - Google Patents

コード最適化方法

Info

Publication number
JPS6149242A
JPS6149242A JP60174441A JP17444185A JPS6149242A JP S6149242 A JPS6149242 A JP S6149242A JP 60174441 A JP60174441 A JP 60174441A JP 17444185 A JP17444185 A JP 17444185A JP S6149242 A JPS6149242 A JP S6149242A
Authority
JP
Japan
Prior art keywords
code
basic block
base
uex
calculations
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
JP60174441A
Other languages
English (en)
Other versions
JPH0695311B2 (ja
Inventor
マーク アラン オースランダー
ジヨン・コツク
ピーター・ウイリー・マークスタイン
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 JPS6149242A publication Critical patent/JPS6149242A/ja
Publication of JPH0695311B2 publication Critical patent/JPH0695311B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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、産業上の利用分野 本発明は、コードの品質を改善するために最適化アルゴ
リズムを用いたコンパイラにおいて特に有用である。特
に、本発明は、共通部分式の消去及びコードの移動とし
て知らnている最適化を行なう時間を改善する。さらに
本発明は上記最適化の効率を増大させる。
本発明は全ての型の計算機のための最適化コンパイラに
おいて有用性を見い出すであろうが、特に縮小命令セッ
ト計算機(RISC)に関して重要である。RI SC
の場合、コンパイラによって作成さnるコードはしばし
ば、複雑命令セット計算機の場合に作成されるコードよ
りも大規模である。というのはRI SCの各命令はよ
り単純で且つより少ない機能を実行するからである。R
ISCの場合、生成さnるコードにおける最適化の機会
及び必要性はずっと大きい。
B、開示の概要 犬域的彦共通部分式の消去及びコードの移動を実行する
最適化コンパイラの最適化フェーズ中に、下記のステッ
プが行なわnる。
オブジェクト・プログラムに関するコードの「基底」を
決定する。このステップはコードの各基本ブロックの調
査を含む。そして、各計算が依存している「基底」項目
を決定する。但し、「基底」項目は、計算さ几る前に基
本ブロック中で参照さnるオペランドと定義さ几る。次
に各基定項目毎に「キル集合」を決定する。こnに続い
て、前もって決定さnた「基底」に「キル集合」の情報
を用いて各基本ブロック毎にUEX、DEX及びTHR
Uが決定さnる。AV、ML及びlN5ERTがUEX
、DEX及びTHRUから計算さn、先行するステップ
によって示される位置に適当なコードの挿入が行なわn
、最後にAVAILを用いて冗長なコードが除去さ几る
C1従来技術 ]ンパイラによって生成されるコードの品質は、最初の
コンパイラが作成されて以来、議論の対象であった。I
BMのFORTRAN  Iコンパイラ(最初の商業的
に利用可能なコンパイラ)の主要な目的の1つは、アセ
ンブリ言語のプログラマが手でコーディングする事によ
って直接的に作成されたコードに対してコード品質にお
いて匹敵するオブジェクト・コードを、科学技術計算の
分野において、生成する事であった。
今日、計算機が利用可能なあらゆる分野において使用さ
nるように種々の高水準言語が設計さ汎ている。最初の
FORTRAN言語でさえも、広範囲のプログラミング
・タスクに適用できるようにするために機能強化が行な
わnできている。しかしながら、コンパイラによって生
成さ几るコードの品質は、特に結果として生じるコード
が生産環境で使用さnる場合には、高い事が依然として
重要である。有能なアセンブリ言語プログラマによって
作成さ几るコードは、依然として、コンパイラの生成し
たコードの比較基準である。
1950年代以来、コンパイラの生成するコードの品質
を改善するために、多数の最適化技術が開発さ几改良さ
几てきた。実際、と几らの最適化の多くは、最初のFO
RTRANコンパイラを作成したチームによって原理的
には知られ且つある方式で用いらnでいた。
最適化コンパイラにおいてしばしば採用さ几る最適化技
術には、共通部分式の消去、高い実行頻度の場所から低
い実行頻度の場所へのコードの移動、無用コードの消去
、遅い動作から等価々速い動作への置きかえ、及び定数
伝播が含ま几る。こnらの最適化技術についての説明は
、下記の文献に見い出さ几る。
J、T、  シュワルツ(Schwavtz )、[プ
ログラミングについて一5ETL言語に関する中間報告
。第2部:5ETL言語とその使用例(OnProgr
amming−An Interim Report 
on theS E T L  Language 、
 Installment II : TheSETL
  Language a’nd Examples 
of Itsuse ) j、Courant In5
titute of MathSciences 、 
NYU、1983年発行、293〜310頁。
E 、 モl//L/外(E 、 Morel and
 C,Renvoise)、[部分的な冗長性の抑圧に
よる大域的な最適化(Global Optimiza
tion ly 5uppression ofPar
tial Redundancies ) j、CAC
M、第22巻、第2号、96〜103頁、(1979年
)。
A、エイホ、J、ウルマン(A、Aho、J。
Ullman )、「コンパイラ設計の原理(Pr1n
ciples of Compiler Design
 ) J、アデイソンーウエスレー(Addison−
Wesley )社、1977年発行。
大域的な共通部分式の消去及びコードの移動は最も重要
な最適化技術に属する。測定結果にょfば、こnらの最
適化は他の最適化技術のど几よシも大きな影響をコード
の改善に対して有する。多くの文献がこの最適化をいか
にして行なうかを説明している。上記引用文献の最初の
2つは、元のコードを冗長なものにし消去できるように
するためにプログラム中にコードのコピーが挿入さnる
べき場所をいかにして決定するかについてすぐ几た説明
を含んでいる。また、とnらの文献は冗長なコードの存
在する場所を判定する方法についても説明している。そ
の方法は、基本ブロックを1度に1つずつ調査する事に
よって決定し得るある%定についての知識及びプログラ
ムのフロー・グラフに依存している。そ几らの特性は次
のようなものである。
DEX  下方に蕗出さfした式(downwarde
xposed  expressions )基本ブロ
ックの終りに実行された場合 に、「本来の場所」即ち基本ブロック 中にそルらが存在する場所で実行さ肛 た時と同じ結果を与える計算の集まり。
UEX  上方に露出さnた式(upwardexpo
sed expressions )基本ブロックの始
めに実行さ几た場合 に「本来の場所」で実行さnた時と同 じ結果を与える計算の集まり。
T)IRU  基本ブロックの始め又は終りに計算さn
た場合に同じ結果を与える計算の集 壕り。
上記参考文献は、上述の集まりが基本ブロック毎に知ら
几ているという前提に基いて、いかに大域的な共通部分
式の消去やコードの移動を行なうかを説明している。特
に、こ几らの参考文献は、集合DEXS[JEX及びT
 HRUに基いて、コード移動の効果を達成するために
、ある基本ブロックの終りに挿入すべき計算の集合及び
基本ブロックへの入口において既に利用可能な計算の集
合を計算する方法を説明している。こ几らの計算は当業
者に周知のものである。
D、従来技術の問題点 しかしながら、UEX、DEX及びTHRUを計算する
時に注意を払わなけnば、共通化及びコード移動のアル
ゴリズムは、関係した計算のシーケンスの最初の部分し
か共通化及び/又は移動しない可能性がある。例えば表
■のコード断片を考察する。
表I 表■中のコードより成る基本ブロック、に関して、R1
02の計算(動作3)をUEXに含めない事は容易であ
る。というのは基本ブロックに入った時KR100及び
RIOIは、ADD命令に出合った時と同じ値を持って
いない可能性があるからである。しかし例えば、もし表
■が、A及びBが変化しないような内部ループ中のコー
ドであ几ば、動作1及び動作2は明らかにUEX(こ几
はコード移動を決定する時の道具になる集合である)に
属する。この時、コード移動及び共通化を適用した後、
動作3は依然としてループ中にとどまり、そnをループ
外に移動させようとすnば他のアルゴリズムの適用が必
要であろう。
次にいくつかの従来技術を概観する。
米国特許第4309756号は、ある論理的計算を評価
する方法を開示している。そこに開示さ几た概念はスコ
ープが狭く、1982年に発行さnた特許としては時代
錯誤的である。こ几は、ネーミング計算について伺ら明
らかにする事はなく従って同じ名前に冗長な計算が行な
わnる可能性がある。
英国特許第1413938号は、コンパイラの出力の正
しさをテストする技術に関係している。
こルは最適化コンパイラによって生成されたコードの正
しさをテストするために使う事もできる。
しかしこの特許は、最適化コンパイラが一般にどのよう
にしてコードを生成するかという事、又はそ几が最適化
をいかにして達成するかについては何の関連もない。
米国特許第4277826号は仮想アドレス変換機構を
維持するためにハツシングを用いている。
本発明は、コンパイルの過程で以前に出会った計算を迅
速に参照、するためにハツシングを用いるが、ハツシン
グは本発明の実施例における些細な要素でしかない。
本発明は、計算に関する「基底」を導出する事及び「基
底」要素によって全ての計算を表現する事がいかにして
大域的な共通部分式の消去及びコード移動を能率的に実
行する事を可能にするかを示している。
1984年8月13日付の米国特許出願第640285
号は本発明の関連出願であるが、こルはあるコード生成
戦略を用いると、「基底」が中間コード生成過程の間に
選択できる事を示している。
「基底」を決定するには、コード生成の完了を待つ必要
はない。そのような場合、全ての計算は中間コード生成
中に即座に「基底」によって表現できる。コック(Co
cke 、J 、)及びマークスメイン(Markst
ein、P、)著、「プログラム改良アルゴリズムの測
定(Measurement of ProgramI
mprovement Algorithms ) J
、Proc。
IFIP  Cong、180、東京、日本、10月6
〜9日、1980年、メルポルン、オーストラリア、1
0月14〜17日、1980年、221〜228頁に説
明さnているP L / ILコンパイラは、コード生
成戦略を用い、中間言語コード生成中に「基底」がそn
から決定できるような情報を本質的に作成する。しかし
ながら、この文献は「基底」の生成又はその使用を開示
も示唆もしていない。
ここで用いた中間言語という用語は、翻訳さnつつある
プログラムを表現するためにコックくイラによって使用
さルる言語を意味する。そf′Lは通常、ソース言誤よ
りも低水準であるが、ターゲット言語よりは高水準であ
る。最適化コンパイラ(は中間言語プログラムを等価な
、しかしより良い中間言語プログラムに変換する。コン
パイルのこのフェーズは従来公知であり七n自体は新規
とは考えらnない。ここでそnについて述べたのは単に
本発明の説明を完全なものにするためである。この動作
は第2図のブロック1で実行さする。
E0問題点を解決するための手段 本発明の1態様によnば、1パスの共通化及びコード移
動アルゴリズムを用いて、いくつかの関連した計算を共
通化又は移動する事を可能にするモジエールを有する最
適化コンパイラが提供さnる。
本発明の別の態様によnば、プログラムに関する「基底
」を計算するという概念が利用さnる。
プログラム中の全ての計算は基底要素によって表現でき
る。
本発明の別の態様によnば、UEXを計算するためにプ
ログラムの「基底」をいかにして使用し得るかが示さn
る。こnは大域的な共通化及びコード移動のアルゴリズ
ムを実行するのに必要である。ただ1回の共通化又はコ
ード移動アルゴリズムの、a用でいくつかの関連のある
計算が共通化又は移動できるように、UEXが、基底を
用いて計算さ几る。
本発明の別の態様によnば、DEXを計算するためにプ
ログラムの「基底」をいかにして使用できるかが示さ几
る。これは大域的な共通化及びコード移動のアルゴリズ
ムを実行するために必要である。DEXは、さらに本発
明の別の態様によ几ば、影響、を受けない計算の集合を
計算するためにプログラムの基底をいかにして使用でき
るかが示さnる。こ几は大域的な共通化及びコード移動
のアルゴリズムを実行するために必要である。影響を受
けない計算の集合は、基底を用いて、1パスの共通化又
はコード移動アルゴリズムによりいくつかの関連した計
算を共通化又は移動する事を可能にするような方式で計
算さ几る。
さらに本発明の別の態様によ几ば、キル(kill )
集合をいかにして計算するかが示さnる。こ几は各基底
項目毎に定義さ几、基底項目の値に依存する非基底計算
から成る。UEX、DEX及び影響を受けない式は、キ
ル集合を用いて最も容易に計算さnる。
また本発明の別の態様によ几ば、冗長なコードを除去す
る目的で基本ブロック中の計算を調べながら、利用可能
な計算の集合を伝搬させるためにキル集合を使用する方
法が示さ几る。
本発明の一態様の方法は、下記のステップを含む、大域
的な共通部分式の削除及びコード移動を行なうために最
適化コンパイラの最適化フェーズ中に使用さ几る方法で
ある。即ち、 中間言語プログラムに関する基底を決定する;各計算が
依存している基底項目を決定する;各基底項目に関する
キル集合を決定する;以前に決定さnた基底及びキル集
合の情報を用いて各基本ブロック毎にIJEX、DEX
及びTHRLJを決定する; UEX、DEX及びTHRUからAVA I L及びl
N5ERTを計算する; 上記ステップにより示さ几る位置に適轟なコードを挿入
する;そして AVA I L集合を用いて冗長なコードを除去する。
F、実施例 本発明は、UEX、DEX及び/又はT HRUに関す
るより大きな集合を認識し、アルゴリズムの1回の適用
により大量のコードを共通化又は除去する事を可能にす
る機構を提供する。
本発明の流n図(例えば第1図)は、はぼそ几だけでわ
かるようになっている。第2図は従来周知のコンパイラ
に関する非常に高レベルの流n図である。ブロック1.
2.4及び5は周知のステップである。ブロック3はコ
ード最適化であり、本発明が適用さnるコンパイラの活
動のフェーズである。
第3図はそのような最適化コンパイラに関する最適化フ
ェーズの流11図である。ブロック1.3及び4で行な
わ几る動作は従来周知である。ブロック2は本発明が適
用さ几る最適化コンパイラの領域である。このブロック
は第1図に詳細に示さnている。
第1図はコンパイラの大域的な共通化及びコード移動に
関する流n図である。明細書中で以前に述べたように、
この全体的な目的はコンパイラ設計において周知である
。以下その動作について説明する。
ブロック4.5.6及び7は、以前に述べたように最適
化コンパイラの技術において一般に知らnているもので
ある。
以下本発明の実施例の方法に必要な諸ステップを、参照
の便宜のために、基本的に表形式で示す。
1、各基本ブロックを調べ、その基本ブロック内で以前
に定義さnる事なしにオペランドとして使用さ几ている
項目を見つける。全基本ブロック上のそのような項目の
集まりは、そのプログラムに関する基底と呼ばnる。例
えば、表1のコード断片に関して、A及びBは基底に属
する。
簡単に言えば、非「基底」項目は、(基本ブロック内で
)以前に定義さ几たことのあるものである0 基本ブロックは、最初の命令を経て外部から入る事しか
できないような命令の集合である。
最後の命令を除く基本ブロック中の各命令は正確に1つ
の後続命令を有しており、その後続命令は基本ブロック
中にある。こfLは直線的コードとも呼ばれる。
2、各非基底項目の計算に関して、そ几が依存している
基底項目の部分集合を決定する。こt″L、は下記の再
帰的手続きによって決定することができる。
計算のオペランドの集合に関して、各非基底オペランド
を、そのオペランドが依存している基底項目によって置
き換える。
このようにして、全ての計算は、その計算に関する命令
中に陽に現几でいるオペランドに対するものとしてでな
く、基底項目の関数とみなす事ができる。
3、 次に上記ステップで形成さ几た集合を用いて、各
基底項目に依存する非基底項目の集まりを見つける事が
必要である。基底の各メンバーに関して、そ几に依存す
る非基底項目は、その基底要素のキル集合と呼ば几る。
もしある基底要素が(再計算さnることによって)その
値を変化させたならば、そのキル集合の全てのメンバー
はその後に再計算さnる場合に異なった値を受は取る事
に注意さ几たい。例えば表I中のコード断片の場合、A
及びBは基底項目であり、A及びBに関するキル集合は
下記の通りである。
kill(A)=(R100、R102)kill(B
)=(RIOI、R102)4 各基本ブロックに関す
るDEX、UEX及びTHRUは次のようにして形成で
きる。
a、DEX及びUEXを全集合に初期設定する。
THRUを、全ての興味のある計算の集合に初期設定す
る。いずnかの命令が調べらnる前は、どの基底項目も
計算されたとはみなさ几ず、従ってそnらに依存するど
の計算も消去さ几たものと判定さ几ていない。次のステ
ップで、基底項目が計算さfる時、再計算さ几た基底項
目のキル果合がDEX、及びTHRUから除去さ几る。
b、実行順序に従って基本ブロック中の命令を調査する
。出会ったあらゆる非基底計算をDEXに付加する。出
会ったあらゆる非基底計算を、もしそ几がTHRLJ中
にも存在するならば、UEXに付加する。基底項目が計
算さnる毎に、基底項目のキル集合の要素でもあるメン
バーを、DEX及びTHRUから除去する。
c、fJEXを計算するためのもう1つの方法は基本ブ
ロック中の命令を逆順に調査する事である。出会ったあ
らゆる非基底計算をUEXに付加する。基底項目が計算
さnるたびに、基底項目のキル集合の要素でもあるメン
バーをUEXから除去する。当業者にとって、UEXを
計算するための上記の2つの方法が等価な事を証明する
のは容易であろう。
5、参考文献中にあるようなアルゴリズムを適用した結
果として、基本ブロック中にコードを挿入する時、下記
の事柄を守るように注意し々けnばならない。即ち、挿
入さnるべき計算XがオペランドYを有し且つYの計算
もまたその基本ブロック中に挿入さnるならば、そのオ
ペランドYの計算を最初に挿入しなけnば々らない。
本発明の方式を用いなけnば、そのような条件は生じ得
ないであろう。というのは基本ブロック中のXに先行す
るYは、Xを上向きに露出させないからである。挿入さ
nるべき計算の組は順序付けら几ていないので、こ几を
守る事は、順序付けが必要な時に、挿入さ几る計算に対
して順序付けを与えるのに役立つ。
6、  DEX、UEX及びTHRLJから導かnfc
利用可能な計算の組(AVAIL)を用いる時、基本ブ
ロックの各命令を実行順序で調査する。
もし計算がAVAIL中にあnは、そ几は冗長なものと
して捨てる事ができる。もし計算がAVA I L中に
なけ几ば、 a、もし命令が非基底項目を計算するならば、その非基
底項目を、利用可能な計算の集合AVA I Lに付加
する。
b、もし命令が基底項目を計算するならば、現在AVA
ILの要素でもある、基底項目のキル集合の要素を、A
VA I Lから除去する。
下記の例は、本発明を比較的長いコードのリストに対し
て使用した場合を説明している。この例は、基底項目の
キル集合の識別と編集が、UEX、DEX及びTHRU
の形成に伴なって起きる事を示している。またこの例は
、本発明を用いなけnば、どのようにしてUEX、DE
X及びTHRUが生じるかも説明している。
具体例 次のプログラムは、本発明を説明するためのサンプルP
L/lプログラムである。
1 1test:proc; 2 1dcl  i fixed bin:3   1
dcl   (j、k)  fixed  bin  
external;4 1dcl a(10) fix
ed bin;5  ldo i = 1 to 10
;6 1  a(i) = j十に; 7  1   end; 8   1return; 9  1end; PL/1プログラムの各行の左側の数字は、単に識別の
ためのものである。コード生成の後に、我々のコンパイ
ラは下記のコードを生成した。中間言語リスト中で、左
側の数字は、ソース・コードのどの行が中間言語テキス
トのその行を生じさせたかを示している。コードの理解
を助けるために中間言語で使わnている命令を説明する
。RETはサブプログラムからの戻りを示している。L
HA及び5THAは、各々メモリからの半ワード・ロー
ド及びメモリへの半ワード記憶である。LRは右側のオ
ペランドの内容を左側のオペランドの内容ヘコビーする
( 1cfLIti Load Registerの二
−モニツクである)。BFは偽の時に分岐する(Bra
nch on False )命令である。こ几は、最
初のオペランドによって特定さ几るレジスタ中のピット
がゼロであnば最後のオペランドで特定さnるラベルに
制御の流nを移させる。調べらnるべきビットは第2の
オペランドによって与えらnる。
例えば、CI命令に続(’BP命令は、R100の内容
が10よりも犬きぐなけ几はラベル%3に制御を移させ
る。他のオペレーション・コードハ当業者には明らかで
あろう。中間言語の表記において、左側のオペランドは
、示された動作を行なった結果である。
基本ブロック1 1    ST    rl18./、5TATIC(
r15)I    MRrill、rl18 5    Ll    r98.1 5   5THA  r98.I(r15)5    
LRrloo、r98 基本ブロック2 6%3: 6    LHA   rloo、I(r15)6  
  SI    r106.rloo、16    M
PY   r109.r106,26    L   
  rill、/、5TATIC(r15)6    
L     rl12.、J(rill)6    L
HA   rl14.J(rl12)6    L  
   rl13.、K(rill)6    LHA 
  rl15.K(rl13)6     A    
  rl16.rl14.rl156   5THA 
 r116.A(r15.r109)5     AI
     rlol、rloO,155THA   r
lol、I(r15)5     LRrloo、rl
ol 5     CI     r102.rloo、10
5    BF    r102,27/gt、%3基
本ブロック3 9    RET   TEST 上記ステップ1に従って、基底が下記の通りに決定さn
る。
■ /、 5TAT I C 0J 、に ステップ2に従って、各非基底項目毎に下記の依存関係
が見い出さnる。
R100I、R15 RIOI  I、R15 R102I、R15 R106t、R15 R1091,R15 Rlll  R15,R118,/、5TATICR1
12R15,R118,/、5TATIC,、JR11
3R15,R118,/、5TATIC,、KR114
R15,R118,/、5TATIC,、J、JR11
5R15,R118,/、5TATIC,、に、KR1
16R15,R118,/、5TATIC,、J、、K
J  、に ステップ3を実行すると、基底項目毎に下記のキル集合
が得ら几る。
基底      キル集合 1(15R100,R101,R102,R106゜R
111、R112、al 13 、 R1l 4 。
R115,R116 R118R111,R112,R113,R114゜R
115、R116 /、5TATICR111,R112,R113,R1
14゜R115、R116 J    R112,R114,R116J    R
114、R116 、K     R113,R115,R116K   
             R115,R116次にス
テップ4によって、基本フ゛ロック毎に集合DEX、t
JEχ及びT)(RtJが決定さnib。
基本ブロック1: DEX(1)  R98,R100,R11lLIEX
(1)  R98 THRtJ (1)全集合 基本ブロック2: DEX(2)  R100,R102,R11l、R1
12゜R113,R114,R115,R116UEX
(2)  R100,R101,R106,R109゜
R111,R112,FL113.R114゜R115
、R116 THRU(2)  R98 基本ブロック3: DEX(3)  全集合 UEX(3)  全集合 THRU(3)R98,R100,Rlol、R106
゜R109,R111,R112,R113゜R114
,R115,R116 ステップ5に示したアルゴリズムに従って、集合AVA
 I L及びlN5ERT、並びに補助的集合GDX 
、 GtJX 、 PAX 、 CI E及ヒCI X
カ下記の通りに計算される。
基本ブロック1: GDX(1)    R98,R100,R11lGU
X(1)’   R98 FAX(1)    empty 5etCIE(1)
    empty 5etCIX(1)    R1
00,R111,R112,R113゜)1114.R
115,R116 INSERT(1)l(112,R113,R114,
R115゜AVA I L (L )  全集合 基本ブロック2: GDX(2)    R98,)tloo、R102,
RHI。
R112,R113,R114,R115゜GLIX(
2)    R100,R101,R106,R109
゜R11l、R112,R113,R114゜R115
,R116 FAX(2)    R98,R100,R102,R
11l。
R112,R113,R114,R115゜CIE(2
)    R100,R111,R112,R113゜
R114,R115,R116 CIX(2)    全集合 lN5ERT(2)  全集合 AVAIL(2)  R100,FLlll、R112
,R113・)(114,R115,1(116 基本ブロック3: GDX(3)    R98,R100,R102,R
11l。
R112,R113,R114,R115゜GUX(3
)    全集合 FAX(3)    R98,R100,R102,R
11l。
R112,R113,R114,R115゜CIE(3
)    全集合 CIX(3)    全集合 lN5ER,T(3)  全集合 AVAIL(3)  全集合 ステップ5で述べたようなコード挿入及びステップ6で
述べたよう々冗長なコードの削除を行なう事によって、
下記のプログラムが得らルる。(識別番号9999の付
いた行はコード挿入によって生じた行である。プログラ
ムの変化を見るためにこの中間コード・プログラムを前
記のプログラムと比較さnたい。
基本ブロック1: IST    rl18./、5TATIC(r15)
I  LRrLll、rl18 5  LI    r98,1 5 5THA  r98.I(r15)5  LRrl
oo、r98 9999  L    rl12.、J(rill)9
999  L    rl13.、K(rill)99
99  LHA   rl14.J(rl12)999
9  LHA   rl15.K(rl13)9999
  A     r116.rl14.r115基本ブ
基ック2: 6%3: 6    SI    r106.rloo、16  
  MPY   r109.r106,26  5TH
A  r116.A(r15.r109)5    A
I    rlOL、rloo、R55THA  rl
ol、I(r15)5    LRrloo、rlol 5    CI    r102.rloo、105 
   BF     r102.27/gt 、%3基
本ブロック3: 9    RET   TEST 本発明の利点を見るために、基底及びキル集合の概念を
用いずに共通化及びコード移動のアルゴリズムを適用し
た場合を考察する。この時DEX、UEX及びTHRU
は次のように決定さ扛る。
基本ブロック1: DEX(1)   R98,R100,R11lUEX
(1)   R9B THRtJ (1)  空集合 基本ブロック2: DEX(2)   R100,R102,R11l、R
112゜R1・13.R114,R115,R116t
JEX(2)   R100,R11lTHRU(2)
  R98 基本ブロック3: DEX(3)   空集合 UEX(3)   空集合 THRLJ(3)  R98,)tloo、)LIOI
、R106゜R109,R111,R112,R113
,R114゜R115,R11に の結果として、R100及びR111を計算するための
命令しかコード移動の候補にならない。
プログラムは次のように変換さ几る。
基本ブロック1: I   ST    rl18./、5TATIC(r
15)I   MRrill、rl18 5    LI    r98.1 5   5THA  r98.I(r15)5    
LRrLOo、r98 基本基ロック2: 6%3: 6    SI    r106.rloo、16  
  MPY   r109.r106,26    L
    rl12.、J(rill)6    LHA
   rl14.J(rl12)6    L    
 rl13.、K(rill)6    LHA   
rl15.K(rl13)6    A    r11
6.rl14.rl156    5THA、  r1
16.A(r15.r109)5    AI    
 rlol、rloo、15    5THA   r
lol、I(r15)5     LRrloo、rl
ol 5     CI     r102.rloo、10
5    BF     r102,27/gt 、%
3基本ブロック3: 9    RET   TEST 5つの命令がループ内に残っている事に注意さnたい。
共通化及びコード移動のアルゴリズムの1回の適用で本
発明の手続きにより得らnるのと同じ結果を本発明を用
いずに得ようとすると、共通化及びコード移動の処理を
3回余分に適用する・必要がちる。
次に示すのは、UEX、DEX及びTHRUリストの使
用についての短かい数学的説明である。
より具体的には、第1図に示した手続きにより最終的々
出力を得る時のAVA I L及びlN5ERTリスト
の機能並びにその使用を説明する。
各基本ブロックB毎に、UEX、DEX及びTHRUか
ら、下記の計算の集合を決定する必要がある。
AVAIL(B)   基本ブロックBに入った時にそ
の結果が有効な計算の集合。
lN5ERT(B)  他の計算を冗長なものにするた
めに、基本ブロックBの終り に実際に挿入さ几る計算の集合。
コード移動は、賢明なコード挿 入及びコード除去によって実際 に行なわnる。
前記の参考文献は、UEX、DEX及びTHRUからA
VAIL及びlN5ERTを計算する尼めのいくつかの
方法を与えている。またコードを移動させる時を決定す
るためのいくつかの異なった基準が存在する。いくつか
の異なった視点を得るために前記の参考文献の全てを調
べる事を読者にお勧めする。本発明を自給自足式にする
ために、AVA、IL及びlN5ERTを計算するため
のMore!及びRenvoise の方法を下記に示
す。彼らの方法の正当性については彼らの論文を読む事
を読者にお勤めする。
AVAIL及びlN5ERTを計算するために、各基本
ブロック毎に5つの補助的な計算集合が導入さnる。
GUX (B )   大域的に上方に露出さfた計算
こnらの計算は、もし基本ブロック Bの最初に実行さ几たならば、その 計算があるべき場所(必ずしも基本 ブロックBの中ではない)で実行さ nた時に与えるのと同じ結果を与え る。
GDX(B)   大域的に下方に露出さ几た計算。
こnらの計算は、もし基本ブロック Bの最後で実行さ几たならば、以前 の制御フローに無関係に、以前に実 行さnた時と同じ結果を与える。
FAX(B)   部分的に利用可能な計算。こ几らの
計算が実行さn、そこで得ら几た 結果が基本ブロックBの始めに計算 を行なう事によって得らnたのと同 じになるような少なくとも1つの制 御フロー経路が存在する。
CIX(B)   基本ブロックBの出口に挿入する事
が可能で、且つその挿入により、 基本ブロックBを出るあらゆる制御 フロー経路に涜って同じ命令を冗長 にする事を保証する命令。
CIE(X)   基本ブロックBの入口に挿入する事
が可能で、且つその挿入により、 基本ブロックBに入るあらゆる制御 フロー経路に沼ってその同じ命令を 冗長にする事を保証する命令。
こnらの計算の集合を定義する式は次の通りである。
GUX(B)=UEX(B)U(n   GUX(S)
)sg muccesaor(B) nTHR[J(B)         (1)FAX(
B)=   LJ    (DEX(P)LJ PAX
(P)Pt pred@cessor(B) nTHRLI(P))        (3)CIE(
B)=GUX(B)n (UEX(B)LJ CIX(
B)nTHRU(B))n (PAX(B)Ll(TH
RU(B)−UEX(B)))n(P))      
          (5)INSERT(B)=PI
X(B)−GDX(B)−(PIE(B)nTHRU(
B))    (6)AVAIL(B)=PIE(B)
/’I UEX(B)    (7)と几らの方程式を
解くための1つの方法は、GUX (B )及びFAX
(B)を全ての基本ブロックBに関して空集合に初期設
定し、GDX(B)を入口基本ブロックを除く全ての基
本ブロックに関して全ての計算の集合に初期設定し、G
DX(入口基本ブロック)は空集合に初期設定する事で
ある。(入口基本ブロックは、最初にプログラムに制御
が渡った時に実行さnるコードを表わす。)方程式(1
) 、 (2)及び(3)ハ、どの基本ブロックに関す
る集合も再計算により変化しなく々るまで、全ての基本
ブロックに関して反復してGUX(B)、GDX(B)
及びPAX(B)を再計算する事によって解かnる。
全ての基本ブロックBに関してGUX(B)、GDX(
B)及びFAX (B )を計算した後、次に方程式(
4)及び(5)を同時に解く。PIE(B)及びPIX
(B)を、2つの例外を除き、全ての式に初期設定する
。PIE(入口ブロック)及びP IX(出口ブロック
)は空集合に初期設定する。次に、どの基本ブロックに
関する集合も再計算により変化しなくなるまで、全ての
基本ブロックBに関して式(4)及び(5)からPIX
(B)及びPIF(B)の両者を反復して再計算する。
゛  最後に、UEX(B)及びTH)−LU(B)、
並びKGDX(B)、PIX(B)及びP I E (
B)の計算結果を用いて式(6)及び(7)から直接的
にlN5ERT(B)及びAVAIL(B)が計算でき
る。
【図面の簡単な説明】
第1図は大域的な共通部分式の削除及びコード移動の方
法を示す流n図、 第2図は最適化コンパイラの機能を示す流n図、第3図
は最適化コンパイラの最適化フェーズの機能を示す流n
図である。 出願人   インターナ9ヨカル・ビジネス・マンーン
ズーコーボレーンヨンli図 第2図

Claims (1)

    【特許請求の範囲】
  1. 基本ブロックが識別された、プログラムの中間言語表現
    に対して、大域的な共通部分式の削除及びコード移動を
    行なう最適化コンパイラであつて、各基本ブロックにお
    いて、上記各基本ブロック内で以前に定義されていない
    オペランドより成る基底項目を個別に識別する手段を有
    する最適化コンパイラ。
JP60174441A 1984-08-13 1985-08-09 コード最適化方法 Expired - Lifetime JPH0695311B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US640283 1984-08-13
US06/640,283 US4656583A (en) 1984-08-13 1984-08-13 Method for improving global common subexpression elimination and code motion in an optimizing compiler

Publications (2)

Publication Number Publication Date
JPS6149242A true JPS6149242A (ja) 1986-03-11
JPH0695311B2 JPH0695311B2 (ja) 1994-11-24

Family

ID=24567618

Family Applications (1)

Application Number Title Priority Date Filing Date
JP60174441A Expired - Lifetime JPH0695311B2 (ja) 1984-08-13 1985-08-09 コード最適化方法

Country Status (4)

Country Link
US (1) US4656583A (ja)
EP (1) EP0171631B1 (ja)
JP (1) JPH0695311B2 (ja)
DE (1) DE3586374T2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6365532A (ja) * 1986-09-05 1988-03-24 Fujitsu Ltd 共通アセンブラ命令列の削除方式
JPH025139A (ja) * 1988-02-01 1990-01-10 Internatl Business Mach Corp <Ibm> シミユレーシヨン方法
JPH02238528A (ja) * 1988-12-06 1990-09-20 American Teleph & Telegr Co <Att> コンピュータ・プログラムの第一バージョン処理方法

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
JPS6325733A (ja) * 1986-07-18 1988-02-03 Hitachi Ltd コンパイラ処理方式
JP2539385B2 (ja) * 1986-08-08 1996-10-02 株式会社日立製作所 情報処理装置
US4860203A (en) * 1986-09-17 1989-08-22 International Business Machines Corporation Apparatus and method for extracting documentation text from a source code program
US4814976C1 (en) * 1986-12-23 2002-06-04 Mips Tech Inc Risc computer with unaligned reference handling and method for the same
US4965724A (en) * 1987-03-05 1990-10-23 Oki Electric Industry Co., Ltd. Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program
US5237688A (en) * 1987-11-18 1993-08-17 International Business Machines Corporation Software packaging structure having hierarchical replaceable units
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
US5202995A (en) * 1989-10-12 1993-04-13 International Business Machines Corporation Method for removing invariant branches from instruction loops of a computer program
JPH03150636A (ja) 1989-11-08 1991-06-27 Matsushita Electric Ind Co Ltd コンパイル方法
CA2010067C (en) * 1990-02-14 1993-10-26 Steven Murray Hoxey Reducing pipeline delays in compilers by code hoisting
IL100987A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Method and device for encoding
US5327561A (en) * 1991-09-20 1994-07-05 International Business Machines Corporation System and method for solving monotone information propagation problems
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
US5469572A (en) * 1992-12-01 1995-11-21 Taylor; James M. Post compile optimizer for linkable object code
JP2755154B2 (ja) * 1994-02-23 1998-05-20 日本電気株式会社 プログラム変換処理装置およびプログラム変換処理方法
US5664191A (en) * 1994-06-30 1997-09-02 Microsoft Corporation Method and system for improving the locality of memory references during execution of a computer program
US5537620A (en) * 1994-09-16 1996-07-16 International Business Machines Corporation Redundant load elimination on optimizing compilers
US6397380B1 (en) * 1994-10-21 2002-05-28 International Business Machines Corporation Computer-program compilers comprising a program augmentation capability
US6202203B1 (en) * 1995-12-06 2001-03-13 International Business Machines Corporation Method of, system for, and computer program product for providing global value numbering
US5790867A (en) * 1996-01-02 1998-08-04 International Business Machines Corporation Compiler with extended redundant copy elimination
TW470915B (en) * 1996-03-12 2002-01-01 Matsushita Electric Ind Co Ltd Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US6049864A (en) * 1996-08-20 2000-04-11 Intel Corporation Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor
US6029005A (en) * 1997-04-01 2000-02-22 Intel Corporation Method for identifying partial redundancies in a new processor architecture
US6031994A (en) * 1997-04-01 2000-02-29 Intel Corporation Method for determining the set of variables that may be ambiguously defined at a point in a computer program
US6151704A (en) * 1997-04-01 2000-11-21 Intel Corporation Method for optimizing a loop in a computer program by speculatively removing loads from within the loop
US5991540A (en) * 1997-04-01 1999-11-23 Intel Corporation Method for identifying partial redundancies in existing processor architectures
US6381740B1 (en) 1997-09-16 2002-04-30 Microsoft Corporation Method and system for incrementally improving a program layout
US6158048A (en) * 1998-05-29 2000-12-05 Intel Corporation Method for eliminating common subexpressions from java byte codes
WO2000022522A1 (en) * 1998-10-13 2000-04-20 Motorola Inc. Method for detecting equivalent instruction sequences
US6446258B1 (en) * 1998-11-03 2002-09-03 Intle Corporation Interactive instruction scheduling and block ordering
JP3900485B2 (ja) * 2002-07-29 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
US7171438B2 (en) 2002-11-12 2007-01-30 Sandbridge Technologies, Inc. Method for recognition of full-word saturating addition and subtraction
EP1725933B1 (en) 2004-03-08 2008-11-26 Sandbridge Technologies, Inc. Method for recognition of full-word saturating addition and subtraction
US7493609B2 (en) * 2004-08-30 2009-02-17 International Business Machines Corporation Method and apparatus for automatic second-order predictive commoning
US7873952B2 (en) * 2006-03-09 2011-01-18 Oracle America, Inc. Code transformation to optimize fragments that implement constant loading
TWI442317B (zh) 2011-11-07 2014-06-21 Ind Tech Res Inst 可重新配置的指令編碼方法及處理器架構

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4571678A (en) * 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6365532A (ja) * 1986-09-05 1988-03-24 Fujitsu Ltd 共通アセンブラ命令列の削除方式
JPH025139A (ja) * 1988-02-01 1990-01-10 Internatl Business Mach Corp <Ibm> シミユレーシヨン方法
JPH0782441B2 (ja) * 1988-02-01 1995-09-06 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン シミユレーシヨン方法
JPH02238528A (ja) * 1988-12-06 1990-09-20 American Teleph & Telegr Co <Att> コンピュータ・プログラムの第一バージョン処理方法

Also Published As

Publication number Publication date
DE3586374T2 (de) 1993-03-04
EP0171631A2 (en) 1986-02-19
DE3586374D1 (de) 1992-08-27
US4656583A (en) 1987-04-07
EP0171631A3 (en) 1988-06-22
EP0171631B1 (en) 1992-07-22
JPH0695311B2 (ja) 1994-11-24

Similar Documents

Publication Publication Date Title
JPS6149242A (ja) コード最適化方法
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
JP4573189B2 (ja) プログラムコード変換方法
Rauchwerger et al. Run-time methods for parallelizing partially parallel loops
US5293631A (en) Analysis and optimization of array variables in compiler for instruction level parallel processor
EP0273130B1 (en) Reassociation process for code optimization
US4763255A (en) Method for generating short form instructions in an optimizing compiler
US6131189A (en) System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
JP3311462B2 (ja) コンパイル処理装置
US6925639B2 (en) Method and system for register allocation
Kennedy et al. Typed fusion with applications to parallel and sequential code generation
JPH03172936A (ja) 手順間レジスタ割付けを伴うコンピュータプログラムのコンパイル方法及び装置
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
Beer Concepts, design, and performance analysis of a parallel prolog machine
US7568193B2 (en) Method and apparatus for static single assignment form dead code elimination
JP3638171B2 (ja) 資源割付装置
EP0180077B1 (en) A data processing machine for compiling computer programs
Davie et al. CASE-a lazy version of an SECD machine with a flat environment
US6086632A (en) Register optimizing compiler using commutative operations
JPH02176938A (ja) 機械語命令最適化方式
US11593080B1 (en) Eliminating dead stores
Horwat A concurrent smalltalk compiler for the message-driven processor
Mantione et al. Hashed SSA Form: HSSA
JP2006202134A (ja) プロファイル情報収集方法および装置
JPH11149380A (ja) コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体