JP3113792B2 - 最適化装置 - Google Patents

最適化装置

Info

Publication number
JP3113792B2
JP3113792B2 JP07104300A JP10430095A JP3113792B2 JP 3113792 B2 JP3113792 B2 JP 3113792B2 JP 07104300 A JP07104300 A JP 07104300A JP 10430095 A JP10430095 A JP 10430095A JP 3113792 B2 JP3113792 B2 JP 3113792B2
Authority
JP
Japan
Prior art keywords
instruction
resource
determined
priority
node
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 - Lifetime
Application number
JP07104300A
Other languages
English (en)
Other versions
JPH08305577A (ja
Inventor
謙介 小谷
旬子 佐山
旭 田中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP07104300A priority Critical patent/JP3113792B2/ja
Priority to TW085104068A priority patent/TW352424B/zh
Priority to US08/628,904 priority patent/US5850552A/en
Priority to DE69622219T priority patent/DE69622219T2/de
Priority to EP96302868A priority patent/EP0740251B1/en
Priority to KR1019960013068A priority patent/KR100238330B1/ko
Priority to CNB961084553A priority patent/CN1160627C/zh
Publication of JPH08305577A publication Critical patent/JPH08305577A/ja
Application granted granted Critical
Publication of JP3113792B2 publication Critical patent/JP3113792B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

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)
  • Storage Device Security (AREA)
  • Advance Control (AREA)
  • Document Processing Apparatus (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】機械語プログラム中の命令を並べ
替え、最適な実行順序にする最適化装置に関する。
【0002】
【従来の技術】近年、パイプライン処理導入により機械
語プログラムの実行の高速化を意図したマイコンシステ
ムが盛んに研究されている。このパイプライン処理では
機械語プログラムを実行するにあたって、機械語プログ
ラムの各命令の各ステージを並列に実行することで処理
の高速化を図っている。
【0003】パイプライン処理によって機械語プログラ
ム中の各命令が並列実行される様子を以下に説明する。
図14は、パイプライン処理が如何にして行われるかを
示した図である。本図において『mov mem,D0』、『mov
10,D1』、『add D0,D0』が縦方向に並んでいるが、これ
らの命令は、順々に実行されることを示している。本図
において『mov mem,D0』から見て横方向に5つの四角形
が並び、各四角形間は、白抜きの右向きの矢印で区切ら
れているが、これは、『mov mem,D0』が、『IF』、『DE
C』、『EX』、『MEM』、『WB』といった5つのステージ
を有し、これらのステージが順々に実行されることを示
している。
【0004】上記『IF』は、命令取り出しのステージで
あり、『DEC』は、命令解読のステージである。また『E
X』は、命令実行のステージである。『MEM』は、メモリ
からのデータ読み出し及びメモリに対するデータ書き込
みのステージであり、『WB』は、レジスタに対するデー
タの書き込みのステージである。『mov mem,D0』と同様
に、『mov 10,D1』から見て横方向にも『IF』、『DE
C』、『EX』、『MEM』、『WB』の5つのステージを示す
5つの四角形が並んでいる。また本図では、『mov mem,
D0』の『DEC』の下には『mov 10,D1』の『IF』があり、
『mov mem,D0』の『EX』の下には『mov 10,D1』の『DE
C』があることがわかる。これはパイプライン処理で
は、『mov 10,D1』の各ステージが、『mov mem,D0』の
各ステージより1ステージだけ遅れて実行されることを
示している。
【0005】『mov 10,D1』と同様に、『add D0,D0』か
ら見て横方向にも『IF』、『DEC』、『EX』、『MEM』、
『WB』の5つのステージを示す5つの四角形が並んでい
る。また本図では、『mov 10,D1』の『DEC』の下には
『add D0,D0』の『IF』があり、『mov 10,D1』の『EX』
の下には『add D0,D0』の『DEC』があることがわかる。
これはパイプライン処理では『add D0,D0』のステージ
が『mov 10,D1』の各ステージより1ステージだけ遅れ
て実行されることを示している。各命令のステージが上
記のように実行されることで、パイプライン処理におけ
る並列実行は行われる。
【0006】上記の例における『mov mem,D0』−『mov
10,D1』間、『mov 10,D1』−『addD0,D0』間は、その前
後の命令で用いた資源と異なった資源を用いていたた
め、命令間の依存関係が無かった。ところが、依存関係
がある2つの命令の実行順序が連続しており、先の命令
の実行結果を次の命令がALU演算、アドレス演算で使
用する場合、上記の命令の並列実行に支障が生じてしま
う(ここで、資源(リソース)とは、値を記憶しておく
ためのハードウェア的要素をいい、レジスタ、メモリが
該当する。また、ゼロフラグ、キャリーフラグ等、プロ
セッサが有する各種フラグも値を記憶しておくことがで
きるから、資源と称される。このような資源に値を記憶
させることは資源の定義といい、命令において資源にメ
モリに記憶された値を利用することは資源の使用とい
う。)。
【0007】次に依存関係がある2つの命令が連続した
ため、パイプライン処理に支障をきたす様子を次に説明
する。図15は、ハザードによるパイプライン処理への
障害を表した図である。『mov 10,D1』、『mov mem,D
0』、『add D0,D0』が縦方向に並んでいるが、これらの
命令は、並列実行可能であることを示している。本図に
おいて『mov mem,D0』から見て横方向に、『IF』、『DE
C』、『EX』、『MEM』、『WB』といった5つのステージ
が並び、『add D0,D0』の横方向にも、『IF』、『DE
C』、『EX』、『MEM』、『WB』といった5つのステージ
が並んでいる。本図において、『IF』、『DEC』までは
1ステージの遅れで、『add D0,D0』の各ステージが実
行されているが、次の『add D0,D0』の『EX』が『mov m
em,D0』の『MEM』ステージと同じサイクルで行われず、
『mov mem,D0』の『WB』ステージと同じサイクルで行わ
れていることがわかる。これは、『add D0,D0』の実行
には、『mov mem,D0』の実行結果が必要であり、その実
行結果が『mov mem,D0』が『EX』のステージでは確定し
ておらず、『mov mem,D0』が『MEM』のステージになっ
て初めて確定するからである。実際にメモリから読み出
された値がレジスタに書き込まれるのは『WB』ステージ
終了後であるが、プロセッサ内部では『MEM』ステージ
終了後にメモリから読み出された値が確定する。
【0008】この一例のように、命令と、その命令の実
行結果を利用する命令とが順に並ぶことで、パイプライ
ン処理を妨げてしまう場合がある。このように、パイプ
ライン処理において先行命令の実行結果が確定しないた
め、次の命令の実行が遅れてしまう状況は、ハザードと
称される。上記の一例は、ADD演算を一例にしている
が、他にも、MUL演算、SUB演算、DIV演算等の
ALU演算がメモリからの読み込みを伴う先行命令の実
行結果を用いている場合、この先行命令とALU演算の
命令とはハザードの要因となる。またアドレスレジスタ
を介したアドレス演算がメモリからの読み込みを伴う先
行命令の実行結果を用いている場合でも、先行命令とア
ドレス計算の命令とはハザードの要因になる。以上のハ
ザードは上記5つのステージを持つパイプラインプロセ
ッサに対応したものであるが、パイプラインの構成によ
り他の命令の並びがハザードの要因となることもある。
【0009】ハザードによる実行遅延や実行速度の低下
に対処するため、従来から命令スケジューリングといっ
た処理が行われてきた。命令スケジューリングとは、機
械語プログラムの命令の順序を並び替え、ハザードの要
因となる命令間に機械語プログラム内の別の命令を介在
させるハザード解消法である。このように命令スケジュ
ーリングを行うことでハザードを解消することが可能と
なるが、この並べ替えは、機械語プログラムの意味が変
わらないように行う必要がある。そのため、従来の命令
スケジューリングでは、有向非巡回グラフ(Directed A
cyclic Graph :以下、DAGと略す。)によって命令間
の依存関係を保存しておき、元のプログラムの意味が変
わらない範囲で基本ブロック内の命令の並べ替えを行っ
ていた(基本ブロックとは、プログラム中の連続命令列
であって、列の途中からの飛び出しもなく、また途中へ
の飛び込みもないものをいう。)。
【0010】以降このDAGについて説明する。従来の
DAGは、機械語プログラム中の各命令がノ−ド(命令
ノ−ド)になっており、各命令ノ−ド間は、定義−使用
間のリンク、使用−定義間のリンク、定義−定義間のリ
ンクによって結合されている。 ・定義−使用間のリンク 定義−使用間のリンクとは、ある命令によって定義され
た資源が、どの命令で使用されるかを示している。
【0011】(1)『mov 100,D0』 (2)『add D0,D1』 例えば、(1)、(2)の命令列には、レジスタD0を介
してのデータフローが存在している。このレジスタD0を
介してのデータフローが存在するため、命令(1)
(2)の順序を入れ替えることは、データフローを崩す
ことになる。そのため命令スケジューリングは、定義−
使用間のリンクの内容に基づいて、その定義−使用間の
リンクで規定された実行順序を入れ替えないように行わ
れる。 ・使用−定義間のリンク 使用−定義間のリンクとは、ある命令によって使用され
た資源が、どの命令で定義されたかを示している。命令
の並べ替えを行うにあたって、定義−使用間のリンクに
加えて、使用−定義間のリンクがなぜ必要であるかを以
下の(1)〜(4)の命令列を用いて説明する。
【0012】(1)『mov 100,D0』 (2)『add D0,D1』 (3)『mov 200,D0』 (4)『add D0,D2』 この命令列において(1)−(2)の命令列には、レジ
スタD0を介してのデータフローが存在している。(3)
−(4)の命令列にも、レジスタD0を介してのデータフ
ローが存在している。レジスタD1、D2の格納値の初期値
が0であったとする。そしてこの(1)〜(4)の命令
列を並べ替えて、(3)−(2)−(1)−(4)の順
序にすると、機械語プログラムの実行によってレジスタ
D1に200が加算され、レジスタD2に100が加算され
るので、機械語プログラムの意味が変わってしまう。同
様に(1)−(3)−(2)−(4)の順序にすると、
この機械語プログラムの実行によってレジスタD1に20
0が加算され、レジスタD2に200が加算されるので、
機械語プログラムの意味が変わってしまう。そのため、
DAGでは、(2)−(3)間においてレジスタD0に関
しての依存関係を使用−定義間のリンクに保存してお
き、瑕疵ある並べ替えを防いでいる。 ・定義−定義間のリンク 定義−定義間のリンクとは、ある命令によって定義され
た資源が、他のどの命令で定義されるかを示している。
命令の並べ替えを行うにあたって、定義−定義間のリン
クがなぜ必要であるかを以下の(1)(2)(3)の命
令列を用いて説明する。
【0013】(1)『mov 100,D0』 (2)『mov 200,D0』 (3)『add D0,D2』 例えば、(2)−(3)の命令列には、レジスタD0に対
してのデータフローが存在している。また(1)の命令
列は、レジスタD0についての定義である。この(1)〜
(3)の命令列を並べ替えて、(2)−(1)−(3)
の順序にすると、この機械語プログラムの実行によって
レジスタD0に100が加算されるので、機械語プログラ
ムの意味が変わってしまう。このような瑕疵ある並び替
えを防ぐため、DAGでは、(1)−(2)間において
レジスタD0に関して、定義−定義といった依存関係を定
義−定義間のリンクに保存しておき、瑕疵ある並べ替え
を防いでいる(尚、上記の(1)(2)のように、同一
資源の定義が順に並ぶような命令列は、アセンブラ言語
で記述されたプログラムには見られないが、コンパイラ
が高級言語から機械語言語への翻訳を行う際、アセンブ
リ言語を出力するにあたって出力されることがあ
る。)。
【0014】上記のDAGを参照して、最適化装置が機
械語プログラムの意味を保障しつつも命令スケジューリ
ングを行う様子を図面を参照しながら説明する。図16
は、従来の最適化装置によって並べ替えが行われる様子
を示した説明図である。本図において図中の白抜きの丸
○は、機械語プログラム中のそれぞれの命令を示し、ま
た丸中の数値は各命令の元の順序を示す。図中の4−5
−6−7間の実線の矢印は、これらの命令間のリンクを
示し、1−2−3間の破線の矢印はこれらの命令間のリ
ンクを示している。本図において、命令5、6を示す丸
は網掛けを施している。これらの命令5、6間のDAG
には、『×』が存在するが、これは命令5、6間でハザ
ードになっていることを示している。
【0015】最適化装置は、プログラム中の飛び越し命
令を検出し、検出結果に基づいて、機械語プログラムを
基本ブロックに分割する。この例では命令1〜7中に飛
び越し命令は無く、基本ブロックは、命令1から命令7
までの命令によって構成されている。分割後、機械語プ
ログラム中の各命令を命令ノ−ドとし、その基本ブロッ
ク内の定義−使用関係、使用−定義関係、定義−定義関
係を検出し、検出結果に基づいて、定義−使用間のリン
ク、使用−定義間のリンク、定義−定義間のリンクを生
成する。これらの間のリンクを生成することで、図中の
命令のうち、1−2−3の命令が1つに連鎖し、4−5
−6−7の命令が1つのDAGに結合する。生成したリ
ンクによって命令が連鎖すると、最適化装置は、これら
の間のリンクの実行順序が損なわれないように命令列の
並べ替えを行う。図の一例では、最適化装置は命令列4
−5−6−7の5−6間に命令列1−2−3の命令1を
挿入し、また、7の命令の後に2−3の命令を挿入し
て、並べ替えを行っている。このように最適化装置が、
ハザードの命令列間に他の命令を介在させることでハザ
ードの対処が行われ、実行遅延や実行速度の低下の解消
が行われる。
【0016】尚、4−5−1−6−7−2−3といった
順序は一例であり、4−1−5−2−6−7−3や、1
−4−5−2−6−7−3というように、DAGに示さ
れた依存関係を損なわない限り、どのような順序に並べ
替えてよい。
【0017】
【発明が解決しようとする課題】しかしながら上記従来
技術では、図17の一例に示すように、基本ブロックに
おける全ての命令がDAGによって1つに連鎖した場
合、ハザードを解消できる余地が残っているのに命令の
並べ替えが行えず、ハザードを解消することができなく
なることがあるといった問題点があった。
【0018】図17は、基本ブロック内の命令が1つに
結合したDAGを示す図である。本図において『mov (A
0),D1』『add D1,D1』では、『mov (A0),D1』で定義さ
れたレジスタD1の値を『add D1,D1』で使用するため、
ハザードが生じることがわかる。ここでハザードを解消
するには、連続の前方にある命令、即ち、『mov 10,D
0』『mov D0,A0』『mov A0,mem』・・・の何れかを挿
入する必要があるが、『mov (A0),D1』に至るDAGを
辿ってゆけば、これらの命令は何れも、『mov (A0),D
1』と依存関係があることがわかる。故に、ハザード要
因間にそれらの命令を移動することは、依存関係を崩す
ことになり、ハザードの解消は不可能になる。
【0019】本発明は上記問題点に鑑み、使用−定義間
の依存関係、定義−定義間の依存関係をグラフに表さな
くても、ハザードの解消を確実に行える最適化装置を提
供することを目的とする。
【0020】
【課題を解決するための手段】上記の問題点に鑑み、本
発明の請求項1の最適化装置は、プログラム中の命令の
順序を並び替えて命令の順序を最適化する最適化装置で
あって、前記プログラム中の分岐を含まないプログラム
部分について、資源に値を定義する命令を親とし、その
資源の値を使用する命令を子として、親子関係を有する
全ての命令を順次結合し、親から子への方向を有する有
向非巡回グラフを複数個生成する有向非巡回グラフ生成
手段と、親子関係にある命令の並びがハザードを生じさ
せることを示すハザード情報をその並びの親子間に設定
するハザード情報設定手段と、各有向非巡回グラフから
親が無い命令又は親が決定済みの命令を候補命令として
選択する候補選択手段と、選択された候補命令の中か
ら、ハザード情報が各有向非巡回グラフのどの親子間に
設定されているかに基づいて、ハザードを生じさせない
1つの命令を決定する命令決定手段と、命令が決定され
る毎に候補選択手段を起動する制御手段と、決定された
命令を示す情報を、決定された順に実行順序として記憶
する記憶手段とを備え、前記命令決定手段は、記憶手段
に記憶された命令情報により示される命令により、使用
されている資源と未使用の資源とを記憶する資源管理手
段と、候補選択手段により選択された候補命令に、資源
管理手段において使用中とされた資源の内容を破壊せ
ず、尚且つ、その親との間にハザード情報が設定されて
いない命令が存在する場合、その命令を決定すると共
に、 そのような命令が存在しない場合、以前に決定され
た命令を示す命令情報を記憶手段に記憶されている実行
順序から消去して、候補選択手段が以前に起動された際
に選択した候補命令のうち、以前に決定された命令とは
異なる命令を決定す る決定手段とからなることを特徴と
している。
【0021】また、請求項2の最適化装置は、決定手段
は、候補選択手段によって選択された命令と直前に決定
された命令との間にハザード情報が設定されているか設
定されていないかを判定する第1の判定部と、候補選択
手段によって選択された命令と直前に決定された命令と
の間にハザード情報が設定されていると第1の判定部に
よって判定された場合、第1の優先度をその選択された
命令に設定する第1の優先度設定部と、選択された命令
と直前に決定された命令との間にハザード情報が設定さ
れていないと第1の判定部によって判定された場合、第
1の優先度より高い第2の優先度をその選択された命令
に設定する第2の優先度設定部と、資源管理手段におい
て使用中の資源の内容を破壊しない命令であって、設定
された優先度が最も高い命令を1つ決定する適合命令決
定部とを備えることを特徴としている。
【0022】また、請求項3の最適化装置は、決定手段
は、有向非巡回グラフにおいて候補選択手段によって選
択された命令と直前に決定された命令との間にハザード
情報が設定されていない場合、その命令を含む有向非巡
回グラフの子の方向にハザード情報が存在するか存在し
ないかを判定する第2の判定部と、第2の優先度設定部
は、その命令を含む有向非巡回グラフの子の方向にハザ
ード情報が存在しないと第2の判定部によって判定され
た場合、その選択された命令に第1の優先度より高い第
2の優先度を設定し、その命令を含む有向非巡回グラフ
の子の方向にハザード情報が存在すると第2の判定部に
よって判定された場合、その選択された命令に第2の優
先度より高い第3の優先度を設定することを特徴として
いる。
【0023】また、請求項4の最適化装置は、資源管理
手段は、オンで使用中を示しオフで未使用を示す状態フ
ラグを各資源に対応づけて記憶する状態フラグ記憶部
と、適合命令決定部によって命令が決定されると、決定
された命令で定義される資源の状態フラグをオフからオ
ンに切り換える第1の切り換え部と有向非巡回グラフ中
のその命令の親命令の他の子命令において当該資源の値
を使用している他の全ての子命令が既に決定されている
ことを確認することにより適合命令決定部によって決定
された命令が資源の最後の使用であるか否かを判定する
第1の最終使用判定部と、最後の使用であると判定され
ると、その資源の状態フラグをオンからオフへと切り換
える第2の切り換え部とを備えることを特徴としてい
る。
【0024】また、請求項5の最適化装置は、決定手段
は、第1、第2の優先度設定部によって優先度が設定さ
れた命令が資源の状態フラグがオンである資源の最後の
使用であるか否かを判定する第2の最終使用判定部と、
適合命令決定部は、第2の最終使用判定部によって最後
の使用であると判定された命令の優先度が最も高けれ
ば、その命令を決定することを特徴としている。
【0025】また、請求項6の最適化装置は、記憶手段
は更に、第1、第2の優先度設定部によって優先度が設
定された命令が何れも使用中の資源を定義する場合、直
前に記憶された命令の情報を削除し、第1の切り換え部
は更に、情報が削除された命令で定義される資源の状態
フラグをオンからオフに切り換え、適合命令決定部は更
に、命令の情報が削除されると、状態フラグ記憶部にお
いて使用中の資源の値を破壊せず、かつ優先度が最も高
い命令を決定することを特徴としている。
【0026】また、請求項7の最適化装置は、決定手段
は更に、第1、第2の優先度設定部によって設定された
優先度が最も高い命令において定義されている資源が状
態フラグ記憶部において使用中である場合、当該状態フ
ラグ記憶部において未使用である資源を判定する未使用
資源判定部と、その優先度が最も高い命令において定義
される資源と、その命令を含む有向非巡回グラフにおけ
る当該資源とデータフローを有する命令で使用されてい
る当該資源とを、未使用と判定された資源に書き換える
書き換え部を備え、適合命令決定部は、未使用の資源に
書き換えられた命令を決定することを特徴としている。
【0027】
【作用】本発明の請求項1の最適化装置によれば、前記
プログラム中の分岐を含まないプログラム部分につい
て、資源に値を定義する命令を親とし、その資源の値を
使用する命令を子として、親子関係を有する全ての命令
が順次結合され、親から子への方向を有する有向非巡回
グラフが有向非巡回グラフ生成手段によって複数個生成
される。有向非巡回グラフ生成手段によって生成された
この有向非巡回グラフは、定義−使用間のリンクのみで
結合され、使用−定義間のリンク、定義−定義間のリン
ク無しで上記プログラム部分内の資源間の依存関係を表
している。有向非巡回グラフの生成後、親子関係にある
命令の並びがハザードを生じさせることを示すハザード
情報がハザード情報設定手段によってその並びの親子間
に設定される。
【0028】このように生成された各有向非巡回グラフ
から親が無い命令又は親が決定済みの命令が候補命令と
して候補選択手段によって選択される。選択された命令
の中から、ハザード情報が各有向非巡回グラフのどの親
子間に設定されているかに基づいて、命令決定手段によ
ってハザードを生じさせない1つの命令が決定される。
命令決定手段によって命令が決定される毎に制御手段に
よって候補選択手段が起動される。命令決定手段による
決定と、制御手段による起動制御とが繰り返されること
で、決定された命令を示す情報が記憶手段によって決定
された順に実行順序として記憶される。
【0029】上記命令決定手段は、資源管理手段、決定
手段を含んでおり、この資源管理手段は、記憶手段に記
憶された命令情報が示す命令により、使用される資源と
未使用の資源とを記憶している。また、候補選択手段に
より選択された候補命令に、資源管理手段において使用
中とされた資源の内容を破壊せず、尚且つ、その親との
間にハザード情報が設定されていない命令が存在する場
合、その命令が決定され、 そのような命令が存在しない
場合、以前に決定された命令を示す命令情報が記憶手段
に記憶されている実行順序から消去され、候補選択手段
が以前に起動された際に選択した候補命令のうち、以前
に決定された命令とは異なる命令が決定される。 資源管
理手段、決定手段が上記のように作用した結果、記憶手
段によって記憶された実行順序がハザードが解消された
実行順序になる。
【0030】また、請求項2の最適化装置によれば、候
補選択手段によって選択された命令と直前に決定された
命令との間にハザード情報が設定されているか設定され
ていないかが第1の判定部によって判定される。候補選
択手段によって選択された命令と直前に決定された命令
との間にハザード情報が設定されていると判定された場
合、第1の優先度がその選択された命令に設定される。
【0031】一方選択された命令と直前に決定された命
令との間にハザード情報が設定されていないと判定され
た場合、第2の優先度設定部によって第1の優先度より
高い第2の優先度がその選択された命令に設定される。
優先度の設定がこのように行われると、資源管理手段に
おいて使用中の資源の内容を破壊しない命令であって、
設定された優先度が最も高い命令が適合命令決定部によ
って1つ決定される。
【0032】また、請求項3の最適化装置によれば、有
向非巡回グラフにおいて候補選択手段によって選択され
た命令と直前に決定された命令との間にハザード情報が
設定されていない場合、第2の判定部によってその命令
を含む有向非巡回グラフの子の方向にハザード情報が存
在するか存在しないかが判定される。存在しないと判定
された場合、第2の優先度設定部によってその選択され
た命令に第1の優先度より高い第2の優先度が設定され
る。
【0033】一方、その命令を含む有向非巡回グラフの
子の方向にハザード情報が存在すると第2の判定部によ
って判定された場合、第2の優先度設定部によってその
選択された命令に第2の優先度より高い第3の優先度が
設定される。また、請求項4の最適化装置によれば、資
源管理手段は、状態フラグ記憶部を含んでいる。また状
態フラグ記憶部には、オンで使用中を示しオフで未使用
を示す状態フラグを各資源に対応づけて記憶している。
適合命令決定部によって命令が決定されると、第1の切
り換え部によって決定された命令で定義される資源の状
態フラグがオフからオンに切り換えられる。また、第1
の最終使用判定部によって有向非巡回グラフ中のその命
令の親命令の他の子命令において当該資源の値を使用し
ている他の全ての子命令が既に決定されていることが確
認される。この確認処理により、適合命令決定部によっ
て決定された命令が資源の最後の使用であるか否かが判
定される。最後の使用であると判定されると、第2の切
り換え部によってその資源の状態フラグがオンからオフ
へと切り換えられる。
【0034】また、請求項5の最適化装置によれば、決
定手段は更に、第1、第2の優先度設定部によって優先
度が設定された命令が第2の最終使用判定部によって当
該資源の最後の使用であるか否かが判定される。第2の
最終使用判定部によって最後の使用であると判定された
命令の優先度が最も高ければ、適合命令決定部によって
その命令が決定される。
【0035】また、請求項6の最適化装置によれば、第
1、第2の優先度設定部によって優先度が設定された命
令が何れも使用中の資源を定義する場合、直前に記憶さ
れた命令の情報が記憶手段によって削除され、第1の切
り換え部によって情報が削除された命令で定義される資
源の状態フラグがオンからオフに切り換えられる。命令
の情報の削除が行われると、適合命令決定部によって、
状態フラグ記憶部において使用中の資源の値を破壊せ
ず、かつ優先度が最も高い命令が決定される。
【0036】また、請求項7の最適化装置によれば、第
1、第2の優先度設定部によって設定された優先度が最
も高い命令において定義されている資源が状態フラグ記
憶部において使用中である場合、未使用資源判定部によ
って当該状態フラグ記憶部において未使用である資源が
判定される。未使用資源が判定されると、その優先度が
最も高い命令において定義される資源と、その命令を含
む有向非巡回グラフにおける当該資源とデータフローを
有する命令で使用されている当該資源とが書き換え部に
よって未使用と判定された資源に書き換えられる。この
ように未使用の資源に書き換えられた命令が適合命令決
定部によって決定される。
【0037】
【実施例】以降、本発明の実施例を図面を参照しながら
説明する。図1は、最適化装置の内部構成を示したブロ
ック図である。最適化装置は、図1に示すように、命令
入力部11と、コード分割部12と、データフロー解析
部13と、DAG保持部14と、DAG生成部15と、
リソース状態保持部16と、出力リストバッファ17
と、スケジューリング部18と、命令出力部19とで構
成される。
【0038】命令入力部11は、ファイル形態で保存さ
れているアセンブラソースコードを読み込み、これを内
部表現(以下中間言語と称する)に変換する。コード分
割部12は、機械語プログラム中の飛び越し命令を検出
し、飛び越し命令に基づいて、中間言語のアセンブラソ
ースコードを基本ブロックに分割する。
【0039】データフロー解析部13は、基本ブロック
の出入り口で生きている資源を調べる。ここで、基本ブ
ロックの入り口において生きている資源とは、その設定
値が基本ブロックの内部、若しくは、その基本ブロック
の後順の基本ブロックで使用される資源をいい、出口に
おいて生きている資源とは、その設定値が基本ブロック
の後順の基本ブロックで使用される資源をいう。
【0040】DAG保持部14は、DAGを保持する。
本実施例でのDAGは、1つのデータフローを有する命
令列がデータフローの向きを示すリンクによって結合さ
れている。本実施例におけるDAGの一例と、このDA
Gのデータ構造のフォーマットを図2(a)(b)
(c)に示す。図2(a)に示すように、DAGは、基
本ブロック中の各命令に付された連番と、その連番の命
令の内容と、その命令の親の命令ノ−ドとなる命令への
ポインタと、その命令の子の命令ノ−ドとなる命令への
ポインタと、当該親の命令とのリンクにはハザードが存
在するか否かを示す存否フラグとによって各命令ノ−ド
間のリンクを表している。
【0041】図2(b)にDAG保持部14によって保
持されるDAGの一例を示す。この図は、図17に示し
た一例と同様、『mov 10,D0』『mov D0,A0』『mov A0,m
em』『mov 20,A0』『mov (A0),D1』『add (A0),D1』『a
dd D1,D1』といった命令列のDAGを表している。また
本図では、破線によって資源間のデータフローを表して
いる。本図のDAGと図17のDAGと異なるのは、D
AG保持部14に保持されるDAGが定義−使用間のリ
ンクのみで結合されており、『mov A0,mem』〜『mov 2
0,A0』間が使用−定義間のリンクで結合されていない点
である。このようにDAG保持部14によって保持され
るDAGは、使用−定義間のリンクで結合されていない
ため、命令の並べ替えの自由度が高まっていることがわ
かる。
【0042】図2(c)に他のDAGの一例を示す。本
図は、基本ブロックの入り口でレジスタA0が生きている
DAGを示している。DAG生成部15は、内部表現状
態の機械語プログラムから定義−使用の関係を検出し、
検出結果に基づいて、定義−使用間のリンクのみによっ
て結合されたDAGを生成し、生成したDAGをDAG
保持部14に保持させる。
【0043】図3は、DAG生成部15がDAGを生成
する様子を示したフロ−チャ−トである。図3のフロ−
チャ−トにおいて、ステップg1で命令ノ−ドが資源の
使用であるかを判定する。資源の使用であれば、ステッ
プg2でその資源の定義の命令ノ−ドから使用の命令ノ
−ドへとリンクを張る。ステップg1でNoであった場
合、あるいは、ステップg1でYesであってステップg
2でリンクが張られた場合、ステップg3においてその
命令が資源の定義であるかを判定する。ステップg3で
Yesであると、ステップg4に移行して、その資源の定
義位置を定義位置情報に反映する。ステップg0での繰
り返し制御によって、ステップg1〜ステップg4が基
本ブロック中の全ての命令に対して繰り返されると、機
械語プログラム中の命令ノ−ドは、定義−使用間のリン
クによって結合され、DAGが生成される(尚、定義位
置情報については、本発明の主眼ではないので説明を省
略する。)。
【0044】また、DAG生成部15は、上記DAGの
リンクを生成した後、ALU演算、アドレス演算を行う
命令ノ−ドを検出し、検出した命令ノ−ドで使用される
資源が、その親命令ノ−ドでメモリから読み込まれた値
により定義されているかを判定する。定義されている場
合、DAG生成部15は、その命令ノ−ドの存否フラグ
をONにし、リンクにハザードが存在する旨を残す。
【0045】尚本実施例では、DAG生成部15はAL
U演算、アドレス演算を行う命令ノ−ドと、メモリから
の読み込みで定義された命令ノ−ドとの組み合わせを検
出したが、これは従来技術で紹介した5つのステージを
持つパイプライン処理を対象としたためであり、DAG
生成部15がどのような命令ノ−ドの組み合わせをハザ
ードとして検出するかは、パイプラインの構成に応じて
決定される。
【0046】リソース状態保持部16は、リソース状態
情報を保持する。リソース状態情報の一例を図4(a)
に示す。リソース状態情報には、スケジューリング部1
8によって出力リストバッファ17中に格納された命令
列の末尾の命令において、各資源が使用中であるか未使
用であるかが反映されている。本図において、横方向の
項目にレジスタD0、レジスタD1、レジスタD2、アドレス
レジスタA0、キャリーフラグといった文字列が並び、レ
ジスタD0の下の欄に、その前段の基本ブロックからレジ
スタD0が使用中であることを示した『S』が存在してい
る。レジスタD1の下の欄に、基本ブロックにおいて命令
列4で当該レジスタD1が定義されることを示した『4』
が存在している。またレジスタD2の下に『未使用』が存
在している。
【0047】尚、レジスタD0が『S』と設定されている
のは、出力リストバッファ17が未格納の状態であっ
て、基本ブロックの入り口において何れかの資源が生き
ている場合、リソース状態のうち、その生きている資源
に対応する項目が使用中に設定されるからである。ま
た、レジスタD1が『4』と設定されているのは、出力リ
ストバッファ17に連番4の命令ノ−ドが格納された状
態の場合、リソース状態のうち、連番4の命令ノ−ドで
定義されている資源に対応する項目が使用中になるから
である。
【0048】また、リソース状態と図2(b)に示した
命令ノ−ド1−2−3間のDAGとの対応を図4(b)
に示す。本図において、命令ノ−ド1−2間では、命令
ノ−ド1においてレジスタD0が定義されているので、リ
ソース状態情報のレジスタD0の項目が、命令ノ−ド1で
定義された資源が使用中であるといった旨の『1』に設
定される。命令ノ−ド2−3間では、命令ノ−ド2にお
いてレジスタA0が定義されているので、リソース状態情
報のレジスタA0の項目が、命令ノ−ド2で定義された資
源が使用中であるといった旨の『2』に設定される。レ
ジスタD0については命令ノ−ド2により使用が終了した
ため、レジスタD0の項目が未使用に戻されている。
【0049】更に、リソース状態と図2(b)に示した
命令ノ−ド4−5−6間DAGとの対応を図4(c)に
示す。本図において、命令ノ−ド5−6間では、命令ノ
−ド5においてレジスタD1が定義されているので、リソ
ース状態情報のレジスタD1の項目が、命令ノ−ド5で定
義された資源が使用中であるといった旨の『5』に設定
される。
【0050】出力リストバッファ17は、スケジューリ
ング部18によって出力された命令が格納されるバッフ
ァであり、スケジューリング部18によって出力された
命令を出力リストバッファ17がその出力順に格納する
ことで、機械語プログラム中の命令が新たな順序にな
る。スケジューリング部18は、DAG生成部15が生
成したDAGと、DAG生成部15が保持するリソース
状態情報とから機械語プログラムの命令スケジューリン
グを行って命令を1つずつ選択し、選択された命令ノ−
ドを順々に出力リストバッファ17に出力する。
【0051】命令出力部19は、スケジューリング部1
8が行った命令スケジュールの実行結果に基づいて、ア
センブラソースコードを生成し、出力する。次にスケジ
ューリング部18が行う命令スケジューリングを、図5
〜図8のフロ−チャ−トを参照しながら詳細に説明す
る。 {1−0}リソース状態に基づいた命令出力 図5は、スケジューリング部18の処理過程のメインフ
ロ−チャ−トである。
【0052】図5のステップs1では、スケジューリン
グ部18はそれぞれのDAGの命令ノ−ドから出力候補
をノミネートし、ノミネートした各DAGの命令ノ−ド
を出力候補としてステップs2に与える。ステップs2
は、出力候補の各命令ノ−ドについてステップs3〜ス
テップs10を繰り返すよう、繰り返し処理を制御す
る。この繰り返し処理においてステップs3では、スケ
ジューリング部18は、ハザードがどのDAGにおける
どのリンクに位置するかに基づいてノミネートされた出
力候補の命令ノ−ドのうち、どれを優先すべきかを決定
する。
【0053】ステップs4では、リソース状態情報を参
照して、選択された命令ノ−ドで定義が発生しない場
合、ステップs5で出力リストバッファ17に選択され
た命令ノ−ドを出力する。またステップs4においてこ
の命令ノ−ドで定義される資源があってもこれが使用中
の資源を定義するものではない場合、ステップs5で出
力リストバッファ17に選択された命令ノ−ドを出力す
る。
【0054】ステップs4の判定において選択された命
令ノ−ドで定義される資源が使用中であると、ステップ
s11でその選択された命令ノ−ドが最後の使用である
かの判定を行う。ステップs11での判定でYesである
と、ステップs5で、命令ノ−ドを出力リストバッファ
17に出力し、その命令ノ−ドを出力リストバッファ1
7の命令列の末尾に追加する。尚、ステップs11での
判定処理は、具体的には、使用中である資源を定義した
命令ノ−ドのその資源に関する子の命令ノ−ドが1つを
除いて既に出力されており、残る1つの命令ノ−ドが現
在選択された命令ノ−ドであることを確認することで行
われる。
【0055】ステップs5での出力後、スケジューリン
グ部18は、ステップs6でその選択された命令ノ−ド
を出力したことにより基本ブロックの全ての命令ノ−ド
を出力したかを判定し、そうでなければステップs7で
リソース状態情報を更新する。一方、ステップs11で
Noならその命令ノ−ドの出力は不可能になるため、ステ
ップs12でその命令ノ−ドを取り除く。
【0056】ステップs6では当該命令ノ−ドを出力し
たことにより基本ブロックの全ての命令を出力し終わっ
たかを判定する。ステップs6でYesならば、戻り値にO
kを設定してリターンする。ステップs6でNoならば、
出力リストバッファ17の末尾に追加された命令ノ−ド
に対してステップs7でリソース状態の更新を行い、選
択された命令ノ−ドで定義された資源を判定し、リソー
ス状態のうち、その資源の項目を未使用から使用中へと
変更する。また選択された命令が何れかの資源の最後の
使用である場合には、その資源の項目を未使用に変更す
る。
【0057】{1−1}図5のフロ−チャ−トに示すス
テップs8での再帰呼出による命令出力 上記のようにステップs7でリソース状態の更新が行わ
れるとスケジューリング部18はステップs8で再帰呼
出を行う。そしてこのステップs8での再帰呼出が行わ
れる度に、スケジューリング部18は、ステップs1〜
s8の処理を行う。尚、ステップs1〜ステップs8に
おいてステップs4でOkとなれば、出力リストバッファ
17の命令列の末尾に選択された命令ノ−ドを追加す
る。換言すれば、再帰呼出によってステップs1〜ステ
ップs8が繰り返されることで、リソース状態に相応し
い命令が出力リストバッファ17に格納されてゆくこと
になる。
【0058】このように、ステップs8での再帰呼出が
繰り返されることで出力リストバッファ17中に命令列
が形成されてゆく。 {1−2}図5のフロ−チャ−トに示すステップs2で
の繰り返し制御 図5のフロ−チャ−トに示すステップs12で候補から
の選択された命令ノ−ドが取り除かれると、ステップs
2に移行する。ステップs2は、出力候補の各命令ノ−
ドについてステップs1〜ステップs10の繰り返し処
理を制御する。この繰り返しによってステップs1で探
索された出力候補の残りの全てについてステップs3〜
ステップs10の処理が繰り返される。尚、この繰り返
しの途中でステップs4、ステップs11の何れかがYe
sになった場合、この繰り返し処理は途中で終わる。即
ち、リソース状態に相応しい命令ノ−ドが出力候補から
探し出されるまで、ステップs2での繰り返し制御は行
われる。
【0059】{1−3.候補のノミネート}図5のフロ
−チャ−トに示すステップs1での探索は、依存関係が
損なわれないように、出力候補となる命令ノ−ドをノミ
ネートしてゆく。そのためこのステップs1は、図6の
サブフロ−チャ−トで構成されている。図6は、図5に
おけるフロ−チャ−トのステップs1の処理過程を示す
フロ−チャ−トである。本フロ−チャ−トにおいてステ
ップt1は、親へのリンクが存在するかを判定してい
る。DAG生成部15で生成されたDAGにおいて、先
頭に位置する命令ノ−ドが選択された場合、先頭の命令
ノ−ドには親へのリンクが無いのでnoとなり、DAG中
の先頭の命令ノ−ドが出力候補となる。ステップt2で
は、親命令ノ−ドが全て出力済みかが判定される。この
ステップt2での判定でYesであると、命令ノ−ドが出
力候補になる。これは、DAGにおいて親の命令ノ−ド
が全て出力されない限り、その子孫の命令ノ−ドは出力
されないようにしているからである。このようにステッ
プt1、ステップt2が順々に行われることで、命令ノ
−ドが各DAGから、順々に出力候補としてノミネート
されてゆく。
【0060】例えば、命令列の並びが『mov 50、D0』『m
ov 20、D1』『add D0、D1』である場合、『add D0,D1』の
出力は、『mov 20,D1』、『mov 50,D0』の出力後でない
と、依存関係が損なわれてしまう。そのため、本フロ−
チャ−トのステップt2では、『add D0,D1』の出力に
あたって、『mov 20,D1』、『mov 50,D0』が出力された
ことを確認し、『mov 20,D1』、『mov 50,D0』が出力さ
れた後に『add D0,D1』の出力が行われるようにしてい
る。
【0061】{1−4.各命令ノ−ドへの優先順位の設
定}図5のフロ−チャ−トに示すステップs3は、ハザ
ードのリンクがどこに存在するに基づいて、DAGの命
令ノ−ドが優先して選択されるようにしている。図7
は、図5におけるフロ−チャ−トのステップs3の処理
過程を示すサブフロ−チャ−トである。このサブフロ−
チャ−トにおいてステップp1で、各出力候補の命令ノ
−ドにはその親ノ−ドとの間にハザードが存在し、かつ
その親ノ−ドが直前に出力リストバッファ17に格納さ
れたかを判定しており、このステップp1がYesであれ
ばその命令ノ−ドに優先順位3を与えている。ステップ
p1においてNoであると、命令ノ−ドの下流の命令ノ−
ド(下流の命令ノ−ドとは、当該命令ノ−ドの子命令ノ
−ド以降の命令ノ−ド)とのリンクにハザードが存在す
るかが判定されるが、このステップp2においてNoであ
る場合、その命令ノ−ドには優先順位2が与えられる。
そしてこのステップp2においてYesである場合、その
命令ノ−ドには、優先順位1が与えられる。以上のステ
ップp1〜ステップp5のステップが全ての出力候補に
ついて繰り返されることで各出力候補が順序付けされ
る。ステップp1〜ステップp5のループ処理が終了し
た後、ステップp6に移行するが、このステップp6に
おいて、優先順位が最も高い命令ノ−ドを選択する。こ
のように選択された命令ノ−ドについて、上述したステ
ップs1〜ステップs8の処理が行われる。
【0062】{1−5.リソース状態の更新}図8は、
図5におけるフロ−チャ−トのステップs7の処理過程
を示すフロ−チャ−トである。図8のフロ−チャ−トに
示したステップr1では、命令ノ−ドにおいて、資源の
使用があるかを判定する。ステップr1がYesである場
合、DAGを参照し、その資源の使用が最後の使用であ
るかを判定する。尚、この判定は、具体的には、この命
令ノ−ドへのDAGを辿り、親ノ−ドを参照して、この
親ノ−ドのその資源に関する子の命令ノ−ドが既に出力
されていることを確認することで行われる。もし既に出
力されていれば、選択された命令ノ−ドが最後の使用と
なるから、ステップr2はYesとなり、ステップr3に
移行する。ステップr3では、リソース状態情報のう
ち、最後の使用であることが判定された資源の項目を未
使用に変更する。変更後、ステップr3からステップr
4へと移行する。ステップr4では、選択された命令ノ
−ドに資源の定義が存在するかの判定を行う。このステ
ップr4においてYesとなれば、ステップr5に移行
し、選択された命令ノ−ドの子の命令ノ−ドに、定義さ
れた資源の値を使用する命令ノ−ドが存在するか否かを
判定する。ステップr5においてYesと判定されたな
ら、リソース状態のその資源の項目を使用中に変更す
る。ステップr5でNoと判定されたなら、その定義で設
定された値は意味の無いものとしてリソース状態のその
資源の項目を未使用に変更する。
【0063】{1−6.バックトラック}図5のフロ−
チャ−トに示すステップs2での繰り返し処理におい
て、全ての候補についてリソース状態を判定したもの
の、どの候補も出力リストバッファ17に出力できなか
った場合、ステップs2からステップs13に移行し、
戻り値にNGを設定して、リターン処理を行う。ステップ
s13でリターンすると、ステップs8の次のステッ
プ、即ち、処理はステップs9に移行する。ステップs
9では、戻り値の判定が行われるが、ステップs13で
戻り値がNGに設定されるとステップs9での判定結果が
NGになり、処理はステップs10に移行する。ステップ
s10では、出力候補の内容の取り消しが行われて、状
態復帰がなされる。この復帰によって、一つ前の再帰呼
出によって、ステップs1でノミネートされた出力候補
について、ステップs2のループ制御が行われる。
【0064】{動作例1 図2(b)のDAGを処理対
象とした場合}図9は、スケジューリング部18によっ
て命令列の順序が決定される様子を表した図である。本
図は、図2(b)に示したDAG中の命令ノ−ドが並べ
替えられる様子を表している。本図では横の並びにおい
て、リソース状態を表している。本図ではこの横の並び
に『D0 D1 D2』といったデータレジスタを表記
しており、メモリ、フラグ等は表記していないが、これ
は説明の便宜上、データレジスタのみを説明の対象とし
ているからである。
【0065】また本図における『候補探索』の欄は、図
2(b)のDAGを処理対象にした場合、ステップs1
の処理で探索される命令ノ−ドの番号を示している。ま
た、『命令選別』の欄は、ステップs3の処理で選択さ
れる命令ノ−ドの番号を示している。『リソース判定』
は、ステップs4での判定がどのようなリソース状態で
行われるかを表しており、『出力バッファ』は、出力リ
ストバッファ17に格納される命令ノ−ドの順序を表し
ている。『リソース更新』は、出力リストバッファ17
への命令ノ−ドの出力によって、リソース状態がどう更
新されるかを表している。その下の『再帰呼出』は、ス
テップs8において何度目の再帰呼出が行われたかを示
している。以降、本図と、図5〜8のフロ−チャ−トを
参照しながら、上記動作例について説明を行う。尚、以
降の説明は、図9の左端に付された(a-1)(a-2)(a-3)(a-
4)(b-1)・・・・で場合分けして行う。
【0066】(a-1.候補探索)DAG生成部15によ
って生成されDAG保持部14に保持されている図2
(b)に示したDAGに対してスケジューリング部18
が起動される。図2(b)に示した命令ノ−ド1、4
は、先頭の命令ノードであり親へのリンクが無いので
(図6のフロ−チャ−トに示したステップt1)スケジ
ューリング部18によってDAG中の先頭の命令ノード
が出力候補となる(ステップt3) (a-2 命令選別)命令ノ−ド4の下流の命令ノ−ドに
はハザードが存在するので、スケジューリング部18に
よって優先順位1が与えられる(図7のフロ−チャ−ト
に示したステップp5)。命令ノ−ド1の下流の命令ノ
−ドにはハザードが存在しないので優先順位2が与えら
れる(ステップp4)。その結果、優先順位が最も高い
優先順位1の命令ノ−ド4が出力候補に選択される(ス
テップp6)。
【0067】(a-3、a-4 リソース状態判定、バッファ
への出力、リソース状態更新)スケジューリング部18
はリソース状態の判定を行う(図5のフロ−チャ−トに
示したステップs4)。この状態では基本ブロックの入
り口で生きている資源は存在せず、リソース状態が全て
未使用なので、スケジューリング部18は命令ノ−ド4
を出力リストバッファ17に出力する(ステップs
5)。出力後、全ての命令ノ−ドを出力し終わっていな
いので(ステップs6)、命令ノ−ド4で定義されるレ
ジスタA0を使用中に設定し(ステップs7)設定後、再
帰呼出を行う(ステップs8)。
【0068】(b-1 候補探索)命令ノ−ド1は、先頭の
命令ノードであり、親へのリンクが無いので(図6のフ
ロ−チャ−トに示したステップt1)スケジューリング
部18によって出力候補となる(ステップt1、t
3)。親命令ノ−ド4が出力済みなので(ステップt
2)命令ノ−ド5が出力候補になる(ステップt3)。
【0069】(b-2 命令選別)命令ノ−ド5の下流の
命令ノ−ドにはハザードが存在するのでスケジューリン
グ部18によって優先順位1が与えられる(図7のフロ
−チャ−トに示したステップp5)。命令ノ−ド1の下
流の命令ノ−ドにはハザードが存在しないので優先順位
2が与えられる(ステップp4)。その結果、優先順位
が最も高い命令ノ−ド5が出力候補に選択される(ステ
ップp6)。
【0070】(b-3、b-4 リソース状態判定、バッファ
への出力、リソース状態更新)スケジューリング部18
はリソース状態の判定を行う(図5のフロ−チャ−トに
示したステップs4)。リソース状態の判定によると命
令ノ−ド5で定義されるレジスタD1は未使用なので命令
ノ−ド5を出力リストバッファ17に出力する(ステッ
プs5)。出力後、全ての命令ノ−ドを出力し終わって
いないので(ステップs6)、最後の使用であるレジス
タA0を未使用に戻し、命令ノ−ド5で定義されるレジス
タD1を使用中に設定し(ステップs7)設定後、再帰呼
出を行う(ステップs8)。
【0071】(c-1 候補探索)命令ノ−ド1は、先頭
の命令ノードであり、親へのリンクが無いのでnoとな
り、DAG中の先頭の命令ノードが出力候補となる(図
6のフロ−チャ−トに示したステップt1、t3)。親
命令ノ−ド5が出力済みなので命令ノ−ド6が出力候補
になる(ステップt2、t3)。
【0072】(c-2 命令選別)出力リストバッファ1
7に直前に出力された命令ノ−ド6は、親命令ノ−ドで
あり、その親命令ノ−ドとの間にハザードが存在するの
でスケジューリング部18によって優先順位3が与えら
れる(図7のフロ−チャ−トに示したステップp3)。
命令ノ−ド1にはハザードが存在せず、その下流の命令
ノ−ドにもハザードが存在しないのでスケジューリング
部18によって優先順位2が与えられる(ステップp
4)。その結果優先順位が最も高い命令ノ−ド1が選択
される(ステップp6)。
【0073】(c-3、c-4 リソース状態判定、バッファ
への出力、リソース状態更新)リソース状態の判定を行
う(図5のフロ−チャ−トに示したステップs4)。リ
ソース状態の判定によると命令ノ−ド1で定義されるレ
ジスタD0はリソース状態が未使用なのでスケジューリン
グ部18は、命令ノ−ド1を出力リストバッファ17に
出力する(ステップs5)。全ての命令ノ−ドを出力し
終わっていないので(ステップs6)、命令ノ−ド1で
定義されるレジスタD0を使用中に設定し(ステップs
7)設定後、再帰呼出を行う(ステップs8)。
【0074】(d-1 候補探索)親命令ノ−ド1、5が
出力済みなので、スケジューリング部18によって命令
ノ−ド2、6が出力候補になる(図6のフロ−チャ−ト
に示したステップt2、t3)。 (d-2 命令選別)命令ノ−ド2にはハザードが存在せ
ず、スケジューリング部18によってその下流の命令ノ
−ドにもハザードが存在しないので優先順位2が与えら
れる(ステップp4)。一方、命令ノ−ド6にはハザー
ドが存在せず、その下流の命令ノ−ドにもハザードが存
在しないのでスケジューリング部18によって優先順位
2が与えられる(ステップp4)。その結果、優先順位
が最も高い命令ノ−ドの何れか、ここでは命令ノ−ド6
が選択される(ステップp6)。
【0075】(d-3、d-4 リソース状態判定、バッファ
への出力、リソース状態更新)リソース状態の判定を行
う(図5のフロ−チャ−トに示したステップs4)。リ
ソース状態の判定によると命令ノ−ド6で定義されるレ
ジスタD1は、命令ノ−ド5で定義され使用中であるが、
命令ノ−ド6は命令ノ−ド5で定義されたレジスタD1の
最後の使用なので(ステップs11)、スケジューリン
グ部18は命令ノ−ド6を出力リストバッファ17に出
力する(ステップs5)。全ての命令ノ−ドを出力し終
わっていないので(ステップs6)、命令ノ−ド6で定
義されるレジスタD1を使用中に設定し(ステップs
7)、スケジューリング部18は再帰呼出を行う(ステ
ップs8)。
【0076】(e-1 候補探索)親命令ノ−ド1が出力
済みなので、スケジューリング部18によって命令ノ−
ド2が出力候補になる(図6のフロ−チャ−トに示した
ステップt2、t3)。 (e-2 命令選別)命令ノ−ド2にはハザードが存在せ
ず、その下流の命令ノ−ドにもハザードが存在しないの
でスケジューリング部18によって優先順位2が与えら
れる(ステップp4)。他には出力候補が存在しないの
で命令ノ−ド2が選別される。
【0077】(e-3 e-4 リソース状態判定、バッファ
への出力、リソース状態更新)スケジューリング部18
はリソース状態の判定を行う(図5のフロ−チャ−トに
示したステップs4)。リソース状態の判定によると命
令ノ−ド2で定義されるレジスタA0は未使用なので、ス
ケジューリング部18は、命令ノ−ド2を出力リストバ
ッファ17に出力する(ステップs5)。全ての命令ノ
−ドを出力し終わっていないので(ステップs6)、ス
ケジューリング部18は、最後の使用であるレジスタD0
を未使用に戻し、命令ノ−ド2で定義されるレジスタA0
を使用中に設定して(ステップs7)、設定後、再帰呼
出を行う(ステップs8)。
【0078】(f-1 候補探索)親命令ノ−ド2が出力
済みなので、命令ノ−ド3が出力候補になる(ステップ
t2、t3)。 (f-2 命令選別)命令ノ−ド3にはハザードが存在せ
ず、その下流の命令ノ−ドにもハザードが存在しないの
でスケジューリング部18によって優先順位2が与えら
れる(図7のフロ−チャ−トに示したステップp4)。
他には出力候補が存在しないので、スケジューリング部
18によって命令ノ−ド3が選別される。
【0079】(f-3、f-4 リソース状態判定、バッファ
への出力、リソース状態更新)リソース状態の判定を行
う(図5のフロ−チャ−トに示したステップs4)。リ
ソース状態の判定によると命令ノ−ド3で定義される資
源memは未使用なのでスケジューリング部18は命令
ノ−ド3を出力リストバッファ17に出力する(ステッ
プs5)。命令ノ−ド3を出力したことにより基本ブロ
ックの全ての命令ノ−ドを出力したことになるので、リ
ターンする(ステップs6、s14)。
【0080】以上のように処理が行われることで、出力
リストバッファ17内の命令列は、4−5−1−6−2
−3の順序になり、命令列は『mov 10,D0』『mov D0,A
0』『mov A0,mem』『mov 20,A0』{mov (A0),D1}{add
D1,D1}の順序から『mov 20,A0』{mov (A0),D1}『mo
v 10,D0』{add D1,D1}『mov D0,A0』『mov A0,mem』
へと並び替えられる({}間の命令はハザード要因であ
った命令である。)。
【0081】{動作例2 図2(c)のDAGを処理対
象とした場合}図10は、スケジューリング部18によ
ってバックトラック(後戻り)が行われる様子を表した
図である。本図は、図2(c)に示したDAG中の命令
ノ−ドが並べ替えられる様子を表している。
【0082】本図では、横の並びにおいて、リソース状
態を表している。本図ではこの横の並びに『D0 D1
D2 A0』といったデータレジスタ、アドレスレジ
スタを表記しており、メモリ、フラグ等は表記していな
いが、これは説明の便宜上、データレジスタ、アドレス
レジスタのみを説明の対象としているからである。本図
における『候補探索』の欄は、図2(c)のDAGを処
理対象にした場合、ステップs1の処理で探索される命
令ノ−ドの番号を示している。また『命令選別』の欄
は、ステップs3の処理で選択される命令ノ−ドの番号
を示している。『リソース判定』は、ステップs4での
判定がどのようなリソース状態で行われるかを表してお
り、『出力バッファ』は、出力リストバッファ17に格
納される命令ノ−ドの順序を表している。『リソース更
新』は、出力リストバッファ17への命令ノ−ドの出力
によって、リソース状態がどう更新されるかを表してい
る。その下の『再帰呼出』は、ステップs8において何
度目の再帰呼出が行われたかをlevel数で示している。
尚図2(c)の一例では、レジスタA0の設定値が基本ブ
ロックの入り口で生きているので、リソース状態のレジ
スタA0の項目に使用中を示す『S』が設定されている。
【0083】(s-1.候補探索)DAG生成部15によ
って生成され、DAG保持部14に保持されている図2
(c)に示したDAGに対してスケジューリング部18
が起動される。図2(c)に示した命令ノ−ド4は、先
頭の命令ノードであり、親へのリンクが無いので(図6
のフロ−チャ−トに示したステップt1)、スケジュー
リング部18によって命令ノード4が出力候補となる
(ステップt2)。一方、命令ノ−ド1は親(基本ブロ
ックの始まり)へリンクがあるが、スケジューリング部
18はこれを既に出力済みとみなして出力候補とする
(ステップt2、t3)。
【0084】(s-2 命令選別)命令ノ−ド4の下流の
命令ノ−ドにはハザードが存在するのでスケジューリン
グ部18によって優先順位1が与えられる(図7のフロ
−チャ−トに示したステップp5)。命令ノ−ド1の下
流の命令ノ−ドには、ハザードが存在しないのでスケジ
ューリング部18によって優先順位2が与えられる(ス
テップp4)。その結果、優先順位が最も高い命令ノ−
ド4が出力候補に選択される(ステップp6)。
【0085】(s-4 リソース状態判定、バッファへの
出力、リソース状態更新)スケジューリング部18はリ
ソース状態の判定を行う(図5のフロ−チャ−トに示し
たステップs4)。リソース状態の判定によると命令ノ
−ド4で定義される資源は未使用なので、命令ノ−ド4
を出力リストバッファ17に出力する(ステップs
5)。出力後、命令ノ−ド4は最後の命令ノ−ドを出力
し終わっていないので(ステップs6)、命令ノ−ド4
で定義されるレジスタD0を使用中に設定し(ステップs
7)、スケジューリング部18は再帰呼出を行う(ステ
ップs8)。
【0086】(t-1 候補探索)命令ノ−ド1は先頭の命
令ノードであり、その親命令ノ−ドが出力済みとみなさ
れるので出力候補となる(図6のフロ−チャ−トに示し
たステップt2、t3)。一方親命令ノ−ド4が出力済
みなので(ステップt1)、命令ノ−ド5が出力候補に
なる(ステップt2、t3)。
【0087】(t-2 命令選別)命令ノ−ド5の下流の
命令ノ−ドにはハザードが存在するのでスケジューリン
グ部18によって優先順位1が与えられる(図7のフロ
−チャ−トに示したステップp5)。命令ノ−ド1の下
流の命令ノ−ドにはスケジューリング部18によってハ
ザードが存在しないので優先順位2が与えられる(ステ
ップp4)。その結果優先順位が最も高い命令ノ−ド5
が選択される(ステップp6)。
【0088】(t-3 t-4リソース状態判定、バッファへ
の出力、リソース状態更新)スケジューリング部18は
リソース状態の判定を行う(図5のフロ−チャ−トに示
したステップs4)。リソース状態の判定によると命令
ノ−ド5で定義されるレジスタA0は使用中であり、か
つ、『S』で定義されたレジスタA0の最後の使用ではな
いので、出力不可能となる(ステップs4、s11、s
12)。ステップs1では、命令ノ−ド5の他に命令ノ
−ド1が出力候補としてノミネートされており、ステッ
プs2によって命令ノ−ド1が選択されるが、命令ノ−
ド1で定義されるレジスタD0は使用中であり、かつ命令
ノ−ド4で定義されたレジスタD0の最後の使用でもない
ので(ステップs4、s11、s12)、命令ノ−ド1
は出力候補から取り除かれて、ステップs13に移行
し、戻り値NGでリターンする(ステップs13)。リ
ターンすると、出力リストバッファ17に命令ノ−ド4
が格納され、命令ノ−ド1が出力候補として残っている
状態に戻る。この後、ステップs10で出力リストバッ
ファ17の内容の取り消しが行われて、スケジューリン
グ部18によって命令ノ−ド4が消去され、ステップs
2に戻る。
【0089】(u-2 命令選別)命令ノ−ド1にはハザ
ードが存在せず、その下流の命令ノ−ドにもハザードが
存在しないのでスケジューリング部18によって優先順
位2が与えられる(図7のフロ−チャ−トに示したステ
ップp4)。他に候補が無いので命令ノ−ド1が選択さ
れる(ステップp6)。
【0090】(u-3 リソース状態判定、バッファへの
出力、リソース状態更新)リソース状態の判定を行う
(図5のフロ−チャ−トに示したステップs4)。リソ
ース状態の判定によると命令ノ−ド1で定義されるレジ
スタD0は未使用なので、スケジューリング部18は命令
ノ−ド1を出力リストバッファ17に出力する(ステッ
プs5)。出力後命令ノ−ド1は最後の全ての命令ノ−
ドを出力し終わっていないので(ステップs6)、スケ
ジューリング部18は命令ノ−ド1で定義されるレジス
タD0を使用中に設定し(ステップs7)、設定後再帰呼
出を行う(ステップs8)。
【0091】(v-1 候補探索)親命令ノ−ド1が出力
済みなので、スケジューリング部18によって命令ノ−
ド2、4が出力候補になる(図6のフロ−チャ−トに示
したステップt1、t2、t3)。 (v-2 命令選別)命令ノ−ド2にはハザードが存在せ
ず、その下流の命令ノ−ドにもハザードが存在しないの
でスケジューリング部18によって優先順位2が与えら
れる(図7のフロ−チャ−トに示したステップp4)。
一方、命令ノ−ド4にはハザードが存在するのでスケジ
ューリング部18によって優先順位1が与えられる(ス
テップp5)。その結果、優先順位が最も高い命令ノ−
ド4が選択される(ステップp6)。
【0092】(v-3、v-4 リソース状態判定、バッファ
への出力、リソース状態更新)リソース状態の判定を行
う(図5のフロ−チャ−トに示したステップs4)。リ
ソース状態の判定によると命令ノ−ド4では、レジスタ
D0が定義されるので出力不可になる。命令ノ−ド4は命
令ノ−ド1で定義されたレジスタD0の最後の使用でない
ので(ステップs11)、スケジューリング部18は、
命令ノ−ド4を出力候補から取り除き、ステップs2に
戻る。
【0093】命令ノ−ド4の他には、出力候補として命
令ノ−ド2が残っている。この状態でスケジューリング
部18はリソース状態の判定を行う(図5のフロ−チャ
−トに示したステップs4)。リソース状態の判定によ
ると命令ノ−ド2ではレジスタD2が定義されるので、リ
ソース状態の判定は可になり、スケジューリング部18
は、命令ノ−ド2を出力リストバッファ17に出力する
(ステップs5)。命令ノ−ド2は全ての命令ノ−ドを
出力し終わっていないので(ステップs6)、最後の使
用であるレジスタD0を未使用に戻し、命令ノ−ド2で定
義されるレジスタD2を使用中に設定し(ステップs
7)、設定後、再帰呼出を行う(ステップs8)。
【0094】(W-2 命令選別)命令ノ−ド3のリンクに
はハザードが存在せず、その下流の命令ノ−ドにもハザ
ードが存在しないのでスケジューリング部18によって
優先順位2が与えられる(図7のフロ−チャ−トに示し
たステップp4)。一方、命令ノ−ド4の下流の命令ノ
−ドにはハザードが存在するので優先順位1が与えられ
る(ステップp5)。
【0095】以上の処理が繰り返され、図2(c)に示
した命令は、1_2_4_5_6_3_7の順に出力リ
ストバッファ17に格納される。以上のように本実施例
によれば、定義−使用間のリンクのみによって結合され
たDAGと、バッファの末尾の命令での各資源の使用状
態とに依存関係を保存し、これが損なわれないように並
び替えを行うので、並び替えの自由度を高めることがで
きる。そのため、ハザード解消がより確実に行え、パイ
プライン処理に好適な機械語プログラムを生成すること
ができる。
【0096】(第2実施例)第2実施例では、図5のフ
ロ−チャ−トに示したステップs11の判定において、
リソース状態により候補命令ノ−ドの出力が不可能と判
定された場合、その出力候補内の資源を置き換えること
で、その命令ノ−ドの出力が行えるようにしている。図
11は、第2実施例において、図5のフロ−チャ−トに
追加される1連のステップを示す図である。
【0097】第2実施例では、図11に示すように、ス
テップs11、ステップs12のステップ間に、ステッ
プs14の判定ステップが置かれ、このステップs14
での判定でYesになった場合、命令ノ−ドの資源を他の
資源に置き換えて、その命令ノ−ドが出力されるように
している。図11のフロ−チャ−トに示すステップs1
4では、命令中の資源(置き換え対象資源と呼ぶ。)を
他の資源に置き換えることが可能であるかを判定する。
【0098】ステップs15では、ステップs14での
置き換えが可能と判定された場合、その命令ノ−ドの資
源を可能と判定された他の資源に置き換える。ステップ
s16では、命令ノ−ドについてのDAGを参照し、そ
の命令ノ−ドで定義される置き換え対象資源についての
データフローに関して子孫の間柄にある命令ノ−ドにお
いて用いられている置き換え対象資源を、置き換え可能
と判定された他の資源に置き換える。
【0099】第2実施例によってハザードが解消される
様子を図を参照しながら説明する。図12は、1つの資
源が始終使用中であり、並べ替えが行えないDAGを示
した図である。図12において『mov mem_a,D0』でメモ
リから読み出された値により定義されたレジスタD0が次
の『add 10,D0』で使用されるため、(1)−(2)間
がハザードになっていることがわかる。また、『mov me
m_b,D0』でメモリから読み出された値により定義された
レジスタD0が次の『add 20,D0』で使用されるため、
(4)−(5)間がハザードになっていることがわか
る。
【0100】この一例に対して定義−使用間のリンクの
みからDAGを生成すると(1)−(2)−(3)間が
1つのDAGに連鎖し、(4)−(5)−(6)間でD
AGが生成する。ところが、レジスタD0はこの基本ブロ
ックにおいて始終使用されているため、第1実施例のフ
ロ−チャ−トでは、(1)−(2)間に(4)−(5)
−(6)間の何れの命令を出力することができず、また
(4)−(5)間に(1)−(2)−(3)間の何れの
命令を出力することもできない。
【0101】以上の基本ブロックの命令列が第2実施例
でのフロ−チャ−トによって並べ替えられる様子を以下
に説明する。図13は、図12に示したDAGの命令に
おいて、定義されている資源が置き換えられる様子を示
した図である。ここで、図12における(1)の命令ノ
−ドが出力され、続いて(4)の命令ノ−ドが候補とし
て選択されたが、リソース状態では、レジスタD0が使用
中であったためNGになり、最後の使用でもないのでステ
ップs14に移る。ステップs14では、命令の資源を
他の資源に置き換えることが可能かを判定する。ここ
で、レジスタD0以外のレジスタは、みな未使用であった
とする。この場合、資源の置き換えは可能となり、ステ
ップs14はYESとなってステップs15に移行する。
ステップs15では、ステップs14での置き換えが可
能と判定された場合、その命令ノ−ドの資源(置き換え
対象資源;レジスタD0)を当該資源に置き換える。ここ
で、レジスタD1が未使用であったから、命令(4)での
レジスタD0の定義はレジスタD1の定義に置き換えられ
る。その結果、(2)の命令ノ−ド『mov mem_b,D0』
は、『mov mem_b,D1』に書き換えられる(ステップs1
6)。
【0102】続いてステップs16では、命令ノ−ドに
ついてのDAGを参照し、その命令ノ−ドとレジスタD0
のデータフローに関して子孫の間柄にある命令ノ−ドの
置き換え対象資源を置き換える。DAGにおいて(4)
は、(5)、(6)の命令とレジスタD0のデータフロー
に関して子孫の間柄にある。そこで、『add 20,D0』を
『add 20,D1』に書き換え、『mov D0,mem_b』を『mov D
1,mem_b』に書き換える。以上の書き換えによって、命
令列(4)(5)(6)は、レジスタD1のみを用い、レ
ジスタD0を用いない命令列となる。このような書き換え
によってステップs4でのリソース状態判定は全てYES
になり、ハザード解消のための並べ替えは好適に行われ
る。
【0103】以上のように本実施例では、出力しようと
する命令がリソース状態によって出力できない場合、そ
の命令で定義している資源を置き換えることで、依存関
係が損なわれないようにするため、並び替えがより柔軟
に行え、ハザード解消がより確実に行える。尚、上記の
実施例では、アセンブラ言語で記述されたソースプログ
ラムを対象にして説明を進めたが、本最適化装置をコン
パイラに組み込んで、コンパイラがコード生成によって
アセンブラ言語状態のプログラムを出力した段階で、本
最適化装置を適用するようにしてもよい。
【0104】
【発明の効果】以上のように請求項1の発明によれば、
定義−使用間のリンクのみによって結合されたDAG
と、バッファの末尾の命令での各資源の使用状態とに依
存関係を保存し、これが損なわれないように実行順序が
決定されるので、並び替えの自由度を高めることができ
る。そのため、ハザード解消がより確実に行え、パイプ
ライン処理に好適な機械語プログラムを生成することが
できる。
【0105】また、請求項2の発明によれば、請求項1
の発明の効果に加えて、優先度の高低によってハザード
情報が設定されている親子間に別の命令が挿入されるの
で、ハザード解消が確実になるような実行順序が決定さ
れる。また、請求項3の発明によれば、請求項2の発明
の効果に加えて、ハザード情報が設定されているDAG
の命令が優先し、設定されていないDAGの命令がこれ
に続くので、ハザードが解消される可能性がより高ま
る。
【0106】また、請求項4の発明によれば、請求項3
の発明の効果に加えて、各レジスタが使用中であるか、
未使用であるかがフラグによって表されているので、各
レジスタの使用状況が明確になり、ハザードがより確実
に解消できる。また、請求項5の発明によれば、請求項
4の効果に加えて、第2の最終使用判定部によって最後
の使用であると判定された命令の優先度が最も高ければ
その命令を決定するので、機械語命令、『add D1,D1』
のように、ソース、デストネーションで同一のレジスタ
を使用しているような機械語命令に対処でき、ハザード
がより確実に解消できる。
【0107】また、請求項6の発明によれば、請求項2
〜5の発明の効果に加えて、第1、第2の優先度設定部
によって優先度が設定された命令が何れも使用中のレジ
スタを定義する場合、直前に記憶された命令の情報を削
除して、別のDAGの命令を決定するので、順序決定の
やり直しが行われる。そのため、実行順序決定の行き詰
まりに対処することができる。
【0108】また、請求項7の発明によれば、請求項2
〜5の発明の効果に加えて、優先度が最も高い命令にお
いて定義されているレジスタが状態フラグ記憶部におい
て使用中である場合、その優先度が最も高い命令におい
て定義されるレジスタと、その命令を含むDAGにおけ
る当該レジスタとデータフローを有する命令で使用され
ている当該レジスタとを未使用と判定されたレジスタに
書き換えるので、実行順序決定の行き詰まりに対処する
ことができる。
【図面の簡単な説明】
【図1】最適化装置の内部構成を示したブロック図であ
る。
【図2】このDAGのデータ構造のフォーマットと、本
実施例におけるDAGの一例とを示す図である。
【図3】DAG生成部14がDAGを生成する様子を示
したフロ−チャ−トである。
【図4】リソース状態情報の一例を示す図である。
【図5】スケジューリング部18の処理過程のメインフ
ロ−チャ−トである。
【図6】図5におけるフロ−チャ−トのステップs1の
処理過程を示すフロ−チャ−トである。
【図7】図5におけるフロ−チャ−トのステップs3の
処理過程を示すフロ−チャ−トである。
【図8】図5におけるフロ−チャ−トのステップs7の
処理過程を示すフロ−チャ−トである。
【図9】スケジューリング部18によって命令列の順序
が決定される様子を表した図である。
【図10】スケジューリング部18によってバックトラ
ックが行われる様子を表した図である。
【図11】第2実施例において、図5のフロ−チャ−ト
に追加される1連のステップを示す図である。
【図12】1つの資源が始終使用中であり、並べ替えが
行えないDAGを示した図である。
【図13】図11に示したDAGの命令において、定義
されている資源が置き換えられる様子を示した図であ
る。
【図14】パイプライン処理が如何にして行われるかを
示した図である。
【図15】ハザードによるパイプライン処理への障害を
表した図である。
【図16】従来の命令スケジューリングが行われる様子
を示した図である。
【図17】基本ブロック内の命令が1つに結合したDA
Gを示す図である。
【符号の説明】
11 命令入力部 12 コード分割部 13 データフロー解析部 14 DAG保持部 15 DAG生成部 16 リソース状態保持部 17 出力リストバッファ 18 スケジュール部 19 命令出力部
フロントページの続き (56)参考文献 特開 平3−135630(JP,A) 特開 平3−291726(JP,A) 特開 平5−204659(JP,A) J.Hennessy他,”Post pass Code Optimiza tion of Pipeline C onstraints”ACM Tra nsactions on Progr amming Languages a nd Systems,1983,Vol. 5,No.3,p.422−448 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 G06F 9/38

Claims (7)

    (57)【特許請求の範囲】
  1. 【請求項1】プログラム中の命令の順序を並び替えて命
    令の順序を最適化する最適化装置であって、 前記プログラム中の分岐を含まないプログラム部分につ
    いて、資源に値を定義する命令を親とし、その資源の値
    を使用する命令を子として、親子関係を有する全ての命
    令を順次結合し、親から子への方向を有する有向非巡回
    グラフを複数個生成する有向非巡回グラフ生成手段と、 親子関係にある命令の並びがハザードを生じさせること
    を示すハザード情報をその並びの親子間に設定するハザ
    ード情報設定手段と、 各有向非巡回グラフから親が無い命令又は親が決定済み
    の命令を候補命令として選択する候補選択手段と、 選択された候補命令の中から、ハザード情報が各有向非
    巡回グラフのどの親子間に設定されているかに基づい
    て、ハザードを生じさせない1つの命令を決定する命令
    決定手段と、 命令が決定される毎に候補選択手段を起動する制御手段
    と、 決定された命令を示す情報を、決定された順に実行順序
    として記憶する記憶手段とを備え、 前記命令決定手段は、 記憶手段に記憶された命令情報により示される命令によ
    り、使用されている資源と未使用の資源とを記憶する資
    源管理手段と、候補選択手段により選択された候補命令に、資源管理手
    段において使用中とされた資源の内容を破壊せず、尚且
    つ、その親との間にハザード情報が設定されていない命
    令が存在する場合、その命令を決定すると共に、 そのような命令が存在しない場合、以前に決定された命
    令を示す命令情報を記憶手段に記憶されている実行順序
    から消去して、候補選択手段が以前に起動された際に選
    択した候補命令のうち、以前に決定された命令とは異な
    る命令を決定する決定手段と からなることを特徴とする
    最適化装置。
  2. 【請求項2】決定手段は、 候補選択手段によって選択された命令と直前に決定され
    た命令との間にハザード情報が設定されているか設定さ
    れていないかを判定する第1の判定部と、 候補選択手段によって選択された命令と直前に決定され
    た命令との間にハザード情報が設定されていると第1の
    判定部によって判定された場合、第1の優先度をその選
    択された命令に設定する第1の優先度設定部と、 選択された命令と直前に決定された命令との間にハザー
    ド情報が設定されていないと第1の判定部によって判定
    された場合、第1の優先度より高い第2の優先度をその
    選択された命令に設定する第2の優先度設定部と、 資源管理手段において使用中の資源の内容を破壊しない
    命令であって、設定された優先度が最も高い命令を1つ
    決定する適合命令決定部とを備えることを特徴とする請
    求項1記載の最適化装置。
  3. 【請求項3】決定手段は、 有向非巡回グラフにおいて候補選択手段によって選択さ
    れた命令と直前に決定された命令との間にハザード情報
    が設定されていない場合、その命令を含む有向非巡回グ
    ラフの子の方向にハザード情報が存在するか存在しない
    かを判定する第2の判定部を備え、 第2の優先度設定部は、 その命令を含む有向非巡回グラフの子の方向にハザード
    情報が存在しないと第2の判定部によって判定された場
    合、その選択された命令に第1の優先度より高い第2の
    優先度を設定し、 その命令を含む有向非巡回グラフの子の方向にハザード
    情報が存在すると第2の判定部によって判定された場
    合、その選択された命令に第2の優先度より高い第3の
    優先度を設定することを特徴とする請求項2記載の最適
    化装置。
  4. 【請求項4】資源管理手段は、 オンで使用中を示しオフで未使用を示す状態フラグを各
    資源に対応づけて記憶する状態フラグ記憶部と、 適合命令決定部によって命令が決定されると、決定され
    た命令で定義される資源の状態フラグをオフからオンに
    切り換える第1の切り換え部と有向非巡回グラフ中のそ
    の命令の親命令の他の子命令において当該資源の値を使
    用している他の全ての子命令が既に決定されていること
    を確認することにより適合命令決定部によって決定され
    た命令が資源の最後の使用であるか否かを判定する第1
    の最終使用判定部と、 最後の使用であると判定されると、その資源の状態フラ
    グをオンからオフへと切り換える第2の切り換え部とを
    備えることを特徴とする請求項2又は3記載の最適化装
    置。
  5. 【請求項5】決定手段は、 第1、第2の優先度設定部によって優先度が設定された
    命令が資源の状態フラグがオンである資源の最後の使用
    であるか否かを判定する第2の最終使用判定部を備え、 適合命令決定部は、 第2の最終使用判定部によって最後の使用であると判定
    された命令の優先度が最も高ければ、その命令を決定す
    ることを特徴とする請求項4記載の最適化装置。
  6. 【請求項6】記憶手段は更に、 第1、第2の優先度設定部によって優先度が設定された
    命令が何れも使用中の資源を定義する場合、直前に記憶
    された命令の情報を削除し、 第1の切り換え部は更に、 情報が削除された命令で定義される資源の状態フラグを
    オンからオフに切り換え、 適合命令決定部は更に、 命令の情報が削除されると、状態フラグ記憶部において
    使用中の資源の値を破壊せず、かつ優先度が最も高い命
    令を決定することを特徴とする請求項4又は5記載の何
    れかの最適化装置。
  7. 【請求項7】決定手段は更に、 第1、第2の優先度設定部によって設定された優先度が
    最も高い命令において定義されている資源が状態フラグ
    記憶部において使用中である場合、当該状態フラグ記憶
    部において未使用である資源を判定する未使用資源判定
    部と、 その優先度が最も高い命令において定義される資源と、
    その命令を含む有向非巡回グラフにおける当該資源とデ
    ータフローを有する命令で使用されている当該資源と
    を、未使用と判定された資源に書き換える書き換え部を
    備え、 適合命令決定部は、 未使用の資源に書き換えられた命令を決定することを特
    徴とする請求項2〜5記載の何れかの最適化装置。
JP07104300A 1995-04-27 1995-04-27 最適化装置 Expired - Lifetime JP3113792B2 (ja)

Priority Applications (7)

Application Number Priority Date Filing Date Title
JP07104300A JP3113792B2 (ja) 1995-04-27 1995-04-27 最適化装置
US08/628,904 US5850552A (en) 1995-04-27 1996-04-08 Optimization apparatus for removing hazards by arranging instruction order
TW085104068A TW352424B (en) 1995-04-27 1996-04-08 Optimization apparatus for removing hazards by arranging instruction order
EP96302868A EP0740251B1 (en) 1995-04-27 1996-04-24 Optimization apparatus for removing hazards by arranging instruction order
DE69622219T DE69622219T2 (de) 1995-04-27 1996-04-24 Optimierungsgerät zum Entfernen von Gefahren durch Arrangierung der Befehlsreihenfolge
KR1019960013068A KR100238330B1 (ko) 1995-04-27 1996-04-26 명령의 시퀀싱에 의하여 헤저드의 해소를 도모하는 최적화장치
CNB961084553A CN1160627C (zh) 1995-04-27 1996-04-27 通过指令的排列变换以求得消除危险的最优化装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP07104300A JP3113792B2 (ja) 1995-04-27 1995-04-27 最適化装置

Publications (2)

Publication Number Publication Date
JPH08305577A JPH08305577A (ja) 1996-11-22
JP3113792B2 true JP3113792B2 (ja) 2000-12-04

Family

ID=14377080

Family Applications (1)

Application Number Title Priority Date Filing Date
JP07104300A Expired - Lifetime JP3113792B2 (ja) 1995-04-27 1995-04-27 最適化装置

Country Status (7)

Country Link
US (1) US5850552A (ja)
EP (1) EP0740251B1 (ja)
JP (1) JP3113792B2 (ja)
KR (1) KR100238330B1 (ja)
CN (1) CN1160627C (ja)
DE (1) DE69622219T2 (ja)
TW (1) TW352424B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
USRE37093E1 (en) 1991-06-03 2001-03-13 Ricoh Company, Ltd. Optical disk drive unit with a sealing type bearing member

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6044221A (en) * 1997-05-09 2000-03-28 Intel Corporation Optimizing code based on resource sensitive hoisting and sinking
US5978588A (en) * 1997-06-30 1999-11-02 Sun Microsystems, Inc. Method and apparatus for profile-based code placement using a minimum cut set of the control flow graph
JP3220055B2 (ja) * 1997-07-17 2001-10-22 松下電器産業株式会社 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。
CN100347668C (zh) * 1997-08-29 2007-11-07 松下电器产业株式会社 指令变换装置
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6158049A (en) * 1998-08-11 2000-12-05 Compaq Computer Corporation User transparent mechanism for profile feedback optimization
US6145125A (en) * 1998-11-12 2000-11-07 International Business Machines Corporation Method and storage medium for building very large executable programs
US7058647B1 (en) 1999-08-31 2006-06-06 Charles E. Hill & Associates Electronic presentation generation system and method
US6681387B1 (en) 1999-12-01 2004-01-20 Board Of Trustees Of The University Of Illinois Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit
KR100304527B1 (ko) * 2000-01-10 2001-11-03 이동욱, 이정호 현금카드를 통한 실시간 현금 결제 처리 방법
US7433881B1 (en) 2000-08-31 2008-10-07 Charles E. Hill & Associates, Inc. System and method for handling multi-resolution graphics files
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
US7185327B2 (en) * 2001-01-09 2007-02-27 Hewlett-Packard Development Company, L.P. System and method for optimizing operations via dataflow analysis
JP2002304823A (ja) * 2001-04-10 2002-10-18 Fujitsu Ltd リオーダリングコントローラ、リオーダリング方法及び記憶装置
US7000095B2 (en) * 2002-09-06 2006-02-14 Mips Technologies, Inc. Method and apparatus for clearing hazards using jump instructions
US7448030B2 (en) * 2004-03-18 2008-11-04 Intel Corporation Optimized ordering of firmware modules in pre-boot environment
US7506331B2 (en) * 2004-08-30 2009-03-17 International Business Machines Corporation Method and apparatus for determining the profitability of expanding unpipelined instructions
CN100590592C (zh) * 2005-01-13 2010-02-17 Nxp股份有限公司 处理器及其指令发布方法
US7908163B2 (en) * 2005-07-15 2011-03-15 The Board Of Trustees Of The University Of Alabama Method and system for parallel scheduling of complex dags under uncertainty
US7330962B2 (en) * 2005-11-14 2008-02-12 Nvidia Corporation Dynamic instruction sequence selection during scheduling
US8539467B2 (en) * 2006-07-27 2013-09-17 International Business Machines Corporation Method and data processing system for solving resource conflicts in assembler programs
TWI334571B (en) * 2007-02-16 2010-12-11 Via Tech Inc Program instruction rearrangement methods
US8612944B2 (en) * 2008-04-17 2013-12-17 Qualcomm Incorporated Code evaluation for in-order processing
US9690591B2 (en) * 2008-10-30 2017-06-27 Intel Corporation System and method for fusing instructions queued during a time window defined by a delay counter
JP5140105B2 (ja) * 2010-03-23 2013-02-06 Necシステムテクノロジー株式会社 命令スケジューリング装置、命令スケジューリング方法および命令スケジューリングプログラム
CN106959957B (zh) * 2016-01-11 2020-07-07 阿里巴巴集团控股有限公司 一种有向无环图dag连线提示方法及装置
JP6325625B2 (ja) * 2016-10-14 2018-05-16 ファナック株式会社 プログラム最適化システム
CN110221838B (zh) * 2019-05-28 2020-10-27 中国科学院高能物理研究所 一种基于遗传算法和有向无环图进行程序自动设计优化的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
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
JPH03135630A (ja) * 1989-10-20 1991-06-10 Nec Corp 命令スケジューリング方式
US5119495A (en) * 1989-12-21 1992-06-02 Bull Hn Information Systems Inc. Minimizing hardware pipeline breaks using software scheduling techniques during compilation
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5202993A (en) * 1991-02-27 1993-04-13 Sun Microsystems, Inc. Method and apparatus for cost-based heuristic instruction scheduling
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

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
J.Hennessy他,"Postpass Code Optimization of Pipeline Constraints"ACM Transactions on Programming Languages and Systems,1983,Vol.5,No.3,p.422−448

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
USRE37093E1 (en) 1991-06-03 2001-03-13 Ricoh Company, Ltd. Optical disk drive unit with a sealing type bearing member

Also Published As

Publication number Publication date
KR960038647A (ko) 1996-11-21
CN1146577A (zh) 1997-04-02
EP0740251A2 (en) 1996-10-30
DE69622219D1 (de) 2002-08-14
JPH08305577A (ja) 1996-11-22
US5850552A (en) 1998-12-15
TW352424B (en) 1999-02-11
KR100238330B1 (ko) 2000-01-15
CN1160627C (zh) 2004-08-04
DE69622219T2 (de) 2002-10-31
EP0740251B1 (en) 2002-07-10
EP0740251A3 (en) 1997-06-11

Similar Documents

Publication Publication Date Title
JP3113792B2 (ja) 最適化装置
US6243864B1 (en) Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
Masuhara et al. Modeling crosscutting in aspect-oriented mechanisms
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US20110119660A1 (en) Program conversion apparatus and program conversion method
US5894576A (en) Method and apparatus for instruction scheduling to reduce negative effects of compensation code
JPH08507889A (ja) スーパースカラマイクロプロセッサ用のプログラムから並行的に処理可能な命令グループを機械的に生成する方法
JPH06314203A (ja) コンパイラの最適化方法および装置
EP1171818A2 (en) System and method for generating recovery code
KR960003047B1 (ko) 분기명령 실행전에 분기후의 명령을 병렬처리하는 병렬처리 장치 및 그의 병렬처리 방법
JP2002259134A (ja) ポストリンク・コードの最適化方法及び装置
JPH0816429A (ja) 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
JPH10507016A (ja) ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ
US6564372B1 (en) Critical path optimization-unzipping
US5276821A (en) Operation assignment method and apparatus therefor
EP1121641A1 (en) Apparatus and method for program optimizing
JPH01118931A (ja) プログラム変換方式
JPH06309193A (ja) 機械語プログラムの動作検証方法および装置
JPH0877021A (ja) 割込処理装置および方法
US20020143511A1 (en) Method and computer program product for system design support
JPH0667871A (ja) プログラム自動更新方式
JP3714201B2 (ja) コール命令並び替え方法と装置並びにプログラム
JP3492207B2 (ja) 組み込みソフトウェアの動的解析方法
JP2002073347A (ja) 例外処理方法及びコンパイラ
JPH1031591A (ja) 関数のインライン展開装置

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080922

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080922

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090922

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090922

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100922

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110922

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120922

Year of fee payment: 12