JP3220055B2 - 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 - Google Patents
機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。Info
- Publication number
- JP3220055B2 JP3220055B2 JP19226297A JP19226297A JP3220055B2 JP 3220055 B2 JP3220055 B2 JP 3220055B2 JP 19226297 A JP19226297 A JP 19226297A JP 19226297 A JP19226297 A JP 19226297A JP 3220055 B2 JP3220055 B2 JP 3220055B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- memory access
- access
- unit
- resource
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
- G06F8/434—Pointers; Aliasing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
語またはアセンブリ言語に変換された命令列を最適化す
る最適化装置及び高級言語のソースプログラムを機械語
またはアセンブリ言語の命令列に変換するコンパイラ装
置に関する。
プログラムを読み込み、これを中間言語に変換した後に
行われる。最適化が行われると、コードサイズまたは実
行時間は相当レベルにまで改善される。ところが最適化
後に生成されたアセンブラ命令列からなるプログラム
(以下アセンブラプログラムという)、機械語命令列か
らなるプログラム(以下機械語プログラムという)であ
っても、冗長なコードが存在していたり、遅延を生じる
命令並び等が含まれている場合がある。
したい場合には、命令スケジューリング、冗長命令の削
除や複写伝播等の最適化をコンパイラが生成したアセン
ブラまたは機械語コードに対して行なう。アセンブラレ
ベル、機械語命令レベルに適用される最適化には、命令
スケジューリングと、同値集合を用いた冗長転送命令の
削除とがある(尚以降の説明は、アセンブラレベル最適
化に統一して行う。)。
ル最適化の第1従来技術として、命令スケジューリング
の従来技術について説明する。近年、マイクロプロセッ
サにおいてはパイプライン機構を導入し実行の高速化を
図ることが極一般的に行なわれている。パイプライン機
構を持つアーキテクチャは、パイプラインが完全に埋ま
り、空きがない場合に最大性能を発揮する。
が生じるかはパイプラインの構成に依存する。例えばI
F(命令フェッチ)、DEC(命令デコード)、EX
(実行)、MEM(メモリ操作)、WB(レジスタ書き
込み)の5つのステージを持つ5段パイプライン・シン
グルスカラマシンを用いる場合、このパイプライン構成
を持つアーキテクチャではメモリからロードした値を、
直後の命令で参照すること(以下、ロード―参照と呼
ぶ)は不可能であり、命令がこの順にならんでいる場合
にはパイプラインに空きが生じ、遅延時間が生じる。遅
延時間の発生を回避するには、このアーキテクチャのマ
シンの命令スケジューリングにおいてはロード―参照の
命令並びを分離する必要がある。ロード―参照の並びを
分離する目的を含めて、パイプラインアーキテクチャマ
シンをターゲットとしたコンパイラでは、パイプライン
機構の性能を十分に引き出すため命令スケジューリング
と呼ばれる最適化を行っている。
キテクチャに適合するよう命令の配置構造を再編成する
処理をいう。命令の配置構造とは、この命令の次にこの
命令を実行するという『命令間の前後関係』からなり、
その再編成とは、プログラム内の複数の命令のうち、そ
の一部の命令間の前後関係を入れ替えることをいう。ス
ケジューリングには、ターゲットマシンのパイプライン
構成を考慮してパイプラインハザードを回避するもの、
並列化ユニットに効率良く命令を供給するためのものの
二種類がある。パイプラインの埋まり方は命令の供給順
に依存するため、命令列を並べ替えることによりパイプ
ラインの性能を最大限に引き出すのである。
替えは慎重を期さねばならないという点である。これは
安易な前後関係の入れ替えは、アルゴリズムの正当性を
破壊してしまうからである。正当性の破壊を避けるに
は、プログラムにおける命令の前後関係を"不可侵なも
の"と、そうでないものとに分類せねばならない。"前後
関係の不可侵"とは、『この命令とこの命令との前後関
係は入れ替えてはならない』という意味である。"前後
関係の不可侵"を明示するためには、前後関係の不可侵
が要求される命令の並びを検出し、その並びにおける命
令間において有向リンクを形成する。
のに従来から形成されていた有向リンクには、定義−参
照間のリンク、参照−定義間のリンク、定義−定義間の
リンクがある。 ・定義−参照間のリンク 定義−参照間のリンクとは、ある資源を定義する命令
と、参照される命令との前後関係は不可侵である旨を明
示する有向リンクである。
てのデータフローが存在している。このレジスタD0を介
してのデータフローが存在するため、命令(1)(2)
の順序を入れ替えることは、データフローを崩すことを
意味する。そのため命令スケジューリングを行うにあた
っては、有向リンクによりある資源を定義する命令と、
参照される命令との前後関係は不可侵である旨を明示し
ておく。 ・参照−定義間のリンク 参照−定義間のリンクとは、ある資源を参照する命令
と、その資源を定義する命令との前後関係が不可侵であ
る旨を明示する有向リンクである。命令の並べ替えを行
うにあたって、定義−参照間のリンクに加えて、参照−
定義間のリンクがなぜ必要であるかを以下の(1)〜
(4)の命令列を用いて説明する。
スタD0を介してのデータフローが存在している。(3)
−(4)の命令列にも、レジスタD0を介してのデータフ
ローが存在している。レジスタD1、D2の格納値の初期値
が0であったとする。そしてこの(1)〜(4)の命令
列を並べ替えて、(1)−(3)−(2)−(4)の順
序にしたとする。この順序は、先に述べた定義−参照の
並びを維持したものであるが、この機械語プログラムの
実行によってレジスタD1に200が加算され、レジスタに2
00が加算されるので、機械語プログラムの意味が変わっ
てしまう。そのため(2)−(3)間においてレジスタ
D0に関しての依存関係を参照−定義間のリンクに保存し
ておき、(2)−(3)の前後関係が不可侵である旨を
明示しておく。 ・定義−定義間のリンク 定義−定義間のリンクとは、ある資源を定義する命令
と、その資源を再定義する命令との前後関係が不可侵で
ある旨を明示する有向リンクである。命令の並べ替えを
行うにあたって、定義−定義間のリンクがなぜ必要であ
るかを以下の(1)(2)(3)の命令列を用いて説明
する。
してのデータフローが存在している。そのため、(2)
(3)の命令は、定義−参照のリンクで結合される。ま
た(1)の命令列は、レジスタD0についての定義であ
る。この(1)〜(3)の命令列を並べ替えて、(2)
−(1)−(3)の順序にすると、この機械語プログラ
ムの実行によってレジスタD2に100が加算されるので、
機械語プログラムの意味が変わってしまう。このような
瑕疵ある並び替えを防ぐため、依存グラフでは、(1)
−(2)間においてレジスタD0に関して、定義−定義と
いった依存関係を定義−定義間のリンクに保存してお
き、瑕疵ある並べ替えを防いでいる。
プルプログラムを用いて説明する。従来のコンパイラの
構成図を図16に示す。例として図12(a)のプログ
ラムを処理する場合を考える。プログラムはまず解析部
81で入力、解析され中間コードに変換される。この時
点の中間コードを図12(b)に示す。次に資源割り付
け部82において変数がレジスタもしくはメモリに割り
付けられる。資源割り付け結果に基づいて得られたアセ
ンブラプログラムを図12(c)に示す。この例では変
数iがレジスタD0に、そして変数kがメモリ(SP、
0)に割り付けられたとしている。アセンブラ命令生成
部84は、この割り付け結果を用いて、アセンブラプロ
グラムを生成する。生成されたプログラムを図12
(c)に示す。図12(c)においてメモリからのロー
ド「MOV (SP,0),D1」の直後にロードした値の参照「add
D1,D1」が配置されており、この部分で遅延が生じる
(ロード―参照)。このコードは次に命令スケジューリ
ング部85に渡される。命令スケジューリング部85は
依存グラフ生成部86と命令並べ替え部87とから構成
される。命令スケジューリング部85に渡されたアセン
ブラ命令は、まず依存グラフ生成部86に渡され、アセ
ンブラ命令に対応した依存グラフが生成される。依存グ
ラフは命令間の資源の依存関係を表し、命令の実行順序
を規定している。依存グラフ中で命令A、B間が矢印
「A→B」で結ばれている場合には命令Bを実行する前
に命令Aが実行されていなければならないことを示す。
依存グラフ生成部86が生成した依存グラフを図12
(d)に示す。
印で示している。依存グラフを生成し終ると、依存グラ
フは命令並べ替え部87へ渡される。命令並べ替え部8
7では依存グラフに反しないよう、且つ、ターゲットマ
シンのパイプラインが可能な限り効率良く働くように命
令をヒューリスティックに並べ替える。命令並べ替え部
87で並べ替えられたアセンブラプログラムを図12
(e)に示す。図12(e)では図12(c)と比べて
ロード―参照命令間に「add 1,D0」が挿入され、ロード
命令とロードされた値を参照する命令が分離されており
遅延が解消されていることが分かる(図12(e)中の
○印)。命令並べ替えが済んだコードは最後にコード出
力部88に渡される。コード出力部88は受けとったコ
ードを機械語またはアセンブラプログラムとしてファイ
ル等に出力する。
ベルの最適化の第2従来技術として冗長転送命令の削除
について説明する。ここでいう『冗長転送命令』とは、
その命令の直前命令において同値関係が成立しているに
も拘らず、二度手間の転送を行っている転送命令を言
う。
されている資源と、転送命令の転送先にて指示されてい
る資源とが同じ保持値になっていることを示す。各命令
が有する同値関係は、同値集合を用いて表現される。同
値集合とは、同値関係が成立している全ての資源を表す
集合である。具体的には、レジスタ名及びメモリのアク
セス先アドレスを示すアドレス指定コードの集合を用い
て表現される。
最適化の過程を示す図である。図13(a)のプログラ
ム例に含まれている各命令の実行直前においてどのよう
な同値集合が成立しているかを図13(b)を示す。図
13(b)の第2行目の転送命令の実行直前における同
値集合は{(SP,4),D1}である。{(SP,4),D1}は、データレ
ジスタD1の保持値が(SP,4)に等しいことを示す。図13
(b)の第5行目の転送命令における同値集合は{(SP,
4),D1}{3,D0}である。{(SP,4),D1}は、データレジスタD
1の保持値が(SP,4)と等しいことを示し、{3,D0}は、デ
ータレジスタD0の値が即値3に等しいことを示す。
すべきは、第4行目終了時点から第5行目開始時点まで
の段階でアドレス(SP,4)とデータレジスタD1との間の同
値集合が既に成立しているにも拘らず、第5行目でアド
レス(SP,4)からデータレジスタD1への転送が行われてい
る点である。このような第5行目の転送命令を用いての
アドレス(SP,4)からデータレジスタD1への転送は冗長で
あるため、これを削除する。その結果が図13(c)で
ある。
センブラレベル及び機械語レベルの最適化方式では間接
アドレス指定型の定義命令の存在により多くの制約を受
けてしまうという問題点がある。その第1の制約とは、
従来の命令スケジューリングでは、間接アドレス指定型
の定義命令及び参照命令を跨いだ命令の移動が禁止され
てしまい、スケジューリングの自由度が奪われてしまう
ということである。間接アドレス指定型の命令を跨いだ
命令移動が禁止される理由は以下の通りである。即ち間
接アドレス指定型の定義命令は、そのコードからはどの
アドレスのメモリに値を書き込んでいるかが不明であ
る。もし間接アドレス指定型の命令の前後にメモリアク
セスする命令があれば、間接アドレス指定型の命令はそ
れらの命令と同一アドレスをアクセスしているかもしれ
ない。同一アドレスをアクセスしている可能性が僅かで
も存在するなら、間接アドレス指定型の命令を跨いだ最
適化は一切避けるべきだからである。
命令列を示す。図14(a)の例では第2行目に「mov
D0,(A0)」に示される間接アドレス指定によりメモリを
定義するメモリアクセス命令(メモリ定義命令ともい
う)が存在する。この命令で操作されるメモリ(A0)はア
ドレスレジスタA0の値によりどのアドレスになるかが決
定される。しかし図14(a)のプログラム例ではアド
レスレジスタA0にどのような値が保持されているかとい
う結論は出せない。このように間接アドレス指定型の定
義命令がどのアドレスに値を書き込んでいるかが不明な
場合は、間接アドレス指定型の定義命令以降の命令のう
ち、メモリアクセスを含むものとの前後関係が不可侵で
あると解釈せねばならない。
目、第4行目、第6行目、第7行目にスタック領域をア
クセスする命令が存在するが、第2行目の間接アドレス
指定型の定義命令はこれらと同アドレスに値を書き込ん
でいる可能性があるので、第2行目の間接アドレス指定
型の定義命令は、第3行目、第4行目、第6行目、第7
行目の命令との前後関係を不可侵と解釈するのである。
す。本依存グラフでは、前後関係が不可侵となる命令間
に有向リンクが形成されている。この有向リンクでは、
第2行目−第3行目間、第2−第4行目間、第2行目−
第6行目間、第2行目−第7行目間に有向リンクが形成
されている。このように一つの間接アドレス指定型の定
義命令と、4つもの命令との間に有向リンクが形成され
ると、命令の配置構造の入れ替えのための自由度が大き
く奪われてしまう。図14(a)の命令例では、第4行
目−第5行目にハザードが存在しているが、図14
(b)において形成されている有向リンクにより、命令
の配置構造が拘束されているので、ハザードを解消し得
ない。
長転送命令の削除では、間接アドレス指定型の定義命令
の前後において同値集合の廃棄が行われるので、冗長転
送命令が削除できない現象が表れてしまう。図15
(a)のプログラム例を最適化するにあたって同値集合
の解析を行った結果が図15(b)である。図15
(b)では、第5行目において同値集合の廃棄が行われ
ている。第5行目において同値集合の廃棄が行われたの
は、その直前の第4行目が間接アドレス指定型の定義命
令だからである。第4行目の間接アドレス指定型の定義
命令「mov D1,(A0)」におけるメモリ(A0)はレジスタA0の
値によりどのアドレスになるかが決定される。しかし図
15(a)のプログラム例ではアドレスレジスタA0にど
のような値が保持されているかという結論は出せない。
このように間接アドレス指定型の定義命令がどのアドレ
スに値を書き込んでいるかが不明な場合は、間接アドレ
ス指定型の定義命令以前に存在していた同値集合のう
ち、メモリアドレスを指示するものは廃棄せねばならな
い。
ジスタD1へと値を転送する転送命令であるが、アドレス
(SP,4)−データレジスタD1間の同値集合を示す同値集合
が第4行目の間接アドレス指定型の定義命令の存在のた
めに廃棄されたので第5行目の冗長転送命令が削除でき
ずに終わってしまう。本発明は上記問題点に鑑み、メモ
リの間接アクセスが存在することによるアセンブラレベ
ル最適化の効率低下を軽減できる最適化装置及びコンパ
イラを提供することを目的とする。
のは何であるかを考察し、これを解決するためにどのよ
うな点に着眼したかを講ずる。 {上記課題の底流にある現象}上記課題の底流にある現
象は、コンパイラによる間接アドレス指定型のメモリア
クセス命令の生成である。コンパイラが間接アドレス指
定型のメモリアクセス命令を生成する理由は、ソースプ
ログラムに含まれている別名アクセスの記述を忠実に翻
訳しようとするからである。
ムにおいてある変数名で宣言された数値の格納先が、形
態が異なる別変数を用いて指示されることをいう。例え
ば以下の文1〜3からなるプログラムにおいて変数名
『a』で宣言された数値の格納先が、ポインタ変数『*
p』を用いて指示される場合、変数名『a』を含む一文
は、別名アクセスの可能性を有することになる。 文1 a=10 文2 p=&a 文3 *p=20 本ソースプログラムにおいて文1では、変数名『a』で
宣言された格納箇所に数値『10』を格納する旨が記述さ
れている。続く文2では、数値『10』の格納箇所のアド
レス『&a』をポインタ変数『p』に複写する旨が記述さ
れている。この複写により別変数名を用いた上記格納箇
所のアクセスが可能となる。文3は、別変数名を用いた
上記格納箇所の定義である。即ちポインタ変数『*p』を
用いて、文『10』の格納箇所に数値『20』を書き込む旨
が規定されている。
場合、変数名aで宣言された数値の格納先は別の変数名*
pを用いてもアクセスされることになる。当該別名アク
セスの可能性を有するソースプログラムからアセンブラ
プログラムが生成されると、ソースプログラムにおいて
変数が有していた別名アクセスの可能性はアセンブラプ
ログラムへと継承されてしまう。
つのメモリが、絶対アドレス指定、アドレスレジスタを
用いた間接アドレス指定、スタックポインタSPを用いた
間接アドレス指定など様々な形態のコードを用いて表現
されることをいう。同じアクセス先を別名アクセスして
いるメモリアクセス命令を確実に検出するのは基本ブロ
ック間のデータフローを追跡する必要があり非常に困難
である。ある関数が別関数の呼び出しを含む場合には、
別名アクセスを行っているメモリアクセス命令の解析は
もはや現実的ではない。
眼したか}課題を解決するために本願が着眼したのは、
以下の、の二種類の性質を有するメモリアクセス命
令である。 そのアクセス先に対応する変数がユーザがコーディ
ングしたプログラム内に存在しないメモリアクセス命
令。
レスが他の関数により操作されず、且つその関数中でユ
ーザにより別名で操作されることがないメモリアクセス
命令。 に分類されるメモリアクセス命令には、アクセス先が
一時変数に対応するメモリアクセス命令、スピルアウト
命令、スピルイン命令がある。に分類されるメモリア
クセス命令には、アクセス先がアドレス参照を受けない
局所変数に対応するメモリアクセス命令がある。
数、スピルアウト命令、スピルイン命令について以下に
説明する。 ※局所変数 局所変数とは、関数内の一部若しくは全域をその有効範
囲とする変数である。それ故に、別の関数から操作され
ることはない。また局所変数が関数中でアドレス参照を
受けなければ、保持値の格納先が別変数にて操作される
こと(間接アクセスされること)もない。
メモリに割り付ける。当該メモリは、アドレス(SP,2)、
アドレス(SP,4)という間接アドレス指定のコードを用い
て表現される。アドレス(SP,2)、アドレス(SP,4)等のス
タック領域上のメモリは、スタックポインタ及びディス
プレースメントが異なれば、互いに別々の領域であるこ
とが保障される。ディスプレースメントの大きさは、局
所変数保持値の大きさに基づいて決定される。例えば、
局所変数の大きさが2バイトであるなら、ディスプレー
スメントは、2バイトの整数倍に決定される。これは、
スタック領域内で局所変数の保持値が重複したメモリ位
置に格納されてしまうことを防止するためである。 ※一時変数 一時変数とはコンパイラが演算の途中結果を保持するた
めに内部で一時的に生成する変数のことである。そのメ
モリ位置もコンパイラが決定するため、ユーザープログ
ラムには、当該メモリを操作するコードが存在しないと
いう性質を有する。 ※スピルアウト命令及スピルイン命令 スピルアウト命令とは、スピルとは資源割り付け時にレ
ジスタが不足した際に、レジスタに入っている有効な値
をメモリに退避するアセンブラ命令をいい、スピルイン
命令は、その値が必要になった時点でレジスタに値を復
帰するアセンブラ命令をいう。一般スピルにより退避す
るメモリ位置はコンパイラが決定するため、ユーザープ
ログラムには、当該メモリを操作するコードが存在しな
いという性質を有する。
令(1)、アドレスが明示的に参照されない局所変数から
生成されたメモリアクセス命令(2)、スピルアウト命令
(3)、スピルイン命令(4)に対しては、別名アクセスの可
能性が無いことは明らかであるから、アセンブラ命令に
含まれているメモリアクセス命令のうち、以上の(1)〜
(4)に対応するメモリをアクセス先にしているメモリア
クセス命令を解析し、それらのメモリアクセス命令に対
して、その旨を示すマークをメモリアクセス命令に付与
する。
セス命令に付与されたマークを参照しながら行う。この
ようにして最適化を行うと、間接アドレス指定型のメモ
リアクセス命令の存在に起因する制約が緩和され、実行
時間及びプログラムサイズの向上を図ることができる。
定型の定義命令(例えば、mov D1,(SP,4))について
は、本明細書において間接アドレス指定型の定義命令に
含まれないものとする。これは、一般にコンパイラが生
成するコードでは、スタックポインタは関数毎に固定さ
れた値が用いられるため、本明細書においてスタックポ
インタレジスタの値は固定されているものとしているか
らである。
イラの実施形態を図面を参照しながら説明する。図1
は、コンパイラの内部構成を示したブロック図である。
コンパイラは図1に示すように、解析部10と、資源割
り付け部11と、アセンブラコード生成部18と、アセ
ンブラ最適化部20と、コード出力部13とからなる。
また、メモリ上に割り付け資源情報14を保持する。ア
センブラ最適化部20はアセンブラレベルの最適化を行
う最適化装置であり、命令スケジューリング部12及び
別名アクセス性解析部19を備える。
高級言語ソースプログラムを読み込み、構文解析及び意
味解析を行なって内部表現(以下中間言語と称する)に
変換する。更にこの中間言語を最終生成コードサイズや
実行時間が小さくなるように最適化する場合もある(こ
れは中間コード最適化部と呼ばれる別ブロックとする事
が多い)。中間言語を生成する解析部10の処理は本発
明の主眼ではないので、その処理内容は省略する。高級
言語にて記述されたソースプログラムを図2(a)に示
し、解析部により中間言語状態に変換された中間言語プ
ログラム図2(b)を示す。簡単のために図2(b)以
降では図2(a)中の範囲a内に含まれているコードの
みを示す。ここでプログラムには局所変数として変数k
が含まれている。
グラム内の変数にどのマシン資源を割り付けるかを決定
する。この際、ソースプログラム文における各変数の宣
言文等を参照しながら、中間言語状態のプログラム内の
変数が、一時変数であるか、局所変数であるか、ポイン
タ変数であるかを勘案し、レジスタ、メモリのうち適切
なものを割り付ける。一時変数及び局所変数について
は、データレジスタ又はスタック領域上のメモリを割り
付け、ポインタ変数については、アドレスレジスタを割
り付ける。これらの変数については、各変数の生存区
間、使用頻度に基づいて優先度を決定し、優先度の高い
ものにレジスタを割り付け、低いものにメモリを割り付
ける。資源割り付け部11による資源割り付け結果を図
2(c)に示す。図2(b)における変数のうち、この
例では変数iがレジスタD0に割り付けられ、変数jが
レジスタD1に割り付けられ、変数kがメモリ(SP、
0)に割り付けられている。
付け部11による割り付け結果を参照して、中間言語状
態のプログラムからアセンブラ命令を生成する。また演
算命令を生成した際、レジスタに格納されていた数値を
一旦退避する必要が生じた場合は、アセンブラコード生
成部18はスピルアウト命令及びスピルイン命令を生成
する。
ブラコード生成部18がアセンブラ命令を生成した結果
を図2(d)に示す。図2(d)において留意すべき
は、k=k+1の演算を行なう際にレジスタが不足した
ので、レジスタD1の値をメモリ(SP,4)に退避するスピ
ルアウトコード「mov D1,(SP,4)」が生成され、演算が
終了した後でメモリ(SP,4)から復帰するスピルインコー
ド「mov (SP,4),D1」が生成されている点である。
ード生成部18により生成されたアセンブラ命令列内に
別名アクセスの可能性が潜在しているか否かを解析す
る。別名アクセスの可能性をどのような基準で判断する
かであるが本装置ではそのメモリアクセス命令のアクセ
ス先がユーザプログラムにより操作され得ないかを判断
材料にしている。アクセス先がユーザプログラムにより
操作され得ないメモリアクセス命令には、そのアクセス
先が一時変数に対応するもの、スピルイン・スピルアウ
ト命令、格納先アドレスが明示的に参照されてない局所
変数に対応するものがある。
ーザプログラムにより操作される場合なので、これらの
コード(アクセス先が一時変数に対応するメモリアクセ
ス命令、格納先アドレスが明示的に参照されてない局所
変数に対応するメモリアクセス命令、スピルイン・スピ
ルアウト命令)については、別名アクセスの可能性が潜
在していないと結論づけて良い。
命令、スピルイン命令が生成された際、これらスピルア
ウト命令、スピルイン命令が位置する行を示す行番号
と、これら命令のアクセス先を示すアドレス指定コード
とを割り付け資源情報14に格納する。このように行番
号及びアドレス指定コードが登録された命令には別名ア
クセスの可能性が潜在していない旨に解釈される。
セス先との対応関係を把握するかであるが、別名アクセ
ス性解析部19は判断の手掛かりに資源割り付け部11
が資源割り付け時に行った変数種別の分類結果を用いて
いる。アクセス先が一時変数に対応するメモリアクセス
命令、或は、アクセス先がアドレス参照を受けない局所
変数に対応するメモリアクセス命令を判定すると、これ
らのメモリアクセス命令の行番号と、これらのアクセス
先を示すアドレス指定コードとを割り付け資源情報14
に格納する。このように登録されたアドレス及びアドレ
ス指定コードは、この位置の命令には別名アクセスの可
能性が潜在していない旨に解釈される。
際の別名アクセス性解析部19の処理について図3
(a)を参照しながら説明する。第1行目の演算命令
『add 1,D0』はアクセス先がレジスタであるから、別名
アクセス性解析部19は別名アクセスの可能性が存在し
ないと解釈する。第2行目のメモリアクセス命令『mov
D0,(A0)』はアクセス先がメモリであり、そのアドレス
が間接アドレス指定により指定されていることから、別
名アクセスの可能性が存在すると解釈する。
(SP,4)』はメモリアドレス(SP,4)を定義するメモリアク
セス命令であり、スピルアウト命令である。そのため別
名アクセス性解析部19はそのメモリアクセス命令は別
名アクセスの可能性が潜在しないと解釈し、メモリアク
セス命令『mov D1,(SP,4)』の行番号を割り付け資源情
報14に登録することにより、メモリアクセス命令『mo
v D1,(SP,4)』に別名アクセスの可能性が存在しない旨
を割り付け資源情報14に反映する。
0),D1』はメモリアドレス(SP,0)からデータレジスタD1
へと保持値を転送するメモリアクセス命令である。この
際、別名アクセス性解析部19はアドレス(SP,0)がどの
変数に対応するかであるかを解析する。図2(c)の資
源割付結果によれば、アドレス(SP,0)は、一時変数kに
対応することがわかる。
ため、別名アクセス性解析部19はメモリアクセス命令
『mov (SP,0),D1』が別名アクセスの可能性が存在しな
いと解釈し、メモリアクセス命令『mov (SP,0),D1』の
行番号を割り付け資源情報14に登録することにより、
メモリアクセス命令『mov (SP,0),D1』に別名アクセス
の可能性が存在しない旨を割り付け資源情報14に反映
する。
スタを用いて演算を行う演算命令であるので、別名アク
セスの可能性解析の対象とはならない。第6行目のメモ
リアクセス命令『mov D1,(SP,0)』はデータレジスタD1
からメモリアドレス(SP,0)へと保持値を転送するメモリ
アクセス命令である。図2(c)の資源割付結果によれ
ば、アドレス(SP,0)は、一時変数kに対応することか
ら、別名アクセス性解析部19はメモリアクセス命令
『mov D1,(SP,0)』が別名アクセスの可能性が存在しな
いと解釈し、メモリアクセス命令『mov D1,(SP,0)』の
行番号を割り付け資源情報14に登録することにより、
メモリアクセス命令『mov D1,(SP,0)』に別名アクセス
の可能性が存在しない旨を割り付け資源情報14に反映
する。
4),D1』はメモリアドレス(SP,4)を参照するメモリアク
セス命令であり、スピルイン命令である。そのため別名
アクセス性解析部19はそのメモリアクセス命令は別名
アクセスの可能性が存在しないと解釈し、メモリアクセ
ス命令『mov (SP,4),D1』の行番号を割り付け資源情報
14に登録することにより、メモリアクセス命令『mov
(SP,4),D1』に別名アクセスの可能性が存在しない旨を
割り付け資源情報14に反映する。各行についての別名
アクセス可能性が解析された結果を図3(b)に示す。
ついて説明する。命令スケジューリング部12は依存グ
ラフ生成部15と命令並べ替え部16とから構成され
る。依存グラフ生成部15は、アセンブラコード生成部
18によるアセンブラ命令の生成後に起動され、アセン
ブラコード生成部18が生成したアセンブラ命令間に有
向リンクを形成することによりアセンブラ命令を依存グ
ラフ化する。
依存関係を示す有向リンクを形成する必要があるがここ
では簡単のため省略する。基本ブロック外の命令との依
存関係は例えば仮想基本ブロック開始命令、仮想基本ブ
ロック終了命令を想定することで容易に解析できる。依
存グラフ生成部15の処理内容を示すフロ−チャ−トを
図5に示す。
15はアセンブラコード生成部18が生成した割り付け
資源情報を取り込む。次にステップa2はステップa1
4と対になり、基本ブロック内の全ての命令について、
ステップa3〜ステップa14を繰り返す。ステップa
2では、基本ブロック内の命令を取り出して、これを対
象命令とする。
源が単一資源であるかを判定する。単一資源である場合
にはステップa4に移行する。ここで単一資源とは、対
象命令におけるアクセス先が明確に何れかの資源に対応
しており、別名アクセスされることがないものをいう。
対象命令が別名アクセスされることなくスタックポイン
タレジスタと、その保持値からの相対アドレスとにより
アクセス先が指定されており、スタックポインタレジス
タの不変動が保障されている場合、アクセス先のメモリ
が明確であるため、その対象命令のアクセス先は単一資
源となる。
命令であって、当該参照先資源を定義先としている命令
を検出する。このようにして検出された命令に対して有
向リンクを形成する。形成された有向リンクは、対象命
令が参照側に位置する定義―参照リンクとなる。なお、
参照先資源を定義している命令が基本ブロック内に存在
しない場合(基本ブロック外で定義されている場合)に
は基本ブロック先頭仮想命令にリンクを形成する。これ
は以下でも同様である。
資源であるかどうかを判定する。そうである場合にはス
テップa6に制御を移すステップa6では当該対象命令
以前のもっとも近い位置で当該単一資源を操作している
命令を検出し、検出された命令の定義先が当該単一資源
と同一であるかを判定する。同一である場合にはステッ
プa7へ、そうでない場合にはステップa8に移行す
る。
いる命令に対しリンクを形成する。このようにして形成
された有向リンクは、対象命令が\u後者の定義側\uとな
る定義―定義リンクである。ステップa8では、対象命
令以前であって、\u且つ最も近い位置で当該資源を定義
している命令までに\u位置する命令であって、対象命令
の定義先資源を参照している全ての命令を検出し、それ
らの命令への有向リンクを形成する。このようにして形
成された有向リンクは、対象命令が定義側となる参照―
定義リンクである。
り、対象命令が参照側となる定義−参照リンク、対象命
令が定義側となる定義−定義リンク及び参照−定義リン
クが形成された。ステップa3〜ステップa8の処理に
より形成されるのは、対象命令が含んでいる単一資源を
基点とした有向リンクである。その他の資源(間接アド
レスにより指定されたメモリや別名参照の可能性のある
メモリ)を基点にした有向リンクについては、ステップ
a9〜ステップa13において生成する。
リ参照が別名操作を受け得るメモリ参照であるかを判定
する。そうである場合はステップa10に移行する。ス
テップa10では、対象命令以前に位置するメモリアク
セス命令であって、その行番号が割り付け資源情報に記
述されているメモリアクセス命令を除く全てのメモリ定
義命令を検出し、検出したメモリ定義命令から対象命令
へと向かう定義−参照リンクを形成する。割り付け資源
情報14はステップa1で取り込まれたものであり、別
名アクセスの可能性が潜在していないことが別名アクセ
ス性解析部19により保障されている。
があるメモリアクセス命令と定義―参照依存関係を持つ
可能性があるメモリ定義命令のうち、一時変数、アドレ
ス参照を受けない局所変数、スピルアウト命令、スピル
イン命令に係る命令を除いたものに有向リンクが形成さ
れる。ステップa11では当該対象命令が別名アクセス
の可能性があるメモリを参照するかを判定する。そうで
ある場合はステップa12に移行する。
するメモリアクセス命令であって、行番号が割り付け資
源情報に登録されているメモリアクセス命令を除く全て
のメモリ定義命令を検出し、検出したメモリ定義命令か
ら対象命令へと向かう定義−定義リンクを形成する。ス
テップa13では、対象命令以前に位置するメモリアク
セス命令であって、行番号が割り付け資源情報に登録さ
れているメモリアクセス命令を除く全てのメモリ参照命
令を検出し、検出したメモリ参照命令から対象命令へと
向かう参照−定義リンクを形成する。
理によて形成された有向リンクからなる依存グラフは、
メモリアクセス命令前後の有向リンクの数が至って少な
い。図5のフロ−チャ−トにより有向リンクが形成され
る過程を具体的に説明する。図2(d)のアセンブラ命
令に対して図5のフロ−チャ−トの処理が行われた場合
に形成された有向リンクを図4(a)に示す。
令になった場合、基本ブロック先頭を示す基本ブロック
先頭仮想命令を作成し、当該命令から演算命令『add 1,
D0』へと向かう有向リンクが形成される。第2行目のメ
モリアクセス命令『mov D0,(A0)』が対象命令になった
場合、当該参照先資源データレジスタD0を定義先として
いる命令として演算命令『add 1,D0』が検出される。そ
して、検出された演算命令『add 1,D0』から対象命令で
あるメモリアクセス命令『mov D0,(A0)』へと向かう定
義-参照リンクg1が形成される。またメモリ(a0)に関し
て先頭仮想命令より有向リンクが形成される。
(SP,4)』が対象命令になった場合、対象命令以前には、
当該参照先資源データレジスタD1を定義先としている命
令が存在しないので、仮想先頭命令から当該命令に向か
う有向リンクが形成される。第4行目のメモリアクセス
命令『mov (SP,0),D1』が対象命令になった場合、対象
命令以前には、当該参照先資源アドレス(SP,0)を定義先
としている命令が存在しないので仮想先頭命令から当該
命令に向かう有向リンクが形成される。
命令になった場合、当該参照先資源を定義先としている
命令としてメモリアクセス命令『mov (SP,0),D1』が検
出される。検出されたメモリアクセス命令『mov (SP,
0),D1』から対象命令である演算命令『add D1,D1』へと
向かう定義-参照リンクg2が形成される。第6行目のメ
モリアクセス命令『mov D1,(SP,0)』が対象命令になっ
た場合、当該参照先資源を定義先としている命令として
演算命令『add D1,D1』が検出される。検出された演算
命令『add D1,D1』から対象命令であるメモリアクセス
命令『mov D1,(SP,0)』へと向かう定義-参照リンクg3が
形成される。
4),D1』が対象命令になった場合、当該参照先資源を定
義先としている命令として第3行目のメモリアクセス命
令『mov D1,(SP,4)』が検出される。検出された第3行
目のメモリアクセス命令『movD1,(SP,4)』から対象命令
であるメモリアクセス命令『mov (SP,4),D1』へと向か
う定義-参照リンクg4が形成される。また定義資源レジ
スタD1に関して参照-定義リンクがメモリアクセス命令
『mov D1,(SP,0)』から形成される。
生成部15より依存グラフ17を受けとり、これを実行
時間が短くなるように並べ替える。ここではターゲット
マシンのアーキテクチャとしてIF、DEC、EX、M
EM、WBの5段パイプラインアーキテクチャを仮定し
ているが、5段パイプラインアーキテクチャにおける実
行時間の短縮化は、命令の並びにより、ロード命令と、
ロードされた値を参照して演算を行う演算命令との間隔
を分離することにより実現される。
依存グラフは、間接アドレス指定型のメモリアクセス命
令前後の有向リンクの数が至って少ないので、並べ替え
の自由度は非常に高い。そのため、ロード命令と、演算
命令との間は高い確率で分離される。図2(d)に示し
たアセンブラプログラムは、第4行目及び第5行目にお
いて、アドレス(SP,0)の保持値をデータレジスタD1にロ
ードするメモリアクセス命令『mov (SP,0),D1』と、ロ
ードされた値を参照して演算を行う演算命令『add D1,D
1』とが密接していたが、命令スケジューリング部12
は、第4行目、第4行目の間隔を分離するためにスケジ
ューリングを行い、図4(b)の並びに並び替える。図
4(b)の命令列では、メモリアクセス命令『mov (SP,
0),D1』−演算命令『add D1,D1』間に、演算命令『add
1,D0』及びメモリアクセス命令『mov D0,(A0)』が挿入
され、ロード命令と、ロードされた値を参照して演算を
行う演算命令とが分離されている。5段パイプラインア
ーキテクチャが苦手とする2命令の並びが解消されたの
で、5段パイプラインアーキテクチャを円滑に駆動する
ことができる。
だ命令列を命令スケジューリング部12から受け取り、
機械語プログラムまたはアセンブラプログラムとしてフ
ァイル等に出力する。以上のように本実施形態では、間
接アドレス指定型のメモリアクセス命令の前後に位置す
るメモリアクセス命令であっても、そのアクセス先がア
ドレス参照を受けない局所変数、一時変数、スピル先に
対応するものについては、別名アクセスの可能性が無い
旨を命令スケジュール部12に通知する。このように通
知されれば、命令スケジューリング部12は、たとえ間
接アドレス指定型のメモリアクセス命令の前後にメモリ
アクセス命令が位置していても、それらの前後関係を積
極的に変更するように命令順序の並べ替えを行う。この
並べ替えは、間接アドレス指定型のメモリアクセス命令
前後の命令の位置関係が拘束されないので自由度が非常
に高い。そうすると、パイプライン遅延の解消がより確
実になる。
部において別名アクセス性解析部19から命令スケジュ
ーリング部へと割り付け資源情報が渡されるとしたが、
命令スケジューリング部をコンパイラ本体から分離し、
コンパイラから出力されるアセンブラ命令もしくは機械
語命令に割り付け資源情報を添付し、アセンブラ命令も
しくは機械語命令をスケジューリングする最適化部でこ
れを解析して命令スケジューリング時の効率を上げるよ
うな構成にしてもよい。
送命令の削除を行なう構成である。図6は、第2実施形
態におけるコンパイラの内部構成を示したブロック図で
ある。本図のコンパイラの構成は、アセンブラ最適化部
20の内部に備えられていた命令スケジューリング部1
2が同値資源間転送命令最適化部22に置き換えらてい
る点が第1実施形態と異なる。
源解析部25と同値資源間転送命令削除部26からな
る。同値資源解析部25は上記資源割り付け部21が出
力したアセンブラ命令列のうち、基本ブロックに含まれ
ている命令に対して同値集合を生成する。同値集合の生
成処理のフロ−チャ−トを図11に示す。
令単位の同値関係情報、及び現在の同値関係を全てクリ
アする。ステップc2は、基本ブロック内の命令を順に
対象命令として選択する。ここで対象命令とは、ステッ
プc3〜ステップc7のループ処理の対象となる命令で
ある。
させる命令であるかどうかを判定する。変化させる命令
である場合にはステップc10に移行する。ステップc
10では、変化する資源が間接アドレス指定にて指定さ
れたメモリであるかを判定する。メモリでなければステ
ップc11に移行して、変化する資源の同値関係をクリ
アする。
時変数、アドレス参照を受けない局所変数、スピル先を
示す間接アドレス指定コードを除く、全てのメモリアク
セス命令のアクセス先を示すアドレス指定コードを削除
する。ステップc10〜ステップc12によるレジスタ
同値関係クリア処理について補足説明する。例えば、演
算命令「add 1,D0」の直前において、同値関係{D0,
D1}が成立しているものとする(レジスタD0の保持
値とD1の保持値とが同じ値という意味である。)。こ
のように演算命令の直前において同値関係が成立してい
ても、当該演算命令はデータレジスタD0の値の演算によ
り変化させているため、演算命令が実行された後では、
データレジスタD0の値は既に変化している。そのため、
同値関係{D0,D1}は、演算命令「add1,D0」の後段
で崩壊したとみなしてデータレジスタD0の同値集合をク
リアする。
度は同値関係{D0,D1,D2}が成立しているものと
する。このように演算命令の直前において同値関係が成
立していても、当該演算命令はデータレジスタD0の値の
演算により変化させているため、演算命令が実行された
後では、データレジスタD0の値は既に変化している。そ
のため、同値関係{D0,D1,D2}のうち、データレ
ジスタD1は、データレジスタD0、データレジスタD2の異
なる保持値を有しているので、演算命令「add1,D0」の
後段で崩壊したとみなしてデータレジスタD1を指定する
コードのみを削除する。
場合を考える。メモリアクセス命令のクリアは、レジス
タと同様の基準をもって行えば良いのであるが、メモリ
については、間接アドレス指定型の定義命令にて指定さ
れる場合がある。間接アドレス指定型の定義命令による
メモリ指定に備えているのがステップc10及びステッ
プc11である。
象命令の定義先が間接アドレス指定にて指定されている
場合に同値関係をどのようにクリアするかを規定してい
る。定義先を間接アドレス指定にて指定している命令
は、資源を変化させていることは明きらかでありステッ
プc3がYesとなるが、定義先が間接アドレス指定型の
定義命令にて表現されているため、そのコードからでは
どのアドレスの値が変化しているかが結論づけられな
い。そうすると、当該間接アドレス指定は、既に同値関
係が成立しているメモリアドレスと同一の資源を指示し
ているのではないかという疑惑が生じる。しかし、間接
アドレス指定型のメモリアクセス命令以前に成立してい
る同値関係内のメモリアドレスであっても、一時変数、
アドレス参照を受けない局所変数に対応するもの、スピ
ルイン・スピルアウト命令であるものは、間接アドレス
指定型のメモリアクセス命令のアクセス先に指定される
ことはない。従って、ステップc12では、一時変数、
アドレス参照を受けない局所変数に対応するメモリアド
レス、スピルイン・スピルアウト命令のアクセス先につ
いては同値関係クリアの例外として取り扱い、真に間接
アドレス指定型の定義命令にてアクセスされる可能性が
あるものをクリアしている。
アクセス命令の前後で行われていた『メモリ操作コード
の全消去』を回避することができる。ステップc5で
は、当該命令が等価転送命令であるかどうかを判定し、
等価転送命令であった場合にはステップc6に移行す
る。等価転送命令とは転送命令であって、転送先、転送
元とも符号、データサイズが変わらないものである。
た同値関係を生成し、同値関係を同値集合として表現す
る。ステップc7では現在の同値関係を、当該命令の同
値関係として設定する。例えば命令が「mov D0,D1」で
あった場合には同値関係{D0、D1}を生成する。
解析部25より同値関係を受けとり、冗長な転送命令を
削除する。同値関係はアドレス指定コードの集合により
その命令実行直後にどの資源とどの資源が同値であるか
を示している。つまりある命令が資源Bの資源Aへの転
送命令であり、且つ、その命令の直前の同値関係におい
て資源Aと資源Bが同値であればこの転送命令は冗長で
あり実行する必要がない。同値資源間転送命令削除部で
はこのような転送命令を削除する。
り同値関係が生成され、生成された同値関係を用いて冗
長転送命令が削除される過程を説明する。高級言語ソー
スプログラムを図7(a)に示し、資源割り付け部11
による資源割り付け結果を図7(b)に示す。図7
(b)における変数のうち、この例では変数iがレジス
タD0に割り付けられ、変数jがメモリ(SP、4)に
割り付けられている。\u変数pはデータレジスタA0に割
り付けられている。\uこの割り付け結果を用いてアセン
ブラコード生成部18が生成したアセンブラプログラム
を図7(c)に示す。
と、アセンブラコード生成部18は各アセンブラ命令の
別名アクセスの可能性の有無について解析する。図8
(a)は、各アセンブラ命令に対しての別名アクセスの
可能性が解析されている様子を示す。第1行目のメモリ
アクセス命令『mov (SP,4) ,D1』はメモリアドレス(SP,
4)からデータレジスタD1へと保持値を転送するメモリア
クセス命令である。この際、アセンブラコード生成部1
8はアドレス(SP,4)がどの変数に対応するかであるかを
解析する。図2(c)の資源割付結果によれば、アドレ
ス(SP,4)は、アドレス参照を受けない局所変数jに対応
することがわかる。
に対応するメモリであるため、アセンブラコード生成部
18はメモリアクセス命令『mov (SP,4) ,D1』が別名ア
クセスの可能性が存在しないと解釈し、メモリアクセス
命令『mov (SP,4) ,D1』の行番号を割り付け資源情報1
4に登録することにより、メモリアクセス命令『mov(S
P,4) ,D1』に別名アクセスの可能性が存在しない旨を割
り付け資源情報14に反映する。
タを用いて減算を行う演算命令であるので、別名アクセ
スの可能性解析の対象とはならない。第3行目のメモリ
アクセス命令『mov D1,(SP,4)』はデータレジスタD1か
らメモリアドレス(SP,4)へと保持値を転送するメモリア
クセス命令である。図7(b)の資源割付結果によれ
ば、アドレス(SP,4)は、アドレス参照を受けない局所変
数jに対応することから、アセンブラコード生成部18
はメモリアクセス命令『mov D1,(SP,4)』には別名アク
セスの可能性が存在しないと解釈し、メモリアクセス命
令『mov D1,(SP,4)』の行番号を割り付け資源情報14
に登録することにより、メモリアクセス命令『mov D1,
(SP,4)』に別名アクセスの可能性が存在しない旨を割り
付け資源情報14に反映する。
(A0)』はアクセス先がレジスタであり、そのアドレスが
間接アドレス指定により指定されていることから、別名
アクセスの可能性が存在すると解釈する。第5行目のメ
モリアクセス命令『mov (SP,4) ,D1』はメモリアドレス
(SP,4)からデータレジスタD1へと保持値を転送するメモ
リアクセス命令である。この際、アセンブラコード生成
部18はアドレス(SP,4)がどの変数に対応するかである
かを解析する。図7(c)の資源割付結果によれば、ア
ドレス(SP,4)は、アドレス参照を受けない局所変数jに
対応することがわかる。
に対応するメモリであるため、アセンブラコード生成部
18はメモリアクセス命令『mov (SP,4) ,D1』が別名ア
クセスの可能性が存在しないと解釈し、メモリアクセス
命令『mov (SP,4) ,D1』の行番号を割り付け資源情報1
4に登録することにより、メモリアクセス命令『mov(S
P,4) ,D1』に別名アクセスの可能性が存在しない旨を割
り付け資源情報14に反映する。
スタデータレジスタD1及びデータレジスタD0を用いて減
算を行う演算命令であるので、別名アクセスの可能性解
析の対象とはならない。メモリアクセス命令『mov (SP,
4) ,D1』、メモリアクセス命令『mov D1,(SP,4)』、メ
モリアクセス命令『mov (SP,4) ,D1』の行番号が登録さ
れた結果が図8(b)である。図8(b)を参照すれ
ば、ここに登録された1行目、3行目、5行目のアセン
ブラ命令は『別名アクセスの可能性を有さない』と解釈
される。局所変数から生成されたメモリアクセス命令に
ついては、アクセス先となるアドレス(SP,4)が登録され
ていることがわかる。
アクセスの可能性の有無が各行について解析されると、
同値資源解析部25は、各命令についての同値集合を生
成する。第1行目のメモリアクセス命令『mov (SP,4),D
1』が対象命令である場合、ステップc6において、ア
ドレス(SP,4)とデータレジスタD1との同値関係{(SP,4),
D1}が形成される。
令である場合、データレジスタD1の値が変化するので、
ステップc3がYesとなりステップc10、ステップc
11に移行する。ステップc11では、その定義先資源
データレジスタD1の同値集合{(SP,4),D1}が削除され
て、同値集合は空集合{}になる。第3行目のメモリアク
セス命令『mov D1,(SP,4)』が対象命令である場合、ア
ドレス(SP,4)の値が変化するので、ステップc3がYes
となりステップc10、ステップc11に移行する。ス
テップc11では、その定義先資源データレジスタD1の
同値集合が削除されて、同値集合は空集合になるが、ス
テップc6において、アドレス(SP,4)とデータレジスタ
D1との同値関係{(SP,4),D1}が形成される。
(A0)』が対象命令である場合、アドレスレジスタA0の値
が変化するので、ステップc3がYesとなりステップc
10に移行する。メモリアクセス命令『mov D1,(A0)』
は間接アドレス指定型の定義命令であるためステップc
10がYesとなり、ステップc12に移行する。ステッ
プc12では、同値関係を示すアドレス指定コードの削
除を行おうとするが、同値集合が成立しているアドレス
(SP,4)はアドレス参照を受けない局所変数を示すもので
あるので、削除は免れる。これによりアドレス(SP,4)と
データレジスタD1との同値関係{(SP,4),D1}は、間接ア
ドレス指定型のメモリアクセス命令の前後を通過する。
4),D1』が対象命令である場合、ステップc6におい
て、アドレス(SP,4)とデータレジスタD1との同値関係
{(SP,4),D1}が形成される。第6行目の減算命令『add D
1,D0』が対象命令である場合、データレジスタD0の値が
変化するので、ステップc3がYesとなりステップc1
0、ステップc11に移行する。ステップc11では、
その定義先資源データレジスタD0の同値集合が削除され
ようとするが、データレジスタD0についての同値集合は
存在しないので{(SP,4),D1}は削除されない。
演算命令『add D1,D0』の各命令について生成された同
値集合を図9に示す。各命令に対して同値集合が生成さ
れると、同値資源間転送命令削除部26は、直前命令に
おいて同値関係が成立しているにも拘らず、二度手間の
転送を行っている転送命令を検出し、これを冗長転送命
令として削除する。図9における同値集合解析結果を見
れば、アドレス(SP,4)とデータレジスタD1との間の同値
関係が成立しているにも拘らず、第5行目では、アドレ
ス(SP,4)からデータレジスタD1への転送が行われている
ことがわかる。このような冗長転送命令が検出される
と、同値資源間転送命令削除部26は冗長転送命令を削
除する。削除結果は、図10に示すものとなる。
ロック中の各命令についての同値集合を解析する際、間
接アドレス指定型のメモリアクセス命令の直前に様々な
アクセス先からなる同値集合が生成されていても、同値
集合に含まれているアドレス指定コードのうち、一時変
数及びアドレス参照を受けない局所変数に対応するも
の、スタックの退避先を示すものは、削除せずに間接ア
ドレス指定型のメモリアクセス命令以降の命令に伝搬す
る。このように伝搬されると、間接アドレス指定型のメ
モリアクセス命令以降に位置する命令のうち、冗長な転
送命令を多く削除することができる。
より多く検出することができるので、これを削除するこ
とにより、実行時間及びプログラムサイズを向上させる
ことができる。尚、第2実施形態において、冗長転送命
令の削除の代わりにコピー伝搬を用いた最適化を行って
もよい。この場合、同値資源解析部25は、検出された
レジスタアクセス命令及びメモリアクセス命令のアクセ
ス先を指定するアドレス指定コードの全てからなる同値
集合を当該間接アドレス指定型のメモリアクセス命令に
対して生成する。生成後、アセンブラプログラム内の転
送命令を対象命令として取り出し、対象命令の参照先資
源を定義先としている転送命令を検出する。
別名アクセスの可能性が無いものを削除し、コードが削
除されると、対象命令の参照先資源を当該転送命令の参
照先資源に置き換えることが可能であるかを、当該同値
集合に基づいて判定する。転送命令が検出されると、対
象命令の参照先資源を当該転送命令の参照先資源に置き
換えることが可能であるかを、生成された同値集合に基
づいて判定する。可能であれば、対象命令の参照先資源
の置き換えを実行する置換し、置き換えが実行される
と、検出された転送命令を削除する。
行っても良い。この構成では、資源コードが削除された
同値集合に基づいて、オペランドが別のものに置き換え
可能か否かを判定し、置き換え可能であり、且つ置き換
えるとコードサイズ又は実行時間が削減できる場合に当
該オペランドを別に置き換える。
グラミング言語で書かれた文からなるソースプログラム
を翻訳することにより命令列を得るコンパイル装置に用
いられ、命令列を最適化する最適化装置であって、各文
に含まれている変数に対応するメモリをアクセス先に指
定したメモリアクセス命令を前記命令列から取り出す取
出手段と、アクセス先に対応する変数がソースプログラ
ムにおいて別変数での操作によりアクセスを受けるか否
かを各メモリアクセス命令について判定する判定手段
と、別変数名での操作によりアクセスを受けないのであ
れば、取り出されたメモリアクセス命令に、別変数アク
セスの可能性が存在しない旨のマークを付与する付与手
段と、各メモリアクセス命令に付与されたマークを参照
して、前記命令列を最適化する最適化手段とを備え、前
記コンパイル装置は、ソースプログラムに含まれる複数
の文で用いられる複数の変数のそれぞれが、ソースプロ
グラムにおいてアドレス参照を受けることのない局所変
数であるかの分類を行い、分類結果に基づき、各変数に
資源を割り付る割付手段を備え前記判定手段は、取り出
されたメモリアクセス命令のアクセス先が局所変数に対
応しているかを割付手段による分類結果に従って判定す
ることを特徴としている。
モリアクセス命令の前後に位置するメモリアクセス命令
であっても、そのアクセス先がソースプログラムにおい
て別名アクセスされ得ないものについては、その旨を示
すマークを命令に付与する。最適化手段は命令列に対す
る最適化を、付与されたマークを参照して行う。基本ブ
ロック中に間接アドレス指定型のメモリアクセス命令が
存在する場合でも、その最適化は、効率が損なわれずに
行われる。それ故に、実行時間の短縮及びプログラムサ
イズの削減が可能となる。
変数に対応するメモリであるメモリアクセス命令を別名
アクセスされ得ない命令として判定し、その旨を示すマ
ークを付与するので、別名アクセスされ得ない命令を確
実に検出できる。上記発明を以下のように構成してもよ
い。即ち、プログラミング言語で書かれた文からなるソ
ースプログラムを翻訳することにより命令列を得るコン
パイル装置に用いられ、命令列を最適化する最適化装置
であって、各文に含まれている変数に対応するメモリを
アクセス先に指定したメモリアクセス命令を前記命令列
から取り出す取出手段と、アクセス先に対応する変数が
ソースプログラムにおいて別変数での操作によりアクセ
スを受けるか否かを各メモリアクセス命令について判定
する判定手段と、別変数名での操作によりアクセスを受
けないのであれば、取り出されたメモリアクセス命令
に、別変数アクセスの可能性が存在しない旨のマークを
付与する付与手段と、各メモリアクセス命令に付与され
たマークを参照して、前記命令列を最適化する最適化手
段とを備え、前記コンパイル装置は、ソースプログラム
に含まれるソースプログラムを中間言語に変換した際に
便宜的に文内に挿入された一時変数であるかの分類を行
い、分類結果に基づき、各変数に資源を割り付る割付手
段を備え、前記判定手段は、取り出されたメモリアクセ
ス命令のアクセス先が一時変数に対応しているかを割付
手段による分類結果に従って判定しても良い。このよう
に構成された発明によればアクセス先が一時変数に対応
するメモリであるメモリアクセス命令を別名アクセスさ
れ得ない命令として判定し、その旨を示すマークを付与
するので、別名アクセスされ得ない命令を確実に検出で
きる。
い。即ち、プログラミング言語で書かれた文からなるソ
ースプログラムを翻訳することにより命令列を得るコン
パイル装置に用いられ、命令列を最適化する最適化装置
であって、各文に含まれている変数に対応するメモリを
アクセス先に指定したメモリアクセス命令を前記命令列
から取り出す取出手段と、アクセス先に対応する変数が
ソースプログラムにおいて別変数での操作によりアクセ
スを受けるか否かを各メモリアクセス命令について判定
する判定手段と、別変数名での操作によりアクセスを受
けないのであれば、取り出されたメモリアクセス命令
に、別変数アクセスの可能性が存在しない旨のマークを
付与する付与手段と、各メモリアクセス命令に付与され
たマークを参照して、前記命令列を最適化する最適化手
段とを備え、\u前記コンパイル装置は、複数の文に基づ
き複数の命令からなる命令列を生成すると共に、それら
の命令が、レジスタの保持値を退避する命令であるかの
分類を行う命令生成手段を備え、前記判定手段は、前記
分類結果に基づき、取り出されたメモリアクセス命令
が、レジスタの保持値を退避する命令であるかを判定す
ることを特徴としても良い。本構成では、アクセス先が
レジスタ保持値の退避先に対応するメモリであるメモリ
アクセス命令を別名アクセスされ得ない命令として判定
し、その旨を示すマークを付与するので、別名アクセス
され得ない命令を確実に検出できる。
してもよい。即ち、前記最適化手段は、命令列から、全
メモリアクセス命令を検出する検出部と、検出された全
メモリアクセス命令の中からマークが付与されたものを
除外することにより、メモリアクセス命令を選抜する選
抜部と、間接アドレス指定型のメモリアクセス命令と選
抜されたメモリアクセス命令との間に、当該2命令間の
前後関係が不可侵である旨を示す有向リンクを形成する
形成部と、有向リンクに示された前後関係を遵守しつつ
も、パイプラインアーキテクチャに適合するよう命令の
順序を並べ替えるスケジューリング部とを備えるように
構成してもよい。
侵であり、どの二命令の並びが不可侵でないかを示す有
向リンクが、間接メモリアクセス命令と別名アクセスの
可能性が無いメモリアクセス命令に対しては形成されな
い。そのため、命令間の有向リンクの絶対数が少なくて
済み、命令の内部の自由度が向上する。そのため、パイ
プラインアーキテクチャに柔軟に対応できるように命令
の配置構造を自在に再編成することができる。
内から、ハザード要因となる二命令を検出して、当該二
命令間に他の命令が挿入されるよう、命令の順序を並べ
替えるように構成してもよい。このように構成された発
明によればパイプラインアーキテクチャの遅延要因にな
る二命令の並びにおいて、命令間に他の命令が挿入され
るようにスケジューリングが行われるので、実行時間を
向上させることができる。
してもよい。即ち、前記最適化手段は、翻訳された命令
列から間接アドレス指定型の命令を取り出す取出部と、
レジスタアクセス命令及びメモリアクセス命令のアクセ
ス先を指定する全ての資源コードからなる同値コード集
合を取り出された間接アドレス指定型のメモリアクセス
命令に対して生成する生成部と、同値コード集合内の資
源コードのうち、付与手段によりマークが付与された命
令のアクセス先以外のものを削除する同値関係削除部
と、同値関係削除部により資源コードが削除された同値
コード集合に基づいて、間接アドレス指定型のメモリア
クセス命令以降に位置する命令が冗長か否かを判定し、
冗長であれば、これを削除する転送命令削除部とを備え
るように構成してもよい。
指定型のメモリアクセス命令の前後を跨ぐ場合、間接ア
ドレス指定型のメモリアクセス命令のアクセス先が不明
であるために、同値集合が全て抹消されてしまう現象を
回避することができる。同値集合に含まれているアドレ
ス指定コードのうち、別名アクセスの可能性が無いもの
を削除しないで済む。削除量が少ないため、間接アドレ
ス指定型のメモリアクセス命令以降のメモリアクセス命
令において冗長なものをより多く検出することができ
る。
してもよい。即ち、前記最適化手段は、検出されたレジ
スタアクセス命令及びメモリアクセス命令のアクセス先
を指定する資源コードの全てからなる同値コード集合を
当該間接アドレス指定型のメモリアクセス命令に対して
生成する生成部と、命令列内の転送命令を対象命令とし
て取り出す取出部と、対象命令の参照先資源を定義先と
している転送命令を検出する検出部と、アクセス先を指
定する複数の資源コードからなる同値コード集合を検出
された転送命令に対して生成する生成部と、同値コード
集合内の資源コードのうち、付与手段によりマークが付
与された命令のアクセス先以外のものを削除する同値関
係削除部と、同値関係削除部により資源コードが削除さ
れると、対象命令の参照先資源を当該転送命令の参照先
資源に置き換えることが可能であるかを、当該同値コー
ド集合に基づいて判定する判定部と、可能であれば、対
象命令の参照先資源の置き換えを実行する置換実行部
と、置き換えが実行されると、検出により検出された転
送命令を削除する削除部とを備えることを特徴としても
よい。
定型のメモリアクセス命令の前後を跨ぐ場合、間接アド
レス指定型のメモリアクセス命令のアクセス先が不明で
あるために、同値集合が全て抹消されてしまう現象を開
発することができる。同値集合に含まれているアドレス
指定コードのうち、別名アクセスの可能性が無いものを
削除しないで済む。削除量が少ないため、転送命令の参
照先を置き換えを用いた冗長転送命令の削除を好適に行
うことができる。
す。
る。 (b)中間言語状態のプログラムの一例を示す図であ
る。 (c)資源割り付け結果の一例を示す図である。 (d)アセンブラ命令の一例を示す図である。
クセスの可能性の解析結果の一例を示す図である。 (b) 割り付け資源情報の一例を示す図である。
れた依存グラフの一例を示す図である。 (b)図4(a)の依存グラフを用いてのスケジューリ
ング結果の一例を示す図である。
内容を示すフロ−チャ−トである。
す。
る。 (b)資源割り付け結果の一例を示す図である。 (c)アセンブラ命令の一例を示す図である。
クセスの可能性の解析結果の一例を示す図である。 (b)割り付け資源情報の一例を示す図である。
されたプログラムの一例を示す図である。
ある。
る。 (b)中間言語状態に変換されたプログラムの一例を示
す図である。 (c)アセンブラ命令の一例を示す図である。 (d)図12(c)のアセンブラ命令から生成された依
存グラフの一例を示す図である。 (e)図12(d)の依存グラフを用いてのスケジュー
リング結果の一例を示す図である。
である。 (b)図13(a)のアセンブラ命令から生成された同
値集合の一例を示す図である。 (c)図13(b)の同値集合を用いての冗長転送命令
の削除結果の一例を示す図である。
命令を含んだアセンブラ命令の一例を示す図である。 (b)図13(a)のアセンブラ命令から生成された依
存グラフの一例を示す図である。
命令を含むアセンブラ命令の一例を示す図である。 (b)図15(a)のアセンブラ命令から生成された同
値集合の一例を示す図である。 (c)(b)を用いて同値資源間転送命令削除を試みた
結果を示す図である。
Claims (9)
- 【請求項1】 プログラミング言語で書かれた文からな
るソースプログラムを翻訳することにより命令列を得る
コンパイル装置に用いられ、命令列を最適化する最適化
装置であって、 各文に含まれている変数に対応するメモリをアクセス先
に指定したメモリアクセス命令を前記命令列から取り出
す取出手段と、 アクセス先に対応する変数がソースプログラムにおいて
別変数での操作によりアクセスを受けるか否かを各メモ
リアクセス命令について判定する判定手段と、 別変数名での操作によりアクセスを受けないのであれ
ば、取り出されたメモリアクセス命令に、別変数アクセ
スの可能性が存在しない旨のマークを付与する付与手段
と、 各メモリアクセス命令に付与されたマークを参照して、
前記命令列を最適化する最適化手段とを備え、 前記コンパイル装置は、 ソースプログラムに含まれる複数の文で用いられる複数
の変数のそれぞれが、ソースプログラムにおいてアドレ
ス参照を受けることのない局所変数であるかの分類を行
い、分類結果に基づき、各変数に資源を割り付る割付手
段を備え 前記判定手段は、 取り出されたメモリアクセス命令のアクセス先が局所変
数に対応しているかを割付手段による分類結果に従って
判定する ことを特徴とする最適化装置。 - 【請求項2】 プログラミング言語で書かれた文からな
るソースプログラムを翻訳することにより命令列を得る
コンパイル装置に用いられ、命令列を最適化する最適化
装置であって、 各文に含まれている変数に対応するメモリをアクセス先
に指定したメモリアクセス命令を前記命令列から取り出
す取出手段と、 アクセス先に対応する変数がソースプログラムにおいて
別変数での操作によりアクセスを受けるか否かを各メモ
リアクセス命令について判定する判定手段と、 別変数名での操作によりアクセスを受けないのであれ
ば、取り出されたメモリ アクセス命令に、別変数アクセ
スの可能性が存在しない旨のマークを付与する付与手段
と、 各メモリアクセス命令に付与されたマークを参照して、
前記命令列を最適化する最適化手段とを備え、 前記コンパイル装置は、 ソースプログラムに含まれるソースプログラムを中間言
語に変換した際に便宜的に文内に挿入された一時変数で
あるかの分類を行い、分類結果に基づき、各変数に資源
を割り付る割付手段を備え、 前記判定手段は、 取り出されたメモリアクセス命令のアクセス先が一時変
数に対応しているかを割付手段による分類結果に従って
判定する ことを特徴とする最適化装置。 - 【請求項3】 プログラミング言語で書かれた文からな
るソースプログラムを翻訳することにより命令列を得る
コンパイル装置に用いられ、命令列を最適化する最適化
装置であって、 各文に含まれている変数に対応するメモリをアクセス先
に指定したメモリアクセス命令を前記命令列から取り出
す取出手段と、 アクセス先に対応する変数がソースプログラムにおいて
別変数での操作によりアクセスを受けるか否かを各メモ
リアクセス命令について判定する判定手段と、 別変数名での操作によりアクセスを受けないのであれ
ば、取り出されたメモリアクセス命令に、別変数アクセ
スの可能性が存在しない旨のマークを付与する付与手段
と、 各メモリアクセス命令に付与されたマークを参照して、
前記命令列を最適化する最適化手段と を備え、前記コンパイル装置は、 複数の文に基づき複数の命令からなる命令列を生成する
と共に、それらの命令が、レジスタの保持値を退避する
命令であるかの分類を行う命令生成手段を備え、 前記判定手段は、 前記分類結果に基づき、取り出されたメモリアクセス命
令が、レジスタの保持値を退避する命令であるかを判定
する ことを特徴とする最適化装置。 - 【請求項4】 前記最適化手段は、 命令列から、全メモリアクセス命令を検出する検出部
と、 検出された全メモリアクセス命令の中からマークが付与
されたものを除外することにより、メモリアクセス命令
を選抜する選抜部と、 間接アドレス指定型のメモリアクセス命令と選抜された
メモリアクセス命令との間に、当該2命令間の前後関係
が不可侵である旨を示す有向リンクを形成する形成部
と、 有向リンクに示された前後関係を遵守しつつも、パイプ
ラインアーキテクチャに適合するよう命令の順序を並べ
替えるスケジューリング部とを備えることを特徴とする
請求項1〜3の何れかに記載の最適化装置。 - 【請求項5】 前記スケジューリング部は、 命令列内から、ハザード要因となる二命令を検出して、
当該二命令間に他の命令が挿入されるよう、命令の順序
を並べ替えることを特徴とする請求項4に記載の最適化
装置。 - 【請求項6】 前記最適化手段は、 翻訳された命令列から間接アドレス指定型の命令を取り
出す取出部と、 レジスタアクセス命令及びメモリアクセス命令のアクセ
ス先を指定する全ての資源コードからなる同値コード集
合を取り出された間接アドレス指定型のメモリアクセス
命令に対して生成する生成部と、 同値コード集合内の資源コードのうち、付与手段により
マークが付与された命令のアクセス先以外のものを削除
する同値関係削除部と、 同値関係削除部により資源コードが削除された同値コー
ド集合に基づいて、間接アドレス指定型のメモリアクセ
ス命令以降に位置する命令が冗長か否かを判定し、冗長
であれば、これを削除する転送命令削除部とを備えるこ
とを特徴とする請求項1〜3の何れかに記載の最適化装
置。 - 【請求項7】 前記最適化手段は、 検出されたレジスタアクセス命令及びメモリアクセス命
令のアクセス先を指定する資源コードの全てからなる同
値コード集合を当該間接アドレス指定型のメモリアクセ
ス命令に対して生成する生成部と、 命令列内の転送命令を対象命令として取り出す取出部
と、 対象命令の参照先資源を定義先としている転送命令を検
出する検出部と、 アクセス先を指定する複数の資源コードからなる同値コ
ード集合を検出された転送命令に対して生成する生成部
と、 同値コード集合内の資源コードのうち、付与手段により
マークが付与された命令のアクセス先以外のものを削除
する同値関係削除部と、 同値関係削除部により資源コードが削除されると、対象
命令の参照先資源を当該転送命令の参照先資源に置き換
えることが可能であるかを、当該同値コード集合に基づ
いて判定する判定部と、 可能であれば、対象命令の参照先資源の置き換えを実行
する置換実行部と、 置き換えが実行されると、検出により検出された転送命
令を削除する転送命令削除部とを備えることを特徴とす
る請求項1〜3の何れかに記載の最適化装置。 - 【請求項8】 前記最適化手段は、 翻訳された命令列から間接アドレス指定型の命令を取り
出す取出部と、 レジスタアクセス命令及びメモリアクセス命令のアクセ
ス先を指定する全ての資源コードからなる同値コード集
合を取り出された間接アドレス指定型のメモリアクセス
命令に対して生成する生成部と、 同値コード集合内の資源コードのうち、付与手段により
マークが付与された命令のアクセス先以外のものを削除
する同値関係削除部と、 同値関係削除部により資源コードが削除された同値コー
ド集合に基づいて、間接アドレス指定型のメモリアクセ
ス命令以降に位置する命令のオペランドが別のものに置
き換え可能か否かを判定し、置き換え可能であれば、当
該オペランドを別に置き換える置換部とを備えることを
特徴とする請求項1〜3の何れかに記載の最適化装置。 - 【請求項9】 プログラミング言語で書かれた文からな
るソースプログラム を翻訳することにより命令列を得
て、命令列の最適化を最適化装置に行わせるコンパイラ
装置であって、 複数の文に含まれる複数の変数に複数の資源を割り付る
と共に、それらの変数をソースプログラムにおいてアド
レス参照を受けることのない変数である局所的変数、又
は、ソースプログラムを中間言語に変換した際に便宜的
に文内に挿入された一時変数に分類する処理を行う資源
割付手段と、 ソースプログラムに基づき複数の命令からなる命令列を
生成すると共に、それらの命令が、ソースプログラムに
含まれる文に対応する命令であるか、レジスタの保持値
を退避する命令であり、文に対応しない命令であるかの
分類を行う命令生成手段とを備え、 前記最適化装置は、 命令列に含まれるメモリアクセス命令が、変数に対応す
るメモリをアクセス先とするものであり、尚且つその変
数がソースプログラムにおいて別変数での操作によりア
クセスを受けるか否かを、資源割付手段及び命令生成手
段による分類結果に基づき判定し、その判定結果に基づ
き、前記命令列を最適化する ことを特徴とするコンパイ
ラ装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP19226297A JP3220055B2 (ja) | 1997-07-17 | 1997-07-17 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
| US09/116,136 US6243864B1 (en) | 1997-07-17 | 1998-07-15 | Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP19226297A JP3220055B2 (ja) | 1997-07-17 | 1997-07-17 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH1139167A JPH1139167A (ja) | 1999-02-12 |
| JP3220055B2 true JP3220055B2 (ja) | 2001-10-22 |
Family
ID=16288370
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP19226297A Expired - Fee Related JP3220055B2 (ja) | 1997-07-17 | 1997-07-17 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US6243864B1 (ja) |
| JP (1) | JP3220055B2 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108427558A (zh) * | 2018-02-09 | 2018-08-21 | 芯海科技(深圳)股份有限公司 | 一种c编译器的窥孔优化方法 |
Families Citing this family (78)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6446258B1 (en) * | 1998-11-03 | 2002-09-03 | Intle Corporation | Interactive instruction scheduling and block ordering |
| US6718541B2 (en) * | 1999-02-17 | 2004-04-06 | Elbrus International Limited | Register economy heuristic for a cycle driven multiple issue instruction scheduler |
| US7146505B1 (en) | 1999-06-01 | 2006-12-05 | America Online, Inc. | Secure data exchange between date processing systems |
| JP4041248B2 (ja) * | 1999-07-09 | 2008-01-30 | 松下電器産業株式会社 | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 |
| US7401115B1 (en) | 2000-10-23 | 2008-07-15 | Aol Llc | Processing selected browser requests |
| US6782469B1 (en) * | 2000-09-29 | 2004-08-24 | Intel Corporation | Runtime critical load/data ordering |
| US7380239B1 (en) * | 2001-05-31 | 2008-05-27 | Oracle International Corporation | Method and mechanism for diagnosing computer applications using traces |
| JP4044756B2 (ja) * | 2001-12-11 | 2008-02-06 | 松下電器産業株式会社 | プログラム変換装置、プログラム変換方法、及び当該プログラム変換装置を実現するプログラム |
| CA2365375A1 (en) * | 2001-12-18 | 2003-06-18 | Ibm Canada Limited-Ibm Canada Limitee | Optimizing source code for iterative execution |
| US20030135848A1 (en) * | 2001-12-21 | 2003-07-17 | Hitachi, Ltd. | Use of multiple procedure entry and/or exit points to improve instruction scheduling |
| US7316011B1 (en) * | 2002-10-10 | 2008-01-01 | Microsoft Corporation | Memory reduction for object-oriented compilers |
| US7493611B2 (en) * | 2004-08-30 | 2009-02-17 | International Business Machines Corporation | Pinning internal slack nodes to improve instruction scheduling |
| US7694286B2 (en) * | 2005-02-10 | 2010-04-06 | International Business Machines Corporation | Apparatus and method for detecting base-register usage conflicts in computer code |
| US7450131B2 (en) * | 2005-09-30 | 2008-11-11 | Intel Corporation | Memory layout for re-ordering instructions using pointers |
| US7698690B2 (en) * | 2005-11-10 | 2010-04-13 | International Business Machines Corporation | Identifying code that wastes time performing redundant computation |
| US8612957B2 (en) * | 2006-01-26 | 2013-12-17 | Intel Corporation | Scheduling multithreaded programming instructions based on dependency graph |
| US8037466B2 (en) | 2006-12-29 | 2011-10-11 | Intel Corporation | Method and apparatus for merging critical sections |
| WO2009125490A1 (ja) * | 2008-04-11 | 2009-10-15 | 富士通株式会社 | 管理装置、管理方法及びプログラム |
| TWI396132B (zh) * | 2008-08-06 | 2013-05-11 | Nat Univ Tsing Hua | 非規則性暫存器集之指令管線化方法 |
| JP5185242B2 (ja) * | 2009-12-04 | 2013-04-17 | 株式会社東芝 | コンパイル装置 |
| US9224496B2 (en) | 2010-08-11 | 2015-12-29 | Shine C. Chung | Circuit and system of aggregated area anti-fuse in CMOS processes |
| US10249379B2 (en) | 2010-08-20 | 2019-04-02 | Attopsemi Technology Co., Ltd | One-time programmable devices having program selector for electrical fuses with extended area |
| US9496033B2 (en) | 2010-08-20 | 2016-11-15 | Attopsemi Technology Co., Ltd | Method and system of programmable resistive devices with read capability using a low supply voltage |
| US10229746B2 (en) | 2010-08-20 | 2019-03-12 | Attopsemi Technology Co., Ltd | OTP memory with high data security |
| US8804398B2 (en) | 2010-08-20 | 2014-08-12 | Shine C. Chung | Reversible resistive memory using diodes formed in CMOS processes as program selectors |
| US10923204B2 (en) | 2010-08-20 | 2021-02-16 | Attopsemi Technology Co., Ltd | Fully testible OTP memory |
| US9070437B2 (en) | 2010-08-20 | 2015-06-30 | Shine C. Chung | Circuit and system of using junction diode as program selector for one-time programmable devices with heat sink |
| US9236141B2 (en) | 2010-08-20 | 2016-01-12 | Shine C. Chung | Circuit and system of using junction diode of MOS as program selector for programmable resistive devices |
| US9711237B2 (en) | 2010-08-20 | 2017-07-18 | Attopsemi Technology Co., Ltd. | Method and structure for reliable electrical fuse programming |
| US9019742B2 (en) | 2010-08-20 | 2015-04-28 | Shine C. Chung | Multiple-state one-time programmable (OTP) memory to function as multi-time programmable (MTP) memory |
| US9818478B2 (en) | 2012-12-07 | 2017-11-14 | Attopsemi Technology Co., Ltd | Programmable resistive device and memory using diode as selector |
| US9431127B2 (en) | 2010-08-20 | 2016-08-30 | Shine C. Chung | Circuit and system of using junction diode as program selector for metal fuses for one-time programmable devices |
| US9025357B2 (en) | 2010-08-20 | 2015-05-05 | Shine C. Chung | Programmable resistive memory unit with data and reference cells |
| US9824768B2 (en) | 2015-03-22 | 2017-11-21 | Attopsemi Technology Co., Ltd | Integrated OTP memory for providing MTP memory |
| US9042153B2 (en) | 2010-08-20 | 2015-05-26 | Shine C. Chung | Programmable resistive memory unit with multiple cells to improve yield and reliability |
| US8830720B2 (en) | 2010-08-20 | 2014-09-09 | Shine C. Chung | Circuit and system of using junction diode as program selector and MOS as read selector for one-time programmable devices |
| US8488359B2 (en) | 2010-08-20 | 2013-07-16 | Shine C. Chung | Circuit and system of using junction diode as program selector for one-time programmable devices |
| US10916317B2 (en) | 2010-08-20 | 2021-02-09 | Attopsemi Technology Co., Ltd | Programmable resistance memory on thin film transistor technology |
| US8929122B2 (en) | 2010-08-20 | 2015-01-06 | Shine C. Chung | Circuit and system of using a junction diode as program selector for resistive devices |
| US9460807B2 (en) | 2010-08-20 | 2016-10-04 | Shine C. Chung | One-time programmable memory devices using FinFET technology |
| US9251893B2 (en) | 2010-08-20 | 2016-02-02 | Shine C. Chung | Multiple-bit programmable resistive memory using diode as program selector |
| US8923085B2 (en) | 2010-11-03 | 2014-12-30 | Shine C. Chung | Low-pin-count non-volatile memory embedded in a integrated circuit without any additional pins for access |
| US8988965B2 (en) | 2010-11-03 | 2015-03-24 | Shine C. Chung | Low-pin-count non-volatile memory interface |
| US9019791B2 (en) | 2010-11-03 | 2015-04-28 | Shine C. Chung | Low-pin-count non-volatile memory interface for 3D IC |
| US8913449B2 (en) | 2012-03-11 | 2014-12-16 | Shine C. Chung | System and method of in-system repairs or configurations for memories |
| CN102544011A (zh) | 2010-12-08 | 2012-07-04 | 庄建祥 | 反熔丝存储器及电子系统 |
| US8848423B2 (en) | 2011-02-14 | 2014-09-30 | Shine C. Chung | Circuit and system of using FinFET for building programmable resistive devices |
| US10586832B2 (en) | 2011-02-14 | 2020-03-10 | Attopsemi Technology Co., Ltd | One-time programmable devices using gate-all-around structures |
| US10192615B2 (en) | 2011-02-14 | 2019-01-29 | Attopsemi Technology Co., Ltd | One-time programmable devices having a semiconductor fin structure with a divided active region |
| US8607019B2 (en) * | 2011-02-15 | 2013-12-10 | Shine C. Chung | Circuit and method of a memory compiler based on subtractive approach |
| US9015687B2 (en) | 2011-03-30 | 2015-04-21 | Intel Corporation | Register liveness analysis for SIMD architectures |
| US9152417B2 (en) | 2011-09-27 | 2015-10-06 | Intel Corporation | Expediting execution time memory aliasing checking |
| US8756591B2 (en) | 2011-10-03 | 2014-06-17 | International Business Machines Corporation | Generating compiled code that indicates register liveness |
| US8615745B2 (en) | 2011-10-03 | 2013-12-24 | International Business Machines Corporation | Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization |
| US8612959B2 (en) * | 2011-10-03 | 2013-12-17 | International Business Machines Corporation | Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization |
| JP5719278B2 (ja) | 2011-11-11 | 2015-05-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 情報処理装置、プロファイル対象決定プログラム及び方法 |
| US9136261B2 (en) | 2011-11-15 | 2015-09-15 | Shine C. Chung | Structures and techniques for using mesh-structure diodes for electro-static discharge (ESD) protection |
| US8912576B2 (en) | 2011-11-15 | 2014-12-16 | Shine C. Chung | Structures and techniques for using semiconductor body to construct bipolar junction transistors |
| US9324849B2 (en) | 2011-11-15 | 2016-04-26 | Shine C. Chung | Structures and techniques for using semiconductor body to construct SCR, DIAC, or TRIAC |
| US8792374B1 (en) * | 2011-12-07 | 2014-07-29 | Google Inc. | Managing network routes from a central server |
| US8861249B2 (en) | 2012-02-06 | 2014-10-14 | Shine C. Chung | Circuit and system of a low density one-time programmable memory |
| US9007804B2 (en) | 2012-02-06 | 2015-04-14 | Shine C. Chung | Circuit and system of protective mechanisms for programmable resistive memories |
| US8917533B2 (en) | 2012-02-06 | 2014-12-23 | Shine C. Chung | Circuit and system for testing a one-time programmable (OTP) memory |
| US9076526B2 (en) | 2012-09-10 | 2015-07-07 | Shine C. Chung | OTP memories functioning as an MTP memory |
| US9183897B2 (en) | 2012-09-30 | 2015-11-10 | Shine C. Chung | Circuits and methods of a self-timed high speed SRAM |
| US9324447B2 (en) | 2012-11-20 | 2016-04-26 | Shine C. Chung | Circuit and system for concurrently programming multiple bits of OTP memory devices |
| US9412473B2 (en) | 2014-06-16 | 2016-08-09 | Shine C. Chung | System and method of a novel redundancy scheme for OTP |
| US9824419B2 (en) * | 2015-11-20 | 2017-11-21 | International Business Machines Corporation | Automatically enabling a read-only cache in a language in which two arrays in two different variables may alias each other |
| US10152338B2 (en) * | 2016-12-14 | 2018-12-11 | International Business Machines Corporation | Marking external sibling caller routines |
| US10726914B2 (en) | 2017-04-14 | 2020-07-28 | Attopsemi Technology Co. Ltd | Programmable resistive memories with low power read operation and novel sensing scheme |
| US11615859B2 (en) | 2017-04-14 | 2023-03-28 | Attopsemi Technology Co., Ltd | One-time programmable memories with ultra-low power read operation and novel sensing scheme |
| US11062786B2 (en) | 2017-04-14 | 2021-07-13 | Attopsemi Technology Co., Ltd | One-time programmable memories with low power read operation and novel sensing scheme |
| US10535413B2 (en) | 2017-04-14 | 2020-01-14 | Attopsemi Technology Co., Ltd | Low power read operation for programmable resistive memories |
| US10770160B2 (en) | 2017-11-30 | 2020-09-08 | Attopsemi Technology Co., Ltd | Programmable resistive memory formed by bit slices from a standard cell library |
| TWI776338B (zh) * | 2020-12-30 | 2022-09-01 | 國立成功大學 | 應用於圖形處理器的編譯器及非暫態電腦可讀式儲存媒體 |
| US12483429B2 (en) | 2021-06-01 | 2025-11-25 | Attopsemi Technology Co., Ltd | Physically unclonable function produced using OTP memory |
| CN115964331A (zh) * | 2022-09-20 | 2023-04-14 | 北京达佳互联信息技术有限公司 | 一种数据访问方法、装置及设备 |
| CN119201236B (zh) * | 2024-11-28 | 2025-02-28 | 沐曦集成电路(上海)股份有限公司 | 一种用于并行计算的存储访问优化系统 |
Family Cites Families (15)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5161216A (en) * | 1989-03-08 | 1992-11-03 | Wisconsin Alumni Research Foundation | Interprocedural slicing of computer programs using dependence graphs |
| US5428793A (en) * | 1989-11-13 | 1995-06-27 | Hewlett-Packard Company | Method and apparatus for compiling computer programs with interproceduural register allocation |
| US5119495A (en) * | 1989-12-21 | 1992-06-02 | Bull Hn Information Systems Inc. | Minimizing hardware pipeline breaks using software scheduling techniques during compilation |
| US5179702A (en) * | 1989-12-29 | 1993-01-12 | Supercomputer Systems Limited Partnership | System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling |
| US5107418A (en) * | 1990-06-11 | 1992-04-21 | Supercomputer Systems Limited Partnership | Method for representing scalar data dependences for an optimizing compiler |
| 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 |
| US5555412A (en) * | 1992-12-09 | 1996-09-10 | International Business Machines Corporation | Complier and method for alias checking in a complier |
| JPH06324881A (ja) | 1993-05-18 | 1994-11-25 | Fujitsu Ltd | メモリデータの重なり判定機能を備えたコンパイラ装置 |
| JP3373607B2 (ja) * | 1993-09-01 | 2003-02-04 | 富士通株式会社 | プロセッサの制御機構検証用命令列の自動生成方法及び装置 |
| US5713010A (en) * | 1995-02-10 | 1998-01-27 | Hewlett-Packard Company | Source line tracking in optimized code |
| JP3113792B2 (ja) * | 1995-04-27 | 2000-12-04 | 松下電器産業株式会社 | 最適化装置 |
| 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 |
| US6000028A (en) * | 1996-01-29 | 1999-12-07 | Digital Equipment Corporation | Means and apparatus for maintaining condition codes in an unevaluated state |
| US5854934A (en) * | 1996-08-23 | 1998-12-29 | Hewlett-Packard Company | Optimizing compiler having data cache prefetch spreading |
| US6009499A (en) * | 1997-03-31 | 1999-12-28 | Sun Microsystems, Inc | Pipelined stack caching circuit |
-
1997
- 1997-07-17 JP JP19226297A patent/JP3220055B2/ja not_active Expired - Fee Related
-
1998
- 1998-07-15 US US09/116,136 patent/US6243864B1/en not_active Expired - Lifetime
Non-Patent Citations (3)
| Title |
|---|
| A.V.Aho他著,原田賢一訳,「コンパイラ▲II▼」,株式会社サイエンス社,1990,p.790−796 |
| P.B.Gibbons他,"Efficient Instruction Scheduling for a Pipelined Architecture",ACM SIGPLAN Notices,1986,Vol.21,No.7,p.11−16 |
| 発明協会公開技報公技番号95−2022号 |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108427558A (zh) * | 2018-02-09 | 2018-08-21 | 芯海科技(深圳)股份有限公司 | 一种c编译器的窥孔优化方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| JPH1139167A (ja) | 1999-02-12 |
| US6243864B1 (en) | 2001-06-05 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3220055B2 (ja) | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 | |
| US5920723A (en) | Compiler with inter-modular procedure optimization | |
| US6427234B1 (en) | System and method for performing selective dynamic compilation using run-time information | |
| JP3311462B2 (ja) | コンパイル処理装置 | |
| US7725883B1 (en) | Program interpreter | |
| CN1518693A (zh) | 可重定目标的编译系统和方法 | |
| JP2002259134A (ja) | ポストリンク・コードの最適化方法及び装置 | |
| US5923883A (en) | Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations | |
| Hummel et al. | Annotating the Java bytecodes in support of optimization | |
| JP2000035893A (ja) | デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体 | |
| JP4041248B2 (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
| US6829760B1 (en) | Runtime symbol table for computer programs | |
| Novillo | Design and implementation of Tree SSA | |
| US20030079210A1 (en) | Integrated register allocator in a compiler | |
| JP2009169864A (ja) | コンパイル方法およびコンパイルプログラム | |
| US20050071827A1 (en) | Method and apparatus for bit field optimization | |
| US7240341B2 (en) | Global constant pool to allow deletion of constant pool entries | |
| JP3871312B2 (ja) | プログラム変換方法、これを用いたデータ処理装置及びプログラム | |
| Araujo et al. | Code generation for fixed-point DSPs | |
| JP3264901B2 (ja) | コンパイル装置及びコンパイル方法 | |
| JP2002182926A (ja) | コンパイル方法及びコンピュータ読み取り可能な記録媒体 | |
| JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
| JPH10275088A (ja) | リンク最適化方法 | |
| JP2729795B2 (ja) | 並列計算機及びその制御方法 | |
| JP3634712B2 (ja) | コンパイラ装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20070810 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080810 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080810 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090810 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090810 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100810 Year of fee payment: 9 |
|
| LAPS | Cancellation because of no payment of annual fees |