JP2599532B2 - コード変換方法及び装置 - Google Patents

コード変換方法及び装置

Info

Publication number
JP2599532B2
JP2599532B2 JP4110981A JP11098192A JP2599532B2 JP 2599532 B2 JP2599532 B2 JP 2599532B2 JP 4110981 A JP4110981 A JP 4110981A JP 11098192 A JP11098192 A JP 11098192A JP 2599532 B2 JP2599532 B2 JP 2599532B2
Authority
JP
Japan
Prior art keywords
branch
comparison
code
loop
instruction
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
JP4110981A
Other languages
English (en)
Other versions
JPH07168717A (ja
Inventor
マーク・アラン・ジョンソン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH07168717A publication Critical patent/JPH07168717A/ja
Application granted granted Critical
Publication of JP2599532B2 publication Critical patent/JP2599532B2/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
    • G06F8/4451Avoiding pipeline stalls

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)
  • Advance Control (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般的にコード変換方
法及び装置に関する。より具体的には、本発明はコンパ
イラ用の最適化機構に関する。
【0002】
【従来の技術及び発明が解決しようとする課題】パイプ
ラインプロセッサとして知られるコンピュータは、複数
の命令をいくつかの段階に分けて処理する。パイプライ
ンプロセッサでの命令処理は、パイプラインに類似して
おり、連続する各段階がそのパイプラインの隣接する段
階で処理される。パイプラインプロセッサは、一般に、
前の命令がまだパイプライン内にあるうちに、各命令を
パイプラインに送る。
【0003】複数の命令を並列に実行できるパイプライ
ンプロセッサの能力は、そのすべての段階が活動状態に
保たれているとき完全に利用される。あるパイプライン
上の1つまたは複数の隣接する非活動段階の集合をバブ
ルと呼ぶ。
【0004】条件付きブランチと呼ばれる動作はバブル
を発生させることがある。条件付きブランチ動作は、物
理的にある命令の後にあり、指定された条件が存在する
時、そのブロックの直後の命令にジャンプする、いくつ
かの命令からなるブロックを含む。このような命令のブ
ロックを、条件付きブロックと呼ぶ。ジャンプする命令
を、ブランチ命令と呼ぶ。条件は、条件付きブランチの
前の1つまたは複数の命令(従属命令と呼ぶ)の結果に依
存する。
【0005】条件付きブランチは、次のようにしてバブ
ルを発生する。パイプラインプロセッサは、ブランチ命
令の処理を終了してからでないと、パイプラインに入る
次の命令を決定することができない。したがって、新し
い命令は、ブランチ命令がパイプラインから出るまで、
パイプラインに入らない。したがって、条件付きブラン
チの後のパイプライン全体の長さが1つのバブルを形成
することがある。
【0006】多くのパイプラインプロセッサは、バブル
を低減または解消するためのバブル低減ハードウェアを
有する。そのようなパイプラインプロセッサは、ブラン
チ命令及びブランチとは独立な他の命令(独立命令と呼
ばれる)に関連する処理をオーバーラップさせることが
できる。
【0007】図1は、バブル低減ハードウェアを有する
パイプラインプロセッサの一例の構成図を示す。具体的
には、図1のパイプラインプロセッサは、ブランチプロ
セッサ114と2つの命令プロセッサ115を含む並列実行ユ
ニットを使用することによって、バブルを低減する。
【0008】図1を参照すると、命令キャッシュ110は、
メインメモリ112から命令を検索し、それをブランチプ
ロセッサ114に送る。ブランチプロセッサ114は、ブラン
チ命令を実行し、算術命令は固定小数点プロセッサ116
及び浮動小数点プロセッサ118などの算術プロセッサ115
に指名する。固定小数点プロセッサ116は、固定小数点
データに関係する算術命令を実行する。浮動小数点プロ
セッサ118は、浮動小数点データに関係する算術命令を
実行する。算術命令には、たとえば計算命令や比較命令
がある。
【0009】算術プロセッサ115は、計算命令の結果を
データキャッシュ122に記憶し、データはデータキャッ
シュ122からメインメモリ112に記憶される。算術プロセ
ッサ115は、比較命令の結果を示すように、ブランチプ
ロセッサ114内の条件レジスタ120をセットする。
【0010】ブランチ命令と算術命令を処理するための
別々の実行ユニットによって、図1の並列プロセッサ
は、以下のようにブランチ命令及び算術命令に関連する
処理をオーバーラップさせることができる。ブランチプ
ロセッサ114は、算術命令を指名し、ブランチプロセッ
サ114が以前に演算装置に指名した命令を演算装置が実
行するのを待たず、いくつかのブランチ命令を処理す
る。ブランチプロセッサ114は、算術プロセッサ115が命
令を実行するよりも速く命令を指名するので、一般に、
指名されたがまだ実行されていない命令がいくつかあ
る。したがって、ブランチプロセッサ114が命令の指名
を一時的に停止した場合、算術プロセッサ115は以前に
指名された命令を実行する。
【0011】しかしながら、図1のパイプラインプロセ
ッサのアーキテクチャは、条件付きブランチを処理する
とき、別のタイプの遅延を導入する可能性がある。具体
的には、ブランチプロセッサ114は、算術プロセッサ115
が条件レジスタ120をブランチが依存する比較のために
セットするまで、ブランチ命令を処理できない。したが
って、ブランチ命令が、ブランチ命令が依存する比較の
すぐ後にある場合、条件付きブランチの前でバブルが生
じ得る。
【0012】条件付きブランチの後にくるバブルを低減
または解消するためのバブル低減ハードウェアは、その
処理が条件付きブランチに関連する処理とオーバーラッ
プできるような命令が提供されないかぎり、効果を発揮
しない。各種の最適化技法がこのような命令を提供す
る。最初のこのような最適化技法は、命令に関する従属
性の分析を実行し、命令がオーバーラップできるように
命令の順序を並べ替えるものである。たとえば、図1の
パイプラインプロセッサでは、条件レジスタ120がセッ
トされるのをブランチプロセッサ114が待っている間
に、並べ替えられた命令が実行できる。またブランチプ
ロセッサ114がブランチ命令を処理している間にも、並
べ替えられた命令は実行できる。
【0013】第1の最適化技法で条件付きブランチ命令
の前後のバブルが減る量は、独立命令の処理時間に比例
する。したがって、第1の最適化技法は、従属命令と条
件付きブランチの間に置くことができる独立命令が不十
分な場合、バブルを完全には解消しない。後者は、comp
ute-compare-branch(計算−比較−ブランチ)ループにお
いてしばしば見られる。compute-compare-branchループ
とは、compute-compare-branchシーケンス、すなわち1
つまたは複数の計算を実行し、これらの計算に依存する
比較を実行し、この比較によって条件付けられた条件付
きブランチを実行する命令のシーケンスを含むループで
ある。多くのコンピュータは、compute-compare-branch
ループを処理するために、かなりの量の時間を消費す
る。
【0014】compute-compare-branchループの実行は以
下の通りである。
【0015】上記の表現、及び以下の表現では、comput
e-compare-branchループのcompute-compare-branchシー
ケンスだけを示す。このループは、他の命令を含むこと
ができる。また、computeiはシーケンスのi回目の繰り
返しの計算動作を表し、compareiはi回目の繰り返しの
比較動作を表し、conditioniはi番目の繰り返しの条件
付きブランチ動作を表す。本明細書では、動作とは、1
つまたは複数の機械命令の実行によって実行されるタス
クを意味する。
【0016】compute-compare-branchループの一例は、
変数xの値を計算し、xをこれまでに計算されたxの最大
値を表す変数Xmaxと比較し、xがXmaxより大きい場合にX
maxをxに割り当てるループである。このループの例の疑
似コードは以下の通りである。
【0017】図2は、図1のパイプラインプロセッサ上で
のcompute-compare-branchシーケンスの2回の繰り返し
を示す。図2及び図3において、右側の列のブロックは、
ブランチプロセッサ114の活動を表し、左側の列のブロ
ックは、1つの算術プロセッサ115の活動を表す。時間
は、これらの列の上端から下端に進む。各矢印は、矢の
根元側の動作に対する矢先側の動作の依存性を示す。右
から左を指す各矢印は、ブランチプロセッサ114からの
動作の指名と、算術プロセッサ115によるその動作の実
行との間の遅延を表す。左から右を指す各矢印は、算術
プロセッサ115による比較命令の実行と、ブランチプロ
セッサ114内の条件レジスタ120のセットとの間の遅延を
表す。各バブルは、算術プロセッサ115の非活動状態の
期間を示す。
【0018】図2を見ると、ブランチプロセッサ114はブ
ロック202内のcompute1を指名する。その後直ちに、ブ
ランチプロセッサ114はブロック204内のcompare1を指名
する。次にブランチプロセッサ114はcondition1の実行
を試みる。しかしながら、compare1のために条件レジス
タがセットされるまで、ブランチプロセッサ114はそれ
を実行することができない。ブロック212からの矢印214
で示される遅延の後、条件コードがセットされる。
【0019】一方、算術プロセッサ115は、以下のよう
にシーケンスの最初の繰り返しを処理する。ブロック20
2からの矢印206で示される遅延の後、算術プロセッサ11
5は、ブランチプロセッサ114からcompute1を受け取り、
ブロック208でそれを実行する。ブロック204からの矢印
210で示される遅延の後、算術プロセッサ115は、ブラン
チプロセッサ114からcompare1を受け取り、ブロック212
でそれを実行する。
【0020】ブロック208及び212の動作はブロック202
及び204の動作に依存するが、以下の理由から算術プロ
セッサ115においてはブロック208とブロック212の間に
バブルがない。第1に、ブランチプロセッサ114は、comp
ute1を指名した後ただちにcompare1を指名する。第2
に、動作の指名は、その実行よりも時間がかからない。
第3に、指名された命令が算術プロセッサ115に達するの
にかかる時間の量は一定である。したがって、算術プロ
セッサ115は、compute1の実行を終了する時までにcompa
re1を受け取ることになる。
【0021】ブロック212からの矢印214で示される遅延
の後、ブランチプロセッサ114は、ブロック216でbranch
1を実行する。branchiは、i番目の繰り返しのブランチ
命令を表す。condition1の条件が満たされていないと仮
定すると、ブランチプロセッサ114は次にブロック218で
compute2を指名する。その後すぐ、ブランチプロセッサ
114はブロック220でcompare2を指名する。ブランチプロ
セッサ114は、条件レジスタがcompare2のためにセット
されるまで、condition2を実行することができない。
【0022】ブロック212からの矢印214で示される遅延
と、ブロック216の実行時間と、ブロック218からの矢印
222で示される遅延の合計の後、算術プロセッサ115は、
ブランチプロセッサからcompute2を受け取り、それをブ
ロック224で実行する。この合計は、ブロック212の実行
とブロック224の実行の間の時間の量であり、バブル225
で表される。
【0023】ブロック220からの矢印226で示される遅延
の後、算術プロセッサ115はブランチプロセッサ114から
compare2を受け取り、それをブロック228で実行する。
ブロック224及び228の動作はブロック218及び220の動作
に依存するが、ブロック208とブロック212の間にバブル
がないのと同じ理由で、ブロック224とブロック228の間
にはバブルはない。
【0024】ブロック228からの矢印230で示される遅延
の後、ブランチプロセッサ114はブロック232でbranch2
を実行する。branch2の条件が満たされたと仮定する
と、ブランチプロセッサ114は、次にブロック234でcond
itional_blockを指名する。conditional_blockはブラン
チに関連する条件付きブロックを表す。
【0025】ブロック228からの矢印230で示される遅延
と、ブロック232の実行時間と、ブロック234からの矢印
236で示される遅延の合計の後、算術プロセッサ115はブ
ランチプロセッサからconditional_blockを受け取り、
それをブロック238で実行する。この合計は、ブロック2
28の実行とブロック238の実行の間の時間の量であり、
バブル240で表される。
【0026】ループアンローリングと呼ばれる第2の最
適化技法は、compute-compare-branchループ内の条件付
きブランチから生ずるバブルを減らすことができる。ル
ープアンローリングは、元のループでは複数回繰り返し
て実行されるはずの命令を組み合わせて、それぞれアン
ロールされたループの1回の繰り返しにすることによっ
て実行される。したがって、アンロールされたループの
繰り返しの回数が減る。各繰り返しに元のループのi回
繰り返しの命令を含むアンロールされたループは、iの
レベルにアンロールされたと言う。ループをアンロール
すると、追加の独立命令が提供される。このとき、第1
の最適化技法を実行して、独立命令の実行が条件付きブ
ランチに関連する命令の処理とオーバーラップするよう
に、アンロールされたループを配列し直すことができ
る。
【0027】レベル2にアンロールされたcompute-compa
re-branchループは、本質的に次のように実行される。
【0028】上の表現は、ループのcompute-compare-br
anchシーケンスだけを示す。このループは、他の命令を
含むことができる。上記の表現の添字は、計算、比較、
及び条件付きブロックが関連する元のループの何回目の
繰り返しかを示す。
【0029】元の繰り返し回数が奇数の場合、実行はわ
ずかに異なることに留意されたい。たとえば、元のルー
プの最初の繰り返しは、ループの前に明示的に実行でき
ることになる。このときループは、本質的に次のように
実行される。
【0030】ループアンローリング最適化がバブルを解
消するのに十分な独立命令を提供するかどうかは、アン
ロールされるループの性質に依存する。たとえば、図1
のパイプラインプロセッサ上で元のループのi回目及びi
−1回目の繰り返し動作を有するアンロールされたルー
プの繰り返しを処理する際、ループアンローリングは、
算術プロセッサ115がcomputei及びcompareiを処理する
のにかかる時間の量だけcondition(i-1)に先行するバブ
ルを減らす。ループアンローリングは、算術ブランチプ
ロセッサ115がcondition(i-1)を処理するのにかかる時
間の量だけconditioniに先行するバブルを減らす。
【0031】ループアンローリング最適化は、いくつか
の潜在的な弱点を有する。第1に、compute-compare-bra
nchシーケンスのcondition(i-1)に関連する条件付きブ
ロックが稀にしか実行されない場合、または実行するの
に少しの時間しか要しない場合、ループアンローリング
はconditioniに関連するバブルを実質的に減らさない。
conditioniはループ内の条件付きブランチの半分を表す
ので、このようなループのアンローリングの性能上の利
益は限られたものである。
【0032】さらに、ループアンローリング最適化は、
compute-compare-branchループのすべての繰り返しで実
行されるcompute-compare-branchシーケンスでしか実行
できない。このようなシーケンスは、無条件compute-co
mpare-branchシーケンスと呼ばれる。したがって、ルー
プアンローリングは、compute-compare-branchループ内
の条件付きブロック内部のcompute-compare-branchシー
ケンスに関連するバブルを減らさない。このようなシー
ケンスは、条件付きcompute-compare-branchシーケンス
と呼ばれる。
【0033】条件付きブランチに関連する遅延の問題に
ついて、図1の並列プロセッサに関して説明したが、こ
の問題はすべてのパイプラインプロセッサに及ぶ。
【0034】したがって、compute-compare-branchシー
ケンスに関連する条件付きブロックの平均計算時間が小
さい、またはcompute-compare-branchシーケンスが条件
付きである、compute-compare-branchループを処理する
際に、パイプラインプロセッサの効率を向上させる最適
化技法が必要とされている。
【0035】
【課題を解決するための手段】本発明は、パイプライン
プロセッサ用の最適化された機械コードを生成するため
の遅延された条件付きブランチの最適化と呼ばれる技法
に関する。遅延された条件付きブランチの最適化では、
compute-compare-branchループ内のcompute-compare-br
anchシーケンスをcompare-compute-branch(比較−計算
−ブランチ)シーケンスで置き換える。compute-compare
-branchループは、compute-compare-branchシーケン
ス、すなわち1つまたは複数の変数の値を計算する命令
と、その1つまたは複数の変数を使って比較を実行する
命令と、その比較によって条件づけられた条件付きブラ
ンチを実行する命令のシーケンスを有するループであ
る。
【0036】compare-compute-branchシーケンスでは、
compute-compare-branchシーケンスは以下のように並べ
替えられる。最初に、比較を実行する。この比較は、以
前にセットされた、1つまたは複数の変数の値を含む。
第2に、その1つまたは複数の変数の現在の値を計算する
ための計算を実行する。最後に、比較によって条件付け
られた条件付きブランチを実行する。
【0037】条件付きブランチが、元のループの以前の
繰り返し中に実行されたかのように実行されるように、
適当な措置が取られる。ただし、compute-compare-bran
chシーケンスが条件付きである場合、条件付きブランチ
は、実際には、そのシーケンスが実行された最後の繰り
返し中に実行されたかのように実行されることに留意さ
れたい。
【0038】1つまたは複数の一時変数は、それらの変
数の以前の値を記憶することができる。シーケンスの終
わりに、一時変数をそれらの変数のそれらの値にセット
することができる。
【0039】compare-compute-branchchシーケンスの
効果がcompute-compare-branchシーケンスの効果と同じ
になるように、初期設定動作及び終了動作が実行され
る。初期設定動作は、compare-compute-branchchシー
ケンスの実行前に一時変数を初期設定することを含む。
具体的には、一時変数は、このシーケンスが最初に実行
されるときは条件が満たされないようにセットされる。
【0040】終了動作は、ループの実行後に比較及び条
件付きブランチを実行することを含む。この比較は一時
変数を含み、条件付きブランチがこの比較によって条件
付けられる。シーケンスが実行されなかった場合、条件
付きブロックは実行されない。そうでない場合は、条件
付きブランチが、そのシーケンスが実行された元のルー
プの最後の繰り返し中に実行されたかのように実行され
るように、適当な措置が取られる。
【0041】計算命令は、しばしば、かなりの処理時間
を要する。したがって、これらの命令を各比較と条件付
きブランチの間に置くと、しばしばバブルが最小にな
る。
【0042】遅延された条件付きブランチの最適化は、
ループの各繰り返し中に実行されるcompute-compare-br
anchシーケンスだけには限定されない。シーケンスの最
初の実行後、一時変数は、そのシーケンスがループの以
前の繰り返し中に実行されたかどうかに関係なく、その
シーケンスが前に実行されたときに計算された変数の値
を表す。したがって、遅延された条件付きブランチの最
適化は、ループ内部の条件付きブロックの一部分である
compute-compare-branchシーケンスで実行することがで
きる。
【0043】本発明の上記及びその他の目的、特徴、及
び利点は、添付の図面に示した本発明の好ましい実施例
に関する以下のより具体的な説明から明らかになろう。
【0044】
【実施例】本発明は、遅延された条件付きブランチの最
適化と呼ばれる最適化技法に関する。遅延された条件付
きブランチの最適化は、条件付きブランチに関連するバ
ブルを低減または解消することによって性能を向上させ
るように、compute-compare-branchループを再構築す
る。バブル低減ハードウェアを有するパイプラインプロ
セッサ上では、遅延された条件付きブランチの最適化
は、条件付きブランチの後のバブル、ならびに条件付き
ブランチの前のバブルを低減または解消する。
【0045】遅延された条件付きブランチの最適化を有
するコンパイラによってコンパイルされたとき、n回繰
り返すcompute-compare-branchループの実行は、以下の
ように表される。
【0046】上記の表現において、シーケンスのi回目
の実行は、executioniの下の4つの動作によって表され
る。compute-compare-branchシーケンスが条件付きであ
った場合、executioniは必ずしもシーケンスのi回目の
実行にはない。動作computeinitialからなる初期設定
が、ループの実行前に実行される。computeinitialは、
一時変数、アレイまたはprevious_valueと呼ばれるその
他のデータ構造をセットする命令を表す。したがって、
条件付きブランチが依存する条件は、compareprevious
が最初に実行されるときには存在しない。
【0047】ループの実行は、compare-compute-branch
chシーケンスが実行されるたびにexecutioniに関連す
る4つの動作の実行を伴う。まず、comparepreviousは、
previous_valueの値を使って比較を実行する命令を表
す。第2に、computecurrentは、次の比較が依存する変
数の値を計算する命令を表す。第3に、condition
previousは、comparepreviousの結果に依存する条件付
きブロックを表す。
【0048】conditionpreviousの結果が、条件付きブ
ロックが実行されたことを示す場合、これは元のループ
の以前の繰り返し中に実行されたかのように実行され
る。しかし、compute-compare-branchシーケンスが条件
付きの場合、条件付きブランチは、実際には、そのシー
ケンスが実行された最後の繰り返し中に実行されたかの
ように実行されることに留意されたい。
【0049】最後に、assign_current_to_previousは、
computecurrentで計算された変数の値をprevious_value
に割り当てる命令を表す。
【0050】ループの実行後、2つの終了動作が実行さ
れる。第1に、comparepreviousは、previous_value
の値を使って比較を実行する命令を表す。compute-comp
are-branchシーケンスが少なくとも1回実行された場
合、この比較は、最後の実行のcomputecurrentによって
計算された値を使用する。そうでない場合、この比較
は、computeinitialによってセットされた値を使用す
る。第2に、conditionpreviousは、compareprevious
依存する条件付きブロックを表す。シーケンスが実行さ
れなかった場合、conditionpreviousは実行されない。
そうでない場合は、conditionpreviousが、そのシーケ
ンスが実行された元のループの最後の繰り返し中に実行
されたかのように実行されるように、適当な措置が取ら
れる。
【0051】compute-compare-branchループは、互いに
独立な多数のcompute-compare-branchシーケンスを含む
ことができる。遅延された条件付きブランチの最適化を
有するコンパイラによってコンパイルされた場合、その
ようなループの実行は、各シーケンスにprevious_value
及び初期設定、実行、終了動作が関連づけられる点を除
き、1つのcompute-compare-branchシーケンスを有する
ループの実行と同様である。
【0052】またcompute-compare-branchループは、互
いに依存する多数のcompute-compare-branchシーケンス
を含むことができる。たとえば、外側compute-compare-
branchシーケンスの条件付きブランチが、内側compute-
compare-branchシーケンスを含むことができる。遅延さ
れた条件付きブランチの最適化を有するコンパイラでコ
ンパイルされた場合、そのようなループの実行は以下の
ようになる。
【0053】上記の表現では、外側シーケンスのi回目
の実行は、executioniの下の4つの動作によって表され
る。外側compute-compare-branchシーケンスに関連する
動作は、小文字で書き、内側compute-compare-branchシ
ーケンスに関連する動作は、大文字で書いてある。
【0054】ループの実行は、各シーケンスに関連する
実行がprevious_value及び初期設定、実行、終了動作に
なる点を除き、単一のcompute-compare-branchシーケン
スを有するループの実行と同様である。
【0055】内側compute-compare-branchシーケンスの
最後の実行は第1のシーケンスの終了動作中に実行でき
ることに留意されたい。したがって、外側シーケンスの
終了動作は、内側シーケンスの終了動作より前に実行さ
れなければならない。
【0056】図3は、遅延された条件付きブランチの最
適化がバブルをどのようにして低減または解消するかを
示す。図3は、図1のパイプラインプロセッサ上でのcomp
are-compute-branchchシーケンスの2つの実行を示す。
【0057】図3を見ると、ブランチプロセッサ114は、
ブロック250でcomparepreviousを指名する。その後ただ
ちに、ブランチプロセッサ114はcomputecurrentを指名
する。
【0058】その間に、ブロック250からの矢印254で示
される遅延の後、算術プロセッサ115は、ブランチプロ
セッサ114からcomparepreviousを受け取り、ブロック25
6の動作を実行する。ブロック252からの矢印258で示さ
れる遅延の後、算術プロセッサ115は、computecurrent
を受け取り、ブロック260の動作を実行する。
【0059】ブロック256及び260の動作はブロック250
及び252に依存するが、以下の理由からブロック256とブ
ロック260の間にはバブルがない。第1に、ブランチプロ
セッサは、comparepreviousを指名した直後に、compute
currentを指名する。第2に、動作の指名は、その実行よ
りも時間がかからない。第3に、指名された命令が算術
プロセッサ115に達するのにかかる時間の量は一定であ
る。したがって、算術プロセッサ115は、compare
previousの実行を終了する時までにcomputecurrentを受
け取ることになる。
【0060】ブロック256からの矢印262で示される遅延
の後、条件レジスタ120がcomparepreviousのためにセッ
トされる。次に、ブランチプロセッサ114は、ブロック2
53でbranchpreviousを実行する。branchpreviousの条件
がcompare-compute-branchシーケンスの最初の実行で満
たされないと仮定すると、次にブロック264でブランチ
プロセッサはcompareprevious、すなわちcompare-compu
te-branchchシーケンスの第2の実行の最初の動作を指
名する。
【0061】ブロック256からの矢印262で示される遅延
と、ブロック253の実行時間と、ブロック264からの矢印
268で示される遅延の合計の後、算術プロセッサ115は、
ブランチプロセッサからcomparepreviousを受け取り、
それをブロック270で実行する。この合計はしばしばブ
ロック260の実行時間を超えない。したがって、ブロッ
ク260とブロック270の間にはしばしばバブルがないこと
になる。
【0062】ブロック266で、ブランチプロセッサ114
は、computecurrentを指名する。ブロック266からの矢
印272で示される遅延の後、算術プロセッサ115は、comp
utecurrentを受け取り、ブロック274でその動作を処理
する。
【0063】ブロック270からの矢印276で示される遅延
の後、compareprevious用の条件レジスタがbranch
previous用にセットされる。次に、ブランチプロセッサ
114は、ブロック278でbranchpreviousを実行する。bran
chpreviousの条件がcompare-compute-branchchシーケ
ンスの第2の実行で満たされないと仮定すると、次にブ
ロック280でブランチプロセッサはconditional_block、
すなわちbranchpreviousに関連する条件付きブロックを
指名する。
【0064】ブロック270からの矢印276で示される遅延
と、ブロック278の実行時間と、ブロック280からの矢印
282で示される遅延の合計の後、算術プロセッサ115は、
ブランチプロセッサからconditional_blockを受け取
り、それをブロック284で実行する。この合計はしばし
ばブロック274の実行時間を超えない。したがって、ブ
ロック274とブロック284の間にはしばしばバブルがない
ことになる。
【0065】図4は、遅延された条件付きブランチの最
適化を有するコンパイラの動作の流れ図を示す。第1
に、ブロック310が実行されてソースコードを中間コー
ドに変換する。第2に、ブロック312が実行されてその中
間コードを最適化された中間コードに変換する。最後
に、ブロック314が実行されて最適化された中間コード
を最適化された機械コードに変換する。
【0066】その代わりにブロック312より前にブロッ
ク314が機能することもできることに留意されたい。そ
のような構成では、ブロック314で中間コードを機械コ
ードに変換し、ブロック312でその機械コードを最適化
された機械コードに変換することになる。
【0067】図5は、遅延された条件付きブランチの最
適化技法の動作の流れ図を示す。この技法は、図4のブ
ロック312で実行される最適化の一部分である。まず、
ブロック410が実行されて、中間コードの次のブロック
を読み取る。第2に、判断ブロック412が実行されて、そ
のブロックがcompute-compare-branchループであるか否
かを決定する。否の場合、制御の流れは、ブロック410
に戻る。そうでない場合、制御の流れはブロック414に
進む。
【0068】ブロック410及び判断ブロック412は、comp
ute-compare-branchループを検出する働きをすることに
留意されたい。このようなループを検出する他の様々な
方法は当業者には自明である。また、このループ検出法
を最適化機構に組み込むこともできるが、遅延された条
件付きブランチの最適化技法用に別になっていない。
【0069】ブロック414で、computeinitialで表され
る命令を生成することによって、ループ内の各compute-
compare-branchシーケンスの初期設定が実行される。co
mputeinitial動作は、comparepreviousが最初に実行さ
れるときにそのシーケンスの条件付きブランチが依存す
る条件が存在しないように、各シーケンスに関連するpr
evious_valueをセットする。
【0070】ブロック414の実行後、ブロック416が実行
されて、ループを再構築する。ブロック416で、各compu
te-compare-branchシーケンスが、compareprevious、co
mputecurrent、conditionprevious、及びassign_curren
t_to_previousで表される命令で置き換えられる。
【0071】ブロック416の実行後、ブロック418が実行
されて、ループ内の各compute-compare-branchシーケン
スに関連するループ終了命令を生成する。ループ終了命
令は、compareprevious及びconditionpreviousで表され
る命令である。ブロック418で、各compute-compare-bra
nchシーケンスに関連するループ終了命令が、それが依
存する任意のcompute-compare-branchシーケンスの終了
命令の後に置かれる。
【0072】判断ブロック412でcompute-compare-branc
hループが検出された後は、ブロック414、416及び418は
任意の順序で実行できることに留意されたい。これら3
つのブロックが実行された後、制御の流れは次のcomput
e-compare-branchループを検索するためにブロック410
に戻る。すなわち、ブロック418の実行後、制御の流れ
はブロック410に戻る。
【0073】図6は、遅延された条件付きブランチの最
適化を有するコンパイラの構成図を示す。フロントエン
ド510は、ソースコードを中間コードに変換する。フロ
ントエンド510は、図4のブロック310に対応する。バッ
クエンド512は、中間コードを最適化された機械コード
に変換する。バックエンドは、最適化機構514及び機械
コード生成機構516を含む。最適化機構514は、中間コー
ドを最適化された中間コードに変換し、図4のブロック3
12に対応する。最適化機構514は、遅延された条件付き
ブランチの最適化機構518を含む。遅延された条件付き
ブランチの最適化機構518は、図5の遅延された条件付き
ブランチの最適化技法に対応する。機械コード生成機構
516は、最適化された中間コードを最適化された機械コ
ードに変換する。これは、図4のブロック314に対応す
る。
【0074】機械コード生成機構516と最適化機構514の
位置は逆にできることに留意されたい。そのような構成
では、機械コード生成機構516が中間コードを機械コー
ドに変換し、最適化機構514が機械コードを最適化され
た機械コードに変換することになる。
【0075】図7は、遅延された条件付きブランチの最
適化機構518の機能的構成図である。遅延された条件付
きブランチの最適化機構518は、compute-compare-branc
h検出機構610、及びループ再構築機構611からなる。ル
ープ再構築機構611は、初期ブランチ排除機構612、シー
ケンス置換機構614、及びループ終了機構616を含む。
【0076】compute-compare-branch検出機構610は、c
ompute-compare-branchループを探して中間コードを連
続的に走査する。検出機構610は、図5のブロック410及
び判断ブロック412に関して説明したように、そのよう
なループを検出する。ブロック410及び判断ブロック412
の場合と同様に、compute-compare-branch検出機構610
は、最適化機構514の、遅延された条件付きブランチの
最適化機構518用に別になっていない要素であってもよ
い。図3及び図4に関連して上に述べたごとく、計算−比
較−ブランチ検出機構610への入力は中間コードでも機
械コードでもよい。計算−比較−ブランチへのこの入力
は遅延された条件付きブランチの入力コードと呼ばれ
る。
【0077】そのようなループを検出するまで、comput
e-compare-branch検出機構610は、遅延された条件付き
ブランチの出力として無修正の中間コードを出力する。
検出機構610は、そのようなループを検出するたびに、
そのループを含む計算−比較−ブランチコードをループ
再構築機構611に送る。次に、ループ再構築機構611の各
構成要素(すなわち、初期ブランチ排除機構612、シーケ
ンス置換機構614及びループ終了機構616)が、任意の順
序で動作して遅延された条件付きブランチの出力を生成
する。
【0078】初期ブランチ排除機構612は、compute
initialで表される、ループ内の各compute-compare-bra
nchシーケンスの初期設定を実行する命令を生成する。
初期ブランチ排除機構612は、図5のブロック414に関し
て説明したように動作する。
【0079】シーケンス置換機構614は、compare
previous、computecurrent、conditionprevious、及びa
ssign_current_to_previousで表される、compute-compa
re-branchシーケンスを、compare-compute-branchchシ
ーケンスで置き換える命令を生成する。シーケンス置換
機構614は、図5のブロック416に関して説明したように
動作する。
【0080】ループ終了機構616は、compareprevious
びconditionpreviousで表される、ループ内の各compute
-compare-branchシーケンスを終了する命令を生成す
る。ループ終了機構616は、図5のブロック418に関して
説明したように動作する。
【0081】初期ブランチ排除機構612、シーケンス置
換機構614、及びループ終了機構616が実行を終えると、
compute-compare-branch検出機構610は、次のcompute-c
ompare-branchループを探して中間コードを走査する。
【0082】遅延された条件付きブランチの最適化を有
するコンパイラのいくつかの変形が可能である。たとえ
ば、1つの変形は、compute-compare-branchループの無
条件compute-compare-branchシーケンスに対してだけ遅
延された条件付きブランチの最適化を実行するものであ
る。この変形は、図5の判断ブロック412で無条件comput
e-compare-branchシーケンスだけを検出することによっ
て実施できる。
【0083】第2の変形は、compute-compare-branchル
ープの条件付きcompute-compare-branchシーケンスに対
してだけ遅延された条件付きブランチの最適化を実行す
るものである。この変形は、図5の判断ブロック412で条
件付きcompute-compare-branchシーケンスだけを検出す
ることによって実施できる。
【0084】第3の変形は、compute-compare-branchル
ープの条件付きcompute-compare-branchシーケンスに対
しては遅延された条件付きブランチの最適化を実行し、
無条件compute-compare-branchシーケンスに対してはル
ープアンローリング最適化を実行するものである。この
変形は、たとえば、無条件ループをレベル2にアンロー
ルすることができる。第3の変形のコンパイラでコンパ
イルされたとき、無条件compute-compare-branchシーケ
ンスの条件付きブランチによって条件付けられたcomput
e-compare-branchシーケンスを有するcompute-compare-
branchループは本質的に次のように実行される。
【0085】上の表現において、動作に対する数字の添
字は、その動作が関連する元のループの繰り返しを示
す。ループアンローリング最適化によって生成される動
作は大文字で書き、遅延された条件付きブランチの最適
化によって生成される動作は、小文字で書いてある。
【0086】元の繰り返しの回数が奇数の場合、実行は
わずかに異なることに留意されたい。たとえば、元のル
ープの最初の繰り返しは、ループの前に明示的に実行で
きることとなる。したがって、ループは、本質的に次の
ように実行される。
【0087】遅延された条件付きブランチの最適化を有
するコンパイラの第3の変形は、図5の判断ブロック412
で条件付きcompute-compare-branchループだけを検出
し、図6の最適化機構514内にループアンローリング最適
化機構520及び遅延された条件付きブランチの最適化機
構518を含めることによって実施される。ループアンロ
ーリング最適化機構520は、「従来の技術」の節で説明
しように、ループアンローリングを実行することにな
る。
【図面の簡単な説明】
【図1】パイプラインアーキテクチャを有するコンピュ
ータの一例の構成図である。
【図2】図1のパイプラインプロセッサ上でのcompute-c
ompare-branchシーケンスの実行を示す図である。
【図3】図1のパイプラインプロセッサ上でのcompare-c
ompute-branchchシーケンスの実行を示す図である。
【図4】遅延された条件付きブランチの最適化を有する
コンパイラの動作の流れ図である。
【図5】図4の遅延された条件付きブランチの最適化技
法の動作の流れ図である。
【図6】図4の遅延された条件付きブランチの最適化を
有するコンパイラの構成図である。
【図7】図6の遅延された条件付きブランチの最適化機
構の構成図である。
【符号の説明】
110 命令キャッシュ 112 メインメモリ 114 ブランチプロセッサ 115 算術プロセッサ 116 固定小数点プロセッサ 118 浮動小数点プロセッサ 120 条件レジスタ 122 データキャッシュ

Claims (9)

    (57)【特許請求の範囲】
  1. 【請求項1】計算−比較−ブランチ検出機構及びループ
    再構築機構を有する遅延された条件付きブランチの最適
    化機構を具備するコード変換装置においてソースコード
    を最適化された機械コードに変換する方法であって、 (a)遅延された条件付きブランチの入力コード中の(1)変
    数値を計算するために計算を実行する命令、(2)前記変
    数を使って比較を実行する命令及び(3)前記比較によっ
    てある条件が指示された場合に条件付き命令を実行する
    命令を含む計算−比較−ブランチシーケンスを有するル
    ープを前記計算−比較−ブランチ検出機構により検出す
    る段階と、 (b)前記段階(a)で前記ループが検出されなかった場合前
    記計算−比較−ブランチ検出機構により第1の遅延され
    た条件付きブランチの出力を生成する段階と、 (c)前記段階(a)で前記計算−比較−ブランチ検出機構が
    前記ループを検出した場合前記計算−比較−ブランチ検
    出機構により計算−比較−ブランチシーケンスを有する
    前記ループを構成する計算−比較−ブランチコードを生
    成する段階と、 (d)前記の計算−比較−ブランチシーケンスを(1)前記変
    数の以前の値を使って比較を実行する命令、(2)前記変
    数の現在の値を計算するために計算を実行する命令及び
    (3)前記変数の前記の以前の値を使った比較によって前
    記条件が指示された場合前記条件付き命令を実行する命
    令を含む比較−計算−ブランチシーケンスで置き換える
    段階と、 (e)前記比較−計算−ブランチシーケンスを構成する第2
    の遅延された条件付きブランチ出力を前記ループ再構築
    機構により生成する段階とを含み、 前記ループ再構築機構は初期ブランチ排除機構、シーケ
    ンス置換機構及びループ終了機構を有し、 前記段階(d)は、 (i)一時変数を使って前記比較が実行されたとき前記条
    件が指示されないように前記一時変数をセットするよう
    前記ループの前に実行されるべき動作を前記初期ブラン
    チ排除機構により生成する段階と、 (ii)前記計算−比較−ブランチ検出機構から受け取られ
    た前記計算−比較−ブランチコードのループ内に含まれ
    る計算−比較−ブランチシーケンスを、(1)前記一時変
    数を使って前記比較を実行する命令、(2)前記変数の現
    在値を計算するために計算を実行する命令、(3)前記変
    数の前記の以前の値を使った比較によって前記条件が指
    示された場合前記条件付き命令を実行する命令及び(4)
    前記変数値を前記一時変数に割り当てる命令で前記シー
    ケンス置換機構により置き換える段階と、 (iii)前記ループの後に前記ループ終了機構により実行
    されるべき、(1)前記一時変数を使って前記比較を実行
    するための動作及び(2)前記変数の前記の以前の値を使
    った前記比較によって前記条件が指示された場合前記条
    件付き命令を実行するための動作を前記ループ終了機構
    により生成する段階と、 を含むことを特徴とするコード変換方法。
  2. 【請求項2】前記の遅延された条件付きブランチの入力
    コードは中間コードであり、前記第1及び第2の遅延され
    た条件付きブランチの出力コードは最適化された中間コ
    ードであることを特徴とする、請求項1に記載のコード
    変換方法。
  3. 【請求項3】前記の遅延された条件付きブランチの入力
    コードは機械コードであり、前記第1及び第2の遅延され
    た条件付きブランチの出力コードは最適化された機械コ
    ードであることを特徴とする、請求項1に記載のコード
    変換方法。
  4. 【請求項4】遅延された条件付きブランチの最適化機構
    を有し、ソースコードを最適化された機械コードに変換
    するためのコード変換装置において、 前記遅延された条件付きブランチ最適化機構は、 遅延された条件付きブランチの入力コードが計算−比較
    −ブランチシーケンスを持つループを含まない場合前記
    遅延された条件付きブランチ入力コードから前記遅延さ
    れた条件付きブランチの最適化機構への遅延された条件
    付きブランチ入力コード中の命令を構成する第1の遅延
    された条件付きブランチ出力コードを生成し且つ(1)変
    数値を計算するために計算を実行する命令、(2)前記変
    数を使って比較を実行する命令及び(3)前記比較によっ
    てある条件が指示された場合条件付き命令を実行する命
    令を有する前記計算−比較−ブランチシーケンスを持つ
    前記ループを構成する計算−比較−ブランチコードを生
    成するする計算−比較−ブランチ検出機構と、 前記計算−比較−ブランチ検出機構に接続され、前記計
    算−比較−ブランチコード内の前記ループの前記計算−
    比較−ブランチシーケンスを比較−計算−ブランチシー
    ケンスで置き換え、(1)前記変数の以前の値を使って前
    記比較を実行する命令、(2)前記変数の現在の値を計算
    するために計算を実行する命令及び(3)前記変数の前記
    の以前の値を使った前記比較によって前記条件が指示さ
    れた場合前記条件付き命令を実行する命令を含む比較−
    計算−ブランチシーケンスを持つ計算−比較−ブランチ
    コードを構成する第2の遅延された条件付きブランチ出
    力コードを生成するループ再構築機構とを含み、 前記ループ再構築機構は、 前記ループ内の前記計算−比較−ブランチシーケンスの
    各々について、前記ループの前に実行されるべき、一時
    変数を使った前記比較が実行されたとき前記条件が指示
    されないように前記一時変数をセットする動作を挿入す
    る初期ブランチ排除機構と、 前記計算−比較−ブランチ検出機構により生成された前
    記計算−比較−ブランチコード内の前記計算−比較−ブ
    ランチコードを(1)前記一時変数を使って前記比較を実
    行する命令、(2)前記変数の前記の現在の値を計算する
    ために計算を実行する命令、(3)前記変数の前記の以前
    の値を使った前記比較によって前記条件が指示された場
    合前記条件付き命令を実行する命令及び(4)前記変数値
    を前記一時変数に割り当てる命令で置き換えるシーケン
    ス置換機構と、 前記計算−比較−ブランチシーケンスの各々について、
    前記ループの後で実行されるべき(1)前記一時変数を使
    って前記比較を実行する動作及び(2)前記変数の前記の
    以前の値を使った前記比較によって前記条件が指示され
    た場合前記条件付き命令を実行する動作を生成するルー
    プ終了機構とを含むことを特徴とするコード変換装置。
  5. 【請求項5】前記の遅延された条件付きブランチの入力
    コードは中間コードであり、前記の遅延された条件付き
    ブランチの出力コードは最適化された中間コードである
    ことを特徴とする、請求項4に記載のコード変換装置。
  6. 【請求項6】前記の遅延された条件付きブランチの入力
    コードは機械コードであり、前記の遅延された条件付き
    ブランチの出力コードは最適化された機械コードである
    ことを特徴とする、請求項4に記載のコード変換装置。
  7. 【請求項7】ソースコードを最適化された機械コードに
    変換するためのコード変換装置において、 遅延された条件付きブランチの入力コード内で(1)変数
    値を計算するために計算を実行する命令、(2)前記変数
    を使って比較を実行する命令及び(3)前記比較によって
    ある条件が指示された場合条件付き命令を実行する命令
    を含む計算−比較−ブランチシーケンスを有するループ
    を検出する計算−比較−ブランチ検出手段と、 前記計算−比較−ブランチ検出手段に接続され、前記計
    算−比較−ブランチシーケンスを(1)前記変数の以前の
    値を使って前記比較を実行する命令、(2)前記変数の現
    在の値を計算するために前記計算を実行する命令及び
    (3)前記変数の前記の以前の値を使った前記比較によっ
    て前記条件が指示された場合前記条件付き命令を実行す
    る命令を含む比較−計算−ブランチシーケンスで置き換
    えることによって、前記ループを再構築した遅延された
    条件付きブランチの出力コードを生成するループ再構築
    手段とを含み、 前記ループ再構築手段が、 一時変数を使って前記比較が実行されたとき前記条件が
    指示されないように前記ループの前に実行されるべき、
    前記一時変数をセットする動作を生成する初期ブランチ
    排除手段と、 前記計算−比較−ブランチシーケンスを(1)前記一時変
    数を使って前記比較を実行する命令、(2)前記変数の前
    記の現在の値を計算するために計算を実行する命令、
    (3)前記変数の前記の以前の値を使った前記比較によっ
    て前記条件が指示された場合前記条件付き命令を実行す
    る命令、及び(4)前記変数値を前記一時変数に割り当て
    る命令で置き換えるシーケンス置き換え手段と、 前記ループの後で実行されるべき、(1)前記一時変数を
    使って前記比較を実行する動作及び(2)前記変数の前記
    の以前の値を使った前記比較によって前記条件が指示さ
    れた場合前記条件付き命令を実行するための動作を生成
    するループ終了手段とを含むことを特徴とするコード変
    換装置。
  8. 【請求項8】前記の遅延された条件付きブランチの入力
    コードは中間コードであり、前記の遅延された条件付き
    ブランチの出力コードは最適化された中間コードである
    ことを特徴とする、請求項7に記載のコード変換装置。
  9. 【請求項9】前記の遅延された条件付きブランチの入力
    コードは機械コードであり、前記の遅延された条件付き
    ブランチの出力コードは最適化された機械コードである
    ことを特徴とする、請求項7に記載のコード変換装置。
JP4110981A 1991-05-15 1992-04-30 コード変換方法及び装置 Expired - Lifetime JP2599532B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/700,727 US5450585A (en) 1991-05-15 1991-05-15 Compiler with delayed conditional branching
US700727 1991-05-15

Publications (2)

Publication Number Publication Date
JPH07168717A JPH07168717A (ja) 1995-07-04
JP2599532B2 true JP2599532B2 (ja) 1997-04-09

Family

ID=24814630

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4110981A Expired - Lifetime JP2599532B2 (ja) 1991-05-15 1992-04-30 コード変換方法及び装置

Country Status (3)

Country Link
US (1) US5450585A (ja)
EP (1) EP0514135A1 (ja)
JP (1) JP2599532B2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1994022079A1 (de) * 1993-03-15 1994-09-29 Siemens Aktiengesellschaft Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
US5644769A (en) * 1993-06-14 1997-07-01 Matsushita Electric Industrial Co., Ltd. System for optimizing program by virtually executing the instruction prior to actual execution of the program to invalidate unnecessary instructions
JP3190773B2 (ja) * 1993-09-30 2001-07-23 日本電気株式会社 言語処理プログラムのコンパイル処理方法
JPH0816378A (ja) * 1994-06-30 1996-01-19 Fujitsu Ltd プログラム・リバース解析方法および装置
JP2634144B2 (ja) * 1994-07-06 1997-07-23 インターナショナル・ビジネス・マシーンズ・コーポレイション プログラムの並列化実行方法及び並列化実行コンパイラ
JP3494489B2 (ja) * 1994-11-30 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
DE19549468C2 (de) * 1994-11-30 1999-12-30 Mitsubishi Electric Corp Compiler
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ
JP2987311B2 (ja) * 1995-05-12 1999-12-06 松下電器産業株式会社 プロセッサ及び翻訳装置
US5757966A (en) * 1995-07-11 1998-05-26 Xerox Corporation High-speed encoder
US6301652B1 (en) * 1996-01-31 2001-10-09 International Business Machines Corporation Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
US5901318A (en) * 1996-05-06 1999-05-04 Hewlett-Packard Company Method and system for optimizing code
US5946493A (en) * 1997-03-28 1999-08-31 International Business Machines Corporation Method and system in a data processing system for association of source code instructions with an optimized listing of object code instructions
US6189092B1 (en) 1997-06-30 2001-02-13 Matsushita Electric Industrial Co., Ltd. Pipeline processor capable of reducing branch hazards with small-scale circuit
US6212630B1 (en) 1997-12-10 2001-04-03 Matsushita Electric Industrial Co., Ltd. Microprocessor for overlapping stack frame allocation with saving of subroutine data into stack area
US6564374B1 (en) * 1999-04-22 2003-05-13 International Business Machines Corporation Method and apparatus for employing cognitive compares in compare statement sequences
US6615403B1 (en) * 2000-06-30 2003-09-02 Intel Corporation Compare speculation in software-pipelined loops
US6520893B2 (en) 2000-07-24 2003-02-18 Craig A. Bray Method of using an inflatable exercise belt
US7278137B1 (en) 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
US7493604B2 (en) * 2004-10-21 2009-02-17 Microsoft Corporation Conditional compilation of intermediate language code based on current environment
US8813057B2 (en) * 2007-03-31 2014-08-19 Intel Corporation Branch pruning in architectures with speculation support
US20170123798A1 (en) * 2015-11-01 2017-05-04 Centipede Semi Ltd. Hardware-based run-time mitigation of blocks having multiple conditional branches

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4566063A (en) * 1983-10-17 1986-01-21 Motorola, Inc. Data processor which can repeat the execution of instruction loops with minimal instruction fetches
JPS6182238A (ja) * 1984-08-18 1986-04-25 Fujitsu Ltd 命令の条件分岐制御方法
US4642765A (en) * 1985-04-15 1987-02-10 International Business Machines Corporation Optimization of range checking
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization
EP0208181A1 (en) * 1985-06-28 1987-01-14 Hewlett-Packard Company Programme counter queue for a pipelined processor
US4777587A (en) * 1985-08-30 1988-10-11 Advanced Micro Devices, Inc. System for processing single-cycle branch instruction in a pipeline having relative, absolute, indirect and trap addresses
JPH0795274B2 (ja) * 1986-09-19 1995-10-11 株式会社日立製作所 配列添字解析方法
US4967351A (en) * 1986-10-17 1990-10-30 Amdahl Corporation Central processor architecture implementing deterministic early condition code analysis using digit based, subterm computation and selective subterm combination
JPS63205732A (ja) * 1987-02-23 1988-08-25 Agency Of Ind Science & Technol 情報処理装置
US4965724A (en) * 1987-03-05 1990-10-23 Oki Electric Industry Co., Ltd. Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program
US4833599A (en) * 1987-04-20 1989-05-23 Multiflow Computer, Inc. Hierarchical priority branch handling for parallel execution in a parallel processor
US5226128A (en) * 1987-05-01 1993-07-06 Hewlett-Packard Company Horizontal computer having register multiconnect for execution of a loop with a branch
JPH01258033A (ja) * 1988-04-07 1989-10-16 Fujitsu Ltd 遅延分岐命令制御方式
US4974155A (en) * 1988-08-15 1990-11-27 Evans & Sutherland Computer Corp. Variable delay branch system
US4961141A (en) * 1988-12-16 1990-10-02 International Business Machines Corporation Generating efficient code for a computer with dissimilar register spaces
US5202995A (en) * 1989-10-12 1993-04-13 International Business Machines Corporation Method for removing invariant branches from instruction loops of a computer program

Also Published As

Publication number Publication date
US5450585A (en) 1995-09-12
JPH07168717A (ja) 1995-07-04
EP0514135A1 (en) 1992-11-19

Similar Documents

Publication Publication Date Title
JP2599532B2 (ja) コード変換方法及び装置
US5151991A (en) Parallelization compile method and system
US5857104A (en) Synthetic dynamic branch prediction
JP4745341B2 (ja) 依存性チェーン処理のためのシステム、方法及び装置
US6192515B1 (en) Method for software pipelining nested loops
JPH04307625A (ja) ループ最適化方法及び装置
US6922714B2 (en) Floating point unit power reduction scheme
US5901318A (en) Method and system for optimizing code
JPH1097430A (ja) 最適化のためにアセンブリコードルーチンをソースコードルーチンに挿入する方法およびそのシステム
US7747992B2 (en) Methods and apparatus for creating software basic block layouts
US6425124B1 (en) Resource allocation device for reducing the size and run time of a machine language program
US6363405B1 (en) Computer system and method for parallel computations using table approximation methods
US6954927B2 (en) Hardware supported software pipelined loop prologue optimization
US20060048111A1 (en) Method and apparatus for determining the profitability of expanding unpipelined instructions
Omidian et al. An accelerated OpenVX overlay for pure software programmers
US20030233641A1 (en) System and method for merging control flow paths
US6567831B1 (en) Computer system and method for parallel computations using table approximation
US8479179B2 (en) Compiling method, compiling apparatus and computer system for a loop in a program
Nakatani et al. Making compaction-based parallelization affordable
Uht Extraction of massive instruction level parallelism
Lu et al. Branch penalty reduction on IBM cell SPUs via software branch hinting
Wedig Dynamic Detection of Concurrency in DEL Instruction Streams
Singhvi et al. Pipeline Hazards and its Resolutions
Hentrich et al. Fine-Grained Instruction Placement in Polymorphic Computing Architectures
Gao et al. Design and Implementation of A Multi-Core CPU Compilation Optimization Framework Based on MLIR