JP2002287980A - 述語付加による冗長性削除機能を備えたコンパイラ - Google Patents

述語付加による冗長性削除機能を備えたコンパイラ

Info

Publication number
JP2002287980A
JP2002287980A JP2001084019A JP2001084019A JP2002287980A JP 2002287980 A JP2002287980 A JP 2002287980A JP 2001084019 A JP2001084019 A JP 2001084019A JP 2001084019 A JP2001084019 A JP 2001084019A JP 2002287980 A JP2002287980 A JP 2002287980A
Authority
JP
Japan
Prior art keywords
predicate
instruction
redundancy
logical expression
analysis
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2001084019A
Other languages
English (en)
Inventor
Yoji Nakatani
洋司 中谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2001084019A priority Critical patent/JP2002287980A/ja
Publication of JP2002287980A publication Critical patent/JP2002287980A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】述語付き命令では、述語の値によって無用とな
る命令が存在する。このような述語の値による冗長性で
は、命令は述語の値によっては無用とならないため、従
来技術で削除できなかった。しかし、この冗長性を取り
除くことで、無用な命令が実行されない実行効率のよい
オブジェクトプログラムが生成できる。 【解決手段】本発明では、コンパイラに述語冗長性解析
処理と述語付加処理を備える。述語冗長性解析処理は、
述語の値による命令の冗長性の検出と、冗長となる条件
を示す述語論理式を求める。述語付加処理は、冗長とな
る条件に合った述語を検索し、冗長となる命令に述語を
付加する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータシス
テムにおけるプログラミング言語コンパイラに関するも
ので、特に、述語付き命令を備えたアーキテクチャにお
いて、命令の冗長性を解析し、命令に述語を付加するこ
とによって、コンパイラの作成するオブジェクトプログ
ラムをより実行効率のよいものとする最適化処理に関す
るものである。
【0002】
【従来の技術】「コンパイラの構成と最適化」(中田育
男著、朝倉書店、1999年)で述べられている通り、
コンパイラにおける最適化処理の1つに、無用命令の削
除がある。無用命令の削除とは、命令の存在が命令列の
実行に対して影響を与えない命令を、無用である命令と
して削除する命令レベルの最適化処理である。また実行
結果に影響を与えない無用な命令が命令列に存在するこ
とを命令の冗長性が存在するという。
【0003】述語付き命令についても上記の文献で述べ
られている。述語付き命令とは、命令に対して真または
偽の値をとる述語が付加された命令である。実行時に述
語の値が真である時のみ命令が実行される。命令に付加
される述語は、述語レジスタの番号によって示される。
述語レジスタは、条件判断を行う比較命令によって設定
されるレジスタ群である。各命令には述語として述語レ
ジスタの番号を示し、述語の値として、番号の指定され
た述語レジスタの値を用いる。
【0004】
【発明が解決しようとする課題】述語付き命令では、実
行時の述語の値により実行される命令が変化する。この
ため、述語がある値の時に無用であっても他の値の時に
は必要となる命令が存在する。このような命令は、述語
がある値の時は無用命令であるので、冗長性が存在す
る。しかし、全ての場合に無用命令とならないので、削
除することはできない。そのため、従来技術ではこのよ
うな述語の値による冗長性を取り除くことができなかっ
た。このような述語の値による冗長性を取り除くことに
より、実行時の述語の値によって無用である命令を実行
しないオブジェクトプログラムを作成することができ、
オブジェクトプログラムの実行効率を上げることが可能
となる。
【0005】
【課題を解決するための手段】上記の目的を達成するた
め、本発明では、コンパイラに述語冗長性解析処理と述
語付加処理を備える。述語冗長性解析処理は、プログラ
ムより生成された中間語を解析する解析処理部が作成す
るデータ依存関係、制御依存関係、述語間関係等の解析
情報を使用し、述語の値による冗長性の検出と、冗長と
なる述語の条件である述語論理式を求める。述語付加処
理は、述語冗長性解析処理により検出された冗長命令に
対して、述語論理式と述語間関係を使用し、冗長となる
条件に合った述語を検索し、述語が存在する場合に、冗
長となる命令に対して述語を付加する。
【0006】
【発明の実施の形態】本発明の実施例であるコンパイラ
の構成を図1に示す。コンパイラ110は、フロント処
理部120、解析処理部140、最適化処理部130、
コード生成部150から構成される。フロント処理部1
20は、ソースプログラム111を読み込み、構文解析
を行って中間語113を作成する。中間語113は、ソ
ースプログラム111を解析し、コンパイラ110で扱
えるようにしたもので、オブジェクトプログラム112
作成時に目的のコンピュータシステム上で実行可能な命
令に置き換え可能な命令の列で構成される。作成された
中間語113は最適化処理部130に渡される。最適化
処理部130は、中間語113を解析処理部140に渡
して解析情報114を得る。そして、解析情報114を
用いて中間語113をより実行効率のよい中間語113
に変換する最適化処理を行う。最適化処理部130で変
換された中間語113はコード生成部150に渡され、
中間語113をコンピュータシステム上で実行可能なオ
ブジェクトプログラム112に変換する。最適化処理部
130は、複数の最適化フェーズより構成される。各最
適化フェーズは、順に解析情報114を利用して中間語
113に対して最適化処理を実施し中間語113を次の
最適化フェーズに渡す。本発明の実施形態である述語付
加冗長性削除処理131は、最適化フェーズの1つであ
る。述語付加冗長性削除処理131は、述語冗長性解析
処理132と述語付加処理133の2つの処理で構成さ
れる。解析処理部140は、中間語113の命令間の関
係を解析し、解析情報114を作成する。解析処理部1
40は、必要に応じて最適化処理部130から起動さ
れ、中間語113を再解析し、解析情報114を更新す
る。
【0007】解析処理部140の作成する解析情報11
4を図2に示す。解析情報114は、データ依存関係2
01、制御依存関係202、生存情報203、メモリ位
置情報204および述語関係情報205から成る。デー
タ依存関係201は、中間語113に記述された各レジ
スタ、またはメモリ位置の定義と使用についての依存関
係を表す情報である。制御依存関係202は、プログラ
ムの制御の流れについての関係を表す情報である。生存
情報203は、中間語113に記述された各レジスタに
ついて、解析処理部140で解析を行った中間語113
の範囲である解析範囲の外で生存しているかどうかを示
す情報である。生存しているとは、解析範囲外で、解析
範囲内で行われた定義の値が使用される可能性があるこ
とを示す。メモリ位置情報204は、各メモリアクセス
命令でアクセスするメモリ位置の位置関係を表す情報で
ある。述語関係情報205は、命令に付加される述語間
に存在する論理的関係を表した情報である。
【0008】本発明の最適化処理である述語付加冗長性
削除処理131では、まず述語冗長性解析処理132が
起動される。そして、述語冗長性解析処理132が冗長
となる条件を表す述語論理式134を作成し、述語付加
処理133を起動して冗長性を削除する。
【0009】述語冗長性解析処理132のフローチャー
トを図3に示す。述語冗長性解析処理132は、中間語
113の命令を先頭から順にたどり、処理301で冗長
性削除の対象となる候補命令を選択する。候補命令に
は、図5の命令の種類欄510に示すように、レジスタ
定義命令511、メモリ読み出し命令512、メモリ書
き込み命令513の3種類の命令がある。処理303で
は、選択した候補命令について、その命令の種類欄51
0に応じて図5に示す冗長命令となる必要条件520を
調べる。冗長命令となる必要条件520は、命令間のデ
ータ依存関係201と制御依存関係202に関する条件
である。この条件は、命令に付加された述語の関係を考
慮することなく求めることが可能であるため、従来の述
語を用いないアーキテクチャで行っていたのと同様の解
析により調べることが可能である。
【0010】候補命令がレジスタ定義命令511である
場合、候補命令が冗長である必要条件520は2つ存在
する。1つの条件521は、レジスタ定義の生存区間が
解析範囲内であるか、候補命令以降の全制御パスに候補
命令と同一のレジスタに対する定義命令が存在すること
である。生存区間が解析範囲内であるかは、解析情報1
14の生存情報203により得ることができる。全制御
パスに定義命令が存在するかは、制御依存関係202を
用いて制御パスを辿りながらデータ依存関係201を用
いて同一レジスタに対する定義命令を探すことで調べる
ことができる。もう1つの条件522は、候補命令の定
義レジスタに対する全使用命令について、使用命令まで
の全制御パス上に同一レジスタに対する定義命令が存在
することである。定義命令に対する使用命令はデータ依
存関係201により得ることができる。この各使用命令
までの全パスについて同様に制御依存関係202を使用
してパスを辿りながらデータ依存関係201を用いて定
義命令を探すことでこの条件を調べることができる。
【0011】候補命令がメモリ読み出し命令512であ
る場合、候補命令が冗長である必要条件520は、候補
命令を前方支配する制御位置に同一メモリ位置からの読
み出し命令が存在すること(523)である。前方支配
する命令とは、ある命令が実行される場合は、それ以前
に必ず実行される関係にある命令のことをいう。前方支
配する命令が存在するかは制御依存関係202と述語関
係情報205から得られる。しかし、この場合は述語の
満たすべき関係は後の述語論理式134に記述されるた
め、制御位置のみが前方支配となる条件を満たしていれ
ばよく、制御依存関係202のみから得られる。また、
同一メモリ位置からの読み出し命令の存在は、メモリ位
置情報204により調べることができる。
【0012】候補命令がメモリ書き込み命令513であ
る場合、候補命令が冗長である必要条件520は、候補
命令以降の全制御パスに同一メモリ位置への書き込み命
令が存在すること(524)である。この条件も制御依
存関係202から制御パスを辿りながら、メモリ位置情
報204により同一メモリ位置への書き込み命令を探す
ことで調べることができる。
【0013】以上のように、図5に示される各候補命令
の種類510毎の冗長命令となる必要条件520は、解
析情報114を利用して調べることができる。冗長命令
となる必要条件520を1つでも満たさない場合、処理
306で次の命令に処理を移し、同様の処理を繰り返
す。冗長命令となる必要条件520を全て満たした場
合、処理304で述語関係情報205から冗長命令とし
て満たすべき条件620を調べ、述語論理式作成方法6
30に基づいて、冗長となる述語論理式134を作成す
る。
【0014】各候補命令の種類510に対する冗長命令
として満たすべき条件620と、それぞれの条件を満た
す述語論理式作成方法630を図6に示す。各満たすべ
き条件620について、データ依存関係201、制御依
存関係202を用いて条件に合う命令を探し、その命令
の述語について論理演算を行うことで述語論理式134
を作成する。探した命令に述語が付加されていない場合
は、その命令の述語は常に真であるとして処理をする。
また、命令の実行論理式は、その命令の述語とその命令
までのパスの実行条件の論理積で表される。パスの実行
条件は、制御依存関係202によりその命令までの制御
パスを辿り、パス上の各分岐命令の述語について、その
パスに沿って制御が分岐する方向に述語または述語の否
定の論理積を取ることで得ることができる。
【0015】処理304で、述語論理式134作成の過
程で、作成する論理式に候補命令の制御位置で未定義で
ある、または、候補命令の制御位置と定義位置が異なる
ため値の異なる可能性のある述語が現れた場合、述語論
理式134の作成を中断し、処理306で次の命令の処
理に移る。
【0016】候補命令が冗長であるためには、命令の種
類510毎の満たすべき条件欄620の条件をすべて満
たす必要がある。そのため、述語論理式作成方法630
によって作成された論理式について全ての条件分の論理
積をとった論理式が求める冗長となる述語論理式134
である。
【0017】処理305では、作成した述語論理式13
4について、述語付加処理133を起動し、冗長性の削
除を試みる。述語冗長性解析処理132は、上記の処理
を中間語113のすべての命令について行い、処理30
2で冗長性削除の候補命令がなくなれば処理を終了す
る。
【0018】レジスタ定義命令511について、述語論
理式作成方法630の例を、図7に示す。図7で“r1
=...”と記したものは、レジスタr1に対する定義命
令を表す。“...=r1”と記したものはr1の使用命
令であることを表す。また、(if p1)と記したも
のは、命令に“p1”の述語が付加されていることを意
味する。711から716はそれぞれ中間語113の命
令列の基本ブロックを表す。基本ブロックとは、命令列
中に分岐や合流の制御構造のない命令列である。中間語
113の基本ブロックを制御依存関係202に基づいて
グラフで表したものが制御依存グラフである。制御依存
グラフでは、ノードは基本ブロックを表し、ノード間の
エッジは制御の流れを表す。エッジに示された記号は、
その方向に制御が流れる場合の述語を示す。述語の前に
記号!を記したものは、その述語の否定を表す。
【0019】レジスタ定義命令511の場合、述語論理
式作成方法630は、631、632の2つある。それ
ぞれの条件についての作成例を701、702に示す。
作成例701では、レジスタ定義の生存区間が解析範囲
内であるか不明であるとする。
【0020】作成例701では、まず制御パス毎に、パ
ス上にあるレジスタ定義命令の実行論理式の論理和を求
める。制御パスは、制御依存グラフから分かる通り、3
つ存在する。そのうち、基本ブロック711→712→
716を通るパスでは、716に述語がp5であるレジ
スタ定義命令が存在する。この命令までのパスの実行条
件は、p1であるので、実行論理式は、p1∩p5とな
る。このようにして、作成例701に示した通り、全パ
ス分の実行論理式を求め、その論理和をとると、論理式
はp5となり、これが述語論理式作成方法631の論理
式である。
【0021】述語論理式作成方法632の作成例を70
2に示す。使用命令は基本ブロック715に存在し、そ
の制御パスには基本ブロック713にレジスタ定義命令
が存在する。これらの命令の実行論理式を求め、条件に
合わせて論理演算を行うと、作成例702に示した通
り、述語論理式作成方法632の論理式は、(p1∪p
2∪!p4∪(!p1∩!p2∩p3))となる。求め
る述語論理式134は、作成例701および702の論
理積であり、703に示した通り、(p5∩p1∪p2
∪!p4∪(!p1∩!p2∩p3)))となる。
【0022】メモリ読み出し命令512について、述語
論理式作成方法630の例を、図8に示す。述語論理式
作成方法633、634、635の作成例をそれぞれ8
01、802、803に示す。求める述語論理式134
は、これら作成例で作成した論理式の論理積であり、述
語論理式804となる。メモリ書き込み命令513につ
いて、述語論理式作成方法630の例を、図9に示す。
述語論理式作成方法636、637の作成例をそれぞれ
901、902に示す。求める述語論理式134は、こ
れら作成例で作成した論理式の論理積であり、述語論理
式903となる。
【0023】述語付加処理133のフローチャートを図
4に示す。述語付加処理133は、述語冗長性解析処理
132から起動され、述語冗長性解析処理132が作成
した述語論理式134を入力とする。述語関係情報20
5を使用し、述語間の論理関係から述語論理式134を
調べる。処理401において述語論理式134が常に真
となる場合、候補命令は常に冗長であることを意味す
る。この場合、処理402で候補命令を無用命令として
削除する。処理403で述語論理式134が常に偽であ
る場合、候補命令に冗長性が存在しないことを意味し、
述語付加処理133を終了し、制御を述語冗長性解析処
理132に返す。それ以外の場合、処理404で述語論
理式134の否定を包含する述語が定義されているか調
べる。述語論理式134の否定を包含する述語が存在す
る場合、処理405でその述語を候補命令に付加するこ
とにより冗長性を削除する。
【0024】述語を付加することにより、冗長性を削除
した場合、それにより命令列のつじつまが合わなくなる
副作用が発生する場合がある。この場合は、処理406
で冗長性削除のために付加した述語の否定を述語とする
補助命令を挿入することにより副作用を補う。補助命令
が必要となるのは、冗長性を削除した命令がメモリの読
み出し命令であり、前方支配する読み出し命令と冗長性
の削除される読み出し命令とで読み出しにより設定され
るレジスタ番号が異なる場合である。この場合、メモリ
の読み出しは冗長であるが、冗長性の削除される読み出
し命令で設定されるレジスタに値を設定しなければなら
ない。このために処理406で、補助命令として、メモ
リ読み出し命令512に付加した述語の否定を述語と
し、前方支配する読み出し命令で設定するレジスタから
冗長性の削除される読み出し命令で設定されるレジスタ
に値をコピーするレジスタコピー命令を作成し、メモリ
読み出し命令512の次に実行される位置に挿入する。
【0025】述語付加により中間語113を書き換えた
場合、解析処理部140が作成した解析情報114を更
新する必要がある。そのため、処理407で解析処理部
140を起動して再解析を行い、解析情報114を更新
する。その後述語付加処理133は終了し、制御を述語
冗長性解析処理132に渡す。
【0026】
【発明の効果】本発明によれば、述語付き命令を備えた
アーキテクチャにおけるコンパイラで、命令に付加され
た述語間の関係を解析し、命令に新たに述語を付加する
ことで、命令列に存在する述語の値による冗長性を取り
除くことが可能となる。述語の値による冗長性を取り除
くことにより、コンパイラはより実行効率のよいオブジ
ェクトプログラムを生成可能となる。
【図面の簡単な説明】
【図1】本発明の一実施例であるコンパイラの構造を示
した図。
【図2】本実施例において、冗長性検出のために使用す
る中間語の解析情報を示した図。
【図3】本実施例において、述語付加によって削除可能
な冗長性を検出するために行う述語冗長性解析処理のフ
ローチャートを表した図。
【図4】本実施例において、述語を付加することで冗長
性を削除する処理である述語付加処理のフローチャート
を表した図。
【図5】本実施例において、述語冗長性解析処理で、冗
長性削除の候補とする候補命令の種類と、冗長性削除の
ために候補命令が満たすべき必要条件を、各候補命令の
種類毎に示した図。
【図6】本実施例において、述語冗長性解析処理で、選
択された候補命令が冗長であるために満たすべき条件
と、その条件を満たす述語論理式を作成する方法につい
て、候補命令の種類毎に示した図。
【図7】本実施例において、レジスタ定義命令に関して
述語論理式作成例を示した図。
【図8】本実施例において、メモリ読み出し命令に関し
て述語論理式作成例を示した図。
【図9】本実施例において、メモリ書き込み命令に関し
て述語論理式作成例を示した図。
【符号の説明】
110…コンパイラ、130…最適化処理部、131…
述語付加冗長性削除処理、132…述語冗長性解析処
理、133…述語付加処理、134…述語論理式。

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 述語付き命令を備えたアーキテクチャに
    おけるコンパイラで、述語による命令の冗長性を検出す
    る述語冗長性解析処理と、命令に述語を付加する述語付
    加処理を備えたコンパイラ。
  2. 【請求項2】 請求項1記載のコンパイラで、命令に述
    語を付加することによって命令の述語による冗長性を削
    除することを特徴とするコンパイラ。
  3. 【請求項3】 請求項1記載のコンパイラを格納した記
    憶媒体。
JP2001084019A 2001-03-23 2001-03-23 述語付加による冗長性削除機能を備えたコンパイラ Pending JP2002287980A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001084019A JP2002287980A (ja) 2001-03-23 2001-03-23 述語付加による冗長性削除機能を備えたコンパイラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001084019A JP2002287980A (ja) 2001-03-23 2001-03-23 述語付加による冗長性削除機能を備えたコンパイラ

Publications (1)

Publication Number Publication Date
JP2002287980A true JP2002287980A (ja) 2002-10-04

Family

ID=18939751

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001084019A Pending JP2002287980A (ja) 2001-03-23 2001-03-23 述語付加による冗長性削除機能を備えたコンパイラ

Country Status (1)

Country Link
JP (1) JP2002287980A (ja)

Similar Documents

Publication Publication Date Title
US6954747B1 (en) Methods for comparing versions of a program
Göde et al. Studying clone evolution using incremental clone detection
EP1618470B1 (en) Method and apparatus for recovering data values in dynamic runtime systems
JPH07234790A (ja) プログラム変換処理装置およびプログラム変換処理方法
JP4365162B2 (ja) 構造化文書のデータを検索する装置および方法
Simpson Value-driven redundancy elimination
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JPH02217926A (ja) コード生成方法
JPH10228382A (ja) コンパイル方式
US20110302394A1 (en) System and method for processing regular expressions using simd and parallel streams
JP5244421B2 (ja) 情報処理装置およびプログラム分割方法
Li et al. Incremental clone detection and elimination for erlang programs
US20140317452A1 (en) Error detecting apparatus, program and method
US6077314A (en) Method of, system for, and computer program product for providing improved code motion and code redundancy removal using extended global value numbering
US6035124A (en) Method of, system for, and computer program product for providing extended global value numbering
JP4254954B2 (ja) データ処理装置
JP2002287980A (ja) 述語付加による冗長性削除機能を備えたコンパイラ
US8589435B2 (en) Method, system and program for simplifying data flow in a statement with sequenced subexpressions
Pollock et al. Incremental compilation of optimized code
JPH0522272B2 (ja)
JP3338752B2 (ja) 更新可能表の明示指定によるデッドロック削減方式
Kwon Extending functional languages with high-level exception handling
JP2007133536A (ja) 故障検出プログラム作成装置、プリプロセッサ、故障検出プログラム作成方法、及びプログラム
JP5169322B2 (ja) 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法
JPH04252336A (ja) プログラム最適化処理装置