JPH07114473A - コンパイラの命令列最適化方法 - Google Patents

コンパイラの命令列最適化方法

Info

Publication number
JPH07114473A
JPH07114473A JP5260492A JP26049293A JPH07114473A JP H07114473 A JPH07114473 A JP H07114473A JP 5260492 A JP5260492 A JP 5260492A JP 26049293 A JP26049293 A JP 26049293A JP H07114473 A JPH07114473 A JP H07114473A
Authority
JP
Japan
Prior art keywords
instruction
branch
compiler
instruction sequence
section
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.)
Withdrawn
Application number
JP5260492A
Other languages
English (en)
Inventor
Satoshi Hosoi
聡 細井
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP5260492A priority Critical patent/JPH07114473A/ja
Priority to US08/253,138 priority patent/US5596732A/en
Publication of JPH07114473A publication Critical patent/JPH07114473A/ja
Withdrawn 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

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

Abstract

(57)【要約】 【目的】分岐命令を含む命令列のパイプライン計算機上
でのオーバーヘッドを軽減する。 【構成】コンパイラでソースプログラムの命令列をパイ
プライン計算機で実行可能な命令列に変換する場合に、
パイプライン計算機で実行可能な命令列の中から分岐命
令を含んだ命令列を検出し、次に、検出した分岐命令を
含んだ命令列を、分岐命令を含まない等価な命令列に変
換する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、パイプライン計算機で
実行可能なアセンブラ言語にソースプログラムを変換す
るコンパイラの命令列最適化方法に関する。言語プロセ
ッサとして知られたコンパイラは、FORTRAN、C
OBOL、PL/Iなどのプログラミング言語で記述さ
れたソースプログラムを、計算機で実行可能なアセンブ
ラ語や機械語に変換して目的プログラムを作成する。
【0002】このようなコンパイラにあっては、中間コ
ードへの変換生成が済んだ段階で、コードの最適化処理
を行っている。このコードの最適化を行うことで、中間
コードをプログラムを実行する計算機上で、最小容量で
且つ最も早い速度で実行する命令列に変換することがで
き、コンパイラの性能向上に大きく貢献する。
【0003】
【従来の技術】従来、パイプライン計算上では、例えば
図20に示す分岐命令を含むプログラムが実行されてい
る。図20は従来のコンパイラで変換された分岐命令を
含むIF〜THEN型のプログラムの一例を示してい
る。ここで、プログラムはアセンブラ語で示しており、
併せて数式的な意味、内容、更に処理手順を処理ルート
として示している。
【0004】またアセンブラ語において、「%」はレジ
スタを示し、例えば「%r10」はレジスタr10を意
味する。「mov」はムーブ命令、「cmp」は比較命
令、「ble」は分岐先ラベルを示すインデックス、
「add」は加算命令である。図16おいて、ムーブ命
令に続いて設けられた比較命令は、レジスタr3
の内容が0より大きいか否か、即ち、 レジスタr3>0 を比較判断している。
【0005】この比較条件が成立すると分岐なし(not
taken )となり、次の分岐命令「ble L1」はスキ
ップされ、THEN部の演算命令〜を順番に実行す
る。一方、比較命令の条件が不成立(r3≦0)になる
と、分岐あり(taken )となり、次の分岐命令「ble
L1」で示されるラベルL1に分岐し、演算命令を
実行する。
【0006】
【発明が解決しようとする課題】しかしながら、従来、
プログラム中の分岐命令の存在はパイプライン計算機の
性能を低下させる要因となっている。例えば図20のI
F〜THEN型のプログラムにあっては、THEN部の
命令は比較命令の結果により実行されたり実行さ
れなかったりする。
【0007】そこで、このような分岐命令を含むプログ
ラムに対し従来のパイプライン計算機では次のように対
処している。まず「全ての分岐命令は分岐しない」とい
う仮定を行い、分岐命令に出会ってもかまわずに命令フ
ェッチを続けて順番に命令を実行する。例えばパイプラ
イン計算機はフェッチステージF,第1実行ステージE
1,第2実行ステージE2,およびライトステージWの
4段構成をもち、各サイクルで命令を順番にステージF
にフェッチして、同時に先行する命令をステージE1,
E2,Wに移行させる。
【0008】このため、比較条件が成立して分岐しなか
った場合(not taken )は、パイプライン計算機の命令
実行サイクルをそのまま続ければよいので、オーバーヘ
ッドは起きない。しかし、比較条件が不成立で分岐とな
った場合(taken)には、分岐しないと仮定して処理ステ
ージを進めてしまった命令をキャンセルしなければなら
ず、その分処理に時間がかかる。また、分岐先の命令を
フェッチするにも時間がかかり、オーバーヘッドが大き
くなる問題があった。
【0009】また別の方法として、分岐命令が分岐する
か否かを予測する方法も考えられている。しかし、一般
に分岐命令が分岐するか否かを完全に予測することは難
しく、どうしても分岐のオーバーヘッドが生じてしま
う。特に、VLIW(Very Long Instruction Wors)や
スーパースカラのような命令レベルでの並列マシンで
は、分岐命令によるオーバーヘッドがより大きくなる傾
向にある。
【0010】本発明は、このような従来の問題点に鑑み
てなされたもので、分岐命令を含む命令列のパイプライ
ン計算機上でのオーバーヘッドを軽減するようにしたコ
ンパイラの命令列最適化方法を提供することを目的とす
る。
【0011】
【課題を解決するための手段】図1は本発明の原理説明
図である。まず本発明は、所定のプログラミング言語で
記述されたソースプログラムの命令列をパイプライン計
算機で実行可能な命令列に変換するコンパイラを対象と
する。
【0012】このようなコンパイラの命令列最適化方法
として本発明は次の処理過程を備える。 パイプライン計算機で実行可能な命令列の中から分岐
命令を含んだ命令列を検出する検出過程A; 検出過程Aで検出した分岐命令を含んだ命令列を、分
岐命令を含まない等価な命令列に変換する変換過程B;
具体的には、検出過程AでIF〜THEN型の命令列を
検出した場合、変換過程Bは、次の処理過程に従った変
換を行う。
【0013】[第1過程B1]IF〜THEN部の命令
列のIF部の比較命令をそのまま配置する。 [第2過程B2]比較命令の実行による比較条件が成立
する分岐なしの場合に所定の汎用レジスタの値に有効係
数を格納し、一方、比較条件の不成立による分岐ありの
場合には汎用レジスタの値に無効係数を格納するレジス
タ格納命令を作成配置する。
【0014】[第3過程B3]比較命令の実行で分岐な
しとなってTHEN部の命令を実行した場合の値と、分
岐ありとなって分岐命令でTHEN部の命令をスキップ
した場合の値との差を求める演算命令を作成配置する。 [第4過程B4]第3過程B3の分岐の有無による差の
演算命令を実行した値と第2過程B2の配置命令で汎用
レジスタに格納している有効係数又は無効係数との論理
積を演算する論理積演算命令を作成配置する。
【0015】[第5過程B5]第4過程B4で作成配置
した論理積演算命令の実行で得られた値を、合流先の命
令で使用する値に加え込む加算命令を作成配置する。 [第6過程B6]合流位置の演算命令をそのまま配置す
る。
【0016】ここで、第1過程B1で配置する比較命令
と第2過程B2で配置する有効係数または無効係数のレ
ジスタ格納命令は、パイプライン計算機の1命令サイク
ルで実行できることから、1サイクルで実行する命令と
して統合配置する。第2過程B2では、格納命令は、有
効係数としてオールビット1となる数値−1を汎用レジ
スタに格納する。また無効係数としてはオールビット0
となる数値0を汎用レジスタに格納する。
【0017】また本発明の変換過程Bは、IF部の分岐
命令に続く位置とTHEN部とに同一アドレスをもつス
トア命令が存在する場合は、先行するストア命令に統合
した後に、第1乃至第6過程B1〜B6を適用して分岐
命令を含まない等価な命令列に変換する。さらに本発明
の変換過程Bは、分岐なしの場合のTHEN部の命令の
内、分岐した場合にも何ら副作用を与えない命令はその
まま残した状態で、第1乃至第6過程B1〜B6を適用
して分岐命令を含まない等価な命令列に変換する。
【0018】さらにまた、本発明の変換過程Bは、検出
過程Aで「IF〜THEN〜ELSE」型の命令列を検
出した場合、IF部の比較命令による条件成立時のTH
EN部と条件不成立時のELSE部との各々に、全く同
じ命令が存在し、かつ分岐命令の上方に統合して移動し
てもプログラムの元の意味を変えないことを条件に移動
を行う。
【0019】また、IF部の比較命令による条件成立時
のTHEN部と、IF部の比較命令による条件不成立時
のELSE部との各々に、全く同じ命令が存在し、TH
EN部およびELSE部が合流する位置に統合して移動
しても、プログラムの元の意味を変えないことを条件に
移動を行う。そして、この統合処理を前処理として行っ
た後に、第1乃至第6過程B1〜B6を適用して分岐命
令を含まない等価な命令列に変換する。
【0020】
【作用】このような本発明によるコンパイラの命令列最
適化方法によれば、パイプライン計算機上で実行される
分岐命令を含む命令列は、分岐命令を含まない等価な命
令列に変換される。すなわち、比較命令の実行により条
件成立の分岐なしまたは条件不成立の分岐ありの比較結
果を、有効係数または無効係数として汎用レジスタにセ
ットする。
【0021】例えば有効係数としてはオールビット1と
なる値「−1」を汎用レジスタにセットし、無効係数と
してはオールビット0となる値「0」を汎用レジスタに
セットする。次に、分岐しない場合のTHEN部の実行
結果と、分岐してTHEN部の命令をスキップした場合
の実行結果との差を求める。この分岐の有無による差
を、比較命令の実行結果として汎用レジスタに既に格納
されている値との論理積を求め、分岐の有無による差を
生かすか殺すか決める。
【0022】すなわち、分岐なしの場合には汎用レジス
タの値は有効係数「−1」であることから、分岐有無の
差の値はそのまま有効となる。一方、分岐ありの場合は
汎用レジスタの値は無効係数「0」であるから、分岐有
無の差の値は0で無効となる。最終的に、論理積の結果
を加え込むことで、分岐の有無に応じた値が得られ、合
流後の命令が実行される。
【0023】このため、命令系列に分岐命令を含まない
ことから、「全ての分岐命令は分岐しない」との仮定の
もとに行った場合の分岐成立時のオーバーヘッドの問題
を解消できる。また分岐命令を含まない等価な命令系列
への変換で、命令数が増加するようになるが、この命令
増加数の処理サイクルよりも分岐成立時のオーバーヘッ
ドが大きければ、十分な効果が得られる。
【0024】またVLIWやスーパースカラのような命
令レベルの並列マシンでは、変換後の命令数が増加して
も、並列処理によりサイクル数は長くはならない。
【0025】
【実施例】図2は本発明のコンパイラが実現される計算
機のハードウェア構成の一例を示している。図2におい
て、主記憶装置100にはオペレーティグシステム(O
S)が格納され、電源投入時にコンパイラを実現するプ
ログラムが展開される。主記憶装置100に対しては主
記憶制御装置102が設けられる。主記憶制御装置10
2にはCPU104およびチャネルプロセッサ106が
設けられる。CPU104は主記憶装置100に展開さ
れたプログラムに従ってソースプログラムを目的プログ
ラムに変換するコンパイルを行う。
【0026】チャネルプロセッサ106のチャネル装置
108には、チャネルバス110を介して磁気ディスク
ユニットなどを用いたファイル装置112,114,1
16および118が接続される。ファイル装置112に
は、コンパイルを行うソースプログラム120が格納さ
れている。ファイル装置124には、コンパイルの処理
過程ごとに生成される中間ファイル122が格納されて
いる。ファイル装置124にはコンパイルが済んだ目的
プログラム126が格納されている。ファイル装置11
8には、コンパイルの処理過程で生成されるシンポルテ
ーブル128が格納されている。
【0027】勿論、チャネルプロセッサ106の他のチ
ャネルには、CRT、プリンタ、キーボードなどの他の
機器が接続されている。図3は図2のCPU104によ
るプログラムの実行で実現されるコンパイラの機能を示
す。図3において、コンパイラは、語彙解析処理部2
4、構文解析処理部30、中間コード生成部34、コー
ド最適化部38およびコード生成部44で構成される。
語彙解析部24にはソースプログラム26が入力され
る。語彙解析処理部24、構文解析処理部30、中間コ
ード生成部34およびコード最適化部38にあっては、
中間ファイル28,32,36,42が各々生成され
る。
【0028】コード最適化部38には分岐命令を含むプ
ログラム部分を分岐命令を含まない等価なプロクラムに
変換する本発明の分岐命令変換部40が設けられる。コ
ード生成部44はコンパイルが済んだ目的プログラム4
6を出力する。図4は図3のコンパイラにおける処理動
作を示したフローチャートである。図4において、ステ
ップS1のソースプログラム入力過程は、FORTRA
Nなどの所定のプログラミング言語で書かれたソースプ
ログラム26を語彙解析部24に入力する。
【0029】ステップS2の語彙解析過程は、ステップ
S1で入力したソースプログラムのプログラミング言語
の語彙を語彙解析部24で解析する。即ち、プログラミ
ング言語で書かれたソースプログラム26をトークンと
呼ばれる単語ごとに区切り、その単語の正当性をチェッ
クする。このトークンの代表例はキーワード,演算子,
変数名,定数,区切り記号などがある。語彙解析部24
にあっては、全てのソースプログラム26の語彙の正当
性をチェックした後で、トークンの集合でなる中間ファ
イル28を出力し、次のステップS3の構文解析過程に
引き継ぐ。
【0030】ステップS3の構文解析過程は、ステップ
S2の語彙解析過程で出力された中間ファイル28を構
文解析処理部30が入力し、ソースプログラム26が使
用されているプログラミング言語の文法規則に合致して
いるか否かをチェックする。文法規則に合致していれば
ソースプログラム26を実行する手順を決め、同様に中
間ファイル32として出力する。
【0031】この構文解析部30による構文解析は、一
般的には2つの機能を備えている。1つの機能はソース
プログラム26上の各トークンが文法的に正しい位置に
あるか否かのチェックである。2つ目の機能はソースプ
ログラム26上の全トークンの存在意味を解析した後に
これらの実行手順を決め、その手続きをトークンの流れ
やグループ化として表現することである。一般には各ト
ークンの実行順序の分解結果を表現するのに木構造(パ
ースツリー)が使用される。
【0032】ステップS4の中間コード生成過程はステ
ップS3の構文解析過程で作成された中間ファイル32
の木構造(パースツリー)を中間コード生成部34に入
力し、コンパイラがもっている固有の中間コードに変換
し、中間ファイル36を出力する。代表的な中間コード
としては、3オペランド方式が知られている。次のステ
ップS5のコード最適化過程にあっては、ステップS4
で得られた中間ファイル36の中間コードをコード最適
化部38に入力し、ターゲットとなるパイプライン計算
機上で最も少ない容量で且つ最も早い速度で実行可能な
中間言語に変換し、中間ファイル42を出力する。
【0033】一般的な最適化の手法としては、ローカル
な最適化とループの最適化などがある。ローカルな最適
化とは余分な命令を減らすことである。またループの最
適化とはループを毎回実行するごとに同じ値を示す式が
あるような場合は、これを無条件にループの外に追い出
して、最初の1回だけを実行するような方法である。
【0034】本発明にあっては、このコード最適化過程
において、分岐命令変換部40がパイプライン計算機上
における分岐命令のオーバーヘッドを軽減するため、分
岐命令を含む命令列を検出して、分岐命令を含まない等
価な命令列に変換する最適化処理を実行する。次のステ
ップS6のコード生成過程は、コード最適化が済んだ中
間ファイル42の中間コードまたは中間言語をコード生
成部44に入力し、ターゲットである例えばパイプライ
ン計算機の命令セットに変換する。
【0035】最後のステップS7の目的プログラムの出
力は、ステップS1〜S6の過程を経てターゲットとな
る計算機で実行可能なアセンブラ語や機械語に変換され
た目的プログラム46を、対象計算機のROMやプログ
ラムファイルに出力する処理である。図2のファイル装
置118に格納されたシンボルテーブル128は、コン
パイラの全ての処理過程を通して作成され、ソースプロ
グラム全体の中の必要な箇所の参照に用いられる。
【0036】すなわち、シンボルテーブル128は、各
処理過程におけるソースプログラム中の情報伝達や意味
上のチェックは、全てシンボルテーブル128を通して
行われることになる。図5は図3のコード最適化部38
に設けた分岐命令変換部40のジェネラルフローチャー
トを示す。
【0037】図5において、分岐命令の変換処理は、ス
テップS1で分岐命令を含む命令列、すなわちプログラ
ム部分を検索する。ステップS1の検索対象となる分岐
命令を含むプログラム部分は、「IF〜THEN」型の
プログラム部分と「IF〜THEN〜ELSE」型のプ
ログラム部分の2つがある。ステップS2で対象プログ
ラムの検索を判別するとステップS3に進み、分岐命令
を含まない等価なプログラムへの変換を行う。異常のス
テップS1〜S3の処理をステップS4で全てのプログ
ラムの処理が終了するまで繰り返す。
【0038】図6のフローチャートは、図5のステップ
S3に示した命令列変換処理の詳細を示す。図6におい
て、まずステップS1で変換対象とするプログラムが
「IF〜THEN〜ELSE」型か否かチェックする。
「IF〜THEN〜ELSE」型であれば、ステップS
2に進み、重複する命令部分を統合する前処理を行う。
【0039】この前処理は後の説明で明らかにされる。
「IF〜THEN」型のプログラムの場合には、ステッ
プS2の処理を行わずにステップS3に進む。ステップ
S3では、THEN部のストア命令と同一アドレスの先
行するストア命令がプログラムの中に存在する場合は、
ステップS4に進んでストア命令の統合を行う。このス
トア命令の統合も後の説明で明らかにされる。
【0040】ステップS5〜S13において、分岐命令
を含むプログラムの分岐命令を含まない等価なプログラ
ムへの変換を行う。この内、ステップS8,S9は、分
岐なしの場合のTHEN部の命令の内、分岐した場合に
も何ら副作用を与えない命令はそのまま残す処理であ
り、オプション的な処理となる。このロード命令の処理
についても後の説明で明らかにされる。
【0041】したがって、ステップS8,S9を除いた
ステップS5〜S13の処理が、実質的な命令列変換処
理となる。このステップS5〜S13の変換処理を図7
を参照して説明すると次のようになる。図7(A)は本
発明の変換対象の基本となるIF〜THEN型のプログ
ラムの構造を示している。まず先頭のIF部には比較命
令10がセットされている。比較命令10の実行で条件
が成立すると分岐なしとなり、THEN部の演算命令1
2が実行され、続いて演算命令14が実行される。
【0042】一方、比較命令10による比較結果が不成
立であった場合には、分岐命令の実行によりTHEN部
の演算命令12がスキップされ、分岐後の合流位置にあ
る演算命令14が直ちに実行される。このような図7
(A)に示す分岐命令を含むプログラムは、図6のステ
ップS5〜S13の処理により、図7(B)に示す分岐
命令を含まない等価なプログラムに変換される。
【0043】図6のステップS5では比較命令10をそ
のまま配置する。次にステップS6で、比較命令10の
実行による条件成立で分岐なし(not taken )となった
ときに有効係数を所定の汎用レジスタに格納する。一
方、条件不成立で分岐となったとき(taken )の無効係
数を同じ汎用レジスタに格納する有効無効係数のレジス
タ格納命令16を作成して配置する。
【0044】この有効無効係数のレジスタ格納命令16
で使用する有効係数としては、オールビット1となる値
「−1」とする。一方、無効係数としてはオールビット
0となる値「0」とする。続いてステップS7で、比較
命令10と有効無効係数のレジスタ格納命令16を1つ
の命令セットして配置する。
【0045】すなわちパイプライン計算機にあっては、
VLIWやスーパースカラのような命令レベルでの並列
マシンでなくとも、比較命令10に加えて汎用レジスタ
への値のセットを行う有効無効係数のレジスタ格納命令
16程度は1サイクルで実行することが可能である。次
に、THEN部にセットしていた演算命令12をそのま
まセットする。
【0046】続いて、ステップS10で分岐の有無によ
る差の演算命令18をセットする。この分岐有無による
差の演算命令18は、図7(A)において分岐なしの場
合に演算命令12と演算命令14を実行して得た値か
ら、分岐ありとなって演算命令14のみを実行して得た
値を差し引いた値とする。次に、ステップS11で論理
積演算命令20をセットする。論理積演算命令20は最
初にセットした有効無効係数のレジスタ格納命令16に
よる汎用レジスタの内容と、分岐有無による差の演算命
令18で求めた分岐有無による差の値との論理積を求め
る命令である。
【0047】即ち、図7(A)に示すように、分岐なし
では演算命令12,14の実行による値が、分岐ありの
場合の演算命令14のみの実行による値より、分岐有無
による差の演算命令18で求めた差の値分だけ大きい。
そこで、この差を有効とするため、有効無効係数格納命
令16により汎用レジスタに格納している有効係数「−
1」との論理積、即ちオールビット1との論理積を求め
ることで、分岐有無による差の値そのものを論理積演算
の結果とする。
【0048】これに対し、分岐ありの場合には汎用レジ
スタには無効係数「0」が格納されており、この無効係
数「0」と分岐有無による差の値との論理積をとると、
分岐有無による論理積の差は消えることになる。次に、
ステップS12で加え込み演算命令22をセットする。
この加え込み演算命令22は、合流位置の演算命令14
で使用するレジスタの値に論理演算命令20による演算
結果を加算する命令である。
【0049】即ち、分岐なしの場合には論理積演算命令
20による演算結果は分岐有無による差の値そのもので
あることから、その差を加え込むことになる。一方、分
岐ありの場合には論理積演算命令20による演算結果は
0となっていることから、加え込み演算命令22は0の
加え込みとなり、値の変化はない。最終的に、ステップ
S13で図7(A)の分岐の有無後の合流による演算命
令14をセットする。
【0050】以上のようにして、図7(A)に示す分岐
命令10を含むプログラムは、図7(B)に示す分岐命
令を含まない等価なプログラムに変換することができ
る。この場合、図7(A)の変換前に対し図7(B)の
変換後のプログラムは命令数が増加している。しかし、
本発明を適用するコンパイラがターゲットとするマシン
のアーキテクチャ、即ち並列度や分岐のオーバーヘッド
を考慮し、変換により増加した命令サイクルが分岐時の
オーバーヘッドより少ない場合に本発明による変換を有
効とするような最適化処理を行えばよい。
【0051】次に、具体的に本発明によるプログラムの
変換を説明する。図8は本発明による変換が適用される
IF〜THEN型のプログラムの一例を示す。ここで、
プログラムはアセンブリ語で記述されており、併せて数
式表現、内容、更に処理手順を示す処理ルートを説明
上、付加している。図8において、比較命令はレジス
タr3の値が0より大きいか否か判断する。レジスタr
3の内容が0より大きければ分岐せず、それ以外の場
合、即ち0以下の場合は分岐する。
【0052】次の演算命令はレジスタr1にレジスタ
r10とレジスタr11を加算した値を入れる。続い
て、分岐先を示す命令「ble L1」が設けられる。
続いて、空き「nop」が設けられる。本発明のコンパ
イラで変換されたプログラムを実行するパイプライン計
算機の場合、パイプラインステージはフェッチステージ
F,第1実行ステージE1,第2実行ステージE2,お
よびライトステージWの4ステージであり、分岐命令
「ble L1」については次の演算命令がパイプライ
ンの構造上、先に実行されることになる。
【0053】そこで、分岐命令に続く命令を先に実行し
てはまずい場合には、空きを示す「nop」をセットし
ておく。次にTHEN部としての演算命令がセットさ
れる。演算命令はレジスタr1にレジスタr12とレ
ジスタr13を加算した値を入れる。続いて、分岐先を
示すラベルL1に続いて演算命令がセットされる。演
算命令はレジスタr2にレジスタr1とレジスタr5
を加算した値を入れる。
【0054】このような本発明による変換前のIF〜T
HEN型のプログラムは、処理ルートに示すように分岐
なしで演算命令を実行し、分岐ありで演算命令
を実行することになる。図9は図8のIF〜THEN
型のプログラムを対象に、本発明の変換結果を示した説
明図である。
【0055】図9において、まず比較命令はレジスタ
r3が0より大きいか否か判断しており、この比較結果
に応じて予め定めた汎用レジスタr7に対し有効係数
「−1」または無効係数「0」がセットされる。即ち、
レジスタr3の値が0より大きいことで比較条件が成立
すると、汎用レジスタr7に有効係数「−1」が入れら
れる。
【0056】一方、レジスタr3の値が0以下(0また
は負の値)であれば、汎用レジスタr7に無効係数
「0」が入れられる。次の演算命令とは分岐の有無
による差を求める演算命令である。まず演算命令は、
図4に示した分岐なしの場合の演算命令における演算
をレジスタr8を用いて行う。即ち、レジスタr8にレ
ジスタr12とr13を加算した値を入れる。
【0057】次の減算命令は図4で分岐ありの場合の
演算命令におけるレジスタr1の値を、の加算命令
で求めたレジスタr8から差し引いて、分岐の有無によ
る差の値を求めている。次の演算命令は論理積演算命
令である。この論理積演算命令は比較命令の実行の
際に汎用レジスタr7に格納している有効係数または無
効係数と減算命令で求めた分岐有無による差の値、即
ちレジスタr8の値との論理積をとって、レジスタr8
に格納する。
【0058】ここで、汎用レジスタr7の内容が分岐な
しによる有効係数「−1」であった場合、減算命令で
求めたレジスタr8の分岐有無による差の値が有効とな
る。一方、分岐ありで汎用レジスタr7の内容が無効係
数「0」の場合には、減算命令で求めた分岐の有無に
よる差の値は0で無効となる。演算命令はの演算命
令で用いるレジスタr1に論理積命令で求めた論理積
の結果を加え込む加え込み演算命令である。
【0059】最終的に、演算命令がセットされる。演
算命令は図4に示した合流位置にある演算命令と同
じである。このようにして図8の分岐命令を含むプログ
ラムは、図9に示すように分岐命令をもたない等価なプ
ログラムに変換することができる。ここで図8の分岐命
令を含むプログラムにあっては、分岐しない場合に6サ
イクル、分岐する場合に5サイクル+αサイクルとな
る。ここで、αサイクルは分岐によるオーバーヘッド分
である。
【0060】これに対し、本発明による変換後の図9に
示すプログラムにあっては、7サイクルとなっている
が、オーバーヘッド分としてのαサイクルより増加分の
3サイクルが少なければ、分岐命令によるオーバーヘッ
ドを軽減することができる。図10は本発明の変換対象
となるIF〜THEN型のプログラムの他の例を示して
おり、図11に本発明による分岐命令を含まない等価な
プログラムへの変換結果を示している。
【0061】この場合にも基本的には、図7に従った変
換が行われている。図10の変換前のプログラムにあっ
ては、分岐しない場合は6サイクル、分岐する場合は5
+αサイクル(αサイクルは分岐によるオーバーヘッ
ド)となる。これに対し、図11の変換後のプログラム
では5サイクルで済んでおり、本発明による変換で実行
効率を上げることができている。
【0062】図12は本発明が変換対象とする分岐命令
を含むプログラムの他の例を示したものである。このプ
ログラムは分岐命令の前後に同じアドレスに対するスト
ア命令が存在した場合であり、図6のステップS3,S
4の処理が加わる。図12の変換前のプログラムにあっ
ては、比較命令に続いてストア命令があり、次の分
岐命令「ble L1」に続いてTHEN部に演算命令
とストア命令を設けている。
【0063】ここで、分岐前のストア命令と分岐後の
THENのストア命令は、同じ変数Aのアドレスに対
しレジスタr2の値をストアするものである。このよう
な図12の分岐命令の前後に同一アドレスへのストア命
令をもつIF〜THEN型のプログラムに本発明の最適
化方法を適用して変換すると、図13に示すようにな
る。
【0064】図13の変換結果にあっては、変換前の2
つのストア命令は、先行するストア命令の1つに
取りまとめることができる。この結果、図12の変換前
のプログラムでは、処理ルートに示すように分岐なしと
なった場合には、同じアドレスに2度ストアする必要が
あったが、図13に示す変換後のプログラムにあって
は、ストア命令に示すように1回で済ますことができ
る。
【0065】図14は本発明が適用されるIF〜THE
N型のプログラムの他の例を示したものである。このプ
ログラムについては図6のステップS8,S9の処理が
加わる。まず図14の変換前のプログラムにあっては、
分岐なしの場合、THEN部におけるロード命令によ
り定義されたレジスタg2は、その後にロード命令に
より再度定義されている。
【0066】このため、ロード命令で定義されるレジ
スタg2の値はTHEN部の演算命令およびのみで
有効となる。従って、レジスタg2の値については分岐
なしの場合のみを考えればよく、変換後も命令はその
まま使用すればよい。即ち図15に示すように、比較命
令に続いて分岐なしの場合にのみ有効な図14のロー
ド命令と同じロード命令をそのままセットする。
【0067】演算命令〜については、図7(B)に
示した変換ルールに従った分岐有無による差の演算命
令、論理積演算命令、加え込み演算命令の変換形態をと
っている。図16は本発明の変換方法が適用されるIF
〜THEN〜ELSE型のプログラムの構造を示してい
る。
【0068】この図16のIF〜THEN〜ELSE型
の命令構造は、比較命令10による条件成立でTHEN
部の演算命令12を実行し、演算命令26に進む。これ
に対し条件不成立時には、ELSE部の演算命令24を
実行した後に演算命令26を実行する。このようなIF
〜THEN〜ELSE型の命令例に本発明の変換方法を
適用する場合、図7(A)のIF〜THEN型に対し比
較条件の成立,不成立時における差の演算内容が異なる
が、基本的な変換形態は同じである。即ち、図6のステ
ップS2に示した統合の前処理が加わる。この統合の前
処理を説明すると次ようになる。
【0069】THEN部およびELSE部のそれぞれに
同一レジスタに対するロード命令または同一アドレスに
対するストア命令が個別に存在する場合、本発明の変換
にあっては2つのロード命令およびストア命令を1つに
取りまとめることができる。図17は図16に示した
「IF〜THEN〜ELSE」型プログラムの一例を示
している。
【0070】図17において、IF部の比較命令に続
いて、THEN部となるロード命令および加算命令
がセットされている。ここでロード命令と加算命令
の間に分岐命令「b L4」をセットしているが、パイ
プライン計算機にあっては、その構造上、ロード命令
,加算命令および分岐命令「b L4」の順番に実
行されることになる。
【0071】一方、ELSE部にはロード命令と加算
命令がセットされている。ロード命令はレジスタg
2に定数aをロードする命令であり、これはTHEN部
に設けたロード命令と同じレジスタg2に対するロ
ードである。このようなTHEN部の同一レジスタg2
に対するロード命令と、ELSE部の同一のレジスタ
g2に対するロード命令が存在する場合には、本発明
の分岐命令を含まない等価なプログラムへの変換ではロ
ード命令とを1つの命令に統合することができる。
【0072】図18は図17に示したロード命令と
の統合による前処理の結果を示したプログラムである。
具体的な統合の手法は、図17においてTHEN部とE
LSE部の先頭の命令から順番に下方に比較していく。
もし同じ命令があれば図18に示すように、分岐命令
「ble L2」の上方に移動することができるなら
ば、移動する。但し、この移動する命令は分岐命令に移
動する命令は除く。同じ命令がなければ、そこで処理を
終了する。
【0073】図17の場合には、THEN部のロード命
令に一致するロード命令がELSE部に存在するこ
とから、図18に示すように、ロード命令を分岐命令
「be L2」の上方に移動する。この結果、図18の
処理ルートに示すように、ロード命令の統合により命令
数を低減することができる。
【0074】続いて図17のTHEN部とELSE部の
最後の命令から順に上方に比較していく。もし同じ命令
があって、移動してもかまわなければ、ラベルL4の下
に移動する。この場合も分岐命令に依存する命令は移動
対象から除外する。同じ命令がなければ、そこで処理を
終了する。図17の場合には、下方から比較した命令に
一致する命令がないことから、この変換は行っていな
い。
【0075】このように図17から図18に示す命令数
を低減する前処理が済んだならば、図18について図7
に示した本発明による分岐命令をもたない等価なプログ
ラムへの変換処理を適用し、図19に示す変換結果を得
ることができる。尚、上記の実施例は4ステージのパイ
プライン計算機で実行されるプログラムへの変換を例に
とっているが、VLIWとして知られた複数命令を1ワ
ードとして並列実行可能なマシンや、スーパースカラと
して知られた動的に並列実行可能な命令を判別して並列
的に処理するマシンに適用した場合にも、同様の結果が
得られる。
【0076】特に本発明にあっては、変換後のプログラ
ムの命令数が増加しているが、VLIWやスーパースラ
カにあっては命令増加数があっても実行サイクル数が増
加しないことから、より効果的である。また本発明は実
施例に示した分岐命令を含むプログラムの変換に限定さ
れず、適宜の分岐命令を含むプログラムの変換にそのま
ま適用できる。
【0077】また上記の実施例にあっては、説明の都合
上、プログラムをアセンブリ語で表現しているが、本発
明はこれによる限定は受けない。
【0078】
【発明の効果】以上説明してきたように本発明によれ
ば、分岐命令を含む命令列を分岐例を含まない等価な命
令列に変換することで、パイプライン計算機上における
分岐命令の実行で生じていたオーバーヘッドを軽減する
ことができ、コンパイラにおけるコードの最適化処理を
より一層高めて、パイプライン計算機の処理性能を引き
出すことができる。
【図面の簡単な説明】
【図1】本発明の原理説明図
【図2】本発明が適用される計算機ハードウェアの説明
【図3】コンパイラとしての機能構成を示した説明図
【図4】本発明が適用されるコンパイラの処理手順を示
したフローチャート
【図5】本発明の変換処理の概略を示したフローチャー
【図6】本発明の変換処理の詳細を示したフローチャー
【図7】本発明によるIF〜THEN型命令からの変換
構造を示した説明図
【図8】変換対象とするIF〜THEN型プログラムの
一例を示した説明図
【図9】本発明による図8の変換結果を示した説明図
【図10】変換対象とするIF〜THEN型プログラム
の他の例を示した説明図
【図11】本発明による図10の変換結果を示した説明
【図12】2つのストア命令を含んだ変換対象となるI
F〜THEN型プログラムの一例を示した説明図
【図13】本発明による図12の変換結果を示した説明
【図14】2つのロード命令を含んだ変換対象となるI
F〜THEN型プログラムの一例を示した説明図
【図15】本発明による図14の変換結果を示した説明
【図16】変換対象とするIF〜THEN〜ELSE型
プログラムの構造説明図
【図17】変換対象とするIF〜THEN〜ELSE型
プログラムの一例を示した説明図
【図18】本発明による図17の中の2つのロード命令
の統合前処理を示した説明図
【図19】本発明による図18の変換結果を示した説明
【図20】従来のIF〜THEN型プログラムの一例を
示した説明図
【符号の説明】
10:比較命令 12,14,24:演算命令 16:有効無効係数格納命令 18:分岐有無による差の演算命令 20:論理積演算命令 22:加え込み演算命令 24:語彙解析処理部 26:ソースプログラム 28,32,36,42:中間ファイル 30:構文解析処理部 34:中間コード生成部 38:コード最適化部 40:分岐命令変換部 44:コード生成部 46:目的プログラム 100:主記憶装置 102:主記憶制御装置 104:CPU 106:チャネルプロセッサ 108:チャネル装置 110:チャネルバス 112,114,116,118:ファイル装置 120:ソースプログラム 124:中間ファイル 126:目的プログラム 128:シンボルテーブル

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】ソースプログラムの命令列をパイプライン
    計算機で実行可能な命令列に変換するコンパイラに於い
    て、 パイプライン計算機で実行可能な命令列の中から分岐命
    令を含んだ命令列を検出する検出過程(A)と、 該検出過程(A)で検出した分岐命令を含んだ命令列
    を、分岐命令を含まない等価な命令列に変換する変換過
    程(B)と、 を備えたことを特徴とするコンパイラの命令列最適化方
    法。
  2. 【請求項2】請求項1記載のコンパイラの命令列最適化
    方法に於いて、 前記検出過程(A)でIF〜THEN型の命令列を検出
    した場合、前記変換過程(B)は、 前記IF〜THEN部の命令列のIF部の比較命令をそ
    のまま配置する第1過程(B1)と、 前記比較命令の実行による比較条件が成立する分岐なし
    の場合に所定の汎用レジスタの値に有効係数を格納し、
    一方、前記比較条件の不成立による分岐ありの場合には
    前記汎用レジスタの値に無効係数を格納するレジスタ格
    納命令を作成配置する第2過程(B2)と、 前記比較命令の実行で分岐なしとなって前記THEN部
    の命令を実行した場合の値と、分岐ありとなって分岐命
    令でTHEN部の命令をスキップした場合の値との差を
    求める演算命令を作成配置する第3過程(B3)と、 前記第3過程の分岐の有無による差の演算命令を実行し
    た値と前記第2過程(B2)の配置命令で前記汎用レジ
    スタに格納している前記有効係数又は無効係数との論理
    積を演算する論理積演算命令を作成配置する第4過程
    (B4)と、 前記第4過程で作成配置した論理積演算命令の実行で得
    られた値を、合流先の命令で使用する値に加え込む加算
    命令を作成配置する第5過程(B5)と、 合流位置の演算命令そのまま配置する第6過程(B6)
    と、備えたことを特徴とするコンパイラの命令列最適化
    方法。
  3. 【請求項3】請求項1記載のコンパイラの命令列最適化
    方法に於いて、前記第1過程(B1)で配置する比較命
    令と第2過程(B2)で配置する有効係数又は無効係数
    のレジスタ格納命令を、1サイクルで実行する命令とし
    て統合配置するこを特徴とするコンパイラの命令列最適
    化方法。
  4. 【請求項4】請求項1記載のコンパイラの命令列最適化
    方法に於いて、前記第2過程(B1)で作成配置するレ
    ジスタ格納命令は、有効係数としてオールビット1とな
    る数値−1を汎用レジスタに格納する命令であることを
    特徴とするコンパイラの命令列最適化方法。
  5. 【請求項5】請求項1記載のコンパイラの命令列最適化
    方法に於いて、前記第2過程(B1)で作成配置するレ
    ジスタ格納命令は、無効係数としてオールビット0とな
    る数値0を汎用レジスタに格納する命令であることを特
    徴とするコンパイラの命令列最適化方法。
  6. 【請求項6】請求項2記載のコンパイラの命令列最適化
    方法に於いて、前記変換過程(B)は、IF部の分岐命
    令に続く命令位置と前記THEN部とに同一アドレスを
    もつストア命令が存在する場合に、先行するストア命令
    に統合した後に、前記第1乃至第6過程(B1〜B6)
    を適用して分岐命令を含まない等価な命令列に変換する
    ことを特徴とするコンパイラの命令列最適化方法。
  7. 【請求項7】請求項2記載のコンパイラの命令列最適化
    方法に於いて、前記変換過程(B)は、分岐なしの場合
    のTHEN部の命令の内、分岐した場合にも何ら副作用
    を与えない命令はそのまま残した状態で、前記第1乃至
    第6過程(B1〜B6)を適用して分岐命令を含まない
    等価な命令列に変換することを特徴とするコンパイラの
    命令列最適化方法。
  8. 【請求項8】請求項2記載のコンパイラの命令列最適化
    方法に於いて、 前記変換過程(B)は、前記検出過程(A)でIF〜T
    HEN〜ELSE型の命令列を検出した場合、 IF部の比較命令による条件成立時のTHEN部と、I
    F部の比較命令による条件不成立時のELSE部との各
    々に、全く同じ命令が存在し、かつ分岐命令の上方に統
    合して移動してもプログラムの元の意味を変えないこと
    を条件に移動を行い、 前記統合処理を行った命令列に対し前記第1乃至第6過
    程(B1〜B6)を適用して分岐命令を含まない等価な
    命令列に変換することを特徴とするコンパイラの命令列
    最適化方法。
  9. 【請求項9】請求項2記載のコンパイラの命令列最適化
    方法に於いて、 前記変換過程(B)は、前記検出過程(A)でIF〜T
    HEN〜ELSE型の命令列を検出した場合、 IF部の比較命令による条件成立時のTHEN部と、I
    F部の比較命令による条件不成立時のELSE部との各
    々に、全く同じ命令が存在し、THEN部およびELS
    E部が合流する位置に統合して移動しても、プログラム
    の元の意味を変えないことを条件に移動を行い、 前記統合処理を行った命令列に対し前記第1乃至第6過
    程(B1〜B6)を適用して分岐命令を含まない等価な
    命令列に変換することを特徴とするコンパイラの命令列
    最適化方法。
JP5260492A 1993-10-19 1993-10-19 コンパイラの命令列最適化方法 Withdrawn JPH07114473A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP5260492A JPH07114473A (ja) 1993-10-19 1993-10-19 コンパイラの命令列最適化方法
US08/253,138 US5596732A (en) 1993-10-19 1994-06-02 Method of optimizing instruction sequence of compiler

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5260492A JPH07114473A (ja) 1993-10-19 1993-10-19 コンパイラの命令列最適化方法

Publications (1)

Publication Number Publication Date
JPH07114473A true JPH07114473A (ja) 1995-05-02

Family

ID=17348721

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5260492A Withdrawn JPH07114473A (ja) 1993-10-19 1993-10-19 コンパイラの命令列最適化方法

Country Status (2)

Country Link
US (1) US5596732A (ja)
JP (1) JPH07114473A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008102740A (ja) * 2006-10-19 2008-05-01 Hitachi Ltd 最適化処理方法、及びその言語処理系
JP2015201119A (ja) * 2014-04-10 2015-11-12 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3626784B2 (ja) 1995-03-17 2005-03-09 富士通株式会社 分散メモリ型並列計算機におけるデータ更新方法およびプログラム変換装置
EP0976030B1 (en) * 1996-01-24 2008-07-02 Sun Microsystems, Inc. Instruction folding for a stack-based machine
EP0976034B1 (en) * 1996-01-24 2005-10-19 Sun Microsystems, Inc. Method and apparatus for stack caching
US6026240A (en) * 1996-02-29 2000-02-15 Sun Microsystems, Inc. Method and apparatus for optimizing program loops containing omega-invariant statements
US5721893A (en) * 1996-05-14 1998-02-24 Hewlett-Packard Company Exploiting untagged branch prediction cache by relocating branches
US5770894A (en) * 1996-07-10 1998-06-23 International Business Machines Corporation Parallel processing method having arithmetical conditions code based instructions substituted for conventional branches
AU3666697A (en) * 1996-08-20 1998-03-06 Idea Corporation A method for identifying hard-to-predict branches to enhance processor performance
US5850553A (en) * 1996-11-12 1998-12-15 Hewlett-Packard Company Reducing the number of executed branch instructions in a code sequence
US5857104A (en) * 1996-11-26 1999-01-05 Hewlett-Packard Company Synthetic dynamic branch prediction
WO1999001815A1 (en) 1997-06-09 1999-01-14 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US5903761A (en) * 1997-10-31 1999-05-11 Preemptive Solutions, Inc. Method of reducing the number of instructions in a program code sequence
US6490673B1 (en) * 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
US6308322B1 (en) 1999-04-06 2001-10-23 Hewlett-Packard Company Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints
US6457173B1 (en) * 1999-08-20 2002-09-24 Hewlett-Packard Company Automatic design of VLIW instruction formats
US8010954B2 (en) * 2007-02-14 2011-08-30 The Mathworks, Inc. Parallel programming interface to dynamically allocate program portions
US20130139164A1 (en) * 2011-11-28 2013-05-30 Sap Ag Business Process Optimization
US20130138473A1 (en) * 2011-11-28 2013-05-30 Sap Ag Business Process Optimization

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69130138T2 (de) * 1990-06-29 1999-05-06 Digital Equipment Corp., Maynard, Mass. Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
US5287467A (en) * 1991-04-18 1994-02-15 International Business Machines Corporation Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008102740A (ja) * 2006-10-19 2008-05-01 Hitachi Ltd 最適化処理方法、及びその言語処理系
JP2015201119A (ja) * 2014-04-10 2015-11-12 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置

Also Published As

Publication number Publication date
US5596732A (en) 1997-01-21

Similar Documents

Publication Publication Date Title
JPH07114473A (ja) コンパイラの命令列最適化方法
US8024718B2 (en) System and method for optimizing source code
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
US7493610B1 (en) Versioning optimization for dynamically-typed languages
KR100638501B1 (ko) 다중 명령 컴퓨터 프로그램을 구성하는 방법
Schlansker et al. Critical path reduction for scalar programs
US20100153937A1 (en) System and method for parallel execution of a program
Börger et al. A practical method for rigorously controllable hardware design
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
CN103559069B (zh) 一种基于代数***的跨文件过程间优化方法
Schlansker et al. Height reduction of control recurrences for ILP processors
Barash et al. Generalized LR parsing algorithm for grammars with one-sided contexts
Kalvala et al. Program transformations using temporal logic side conditions
Lukoschus et al. Removing cycles in Esterel programs
August Hyperblock performance optimizations for ILP processors
Sun et al. Refactoring loops with nested ifs for simd extensions without masked instructions
JPH04293150A (ja) コンパイル方法
JP6790646B2 (ja) コンパイル装置、コンパイル方法、および、コンパイルプログラム
Křoustek et al. Exploitation of scattered context grammars to model VLIW instruction constraints
Zhu et al. A vectorization method of export branch for SIMD extension
Sun et al. Vectorizing programs with IF-statements for processors with SIMD extensions
Schlansker et al. Parallelization of control recurrences for ILP processors
JP3598090B2 (ja) コンパイラ装置及びコンパイル方法
Santiago et al. Stack-tagged dataflow
JPH04307624A (ja) ループ最適化方法及び装置

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20001226