JPH0421031A - レジスタ再割付け方式 - Google Patents
レジスタ再割付け方式Info
- Publication number
- JPH0421031A JPH0421031A JP12347490A JP12347490A JPH0421031A JP H0421031 A JPH0421031 A JP H0421031A JP 12347490 A JP12347490 A JP 12347490A JP 12347490 A JP12347490 A JP 12347490A JP H0421031 A JPH0421031 A JP H0421031A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- block
- register
- equivalence
- instructions
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 claims abstract description 36
- 238000000034 method Methods 0.000 claims description 27
- 238000004458 analytical method Methods 0.000 claims description 26
- 238000005206 flow analysis Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 1
- 244000144992 flock Species 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明はレジスタ再割付は方式に関し、特にメモリ・レ
ジスタ間のロード/ストア命令をもち間接分岐命令をも
たないアーキテクチャ上におけるレジスタ再割付は方式
に関する。
ジスタ間のロード/ストア命令をもち間接分岐命令をも
たないアーキテクチャ上におけるレジスタ再割付は方式
に関する。
従来、レジスタ割付けは、コンパイラ内部の中間テキス
トまたはコード生成後のテキク、トに対して行われてお
り、(レジスタ割付けも含めて)機械語命令の生成完了
後にレジスタ割付けを再度状みる方式はなかった。
トまたはコード生成後のテキク、トに対して行われてお
り、(レジスタ割付けも含めて)機械語命令の生成完了
後にレジスタ割付けを再度状みる方式はなかった。
上述した従来のレジスタ割付は方式では、レジスタ割付
けをコンパイラ内部の中間テキストまたはコード生成後
のテキストに対して行うようになっていたので、必ずし
も同値関係(命令実行中のある時点でメモリの内容とレ
ジスタの内容とが同じ値である関係)を考慮したレジス
タ割付けが行われているとはかぎらず、同値関係を有効
利用しない不要なロード命令が生成される場合があり、
オブジェクトプログラムのサイズの増大や実行スピード
の低下を招くという欠点がある。
けをコンパイラ内部の中間テキストまたはコード生成後
のテキストに対して行うようになっていたので、必ずし
も同値関係(命令実行中のある時点でメモリの内容とレ
ジスタの内容とが同じ値である関係)を考慮したレジス
タ割付けが行われているとはかぎらず、同値関係を有効
利用しない不要なロード命令が生成される場合があり、
オブジェクトプログラムのサイズの増大や実行スピード
の低下を招くという欠点がある。
また、コンパイラの構成に依存する中間テキストまたは
コード生成後のテキストに対してレジスタを割り付けて
いたので、コンパイラごとにコンパイラ特有のレジスタ
割付は処理を用意する必要があるという欠点がある。
コード生成後のテキストに対してレジスタを割り付けて
いたので、コンパイラごとにコンパイラ特有のレジスタ
割付は処理を用意する必要があるという欠点がある。
本発明の目的は、上述の点に鑑み、命令列の制御移行に
沿って命令列を解析し命令のレジスタに関する依存関係
およびメモリ・レジスタ間の同値関係の状態を調査して
レジスタの再割付けを行い不要なロード命令を削除する
ことにより、オブジェクトプログラムのサイズの縮小お
よび実行スピードの向上を図るようにしたレジスタ再割
付は方式を提供することにある。
沿って命令列を解析し命令のレジスタに関する依存関係
およびメモリ・レジスタ間の同値関係の状態を調査して
レジスタの再割付けを行い不要なロード命令を削除する
ことにより、オブジェクトプログラムのサイズの縮小お
よび実行スピードの向上を図るようにしたレジスタ再割
付は方式を提供することにある。
本発明のレジスタ再割付は方式は、メモリ・レジスタ間
のロード/ストア命令をもち間接分岐命令をもたないア
ーキテクチャ上において、命令格納媒体から命令の並び
を入力してメモリ上に展開する命令入力手段と、この命
令入力手段によりメモリ上に展開された命令を解析し分
岐命令の直後と分岐先ラベル位置とで命令の並びを分割
して命令ブロックを作成するとともに分割した命令ブロ
ック間の制御の流れを求めて同値関係解析対象の命令ブ
ロックを限定する命令ブロック分割手段と、この命令ブ
ロック分割手段により分割された命令ブロック間のレジ
スタの依存関係を調査し命令ブロックの入口および出口
で生きているレジスタを求めるブロック間レジスタフロ
ー解析手段と、前記命令ブロック分割手段により限定さ
れた同値関係解析対象の命令ブロックについて制御フロ
ーに沿って命令の同値関係の状態を解析する同値関係解
析手段と、この同値関係解析手段により同値関係が解析
されたメモリからの不要なロード命令があれば矛盾がな
いようにレジスタの再割付けを行って不要なロード命令
を削除するレジスタ再割付は手段と、このレジスタ再割
付は手段によるレジスタ再割付は済みの命令の並びを命
令格納媒体に出力する命令出力手段とを有する。
のロード/ストア命令をもち間接分岐命令をもたないア
ーキテクチャ上において、命令格納媒体から命令の並び
を入力してメモリ上に展開する命令入力手段と、この命
令入力手段によりメモリ上に展開された命令を解析し分
岐命令の直後と分岐先ラベル位置とで命令の並びを分割
して命令ブロックを作成するとともに分割した命令ブロ
ック間の制御の流れを求めて同値関係解析対象の命令ブ
ロックを限定する命令ブロック分割手段と、この命令ブ
ロック分割手段により分割された命令ブロック間のレジ
スタの依存関係を調査し命令ブロックの入口および出口
で生きているレジスタを求めるブロック間レジスタフロ
ー解析手段と、前記命令ブロック分割手段により限定さ
れた同値関係解析対象の命令ブロックについて制御フロ
ーに沿って命令の同値関係の状態を解析する同値関係解
析手段と、この同値関係解析手段により同値関係が解析
されたメモリからの不要なロード命令があれば矛盾がな
いようにレジスタの再割付けを行って不要なロード命令
を削除するレジスタ再割付は手段と、このレジスタ再割
付は手段によるレジスタ再割付は済みの命令の並びを命
令格納媒体に出力する命令出力手段とを有する。
本発明のレジスタ再割付は方式では、命令入力手段が命
令格納媒体から命令の並びを入力してメモリ上に展開し
、命令ブロック分割手段が命令入力手段によりメモリ上
に展開された命令を解析し分岐命令の直後と分岐先ラベ
ル位置とで命令の並びを分割して命令ブロックを作成す
るとともに分割した命令ブロック間の制御の流れを求め
て同値関係解析対象の命令ブロックを限定し、ブロック
間レジスタフロー解析手段が命令ブロック分割手段によ
り分割された命令ブロック間のレジスタの依存関係を調
査し命令ブロックの入口および出口で生きているレジス
タを求め、同値関係解析手段が命令ブロック分割手段に
より限定された同値関係解析対象の命令ブロックについ
て制御フローに沿って命令の同値関係の状態を解析し、
レジスタ再割付は手段が同値関係解析手段により同値関
係が解析されたメモリからの不要なロード命令があれば
矛盾がないようにレジスタの再割付けを行って不要なロ
ード命令を削除し、命令出力手段がレジスタ再割付は手
段によるレジスタ再割付は済みの命令の並びを命令格納
媒体に出力する。
令格納媒体から命令の並びを入力してメモリ上に展開し
、命令ブロック分割手段が命令入力手段によりメモリ上
に展開された命令を解析し分岐命令の直後と分岐先ラベ
ル位置とで命令の並びを分割して命令ブロックを作成す
るとともに分割した命令ブロック間の制御の流れを求め
て同値関係解析対象の命令ブロックを限定し、ブロック
間レジスタフロー解析手段が命令ブロック分割手段によ
り分割された命令ブロック間のレジスタの依存関係を調
査し命令ブロックの入口および出口で生きているレジス
タを求め、同値関係解析手段が命令ブロック分割手段に
より限定された同値関係解析対象の命令ブロックについ
て制御フローに沿って命令の同値関係の状態を解析し、
レジスタ再割付は手段が同値関係解析手段により同値関
係が解析されたメモリからの不要なロード命令があれば
矛盾がないようにレジスタの再割付けを行って不要なロ
ード命令を削除し、命令出力手段がレジスタ再割付は手
段によるレジスタ再割付は済みの命令の並びを命令格納
媒体に出力する。
次に、本発明について図面を参照して詳細に説明する。
第1図は、本発明の一実施例に係るレジスタ再割付は方
式の構成を示すブロック図である。本実施例のレジスタ
再割付は方式は、命令人力手段1と、命令ブロック分割
手段2と、ブロック間レジスタフロー解析手段3と、同
値関係解析手段4と、レジスタ再割付は手段5と、命令
出力手段6と、命令展開メモリ7と、複数のブロックテ
ーブル8と、複数の同値関係表9と、ファイル、メモリ
等でなり機械語命令(以下、単に命令という)を格納す
る命令格納媒体10とから構成されている。
式の構成を示すブロック図である。本実施例のレジスタ
再割付は方式は、命令人力手段1と、命令ブロック分割
手段2と、ブロック間レジスタフロー解析手段3と、同
値関係解析手段4と、レジスタ再割付は手段5と、命令
出力手段6と、命令展開メモリ7と、複数のブロックテ
ーブル8と、複数の同値関係表9と、ファイル、メモリ
等でなり機械語命令(以下、単に命令という)を格納す
る命令格納媒体10とから構成されている。
第2図を参照すると、各ブロックテーブル8は、アドレ
ス順次チェーンと、アドレス順前チェーンと、命令ポイ
ンタと、入口で生きているレジスタと、出口で生きてい
るレジスタと、直先行ブロック数(P)と、直後続ブロ
ンク数(S)と、直先行ブロック数(p>の直先行ブロ
ックポインタと、直後続ブロック数(S)の直後続ブロ
ックポインタと、同値関係表ポインタと、非対象ブロッ
クフラグと、同価関係解析処理済みフラグとから構成さ
れている。各ブロックテーブル8は、ブロックテーブル
起点ポインタからアドレス順にアドレス順次チェーンお
よびアドレス順前チェーンによってチェーニングされて
いる。命令ポインタは、命令展開メモリ7上の命令のア
ドレスまたは命令展開メモリ7上の展開命令内相対オフ
セットでなり、命令展開メモリ7上に展開された命令中
の対応する命令ブロック(以下、単にブロックという)
の先頭命令をポイントしている。直先行ブロックポイン
タは、当該ブロックテーブル8のブロックに制御フロー
上で直先行するブロックのブロックテーブル8をポイン
トしている。直後続ブロックポインタは、当該フ゛ロソ
クテーフ゛ル8のフ゛ロックに制御フロー上で直後続す
るブロックのブロックテーブル8をポイントしている。
ス順次チェーンと、アドレス順前チェーンと、命令ポイ
ンタと、入口で生きているレジスタと、出口で生きてい
るレジスタと、直先行ブロック数(P)と、直後続ブロ
ンク数(S)と、直先行ブロック数(p>の直先行ブロ
ックポインタと、直後続ブロック数(S)の直後続ブロ
ックポインタと、同値関係表ポインタと、非対象ブロッ
クフラグと、同価関係解析処理済みフラグとから構成さ
れている。各ブロックテーブル8は、ブロックテーブル
起点ポインタからアドレス順にアドレス順次チェーンお
よびアドレス順前チェーンによってチェーニングされて
いる。命令ポインタは、命令展開メモリ7上の命令のア
ドレスまたは命令展開メモリ7上の展開命令内相対オフ
セットでなり、命令展開メモリ7上に展開された命令中
の対応する命令ブロック(以下、単にブロックという)
の先頭命令をポイントしている。直先行ブロックポイン
タは、当該ブロックテーブル8のブロックに制御フロー
上で直先行するブロックのブロックテーブル8をポイン
トしている。直後続ブロックポインタは、当該フ゛ロソ
クテーフ゛ル8のフ゛ロックに制御フロー上で直後続す
るブロックのブロックテーブル8をポイントしている。
同値関係表ポインタは、当該ブロックテーブル8のブロ
ックが同値関係解析対象のブロック(以下、同値関係解
析対象ブロックという)である場合に同値関係表9をポ
イントしている。非対象ブロックフラグは、同値関係解
析対象外のプロ、りを識別するためのフラグである。同
値関係解析処理済みフラグは、同値関係解析対象ブロッ
クを処理したかどうかを識別するためのフラグである。
ックが同値関係解析対象のブロック(以下、同値関係解
析対象ブロックという)である場合に同値関係表9をポ
イントしている。非対象ブロックフラグは、同値関係解
析対象外のプロ、りを識別するためのフラグである。同
値関係解析処理済みフラグは、同値関係解析対象ブロッ
クを処理したかどうかを識別するためのフラグである。
同しく、第2図を参照すると、同値関係表9は、同値レ
ジスタと、同値メモリのアドレス(例えば、ペースレジ
スタB2基準)および長さとからなる複数の同値関係情
報で構成されている。
ジスタと、同値メモリのアドレス(例えば、ペースレジ
スタB2基準)および長さとからなる複数の同値関係情
報で構成されている。
次に、このように構成された本実施例のレジスタ再割付
は方式の動作について説明する。
は方式の動作について説明する。
まず、命令入力手段1は、命令格納媒体10から1命令
ずつ命令を入力し、命令展開メモリ7上に展開した後、
命令ブロック分割手段2を呼び出す。
ずつ命令を入力し、命令展開メモリ7上に展開した後、
命令ブロック分割手段2を呼び出す。
命令ブロック分割手段2は、命令コードを解析し、命令
が分岐命令のときにのみブロック分割処理を行う。ブロ
ックとは、命令の並びの中で制御上入口が1つで出口が
1つ、かつ途中に出口以外の分岐がないような単位をい
い、分割されたブロックは、第2図に示すように、ブロ
ックテーブル8が命令ポインタにより命令展開メモリ7
中のブロックの先頭命令をポイントすることによって指
示される。命令ブロック分割手段2は、ブロック分割処
理では、以下の処理2,1〜2.4により分岐命令の直
後と分岐先ラヘル位置とでブロックを分割し、処理2.
5により同値関係解析対象ブロックを限定する。
が分岐命令のときにのみブロック分割処理を行う。ブロ
ックとは、命令の並びの中で制御上入口が1つで出口が
1つ、かつ途中に出口以外の分岐がないような単位をい
い、分割されたブロックは、第2図に示すように、ブロ
ックテーブル8が命令ポインタにより命令展開メモリ7
中のブロックの先頭命令をポイントすることによって指
示される。命令ブロック分割手段2は、ブロック分割処
理では、以下の処理2,1〜2.4により分岐命令の直
後と分岐先ラヘル位置とでブロックを分割し、処理2.
5により同値関係解析対象ブロックを限定する。
処虐λユ」電分岐命令の直後の命令を命令ポインタによ
ってポイントするプロ・7クテーブル8をサーチし、す
でにあれば何もしない。なければ、ブロックテーブル8
を1つ作成し、分岐命令の直後の命令をブロックの最初
の命令として命令ポインタを設定し、作成したブロック
テーブル8を命令のアドレス順にアドレス順次チェーン
およびアドレス順前チェーンによって直前および直後の
ブロックテーブル8とチェーニングする。
ってポイントするプロ・7クテーブル8をサーチし、す
でにあれば何もしない。なければ、ブロックテーブル8
を1つ作成し、分岐命令の直後の命令をブロックの最初
の命令として命令ポインタを設定し、作成したブロック
テーブル8を命令のアドレス順にアドレス順次チェーン
およびアドレス順前チェーンによって直前および直後の
ブロックテーブル8とチェーニングする。
カニ1ユ1:分岐命令が条件分岐命令の場合、条件分岐
命令を含むブロックの先頭命令をポイントするブロック
テーブル8と条件分岐命令の直後の命令をポイントする
ブロックテーブル8とを直先行ブロックポインタおよび
直後続プロ・ツクポインタによって互いにチェーニング
する。ここで、直先行ブロックとは制御フロー上の直前
のブロックをい堕直後続ブロンクとは制御フロー上の直
後のブロックをいう。
命令を含むブロックの先頭命令をポイントするブロック
テーブル8と条件分岐命令の直後の命令をポイントする
ブロックテーブル8とを直先行ブロックポインタおよび
直後続プロ・ツクポインタによって互いにチェーニング
する。ここで、直先行ブロックとは制御フロー上の直前
のブロックをい堕直後続ブロンクとは制御フロー上の直
後のブロックをいう。
処理I−1:分岐命令の分岐相対オフセントから下方向
への分岐ならば無条件にブロックテーブル8を作成し、
処理2.1と同様に作成したブロックテーブル8を命令
のアドレス順にアドレス順次チェーンおよびアドレス順
向チェーンによって直前および直後のブロックテーブル
8とチェーニングし、さらに処理2.2と同様に分岐命
令を含むブロックの先頭命令をポイントするブロックテ
ーブル8を制御フロー順に直先行ブロンクポインタおよ
び直後線ブロックポインタによって直先行ブロックおよ
び直後線ブロックのブロンクチ−プル8とチェーニング
する。
への分岐ならば無条件にブロックテーブル8を作成し、
処理2.1と同様に作成したブロックテーブル8を命令
のアドレス順にアドレス順次チェーンおよびアドレス順
向チェーンによって直前および直後のブロックテーブル
8とチェーニングし、さらに処理2.2と同様に分岐命
令を含むブロックの先頭命令をポイントするブロックテ
ーブル8を制御フロー順に直先行ブロンクポインタおよ
び直後線ブロックポインタによって直先行ブロックおよ
び直後線ブロックのブロンクチ−プル8とチェーニング
する。
n↓工土:分岐命令の分岐相対オフセントから上方向へ
の分岐ならば分岐先命令をポイントするブロックテーブ
ル8がないときにのみプロ、クチ−プル8を作成して、
処理2.1と同様に作成したブロックテーブル8を命令
のアドレス順にアドレス順次チェーンおよびアドレス順
向チェーンによって直前および直後のブロック九−ブル
8とチェーニングし、さらにブロックテーブル8を新し
く作成しなかった場合も含めて、処理2.2と同様に分
岐命令を含むブロックの先頭命令をポイントするブロッ
クテーブル8を制御フロー順に直先行ブロックポインタ
および直後線ブロックポインタによって直先行ブロック
および直後線ブロックのプロンクチ−プル8とチェーニ
ングする。
の分岐ならば分岐先命令をポイントするブロックテーブ
ル8がないときにのみプロ、クチ−プル8を作成して、
処理2.1と同様に作成したブロックテーブル8を命令
のアドレス順にアドレス順次チェーンおよびアドレス順
向チェーンによって直前および直後のブロック九−ブル
8とチェーニングし、さらにブロックテーブル8を新し
く作成しなかった場合も含めて、処理2.2と同様に分
岐命令を含むブロックの先頭命令をポイントするブロッ
クテーブル8を制御フロー順に直先行ブロックポインタ
および直後線ブロックポインタによって直先行ブロック
および直後線ブロックのプロンクチ−プル8とチェーニ
ングする。
!!I!JLL−i:分岐命令の分岐相対オフセントか
ら上方向への分岐ならば、ループとなる可能性があるの
で、分岐命令を含むブロックからアドレスの逆順にブロ
ックをたどり、分岐先のブロックまでの全ブロックを同
値関係解析対象外のブロックとして、各ブロックテーブ
ル8に非対象ブロックフラグを立てる。
ら上方向への分岐ならば、ループとなる可能性があるの
で、分岐命令を含むブロックからアドレスの逆順にブロ
ックをたどり、分岐先のブロックまでの全ブロックを同
値関係解析対象外のブロックとして、各ブロックテーブ
ル8に非対象ブロックフラグを立てる。
命令入力手段1と命令ブロック分割手段2との処理を繰
り返し、全命令について処理を行うと、ブロックテーブ
ル8単位の制御フローができあがり、同時に制御フロー
上でループに含まれない同値関係解析対象ブロックが非
対象ブロックフラグにより認識可能となる。
り返し、全命令について処理を行うと、ブロックテーブ
ル8単位の制御フローができあがり、同時に制御フロー
上でループに含まれない同値関係解析対象ブロックが非
対象ブロックフラグにより認識可能となる。
次に、ブロック間レジスクフロー解析手段3は、ブロッ
ク間のレジスタの依存関係(ブロック間にまたがってそ
の値が引き継がれるか否かの関係、レジスタ上の値が引
き継がれている間そのレジスタは「生きている」という
)を調べ、ブロック間のレジスタフローを表すために、
全ブロックに対して各ブロックの入口で生きているレジ
スタおよび各ブロックの出口で生きているレジスタをブ
ロックテーブル8に設定する。詳しくは、ブロック間レ
ジスタフロー解析手段3は、処理3.1を行った後、制
御フローの逆順に処理3.2〜3.3を繰り返す。
ク間のレジスタの依存関係(ブロック間にまたがってそ
の値が引き継がれるか否かの関係、レジスタ上の値が引
き継がれている間そのレジスタは「生きている」という
)を調べ、ブロック間のレジスタフローを表すために、
全ブロックに対して各ブロックの入口で生きているレジ
スタおよび各ブロックの出口で生きているレジスタをブ
ロックテーブル8に設定する。詳しくは、ブロック間レ
ジスタフロー解析手段3は、処理3.1を行った後、制
御フローの逆順に処理3.2〜3.3を繰り返す。
処理1エエ:制御フロー上の最後のブロックのブロック
テーブル8に、ブロックの出口で生きているレジスタを
設定する。
テーブル8に、ブロックの出口で生きているレジスタを
設定する。
mユ1:以下の条件■および■のいずれがを満たすレジ
スタを、ブロックの入口で生きているレジスタとして、
ブロックテーブル8に設定する。
スタを、ブロックの入口で生きているレジスタとして、
ブロックテーブル8に設定する。
■ ブロックの出口で生きていて、そのプロ7りで定義
されていない。
されていない。
■ ブロック内で最初に現れたレジスタアクセス命令が
レジスタ参照命令である。
レジスタ参照命令である。
処皿主−主:以下の条件■を満たすレジスタを、ブロッ
クの出口で住きているレジスタとして、ブロックテーブ
ル8に設定する。
クの出口で住きているレジスタとして、ブロックテーブ
ル8に設定する。
■ 直後続ブロンクの入口で生きている。
次に、同値間係解析手段4は、第2図に示すようにブロ
ックテーブル8から同値関係表ポインタによってチェー
ニングされた同値関係表9を使って、制御フロー上にメ
モリとレジスタとの間の同値関係を解析する(ここでい
う同値関係とは、命令実行中のある時点でメモリの内容
とレジスタの内容とが同じ値である関係のことであり、
一般にメモリからレジスタへのロード命令およびレジス
タからメモリへのストア命令によって関係付けられる)
。詳しくは、同値関係解析手段4は、ブロックテーブル
起点ポインタから制御フロー順にブロックテーブル8を
たどり、制御フロー上で−固まりになった同値関係解析
対象ブロックの集合の1つずつに対して、処理4.1を
実行した後、処理4.4でブロックBが見つからなくな
るまで、処理4.2〜4.4を繰り返し実行する。
ックテーブル8から同値関係表ポインタによってチェー
ニングされた同値関係表9を使って、制御フロー上にメ
モリとレジスタとの間の同値関係を解析する(ここでい
う同値関係とは、命令実行中のある時点でメモリの内容
とレジスタの内容とが同じ値である関係のことであり、
一般にメモリからレジスタへのロード命令およびレジス
タからメモリへのストア命令によって関係付けられる)
。詳しくは、同値関係解析手段4は、ブロックテーブル
起点ポインタから制御フロー順にブロックテーブル8を
たどり、制御フロー上で−固まりになった同値関係解析
対象ブロックの集合の1つずつに対して、処理4.1を
実行した後、処理4.4でブロックBが見つからなくな
るまで、処理4.2〜4.4を繰り返し実行する。
処理(工上:制御フロー順にブロックテーブル8をたど
り、以下の条件■および■のいずれかを満たすブロック
Bをさがし、同値関係表9を生成して初期化し、ブロッ
クテーブル8から同値関係表ポインタによってチェーニ
ングする。
り、以下の条件■および■のいずれかを満たすブロック
Bをさがし、同値関係表9を生成して初期化し、ブロッ
クテーブル8から同値関係表ポインタによってチェーニ
ングする。
■ 直先行ブロックがない(直先行プロ・ツク数が0)
。
。
■ すべての直先行ブロックが同値関係解析対象外のブ
ロック(非対象ブロックフラグが立っている)または同
値関係解析処理済みのブロック(同値関係解析処理済み
フラグが立っている)である。
ロック(非対象ブロックフラグが立っている)または同
値関係解析処理済みのブロック(同値関係解析処理済み
フラグが立っている)である。
1L4ff工:ブロソクB内の全命令に対し、制御順に
各命令の種別によって以下の■、■および■のいずれか
の処理を行う。
各命令の種別によって以下の■、■および■のいずれか
の処理を行う。
1 ロードt の 人
ロード元のメモリのアドレスおよび長さ(命令によって
決まる)が同値関係表9に設定されている場合(=ロー
ド元のメモリに対して同値関係が付いている場合)、レ
ジスタ再割付は手段5を呼び出す。それ以外の場合、同
値関係表9にロード元のメモリのアドレス、長さおよび
ロード先のレジスタを設定する。
決まる)が同値関係表9に設定されている場合(=ロー
ド元のメモリに対して同値関係が付いている場合)、レ
ジスタ再割付は手段5を呼び出す。それ以外の場合、同
値関係表9にロード元のメモリのアドレス、長さおよび
ロード先のレジスタを設定する。
■ ストアt の8人
ストア先のアドレスおよび長さで示されるメモリのどこ
か一部に対してでも同値関係表9に設定されている場合
(=ストア先のメモリに対して一部でも同値関係が付い
ている場合)、同値関係表9からその同値関係情報を削
除する。さらに、同値関係表9にストア先のメモリのア
ドレス、長さおよびストア元のレジスタを設定する。
か一部に対してでも同値関係表9に設定されている場合
(=ストア先のメモリに対して一部でも同値関係が付い
ている場合)、同値関係表9からその同値関係情報を削
除する。さらに、同値関係表9にストア先のメモリのア
ドレス、長さおよびストア元のレジスタを設定する。
■ ロード でもストア でもない 4何もしない
。
。
文す!」よ−」−ニブロックBの直後続ブロックのうち
の同値関係解析対象ブロックに、以下のように同値関係
情報を引き継く。
の同値関係解析対象ブロックに、以下のように同値関係
情報を引き継く。
■ ブロックBの直後続ブロックのブロックテーブル8
の同値関係表ポインタが空ポインタならば、同値関係表
9を生成してブロックテーブル8から同値関係表ポイン
タによってチェーニングし、ブロックBの同値関係表9
をコピーする。
の同値関係表ポインタが空ポインタならば、同値関係表
9を生成してブロックテーブル8から同値関係表ポイン
タによってチェーニングし、ブロックBの同値関係表9
をコピーする。
■ フロックBの直後続ブロックのブロックテーブル8
の同値関係表ポインタが空ポインタでなければ、その同
値関係表9の同値関係情報のうちのフロックBの同値関
係表9の内容と異なる同値関係情報は削除する。
の同値関係表ポインタが空ポインタでなければ、その同
値関係表9の同値関係情報のうちのフロックBの同値関
係表9の内容と異なる同値関係情報は削除する。
■ 同値関係解析処理済みフラグを立てる。
処理↓2工:ブロソクBの直後続ブロックのうちの以下
の条件■および■をすべて満たすブロックをブロックB
とする。
の条件■および■をすべて満たすブロックをブロックB
とする。
■ すべての直先行ブロンクが同値関係解析対象外のブ
ロックまたは同値関係解析処理済みのブロックである。
ロックまたは同値関係解析処理済みのブロックである。
■ 同値関係解析対象ブロックである。
条件■および■を満たすブロックがなければ、ブロック
Bの直後続ブロックの直先行ブロックから、以上の条件
■および■に加えて以下の条件■および■を満たすブロ
ックをブロックBとする。
Bの直後続ブロックの直先行ブロックから、以上の条件
■および■に加えて以下の条件■および■を満たすブロ
ックをブロックBとする。
■ フロックBでない。
■ 同値関係解析未処理のブロックである。
ブロックBの直後続ブロックの直先行ブロックに条件■
〜■を満たすブロックがなければ、さらに条件■〜■を
満たすブロックの直先行ブロックをたどって、条件■〜
■を満たすブロックをさがし、ブロックBとする。この
結果、ブロックBの直先行ブロックに1つでも同値関係
解析対象外のフロックがあった場合、フロックBのブロ
ックテーブル8の同値関係表ポインタが空ポインタなら
ば、同値関係表9を生成して初期化し、ブロックテーブ
ル8から同値関係表ポインタによってチェニングする。
〜■を満たすブロックがなければ、さらに条件■〜■を
満たすブロックの直先行ブロックをたどって、条件■〜
■を満たすブロックをさがし、ブロックBとする。この
結果、ブロックBの直先行ブロックに1つでも同値関係
解析対象外のフロックがあった場合、フロックBのブロ
ックテーブル8の同値関係表ポインタが空ポインタなら
ば、同値関係表9を生成して初期化し、ブロックテーブ
ル8から同値関係表ポインタによってチェニングする。
ブロックBのブロックテーブル8の同値関係表ポインタ
が空ポインタでなければ、その同値関係表9を初期化す
る。
が空ポインタでなければ、その同値関係表9を初期化す
る。
レジスタ再割付は手段5は、同値関係解析手段4から呼
び出されると、同値関係を引き継いで不要なロード命令
を削除するために、以下の処理51〜5.3により、レ
ジスタの再割付けを試みる。ここで、現在処理中のブロ
ックをBとし、メモリMとレジスタR1とに同値関係が
付いているとする。また、メモリMからレジスタR2へ
のロード命令をし、メモリMとレジスタR1との同値関
係を付けた命令をSi (i=1.・・・、nun≧
1)、ブロックBの先頭からロード命令しの直前の命令
までの区間をα、ロード命令しの直後の命令からブロッ
クBの最後までの区間をβとする。
び出されると、同値関係を引き継いで不要なロード命令
を削除するために、以下の処理51〜5.3により、レ
ジスタの再割付けを試みる。ここで、現在処理中のブロ
ックをBとし、メモリMとレジスタR1とに同値関係が
付いているとする。また、メモリMからレジスタR2へ
のロード命令をし、メモリMとレジスタR1との同値関
係を付けた命令をSi (i=1.・・・、nun≧
1)、ブロックBの先頭からロード命令しの直前の命令
までの区間をα、ロード命令しの直後の命令からブロッ
クBの最後までの区間をβとする。
さらに、ロード命令しで参照可能なレジスタRに対し、
ロード命令し以前でレジスタRの生きている区間γ (
R)とロード命令し以降でレジスタRの生きている区間
δ (R)とは、それぞれ以下のように求められる(た
だし、区間γ (R)および区間δ(R)は同値関係解
析対象ブロックの範囲内とする)。
ロード命令し以前でレジスタRの生きている区間γ (
R)とロード命令し以降でレジスタRの生きている区間
δ (R)とは、それぞれ以下のように求められる(た
だし、区間γ (R)および区間δ(R)は同値関係解
析対象ブロックの範囲内とする)。
IIT (R)のン゛め
■ 区間α内にレジスタRの定義命令(ロード命令、演
算命令等)があれば、区間α内の最後のレジスタRの定
義命令以降の区間のうちの最後のレジスタRの参照命令
までの区間を区間γ (R)とする。区間α内の最後の
レジスタRの定義命令以降の区間にレジスタRの参照命
令がなければ、レジスタRの定義命令のみを区間γ (
R)とする。
算命令等)があれば、区間α内の最後のレジスタRの定
義命令以降の区間のうちの最後のレジスタRの参照命令
までの区間を区間γ (R)とする。区間α内の最後の
レジスタRの定義命令以降の区間にレジスタRの参照命
令がなければ、レジスタRの定義命令のみを区間γ (
R)とする。
■ 区間α内にレジスタRの定義命令がなければ、ブロ
ックBの直先行ブロックPBi (i=1゜・・・、
n)内の命令を制御の逆順にたどり、最初に見つかった
レジスタRの定義命令以降のロード命令りまでの区間の
うちの最後のレジスタRの参照命令までの区間をそれぞ
れγi (R)とすると、区間γ1 (R)から区
間yn(R)までのすべての区間を合わせた区間をγ
(R)とする。それぞれレジスタRの参照命令がない場
合は■と同様である。直先行ブロックPBiにレジスタ
Rの定義命令がなければ、さらに直先行ブロックPBi
の直先行ブロックをたどって同様に求める。
ックBの直先行ブロックPBi (i=1゜・・・、
n)内の命令を制御の逆順にたどり、最初に見つかった
レジスタRの定義命令以降のロード命令りまでの区間の
うちの最後のレジスタRの参照命令までの区間をそれぞ
れγi (R)とすると、区間γ1 (R)から区
間yn(R)までのすべての区間を合わせた区間をγ
(R)とする。それぞれレジスタRの参照命令がない場
合は■と同様である。直先行ブロックPBiにレジスタ
Rの定義命令がなければ、さらに直先行ブロックPBi
の直先行ブロックをたどって同様に求める。
日δ(R)の)゛め
■ 区間β内にレジスタRの定義命令があれば、区間β
内の最初のレジスタRの定義命令以前の区間のうちの最
後のレジスタRの参照命令までの区間をδ (R)とす
る。区間β内の最初のレジスタRの定義命令以前にレジ
スタRの参照命令がなければ、δ(R)=φ(空)とす
る。
内の最初のレジスタRの定義命令以前の区間のうちの最
後のレジスタRの参照命令までの区間をδ (R)とす
る。区間β内の最初のレジスタRの定義命令以前にレジ
スタRの参照命令がなければ、δ(R)=φ(空)とす
る。
■ 区間β内にレジスタRの定義命令がなく、ブロック
Bの出口でレジスタRが生きていなければ、区間β内の
最後のレジスタRの参照命令までの区間を6 (R)と
する。区間β内にレジスタRの参照命令がなければ、δ
(R)=φとする。
Bの出口でレジスタRが生きていなければ、区間β内の
最後のレジスタRの参照命令までの区間を6 (R)と
する。区間β内にレジスタRの参照命令がなければ、δ
(R)=φとする。
■ 区間β内にレジスタRの定義命令がなく、ブロック
Bの出口でレジスタRが生きていれば、ブロックBの直
後続ブロックのうちの同値関係解析対象ブロックSBj
(j=1. ・=、m:m≧1)内の命令を制御順
にたどり、ロード命令りから最初に見つかったレジスタ
Rの定義命令までの区間のうちの最後のレジスタRの参
照命令までの区間をそれぞれδj (R)とすると、
区間δ1 (R)から区間δm (R)までのすべて
の区間を合わせた区間をδ (R)とする。それぞれレ
ジスタRの参照命令がない場合は、δj (R) =
φとする。
Bの出口でレジスタRが生きていれば、ブロックBの直
後続ブロックのうちの同値関係解析対象ブロックSBj
(j=1. ・=、m:m≧1)内の命令を制御順
にたどり、ロード命令りから最初に見つかったレジスタ
Rの定義命令までの区間のうちの最後のレジスタRの参
照命令までの区間をそれぞれδj (R)とすると、
区間δ1 (R)から区間δm (R)までのすべて
の区間を合わせた区間をδ (R)とする。それぞれレ
ジスタRの参照命令がない場合は、δj (R) =
φとする。
同値関係解析対象ブロックSBjにレジスタRの定義命
令がなく同値関係解析対象ブロックSBjの出口でレジ
スタRが生きていれば、さらに同値関係解析対象ブロッ
クSBjの直後続ブロックのうちの同値関係解析対象ブ
ロックをたどって同様に求める。同値関係解析対象ブロ
ックSBjの出口でレジスタRが生きていなければ、同
値関係解析対象ブロックSBj内の最後のレジスタRの
参照命令までの区間をδj (R)とする。
令がなく同値関係解析対象ブロックSBjの出口でレジ
スタRが生きていれば、さらに同値関係解析対象ブロッ
クSBjの直後続ブロックのうちの同値関係解析対象ブ
ロックをたどって同様に求める。同値関係解析対象ブロ
ックSBjの出口でレジスタRが生きていなければ、同
値関係解析対象ブロックSBj内の最後のレジスタRの
参照命令までの区間をδj (R)とする。
mユ」工:ロード命令しで定義したレジスタR2をレジ
スタR1に置き換えることによって、ロード命令りを削
除しようと試みる。以下の条件■を満たした場合、区間
δ(R2)内のレジスタR2の参照命令におけるレジス
タR2をレジスタR1に変更して、ロード命令りを削除
する。
スタR1に置き換えることによって、ロード命令りを削
除しようと試みる。以下の条件■を満たした場合、区間
δ(R2)内のレジスタR2の参照命令におけるレジス
タR2をレジスタR1に変更して、ロード命令りを削除
する。
■ ロード命令して定義されたレジスタR2が生きてい
る間、レジスタR1の定義命令がない。
る間、レジスタR1の定義命令がない。
すなわち、
[δ(R2)幹レジスタR1の定義命令コ条件■を満た
してロード命令りを削除した場合、区間δ(R2)がブ
ロックB以外のブロックにまたがっている場合は、また
がったブロックとの間のレジスタの依存関係を調査し直
して、各プロ。
してロード命令りを削除した場合、区間δ(R2)がブ
ロックB以外のブロックにまたがっている場合は、また
がったブロックとの間のレジスタの依存関係を調査し直
して、各プロ。
りの入口および出口で生きているレジスタの情報を各ブ
ロックテーブル8に再設定する。
ロックテーブル8に再設定する。
mユ主:処理5.1のレジスタR2からレジスタR1へ
の置換によるロード命令しの削除が不可能だった場合、
ロード命令して同値関係が付いているレジスタR1をレ
ジスタR2に置き換えることによって、ロード命令りを
削除しようと試みる。以下の条件■を満たした場合、区
間(γ (R1)+δ(R1)l内のレジスタR1の定
義/参照命令のレジスタR1をレジスタR2に変更して
、ロード命令りを削除する。
の置換によるロード命令しの削除が不可能だった場合、
ロード命令して同値関係が付いているレジスタR1をレ
ジスタR2に置き換えることによって、ロード命令りを
削除しようと試みる。以下の条件■を満たした場合、区
間(γ (R1)+δ(R1)l内のレジスタR1の定
義/参照命令のレジスタR1をレジスタR2に変更して
、ロード命令りを削除する。
■ 命令Siで同値関係を付けたレジスタR1が生きて
いる間で、かつロード命令りで定義したレジスタR2が
生きている間取外で、レジスタR2の定義/参照命令が
ない。すなわち、[γ(R1)+δ (R1)−δ (
R2)幹しジスクR2の定義/参照命令〕 条件■を満たしてロード命令りを削除した場合、区間(
γ (R1)+δ(R1)lがブロックB以外のブロッ
クにまたがっている場合は、またがったブロックとの間
のレジスタの依存関係を調査し直して、各ブロックの入
口および出口で生きているレジスタの情報を各ブロック
テーブル8に再設定する。
いる間で、かつロード命令りで定義したレジスタR2が
生きている間取外で、レジスタR2の定義/参照命令が
ない。すなわち、[γ(R1)+δ (R1)−δ (
R2)幹しジスクR2の定義/参照命令〕 条件■を満たしてロード命令りを削除した場合、区間(
γ (R1)+δ(R1)lがブロックB以外のブロッ
クにまたがっている場合は、またがったブロックとの間
のレジスタの依存関係を調査し直して、各ブロックの入
口および出口で生きているレジスタの情報を各ブロック
テーブル8に再設定する。
火星】ユニ:処理5.2のレジスタR1からレジスタR
2への置換によるロード命令しの削除も不可能だった場
合、レジスタの再割付けは行わない。
2への置換によるロード命令しの削除も不可能だった場
合、レジスタの再割付けは行わない。
命令出力手段6は、同値関係解析対象の全ブロックに関
して同値関係解析手段4とレジスタ再割付は手段5とに
よって最適化を行った後、命令を格納してあった任意の
命令格納媒体10にレジスタ再割付は済みの命令の並び
を出力する。
して同値関係解析手段4とレジスタ再割付は手段5とに
よって最適化を行った後、命令を格納してあった任意の
命令格納媒体10にレジスタ再割付は済みの命令の並び
を出力する。
以上説明したように本発明は、命令列の側御移行に沿っ
て命令列を解析し、命令のレジスタに関する依存関係お
よびメモリ・レジスタ間の同値関係の状態を調査してレ
ジスタの再割付けを行い、不要なロード命令を削除する
こと乙こより、オブジェクトプログラムのサイズを縮小
でき、実行スピードも向上させることができるという効
果がある。
て命令列を解析し、命令のレジスタに関する依存関係お
よびメモリ・レジスタ間の同値関係の状態を調査してレ
ジスタの再割付けを行い、不要なロード命令を削除する
こと乙こより、オブジェクトプログラムのサイズを縮小
でき、実行スピードも向上させることができるという効
果がある。
また、機械語命令に対して適用されるので、同一アーキ
テクチャ上のコンパイラに対して汎用的に適用すること
が可能であり、さらにコンパイラが出力したオブジェク
トプログラムに対しても適用可能になるという効果があ
る。
テクチャ上のコンパイラに対して汎用的に適用すること
が可能であり、さらにコンパイラが出力したオブジェク
トプログラムに対しても適用可能になるという効果があ
る。
第1図は本発明の一実施例に係るレジスタ再割付は方式
の構成を示す回、 第2図は第1図中の命令展開メモリ、ブロックテーブル
および同値関係表の内容を示す図である。 図において、 1・・・命令入力手段、 2・・・命令ブロック分割手段、 3・・・ブロック間レジスタフロー解析手段、4・・・
同値関係解析手段、 5・・・レジスタ再割付は手段、 6・・・命令出力手段、 7・・・命令展開メモリ、 8・・・ブロックテーブル、 9・・・同値関係表、 10・・命令格納媒体である。
の構成を示す回、 第2図は第1図中の命令展開メモリ、ブロックテーブル
および同値関係表の内容を示す図である。 図において、 1・・・命令入力手段、 2・・・命令ブロック分割手段、 3・・・ブロック間レジスタフロー解析手段、4・・・
同値関係解析手段、 5・・・レジスタ再割付は手段、 6・・・命令出力手段、 7・・・命令展開メモリ、 8・・・ブロックテーブル、 9・・・同値関係表、 10・・命令格納媒体である。
Claims (1)
- 【特許請求の範囲】 メモリ・レジスタ間のロード/ストア命令をもち間接分
岐命令をもたないアーキテクチャ上において、 命令格納媒体から命令の並びを入力してメモリ上に展開
する命令入力手段と、 この命令入力手段によりメモリ上に展開された命令を解
析し分岐命令の直後と分岐先ラベル位置とで命令の並び
を分割して命令ブロックを作成するとともに分割した命
令ブロック間の制御の流れを求めて同値関係解析対象の
命令ブロックを限定する命令ブロック分割手段と、 この命令ブロック分割手段により分割された命令ブロッ
ク間のレジスタの依存関係を調査し命令ブロックの入口
および出口で生きているレジスタを求めるブロック間レ
ジスタフロー解析手段と、前記命令ブロック分割手段に
より限定された同値関係解析対象の命令ブロックについ
て制御フローに沿って命令の同値関係の状態を解析する
同値関係解析手段と、 この同値関係解析手段により同値関係が解析されたメモ
リからの不要なロード命令があれば矛盾がないようにレ
ジスタの再割付けを行って不要なロード命令を削除する
レジスタ再割付け手段と、このレジスタ再割付け手段に
よるレジスタ再割付け済みの命令の並びを命令格納媒体
に出力する命令出力手段と を有することを特徴とするレジスタ再割付け方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP12347490A JPH0421031A (ja) | 1990-05-14 | 1990-05-14 | レジスタ再割付け方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP12347490A JPH0421031A (ja) | 1990-05-14 | 1990-05-14 | レジスタ再割付け方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0421031A true JPH0421031A (ja) | 1992-01-24 |
Family
ID=14861524
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP12347490A Pending JPH0421031A (ja) | 1990-05-14 | 1990-05-14 | レジスタ再割付け方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0421031A (ja) |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6325374A (ja) * | 1986-02-11 | 1988-02-02 | Nippon Denso Co Ltd | 内燃機関用点火装置 |
-
1990
- 1990-05-14 JP JP12347490A patent/JPH0421031A/ja active Pending
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6325374A (ja) * | 1986-02-11 | 1988-02-02 | Nippon Denso Co Ltd | 内燃機関用点火装置 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR101360512B1 (ko) | 기록 마스크를 사용하는 simd 아키텍처에 의한 레지스터 할당 | |
| US6725448B1 (en) | System to optimally create parallel processes and recording medium | |
| JPH01121938A (ja) | オブジェクト生成方法 | |
| JPH02272627A (ja) | デイジタル・コンピユータ・システムとその手続呼び出し方法 | |
| US7426719B2 (en) | Method and system for rewriting unwind data in the presence of exceptions | |
| JPS6325733A (ja) | コンパイラ処理方式 | |
| US7530063B2 (en) | Method and system for code modification based on cache structure | |
| EP3997593B1 (en) | A streaming compiler for automatic adjoint differentiation | |
| JP3318051B2 (ja) | 翻訳処理方法 | |
| JPH0421031A (ja) | レジスタ再割付け方式 | |
| JPH01118931A (ja) | プログラム変換方式 | |
| JPH04141737A (ja) | レジスタ再割付け方式 | |
| KR100912114B1 (ko) | 디지털 신호처리 프로세서에서 효과적인 데이터 전송을위한 메모리 운용 방법 | |
| Bugerya et al. | Parallelization of implementations of purely sequential algorithms | |
| Otto et al. | A language-based tuning mechanism for task and pipeline parallelism | |
| JP3511935B2 (ja) | マルチスレッド・プログラムにおけるファイル書込方式 | |
| JPH03127229A (ja) | レジスタ再割付け装置 | |
| JP2522372B2 (ja) | デ―タ駆動形計算機 | |
| JPH09106351A (ja) | 変数リネーム方法 | |
| HK40065117A (en) | A streaming compiler for automatic adjoint differentiation | |
| HK40065117B (en) | A streaming compiler for automatic adjoint differentiation | |
| JP3921722B2 (ja) | コンパイラ処理装置 | |
| JPH0229867A (ja) | 設計実行管理方式 | |
| JPS63163636A (ja) | 並列処理実行方式 | |
| JPH03164835A (ja) | インタプリタ型言語処理系における大域変数処理のコンパイル方法 |