JPH0922362A - コンピュータシステムおよびコンピュータ制御方法 - Google Patents

コンピュータシステムおよびコンピュータ制御方法

Info

Publication number
JPH0922362A
JPH0922362A JP8099596A JP9959696A JPH0922362A JP H0922362 A JPH0922362 A JP H0922362A JP 8099596 A JP8099596 A JP 8099596A JP 9959696 A JP9959696 A JP 9959696A JP H0922362 A JPH0922362 A JP H0922362A
Authority
JP
Japan
Prior art keywords
variables
raw
block
code
program
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.)
Revoked
Application number
JP8099596A
Other languages
English (en)
Inventor
Daniel D Grove
ダニエル・ディ・グローヴ
David G Schwartz
デビッド・ジイ・シュワルツ
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH0922362A publication Critical patent/JPH0922362A/ja
Revoked 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/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 ターゲットコンピュータプログラムの一部内
の生変数集合をより正確にかつ効率的に確認して、コン
ピュータの中央演算処理装置内のメモリレジスタをより
正確に割り当てるための最適化コンパイラのプロセスお
よび方法 【解決手段】 本発明は、制御フローグラフにファイ関
数を付加するステップを含む、コンピュータプログラム
への静的単一割当て変換を実行するステップを含む。さ
らに、変数の使用を表す基本ブロックを、ファイ関数と
ファイ関数に収束する変数の定義との間で制御フローグ
ラフに付加する。次いで、逆方向データフロー解析を実
行して、生変数集合を確認する。ファイ関数の引数内の
変数は、このデータフロー解析ではそれらの変数の使用
として含まれない。データフロー解析は、生変数集合が
反復の間で一定になるまで反復して実行される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータシス
テムの最適化コンパイラの分野に関する。さらに具体的
には、最適化コンパイラのコード最適化パスの間に使用
可能な中央演算処理装置(「CPU」)レジスタに生変
数を割り振るための改善された方法および装置に関す
る。
【0002】
【従来の技術】コンピュータプログラムは、それらの実
行時間中およびメモリ使用中にできるだけ効率的である
ことが望ましい。このような要求から最適化コンパイラ
が開発されることになった。最適化コンパイラは、一般
に、コンパイラ前端とコンパイラ後端の間にあるコード
オプティマイザを含む。コードオプティマイザは、入力
として「中間コード」出力をコンパイラ前端によって受
け取り、このコードに基づいてそれに対して様々な変換
を実行するように動作し、その結果より迅速かつ効率的
な目的プログラムが得られる。変換されたコードは、コ
ンパイラ後端に送られ、次いでコンパイラ後端がそのコ
ードを関係する特定の機械(すなわちSPARC、X8
6、IBMなど)用に2進形に変換する。コードオプテ
ィマイザ自体は、できるだけ迅速かつメモリ効率が高い
必要がある。
【0003】例えば、たいていのコードオプティマイザ
は、ターゲットコンピュータ内の使用可能なCPUレジ
スタの使用を最適化しようと試みる。これは、グラフ作
成技法やフロー制御技法を使用して、目的プログラムの
「生変数集合」を決定し、かつプログラム実行中にレジ
スタからメモリ内に「スピル(spill)する」必要
のある変数の数が最小となるように、プログラムコード
を再配置することによって行われる。このレジスタ割当
てプロセスは、コンパイルされる普通の目的プログラム
では数百個の変数に基づいて動作する必要があり、また
科学の目的プログラムでは1万〜2万個もの変数が必要
となる。したがって、このような多数の目的プログラム
変数を処理する場合、コードオプティマイザ自体は、過
度に時間を浪費し、また最適化計算を正確に処理しなけ
れば、これらのレジスタ割当て計算を行う際にメモリを
過度に使用する恐れがある。
【0004】過去において、一般的には最適化コンパイ
ラを開発する試み、具体的にはそれ自体できるだけ効率
的に動作するコードオプティマイザ・モジュールを開発
する試みが行われてきた。最適化コンパイラと使用する
関連技法についての一般的な検討は、Alfred
V.Aho,Ravi SethiおよびJeffre
y D.Ulman著の教科書「Compilers:
Principles,Techniques and
Tools」Addison−WesleyPubl
ishing Co 1988,ISBN 0−201
−10088−6、特に9章および10章、513〜7
23頁に記載されている。コードオプティマイザの計算
時間を短縮するそのような試みの一つは、レジスタ割当
てプロセスにおいて「生変数集合」を計算する時間を短
縮することである。通常、制御フローグラフ中の生変数
の計算には、N2 回の計算とメモリ記憶空間が必要とな
る。ただし、Nは関係する変数の数である。計算時間を
短縮するこのような試みでは、関係する「生変数集合」
を見つけるための方法は、目的の静的単一割当て(「S
SA」)グラフを構成し、かつ「Φ関数」または制御フ
ローパスが結合し、かつ異なる値が融合する「Φノー
ド」と呼ばれる特殊な定義をグラフに挿入することを必
要とした。この方法では、変数の数の計算がN2 回から
N回にまで減少し、時間とメモリ使用量が大幅に減少し
た。この方法は、参照することにより本明細書の一部と
なる、Preston BriggsのPhD.論文
「Register Allocation via
Graph Coloring」Rice Unive
rsity、1992年4月に記載されている。しかし
ながら、Briggsのこの方法では、「生集合」中の
いくつかの変数が、実際には可能であっても、レジスタ
内で他の変数と共存できない(したがって変数がメモリ
内にスピルされる)と考えられるので、変数の「スピ
ル」が必要以上に多くなる。
【0005】
【発明が解決しようとする課題】本発明では、簡潔な方
法を使用して、これらの誤った変数のスピルを減らし、
それによってコードオプティマイザ自体の効率を低下さ
せることなく目的プログラムの効率を上げることを目的
としている。
【0006】本発明の目的、特徴および利点は、以下の
説明からさらに明らかとなろう。
【0007】
【課題を解決するための手段】本発明は、最適化コンパ
イラ内で機械レジスタを目的プログラムの「生変数集
合」に割り振る際に変数のスピルを最小限に抑えるため
の経済的、高性能、適応性のあるシステムおよび方法を
提供することによって、上述のシステムの欠点を克服す
る。好ましい実施態様では、変数定義ノードの直後に、
ダミーブロック(「使用」ブロックと呼ぶ)をフロー制
御グラフ中に挿入する。次いで、これらの「使用」ブロ
ックを検討し「Φ関数」は検討しないように、プロセス
を決定する「生変数集合」を変更する。この変更された
プロセスは、上述の誤った変数のスピルを最小限に抑え
る効果がある。
【0008】本発明の一態様では、目的プログラムの基
本ブロックの生変数の集合を決定し、かつ変数のスピル
が最小になるようにターゲットコンピュータアーキテク
チャのCPUレジスタを生変数の集合に割り振るように
構成された部分を有し、制御フローグラフの少なくとも
一部に、前記制御フローグラフ中の変数の使用を表すダ
ミーブロックをファイ関数ノードの前に挿入し、かつ前
記ダミーブロックを検討することによって生変数の集合
を決定する、コンパイラシステムで使用するためのコー
ドオプティマイザが提供される。
【0009】本発明の他の態様では、目的プログラムを
表す第2の中間コードを生成するコードオプティマイザ
が、前記プロセスに従って目的プログラムの生変数集合
を発生して、この生変数集合をターゲットコンピュータ
アーキテクチャの指定されたCPUレジスタにマップ
し、ファイ関数ノードの前に制御フローグラフ中の変数
の使用を表すダミーブロックを前記制御フローグラフの
少なくとも一部に挿入し、かつ前記ダミーブロックを検
討することによって生変数の集合を決定するコンパイラ
システムが提供される。
【0010】本発明の他の態様では、前記プロセスに従
って目的プログラムの生変数の集合を決定し、かつこの
生変数集合を指定されたCPUレジスタにマップするよ
うに構成され、制御フローグラフの少なくとも一部に、
前記制御フローグラフ中の変数の使用を表すダミーブロ
ックをファイ関数ノードの前に挿入し、かつ前記ダミー
ブロックを検討することによって生変数の集合を決定す
るコードオプティマイザを含むコンパイラシステムを含
む、固定した数のCPUレジスタを有するターゲットコ
ンピュータアーキテクチャ上で動作するように目的プロ
グラムをコンパイルする際に使用するコンピュータシス
テムが提供される。
【0011】本発明の他の態様では、制御フローグラフ
の少なくとも一部に、前記制御フローグラフ中の変数の
使用を表すダミーブロックをファイ関数ノードの前に挿
入し、かつ前記ダミーブロックを検討することによって
生変数の集合を決定する、コンパイラ中の生変数の集合
をCPUレジスタの指定された集合に割り振って、目的
プログラムの動作を最適化するコンピュータ制御方法が
提供される。
【0012】
【発明の実施の形態】表記法および用語以下の詳細な説
明は、主として、コンピュータメモリ内のデータビット
に基づく動作の手順および記号表現の形で表されてい
る。これらの手順の説明および表現は、データ処理技術
分野の熟練者が彼らの仕事の要旨を当分野の他の熟練者
に最も効率的に伝えるのに使用する手段である。
【0013】本願では、手順は、一般に、所望の結果が
得られる自己矛盾のないステップの連続だと考える。こ
れらのステップは物理的量の物理操作を要するものであ
る。通常、必ずしもそうではないが、これらの量は、記
憶、転送、組合せ、比較、それ以外の操作が可能な電気
信号や磁気信号の形をとる。主として通常の使用の理由
から、これらの信号をビット、値、要素、記号、文字、
用語、番号などと呼ぶと便利なことが多い。しかしなが
ら、これらおよび同様な用語はすべて、適切な物理量に
関連し、かつこれらの量に適用された便利な表示に過ぎ
ないことに留意されたい。
【0014】さらに、行われる操作は、加算や比較な
ど、通常人間のオペレータが行う頭脳操作に関連する用
語で呼ばれることが多い。人間のオペレータのそのよう
な能力は、本発明の一部を成す本願に記載されているど
の操作においても不要であり、たいていの場合望ましく
ない。すなわち、操作は機械操作である。本発明の操作
を実行する有用な機械は、汎用デジタルコンピュータま
たは同様な装置である。すべての場合に、コンピュータ
を操作する際の方法操作と計算の方法自体の相違に留意
されたい。本発明は、電気物理信号や他の物理信号(例
えば、磁気物理信号、化学物理信号)を処理して他の所
望の物理信号を発生させる際にコンピュータを操作する
方法ステップに関する。
【0015】本発明は、これらの操作を実行する装置に
も関する。この装置は、所要の目的用に特別に構成され
ている。すなわち、コンピュータ内に記憶されたコンピ
ュータプログラムによって選択的に活動化されたり再構
成される汎用コンピュータを含んでいる。本願に提示し
た手順は、本来、特定のコンピュータまたは他の装置に
関するものではない。特に、本願の教示に従って書き込
まれたプログラムとともに、様々な汎用機械が使用でき
る。すなわち、所要の方法ステップを実行するように、
より特殊化された装置を構成するほうが便利である。こ
れらの様々な機械に必要とされる構造は、以下の記述か
ら明らかとなろう。
【0016】最適化コンパイラのコード最適化パスの際
に使用可能な中央演算処理装置(「CPU」)レジスタ
に生変数を割り振り、変数のレジスタ「スピル」を最小
限に抑える装置および方法を開示する。以下の記述で
は、説明を目的として、本発明を完全に理解できるよう
に、特定の命令呼出し、モジュールなどを示してある。
しかしながら、本発明がこれらの特定の詳細なしに実行
できることは当業者には明らかであろう。他の例では、
本発明が不必要にあいまいにならないように、周知の回
路および装置をブロック図形式で示してある。同様に、
好ましい実施形態では、ユニプロセッサコンピュータシ
ステムおよびマルチプロセッサコンピュータシステムな
らびにソラリスオペレーティングシステムを利用する。
これらはすべてSun Microsystems,I
nc.が製造および販売している。しかしながら、本発
明は、他のコンピュータハードウェアシステム上でも実
施でき、また他の互換なオペレーティングシステムを使
用しても実施できる。
【0017】動作環境 本発明が使用される環境は、広く一般に普及したコンピ
ュータシステムを取り巻いている。そこでは、汎用コン
ピュータやワークステーションやパーソナルコンピュー
タが、クライアントサーバ配置内で様々な形式の通信リ
ンクを介して接続され、システムの他の部材によって実
行およびアクセスできるように、プログラムおよびデー
タが、多くはオブジェクトの形で、システムの様々な部
材によって使用可能となっている。汎用ワークステーシ
ョンコンピュータのいくつかの要素を図1に示す。図1
には、入出力(「I/O」)部2、中央演算処理装置
(「CPU」)3、およびメモリ部4を有するプロセッ
サ1が示されている。入出力(「I/O」)部2は、キ
ーボード5、ディスプレイ装置6、ディスク記憶装置
9、およびCD−ROM駆動装置7に接続される。CD
−ROM駆動装置7は、一般にプログラム10とデータ
を含むCD−ROM媒体8を読むことができる。図2
は、前端コンパイラ24、コードオプティマイザ26、
および後端コード生成器28を含む、代表的な最適化コ
ンパイラ20を示す。コンパイラの前端24は、ソース
言語22内に書き込まれたプログラムを入力として受け
取り、この言語に対して様々な字句、構文および意味の
解析を実行し、目的プログラムを表すコード32の中間
集合を出力する。この中間コード32は、迅速に動作す
る機械コードが得られるように中間コードを改善しよう
と試みるコードオプティマイザ26モジュールへの入力
として使用される。コードオプティマイザ26の中のい
くつかは些細なものであり、他のものは様々な計算を行
って、可能な最も効率的な目的プログラムをつくり出そ
うと試みる。この後者のタイプは、「最適化コンパイ
ラ」と呼ばれ、共通の部分式の削除、無意味なコードの
削除、一時変数の名前変更、および2つの独立した隣接
するステートメントの交換ならびにレジスタ割当てなど
のコード変換を含む。
【0018】図3は、最適化コンパイラ40の代表的な
編成を示す。中間コードのエントリ上に(42)制御フ
ローグラフを構成する(44)。この段階で、上述のコ
ード変換(共通の部分式の削除、無意味なコードの削
除、一時変数の名前変更、および2つの独立した隣接す
るステートメントの交換など)を行う(46)。命令の
スケジューリングまたは「パイプライニング」はこの時
点で行う(48)。次いで「レジスタ割当て」を実行し
(50)、変更されたコードを書き出して、コンパイラ
後端がそのコードをターゲット機械(すなわちSPAR
C,X86など)の2進言語に変換する(58)。出願
者の発明の焦点は、この「レジスタ割当て」50のプロ
セスである。
【0019】レジスタ割当てたいていの従来のコンピュ
ータの中央演算処理装置(CPU)は、一般に、迅速な
アクセスのために様々なデータが記憶される一組のレジ
スタを含む。コンピュータプログラムの実行中、プログ
ラム中に存在する変数の値は、普通、これらのレジスタ
内に記憶される。現代のCPUは、普通、32〜64個
の浮動小数点レジスタを所有する。多くの業務関連アプ
リケーションプログラムには十分であるが、科学用途に
関連するプログラムは、通常、使用可能なレジスタの数
よりもはるかに多くの変数を使用する。プログラム中に
存在する変数が多すぎる場合、過剰な変数の値は、普
通、キャッシュメモリ内に記憶されるか、あるいは従来
のランダムアクセスメモリ内に記憶される。キャッシュ
内かまたは従来のメモリ内に記憶される変数の値へのア
クセスには、CPUのレジスタに記憶される値にアクセ
スするよりもはるかに多くの時間がかかる。一般に、キ
ャッシュメモリ内に記憶される変数へのCPUアクセス
は、CPUレジスタにアクセスするのに要する時間より
も2倍から3倍遅い。従来のメモリへのアクセスは、普
通、CPUレジスタのアクセス時間よりも30倍から5
0倍遅い。したがって、プログラムは、変数の値が、C
PUレジスタではなくキャッシュ内か従来のメモリ内の
どちらかに記憶される場合、はるかに実行速度が遅くな
る傾向がある。キャッシュメモリ内か従来のメモリ内の
変数の記憶は、普通、スピルオーバーと呼ばれる。
【0020】スピルオーバーの影響を回避するまたは最
小限に抑えるために、相当の技術上の努力が向けられて
きた。例えば、プログラムの初めに使用される変数は、
そのプログラムの終わりには使用されないことが多い。
したがって、プログラムの初めにのみ使用される変数の
値を記憶するように割り当てられたCPUレジスタは、
第1の変数が使用されていない場合、プログラムの残部
の実行中、異なる変数への割当てによってより効率的に
使用される。プログラムの一部の実行中に使用される変
数は、プログラムのその部分が実行されている間、生と
呼ばれることが多い。プログラムの一部の実行中に生で
ある変数の集合、すなわちそのプログラムの部分の「生
変数集合」を決定することによって、CPUレジスタの
より効率的な割当てが可能になる。プログラムの各部分
が実行されると、そのプログラムの部分の生集合のメン
バーである変数のみをCPUレジスタ内に記憶する必要
がある。
【0021】一般に、グラフ色付けなど、高度な解析プ
ロセスが、プログラム変数の優先順位付けおよびレジス
タの割当てに使用される。これらの技法の例は、論文
「Register Allocation And
Spilling Via Graph Colori
ng」SIGPLAN Notices,17(6):
96−105頁、1982年6月、Proceedin
gs of the ACM SIGPLAN 198
2 Symposium on Compiler C
onstructionに提示されている。生変数の優
先順位付けおよびCPUレジスタの割当てに使用される
グラフ色付け技法の他の調査は、参照により本明細書の
一部となる、前出のPreston BriggsのP
hD.論文「Register Allocation
Via Graph Coloring」に開示され
ている。
【0022】様々なプログラム変数優先順位付けプロセ
スおよびレジスタの割当て技法が存在し、今日使用され
ているが、これらの技法はすべて、コンピュータプログ
ラムの様々な部分それぞれについて生変数集合を正確に
確認することに依拠する。現在、生変数集合を決定する
ための種々様々な技法が使用できる。しかし、残念なが
ら、これらの従来の技法は、計算が集中的で、不正確
か、またはその両方である。生変数集合を決定するため
の一つの技法の例は、定義使用連鎖を解析することであ
る。生変数集合を決定するための他の技法は、プログラ
ムの静的単一割当て(「SSA」)変換を解析すること
である。静的単一割当て変換技法は、通常、定義使用連
鎖の解析よりもいくつかの利点を有すると考えられる。
一般に、SSA変換は、解析中のコンピュータプログラ
ムのサイズが増大するにつれて、定義使用連鎖よりも遅
い速度でサイズが大きくなる傾向がある。したがって、
SSA変換に基づくプロセスを使用する最適化コンパイ
ラは、定義使用連鎖に関連するプロセスに依拠するもの
よりも、動作が迅速であり、メモリの消費が少なくなる
傾向がある。値番号付け、無意味なコードの削除、一定
の伝搬など、一般に最適化コンパイラによって実行され
るいくつかの他の機能も、定義使用連鎖タイプのプロセ
スに基づくプロセスの代わりにSSA変換を使用すれ
ば、より効率的に実行できる。しかし、残念ながら、S
SA変換は、SSA変換に基づく逆方向データフロー解
析を実行することによって生変数集合を決定する場合、
必ず不正確な結果が得られる。本発明は、SSA変換に
関連する方法論に基づく生変数集合を決定するより正確
かつ効率的な方法を提供する。
【0023】次に、図4を参照すると、代表的なレジス
タ割当て部70の編成が示されている。これは、図3の
ブロック50に対応する。レジスタ割当てルーチン72
へのエントリ上に「制御フローグラフ」技法を使用して
「干渉グラフ」を構成する(74)。「干渉グラフ」構
成について以下に詳細に説明する。「フローグラフ」
は、そのノードが目的プログラムの「基本ブロック」で
ある有向グラフである。「基本ブロック」は、制御の流
れがブロックの初めに入り、停止せずにまたは終わりを
除いて分岐する可能性なしにブロックの終わりから出る
一連の連続的なステートメントである。引き続き図4
で、干渉グラフを構成した(74)後、干渉グラフを色
付けする順序を選択する(78)。次いで、干渉グラフ
中で確認された「仮想レジスタ」を「物理レジスタ」集
合内にマップする試みを行う。このマッピングプロセス
中、レジスタ内にマップできない変数は、メモリに「ス
ピル」するためにフラグ付けする。仮想レジスタの確認
された集合のマッピングの「成功」は、二つの隣接する
ノードが、可能なすべてのノードの対について異なる色
(すなわち実際のレジスタ)を有するグラフとして定義
される。したがって、図4では、「成功」についてのテ
スト80を行い、成功82であれば、すべてのレジスタ
が変数の衝突なしに目的プログラムに割り振られると、
レジスタ割当て部ルーチンが励起される(84)。「成
功」でなければ(88)、前に「スピル」されるように
マーク付けされた変数をメモリに割り当てし(86)、
レジスタ割当てルーチンをスピルされた変数なしに再び
開始する(74)。この反復手順は上記で定義された
「成功」が達成されるまで続く。
【0024】次に、図5を参照すると、干渉グラフを構
成する(90)手順が記載されている。このルーチンへ
のエントリ92上で第1の基本ブロックが識別される
(94)。基本ブロックの終わりから始めて、ブロック
の終わりの生変数集合内にある仮想レジスタを決定する
(96)。基本ブロックの終わりからの各命令がブロッ
クの開始と逆方向に働く場合、命令と現在の生変数集合
とによって定義される各仮想レジスタ間にエッジを生成
する(98)。命令によって「定義」される各仮想レジ
スタを生変数集合から除去し(100)、命令によって
「使用」される各仮想レジスタを生変数集合に「付加」
する(102)。このプロセスをブロック内の各命令に
対して実行し、ブロック内に命令がなくなったら(10
6)、完了するブロックがまだあるか次のブロックを確
認する(110)。すべてのブロックをこのように処理
したら(112)、この目的手順についての干渉グラフ
が完了する。この段階で、干渉グラフを使用して、図4
を参照して上述したように、目的手順内の仮想レジスタ
をCPUの物理レジスタ内にマップする試みを行う。本
発明の好ましい実施形態では、各基本ブロック(図5の
ブロック96)の終わりに生変数の集合を見つけるプロ
セスにおける改善を確認する。この改善は、プログラム
のグラフ形式がSSA形式内にある場合、レジスタ割当
て/マッピングの故障を訂正するように設計される。そ
のような故障の結果、いくつかの変数が、その必要がな
い場合にメモリにスピルされることになる(したがって
目的プログラムの動作時間が遅くなる)。これらの改善
は、図6に示す各ブロックの生集合内の変数を見つける
プロセス120の文脈で述べられている。
【0025】次に、図6を参照すると、図5のブロック
96のプロセスの詳細な図が示されている。このプロセ
スへのエントリ122上でファイ関数(Φ関数)の引数
の使用を備えたダミーブロックが制御フローグラフに付
加される(124)。これらのダミーブロックを、Φ関
数ブロックの前に、Φ関数に結合されるエッジに付加す
る。これらのΦ関数について以下に詳細に説明する。次
に、各ブロックの初めの生集合を空集合に初期化する
(126)。この手順についての全体的な制御である大
域変化フラグをFALSEに初期化する(130)。次
いで、目的プログラムの終わりから始めて、目的プログ
ラム内の各基本ブロックに逆方向に働いてプロセスが、
ブロックの終わりで生である変数を見つける。このプロ
セスは、手順131内の最後のブロックを得ることによ
って始まる。目的ブロックの終わりに生である変数の集
合の現在の近似値を決定するために、プロセスは、制御
フローグラフ中の目的ブロックの継承者である各ブロッ
クの初めに変数の集合を結合する(132)。次いで、
基本ブロック内の最後の命令133からブロック内の最
初の命令まで働いて、命令がダミーブロック内で「使
用」であれば、「使用された」変数(仮想レジスタ)を
生集合に付加する(134)。命令が「Φ関数」であれ
ば、Φ関数によって定義される仮想レジスタを生集合か
ら引き(136)、Φ関数の引数は生集合には付加され
ない。他のすべての命令に対して、「定義」された仮想
レジスタを引き、仮想レジスタが「使用」されている場
合はそれを生集合に付加する(138)。処理されたば
かりの最新の命令がブロック内の第1の命令である場合
(144)、これは、ブロックが完了したことを意味す
る。生集合を検査して、このブロックの処理の初めから
変化したかどうかを確認する(146)。そうであれば
(148)、大域変化フラグをTRUEに設定し(15
0)、制御がブロック(154)に行く。生集合が変化
しなければ(152)、プロセスに対して基本ブロック
がまだあるかどうかに関して決定を行う(154)。そ
うであれば(156)、プロセスが他のブロック(16
0)を得て、このブロックについてのプロセスをブロッ
ク(132)から始めて繰り返す。現在のブロックに関
するこのプロセスループは、このブロックについての生
変数の集合の決定が行われる時点で生集合が変化しなく
なるまで(152)続く。基本ブロックがまだあれば
(156)、他のブロックのポインタを得て(16
0)、プロセスをブロック(132)から始めて繰り返
す。すべてのブロックが完了したら(158)、変化フ
ラグをテストし(162)、TRUEであれば(16
8)、プロセスをブロック(130)から再び繰り返
す。変化フラグがFalseであれば(164)、生集
合の決定は完了である(166)。次に、このプロセ
ス、および変数がどのように変化し、ダミーブロックと
Φ関数ブロックがどのように使用されるかのプロセスに
ついて以下に詳細に説明する。
【0026】図7を参照すると、コンピュータプログラ
ムの例示部分についての制御フローグラフ210が示さ
れている。本発明の一つの態様によれば、生変数の集合
は、この部分と、プログラムのあらゆる他の部分とにつ
いて決定される。これらの生変数集合を決定してしまえ
ば、CPUレジスタのより効率的な割当てを実行でき
る。例えば、図7に示されたプログラム部分の生変数集
合の内にない変数の値をプログラムのこの部分の実行中
にCPUレジスタ内に記憶する必要はない。生変数集合
を決定するために、最初に、図7の制御フローグラフ2
10中に示されたプログラム部分を基本ブロックの集合
に分割する。上述のように、基本ブロックは、基本ブロ
ック内のコードの各行が、そのブロック内のコードの第
1の行が実行される場合に必ず実行されるという特性を
有するコンピュータプログラム内のコードの一部であ
る。基本ブロックは、本質的にプログラムの自立部分で
あり、恐らく、ブロック内の最後の行を除いて、プログ
ラムの他の部分への分岐命令を含まない。
【0027】制御フローグラフ210によって示された
プログラム部分は、すでにブロック212、214、2
16、218、219、222および224など、基本
ブロックに区分されていると考えられる。説明の目的の
ために、図7に示される基本ブロック212〜224の
いくつかは、Xなどの変数の様々な例示的な定義および
用法を含む。したがって、基本ブロック212は、初期
定義X=Yを含み、一方、基本ブロック219は、式X
=X+1の変数の定義と用法の両方を含む。他の基本ブ
ロックは、様々なコンピュータプログラミング言語で一
般に使用される形式の例示的な分岐型命令を含むと考え
られる。例えば、基本ブロック214は、ブロック21
6〜222を含むループを形成すると考えられる。基本
ブロック214内の条件「while」文と、基本ブロ
ック216内の条件「if」文はどちらも、それらのそ
れぞれの条件付き引数に依存する制御フロー分岐を提供
する。当業者は、本願に開示したプロセスおよび装置
は、いくつか多い変数の定義および使用を含む基本ブロ
ックを有するソフトウェアプログラムにも応用できるこ
とを理解するであろう。図7に示される例示的なプログ
ラム部分に示される単一の変数は、単に例示を目的とす
るものであり、本発明を制限するものと考えるべきでは
ない。
【0028】本発明の一つの態様によれば、図7に示さ
れる基本ブロック212〜224についての生変数集合
を決定するプロセスにおける他のステップは、制御フロ
ーグラフ210に静的単一割当て(「SSA」)変換を
適用することである。この変換の一部として、新しい変
数を参照するために、変数の定義に関する各ステートメ
ントを名前変更する。図8には、図7に示される制御フ
ローグラフ210によって表される同じプログラム部分
についての制御フローグラフ220が示されている。図
8の制御フローグラフ220では、変数Xを含む各定義
文は、名前変更されている。例示の目的のために、変数
Xの用語を保有しているが、変換によって付与される新
しい変数名を参照するために、下付きの番号を付加して
ある。したがって、例えば、基本ブロック212内の定
義X=Yは、X1=Yに名前変更される。同様に、基本
ブロック219内のステートメントX=X+1は、X4
=X2+1に名前変更される。
【0029】残りの変数とともに、特殊なファイ関数ス
テートメントもプログラム変換に付加される。これらの
ファイ関数は、同じ変数の二つまたはそれ以上の異なる
定義が制御フローグラフ中で収束する制御フローグラフ
220中に含まれる。ファイ関数は、変数の新しい「定
義」例であり、ファイ関数の引数は、ファイ関数に通じ
る変数の異なる定義を含む。例えば、基本ブロック21
4は、Xの定義中のそのような収束を表す。すなわち、
基本ブロック214で、ステートメント「while
(X<10)」内のXの定義は、基本ブロック212に
よって提供されるXの定義から得られるか、あるいは基
本ブロック222によって提供されるXの定義から得ら
れる。したがって、ファイ関数は、基本ブロック212
と214の間にある基本ブロック226として制御フロ
ーグラフ220中に挿入される。ファイ関数を付加する
ことによって与えられた変数Xの新しい定義例を表すた
めに、追加の添数付き変数「X2」を提供する。
【0030】ファイ関数の引数は、ファイ関数に導く変
数の異なる値から得られる。したがって、基本ブロック
226でのファイ関数の引数のうちの一つは、基本ブロ
ック212でのX1の定義から得られるX1である。しか
しながら、基本ブロック226でのファイ関数の引数の
他の部分は、基本ブロック222から得られる。図8か
ら分かるように、基本ブロック222も、変数Xの異な
る定義の収束を表す。すなわち、基本ブロック222で
のXの定義は、定義「X3 =10」による基本ブロック
218からか、定義「X4=X2+1」による基本ブロッ
ク219から得られる。したがって、図8に詳細に示す
ように、ファイ関数も、基本ブロック222の直前の基
本ブロック228に挿入され、新しい添数付き変数「X
5 」を備える。この新しい基本ブロック228内の添数
付き変数X5 は、基本ブロック226内のファイ関数の
引数の第2の最後の部分を提供する。ここで、基本ブロ
ック226内のファイ関数は、「X2 =〜(X1
5)」のように完全に表すことができる。また、基本
ブロック228でのファイ関数の引数は、基本ブロック
228で収束するXの異なる定義から、すなわち基本ブ
ロック218と219から得られる。したがって、基本
ブロック218内の定義X3 =10と、基本ブロック2
19内の定義X4=X2+1とは、基本ブロック228で
のファイ関数の引数を与え、したがってこれをX5 =Φ
(X3、X4)のように完全に表すことができる。
【0031】制御フローグラフ220にファイ関数を付
加すれば、図7の制御フローグラフ210によって表さ
れるプログラム部分の単一静的割当て変換は完全にな
る。しかしながら、この変換を使用して生変数集合を決
定する場合、やはり不正確な結果が得られ、実際に生で
ない生集合内の変数の数が過剰であることが分かってい
る。本発明の他の態様によれば、コンピュータプログラ
ムの単一静的割当て変換は、ファイ関数の引数内の添数
付き変数の「使用」を表す制御フローグラフ中に基本ブ
ロックを付加することによってさらに変更される。その
ような「使用」ブロックはそれぞれ、ファイ関数の引数
内で使用される変数のうちのただ一つの使用を含む。こ
れらの使用ブロックは、ファイ関数と、ファイ関数で制
御フローグラフ内に収束する変数の異なる定義との間で
制御フローグラフに付加される。
【0032】図9を参照すると、本発明による図8の制
御フローグラフ220に付加された使用ブロック23
3、234、236および238を含む制御フローグラ
フ230が示されている。例えば、ブロック228のフ
ァイ関数は、その引数内に変数X3とX4を有する。した
がって、使用ブロック233と234は、ブロック22
8のファイ関数と、それぞれブロック218と219で
の定義X3とX4との間で制御フローグラフ230に付加
される。したがって、変数X4の使用f(X4)を有する
ブロック233は、その引数内にX4 を有するブロック
228のファイ関数と、ブロック219での変数X4
(すなわちX4=X2+1)の定義との間で制御フローグ
ラフ230に付加される。同様に、変数X2の使用f
(X3)を有するブロック234は、(その引数内にさ
らにX3 を有する)ブロック228のファイ関数と、ブ
ロック218での変数X3(すなわちX3=10)の定義
との間で付加される。
【0033】ブロック226で制御フローグラフ220
内に他のファイ関数があるので、追加の使用ブロック2
36と238は、制御フローグラフ230に、ブロック
226のファイ関数とそのファイ関数の引数内の変数の
定義との間に付加される。変数X1の使用f(X1)を有
するブロック236は、ブロック226でのファイ関数
Φ(X1、X5)と、ブロック212での変数X1 の定義
との間に挿入される。同様に、変数X5の使用f(X5
を有するブロック238は、ブロック226のファイ関
数Φと、ブロック228での変数X5 の定義との間に挿
入される。
【0034】使用ブロック233〜238を付加すれ
ば、制御フローグラフ230上で逆方向データフロー解
析を実行して、グラフ中の基本ブロックのそれぞれにつ
いて生変数集合を決定できる。この解析は、反復プロセ
スとして実行することが好ましい。各反復では、プロセ
スは、基本ブロックの終わりで開始される。この解析を
実行する場合、基本ブロック内で使用される変数は、そ
のブロックについての生変数集合に付加される。しかし
ながら、変数が同じ基本ブロック内でその後定義される
場合、変数は、生集合から除去される。本発明の他の態
様によれば、ファイ関数の引数内で変数を使用しても、
その変数が生集合に付加されない。
【0035】図10Aには、逆方向データフロー解析の
第1の反復を行った後の、図9の制御フローグラフ中の
基本ブロック212〜238のそれぞれについての生変
数の集合が示されている。例えば、基本ブロック212
について考えてみると、変数Yは、Yが式X1 =Yに使
用されているので、基本ブロック212の生集合に付加
される。しかしながら、変数X1 は、基本ブロック21
2内で定義されているだけなので、基本ブロック212
の生集合には付加されない。同様に、基本ブロック21
9の生変数集合は、この変数がブロック219内で使用
されているのでX2 を含むが、この変数は基本ブロック
219内で定義されているだけなので、X4 は含まな
い。基本ブロック216、218および222は、これ
らのブロックはそれぞれ変数の使用を含まないので空の
生変数集合を有すると考えられる。基本ブロック22
6、228内の変数の唯一の使用は、ファイ関数の引数
内にあり、したがって本発明によれば無視される。した
がって、基本ブロック226および228の生変数集合
も空である。基本ブロック233〜238は、上述のよ
うに、様々な変数の使用を表すために制御フローグラフ
230に明確に付加された。これらの基本ブロックそれ
ぞれの生集合(図10Aに図示)は、関連する変数のそ
れらの明確な使用を反映する。制御フローグラフ230
中の残りの二つの基本ブロック、ブロック214と22
4は、それぞれ、図10Aに詳細に示されているよう
に、変数X2 の使用を含む。
【0036】本発明によれば、逆方向データフロー解析
のプロセスは、反復して実行することが好ましい。本発
明の逆方向データフロー解析の第2の反復では、考慮中
の基本ブロックの直後の基本ブロックの生変数集合も、
生変数集合解析で考慮される。これらの後続のブロック
は、通常、子ブロックと呼ばれ、子ブロックの直前の基
本ブロックは、通常親ブロックと呼ばれる。したがっ
て、子ブロックの生変数集合の結合も、プロセスの第2
の反復で親ブロックの生変数集合の決定に含まれる。さ
らに、この解析は、最後の基本ブロック、ブロック22
4で開始し、制御フローグラフを逆方式に進行し、図9
に示される制御フローグラフ230の第1の基本ブロッ
ク、ブロック212で終了することが好ましい。
【0037】図10Bには、本発明の逆方向データフロ
ー解析の第2の反復の後の、制御フローグラフ230中
の基本ブロック212〜238それぞれの生変数集合が
示されている。制御フローグラフ230の終わりの基本
ブロック224から始めて、このブロックの生集合は、
ブロック224に子ブロックがなくなったので、不変で
ある(X2 の使用のみを含んだままである)。基本ブロ
ック214の生変数集合も不変である。変数X2は、
「while」ステートメント(X2<10)の引数内
でこの変数を使用するので、プロセスの第1の反復の後
に、すでにブロック214の生変数集合内にある。X2
がすでにブロック214の生変数集合内にあるので、ブ
ロック214に対する子ブロックであるブロック224
の生集合内でこの変数を考慮することによって変化は生
じない。
【0038】図10Aと図10Bを比較すると、さら
に、明らかに異なる理由からではあるが、基本ブロック
226の生変数集合も不変であることが分かる。基本ブ
ロック214は、ブロック226の子ブロックである。
したがって、第2の反復で、基本ブロック216の生集
合内の変数X2 は、ブロック226の生変数を決定する
際に考慮される。したがって、変数X2 は基本ブロック
226の生変数に最初に付加されるが、その場合ブロッ
ク226もファイ関数の式X2 =Φ(X1、X5)中の変
数X2 の定義を含むので、その後除去される。
【0039】基本ブロック238についての考察では、
ブロック238の子ブロック226は、空の生変数集合
をまだ有しているように見えた。したがって、親ブロッ
ク238の生変数集合は不変である。しかしながら、基
本ブロック222の生変数集合は、プロセスのこの第2
の反復で変化する。第1の反復では、基本ブロック22
2は、空の生変数集合を有する。基本ブロック222の
子ブロックである基本ブロック238の生集合の付加に
より、変数X5 がブロック222の生集合に付加され
る。
【0040】基本ブロック238の生変数集合について
の考察も、本発明の逆方向データフロープロセスを例示
する際に役立つ。第1の反復では、ブロック228内で
使用される唯一の変数、変数X2およびX4は、ファイ関
数の引数であり、したがって無視される。変数X5 は、
ブロック228内で「定義」されるだけなので、これも
プロセスの第1の反復でブロック228の生変数集合に
付加されない。ブロック228の子ブロックである基本
ブロック222の生変数集合を付加すると、プロセスの
第2の反復で、変数X5 は、最初にブロック228の生
変数集合に付加されるが、その場合「使用」のために生
集合に最初に付加された変数は、基本ブロック内で「定
義」されなければ、次いで削除されるので、生集合から
除去される。データフロー解析は逆方向に実行されるの
で、基本ブロック228内の変数X5 の定義は、子ブロ
ック222の生変数集合を付加することによって行われ
る変数X5 の付加の後で起こる。引き続いて、基本ブロ
ック218の生変数集合は不変であり、プロセスの第2
の反復で空集合である。基本ブロック234の生変数集
合内の変数X2 は、最初にブロック218の生集合に付
加されるが、ブロック218内の変数X2を後で定義す
るために次いで除去される。変数X4も同様に(ブロッ
ク219の子ブロックであるブロック233の生集合内
にあるので)、最初に基本ブロック219の生集合に付
加されるが、ブロック219内の変数X4 を後で定義す
るために次いで除去される。
【0041】図10Aと図10Bに示される様々な基本
ブロックの生変数集合を比較すると、生変数集合の変化
は、基本ブロック216内と基本ブロック222内の両
方で起こることが分かる。上述のように、変数X5 は、
ブロック222の子ブロックであるブロック238の生
集合内の変数がブロック222の解析で考慮された場
合、ブロック222の生集合に付加された。同様に、プ
ロセスの第1の反復では、ブロック216内で使用され
る変数がないので、ブロック216の空集合が得られ
た。しかしながら、第2の反復では、ブロック216の
子ブロック(ブロック218および219)の生集合内
の変数を考慮した。ブロック218は空の生変数集合を
有するが、ブロック219の生変数集合は変数X2を含
む。
【0042】本発明の他の態様によれば、制御フローグ
ラフ中の基本ブロックそれぞれの生変数集合を決定する
ステップは、結果が不変になるまで反復して繰り返され
る。後の各反復では、子ブロックの生変数集合の結合
は、親ブロックの生集合を決定する際に再び考慮され
る。上記の例では、ブロック216およびブロック22
2の生変数集合は、第1の反復と第2の反復の間で変化
した。したがって、プロセスは、第3の反復で繰り返さ
れる。図10Cには、上記の逆方向データフロープロセ
スの第3の反復を実行した後の、制御フローグラフ23
0中の基本ブロック212〜238それぞれの生集合が
示されている。図10Bと図10Cを比較すると、基本
ブロック212〜238のうちのどのブロックについて
も第2の反復と第3の反復の間で変化する生変数集合は
ないことが分かる。したがって、生変数集合を決定する
プロセスは完了する。
【0043】プログラム中の基本ブロックの生変数集合
を決定すると、様々なレジスタ割当て技法および変数優
先順位付け技法を使用して、スピルオーバーを回避でき
る。上述のように、スピルオーバーは、プログラムの実
行中に操作する必要のある変数の数が、CPU内のレジ
スタの数を超えた場合に生じる。
【0044】レジスタ割当ての代わりの技法として、C
PUレジスタの数よりも少ないメンバーの生変数集合を
有するプログラム部分が最初に実行され、次いでCPU
レジスタの再割当てが続いて実行され、その後プログラ
ムの次の部分が実行されるようにプログラムの実行を分
割できる。したがって、本発明は、スピルオーバーを回
避し、かつターゲットコンピュータプログラムの実行の
速度を高めるより効率的なプロセスを提供する。グラフ
色付けを必要とするプロセスなど、変数優先順位付けプ
ロセスおよびレジスタ割当てプロセスの実行は、図1に
示されるコンピュータによって実行される。この例で
は、本発明のプロセスに従って決定される生変数集合
は、メモリ4内に記憶される。
【0045】当業者は、本発明の範囲から逸脱すること
なく、本願に開示した本発明の好ましい実施形態の様々
な修正および変更が可能であることを理解するであろ
う。したがって、本発明の範囲は、上記に述べた特定の
発明の実施形態に限定すべきではなく、以下に示す請求
項およびその同等物によってのみ規定すべきである。
【図面の簡単な説明】
【図1】 本発明が実施されるCPUと従来のメモリを
含む、コンピュータの一部を示す図である。
【図2】 コードオプティマイザの位置を示す代表的な
コンパイラを示す図である。
【図3】 コードオプティマイザの大規模編成を示す図
である。
【図4】 図3のレジスタ割当て部の編成を示す図であ
る。
【図5】 干渉グラフを構成する場合のステップを表す
図である。
【図6】 各ブロックの生集合内の変数を見つけるプロ
セスを示す図である。
【図7】 コンピュータプログラムの一部についての制
御フローグラフの一例を示す図である。
【図8】 単一静的割当て変換を適用した後の、図7に
示されるコンピュータプログラムの一部についての制御
フローグラフである。
【図9】 本発明のプロセスによる変換を実行した後
の、図7に示されるプログラム部分についての制御フロ
ーグラフである。
【図10】 図9の制御フローグラフによって表される
プログラム部分の様々な基本ブロックについての生変数
の集合を示すチャートである。
【符号の説明】
1 プロセッサ 2 入出力部 3 中央演算処理装置 4 メモリ部 5 キーボード 6 ディスプレイ装置 7 CD−ROM駆動装置 8 CD−ROM媒体 9 ディスク記憶装置 10 プログラム 20 最適化コンパイラ 24 前端コンパイラ 26 コードオプティマイザ 28 後端コード生成器
フロントページの続き (72)発明者 デビッド・ジイ・シュワルツ アメリカ合衆国 78212 テキサス州・サ ン アントニオ・イー オルモス ドライ ブ・501

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 中央演算処理装置(CPU)と、前記C
    PUに結合されたランダムアクセスメモリ(RAM)と
    を有し、固定した数のCPUレジスタを有するターゲッ
    トコンピュータアーキテクチャ上で動作するように目的
    プログラムをコンパイルする際に使用するコンピュータ
    システムにおいて、 前端コンパイラとコードオプティマイザと後端コード生
    成器とを有して前記コンピュータシステム内に常駐する
    コンパイラシステムを含み、 前記コードオプティマイザは目的プログラム中の基本ブ
    ロック用の生変数の集合を決定するように構成され、前
    記ターゲットコンピュータアーキテクチャ内の前記固定
    した数のCPUレジスタを、その固定した数のCPUレ
    ジスタのうちの一つのレジスタ内ではなくコンピュータ
    メモリ内に記憶する必要のある前記生変数の集合内の変
    数の数が最小となるように、前記生変数の集合に割り当
    てることができ、前記コードオプティマイザが、制御フ
    ローグラフの少なくとも一部に、前記制御フローグラフ
    中の変数の使用を表すダミーブロックをファイ関数ノー
    ドの前に挿入し、かつ前記ダミーブロックを考慮するこ
    とによって生変数の集合を決定するコンピュータシステ
    ム。
  2. 【請求項2】 複数のCPUレジスタを有するターゲッ
    トコンピュータアーキテクチャ上で動作するように目的
    プログラムをコンパイルするコンパイラシステムにおい
    て、 前記目的プログラムのソースコードを入力として受け取
    り、かつ対応する中間コード集合を出力するように構成
    された前端部分と、 前記前端部分に結合され、かつ前記中間コードの集合を
    入力として受け取りかつ第2の中間コードの集合を出力
    するように構成されたコードオプティマイザとを含み、
    前記第2の中間コードの集合が、前記ターゲットコンピ
    ュータアーキテクチャの前記複数のCPUレジスタを、
    前記複数のCPUレジスタ内ではなくコンピュータメモ
    リ内に記憶する必要のある前記生変数の集合内の変数の
    数が最小となるように、前記目的プログラム中の基本ブ
    ロックの生変数の集合に割り当てる前記目的プログラム
    用のコードを含み、前記コードオプティマイザが、制御
    フローグラフの少なくとも一部に、前記制御フローグラ
    フ中の変数の使用を表すダミーブロックをファイ関数ノ
    ードの前に挿入し、かつ前記ダミーブロックを考慮する
    ことによって生変数の集合を決定するコンパイラシステ
    ム。
  3. 【請求項3】 複数のCPUレジスタを有するターゲッ
    トコンピュータアーキテクチャ上で動作するように目的
    プログラムをコンパイルするコンパイラシステムで使用
    するためのコードオプティマイザにおいて、 前記目的プログラムの中間コード表現を入力として受け
    取るように構成された第1の部分と、 前記第1の部分に結合され、かつ前記目的プログラムの
    基本ブロックの生変数の集合を決定するように構成され
    た第2の部分と、 前記第2の部分に結合され、かつ前記ターゲットコンピ
    ュータアーキテクチャの前記複数のCPUレジスタを、
    前記複数のCPUレジスタ内ではなくコンピュータメモ
    リ内に記憶する必要のある前記生変数の集合内の変数の
    数が最小となるように、前記目的プログラムの基本ブロ
    ックの生変数の集合に割り当てるように構成された第3
    の部分とを含み、その第3の部分が、制御フローグラフ
    の少なくとも一部に、前記制御フローグラフ中の変数の
    使用を表すダミーブロックをファイ関数ノードの前に挿
    入し、かつ前記ダミーブロックを考慮することによって
    生変数の集合を決定するコードオプティマイザ。
  4. 【請求項4】 目的プログラム中の変数の生集合を、固
    定した数のCPUレジスタのうちの一つのレジスタ内で
    はなくコンピュータメモリ内に記憶する必要のある前記
    生変数の集合内の変数の数が最小となるように、ターゲ
    ットコンピュータアーキテクチャ内の前記固定した数の
    CPUレジスタに割り当てるコンピュータ制御方法にお
    いて、 前記目的プログラムの手順を表す干渉グラフを構成する
    ステップと、 前記目的プログラムの制御フローグラフにファイ関数を
    付加するステップを含む、前記目的プログラムの前記手
    順の静的単一割当て変換を実行するサブステップと、 制御フローグラフ中の変数の使用を表す使用ブロック
    を、ファイ関数と前記変数の定義を含むブロックとの間
    に挿入するサブステップと、 制御フローグラフの逆方向データフロー解析によって目
    的プログラム中の基本ブロックの変数の前記生集合を決
    定するサブステップと、 変数の生集合を固定した数のCPUレジスタにマップす
    るサブステップとによって目的プログラムの変数の生集
    合を決定するステップとを含む方法。
  5. 【請求項5】 固定した数のCPUレジスタを有するタ
    ーゲットコンピュータアーキテクチャ上で動作するよう
    にコンパイルされた目的プログラムの2進コードを最適
    化するコンピュータ制御方法において、 前記目的プログラムのソースコードを受け取り、かつ前
    記ターゲットコンピュータアーキテクチャ上で処理でき
    る前記目的プログラムを表す2進コードを出力するよう
    に構成され、前端部分とコードオプティマイザ分と後端
    コード生成器を含むコンパイラシステムを用意するステ
    ップと、 前記コンパイラシステムの前記前端部分から中間コード
    を受け取り、かつ前記目的プログラムを表す前記中間コ
    ード内の変数の生集合を前記ターゲットコンピュータア
    ーキテクチャ内の前記固定した数のCPUレジスタに、
    前記固定した数のCPUレジスタ内ではなくメモリ内に
    記憶しなければならない変数の前記生集合内の変数の数
    が最小となるように、割り当てるように構成された前記
    コンパイラシステムのコードオプティマイザを用意する
    ステップとを含み、前記目的プログラムを表す前記中間
    コード内の変数の生集合を前記固定した数のCPUレジ
    スタに割り当てる際に、 前記目的プログラムの手順を表す干渉グラフを構成し、 前記目的プログラムの制御フローグラフにファイ関数を
    付加するステップを含む、前記目的プログラムの前記手
    順の静的単一割当て変換を実行するサブステップと、 制御フローグラフ中の変数の使用を表す使用ブロック
    を、ファイ関数と前記変数の定義を含むブロックとの間
    に挿入するサブステップと制御フローグラフの逆方向デ
    ータフロー解析によって目的プログラム中の基本ブロッ
    クの変数の前記生集合を決定するサブステップとによっ
    て目的プログラムの変数の生集合を決定し、 変数の生集合を固定した数のCPUレジスタにマップ
    し、 前記固定した数のCPUレジスタ内ではなくメモリ内に
    記憶される必要のある変数の前記生集合内の変数の数が
    最小となるような、前記目的プログラム中の変数の前記
    生集合の、前記ターゲットコンピュータアーキテクチャ
    内の前記固定した数のCPUレジスタへの割当てを含
    む、前記目的プログラムの第2の中間コードバージョン
    を前記後端コード生成器に出力することによって実行さ
    れ、それによって前記目的プログラムの2進コードが最
    適化される方法。
  6. 【請求項6】 制御フローグラフの少なくとも一部に、
    前記制御フローグラフ中の変数の使用を表すダミーブロ
    ックをファイ関数ノードの前に挿入するステップと、 前記ダミーブロックを考慮することによって生変数の集
    合を決定するステップとを含む、目的プログラムの生変
    数の集合を決定するコンパイラのコードオプティマイザ
    分を改善するコンピュータ制御方法。
JP8099596A 1995-03-31 1996-03-29 コンピュータシステムおよびコンピュータ制御方法 Revoked JPH0922362A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/414,267 US5659754A (en) 1995-03-31 1995-03-31 Method and apparatus for an improved optimizing compiler
US08/414267 1995-03-31

Publications (1)

Publication Number Publication Date
JPH0922362A true JPH0922362A (ja) 1997-01-21

Family

ID=23640703

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8099596A Revoked JPH0922362A (ja) 1995-03-31 1996-03-29 コンピュータシステムおよびコンピュータ制御方法

Country Status (5)

Country Link
US (1) US5659754A (ja)
EP (1) EP0735468B1 (ja)
JP (1) JPH0922362A (ja)
CA (1) CA2172772A1 (ja)
DE (1) DE69622305T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009505227A (ja) * 2005-08-09 2009-02-05 エヌイーシー ラボラトリーズ アメリカ インク 順序システムのための離接イメージ計算

Families Citing this family (97)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3650649B2 (ja) * 1995-06-16 2005-05-25 松下電器産業株式会社 最適化装置
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
US5790859A (en) * 1995-12-21 1998-08-04 International Business Machines Corporation Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
US6135650A (en) * 1995-12-22 2000-10-24 Sun Microsystems, Inc. Method and system for wrapper routine optimization
US5790867A (en) * 1996-01-02 1998-08-04 International Business Machines Corporation Compiler with extended redundant copy elimination
US5901317A (en) * 1996-03-25 1999-05-04 Sun Microsystems, Inc. Method and system for register allocation using multiple interference graphs
US5768596A (en) * 1996-04-23 1998-06-16 Silicon Graphics, Inc. System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
US5946491A (en) * 1996-06-06 1999-08-31 International Business Machines Corporation Register allocation method and apparatus for gernerating spill code as a function of register pressure compared to dual thresholds
US5930510A (en) * 1996-11-19 1999-07-27 Sun Microsystems, Inc. Method and apparatus for an improved code optimizer for pipelined computers
US5937195A (en) * 1996-11-27 1999-08-10 Hewlett-Packard Co Global control flow treatment of predicated code
US5946492A (en) * 1997-02-19 1999-08-31 International Business Machines Corporation Compiler that reduces call stack size through identification of stackless variables
US6286135B1 (en) * 1997-03-26 2001-09-04 Hewlett-Packard Company Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
US6002879A (en) * 1997-04-01 1999-12-14 Intel Corporation Method for performing common subexpression elimination on a rack-N static single assignment language
US5991540A (en) * 1997-04-01 1999-11-23 Intel Corporation Method for identifying partial redundancies in existing processor architectures
US6016398A (en) * 1997-04-01 2000-01-18 Intel Corporation Method for using static single assignment to color out artificial register dependencies
US5999735A (en) * 1997-04-01 1999-12-07 Intel Corporation Method for constructing a static single assignment language accommodating complex symbolic memory references
US6101326A (en) * 1997-05-29 2000-08-08 Hewlett-Packard Company Method and apparatus for frame elimination for simple procedures with tail calls
US6026241A (en) * 1997-06-13 2000-02-15 Silicon Graphics, Inc. System, method, and computer program product for partial redundancy elimination based on static single assignment form during compilation
US5933644A (en) * 1997-06-18 1999-08-03 Sun Microsystems, Inc. Method and apparatus for conflict-based block reordering
US6009272A (en) * 1997-06-30 1999-12-28 Sun Microsystems, Inc. Register allocation via selective spilling
US6249910B1 (en) * 1998-05-04 2001-06-19 Hewlett-Packard Company Apparatus and method for incrementally update static single assignment form for cloned variable name definitions
US6102968A (en) * 1998-05-21 2000-08-15 Lucent Technologies Inc. Method for automatically closing open reactive systems
US6064820A (en) * 1998-05-27 2000-05-16 Hewlett-Packard Company Apparatus and method to incrementally update single static assignment (SSA) form
US6301704B1 (en) * 1998-06-16 2001-10-09 Silicon Graphics, Inc. Method, system, and computer program product for using static single assignment form as a program representation and a medium for performing global scalar optimization
US6151706A (en) * 1998-06-16 2000-11-21 Silicon Graphics, Inc. Method, system, and computer program product for extending sparse partial redundancy elimination to support speculative code motion within an optimizing compiler
US6128775A (en) * 1998-06-16 2000-10-03 Silicon Graphics, Incorporated Method, system, and computer program product for performing register promotion via load and store placement optimization within an optimizing compiler
US6182284B1 (en) * 1998-09-30 2001-01-30 Hewlett-Packard Company Method and system for eliminating phi instruction resource interferences and redundant copy instructions from static-single-assignment-form computer code
US6317876B1 (en) * 1999-06-08 2001-11-13 Hewlett-Packard Company Method and apparatus for determining a maximum number of live registers
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6481008B1 (en) * 1999-06-30 2002-11-12 Microsoft Corporation Instrumentation and optimization tools for heterogeneous programs
US6779114B1 (en) * 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
US6363523B1 (en) 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
US7100164B1 (en) * 2000-01-06 2006-08-29 Synopsys, Inc. Method and apparatus for converting a concurrent control flow graph into a sequential control flow graph
US6654952B1 (en) * 2000-02-03 2003-11-25 Sun Microsystems, Inc. Region based optimizations using data dependence graphs
US6687807B1 (en) 2000-04-18 2004-02-03 Sun Microystems, Inc. Method for apparatus for prefetching linked data structures
JP2001306332A (ja) * 2000-04-20 2001-11-02 Nec Corp 局所変数以外の記憶位置を用いるように拡張されたssa形式を使用して、過度のオーバーヘッドを避ける方法
US6725363B1 (en) 2000-07-31 2004-04-20 Sun Microsystems, Inc. Method for filtering instructions to get more precise event counts
US6675372B1 (en) 2000-10-31 2004-01-06 Sun Microsystems, Inc. Counting speculative and non-speculative events
US7086044B2 (en) * 2001-03-22 2006-08-01 International Business Machines Corporation Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
US20040015874A1 (en) * 2001-05-14 2004-01-22 David Ungar Method and apparatus for finding resource allocation errors in virtual machine compilers
JP3763518B2 (ja) * 2001-05-29 2006-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、そのコンパイル方法およびプログラム
US20030079210A1 (en) * 2001-10-19 2003-04-24 Peter Markstein Integrated register allocator in a compiler
US7278137B1 (en) 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US7181737B2 (en) * 2002-03-18 2007-02-20 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using static procedure return addresses
US7010783B2 (en) * 2002-03-18 2006-03-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using reduced dynamic memory allocation
US6996802B2 (en) 2002-03-18 2006-02-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using initialization order and calling order constraints
US7370321B2 (en) * 2002-11-14 2008-05-06 Microsoft Corporation Systems and methods to read, optimize, and verify byte codes for a multiplatform jit
US7281237B2 (en) * 2003-01-16 2007-10-09 Sun Microsystems, Inc. Run-time verification of annotated software code
US7389501B1 (en) * 2003-02-18 2008-06-17 Microsoft Corporation System and method for register allocation using SSA construction
US7536674B2 (en) * 2003-08-13 2009-05-19 Intel Corporation Method and system for configuring network processing software to exploit packet flow data locality
US7210135B2 (en) * 2003-08-26 2007-04-24 Microsoft Corporation Data flow analysis of transactional processes
US7353499B2 (en) 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US7424620B2 (en) * 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US7730459B2 (en) * 2003-09-30 2010-06-01 Intel Corporation Generating executable code based on code performance data
US7340732B2 (en) * 2003-11-26 2008-03-04 Sun Microsystems, Inc. Updating profile frequency for procedure inlining
US10109141B2 (en) 2003-12-24 2018-10-23 Intel Corporation Method and apparatus for establishing trust in smart card readers
US7568193B2 (en) * 2004-01-28 2009-07-28 Ati Technologies, Inc. Method and apparatus for static single assignment form dead code elimination
US7568191B2 (en) * 2004-01-30 2009-07-28 Ati Technologies, Inc. Method and apparatus for superword register value numbering
US7398520B2 (en) * 2004-06-07 2008-07-08 Microsoft Corporation Efficient construction of pruned SSA form
US7469404B2 (en) * 2004-06-30 2008-12-23 Intel Corporation Bank assignment for partitioned register banks
US7324106B1 (en) * 2004-07-27 2008-01-29 Nvidia Corporation Translation of register-combiner state into shader microcode
US7539983B2 (en) * 2005-01-14 2009-05-26 Microsoft Corporation Tool for processing software programs using modified live-ness definition
WO2006074576A1 (en) * 2005-01-14 2006-07-20 Intel Corporation Method and apparatus for generating execution equivalence information
US7681187B2 (en) * 2005-03-31 2010-03-16 Nvidia Corporation Method and apparatus for register allocation in presence of hardware constraints
US8359586B1 (en) 2007-08-20 2013-01-22 The Mathworks, Inc. Code generation
US8484611B2 (en) * 2007-10-15 2013-07-09 International Business Machines Corporation Method and system for simplified assembly of information processing applications
US8312426B2 (en) * 2008-01-07 2012-11-13 International Business Machines Corporation Method and system for simplified service composition in web environment
US8239828B2 (en) * 2008-01-08 2012-08-07 International Business Machines Corporation Method of recovering from software failures using replanning
US8245122B2 (en) * 2008-01-08 2012-08-14 International Business Machines Corporation Method and system for modeling user requests, applications and components used in dynamic application assembly
US8966465B2 (en) 2008-02-12 2015-02-24 Oracle International Corporation Customization creation and update for multi-layer XML customization
US8788542B2 (en) 2008-02-12 2014-07-22 Oracle International Corporation Customization syntax for multi-layer XML customization
US8875306B2 (en) 2008-02-12 2014-10-28 Oracle International Corporation Customization restrictions for multi-layer XML customization
US8640149B2 (en) 2008-03-26 2014-01-28 International Business Machines Corporation Method and apparatus for dynamic web service composition and invocation
US8949140B2 (en) 2008-04-21 2015-02-03 International Business Machines Corporation Method and system for dynamic software reconfiguration triggered by component- or system- initiated events
US8898624B2 (en) * 2008-05-05 2014-11-25 International Business Machines Corporation Method and apparatus for simplified assembly of parametric information processing applications
US8296748B2 (en) * 2008-07-24 2012-10-23 Intel Corporation Method and system for intermediate representation of source code
US8799319B2 (en) 2008-09-19 2014-08-05 Oracle International Corporation System and method for meta-data driven, semi-automated generation of web services based on existing applications
US8996658B2 (en) 2008-09-03 2015-03-31 Oracle International Corporation System and method for integration of browser-based thin client applications within desktop rich client architecture
US9122520B2 (en) 2008-09-17 2015-09-01 Oracle International Corporation Generic wait service: pausing a BPEL process
US8484630B2 (en) * 2008-12-23 2013-07-09 International Business Machines Corporation Code motion based on live ranges in an optimizing compiler
CA2684226A1 (en) * 2009-10-30 2011-04-30 Ibm Canada Limited - Ibm Canada Limitee Eleminating redundant operations for common properties using shared real registers
US8578343B2 (en) * 2010-01-15 2013-11-05 Oracle America, Inc. System and method for overflow detection using partial evaluations
US8656377B2 (en) * 2010-06-10 2014-02-18 Microsoft Corporation Tracking variable information in optimized code
US8954942B2 (en) * 2011-09-30 2015-02-10 Oracle International Corporation Optimizations using a BPEL compiler
US20130159122A1 (en) * 2011-12-15 2013-06-20 Microsoft Corporation Optimizer as an appstore service
US8910134B2 (en) * 2013-01-03 2014-12-09 Oracle International Corporation System for applying transformation to improve graph analysis
US9286032B2 (en) 2013-03-15 2016-03-15 International Business Machines Corporation Automated software composition
US9582255B1 (en) 2015-08-28 2017-02-28 International Business Machines Corporation Method of splitting register live ranges
US9971570B2 (en) 2015-12-15 2018-05-15 Oracle International Corporation Automated generation of memory consumption aware code
US10802806B1 (en) * 2019-03-29 2020-10-13 Advanced Micro Devices, Inc. Generating vectorized control flow using reconverging control flow graphs
GB202010839D0 (en) * 2020-07-14 2020-08-26 Graphcore Ltd Variable allocation
CN115268936B (zh) * 2022-09-27 2022-12-27 之江实验室 一种用于计算图编译的优化方法及装置
US12117979B1 (en) * 2023-08-01 2024-10-15 Sap Se Timestamp-based deletions for interdependent data objects

Family Cites Families (12)

* 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
US4763255A (en) * 1984-10-31 1988-08-09 International Business Machines Corporation Method for generating short form instructions in an optimizing compiler
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
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring
US5293631A (en) * 1991-08-06 1994-03-08 Hewlett-Packard Company Analysis and optimization of array variables in compiler for instruction level parallel processor
US5327561A (en) * 1991-09-20 1994-07-05 International Business Machines Corporation System and method for solving monotone information propagation problems
US5355494A (en) * 1991-12-12 1994-10-11 Thinking Machines Corporation Compiler for performing incremental live variable analysis for data-parallel programs
US5448737A (en) * 1992-03-17 1995-09-05 International Business Machines Corporation System and method for optimizing computer code using a compact data flow representation
US5418958A (en) * 1992-07-15 1995-05-23 Sun Microsystems, Inc. Register allocation by decomposing, re-connecting and coloring hierarchical program regions
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
US5367684A (en) * 1992-11-30 1994-11-22 Intel Corporation Register allocation using an improved register candidate usage matrix
JP3280449B2 (ja) * 1993-03-01 2002-05-13 富士通株式会社 コンパイル装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009505227A (ja) * 2005-08-09 2009-02-05 エヌイーシー ラボラトリーズ アメリカ インク 順序システムのための離接イメージ計算

Also Published As

Publication number Publication date
US5659754A (en) 1997-08-19
EP0735468B1 (en) 2002-07-17
EP0735468A2 (en) 1996-10-02
CA2172772A1 (en) 1996-10-01
EP0735468A3 (en) 1998-03-18
DE69622305T2 (de) 2003-03-13
DE69622305D1 (de) 2002-08-22

Similar Documents

Publication Publication Date Title
JPH0922362A (ja) コンピュータシステムおよびコンピュータ制御方法
US5293631A (en) Analysis and optimization of array variables in compiler for instruction level parallel processor
US5778212A (en) Interprocedural analysis user interface
US5978588A (en) Method and apparatus for profile-based code placement using a minimum cut set of the control flow graph
EP0428084B1 (en) Method and apparatus for compiling computer programs with interprocedural register allocation
Chow A portable machine-independent global optimizer--Design and measurements
US6078744A (en) Method and apparatus for improving compiler performance during subsequent compilations of a source program
US5812855A (en) System and method for constaint propagation cloning for unknown edges in IPA
US6832369B1 (en) Object oriented method and apparatus for class variable initialization
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
US20080082969A1 (en) Software Testing Technique Supporting Dynamic Data Structures
US5535394A (en) Methods for distinguishing dynamically allocated storage along different call paths and for providing a compact representation of alias analysis
US7254809B2 (en) Compilation of unified parallel C-language programs
JPH10269088A (ja) ポインタ変数のコンパイルを最適化する方法
JPH0731606B2 (ja) デジタルデータ処理システム用総称コード共用化装置及び方法
US20020166115A1 (en) System and method for computer program compilation using scalar register promotion and static single assignment representation
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
US5515535A (en) System and method for parallel variable optimization
US5999735A (en) Method for constructing a static single assignment language accommodating complex symbolic memory references
US6421824B1 (en) Method and apparatus for producing a sparse interference graph
US6139200A (en) Register resource allocation feedback
US6820253B1 (en) Method and system for interprocedural analysis with separate compilation
US7032215B2 (en) Method and system for type demotion of expressions and variables by bitwise constant propagation
US6721945B1 (en) Optimization of calls in programming languages using pointers for passing reference parameters
WO2006074576A1 (en) Method and apparatus for generating execution equivalence information

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060516

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060807

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060905

AA91 Notification that invitation to amend document was cancelled

Free format text: JAPANESE INTERMEDIATE CODE: A971091

Effective date: 20060926

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061010

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070110

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070306

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070525

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20070702

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20070720