JP2000222218A - コンパイル装置および記録媒体 - Google Patents
コンパイル装置および記録媒体Info
- Publication number
- JP2000222218A JP2000222218A JP11023774A JP2377499A JP2000222218A JP 2000222218 A JP2000222218 A JP 2000222218A JP 11023774 A JP11023774 A JP 11023774A JP 2377499 A JP2377499 A JP 2377499A JP 2000222218 A JP2000222218 A JP 2000222218A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- branch
- executing
- deleted
- generating
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
装置および記録媒体に関し、コンパイルするときの高速
化を図ると共に最適化を行い更に高速化を図る。 【解決手段】 ソースプログラム中から分岐を検出して
削除する手段と、削除する分岐を実行した時の真あるい
は偽を条件コードに設定させる命令を生成する手段と、
削除する分岐を実行して分岐する場合の処理を実行させ
る第1の命令および分岐しない場合の処理を実行させる
第2の命令を生成すると共に、条件コードの値に従い第
1の命令あるいは第2の命令のいずれかを実行させ他の
命令の実行を抑止させる第3の命令を生成し、第1の命
令、第2の命令、第3の命令を少なくとも含む1つの同
時実行可能な特定命令を生成する手段とを備える。
Description
中の分岐を削除して最適化を行うコンパイル装置および
記録媒体に関するものである。
hen節を実行した後に次のブロックにジャンプ(分
岐)し、偽のときにelse節を実行するというよう
に、例えば図6の(a)に示すようにプログラムが記述
され、一般的に2個の分岐を含むものとして、コンパイ
ルして実行可能なオブジェクトプログラムを生成してい
た。以下図6の構成について簡単に説明する。
(a)は、if文のプログラム例を示す。ここで、左蘭
はC言語プログラムを表し、中央の欄はアセンブラでの
イメージを表し、右側はアセンブラでのイメージにおけ
る操作内容を表す。
に、ジャンプ命令(goto文)で分岐(分岐)して
次のブロック(lab 003:)の処理に進む。
(分岐)して処理を行い、続いて次のブロック(la
b 003)の処理に進む。 以上の様子を模式的に表すと、図6の(b)に示すよう
になる。
図6の(b)において、S11は、比較命令である。こ
の比較命令は、図6の(a)のアセンブラでのイメージ
中のcmp命令である。
でthen節ブロックを実行し、分岐してS14の次の
ブロックの実行に進む。これは、上述した真ならばに相
当する。
してS13でelse節ブロックの処理を行い、S14
の次のブロックの実行に進む。これは、上述した偽なら
ばに相当する。
(a)、(b)に示すように、if文を実行する場合に
は、分岐と分岐の2個のいずれか一方を必ず実行す
る必要があり、このままコンパイルした場合には当該2
個の分岐を実行するためのオブジェクトコードを生成す
ると多くのステップ(例えば分岐以外の通常の命令が1
τで実行するとすれば、約8τという多くのステップ)
が必要となり、高速化を図れないという問題があった。
岐があるため、当該if文が複数のブロックに分割され
てしまい、ブロック内でしか最適化(例えばレジスタの
最適化)しか図れず、もしif文の全部のブロックをま
とめて最適化すれば、then節ブロックとelse節
ブロックのいずれか一方を実行することで、更に最適化
を進める(then節ブロックとelse節ブロックの
レジスタを共用して割当てなどの最適化を進める)こと
ができないという問題があった。
if文などにおける分岐を削除して複数命令を同時実行
可能な特定命令(例えばnlf命令)中の条件コード
(真あるいは偽)で指定された特定命令中の命令を実行
し他の命令をマスクして実行を抑止し、if文などをコ
ンパイルするときの従来の分岐を削除して高速化を図る
と共にthen節ブロックおよびelse節ブロックな
どを1つにまとめて最適化を行い更に高速化を図ること
を目的としている。
決するための手段を説明する。図1において、原始プロ
グラム(ソースプログラム)1は、C言語などで記述さ
れたソースプログラムであって、ここでは、if文など
の分岐を含むソースプログラムである。
適化して実行可能形式のオブジェクトプログラム6を生
成するものであって、ここでは、最適化実施手段4など
から構成されるものである。
あって、ここでは、分岐を削除して特定命令などに置き
換えして最適化を行うものである。次に、動作を説明す
る。
から分岐を検出して削除し、削除する分岐を実行した時
の真あるいは偽を条件コードに設定させる命令を生成し
た後、削除する分岐を実行して分岐する場合の処理を実
行させる第1の命令および分岐しない場合の処理を実行
させる第2の命令を生成すると共に、条件コードの値に
従い第1の命令あるいは第2の命令のいずれかを実行さ
せ他の命令の実行を抑止させる第3の命令を生成し、第
1の命令、第2の命令、第3の命令を少なくとも含む1
つの同時実行可能な特定命令を生成し、コンパイルする
ようにしている。
の真あるいは偽を条件コードに設定する命令を生成、真
の場合の処理を行う第1の命令、および偽の場合の処理
を行う第2の命令を生成するようにしている。
lse節ブロックを結合し全体ブロックをまとめて最適
化するようにしている。また、ソースプログラム1中の
分岐について、試実行して分岐確率が所定値以下のとき
に分岐の削除を行うようにしている。
指示が設定されていたときに、分岐の削除を行うように
している。従って、if文などにおける分岐を削除して
複数命令を同時実行可能な特定命令(例えばnlf命
令)中の条件コード(真あるいは偽)で指定された当該
特定命令中の命令を実行し他の命令をマスクして実行を
抑止することにより、if文などをコンパイルするとき
の従来の分岐を削除して高速化を図ると共にthen節
ブロックおよびelse節ブロックなどを1つにまとめ
て最適化を行い更に高速化を図ることが可能となる。
形態および動作を順次詳細に説明する。
図1において、原始プログラム(ソースプログラム)1
は、C言語などで記述されたソースプログラムであっ
て、例えば後述する図2の(a)の欄に示すように、C
言語で記述したプログラムであり、ここでは、if文を
含むプログラムである。
適化して実行可能形式のオブジェクトプログラム6を生
成するものであって、原始プログラム解析手段3、最適
化実施手段4、およびスケジューリング&コード生成手
段5などから構成されるものである。
ラム1を形態素解析および構文解析などを行い、if文
などを解析してこれに続く処理の行い易い中間言語に変
換するものである。
あって、ここでは、分岐命令を削除して特定命令に置き
換えて最適化を行ったり、所定ブロック単位にレジスタ
割り当てなどの最適化を行ったりなどするものである。
最適化を行った後に、公知のスケジューリングを行い、
更に実行可能形式のコード(機械語レベルのコード)を
生成するものである。この生成されたものがオブジェク
トプログラム6となる。
式のプログラムである。図2は、本発明の具体例(図6
の(a)の分岐命令削除)を示す。これは、既述した図
6の(a)のC言語プログラムのアセンブラでのイメー
ジ中に記述した分岐および分岐を削除し、その代わ
りに図2の(a)中に記述し、図2の(b)に示すよう
に動作させると、図6の(a)中の分岐および分岐
を削除しても同じ処理を実行することが可能となる。
のイメージ中に記述した、 ・条件コードに設定:cmp x,1,ccr0 ・特定命令 ・第1のスロット:add gr0,10,gr18 ・第2のスロット:add gr0,20,gr18 ・第3のスロット:nop ・第4のスロット:nlf ccr0,1,ccr0,
0,true,1 ・命令 :store gr18,a によって、図6の(a)の従来の分岐および分岐を
削除しても同じ処理を実行させることが可能となる。
って、図2の(a)の操作内容欄に記述したように、x
と1を比較し、条件コードccr0に真のときに1を設
定し、偽のときに0を設定する。
トの命令を同時実行できる命令)によって、図2の
(b)に記載したように、・第4のスロットのの条件
コードccr0が1の場合には、第1のスロットを実行
し、ここでは、gr0に10を加算してgr18に格納
する。
0が0の場合には、第2のスロットを実行し、ここで
は、gr0に20を加算してgr18に格納する。・第
4のスロットのの条件コードtrueが1(常に実行
する)の場合には、第3のスロットを実行し、ここで
は、nopを実行する。
a)によって、gr18の内容をaに格納し、一連の処
理を終了し、次の命令の処理に進む。以上の特定命令
(例えばnlf命令)の第4のスロットのとの条件
コードによって第1のスロットの命令あるいは第2のス
ロットの命令のいずれか一方のみが実行され、他方がマ
スクされて実行が抑止されるので、分岐が真あるいは偽
に対応して第1のスロットの命令あるいは第2のスロッ
トの命令のいずれか一方のみが自動的に実行されること
となる。これにより、従来の図6の(a)の分岐およ
び分岐を削除しても、上記した、条件コードの設定、
特定命令、命令を設定することで、同じ処理を分岐なし
に実行することが可能となる。
ジ欄中の特定命令の&は1命令の継続を表し、ここで
は、4行で記述した4命令で1つの特定命令となり、例
えば1τで同時実行できる命令である。
模式図)を示す。これは、既述した図2の(a)のアセ
ンブラでのイメージを模式的に表したものである。図3
において、S1は、条件コード設定を行う。これは、図
2の(a)のアセンブラでのイメージ欄の ・cmp x、1、ccr0(xと1を比較し、真ある
いは偽を ccr0に設定する)に対応する。
結合ブロックとする。これは、図2の(a)のthen
節ブロックとelse節ブロックとを結合して1つのブ
ロックとし、最適化処理を行う。例えば1つのブロック
に対して、変数にレジスタ割付を行う。この際、従来
は、then節ブロック、else節ブロック毎に個別
に変数にレジスタ割付を行っており、then節ブロッ
クとelse節ブロックはいずれか一方のみしか実行さ
れないので、いずれか一方のレジスタ割付したレジスタ
が無用に割り付けていたこととなる。しかし、本願発明
では、then節ブロックとelse節ブロックとを1
つのブロックにしてレジスタ割付を行うので、割り付け
るレジスタ数を削減して他にそのレジスタを割り付けよ
り高速実行可能な最適化を行うことが可能となる。
のように、従来は既述した図6の(b)に示すように、
分岐と分岐があり分岐による速度低下があると共
に、then節ブロックとelse節ブロックとを独立
に最適化を行う必要があり、レジスタ割付では多くのレ
ジスタを割り付けざるを得なかったが、本願発明では、
図3に示すように、分岐と分岐とを削除して高速実
行を図ることが可能となり、かつthen節ブロックと
else節ブロックとを結合した1つのブロックに対し
て最適化を行い、より高速実行を図ることが可能とな
る。
定)を示す。これは、C言語プログラム中の分岐を持つ
例えばif文の直前行に図示(a)に示すように、分岐
命令を削除する指定を行った様子を示す。この場合に
は、当該分岐命令削除指定に続く分岐を含む、ここで
は、if文の分岐を自動的に削除し、既述した図2の
(a)のアセンブラでのイメージ欄に示すようにする。
岐命令削除指定を記述することで、自動的にif文など
に含まれる分岐を削除し、条件コードの設定、特定命
令、命令などを挿入し、実行速度の高速化および最適化
ブロックを広くしてより最適化を進めて高速実行可能な
オブジェクトプログラム6を自動生成することが可能と
なる。
示す。これは、既述した図2の(a)のif文がthe
n節ブロックとelse節ブロックとからなっていた
が、更に、then節ブロック、else節ブロック内
でそれぞれif文が記述され、いわゆる入れ子となった
ときの様子を示したものである。この入れ子になった場
合には、入れ子のなる前の条件コードを当該入れ子の内
部では継承する必要があるので、図示のようにすること
で、入れ子のif文についても同様に、既述した従来の
図6の(a),(b)の分岐と分岐を削除すること
が可能となる。
ージ欄の各命令は左側に記載した ・外then: ・外then−内then: ・外then−内else: ・外else: ・外else−内then: ・外else−内else: という順番に入れ子となっている。
し、既述した図2の(b)に示すと同様である。例えば
の特定命令は、 ・第1のスロット:cmp y,2,ccr2 ・第2のスロット:nop ・第3のスロット:nop ・第4のスロット:nlf ccr0,1,true,
1,true,1 であって、第4のスロットの命令をもとに(図2の
(b)参照)、操作内容の欄に記載したように、ccr
0が1の場合にyと2を比較し、ccr2に条件コード
を設定することを表す。以下からの特定命令につい
て同様に、操作内容の欄に記載したように処理を行うこ
とで、if文のthen節ブロック、else節ブロッ
クにそれぞれif文があってもそれぞれの分岐を削除
し、図5の全体を1つのブロックに結合し、分岐を削除
したことで高速実行を図ることが可能となると共に、全
体を1つのブロックとして最適化を行い、より高速化を
図ることが可能となる。
if文などにおける分岐を削除して複数命令を同時実行
可能な特定命令(例えばnlf命令)中の条件コード
(真あるいは偽)で指定された当該特定命令中の命令を
実行し他の命令をマスクして実行を抑止する構成を採用
しているため、if文などをコンパイルするときの従来
の分岐を削除して高速化を図ると共にthen節ブロッ
クおよびelse節ブロックなどを1つにまとめて最適
化を行い更に高速化を図ることが可能となる。
除)である。
る。
Claims (6)
- 【請求項1】ソースプログラム中の分岐を削除して最適
化を行うコンパイル装置において、 ソースプログラム中から分岐を検出して削除する手段
と、 上記削除する分岐を実行した時の真あるいは偽を条件コ
ードに設定させる命令を生成する手段と、 上記削除する分岐を実行して分岐する場合の処理を実行
させる第1の命令および分岐しない場合の処理を実行さ
せる第2の命令を生成すると共に、上記条件コードの値
に従い上記第1の命令あるいは上記第2の命令のいずれ
かを実行させ他の命令の実行を抑止させる第3の命令を
生成し、上記第1の命令、上記第2の命令、上記第3の
命令を少なくとも含む1つの同時実行可能な特定命令を
生成する手段とを備えたことを特徴とするコンパイル装
置。 - 【請求項2】if文の比較部分を実行したときの真ある
いは偽を上記条件コードに設定、当該真の場合の処理を
行う上記第1の命令、および当該偽の場合の処理を行う
上記第2の命令としたことを特徴とする請求項1記載の
コンパイル装置。 - 【請求項3】上記分岐のthen節ブロックおよびel
se節ブロックを結合し全体ブロックをまとめて最適化
したことを特徴とする請求項2記載のコンパイル装置。 - 【請求項4】上記ソースプログラム中の分岐について、
試実行して分岐確率が所定値以下のときに上記分岐の削
除を行うことを特徴とする請求項1から請求項3のいず
れかに記載のコンパイル装置。 - 【請求項5】上記ソースプログラム中の分岐に削除指示
が設定されていたときに、上記分岐の削除を行うことを
特徴とする請求項1から請求項3のいずれかに記載のコ
ンパイル装置。 - 【請求項6】ソースプログラム中から分岐を検出して削
除する手段と、 上記削除する分岐を実行した時の真あるいは偽を条件コ
ードに設定させる命令を生成する手段と、 上記削除する分岐を実行して分岐する場合の処理を実行
させる第1の命令および分岐しない場合の処理を実行さ
せる第2の命令を生成すると共に、上記条件コードの値
に従い上記第1の命令あるいは上記第2の命令のいずれ
かを実行させ他の命令の実行を抑止させる第3の命令を
生成し、上記第1の命令、上記第2の命令、上記第3の
命令を少なくとも含む1つの同時実行可能な特定命令を
生成する手段として機能させるプログラムを記録したコ
ンピュータ読取可能な記録媒体、
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11023774A JP2000222218A (ja) | 1999-02-01 | 1999-02-01 | コンパイル装置および記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11023774A JP2000222218A (ja) | 1999-02-01 | 1999-02-01 | コンパイル装置および記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2000222218A true JP2000222218A (ja) | 2000-08-11 |
Family
ID=12119701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11023774A Pending JP2000222218A (ja) | 1999-02-01 | 1999-02-01 | コンパイル装置および記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2000222218A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006309430A (ja) * | 2005-04-27 | 2006-11-09 | Matsushita Electric Ind Co Ltd | コンパイラによる最適化方法 |
JP2015201119A (ja) * | 2014-04-10 | 2015-11-12 | 富士通株式会社 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0887417A (ja) * | 1994-09-20 | 1996-04-02 | Fujitsu Ltd | コンパイラ装置 |
JPH09218789A (ja) * | 1996-02-08 | 1997-08-19 | Oki Electric Ind Co Ltd | 分割コンパイル方式 |
JPH1027102A (ja) * | 1996-07-11 | 1998-01-27 | Hitachi Ltd | 演算処理装置 |
JPH10116197A (ja) * | 1996-10-09 | 1998-05-06 | Hitachi Ltd | プログラム解析方法 |
JPH10187463A (ja) * | 1996-11-26 | 1998-07-21 | Hewlett Packard Co <Hp> | コンパイラ |
-
1999
- 1999-02-01 JP JP11023774A patent/JP2000222218A/ja active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0887417A (ja) * | 1994-09-20 | 1996-04-02 | Fujitsu Ltd | コンパイラ装置 |
JPH09218789A (ja) * | 1996-02-08 | 1997-08-19 | Oki Electric Ind Co Ltd | 分割コンパイル方式 |
JPH1027102A (ja) * | 1996-07-11 | 1998-01-27 | Hitachi Ltd | 演算処理装置 |
JPH10116197A (ja) * | 1996-10-09 | 1998-05-06 | Hitachi Ltd | プログラム解析方法 |
JPH10187463A (ja) * | 1996-11-26 | 1998-07-21 | Hewlett Packard Co <Hp> | コンパイラ |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006309430A (ja) * | 2005-04-27 | 2006-11-09 | Matsushita Electric Ind Co Ltd | コンパイラによる最適化方法 |
JP2015201119A (ja) * | 2014-04-10 | 2015-11-12 | 富士通株式会社 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5978588A (en) | Method and apparatus for profile-based code placement using a minimum cut set of the control flow graph | |
JP2980178B2 (ja) | 並列プロセッサで処理する並列な命令ストリームを同期させる方法 | |
JP2947356B2 (ja) | 並列処理システム及び並列プロセッサの同期方法 | |
US5511198A (en) | Optimizing compiler for shortening execution time of object program | |
CN100462920C (zh) | 为优化的程序生成展开信息 | |
JPH1173325A (ja) | プログラム変換装置及び記録媒体 | |
US5692196A (en) | System and method for conditionally compiling a software compilation unit | |
US6367076B1 (en) | Compiling method and memory storing the program code | |
US8543992B2 (en) | Method and apparatus for partitioning programs to balance memory latency | |
JP2000222218A (ja) | コンパイル装置および記録媒体 | |
JPH01118931A (ja) | プログラム変換方式 | |
JPH04263323A (ja) | 機械語命令列並べ換え方式 | |
JP2585793B2 (ja) | コンパイラシステム | |
JPH01213719A (ja) | パイプライン処理用データ組替装置 | |
JP3323147B2 (ja) | コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体 | |
WO1997007452A1 (en) | Programmable compiler | |
JPH06222926A (ja) | 仮想リソース生成方法 | |
JP2001265605A (ja) | コンパイラの命令列最適化方法、コンパイラ装置、記録媒体、及びプログラム | |
Wolfe | Partial redundancy elimination is not bidirectional | |
JPH11232131A (ja) | データ処理装置のテスト方法 | |
JPH04252336A (ja) | プログラム最適化処理装置 | |
JPH05313910A (ja) | 機械語命令生成方式 | |
Ku et al. | Behavioral Transformations | |
JPH05100866A (ja) | コンパイル・リンク方式 | |
JPH022425A (ja) | 多方向分岐演算の高速化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040901 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041005 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041206 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050208 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20050614 |