JP3613454B2 - Compiler device and computer-readable recording medium storing compiler - Google Patents
Compiler device and computer-readable recording medium storing compiler Download PDFInfo
- Publication number
- JP3613454B2 JP3613454B2 JP32419799A JP32419799A JP3613454B2 JP 3613454 B2 JP3613454 B2 JP 3613454B2 JP 32419799 A JP32419799 A JP 32419799A JP 32419799 A JP32419799 A JP 32419799A JP 3613454 B2 JP3613454 B2 JP 3613454B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- loop
- branch
- unrolling
- conditional branch
- 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 - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
【0001】
【発明の属する技術分野】
本発明は、ソースプログラムを解釈して中間テキストを生成し最適化を行ってオブジェクトプログラムを生成するコンパイラ装置に関し、さらに詳しくはループ内の条件分岐の削除に基づく最適化(生成するオブジェクトプログラムの実行時間を短縮するための最適化)を実行するコンパイラ装置に関する。
【0002】
【従来の技術】
従来におけるこの種のコンパイラ装置に関する特許公報としては、特開平5−27986号公報が存在する。
【0003】
当該公報には、ループ内で不変な変数と定数との比較またはループ内で不変な変数同士の比較を行い、その比較結果に基づいて分岐している条件分岐が存在する場合に、比較命令を削除し分岐先に無条件に分岐するようにして、最適化を実現する技術(コンパイラの最適化方法および最適化装置)が記載されている。
【0004】
すなわち、この従来技術では、ループ内で不変な変数と定数との比較命令またはループ内で不変な変数同士の比較命令のみが、無条件分岐命令に変更されて、ループ内の条件分岐の削除による最適化が行われている。
【0005】
ここで、当該従来技術では、ループの中で特定の条件のみで実行される式を実行するか否かの判定を行うための分岐命令(比較命令および条件分岐命令から置換された無条件分岐命令)を生成する必要があった。
【0006】
【発明が解決しようとする課題】
上述した従来のコンパイラ装置には、以下に示すような問題点があった。
【0007】
第1の問題点は、ループの中で特定の条件のみで実行される式を実行するか否かの判定を行うための分岐命令(無条件分岐命令)が生成されるために、他の最適化を阻害する可能性があるということである。
【0008】
第2の問題点は、第1の問題点で挙げた分岐命令が常に生成されるために、ループ内で実行される命令が多くなり、当該コンパイラ装置によって生成されるオブジェクトプログラムの実行性能が悪くなるということである。
【0009】
本発明の目的は、上述の点に鑑み、ループ内に存在する条件分岐(条件分岐コード)を当該ループのアンローリングを行うことによって無条件分岐(無条件分岐コード)に変更し、当該変更に基づいて不要なコードを削除することにより、実行時間が短いオブジェクトプログラムの生成が可能となるコンパイラ装置、および、コンパイラが格納されたコンピュータ読み取り可能な記録媒体を提供することにある。
【0010】
【課題を解決するための手段】
本発明のコンパイラ装置は、ソースプログラムを解釈して中間テキストを生成し最適化を行ってオブジェクトプログラムを生成するコンパイラ装置であって、前記最適化はループ内の条件分岐の削除に基づく最適化であり、当該コンパイラ装置は、初期値が1で増分値が1のインデックスを含むループの検出を行うループ検出手段と、前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報中の上記の除数と当該ループの繰り返し数(繰り返し数)との最大公約数の値に決定するアンロール段数決定手段と、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段とを有する。
【0011】
また、本発明のコンパイラ装置は、ソースプログラムを解釈して中間テキストを生成し最適化を行ってオブジェクトプログラムを生成するコンパイラ装置であって、前記最適化はループ内の条件分岐の削除に基づく最適化であり、当該コンパイラ装置は、初期値が変数(1以外の定数を含むものとする)で増分値が1のインデックスを含むループの検出を行うループ検出手段と、前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報中の上記の除数の値に決定するアンロール段数決定手段と、アンロール対象外コード群(ループの繰り返し数が前記アンロール段数決定手段により決定されたアンロール段数の倍数で可能な限り大きな値となるように調整した場合に、アンロール対象のコード群以外のコード群として分割されたコード群)をアンロール対象のコード群の前段に生成した上で、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段とを有するように構成することもできる。
【0012】
さらに、本発明のコンパイラ装置は、ソースプログラムを解釈して中間テキストを生成し最適化を行ってオブジェクトプログラムを生成するコンパイラ装置であって、前記最適化はループ内の条件分岐の削除に基づく最適化であり、当該コンパイラ装置は、初期値が1で増分値が定数のインデックスを含むループの検出を行うループ検出手段と、前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報に基づいて「アンロール処理後の増分値がアンロール処理前の増分値と上記の除数との最小公倍数になる」という要件を満たす値をアンロール処理前の増分値で割った値となるように決定するアンロール段数決定手段と、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段とを有するように構成することもできる。
【0013】
加えて、本発明のコンパイラ装置は、ソースプログラムを解釈して中間テキストを生成し最適化を行ってオブジェクトプログラムを生成するコンパイラ装置であって、前記最適化はループ内の条件分岐の削除に基づく最適化であり、当該コンパイラ装置は、初期値が1で増分値が1のインデックスを含むループの検出を行うループ検出手段と、前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報中の上記の除数と当該ループの繰り返し数との最大公約数よりも小さな値であり当該ループの繰り返し数の約数である値に決定するアンロール段数決定手段と、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段とを有するように構成することもできる。
【0014】
この場合に、Fortranで記述されたソースプログラムをコンパイルするコンパイラ装置に適用するように構成することが、望ましい1つの形態であると考えられる。
【0015】
【発明の実施の形態】
次に、本発明について図面を参照して詳細に説明する。
【0016】
(1) 第1の実施の形態
図1は、本発明の第1の実施の形態に係るコンパイラ装置の構成を示すブロック図である。
【0017】
図1を参照すると、本実施の形態に係るコンパイラ装置は、コンパイラ内のループ最適化部10(中間テキスト21を最適化して中間テキスト22を生成する処理部)によって実現される(中間テキスト21および中間テキスト22は、コンパイラ装置がソースプログラムを解釈して最適化を行いオブジェクトプログラムを生成する過程で生成される中間テキストに該当する)。
【0018】
このループ最適化部10は、ループ検出手段11と、分岐検出手段12と、アンロール段数決定手段13と、ループアンローリング手段14と、不要コード削除手段15とを含んで構成されている。
【0019】
これらの各手段は、概略、次のように動作する。
【0020】
ループ検出手段11は、初期値が1で増分値が1のインデックス(処理対象のインデックス)を含むループの検出を行う。
【0021】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報(当該インデックスの初期値,最終値,および増分値ならびに当該除数等)を記録する。
【0022】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を、分岐検出手段12で記録された情報中の上記の除数と当該ループの繰り返し数との最大公約数の値に決定する。
【0023】
ループアンローリング手段14は、アンロール段数決定手段13で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0024】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコード(当該無条件分岐コードおよび当該変更に起因して決して実行されなくなったコード)を削除する。
【0025】
図2は、本実施の形態に係るコンパイラ装置の処理を示す流れ図である。この処理は、ループ検索ステップ201と、ループ内処理対象インデックス有無判定ステップ202と、ループ内条件分岐コード検索ステップ203と、条件内容判定ステップ204と、剰余内容判定ステップ205と、条件分岐コード検出・情報記録ステップ206と、アンロール段数決定ステップ207と、ループアンローリングステップ208と、条件分岐コード無条件分岐コード変更ステップ209と、不要コード削除ステップ210とからなる。
【0026】
図3〜図6は、本実施の形態に係るコンパイラ装置の具体的な動作を説明するための図である。
【0027】
次に、図1および図2を参照して、上記のように構成された本実施の形態に係るコンパイラ装置の動作について詳細に説明する。
【0028】
初めに、ループ最適化部10内のループ検出手段11は、中間テキスト21の中からループを検索し(図2のステップ201)、当該ループが処理対象のインデックス(ここでは、初期値が1で増分値が1のインデックス)を含むか否かを判定する(ステップ202)。これにより、ループ検出手段11は、処理対象のインデックスを含むループを検出する。
【0029】
次に、分岐検出手段12は、ループ検出手段11によって検出されたループ(処理対象のインデックスを含むループ)内に存在する条件分岐コード(条件分岐命令を示すコード)を検索し(ステップ203)、ステップ203で検出した条件分岐コードの条件が「剰余の結果と定数との比較」であるか否かを判定し(ステップ204)、そうである場合(当該条件が「剰余の結果と定数との比較」である場合)には、さらに「当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たすか否かを判定する(ステップ205)。
【0030】
分岐検出手段12は、ステップ205で「当該要件を満たす」と判定した場合には、上記のステップ204およびステップ205の要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報(当該条件分岐コードを含むループのインデックスに係る値および当該条件分岐コードの条件に係る上記の除数等)を記録する(ステップ206)。
【0031】
次に、アンロール段数決定手段13は、ステップ206で分岐検出手段12によって記録された情報に基づき、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を決定する(ステップ207)。すなわち、当該アンロール段数を、ステップ206で記録された情報中の上記の除数と当該ループの繰り返し数との最大公約数の値に決定する。
【0032】
ループアンローリング手段14は、ステップ207でアンロール段数決定手段13によって決定されたアンロール段数で、当該ループのアンローリングを行う(ステップ208)。
【0033】
また、ループアンローリング手段14は、ステップ208のアンローリングを行う際に、併せて以下のa〜cに示す処理を行い、アンローリング後における条件分岐コード(分岐検出手段12によって検出された条件分岐コード)を無条件分岐コードに変更する(ステップ209)。
【0034】
a.各コードを展開する過程において、当該各コードが何段目に展開されたコードであるかを示す情報(当該各コードがアンロール段数の何段目のコード群に属するコードであるかを示す情報)を取得する。
【0035】
b.aで取得した情報とステップ206で分岐検出手段12によって記録された情報とから、アンローリング後における当該条件分岐コードの条件について「必ず真/偽(必ず真または必ず偽)になるか否か」と「真および偽のいずれになるか」とを判断する。
【0036】
c.上記のbで「条件が必ず真/偽になる」と判断した条件分岐コードを、無条件分岐コード(「条件が必ず真になり無条件に分岐する旨を示すコード」または「条件が必ず偽になり無条件に分岐する旨を示すコード」)に変更する処理を行う。
【0037】
最後に、不要コード削除手段15は、ループアンローリング手段14による分岐条件コードから無条件分岐コードへの変更に起因して不要となったコード(変更後の無条件分岐コードおよび「分岐条件コードから無条件分岐コードへの変更」に起因して決して実行されなくなった演算命令等に関するコード)の削除を行う(ステップ210)。
【0038】
これにより、ループ内の条件分岐の削除に基づく最適化が行われた中間テキスト22が出力される。
【0039】
なお、ステップ202,ステップ204,およびステップ205で「ノー(NO)」と判定された場合には、その時点で処理が終了する。
【0040】
次に、本実施の形態に係るコンパイラ装置の具体的な動作について、図1,図2,図3,図4,図5,および図6を参照して詳細に説明する。
【0041】
ここでは、図3に示すFortranプログラム片(インデックスiの初期値が1で増分値が1のdoループを含むプログラム片)を有する中間テキスト21の最適化が行われる場合の具体例について説明する。
【0042】
ループ検出手段11は、中間テキスト21を検索し、図3中のDに示すdoループを検出する(図2のステップ201)。
【0043】
さらに、ループ検出手段11は、当該doループが処理対象のインデックス(初期値および増分値が1のインデックス)を含むか否かを判定する(ステップ202)。図3に示すFortranプログラム片の場合には、Dのdoループのインデックスiの初期値および増分値は1であるため、「当該doループは処理対象のインデックスを含んでいる、すなわち最適化の条件を満たしている」と判定する。
【0044】
分岐検出手段12は、当該doループ内の各コードを調べ、条件分岐コードを検索する(ステップ203)。図3の場合には、Aの「if(mod(i,4).eq.0)」と、Bの「if(j.le.500)」と、Cの「if(mod(i,3).ge.j)」とを、条件分岐コードと認識して検出する。
【0045】
次に、分岐検出手段12は、上記で検出した条件分岐コードの条件(条件式)が剰余の結果と定数との比較であるか否かを調べる(ステップ204)。図3の場合には、AおよびCの条件分岐コードにおける条件式を「剰余を求める関数modの結果と定数との比較である」と判定して、当該2つの条件分岐コードを抽出する。
【0046】
さらに、分岐検出手段12は、上記で抽出した条件分岐コードが「その条件式の剰余を算出するための除算の被除数がループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たすか否かの判定を行う(ステップ205)。そしてこの判定の要件を満たす条件分岐コードを選択し、当該条件分岐コードを含むループに関する情報(インデックスに係る値および当該除数等)を記録しておく(ステップ206)。図3の場合には、Aの条件分岐コードを上記の要件を満たす条件分岐コードとして選択する。また、当該条件分岐コードを含むdoループ(図3中のD)のインデックスiの初期値の1,最終値の1000,および増分値の1と当該条件分岐コードの条件に関する除数の4とを記録する。
【0047】
アンロール段数決定手段13は、上記で記録した情報を基に、当該doループのアンロール段数を決定する(ステップ207)。図3の場合には、Aの条件分岐コードにおける剰余を求める関数modの除数が4であり、当該doループの繰り返し数が1000であるため、アンロール段数を4(4と1000との最大公約数)に決定する。
【0048】
ループアンローリング手段14は、当該doループのアンローリングを行う(ステップ208)。このアンローリングの結果、図3に示すプログラム片は図4に示すプログラム片のように変更(展開)される。
【0049】
ここで、ループアンローリング手段14は、上記のアンローリングを行う際に、展開された各コードが何段目に展開されたコードであるかを示す情報を記録する。そして、この情報とステップ206で記録されている情報とを基に、条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する(ステップ209)。図4の場合には、当該doループのインデックスiの初期値が1であり、剰余を求める関数modの除数が4であるため、展開された4番目(4段目)の部分(コード群)に含まれる条件分岐コード(図4中のD)の条件「mod(i+3,4).eq.0」が必ず真になり、1〜3段目の部分に含まれる条件分岐コード(図4中のA,B,およびC)の条件が必ず偽になる。したがって、上記を基に、図4中のA,B,C,およびDの条件分岐コードを、図5中のE,F,およびGの無条件分岐コード(「if(.false.)」)ならびにHの無条件分岐コード(「if(.true.)」)に変更する。
【0050】
最後に、不要コード削除手段15は、無条件分岐コードに変更されたコードと、当該変更により決して実行されなくなったコードとの削除を行う(ステップ210)。図5の場合には、無条件分岐コードのE,F,およびGの条件が「.false.」(必ず偽になる条件)であるため、無条件分岐コードのE,F,およびGと、それらに起因して決して実行されなくなったコードのI,J,およびKとを、不要なコードとして削除する。また、無条件分岐コードのHについては、その条件が「.true.」(必ず真になる条件)であるため、無条件分岐コードのHのみを削除する。図5のプログラム片から不要なコードが削除された結果は、図6に示すプログラム片のようになる。
【0051】
上記の最適化(ループ内の条件分岐の削除による最適化)の結果、ループ内に存在する条件分岐コードが削除されるため、条件分岐命令の条件式である剰余の演算命令も削除され、ループ内で実行される命令数が減少する。また、一般的に分岐命令は最適化を阻害する要因となるので、条件分岐命令(条件分岐コード)が減ることにより、他の最適化の効果を期待することができるようになる。
【0052】
(2) 第2の実施の形態
図1は、本発明の第2の実施の形態に係るコンパイラ装置の構成を示すブロック図でもある。すなわち、本実施の形態に係るコンパイラ装置も、ループ最適化部10(中間テキスト21を最適化して中間テキスト22を生成する処理部)によって実現される。また、このループ最適化部10は、ループ検出手段11と、分岐検出手段12と、アンロール段数決定手段13と、ループアンローリング手段14と、不要コード削除手段15とを含んで構成されている。
【0053】
本実施の形態においては、これらの各手段は、概略、次のように動作する。
【0054】
ループ検出手段11は、初期値が変数(1以外の定数を含むものとする)で増分値が1のインデックスを含むループの検出を行う。
【0055】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報(当該インデックスの初期値,最終値,および増分値ならびに当該除数等)を記録する。
【0056】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を、分岐検出手段12で記録された情報中の上記の除数の値に決定する。
【0057】
ループアンローリング手段14は、アンロール対象外コード群(ループの繰り返し数がアンロール段数決定手段13により決定されたアンロール段数の倍数で可能な限り大きな値となるように調整した場合にアンロール対象のコード群以外のコード群として分割されたコード群)をアンロール対象のコード群の前段に生成した上で、アンロール段数決定手段13で決定されたアンロール段数で当該ループのアンローリングを行う。また、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから、分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0058】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコード(当該無条件分岐コードおよび当該変更に起因して決して実行されなくなったコード)を削除する。
【0059】
図7および図8は、本実施の形態に係るコンパイラ装置の具体的な動作を説明するための図である。
【0060】
第1の実施の形態に係るコンパイラ装置では、ループ検出手段11において、初期値が1であり増分値が1であるインデックスを含むループが最適化の対象とされていた。これに対して、第2の実施の形態に係るコンパイラ装置では、ループのインデックスの初期値が変数や1以外の定数であっても当該ループを最適化の対象とすることができる。
【0061】
次に、本実施の形態に係るコンパイラ装置の具体的な動作について、図7および図8を参照して説明する。
【0062】
ここでは、図7に示すFortranプログラム片(インデックスiの初期値が変数kで増分値が1のdoループを含むプログラム片)を有する中間テキスト21の最適化が行われる場合の具体例について説明する。
【0063】
図7のFortranプログラム片において、doループのインデックスiの初期値が図7中のAで設定されているが、初期値が変数kであり定数の1ではない。したがって、第1の実施の形態におけるループ検出手段11のインデックスの抽出条件(図2のステップ202の判定における「処理対象のインデックス」に該当する要件)は、満たされていない。しかし、本実施の形態におけるループ検出手段11は、そのようなインデックスを含むループも最適化の対象とすることができる。
【0064】
また、アンロール段数決定手段13は、図7中のBの条件分岐コードの条件式において剰余を求める関数modの除数が4であるため、アンロール段数を4段と決定する。
【0065】
ループアンローリング手段14は、アンロール対象外コード群(ループの繰り返し数がアンロール段数決定手段13により決定されたアンロール段数の倍数で可能な限り大きな値になるように調整した場合にアンロール対象のコード群以外のコード群として分割されたコード群)をアンロール対象のコード群の前段に生成した上で、アンロール段数決定手段13で決定された段数でループのアンローリングを行う。図8中のCの部分が、アンロール対象のコード群(図8中のDの部分)におけるdoループの繰り返し数を上記の除数の4の倍数になるようにしたとき(アンロール段数を4段としたとき)のアンローリング対象外コード群である。ここで、「iand」は、Fortranにおけるビット操作に関する関数の1つであり、各ビットの論理積を求める関数である。また、「max」は、Fortranにおける最大値を求めるための関数である。
【0066】
この場合に、ループアンローリング手段14は、第1の実施の形態におけると同様に、図8中のDの部分に存在していた条件分岐コードが必ず真/偽になると判断できるため、当該部分に対して、第1の実施の形態におけると同様のアンローリングおよび「条件分岐コードから無条件分岐コードへの変更」を適用することが可能になる。
【0067】
そして、不要コード削除手段15は、当該部分における不要コードの削除を実行し、図8に示すようなFortranプログラム片を有する中間テキスト22を生成する。
【0068】
このようにして、本実施の形態においても、第1の実施の形態におけると同様に、実行される命令数を減少させることができるため(図8参照)、本実施の形態に係るコンパイラ装置によって生成されるオブジェクトプログラムの実行性能は向上する。
【0069】
(3) 第3の実施の形態
図1は、本発明の第3の実施の形態に係るコンパイラ装置の構成を示すブロック図でもある。すなわち、本実施の形態に係るコンパイラ装置も、ループ最適化部10(中間テキスト21を最適化して中間テキスト22を生成する処理部)によって実現される。また、このループ最適化部10は、ループ検出手段11と、分岐検出手段12と、アンロール段数決定手段13と、ループアンローリング手段14と、不要コード削除手段15とを含んで構成されている。
【0070】
本実施の形態においては、これらの各手段は、概略、次のように動作する。
【0071】
ループ検出手段11は、初期値が1で増分値が定数のインデックスを含むループの検出を行う。
【0072】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報(当該インデックスの初期値,最終値,および増分値ならびに当該除数等)を記録する。
【0073】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を、分岐検出手段12で記録された情報に基づいて、「変形後の増分値が変形前の増分値と上記の除数との最小公倍数になる」という要件を満たす値と当該ループの繰り返し数との最大公約数の値となるように決定する。
【0074】
ループアンローリング手段14は、アンロール段数決定手段13で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0075】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコード(当該無条件分岐コードおよび当該変更に起因して決して実行されなくなったコード)を削除する。
【0076】
図9および図10は、本実施の形態に係るコンパイラ装置の具体的な動作を説明するための図である。
【0077】
第1の実施の形態に係るコンパイラ装置では、ループ検出手段11において、インデックスの増分値が1であるループが最適化の対象とされていた。これに対して、第3の実施の形態に係るコンパイラ装置では、インデックスの増分値が1でないループも最適化の対象とすることができる。
【0078】
次に、本実施の形態に係るコンパイラ装置の具体的な動作について、図9および図10を参照して説明する。
【0079】
ここでは、図9に示すFortranプログラム片(インデックスiの初期値が1で増分値が6のdoループを含むプログラム片)を有する中間テキスト21の最適化が行われる場合の具体例について説明する。
【0080】
図9のFortranプログラム片において、doループのインデックスiの増分値が、図9中のAで6と設定されている。したがって、第1の実施の形態におけるループ検出手段11のインデックスの抽出条件(増分値に関する条件)は、満たされていない。しかし、本実施の形態におけるループ検出手段11は、そのような増分値に関するインデックスの抽出条件の制約がないので、そのようなインデックスを含むループも最適化の対象とすることができる。
【0081】
このとき、アンロール段数決定手段13は、変形後の増分値が変形前の増分値の6と図9中のBの剰余を求める関数modの除数4との最小公倍数の12になるように、アンロール段数を決定する。
【0082】
そして、ループアンローリング手段14は、12段のアンロール段数でアンローリングを行うことによって、図9中のdoループの変形(展開)を行い、本発明のコンパイラ装置の適用を可能とする。
【0083】
つまり、不要コード削除手段15は、ループアンローリング手段14によるアンローリングおよび「条件分岐コードから無条件分岐コードへの変更」を受けて、不要コードの削除を実行し、図10に示すようなFortranプログラム片を有する中間テキスト22を生成する。
【0084】
本実施の形態においても、本発明の適用により、ループ内で実行される命令が削除されるため(図10参照)、本実施の形態に係るコンパイラ装置によって生成されるオブジェクトプログラムの実行性能が向上する。
【0085】
(4) 第4の実施の形態
図1は、本発明の第4の実施の形態に係るコンパイラ装置の構成を示すブロック図でもある。すなわち、本実施の形態に係るコンパイラ装置も、ループ最適化部10(中間テキスト21を最適化して中間テキスト22を生成する処理部)によって実現される。また、このループ最適化部10は、ループ検出手段11と、分岐検出手段12と、アンロール段数決定手段13と、ループアンローリング手段14と、不要コード削除手段15とを含んで構成されている。
【0086】
本実施の形態においては、これらの各手段は、概略、次のように動作する。
【0087】
ループ検出手段11は、初期値が1で増分値が1のインデックスを含むループの検出を行う。
【0088】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報(当該インデックスの初期値,最終値,および増分値ならびに当該除数等)を記録する。
【0089】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を、分岐検出手段12で記録された情報中の上記の除数と当該ループの繰り返し数との最大公約数よりも小さな値であり当該ループの繰り返し数の約数である値に決定する。
【0090】
ループアンローリング手段14は、アンロール段数決定手段13で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0091】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコード(当該無条件分岐コードおよび当該変更に起因して決して実行されなくなったコード)を削除する。
【0092】
図11および図12は、本実施の形態に係るコンパイラ装置の具体的な動作を説明するための図である。
【0093】
第1の実施の形態に係るコンパイラ装置では、アンロール段数を条件分岐コードにおける剰余に係る除数と当該ループの繰り返し数との最大公約数の値としていた。これに対して、第4の実施の形態に係るコンパイラ装置は、アンロール段数を上記のような値には限定せず、「上記の除数と当該ループの繰り返し数との最大公約数よりも小さな値であり、当該ループの繰り返し数の約数である値」(条件分岐コードの削除を可能とする他の値)となるように、アンロール段数を決定している。これにより、当該除数が大きな値であっても、アンローリング後のコード群を大きなものとすることなく、本発明の考え方を適用することが可能になる。
【0094】
次に、本実施の形態に係るコンパイラ装置の具体的な動作について、図11および図12を参照して説明する。
【0095】
ここでは、図11に示すFortranプログラム片(条件中の剰余に係る除数が1000と大きな値である条件分岐コードを有するdoループ(インデックスiの初期値が1で増分値が1で繰り返し数が1000000のdoループ)を含むプログラム片)を有する中間テキスト21の最適化が行われる場合の具体例について説明する。
【0096】
図11のFortranプログラム片において、剰余を求める関数modの除数は1000であり、第1の実施の形態に係るコンパイラ装置の処理を適用するとアンローリング後のコード群が非常に大きなものになってしまう。
【0097】
これに対して、本実施の形態に係るコンパイラ装置を適用すると、図12に示すように、当該doループの繰り返し数の1000000の約数である4という適切なアンロール段数でアンローリングを行うことができ、本発明の考え方の適用が可能になる。
【0098】
本実施の形態に係るコンパイラ装置の適用により、アンローリング後において、分岐検出手段12によって検出された条件分岐コードの全てを削除することはできないものの、当該doループ中の3つの条件分岐コードを削除することはできるため(図12参照)、本実施の形態に係るコンパイラ装置によって生成されるオブジェクトプログラムの実行性能は向上する。
【0099】
(5) 他の実施の形態
本発明のコンパイラ装置では、上述の第1の実施の形態〜第4の実施の形態の他に、以下のa〜dに示す実施の形態も考えられる。なお、これらの実施の形態に係るコンパイラ装置も、図1に示すブロック図によって、その構成を示すことができる。
【0100】
a.第2の実施の形態の考え方と第3の実施の形態の考え方とを併有させて、第5の実施の形態を実現することができる。この実施の形態に係るコンパイラ装置は、以下に示すような各手段を備えた構成となる。
【0101】
ループ検出手段11は、初期値が変数で増分値が定数のインデックスを含むループの検出を行う。
【0102】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する。
【0103】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を分岐検出手段12で記録された情報に基づいて「変形後の増分値が変形前の増分値と上記の除数との最小公倍数になる」という要件を満たす値に決定する。
【0104】
ループアンローリング手段14は、アンロール対象外コード群をアンロール対象のコード群の前段に生成した上で、アンロール段数決定手段13で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0105】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する。
【0106】
b.第2の実施の形態の考え方と第4の実施の形態の考え方とを併有させて、第6の実施の形態を実現することができる。この実施の形態に係るコンパイラ装置は、以下に示すような各手段を備えた構成となる。
【0107】
ループ検出手段11は、初期値が変数で増分値が1のインデックスを含むループの検出を行う。
【0108】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する。
【0109】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を分岐検出手段12で記録された情報中の上記の除数よりも小さな値であり当該ループの繰り返し数の約数である値に決定する。
【0110】
ループアンローリング手段14は、アンロール対象外コード群をアンロール対象のコード群の前段に生成した上で、アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0111】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する。
【0112】
c.第3の実施の形態の考え方と第4の実施の形態の考え方とを併有させて、第7の実施の形態を実現することができる。この実施の形態に係るコンパイラ装置は、以下に示すような各手段を備えた構成となる。
【0113】
ループ検出手段11は、初期値が1で増分値が定数のインデックスを含むループの検出を行う。
【0114】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する。
【0115】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を分岐検出手段12で記録された情報に基づいて「変形後の増分値が変形前の増分値と上記の除数との最小公倍数になる」という要件を満たす値と当該ループの繰り返し数との最大公約数よりも小さな値であり当該ループの繰り返し数の約数である値に決定する。
【0116】
ループアンローリング手段14は、アンロール段数決定手段13で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0117】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する。
【0118】
d.第2の実施の形態の考え方と第3の実施の形態の考え方と第4の実施の形態の考え方とを併有させて、第8の実施の形態を実現することができる。この実施の形態に係るコンパイラ装置は、以下に示すような各手段を備えた構成となる。
【0119】
ループ検出手段11は、初期値が変数で増分値が定数のインデックスを含むループの検出を行う。
【0120】
分岐検出手段12は、ループ検出手段11で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する。
【0121】
アンロール段数決定手段13は、分岐検出手段12で検出された条件分岐コードを含むループのアンロール段数を分岐検出手段12で記録された情報に基づいて「変形後の増分値が変形前の増分値と上記の除数との最小公倍数になる」という要件を満たす値よりも小さな値であり当該ループの繰り返し数の約数である値に決定する。
【0122】
ループアンローリング手段14は、アンロール対象外コード群をアンロール対象のコード群の前段に生成した上で、アンロール段数決定手段13で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と分岐検出手段12で記録された情報とから分岐検出手段12で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更する。
【0123】
不要コード削除手段15は、ループアンローリング手段14による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する。
【0124】
(6) 第9の実施の形態
図13は、本発明の第9の実施の形態に係るコンパイラ装置の構成を示すブロック図である。
【0125】
図13を参照すると、本発明の第9の実施の形態に係るコンパイラ装置は、図1に示した第1〜第8の各実施の形態に係るコンパイラ装置に対して、コンパイラを格納した記録媒体100を備える点が異なっている。この記録媒体100は、磁気ディスク,半導体メモリ,その他の記録媒体であってよい。
【0126】
コンパイラは、記録媒体100からループ最適化部10(中間テキスト21を最適化して中間テキスト22を生成し、ループ検出手段11,分岐検出手段12,アンロール段数決定手段13,ループアンローリング手段14,および不要コード削除手段15を備えるループ最適化部10)を実現するコンピュータに読み込まれ、当該ループ最適化部10の動作をループ検出手段11,分岐検出手段12,アンロール段数決定手段13,ループアンローリング手段14,および不要コード削除手段15として制御する。コンパイラの制御によるループ検出手段11,分岐検出手段12,アンロール段数決定手段13,ループアンローリング手段14,および不要コード削除手段15の動作は、第1〜第8の各実施の形態におけるループ検出手段11,分岐検出手段12,アンロール段数決定手段13,ループアンローリング手段14,および不要コード削除手段15の動作と全く同様になるので、その詳しい説明を割愛する。
【0127】
【発明の効果】
以上説明したように、本発明によると、実行時間が短いオブジェクトプログラムの生成が可能となるコンパイラ装置を実現することができる(実行時間を短縮するための最適化を確実に実現することができる)という効果が生じる。
【0128】
このような効果が生じる理由は、従来技術におけるような「ループの中で特定の条件のみで実行される式を実行するか否かの判定を行うための分岐命令を生成する必要」がなくなり、従来できなかった他の最適化を行うことが可能になるためである。また、ループ内に存在する条件分岐(条件分岐コード)を当該ループのアンローリングを行うことによって無条件分岐(無条件分岐コード)に変更し、当該変更に基づいて不要なコード(条件分岐コードおよびそれに付随する演算命令のためのコード等)を適切に削除することができ、従来であればループ内で常に実行されていた命令が実行されなくなるためである。
【図面の簡単な説明】
【図1】本発明の第1〜第8の各実施の形態に係るコンパイラ装置の構成を示すブロック図である。
【図2】本発明の第1の実施の形態に係るコンパイラ装置の処理を示す流れ図である。
【図3】本発明の第1の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の対象となる中間テキストにおけるFortranプログラム片を示す図)である。
【図4】本発明の第1の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(アンローリングを適用した後の当該Fortranプログラム片を示す図)である。
【図5】本発明の第1の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(条件分岐コードから無条件分岐コードへの変更を適用した後の当該Fortranプログラム片を示す図)である。
【図6】本発明の第1の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の適用後の当該Fortranプログラム片を示す図)である。
【図7】本発明の第2の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の対象となる中間テキストにおけるFortranプログラム片を示す図)である。
【図8】本発明の第2の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の適用後の当該Fortranプログラム片を示す図)である。
【図9】本発明の第3の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の対象となる中間テキストにおけるFortranプログラム片を示す図)である。
【図10】本発明の第3の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の適用後の当該Fortranプログラム片を示す図)である。
【図11】本発明の第4の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の対象となる中間テキストにおけるFortranプログラム片を示す図)である。
【図12】本発明の第4の実施の形態に係るコンパイラ装置の具体的な動作を説明するための図(最適化の適用後の当該Fortranプログラム片を示す図)である。
【図13】本発明の第9の実施の形態に係るコンパイラ装置の構成を示すブロック図である。
【符号の説明】
10 ループ最適化部
11 ループ検出手段
12 分岐検出手段
13 アンロール段数決定手段
14 ループアンローリング手段
15 不要コード削除手段
21,22 中間テキスト
100 記録媒体[0001]
BACKGROUND OF THE INVENTION
The present invention relates to a compiler that interprets a source program, generates intermediate text, performs optimization, and generates an object program. For more details on the device Execute optimization based on deletion of conditional branches in the loop (optimization to reduce the execution time of the object program to be generated) Compiler device About.
[0002]
[Prior art]
This kind of traditional Compiler device Japanese Patent Laid-Open No. 5-27986 discloses a patent publication relating to the above.
[0003]
In this publication, a comparison instruction is given when there is a conditional branch that branches based on the result of comparing a constant that is invariant in a loop or a variable that is invariant in a loop and that is based on the comparison result. A technique (optimization method and optimization apparatus of a compiler) that realizes optimization by deleting and branching unconditionally to a branch destination is described.
[0004]
That is, in this prior art, only a comparison instruction between a variable that is invariant in a loop and a constant or a comparison instruction between variables that is invariant in a loop is changed to an unconditional branch instruction, and the conditional branch in the loop is deleted. Optimization has been done.
[0005]
Here, in the related art, a branch instruction (unconditional branch instruction replaced from a comparison instruction and a conditional branch instruction) for determining whether or not to execute an expression executed only under a specific condition in a loop. ) Had to be generated.
[0006]
[Problems to be solved by the invention]
Conventional as described above Compiler device Has the following problems.
[0007]
The first problem is that a branch instruction (unconditional branch instruction) for determining whether to execute an expression executed only under a specific condition in a loop is generated. That is, there is a possibility of inhibiting the conversion.
[0008]
The second problem is that since the branch instruction mentioned in the first problem is always generated, more instructions are executed in the loop. Compiler device This means that the execution performance of the object program generated by the process deteriorates.
[0009]
In view of the above points, the object of the present invention is to change a conditional branch (conditional branch code) existing in a loop to an unconditional branch (unconditional branch code) by unrolling the loop. A compiler that can generate an object program with a short execution time by deleting unnecessary code based on Computer-readable recording medium storing device and compiler Is to provide.
[0010]
[Means for Solving the Problems]
Of the present invention Compiler device Is a compiler that interprets a source program, generates intermediate text, optimizes it, and generates an object program Device, wherein said optimization is Optimization based on deleting conditional branches in a loop And the compiler device is Loop detection means for detecting a loop including an index having an initial value of 1 and an increment value of 1, and a conditional branch code existing in the loop detected by the loop detection means are detected. Is a comparison with a constant, and a condition branch code that satisfies the requirement that the dividend for division to calculate the remainder is an index of the loop and the division divisor is a positive integer constant is detected and the condition Branch detection means for recording information relating to the branch code, the number of unroll stages of the loop including the conditional branch code detected by the branch detection means, the divisor in the information recorded by the branch detection means, and the number of repetitions of the loop The unroll stage number determining means for determining the value of the greatest common divisor with (the number of repetitions) and the unroll stage number determined by the unroll stage number determining means In the process of unrolling and unrolling each code in the unrolling, the branch detection is performed based on the information indicating the number of stages in which each code is expanded and the information recorded by the branch detection unit. The condition of the conditional branch code detected by the means is determined to be “whether it will be true / false” or “whether it will be true or false”, and based on the determination, the condition must be true / false. Loop unrolling means for changing conditional branch code to unconditional branch code, and unnecessary code deletion for deleting unnecessary code due to change from conditional branch code to unconditional branch code by the loop unrolling means Means.
[0011]
In addition, the present invention Compiler device Is a compiler that interprets a source program, generates intermediate text, optimizes it, and generates an object program Device, wherein said optimization is Optimization based on deleting conditional branches in a loop And the compiler device is A loop detection means for detecting a loop including an index whose initial value is a variable (including a constant other than 1) and an increment value is 1, and a conditional branch code existing in the loop detected by the loop detection means is detected. Satisfying the requirement that the condition is a comparison between the result of the remainder and a constant, the dividend of the division for calculating the remainder is an index of the loop, and the divisor of the division is a positive integer constant. A branch detection unit that detects a conditional branch code and records information related to the conditional branch code, and an unrolled stage number of a loop including the conditional branch code detected by the branch detection unit in the information recorded by the branch detection unit The unroll stage number determining means for determining the divisor value and the unroll target code group (the number of loop iterations is determined by the unroll stage number determining means). Code group divided as a code group other than the unroll target code group) is generated in the previous stage of the unroll target code group when it is adjusted to be as large as possible by a multiple of the unrolled stage number , Information indicating in which stage each code is unrolled in the process of unrolling the loop with the unroll stage number determined by the unroll stage number determining means and developing each code in the unrolling stage And “whether it will be true / false” or “whether it will be true or false” for the condition of the conditional branch code detected by the branch detection means from the information recorded by the branch detection means A loop unrolling means for determining and changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code; It may be configured to have a dead code deleting means from the conditional branch code by loop unrolling means due to changes to the unconditional branch code to delete the code becomes unnecessary.
[0012]
Furthermore, the present invention Compiler device Is a compiler that interprets a source program, generates intermediate text, optimizes it, and generates an object program Device, wherein said optimization is Optimization based on deleting conditional branches in a loop And the compiler device is Loop detecting means for detecting a loop including an index having an initial value of 1 and an increment value being a constant, and a conditional branch code existing in the loop detected by the loop detecting means are detected. Is a comparison with a constant, and a condition branch code that satisfies the requirement that the dividend for division to calculate the remainder is an index of the loop and the division divisor is a positive integer constant is detected and the condition Based on the information recorded by the branch detection means, the branch detection means for recording information related to the branch code, and the number of unroll stages of the loop including the conditional branch code detected by the branch detection means After unrolling Increment value of Before unrolling Value that satisfies the requirement that it is the least common multiple of the increment value of Divided by the incremental value before unrolling Unrolling stage number determining means for determining to be, and unrolling of the loop with the unrolling stage number determined by the unrolling stage number determining means, and in the process of developing each code in the unrolling, The condition branch code condition detected by the branch detection means based on the information indicating whether the code is expanded into the information and the information recorded by the branch detection means is “whether it is always true / false” and “ A loop unrolling means that determines whether the condition branch code is true / false based on the determination, and changes the conditional branch code that is always true / false to an unconditional branch code, and the loop unrolling means It has unnecessary code deletion means that deletes code that has become unnecessary due to the change from conditional branch code to unconditional branch code. It can also be configured to.
[0013]
In addition, the present invention Compiler device Is a compiler that interprets a source program, generates intermediate text, optimizes it, and generates an object program Device, wherein said optimization is Optimization based on deleting conditional branches in a loop And the compiler device is Loop detection means for detecting a loop including an index having an initial value of 1 and an increment value of 1, and a conditional branch code existing in the loop detected by the loop detection means are detected. Is a comparison with a constant, and a condition branch code that satisfies the requirement that the dividend for division to calculate the remainder is an index of the loop and the division divisor is a positive integer constant is detected and the condition Branch detection means for recording information relating to the branch code, the number of unroll stages of the loop including the conditional branch code detected by the branch detection means, the divisor in the information recorded by the branch detection means, and the number of repetitions of the loop Unroll stage number determining means for determining a value smaller than the greatest common divisor and a divisor of the number of iterations of the loop, and the unroll stage number determining means In the process of unrolling the loop with the number of unroll stages determined in step (b) and expanding each code in the unrolling, information indicating the number of stages in which each code is expanded and the branch detection means From the recorded information, it is determined whether the conditional branch code condition detected by the branch detection means is “whether it is true / false” or “true or false”. A loop unrolling means for changing a conditional branch code whose condition is always true / false to an unconditional branch code, and unnecessary due to a change from the conditional branch code to the unconditional branch code by the loop unrolling means It can also be configured to have unnecessary code deleting means for deleting the lost code.
[0014]
In this case, a compiler that compiles the source program described in Fortran apparatus It is considered that it is one desirable form to apply to.
[0015]
DETAILED DESCRIPTION OF THE INVENTION
Next, the present invention will be described in detail with reference to the drawings.
[0016]
(1) First embodiment
FIG. 1 relates to a first embodiment of the present invention. Compiler device It is a block diagram which shows the structure of these.
[0017]
Referring to FIG. 1, according to the present embodiment Compiler device Is realized by the loop optimization unit 10 (a processing unit that optimizes the intermediate text 21 to generate the intermediate text 22) in the compiler (the intermediate text 21 and the intermediate text 22 are the compilers). apparatus Corresponds to the intermediate text generated in the process of interpreting the source program and optimizing it to generate the object program).
[0018]
The
[0019]
Each of these means generally operates as follows.
[0020]
The
[0021]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information on the conditional branch code (initial value, final value, and increment value of the index) Record the divisor etc.).
[0022]
The unroll stage number determination means 13 determines the unroll stage number of the loop including the conditional branch code detected by the branch detection means 12 as the greatest promise between the divisor in the information recorded by the branch detection means 12 and the number of repetitions of the loop. Decide on a number value.
[0023]
The loop unrolling means 14 unrolls the loop with the number of unroll stages determined by the unroll stage number determining means 13, and the code in which each code is expanded in the process of expanding each code in the unrolling The condition of the conditional branch code detected by the branch detection means 12 from the information indicating whether or not and the information recorded by the branch detection means 12 are “whether true / false” or “true or false” Based on the determination, the conditional branch code whose condition is always true / false is changed to an unconditional branch code.
[0024]
Unnecessary code deletion means 15 is code that becomes unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling means 14 (the unconditional branch code and the change are never executed due to the change. Code).
[0025]
FIG. 2 relates to the present embodiment. Compiler device It is a flowchart which shows the process of. This processing includes a loop search step 201, an in-loop processing target index presence /
[0026]
3 to 6 relate to the present embodiment. Compiler device It is a figure for demonstrating the specific operation | movement of.
[0027]
Next, with reference to FIG. 1 and FIG. 2, it concerns on this Embodiment comprised as mentioned above. Compiler device Will be described in detail.
[0028]
First, the loop detection means 11 in the
[0029]
Next, the
[0030]
If it is determined in
[0031]
Next, the unroll stage number determination unit 13 determines the unroll stage number of the loop including the conditional branch code detected by the
[0032]
The loop unrolling means 14 unrolls the loop with the number of unroll stages determined by the unroll stage number determining means 13 in step 207 (step 208).
[0033]
Further, the loop unrolling means 14 performs the processing shown in the following ac when unrolling in Step 208, and executes the conditional branch code (conditional branch detected by the branch detecting means 12) after unrolling. Code) is changed to an unconditional branch code (step 209).
[0034]
a. Information indicating in which stage each code is expanded in the process of expanding each code (information indicating which code group belongs to the number of unrolled stages) To get.
[0035]
b. Based on the information acquired in step a and the information recorded by the branch detection means 12 in
[0036]
c. Conditional branch code that is judged as “condition is always true / false” in b above is replaced with unconditional branch code (“code indicating that condition is always true and branch unconditionally”) or “condition is always false. And a process for changing to “a code indicating unconditional branching”).
[0037]
Finally, the unnecessary code deletion means 15 uses the code that has become unnecessary due to the change from the branch condition code to the unconditional branch code by the loop unrolling means 14 (from the unconditional branch code after the change and the “branch condition code The code relating to the operation instruction or the like that has never been executed due to “change to unconditional branch code” is deleted (step 210).
[0038]
Thereby, the intermediate text 22 that has been optimized based on the deletion of the conditional branch in the loop is output.
[0039]
If “NO” is determined in
[0040]
Next, according to this embodiment Compiler device The specific operation will be described in detail with reference to FIGS. 1, 2, 3, 4, 5, and 6.
[0041]
Here, a specific example will be described in which optimization of the intermediate text 21 having the Fortran program piece (a program piece including a do loop with an initial value of index i of 1 and an increment value of 1) shown in FIG. 3 is performed.
[0042]
The loop detecting means 11 searches the intermediate text 21 and detects the do loop indicated by D in FIG. 3 (step 201 in FIG. 2).
[0043]
Furthermore, the
[0044]
The branch detection means 12 examines each code in the do loop and searches for a conditional branch code (step 203). In the case of FIG. 3, “if (mod (i, 4) .eq.0)” of A, “if (j.le.500)” of B, and “if (mod (i, 3) of C” ) .Ge.j) ”is detected as a conditional branch code.
[0045]
Next, the branch detection means 12 checks whether or not the condition (conditional expression) of the conditional branch code detected above is a comparison between the remainder result and a constant (step 204). In the case of FIG. 3, it is determined that the conditional expression in the conditional branch codes of A and C is “comparison between the result of the function mod for calculating the remainder and a constant”, and the two conditional branch codes are extracted.
[0046]
Further, the
[0047]
The unroll stage number determining means 13 determines the unroll stage number of the do loop based on the information recorded above (step 207). In the case of FIG. 3, since the divisor of the function mod for calculating the remainder in the conditional branch code of A is 4, and the number of repetitions of the do loop is 1000, the number of unroll stages is 4 (the greatest common divisor of 4 and 1000). ).
[0048]
The loop unrolling means 14 unrolls the do loop (step 208). As a result of this unrolling, the program piece shown in FIG. 3 is changed (deployed) like the program piece shown in FIG.
[0049]
Here, the loop unrolling means 14 records information indicating the number of levels of the expanded codes when the unrolling is performed. Then, based on this information and the information recorded in
[0050]
Finally, the unnecessary code deletion means 15 deletes the code changed to the unconditional branch code and the code that has never been executed due to the change (step 210). In the case of FIG. 5, since the conditions of E, F, and G of the unconditional branch code are “.false.” (Conditions that must be false), E, F, and G of the unconditional branch code, The codes I, J, and K that are never executed due to them are deleted as unnecessary codes. For H of the unconditional branch code, since the condition is “.true.” (A condition that is always true), only H of the unconditional branch code is deleted. The result of deleting unnecessary codes from the program piece of FIG. 5 is the program piece shown in FIG.
[0051]
As a result of the above optimization (optimization by deleting conditional branches in the loop), the conditional branch code that exists in the loop is deleted, so the remainder operation instruction that is the conditional expression of the conditional branch instruction is also deleted. The number of instructions executed in the is reduced. In general, since a branch instruction becomes a factor that hinders optimization, the effect of other optimization can be expected by reducing the number of conditional branch instructions (conditional branch codes).
[0052]
(2) Second embodiment
FIG. 1 relates to a second embodiment of the present invention. Compiler device It is also a block diagram which shows the structure. That is, according to this embodiment Compiler equipment This is realized by the loop optimization unit 10 (a processing unit that optimizes the intermediate text 21 to generate the intermediate text 22). The
[0053]
In the present embodiment, each of these means generally operates as follows.
[0054]
The loop detection means 11 detects a loop including an index whose initial value is a variable (including a constant other than 1) and whose increment value is 1.
[0055]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information on the conditional branch code (initial value, final value, and increment value of the index) Record the divisor etc.).
[0056]
The unroll stage number determination unit 13 determines the unroll stage number of the loop including the conditional branch code detected by the
[0057]
The loop unrolling means 14 is an unrolled code group (a code group to be unrolled when the number of loop repetitions is adjusted to be as large as possible by a multiple of the unrolled stage number determined by the unrolled stage number determining means 13. Is generated in the previous stage of the code group to be unrolled, and then the loop is unrolled with the number of unroll stages determined by the unroll stage number determining means 13. In addition, in the process of developing each code in the unrolling, the
[0058]
Unnecessary code deletion means 15 is code that becomes unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling means 14 (the unconditional branch code and the change are never executed due to the change. Code).
[0059]
7 and 8 are related to this embodiment. Compiler device It is a figure for demonstrating the specific operation | movement of.
[0060]
According to the first embodiment Compiler device In the loop detection means 11, a loop including an index having an initial value of 1 and an increment value of 1 is targeted for optimization. On the other hand, according to the second embodiment Compiler device Thus, even if the initial value of the loop index is a variable or a constant other than 1, the loop can be targeted for optimization.
[0061]
Next, according to this embodiment Compiler device The specific operation will be described with reference to FIGS.
[0062]
Here, a specific example will be described in which optimization of the intermediate text 21 having the Fortran program fragment (a program fragment including a do loop whose initial value of index i is variable k and increment value is 1) shown in FIG. 7 is performed. .
[0063]
In the Fortran program fragment of FIG. 7, the initial value of the index i of the do loop is set by A in FIG. 7, but the initial value is a variable k and not a constant of 1. Therefore, the index extraction condition (requirement corresponding to “index to be processed” in the determination of
[0064]
Further, the unroll stage number determining means 13 has a divisor of a function mod for obtaining a remainder in the conditional expression of the conditional branch code of B in FIG. , 4 unroll stages When decide.
[0065]
Loop unrolling means 14 is a group of unrolled cords (A code group divided as a code group other than the code group to be unrolled when the loop repetition number is adjusted to be as large as possible by a multiple of the unroll stage number determined by the unroll stage number determining means 13) Is generated before the code group to be unrolled After that, the loop is unrolled with the number of stages determined by the unroll stage number determining means 13. . When the portion C in FIG. 8 is such that the number of repetitions of the do loop in the unroll target code group (portion D in FIG. 8) is a multiple of four of the above divisor (the number of unroll steps is four). Code group that is not subject to unrolling. Here, “iand” is one of functions related to bit operations in Fortran, and is a function for obtaining the logical product of each bit. Further, “max” is a function for obtaining the maximum value in Fortran.
[0066]
In this case, the loop unrolling means 14 can determine that the conditional branch code existing in the portion D in FIG. 8 is always true / false as in the first embodiment. On the other hand, it is possible to apply the same unrolling and “change from a conditional branch code to an unconditional branch code” as in the first embodiment.
[0067]
Then, the unnecessary code deleting unit 15 deletes the unnecessary code in the portion, and generates the intermediate text 22 having the Fortran program piece as shown in FIG.
[0068]
In this way, in this embodiment as well, in the same way as in the first embodiment, the number of instructions to be executed can be reduced (see FIG. 8). Compiler device The execution performance of the object program generated by this is improved.
[0069]
(3) Third embodiment
FIG. 1 relates to a third embodiment of the present invention. Compiler device It is also a block diagram which shows the structure. That is, according to this embodiment Compiler equipment This is realized by the loop optimization unit 10 (a processing unit that optimizes the intermediate text 21 to generate the intermediate text 22). The
[0070]
In the present embodiment, each of these means generally operates as follows.
[0071]
The loop detection means 11 detects a loop including an index whose initial value is 1 and whose increment value is a constant.
[0072]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information on the conditional branch code (initial value, final value, and increment value of the index) Record the divisor etc.).
[0073]
The unroll stage number determination means 13 determines the unroll stage number of the loop including the conditional branch code detected by the branch detection means 12 based on the information recorded by the branch detection means 12 as “the increment value after deformation is the increment before deformation”. It is determined so as to be the value of the greatest common divisor of the value satisfying the requirement of “the least common multiple of the value and the divisor” and the number of repetitions of the loop.
[0074]
The loop unrolling means 14 unrolls the loop with the number of unroll stages determined by the unroll stage number determining means 13, and the code in which each code is expanded in the process of expanding each code in the unrolling The condition of the conditional branch code detected by the branch detection means 12 from the information indicating whether or not and the information recorded by the branch detection means 12 are “whether true / false” or “true or false” Based on the determination, the conditional branch code whose condition is always true / false is changed to an unconditional branch code.
[0075]
Unnecessary code deletion means 15 is code that becomes unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling means 14 (the unconditional branch code and the change are never executed due to the change. Code).
[0076]
9 and 10 are related to the present embodiment. Compiler device It is a figure for demonstrating the specific operation | movement of.
[0077]
According to the first embodiment Compiler device Then, in the loop detection means 11, the loop whose index increment value is 1 is targeted for optimization. On the other hand, according to the third embodiment Compiler device Then, a loop whose index increment value is not 1 can also be targeted for optimization.
[0078]
Next, according to this embodiment Compiler device The specific operation will be described with reference to FIGS. 9 and 10. FIG.
[0079]
Here, a specific example in the case where optimization of the intermediate text 21 having the Fortran program fragment (a program fragment including a do loop having an initial value of index i of 1 and an increment value of 6) shown in FIG. 9 will be described.
[0080]
In the Fortran program fragment of FIG. 9, the increment value of the index i of the do loop is set to 6 at A in FIG. Therefore, the index extraction condition (condition regarding the increment value) of the
[0081]
At this time, the unroll stage number determining means 13 unrolls so that the increment value after deformation becomes 12 which is the least common multiple of the increment value 6 before deformation and the
[0082]
Then, the loop unrolling means 14 performs deformation (development) of the do loop in FIG. 9 by performing unrolling with twelve unrolling stages. Compiler device Can be applied.
[0083]
In other words, the unnecessary code deletion unit 15 performs unrolling by the loop unrolling unit 14 and “change from the conditional branch code to the unconditional branch code”, deletes the unnecessary code, and performs the Fortran as shown in FIG. An intermediate text 22 having a program piece is generated.
[0084]
Also in the present embodiment, since the instruction executed in the loop is deleted by application of the present invention (see FIG. 10), the present embodiment relates to this embodiment. Compiler device This improves the execution performance of the object program generated by.
[0085]
(4) Fourth embodiment
FIG. 1 relates to a fourth embodiment of the present invention. Compiler device It is also a block diagram which shows the structure. That is, according to this embodiment Compiler equipment This is realized by the loop optimization unit 10 (a processing unit that optimizes the intermediate text 21 to generate the intermediate text 22). The
[0086]
In the present embodiment, each of these means generally operates as follows.
[0087]
The loop detection means 11 detects a loop including an index having an initial value of 1 and an increment value of 1.
[0088]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information on the conditional branch code (initial value, final value, and increment value of the index) Record the divisor etc.).
[0089]
The unroll stage number determination means 13 determines the unroll stage number of the loop including the conditional branch code detected by the branch detection means 12 as the greatest promise between the divisor in the information recorded by the branch detection means 12 and the number of repetitions of the loop. The value is smaller than the number and is a divisor of the number of iterations of the loop.
[0090]
The loop unrolling means 14 unrolls the loop with the number of unroll stages determined by the unroll stage number determining means 13, and the code in which each code is expanded in the process of expanding each code in the unrolling The condition of the conditional branch code detected by the branch detection means 12 from the information indicating whether or not and the information recorded by the branch detection means 12 are “whether true / false” or “true or false” Based on the determination, the conditional branch code whose condition is always true / false is changed to an unconditional branch code.
[0091]
Unnecessary code deletion means 15 is code that becomes unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling means 14 (the unconditional branch code and the change are never executed due to the change. Code).
[0092]
11 and 12 are related to the present embodiment. Compiler device It is a figure for demonstrating the specific operation | movement of.
[0093]
According to the first embodiment Compiler device In this case, the number of unrolled stages is the value of the greatest common divisor of the divisor relating to the remainder in the conditional branch code and the number of repetitions of the loop. In contrast, according to the fourth embodiment Compiler device Does not limit the number of unroll stages to the above value, but “a value smaller than the greatest common divisor of the divisor and the number of iterations of the loop and a divisor of the number of iterations of the loop” The number of unroll stages is determined so as to be (another value that enables the conditional branch code to be deleted). Thereby, even if the divisor is a large value, the idea of the present invention can be applied without increasing the code group after unrolling.
[0094]
Next, according to this embodiment Compiler device The specific operation will be described with reference to FIGS. 11 and 12. FIG.
[0095]
Here, the Fortran program fragment shown in FIG. 11 (a do loop having a conditional branch code whose divisor relating to the remainder in the condition is 1000 and a large value (the initial value of the index i is 1, the increment value is 1 and the number of repetitions is 1000000) A specific example in the case where optimization of the intermediate text 21 having the program fragment including the do loop) is performed will be described.
[0096]
In the Fortran program fragment of FIG. 11, the divisor of the function mod for calculating the remainder is 1000, and according to the first embodiment Compiler device If this processing is applied, the code group after unrolling becomes very large.
[0097]
In contrast, according to the present embodiment Compiler device As shown in FIG. 12, unrolling can be performed with an appropriate number of unroll stages of 4, which is a divisor of 1000000 of the number of repetitions of the do loop, and the concept of the present invention can be applied.
[0098]
According to this embodiment Compiler device As a result of the application, all conditional branch codes detected by the branch detection means 12 cannot be deleted after unrolling, but three conditional branch codes in the do loop can be deleted (FIG. 12). See), according to this embodiment Compiler device The execution performance of the object program generated by this is improved.
[0099]
(5) Other embodiments
Of the present invention Compiler device Then, in addition to the first to fourth embodiments described above, the following embodiments a to d are also conceivable. It should be noted that according to these embodiments Compiler device The configuration can also be shown by the block diagram shown in FIG.
[0100]
a. The fifth embodiment can be realized by combining the idea of the second embodiment and the idea of the third embodiment. According to this embodiment Compiler device The configuration includes each means as described below.
[0101]
The loop detection means 11 detects a loop including an index whose initial value is a variable and whose increment value is a constant.
[0102]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information regarding the conditional branch code is recorded.
[0103]
The unroll stage number determination means 13 determines the unroll stage number of the loop including the conditional branch code detected by the branch detection means 12 based on the information recorded by the branch detection means 12 as “the incremental value after deformation is the incremental value before deformation. It is determined to be a value that satisfies the requirement of “the least common multiple with the divisor”.
[0104]
The loop unrolling means 14 generates a non-unroll target code group in the previous stage of the unroll target code group, and then unrolls the loop with the number of unroll stages determined by the unroll stage number determination means 13. The condition of the conditional branch code detected by the branch detecting means 12 from the information indicating how many stages the code is developed in the process of developing each code and the information recorded by the branch detecting means 12 Judgment on whether or not it will always be true / false and whether it will be true or false, and based on that determination, conditional branch code that makes the condition true / false will be unconditional branch code change.
[0105]
The unnecessary code deleting unit 15 deletes a code that has become unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling unit 14.
[0106]
b. The sixth embodiment can be realized by combining the idea of the second embodiment and the idea of the fourth embodiment. According to this embodiment Compiler device The configuration includes each means as described below.
[0107]
The loop detection means 11 detects a loop including an index whose initial value is a variable and whose increment value is 1.
[0108]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information regarding the conditional branch code is recorded.
[0109]
The unroll stage number determining means 13 is such that the unroll stage number of the loop including the conditional branch code detected by the branch detection means 12 is smaller than the divisor in the information recorded by the branch detection means 12, and the number of repetitions of the loop. Determine a value that is a divisor of.
[0110]
The loop unrolling means 14 generates a code group that is not to be unrolled before the code group to be unrolled, and then performs unrolling of the loop with the number of unroll stages determined by the unroll stage number determining means. Regarding the condition of the conditional branch code detected by the branch detection means 12 from the information indicating how many stages the code is developed in the process of developing the code and the information recorded by the branch detection means 12 Judgment whether "becomes true / false" or "whether true or false" is made, and based on this judgment, the conditional branch code whose condition is always true / false is changed to unconditional branch code To do.
[0111]
The unnecessary code deleting unit 15 deletes a code that has become unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling unit 14.
[0112]
c. The seventh embodiment can be realized by combining the idea of the third embodiment and the idea of the fourth embodiment. According to this embodiment Compiler device The configuration includes each means as described below.
[0113]
The loop detection means 11 detects a loop including an index whose initial value is 1 and whose increment value is a constant.
[0114]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information regarding the conditional branch code is recorded.
[0115]
The unroll stage number determination means 13 determines the unroll stage number of the loop including the conditional branch code detected by the branch detection means 12 based on the information recorded by the branch detection means 12 as “the increment value after deformation is the increment value before deformation”. The value is smaller than the greatest common divisor of the value satisfying the requirement of “the least common multiple with the divisor” and the number of iterations of the loop, and a value that is a divisor of the number of iterations of the loop.
[0116]
The loop unrolling means 14 unrolls the loop with the number of unroll stages determined by the unroll stage number determining means 13, and the code in which each code is expanded in the process of expanding each code in the unrolling The condition of the conditional branch code detected by the branch detection means 12 from the information indicating whether or not and the information recorded by the branch detection means 12 are “whether true / false” or “true or false” Based on the determination, the conditional branch code whose condition is always true / false is changed to an unconditional branch code.
[0117]
The unnecessary code deleting unit 15 deletes a code that has become unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling unit 14.
[0118]
d. The eighth embodiment can be realized by combining the idea of the second embodiment, the idea of the third embodiment, and the idea of the fourth embodiment. According to this embodiment Compiler device The configuration includes each means as described below.
[0119]
The loop detection means 11 detects a loop including an index whose initial value is a variable and whose increment value is a constant.
[0120]
The branch detection means 12 detects the conditional branch code existing in the loop detected by the loop detection means 11 and reads “the condition is a comparison between the result of the remainder and a constant, and the dividend to be used for calculating the remainder. Is the index of the loop, and the conditional branch code satisfying the requirement that the divisor of the division is a positive integer constant is detected, and information regarding the conditional branch code is recorded.
[0121]
The unroll stage number determination means 13 determines the unroll stage number of the loop including the conditional branch code detected by the branch detection means 12 based on the information recorded by the branch detection means 12 as “the incremental value after deformation is the incremental value before deformation. The value is smaller than a value satisfying the requirement of “the least common multiple with the divisor” and is a divisor of the number of iterations of the loop.
[0122]
The loop unrolling means 14 generates a non-unroll target code group in the previous stage of the unroll target code group, and then unrolls the loop with the number of unroll stages determined by the unroll stage number determination means 13. The condition of the conditional branch code detected by the branch detecting means 12 from the information indicating how many stages the code is developed in the process of developing each code and the information recorded by the branch detecting means 12 Judgment on whether or not it will always be true / false and whether it will be true or false, and based on this determination, conditional branch code whose condition is always true / false will be unconditional branch code change.
[0123]
The unnecessary code deleting unit 15 deletes a code that has become unnecessary due to the change from the conditional branch code to the unconditional branch code by the loop unrolling unit 14.
[0124]
(6) Ninth embodiment
FIG. 13 relates to a ninth embodiment of the present invention. Compiler device It is a block diagram which shows the structure of these.
[0125]
Referring to FIG. 13, according to the ninth embodiment of the present invention. Compiler device Are related to the first to eighth embodiments shown in FIG. Compiler device Against Contains compiler The
[0126]
compiler Loop optimization unit 10 (optimizing intermediate text 21 to generate intermediate text 22 from
[0127]
【The invention's effect】
As described above, according to the present invention, a compiler capable of generating an object program with a short execution time apparatus Can be realized (optimization for shortening the execution time can be realized with certainty).
[0128]
The reason why such an effect occurs is that there is no need to generate a branch instruction for determining whether to execute an expression executed only under a specific condition in a loop as in the prior art, This is because it is possible to perform other optimizations that could not be performed conventionally. In addition, the conditional branch (conditional branch code) existing in the loop is changed to an unconditional branch (unconditional branch code) by unrolling the loop, and unnecessary code (conditional branch code and This is because, for example, a code for an operation instruction associated therewith can be appropriately deleted, and an instruction that has always been executed in a loop in the prior art is not executed.
[Brief description of the drawings]
FIG. 1 relates to first to eighth embodiments of the present invention. Compiler device It is a block diagram which shows the structure of these.
FIG. 2 relates to a first embodiment of the present invention. Compiler device It is a flowchart which shows the process of.
FIG. 3 relates to a first embodiment of the present invention. Compiler device FIG. 3 is a diagram for explaining a specific operation of (Fortran program fragment in intermediate text to be optimized).
FIG. 4 relates to a first embodiment of the present invention. Compiler device FIG. 6 is a diagram for explaining a specific operation of (Fortran program fragment after application of unrolling).
FIG. 5 relates to a first embodiment of the present invention. Compiler device FIG. 8 is a diagram for explaining a specific operation of (Fortran program fragment after applying a change from a conditional branch code to an unconditional branch code).
FIG. 6 is related to the first embodiment of the present invention. Compiler device FIG. 6 is a diagram for explaining a specific operation of (a diagram showing the Fortran program fragment after application of optimization).
FIG. 7 is a diagram according to a second embodiment of the present invention. Compiler device FIG. 3 is a diagram for explaining a specific operation of (Fortran program fragment in intermediate text to be optimized).
FIG. 8 relates to a second embodiment of the present invention Compiler device FIG. 6 is a diagram for explaining a specific operation of (a diagram showing the Fortran program fragment after application of optimization).
FIG. 9 relates to a third embodiment of the present invention. Compiler device FIG. 3 is a diagram for explaining a specific operation of (Fortran program fragment in intermediate text to be optimized).
FIG. 10 relates to a third embodiment of the present invention. Compiler device FIG. 6 is a diagram for explaining a specific operation of (a diagram showing the Fortran program fragment after application of optimization).
FIG. 11 relates to a fourth embodiment of the present invention. Compiler device FIG. 3 is a diagram for explaining a specific operation of (Fortran program fragment in intermediate text to be optimized).
FIG. 12 relates to a fourth embodiment of the present invention. Compiler device FIG. 6 is a diagram for explaining a specific operation of (a diagram showing the Fortran program fragment after application of optimization).
FIG. 13 relates to a ninth embodiment of the present invention. Compiler device It is a block diagram which shows the structure of these.
[Explanation of symbols]
10 Loop optimization section
11 Loop detection means
12 Branch detection means
13 Unroll stage number determining means
14 Loop unrolling means
15 Unnecessary code deletion means
21, 22 Intermediate text
100 recording media
Claims (13)
初期値が1で増分値が1のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報中の上記の除数と当該ループの繰り返し数との最大公約数の値に決定するアンロール段数決定手段と、
前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index having an initial value of 1 and an increment value of 1;
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
Unroll stage number for determining the unroll stage number of the loop including the conditional branch code detected by the branch detection means as the value of the greatest common divisor between the divisor in the information recorded by the branch detection means and the repetition number of the loop. A determination means;
Information indicating the number of stages in which each code is unrolled in the process of unrolling the loop with the number of unroll stages determined by the unroll stage number determining means and expanding each code in the unrolling From the information recorded by the branch detector, it is determined whether the condition of the conditional branch code detected by the branch detector is “true / false” or “true” or “false” And a loop unrolling means for changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code,
A compiler apparatus comprising: unnecessary code deletion means for deleting code that is no longer necessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling means.
初期値が変数で増分値が1のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報中の上記の除数の値に決定するアンロール段数決定手段と、
アンロール対象外コード群をアンロール対象のコード群の前段に生成した上で、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index whose initial value is a variable and whose increment value is 1,
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
Unroll stage number determination means for determining the unroll stage number of the loop including the conditional branch code detected by the branch detection means as the value of the divisor in the information recorded by the branch detection means;
In the process of unrolling the unrolled code group before the unrolled code group, unrolling the loop with the unrolled stage number determined by the unrolled stage number determining means, and developing each code in the unrolling The condition of the conditional branch code detected by the branch detection means is determined to be “true / false” from the information indicating the number of stages in which each code is expanded and the information recorded by the branch detection means. Loop unrolling means for determining whether or not to become true or false and changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code ,
A compiler apparatus comprising: unnecessary code deletion means for deleting code that is no longer necessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling means.
初期値が1で増分値が定数のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報に基づいて「アンロール処理後の増分値がアンロール処理前の増分値と上記の除数との最小公倍数になる」という要件を満たす値をアンロール処理前の増分値で割った値となるように決定するアンロール段数決定手段と、
前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index having an initial value of 1 and an increment value of a constant;
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
Based on the information recorded by the branch detection unit, the number of unroll stages of the loop including the conditional branch code detected by the branch detection unit is calculated as follows: "Increment value after unroll processing is the increment value before unroll processing and the above divisor. An unroll stage number determining means for determining a value that satisfies the requirement of `` to be the least common multiple '' by dividing the value by the incremental value before the unroll process ;
Information indicating the number of stages in which each code is unrolled in the process of unrolling the loop with the number of unroll stages determined by the unroll stage number determining means and expanding each code in the unrolling From the information recorded by the branch detector, it is determined whether the condition of the conditional branch code detected by the branch detector is “true / false” or “true” or “false” And a loop unrolling means for changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code,
A compiler apparatus comprising: unnecessary code deletion means for deleting code that is no longer necessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling means.
初期値が1で増分値が1のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報中の上記の除数と当該ループの繰り返し数との最大公約数よりも小さな値であり当該ループの繰り返し数の約数である値に決定するアンロール段数決定手段と、
前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index having an initial value of 1 and an increment value of 1;
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
The unrolled stage number of the loop including the conditional branch code detected by the branch detection unit is a value smaller than the greatest common divisor of the divisor and the loop repetition number in the information recorded by the branch detection unit, and Unroll stage number determining means for determining a value that is a divisor of the number of loop iterations;
Information indicating the number of stages in which each code is unrolled in the process of unrolling the loop with the number of unroll stages determined by the unroll stage number determining means and expanding each code in the unrolling From the information recorded by the branch detector, it is determined whether the condition of the conditional branch code detected by the branch detector is “true / false” or “true” or “false” And a loop unrolling means for changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code,
A compiler apparatus comprising: unnecessary code deletion means for deleting code that is no longer necessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling means.
初期値が変数で増分値が定数のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報に基づいて「アンロール処理後の増分値がアンロール処理前の増分値と上記の除数との最小公倍数になる」という要件を満たす値に決定するアンロール段数決定手段と、
アンロール対象外コード群をアンロール対象のコード群の前段に生成した上で、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index whose initial value is a variable and whose increment value is a constant;
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
Based on the information unrolling number of loops have been recorded in the branch detection means including conditional branch code the detected by the branch detection unit "increment after unrolling process before unrolling processing increment and between the divisor An unroll stage number determining means for determining a value satisfying the requirement of “the least common multiple”;
In the process of unrolling the unrolled code group before the unrolled code group, unrolling the loop with the unrolled stage number determined by the unrolled stage number determining means, and developing each code in the unrolling The condition of the conditional branch code detected by the branch detection means is determined to be “true / false” from the information indicating the number of stages in which each code is expanded and the information recorded by the branch detection means. Loop unrolling means for determining whether or not to become true or false and changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code ,
A compiler apparatus comprising: unnecessary code deletion means for deleting code that is no longer necessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling means.
初期値が変数で増分値が1のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報中の上記の除数よりも小さな値であり当該ループの繰り返し数の約数である値に決定するアンロール段数決定手段と、
アンロール対象外コード群をアンロール対象のコード群の前段に生成した上で、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index whose initial value is a variable and whose increment value is 1,
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
The number of unroll stages of the loop including the conditional branch code detected by the branch detection means is a value smaller than the divisor in the information recorded by the branch detection means and a divisor of the number of repetitions of the loop. Unrolling stage number determining means for determining;
In the process of unrolling the unrolled code group before the unrolled code group, unrolling the loop with the unrolled stage number determined by the unrolled stage number determining means, and developing each code in the unrolling The condition of the conditional branch code detected by the branch detection means is determined to be “true / false” from the information indicating the number of stages in which each code is expanded and the information recorded by the branch detection means. Loop unrolling means for determining whether or not to become true or false and changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code ,
A compiler apparatus comprising: an unnecessary code deleting unit that deletes a code that has become unnecessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling unit.
初期値が1で増分値が定数のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報に基づいて「アンロール処理後の増分値がアンロール処理前の増分値と上記の除数との最小公倍数になる」という要件を満たす値と当該ループの繰り返し数との最大公約数よりも小さな値であり当該ループの繰り返し数の約数である値に決定するアンロール段数決定手段と、
前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index having an initial value of 1 and an increment value of a constant;
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
Based on the information unrolling number of loops have been recorded in the branch detection means including conditional branch code the detected by the branch detection unit "increment after unrolling process before unrolling processing increment and between the divisor An unroll stage number determining means that determines a value that is smaller than the greatest common divisor of a value that satisfies the requirement of `` being the least common multiple '' and the number of iterations of the loop and is a divisor of the number of iterations of the loop;
Information indicating the number of stages in which each code is unrolled in the process of unrolling the loop with the number of unroll stages determined by the unroll stage number determining means and expanding each code in the unrolling From the information recorded by the branch detector, it is determined whether the condition of the conditional branch code detected by the branch detector is “true / false” or “true” or “false” And a loop unrolling means for changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code,
A compiler apparatus comprising: unnecessary code deletion means for deleting code that is no longer necessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling means.
初期値が変数で増分値が定数のインデックスを含むループの検出を行うループ検出手段と、
前記ループ検出手段で検出されたループ内に存在する条件分岐コードを検出し、「条件が剰余の結果と定数との比較であり、当該剰余を算出するための除算の被除数が当該ループのインデックスであり、当該除算の除数が正整数の定数である」という要件を満たす条件分岐コードを検出し、当該条件分岐コードに関する情報を記録する分岐検出手段と、
前記分岐検出手段で検出された条件分岐コードを含むループのアンロール段数を前記分岐検出手段で記録された情報に基づいて「アンロール処理後の増分値がアンロール処理前の増分値と上記の除数との最小公倍数になる」という要件を満たす値よりも小さな値であり当該ループの繰り返し数の約数である値に決定するアンロール段数決定手段と、
アンロール対象外コード群をアンロール対象のコード群の前段に生成した上で、前記アンロール段数決定手段で決定されたアンロール段数で当該ループのアンローリングを行い、当該アンローリングにおける各コードを展開する過程において当該各コードが何段目に展開されたコードであるかを示す情報と前記分岐検出手段で記録された情報とから前記分岐検出手段で検出された条件分岐コードの条件について「必ず真/偽になるか否か」と「真および偽のいずれになるか」とを判断し、その判断に基づいて条件が必ず真/偽になる条件分岐コードを無条件分岐コードに変更するループアンローリング手段と、
前記ループアンローリング手段による条件分岐コードから無条件分岐コードへの変更に起因して不要となったコードを削除する不要コード削除手段と
を有することを特徴とするコンパイラ装置。A compiler device that interprets a source program, generates intermediate text, performs optimization, and generates an object program , wherein the optimization is optimization based on the deletion of conditional branches in a loop , and the compiler device
Loop detection means for detecting a loop including an index whose initial value is a variable and whose increment value is a constant;
The conditional branch code present in the loop detected by the loop detection means is detected, and “the condition is a comparison between the result of the remainder and a constant, and the dividend of the division for calculating the remainder is the index of the loop. Branch detecting means for detecting a conditional branch code that satisfies the requirement that `` the divisor of the division is a positive integer constant '' and recording information on the conditional branch code;
Based on the information unrolling number of loops have been recorded in the branch detection means including conditional branch code the detected by the branch detection unit "increment after unrolling process before unrolling processing increment and between the divisor An unroll stage number determining means that determines a value that is smaller than a value that satisfies the requirement of `` being the least common multiple '' and that is a divisor of the number of iterations of the loop;
In the process of unrolling the unrolled code group before the unrolled code group, unrolling the loop with the unrolled stage number determined by the unrolled stage number determining means, and developing each code in the unrolling The condition of the conditional branch code detected by the branch detection means is determined to be “true / false” from the information indicating the number of stages in which each code is expanded and the information recorded by the branch detection means. Loop unrolling means for determining whether or not to become true or false and changing a conditional branch code whose condition is always true / false based on the determination to an unconditional branch code ,
A compiler apparatus comprising: unnecessary code deletion means for deleting code that is no longer necessary due to a change from a conditional branch code to an unconditional branch code by the loop unrolling means.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP32419799A JP3613454B2 (en) | 1999-11-15 | 1999-11-15 | Compiler device and computer-readable recording medium storing compiler |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP32419799A JP3613454B2 (en) | 1999-11-15 | 1999-11-15 | Compiler device and computer-readable recording medium storing compiler |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001142716A JP2001142716A (en) | 2001-05-25 |
JP3613454B2 true JP3613454B2 (en) | 2005-01-26 |
Family
ID=18163159
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP32419799A Expired - Fee Related JP3613454B2 (en) | 1999-11-15 | 1999-11-15 | Compiler device and computer-readable recording medium storing compiler |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3613454B2 (en) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1527396A4 (en) * | 2002-05-28 | 2008-03-12 | Droplet Technology Inc | Systems and methods for pile-processing parallel-processors |
-
1999
- 1999-11-15 JP JP32419799A patent/JP3613454B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2001142716A (en) | 2001-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
USRE45199E1 (en) | Compiler apparatus | |
US5537620A (en) | Redundant load elimination on optimizing compilers | |
JP3327818B2 (en) | Program conversion device and recording medium | |
JPH10228382A (en) | Compiling system | |
JPH02205929A (en) | Compiling system | |
JPH06103463B2 (en) | Code generation method | |
JP5966509B2 (en) | Program, code generation method, and information processing apparatus | |
US20100199269A1 (en) | Program optimization device and program optimization method | |
CA2321018A1 (en) | Optimizing compilation by forward store movement | |
JPH10333906A (en) | Branch predication device | |
JPH10293692A (en) | Data prefetch method for multiple loop, processor and program generating method | |
JP3477137B2 (en) | Computer-readable recording medium recording optimization device and optimization program | |
EP2771788B1 (en) | Methods and apparatuses for computing checksums for effective caching in continuous distributed builds | |
US8959309B2 (en) | Skip list generation | |
JP3613454B2 (en) | Compiler device and computer-readable recording medium storing compiler | |
US10108405B2 (en) | Compiling apparatus and compiling method | |
JP4184900B2 (en) | Compiling processing program for performing statistical processing of variables, recording medium thereof, processing method thereof, and processing apparatus thereof | |
US20150212804A1 (en) | Loop distribution detection program and loop distribution detection method | |
JP4719415B2 (en) | Information processing system and code generation method | |
US6049669A (en) | Exploiting case correlation to increase performance of programs with branch/switch instructions | |
JP2018124877A (en) | Code generating device, code generating method, and code generating program | |
WO2001013223A1 (en) | Method and apparatus for operating virtual computer | |
JP2019185486A (en) | Code conversion device, code conversion method, and code conversion program | |
JP2014099108A (en) | Execution time calculating device, execution time calculating method, and program | |
US5437035A (en) | Method and apparatus for compiling a program incending a do-statement |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040526 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040726 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041008 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041021 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |