JPH10116197A - プログラム解析方法 - Google Patents

プログラム解析方法

Info

Publication number
JPH10116197A
JPH10116197A JP28742396A JP28742396A JPH10116197A JP H10116197 A JPH10116197 A JP H10116197A JP 28742396 A JP28742396 A JP 28742396A JP 28742396 A JP28742396 A JP 28742396A JP H10116197 A JPH10116197 A JP H10116197A
Authority
JP
Japan
Prior art keywords
predicate
definition
added
predicates
analysis method
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
JP28742396A
Other languages
English (en)
Inventor
Keiko Motokawa
敬子 本川
Hiroyasu Nishiyama
博泰 西山
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 JP28742396A priority Critical patent/JPH10116197A/ja
Publication of JPH10116197A publication Critical patent/JPH10116197A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】プレディケートが付加されたコードを含むプロ
グラムに対して、正しいデータフロー解析の結果を得る
ことができ、さらにその解析の精度を高めることができ
るプログラム解析方法を提供する。 【解決手段】到達定義設定ステップは、参照を順に辿
り、使用に対する処理では、到達定義リストの中で使用
と定義に付加されたプレディケートが排他関係にないも
のをその使用の到達定義に加える。定義が現われたとき
に行う到達定義リスト更新処理では、到達定義リスト中
の定義に対して、それ以降に現われた定義の集合に対応
するプレディケート集合が到達定義のプレディケートを
包含する場合にその定義を到達定義リストからはずす。 【効果】プレディケートが付加されたコードを含むプロ
グラムに対して、正しいデータフロー解析の結果を得る
ことができ、さらにその解析の精度を高めることができ
る。その結果、冗長な依存を削減でき、命令スケジュー
リングなどの最適化の効果を高めて、プログラムの実行
性能を向上させることができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラム解析方
法に関し、特に条件付き実行コードのデータフロー解析
方法に関する。
【0002】
【従来の技術】スーパースカラやVLIW(Very Long
Instruction Word)などの命令レベル並列を目的と
するマシンにおいて、高速な実行コードを生成するため
に、コンパイラは命令スケジューリングなどの技法を用
いた最適化を実施する。分岐を越えて大域的な命令スケ
ジューリングを実施するための1つの方法に条件付実行
がある。これはプレディケートと呼ばれる真理値を実行
条件として命令中に保持し、プレディケートが真の場合
だけその命令を実行する機構を備えたアーキテクチャに
よるものである。
【0003】このような条件付実行のコードを生成する
方法は、例えば、マールケ:「イフェクティブ・コンパ
イラ・サポート・フォー・プレディケーティド・エグセ
キューション・ユージング・ザ・ハイパーブロック」、
マイクロ25、1992年、第45頁から第54頁(Sco
tt A. Mahlke: Effective Compiler Support for Predi
cated Execution Using the Hyperblock. Proceedings
of the 25th Annual Internattional Symposium on Mic
roarchitecture, MICRO 25, 1992, pp.45-54)に記載さ
れている。上記論文で述べられている方法によれば、ハ
イパーブロックと呼ばれる領域を選択し、ハイパーブロ
ック内の各基本ブロック内に属する命令を条件付実行命
令に変換することにより、ハイパーブロック内の基本ブ
ロック間の分岐を削除する。
【0004】一般にコンパイラにおいては、多くの最適
化は変数のデータフロー情報を利用する。上述の条件付
実行コードへの変換後にこのような最適化を適用するた
めには、条件付実行コードのデータフロー解析が必要で
ある。データフロー解析に関連する従来技術に関して以
下に記述する。
【0005】第1の従来技術は、上記マールケの論文に
記載されているもので、ハイパーブロック内の命令をス
ケジューリングする際の解析について述べられている。
ハイパーブロック内の命令をスケジューリングする際に
は、プレディケート変数の関係解析が役に立つ。排他に
実行される2つの命令間には依存がないので、2つの命
令は同時に実行できる。2つの命令が排他に実行される
のは、プレディケートが同時に真とならない場合(この
ような場合にプレディケートが排他であると呼ぶことに
する)である。そこで、命令スケジューリングにあたっ
て、プレディケートが排他関係にあるかどうかを解析す
ることが必要となる。本論文の方法では、プレディケー
トの成立条件を得るために、ハイパーブロック内で定義
されるプレディケート変数に対してプレディケート階層
グラフ(PHG)と呼ばれるグラフを生成する。そし
て、2つのプレディケートの条件式の積を計算し、その
結果が0であれば排他と判定する。
【0006】上記の方法ではハイパーブロックと呼ばれ
る非循環な領域を対象としているが、一般にコンパイラ
は、より広い範囲を対象に最適化および必要な情報の解
析を行う。
【0007】第2の従来技術は、従来より用いられてい
る条件付実行コードを含まないプログラムの大域的なデ
ータフロー解析に関するものである。大域的なデータフ
ロー解析では、プログラムの制御フローの情報に基づ
き、変数の流れを解析する。大域的なデータフロー解析
の方法については、例えばエイホ:「コンパイラ:原理
・技法・ツール」、アジソン−ウェズレー社、1986
年(A. V. Aho: Compilers: Principles, Techniques, a
nd Tools. Addison-Wesley, 1986)に記載されている。
このような解析においては、ある基本ブロックが実行さ
れる場合にはその基本ブロック内の各文は必ず実行さ
れ、制御依存は制御フローのエッジにより表現されると
して扱う。
【0008】大域的なデータフロー解析の例として、図
4のソースプログラムに対する変数vの到達定義解析を
考える。図中に示すように、vの各定義をd1、d2、
d3、各使用をu1、u2、u3とする。本プログラム
に対応する中間語の例を図5に示している。解析の結
果、各使用へ到達する定義の集合は、u1:{d1}、
u2:{d2}、u3:{d2,d3}となる。なお、
u1:{d1}は、使用u1へ到達する定義の集合が
{d1}であることを示す。
【0009】
【発明が解決しようとする課題】上記第1の従来技術に
よれば、ハイパーブロック内の命令スケジューリングに
おいて排他命令を検出することができるが、ハイパーブ
ロックを越えたより広い範囲を対象とする最適化に関し
てデータフロー情報を与えることができない。また、プ
レディケートを付加された複数の定義に対して、定義が
キルされるかどうかを解析する手段が提供されていな
い。その結果、本来はキルされているはずの定義との間
に余分な依存が発生し、最適化の妨げになることがあ
る。
【0010】上記第2の従来技術は、プレディケートの
ないコードを大域的に解析するには有効であるが、同じ
方法をプレディケートを付加されたコードに対して適用
すると不正な結果を得る。この点について例を用いて説
明する。図5の中間語に対してプレディケート付きコー
ドへの変換を実施した中間語の例を図6に示す。ループ
本体のコードは、変換前には複数の基本ブロックによっ
て表現され、基本ブロック間のエッジによって制御依存
が表現されていたが、変換後には単一の基本ブロックと
なり、制御依存がエッジで表現されなくなっている。こ
の中間語に対して従来の方法によるデータフロー解析を
適用すると、各使用へ到達する定義の集合は、u1:
{d1}、u2:{d3}、u3:{d3}となり、不
正な結果が得られる。これは基本ブロック内の文はすべ
て同じ条件で実行されると仮定したためである。実際に
は各文はプレディケートで示される条件に基づき実行さ
れるので、基本ブロック内の文はすべて同じ条件で実行
されるという仮定のもとで従来の方法によるデータフロ
ー解析を適用すると、不正な結果となってしまう。
【0011】本発明の目的は、プレディケートが付加さ
れたコードを含むプログラムに対して、正しいデータフ
ロー解析の結果を得ることができ、さらにその解析の精
度を高めることができるプログラム解析方法を提供する
ことにある。
【0012】
【課題を解決するための手段】本発明の目的は、解析対
象の参照に付けられたプレディケートを解析し、プレデ
ィケートの関係を調べるステップによって達成される。
【0013】即ち本発明の請求項1に係るプログラム解
析方法は、実行文に真偽値による実行条件であるプレデ
ィケートをそれぞれ付加することができ、プレディケー
トが真の場合にだけ通常の実行を行い、偽の場合には実
行結果を無効化または命令発行を無効化する制御を行う
コードを対象にデータフロー解析を行うためのプログラ
ム解析方法であって、解析対象の実行文にプレディケー
トが付加されているかを判定するプレディケート判定ス
テップと、2つの定義d1およびd2に対して、定義d
1が定義d2の直前に到達した場合に、定義d1が定義
d2の直後に到達しないかどうか、即ち定義d1が定義
d2でキルされるかどうかを、判定するキル判定ステッ
プとを有し、上記キル判定ステップでは、上記プレディ
ケート判定ステップにより定義d2にプレディケートが
付加されているかどうかを判定し、プレディケートが付
加されている場合には、定義d1が定義d2でキルされ
ないと判定することを特徴とする。
【0014】請求項2に係るプログラム解析方法は、請
求項1のプログラム解析方法であって、前記キル判定ス
テップでは、前記プレディケート判定ステップにより定
義d1と定義d2にプレディケートが付加されているか
どうかを判定し、共にプレディケートが付加されている
場合には、定義d1のプレディケートp1が真の場合に
常に定義d2のプレディケートp2が真であるかどう
か、即ちp1がp2に包含されるかどうかを、判定し、
包含されない場合には定義d1が定義d2でキルされな
いと判定することを特徴とする。
【0015】請求項3に係るプログラム解析方法は、請
求項1のプログラム解析方法であって、前記キル判定ス
テップでは、定義d2に付加されたプレディケートおよ
び定義d1から定義d2へ至るパス上に現われた定義に
付加されたプレディケートの集合を生成し、定義d1の
プレディケートが真となる条件が、上記プレディケート
集合内の各プレディケートが真となる条件の和に包含さ
れるかどうかを判定し、包含されない場合には、定義d
1が定義d2でキルされないと判定することを特徴とす
る。
【0016】また、プレディケートを考慮した大域的な
解析を実施するために、基本ブロック内を解析する局所
属性設定ステップと、基本ブロック間で情報を伝播する
データフロー方程式解法ステップと、データフロー方程
式の結果に基づき基本ブロック内の情報を設定するデー
タフロー情報設定ステップとを設ける。局所属性設定ス
テップおよびデータフロー情報設定ステップは、解析対
象の参照に付けられたプレディケートを解析し、プレデ
ィケートの関係を調べる。
【0017】即ち請求項4に係るプログラム解析方法
は、実行文に真偽値による実行条件であるプレディケー
トをそれぞれ付加することができ、プレディケートが真
の場合にだけ通常の実行を行い、偽の場合には実行結果
を無効化または命令発行を無効化する制御を行うコード
を対象にデータフロー解析を行うためのプログラム解析
方法であって、解析対象のプログラムの各基本ブロック
に対して、基本ブロック内の解析によって得られる情報
を設定する、局所属性設定ステップと、上記局所属性ス
テップで設定された情報を制御フローの上で伝播させる
ことにより、各基本ブロックの入口および出口に対する
情報を求める、データフロー方程式解法ステップとを有
し、上記局所属性設定ステップでは、基本ブロック内に
存在する変数vの各定義に付加されたプレディケートの
集合を生成し、上記プレディケートの集合の成立条件が
常に成立するかどうかを判定し、成立する場合には、基
本ブロックの入口に到達したvの全定義が基本ブロック
出口まで到達できない、即ちvの全定義はキルされると
してキル属性を設定することを特徴とする。
【0018】請求項5に係るプログラム解析方法は、請
求項4のプログラム解析方法において、データフロー方
程式解法ステップで得られた、各基本ブロック入口に到
達する定義集合に基づき、基本ブロック内の参照に到達
定義を設定するステップをさらに有し、上記到達定義を
設定するステップは、到達定義集合内の定義を参照の到
達定義に登録する登録ステップと、到達定義集合を更新
する更新ステップとから成り、上記登録ステップでは、
定義と参照に付加されたプレディケートが同時に真にな
らないと判定した場合には、到達定義にその定義の登録
は行わなず、また上記更新ステップでは、到達定義集合
内の定義に付加されたプレディケートと、その定義以降
に現われた定義に付加されたプレディケートの集合との
包含関係を判定することを特徴とする。
【0019】さらに、定義間のキル関係を解析するため
に、プレディケートの包含関係を解析する。また、複数
の定義によるキルを解析するためには、それらの定義に
付いているプレディケートの集合を生成し、集合内の各
プレディケートの成立条件の和を解析する。
【0020】即ち請求項6に係るプログラム解析方法
は、請求項1〜5のプログラム解析方法において、プレ
ディケートを付加されたプレディケートの定義文に対
し、定義されるプレディケートとその定義文に付加され
たプレディケートの関係を有向エッジで表現したグラフ
を作成するステップと、2つのプレディケート間に上記
エッジによる経路が存在するかどうかを調べるステップ
とをさらに有し、これらのステップによりプレディケー
ト間の包含関係を解析することを特徴とする。
【0021】請求項7に係るプログラム解析方法は、請
求項1〜5のプログラム解析方法において、定義される
プレディケートとその定義文に付加されたプレディケー
トの関係を包含関係エッジと呼ぶ有向エッジで表現し、
プレディケートとそのプレディケートの真偽値を反転す
る否定プレディケートとの関係を補集合関係エッジと呼
ぶエッジで表現したグラフを作成するステップと、一方
のプレディケートと補集合関係エッジで結ばれたプレデ
ィケートと、他方のプレディケートとの間に、上記包含
関係エッジによる経路が存在するかどうかを調べるステ
ップとをさらに有し、これらのステップにより、2つの
プレディケートが同時に真になることがないかどうかを
解析することを特徴とする。
【0022】上記請求項1〜7に記載の解析方法は、コ
ンパイラに適用することにより具現化される。
【0023】
【発明の実施の形態】以下、図面を用いて本発明の実施
の形態について説明する。
【0024】図2は、本発明のプログラム解析方法を適
用したコンパイラが稼働する計算機システムの構成図で
ある。この計算機システムは、CPU201、ディスプ
レイ装置202、キーボード203、主記憶装置20
4、および外部記憶装置205より構成されている。キ
ーボード203により、ユーザからのコンパイラ起動命
令を受け付ける。コンパイラ終了メッセージやエラーメ
ッセージは、ディスプレイ装置202に表示される。外
部記憶装置205には、ソースプログラム206とオブ
ジェクトプログラム207が格納される。主記憶装置2
04には、コンパイラ208、コンパイル過程で必要と
なる中間コード209、およびプレディケートグラフ2
10が格納される。コンパイル処理はCPU201によ
って制御され実行される。
【0025】図3に、図2のシステムで稼動するコンパ
イラ208の処理手順を示す。構文解析301では、ソ
ースプログラム206を入力として字句解析及び構文解
析を行い中間コード209を出力する。データフロー解
析302では、到達定義の解析やライブ変数の解析など
以下のコンパイラの処理に必要なデータフロー情報の収
集を行う。if変換303では、中間コード209を入
力し、プレディケート付きコードへの変換を行う。プレ
ディケートグラフ作成304では、if変換303で生
成されたプレディケート付きコードを解析し、プレディ
ケートの関係を示すプレディケートグラフ210を作成
する。プレディケート付きデータフロー解析305で
は、このグラフ210を利用したデータフロー解析を実
施する。プレディケートグラフ作成304およびプレデ
ィケート付きデータフロー解析305は本発明の特徴と
なる部分であるので、後に詳細に説明する。最適化30
6では、プレディケート付きデータフロー解析305で
得られた情報に基づき、レジスタ割り付けや命令スケジ
ューリングなどの最適化を実施する。コード生成307
では、中間コード209をオブジェクトプログラム20
7に変換し、出力する。
【0026】図5に、コンパイラ208が出力する中間
コード209の例を示す。これは図4のソースプログラ
ムの例に対応している。中間コード209は、構文解析
301によって生成される。図5の中間コードは、基本
ブロックをエッジで結んだグラフで表現されている。こ
のようなグラフは制御フローグラフと呼ばれている。5
01から509はそれぞれ基本ブロックであり、エッジ
は基本ブロック間の遷移を表している。各基本ブロック
は文の集合により構成されている。
【0027】図6に、図5の中間コードに対してif変
換303を実施した結果の一例を示す。if変換303
では、変換の対象領域として、制御フローグラフ上の複
数の基本ブロックから成る非循環な部分を選択する。本
例では、図5の基本ブロックB3(504)、B4(5
05)、B5(507)、B6(506)、B7(50
8)を選択する。if変換後、これらの基本ブロック
は、図6に示すように1つの基本ブロックB3(60
4)となる。この基本ブロックB3(604)におい
て、プレディケートが出現する文について説明する。文
608では、条件式x>0を判定し、その結果の真理値
をプレディケートp1に設定する。文609では、プレ
ディケートp1の値が真の場合にvへの代入を実行す
る。p1の値が偽の場合には代入は実行されない。文6
10では、プレディケート!p1が真、即ちp1が偽の
場合にだけvへの代入が実行される。文611では、プ
レディケートp1が真の場合には条件式y>0の判定結
果の真理値をプレディケートp2に設定する。プレディ
ケートp1が偽の場合には、プレディケートp2に偽を
設定する。文612では、プレディケートp2の値が真
の場合にaへの代入を実行する。
【0028】以下、本発明の特徴であるプレディケート
グラフ作成304およびプレディケート付きデータフロ
ー解析305の処理手順について詳細に説明する。
【0029】ここではプレディケートの定義文は「b=
(条件式) if a」という形(例えば文611)で
各プレディケートについて定義は1箇所にしか現われな
いものとする。「if a」の部分はない場合もある
(例えば文608)。この場合には、「if TRU
E」という、値が常に1のプレディケートが付いている
と考える。
【0030】図7に、プレディケートグラフ作成304
で作成したプレディケートグラフ210の例を示す。本
例は図6の変換結果に対応している。図7において、プ
レディケートグラフの各ノードはプレディケートに対応
する。ノード701は値が1のTRUEプレディケート
を表す。これは、文606などのようにプレディケート
をもたない実行文に対するプレディケートと考える。グ
ラフのエッジは2種類あり、包含関係および補集合関係
を表す。プレディケートの組(a,b)が包含関係にあ
る、またはaがbに含まれるとは、プレディケートaが
真の場合には必ずプレディケートbも真であることを意
味する。このときグラフ上にb→aのエッジを張る。b
をaの包含関係の親と呼ぶ。プレディケートの定義文が
「b=(条件式) if a」という形であるとき、b
が真となるのはaが真の場合に限るからaはbに含まれ
る。図7では、定義文611に対応してp1→p2のエ
ッジ、即ちノード702から704へ包含関係エッジが
張られている。補集合関係のエッジはpと!pの間に張
るエッジである。
【0031】このようなプレディケートグラフを作成し
てプレディケート付きデータフロー解析を行うことによ
りプレディケートの関係が分かれば、その情報は、後に
行う最適化で命令スケジューリングや他の目的に使用で
きる。これにより、プレディケート付きのコードを含む
プログラムに対しても、正しいデータフロー解析の結果
を高精度で得ることができ、その解析結果を用いるレジ
スタ割り付けや命令スケジューリングなどの最適化の効
果が上がる。
【0032】図8に、プレディケートグラフ作成304
の処理手順を示す。
【0033】ステップ801では、TRUEプレディケ
ートを示すノードを作成する。このノードは、プレディ
ケートグラフのルートノードとなる。ステップ802で
は、未処理の文があるかどうかを判定し、なければ処理
を終了する。あればステップ803に進み、次の文を取
り出して処理対象とする。ステップ804では、処理中
の文がプレディケートの定義かどうか、即ち代入文で左
辺がプレディケートであるかどうかを判定する。プレデ
ィケートの定義でなければプレディケートグラフ作成の
処理対象とならないのでステップ802に戻り、次の文
の処理を行う。プレディケートの定義であればステップ
805に進み、その定義文の左辺のプレディケートをp
とする。
【0034】ステップ806で、いま処理対象としてい
る定義文がプレディケート付きかどうかを判定する。プ
レディケート付きならばそのプレディケートをqとし、
ステップ807へ進んで、プレディケートグラフ上のq
のノードを親ノードとする。このときqのノードは既に
作成済みであることが必要で、図8の処理手順ではその
ような順序で文が処理されることを仮定している。文の
処理順序がそのような条件を満たしていない場合には、
qのノードが未作成ならばこの文の処理を中止してqの
定義文の処理後に再び処理対象とすればよい。ステップ
806でプレディケート付きでない場合にはステップ8
08へ進み、TRUEプレディケートのノードを親ノー
ドとする。ステップ809では、プレディケートグラフ
上でpのノードを作成する。ステップ810では、ステ
ップ807または808で定義した親ノードから、pの
ノードへ包含関係エッジを張る。
【0035】ステップ811では、処理対象のプログラ
ムを辿り、!pの使用があるかどうかを調べる。使用が
あればプレディケートグラフにノードを作成する必要が
あるので、ステップ812で!pのノードを作成し、ス
テップ813でpのノードと!pのノードとの間に補集
合関係エッジを張る。ステップ811で!pの使用が無
い場合あるいはステップ813の後は、処理対象のプレ
ディケートの定義文に対する処理が終了したので、ステ
ップ802に戻り、次の文を処理対象として処理を続け
る。
【0036】以上で図8の処理手順の説明を終了する。
本処理手順に従い、図6の中間語に対して図7のプレデ
ィケートグラフを作成する処理について説明する。
【0037】まず、ステップ801でルートノード70
1を作成する。その後、各文を順に調べていくが、文6
01〜607はプレディケートの定義ではないのでステ
ップ805には進まない。文608の処理で、ステップ
804でプレディケートの定義であると判定する。ステ
ップ806ではプレディケート付きでないと判定するの
で、ステップ808、809と進み、p1のノード70
2を作成し、ステップ810でノード701からノード
702への包含関係エッジが張られる。ステップ811
で!p1の使用があるかどうかを調べ、文610に使用
があるのでステップ812に進み、!p1のノード70
3を作成する。ステップ813でノード702とノード
703の間に補集合関係エッジを張る。
【0038】さらに各文の処理を続け、文611の処理
で、ステップ804でプレディケートp2の定義である
と判定する。ステップ806でプレディケートp1付き
であると判定されるので、ステップ807へ進み、p1
のノード702を親ノードとする。そしてステップ80
9でp2のノード704を作成し、ステップ810でp
1のノード702からp2のノード704へ包含関係エ
ッジを張る。残りの文の処理を続け、処理を終了する。
この結果、図7のプレディケートグラフが作成される。
【0039】以上でプレディケートグラフ作成304に
関する説明を終了する。
【0040】次に、プレディケート付きデータフロー解
析305の処理手順について詳細に説明する。ここでは
プレディケート付きデータフロー解析の一例として、到
達定義解析について説明する。他のデータフロー解析の
手法に関しても同様に適用可能である。
【0041】図9に、到達定義解析の処理手順を示す。
【0042】ステップ901では、各基本ブロックBに
対して、局所属性gen(B)、kill(B)を設定
する。gen(B)は当該基本ブロックBにおいて生成
される定義の集合、kill(B)は当該基本ブロック
Bにおいて消滅される定義の集合である。通常の到達定
義解析と異なり、本ステップではプレディケートを考慮
して局所属性を設定する。本ステップの詳細は後述す
る。
【0043】ステップ902では、図中に示したデータ
フロー方程式の解法により、各基本ブロックBに対して
in(B)を求める。本ステップは通常のデータフロー
方程式の解法と同様である。即ち、各基本ブロックBに
対してエッジを辿りながら、各基本ブロックBの入口に
到達する定義の集合であるin(B)と出口に到達する
定義の集合であるout(B)とを順次求めていく。P
RED(B)は、基本ブロックBの直前の基本ブロック
の集合である。in(B)は、基本ブロックBの直前の
基本ブロックPのout(P)の和集合になる。out
(B)は、gen(B)と(in(B)−kill
(B))との和集合になる。
【0044】ステップ903では、各基本ブロックBに
対して、ステップ902で求めたin(B)を基に、基
本ブロックB内の各使用に到達定義を設定する。この
際、プレディケートを考慮した解析を実施する。本ステ
ップの詳細は後述する。
【0045】図10に、ステップ901の詳細な手順を
示す。特に図10は、1つの基本ブロックBへの局所属
性設定の処理手順を示したものである。図10の各ステ
ップについて説明する。
【0046】ステップ1001では定義の集合であるg
en(B)およびkill(B)、並びに、プレディケ
ートの集合psetを空集合に初期化する。
【0047】ステップ1002で、処理対象の基本ブロ
ックBの先頭文を取り出す。ステップ1003では、処
理中の文が変数vの定義文であるかどうかを判定する。
一般に到達定義解析は全変数について同時に実施できる
が、ここでは簡単のため、1つの変数vの解析について
説明している。他の変数の解析も同様に行えばよい。ス
テップ1003でvの定義でない場合にはこの文の処理
を終了し、ステップ1009に進む。vの定義である場
合にはその定義をdとし、ステップ1004に進む。ス
テップ1004では、gen(B)に定義dを追加す
る。ステップ1005では、vの定義文がプレディケー
ト付きであるかどうかを判定する。そうであればステッ
プ1006に進み、そうでない場合にはステップ100
9に進む。
【0048】ステップ1006では、vの定義文に付い
ているプレディケートを集合psetに追加する。ステ
ップ1007では、psetが恒真(psetが恒真と
はpsetの成立条件が常に成立する場合をいう。恒真
かどうかは、pset中の各プレディケートの成立条件
の和が1になるかどうかを調べればよい。)であるかど
うかを判定する。本判定の詳細については後で説明す
る。恒真であれば、ステップ1008に進み、そうでな
い場合にはステップ1009に進む。
【0049】ステップ1008では、kill(B)に
vの全ての定義の集合を設定し、ステップ1009に進
む。vの全ての定義とは、いま処理対象にしているプロ
グラム全体中にあるvの全ての定義のことである。取り
出した文がプレディケート付きでない場合、およびプレ
ディケート付きだがpsetが恒真の場合は、他の全定
義はキルされるものとしてkill(B)に設定すると
いうことである。ステップ1005でプレディケートが
付加されていると判定した場合であってpsetが恒真
で無い場合は、処理対象であるvの定義の直前に到達し
た定義はキルされないことになる。
【0050】ステップ1009では、次の文があるかど
うかを判定し、なければ処理を終了する。あればステッ
プ1010に進み、次の文を取り出し、ステップ100
3に戻って処理を続ける。
【0051】図1は、ステップ903の到達定義設定の
処理手順の詳細を示したものである。特に図1は、1つ
の基本ブロックBに対する到達定義設定の処理手順を示
したものであり、ここでも1つの変数vに着目して説明
する。以下、図1の各ステップについて説明する。
【0052】ステップ101では、deflistをi
n(B)により初期化する。ステップ102では、基本
ブロックBの先頭文を取り出す。ステップ103では、
取り出した文中に変数vの使用があるかどうかを調べ
る。ある場合にはその使用をuseとし、ステップ10
4に進む。ない場合にはステップ109に進む。
【0053】ステップ104からステップ108は、処
理中の使用に対して到達定義を設定する処理である。プ
レディケート付きでないコードからなるプログラムの解
析では、ある定義defが使用useに到達するとその
useとdefとの間に依存があるということになり到
達定義集合に入れる必要があるが、ここではプレディケ
ート付きのものの解析であるので、プレディケートの関
係を考慮して到達定義を設定する必要がある。即ち、u
seとdefの両方にプレディケートが付いておりそれ
らが排他のときは実際には依存が無いということだから
到達定義に入れる必要が無い。ステップ104〜108
はそのような処理で到達定義集合を設定している。
【0054】まずステップ104では、deflist
中に未処理の定義があるかどうかを調べる。ある場合に
はその未処理の定義を1つ取り出してdefとし、ステ
ップ105に進む。ない場合にはステップ109に進
む。ステップ105では、useがプレディケート付き
の使用であるか、即ち処理中の文がプレディケート付き
かどうかを調べる。そうである場合にはそのプレディケ
ートをp1として、ステップ106に進む。そうでない
場合にはステップ108に進む。ステップ106では、
deflist中の定義defがプレディケート付きか
どうかを調べる。そうである場合にはそのプレディケー
トをp2として、ステップ107に進む。そうでない場
合にはステップ108に進む。
【0055】ステップ107では、2つのプレディケー
トp1とp2が排他であるかどうかを調べる。排他であ
るかどうかの判定方法については後で説明する。排他で
あればステップ104に戻り、次の定義を取り出して処
理を続ける。そうでなければステップ108に進む。ス
テップ108では、useの到達定義リストにdefを
追加し、ステップ104に戻って次の定義の処理を続け
る。
【0056】ステップ109では、処理中の文が変数v
の定義文であるかどうかを判定する。そうである場合に
はステップ110に進み、その後ステップ111に進
む。そうでない場合にはステップ111に進む。ステッ
プ110では、到達定義のリストであるdeflist
を更新する。ステップ110に進むのは、変数vの定義
文にdeflistが到達した場合である。この場合、
新しい定義が現れたので今までの定義はキルされること
になり、通常の解析ではdeflistを空集合にす
る。しかし、ここではプレディケート付きのものの解析
であるので、そのプレディケートの関係を見ながらde
flistを更新する必要がある。その処理が図11の
手順である。
【0057】図11に、ステップ110の処理手順の詳
細を示す。以下、図11の各ステップを説明する。
【0058】ステップ1101では、処理対象であるv
の定義をnewdefとする。ステップ1102では、
newdefがプレディケート付きかどうかを判定す
る。プレディケート付きである場合には、そのプレディ
ケートをpとしてステップ1103に進む。そうでない
場合には、ステップ1107へ進む。ステップ1103
では、deflistに未処理の要素があるかどうかを
調べ、あればその1つをdefとしてステップ1104
に進む。なければステップ1108に進む。
【0059】deflistに属する各定義defは、
それぞれプレディケート集合を保持している。各定義の
プレディケート集合は、(自分に付いていたプレディケ
ートではなく)自分より後に現われた定義たちのプレデ
ィケートを集めたものである。ステップ1104では、
defのプレディケート集合にpを加える。このプレデ
ィケート集合は、defよりも後に現われた定義に付く
プレディケートの集合である。ステップ1105では、
ステップ1104で更新したdefのプレディケート集
合が、defのプレディケートを包含するかどうかを判
定する。プレディケート集合とプレディケートの間の包
含関係の判定については後で説明する。包含する場合に
はステップ1106に進み、そうでない場合にはステッ
プ1103に戻る。ステップ1106では、defli
stからdefをはずす。defのプレディケート集合
がdefのプレディケートを包含するなら、defli
stからdefをはずしてよい。これは、defよりも
後に現れた定義のプレディケートを集めたプレディケー
ト集合の方がdefのプレディケートより大きいので、
後から現れた定義のうちのどれかは1回は実行されたと
いうことになり、defはキルされたとして良いからで
ある。ステップ1106の後、ステップ1103に戻
る。
【0060】ステップ1107では、deflistを
空リストにする。ステップ1108では、newdef
をdeflistに追加する。図11の処理では、ステ
ップ1102でnewdefがプレディケート付きであ
る場合であって、ステップ1105でNoに進む場合
は、newdefの直前に到達した定義(deflis
tの要素)はキルされないことになる。
【0061】以上で図11の処理手順の説明を終了し、
図1の処理手順の説明に戻る。
【0062】ステップ111では、基本ブロック内に次
の文があるかどうかを判定する。なければ処理を終了す
る。あればステップ112に進み、次の文を取り出し、
ステップ103に戻り処理を続ける。
【0063】以上で図1の到達定義設定の処理手順の説
明を終える。
【0064】以上で説明した、図10、図1、および図
11の処理手順の中で、プレディケートに関する関係を
判定した。ステップ1007ではプレディケート集合が
恒真かどうかの判定、ステップ107では2つのプレデ
ィケートが排他かどうかの判定、ステップ1105では
プレディケートとプレディケート集合の間の包含関係の
判定を実施する。以下、これらの関係を解析する方法に
ついて説明する。一般にプレディケートの関係を判定す
る方法としては、プレディケートの成立条件式の演算に
よる方法があるが、ここではプレディケートグラフ21
0のエッジを利用した解析方法を述べる。
【0065】まず最初に2つのプレディケートの排他関
係について述べる。2つのプレディケートp1、p2に
対して、「p1が真ならばp2は偽」かつ「p2が真な
らばp1は偽」が常に成り立つ場合にp1とp2とは排
他関係にあるという。条件式による解析の場合、p1の
成立条件とp2の成立条件の共通範囲がない場合、排他
関係にある。
【0066】図12に、排他関係検出の処理手順を示
す。本処理では2つのプレディケートp1とp2が排他
であるかどうかを判定する。判定はプレディケートグラ
フ210を利用する。各ステップについて説明する。
【0067】ステップ1201では、p1とp2が補集
合関係であるかどうかを調べる。プレディケートグラフ
上のp1とp2のノードを見つけ、2つのノード間に補
集合関係エッジが張られているかどうかで判定する。補
集合関係である場合にはステップ1210に進み、排他
関係であると判定して処理を終了する。そうでない場合
にはステップ1202に進む。
【0068】ステップ1202では、p1をpとする。
ステップ1203では、pを包含する親があるか、即ち
グラフ上でpのノードへの包含関係エッジが張られてい
るかを調べる。あればステップ1204に進み、その親
をpとする。なければステップ1206に進む。ステッ
プ1205ではpとp2が補集合関係であるかを調べ
る。そうである場合にはステップ1210に進み、排他
関係であると判定して処理を終了する。そうでない場合
にはステップ1203に戻り、包含関係の親を辿る処理
を繰り返す。
【0069】ステップ1206から1209までは、ス
テップ1202から1205までの処理のp1とp2と
を入れ替えたもので、同様の処理を行う。但し、ステッ
プ1207で包含関係の親がなくなったらステップ12
11へ進み、p1とp2は排他関係でないと判定して処
理を終了する。
【0070】以上で図12の処理手順の説明を終了す
る。
【0071】次に、プレディケート集合について説明す
る。プレディケート集合pset={p1,...,p
n}に対する成立条件として、各要素の成立条件の和を
対応させる。psetの成立条件が満たされていると
き、psetは真であると呼ぶ。
【0072】図13は、恒真プレディケート集合検出の
処理手順を示している。集合psetが恒真とは、ps
etの成立条件が常に成立する場合を指す。条件式の解
析により恒真集合を判定する方法としては、各プレディ
ケートの成立条件の和が1になるかどうかを調べればよ
い。本処理手順ではプレディケートグラフの補集合エッ
ジを利用した方法を示している。
【0073】ステップ1301では、プレディケート集
合内の2つの要素の組合せを対象に、それらの要素が補
集合関係にあるか、即ち2つのノード間に補集合関係エ
ッジがあるかどうかを調べる。補集合関係にある組が見
つかったらステップ1302へ進み、恒真であると判定
して処理を終了する。全ての組合せを調べた結果、補集
合関係の組が見つからなかった場合にはステップ130
3へ進み、恒真でないと判定して処理を終了する。
【0074】図14は、プレディケートpがプレディケ
ート集合に包含されるかどうかを判定する処理手順を示
している。プレディケートとプレディケート集合の包含
関係については、成立条件の演算により判定することも
できるが、ここではプレディケートグラフを用いた簡易
的な判定を示している。
【0075】ステップ1401では、図13の処理手順
に従い、プレディケート集合が恒真かどうかを判定す
る。恒真ならばあらゆるプレディケートを包含するか
ら、ステップ1408へ進み、包含関係にあると判定し
て処理を終了する。恒真でない場合にはステップ140
2へ進む。
【0076】ステップ1402では、未処理の集合要素
があるかどうかを判定する。ある場合にはステップ14
03へ進む。ない場合にはステップ1409に進み、包
含関係にないと判定して処理を終了する。
【0077】ステップ1403では、プレディケート集
合の未処理の要素を1つ取り出し、qとする。
【0078】ステップ1404からステップ1407
は、2つのプレディケート間の包含関係、即ちqがpを
包含するか否かを判定する処理である。まずステップ1
404で、pのノードをp1と置く。ステップ1405
では、p1への包含エッジがあるかどうかを判定する。
ない場合にはステップ1402に戻り、次の要素を対象
に処理を行う。ある場合はステップ1406に進む。ス
テップ1406では、包含エッジの親ノードをp1とす
る。ステップ1407では、p1がqと等しいかどうか
を判定する。そうである場合にはqはpの包含エッジを
辿ったパス上にあり、qはpを包含するので、ステップ
1408へ進み包含関係にあると判定する。そうでない
場合にはステップ1405へ戻り、さらに包含エッジの
親を辿る。
【0079】以上でプレディケートの関係解析の方法の
説明、および本発明の実施の形態の処理手順の説明を終
了する。
【0080】次に、図4のプログラムを例に、以上で説
明した到達定義の解析の処理過程を述べる。解析対象と
なる中間語は図6に示したものである。vを解析対象の
変数とする。図6中のd1、u1などは、vの各定義、
使用に対応している。
【0081】図9のステップ901では、図10の処理
手順に従い、局所属性の設定を行う。図6のB3以外の
基本ブロックについては、vが参照されないので、ge
nおよびkillは空集合となる。基本ブロックB3の
処理について、図10に従い説明する。
【0082】ステップ1001で初期化を行い、ステッ
プ1002で先頭の文606を取り出す。ステップ10
03の判定で、文606はvの定義であるので、ステッ
プ1004に進み、gen(B3)に定義d1を追加す
る。この結果、gen(B3)={d1}となる。ステ
ップ1005で文606はプレディケート付きでないと
判定されるので、ステップ1008へ進み、kill
(B3)={d1,d2,d3}とする。
【0083】以上で文606の処理が終了するので、引
き続き文607、608と処理を行い、文609でステ
ップ1004に達する。ここでgen(B3)={d
1,d2}となる。文609はプレディケート付きであ
るので、ステップ1006に進み、pset={p1}
となる。ステップ1007では、図7のプレディケート
グラフを利用して図13の処理手順に従い、psetが
恒真かどうかを判定する。psetは要素が1つなの
で、ステップ1301で補集合関係の組は存在せず、恒
真でないと判定され、ステップ1009へ進む。
【0084】次に文610の処理を行う。ステップ10
04で、gen(B3)={d1,d2,d3}とな
る。ステップ1006でpset={p1,!p1}と
なり、ステップ1007で恒真かどうかを判定する。図
13のステップ1301で補集合関係の組(p1,!p
1)を見つけるので、psetは恒真集合と判定され
る。ステップ1008では、kill(B3)={d
1,d2,d3}が再設定される。
【0085】以下、各文の処理を続けるがvの定義は現
われない。従って、変数vに対する局所属性設定の結果
は、gen(B3)={d1,d2,d3}、kill
(B3)={d1,d2,d3}となる。
【0086】次に、ステップ902でデータフロー方程
式を解く。基本ブロックB3についてはin(B3)=
{d1,d2,d3}が求められる。
【0087】次に、ステップ903で、図1および図1
1の処理手順に従い、到達定義を設定する。基本ブロッ
クB3の処理過程を説明する。
【0088】ステップ101では、deflist=
{d1,d2,d3}が設定される。
【0089】先頭の文606はvの定義文であるので、
ステップ110でdeflistの更新を行う。ステッ
プ1101で、定義d1をnewdefとおく。new
defはプレディケート付きでないので、ステップ11
07へ進み、deflist={}となる。さらにステ
ップ1108により、deflist={d1}とな
る。
【0090】次に文607の処理に進む。文607には
vの使用u1があるのでステップ104に進み、def
list中の定義d1を取り出してステップ105へ進
む。文607はプレディケート付きでないのでステップ
108へ進み、u1の到達定義は{d1}となる。ステ
ップ104に戻り、deflistに未処理の定義がな
いのでステップ109へ進み、文607の処理を終了す
る。
【0091】次にvが現われる文は文609である。こ
の文はvの定義文であるので、ステップ110でdef
listの更新を行う。ステップ1101でd2をne
wdefとおく。ステップ1102でプレディケート付
きと判定し、ステップ1103へ進む。ステップ110
3ではdeflist中のd1を取り出す。ステップ1
104で、d1のプレディケート集合に文609のプレ
ディケートp1を加える。d1のプレディケート集合は
{p1}となる。d1はプレディケート付きでないの
で、d1のプレディケートをTRUEと考え、ステップ
1105ではTRUEが{p1}に包含されるかどうか
を判定する。図14の処理手順に従い、包含されないと
判定するので、ステップ1103へ戻る。deflis
tに未処理の要素がないので、ステップ1108へ進
む。d2をdeflistに加え、deflist=
{d1,d2}となる。
【0092】次に文610の処理を行う。この文はvの
定義文であるので、ステップ110でdeflistの
更新を行う。d3はプレディケート付きであるので、ス
テップ1101、1102を経てステップ1103へ進
む。deflist中の定義d1を取り出す。ステップ
1104でd1のプレディケート集合にd3のプレディ
ケート!p1を加える。d1のプレディケート集合は
{p1,!p1}となる。ステップ1105でd1のプ
レディケートTRUEが{p1,!p1}に含まれるか
どうかを判定する。ステップ1401でプレディケート
集合が恒真集合と判定され、包含関係にあると判定され
るので、ステップ1106に進む。ステップ1106
で、deflistからd1をはずし、deflist
={d2}とする。ステップ1103へ戻り、defl
ist中の定義d2を取り出して処理を続ける。ステッ
プ1104でd2のプレディケート集合は{!p1}と
なり、ステップ1105では包含しないと判定する。ス
テップ1103に戻り、deflistに未処理の定義
はないのでステップ1108へ進む。deflistに
d3を追加し、deflist={d2,d3}とな
る。
【0093】次に文612の処理を説明する。ステップ
104でdeflist中の定義d2を取り出す。ステ
ップ105でu2のプレディケートはp2、ステップ1
06でd2のプレディケートはp1が付いていることを
判定し、ステップ107へ進む。ステップ107では図
12に従い、p2とp1とは排他関係でないと判定す
る。ステップ108へ進み、u2の到達定義にd2を加
える。次にステップ104へ戻り、deflist中の
定義d3を取り出す。ステップ107で、u2のプレデ
ィケートp2とd3のプレディケート!p1が排他かど
うかを調べる。図12の処理手順において、ステップ1
201で2つのプレディケートは補集合関係でないの
で、ステップ1202に進む。ステップ1203でp2
を包含する親プレディケートp1を見つける。ステップ
1205でp1と!p1は補集合関係にあると判定し、
p2と!p1は排他関係であると判定する。従って、ス
テップ107で排他関係と判定するので、d3は到達定
義には加えられず、ステップ104へ戻り、defli
st中の定義は処理済みであるので、ステップ109へ
進む。この結果、u2の到達定義は{d2}となる。
【0094】次に文613の処理を説明する。defl
ist中の定義d2、d3に対する処理において、ステ
ップ105でu3はプレディケート付きでないと判定
し、ステップ108でこれらの定義をu3の到達定義に
加える。この結果、u3の到達定義は{d2,d3}と
なる。
【0095】以上に説明した処理の結果、vの各使用へ
の到達定義は、u1:{d1}、u2:{d2}、u
3:{d2,d3}となる。これは、図5に示したif
変換前の中間語に対してプレディケートを考慮しない通
常の解析を行った場合に得られる結果と同じである。こ
のように、プレディケート付きコードを含むプログラム
に対しても正しい到達定義を求めることができるので、
求めた結果を用いて命令スケジューリングなどの最適化
を効率良く行うことができる。
【0096】以上で図6の中間語に対する処理過程の説
明を終了する。
【0097】
【発明の効果】本発明によれば、プレディケート付きの
コードを含むプログラムのデータフロー解析において、
プレディケートを考慮した解析を実施するので、正しい
データフロー解析の結果を得ることができる。また、2
つのプレディケート間の関係や、複数のプレディケート
の集合と1つのプレディケートの間の関係を解析するこ
とにより、解析の精度を高めることができる。
【0098】解析の精度向上の結果、解析結果を用いる
レジスタ割り付けや命令スケジューリングなどの最適化
の効果が上がり、オブジェクトコードの実行性能向上に
つながる。
【図面の簡単な説明】
【図1】本発明に係る解析方法における到達定義設定の
処理手順を示す。
【図2】本発明に係る解析方法を用いたコンパイラが稼
働するシステムの構成図を示す。
【図3】本発明に係る解析方法を用いたコンパイラの処
理手順を示す。
【図4】ソースプログラムの一例である。
【図5】図4のプログラムに対する中間語の一例であ
る。
【図6】図5のプログラムに対してif変換を適用し、
プレディケート付きコードへの変換を行った後の中間語
の一例である。
【図7】プレディケートの関係を解析するためのプレデ
ィケートグラフの一例である。
【図8】本発明に係る解析方法におけるプレディケート
グラフ作成の処理手順を示す。
【図9】本発明に係る解析方法における到達定義解析の
処理手順を示す。
【図10】本発明に係る解析方法の到達定義解析におけ
る局所属性設定の処理手順を示す。
【図11】本発明に係る解析方法の到達定義解析におけ
る到達定義リスト更新の処理手順を示す。
【図12】本発明に係る解析方法におけるプレディケー
トの排他関係を検出する処理手順を示す。
【図13】本発明に係る解析方法において、プレディケ
ートの集合に対して恒真かどうかを判定する処理手順を
示す。
【図14】本発明に係る解析方法におけるプレディケー
トの包含関係を検出する処理手順を示す。
【符号の説明】
105、106・・・プレディケートのチェック、10
7・・・プレディケートの排他チェック、210・・・
プレディケートグラフ、305・・・プレディケート付
きデータフロー解析、901・・・局所属性の設定、9
03・・・到達定義の設定、1105・・・プレディケ
ートの包含関係のチェック。

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】実行文に真偽値による実行条件であるプレ
    ディケートをそれぞれ付加することができ、プレディケ
    ートが真の場合にだけ通常の実行を行い、偽の場合には
    実行結果を無効化または命令発行を無効化する制御を行
    うコードを対象にデータフロー解析を行うためのプログ
    ラム解析方法であって、 解析対象の実行文にプレディケートが付加されているか
    を判定するプレディケート判定ステップと、 2つの定義d1およびd2に対して、定義d1が定義d
    2の直前に到達した場合に、定義d1が定義d2の直後
    に到達しないかどうか、即ち定義d1が定義d2でキル
    されるかどうかを、判定するキル判定ステップとを有
    し、 上記キル判定ステップでは、上記プレディケート判定ス
    テップにより定義d2にプレディケートが付加されてい
    るかどうかを判定し、プレディケートが付加されている
    場合には、定義d1が定義d2でキルされないと判定す
    ることを特徴とするプログラム解析方法。
  2. 【請求項2】請求項1のプログラム解析方法であって、 前記キル判定ステップでは、 前記プレディケート判定ステップにより定義d1と定義
    d2にプレディケートが付加されているかどうかを判定
    し、共にプレディケートが付加されている場合には、定
    義d1のプレディケートp1が真の場合に常に定義d2
    のプレディケートp2が真であるかどうか、即ちp1が
    p2に包含されるかどうかを、判定し、包含されない場
    合には定義d1が定義d2でキルされないと判定するこ
    とを特徴とするプログラム解析方法。
  3. 【請求項3】請求項1のプログラム解析方法であって、 前記キル判定ステップでは、 定義d2に付加されたプレディケートおよび定義d1か
    ら定義d2へ至るパス上に現われた定義に付加されたプ
    レディケートの集合を生成し、 定義d1のプレディケートが真となる条件が、上記プレ
    ディケート集合内の各プレディケートが真となる条件の
    和に包含されるかどうかを判定し、 包含されない場合には、定義d1が定義d2でキルされ
    ないと判定することを特徴とするプログラム解析方法。
  4. 【請求項4】実行文に真偽値による実行条件であるプレ
    ディケートをそれぞれ付加することができ、プレディケ
    ートが真の場合にだけ通常の実行を行い、偽の場合には
    実行結果を無効化または命令発行を無効化する制御を行
    うコードを対象にデータフロー解析を行うためのプログ
    ラム解析方法であって、 解析対象のプログラムの各基本ブロックに対して、基本
    ブロック内の解析によって得られる情報を設定する、局
    所属性設定ステップと、 上記局所属性ステップで設定された情報を制御フローの
    上で伝播させることにより、各基本ブロックの入口およ
    び出口に対する情報を求める、データフロー方程式解法
    ステップとを有し、 上記局所属性設定ステップでは、 基本ブロック内に存在する変数vの各定義に付加された
    プレディケートの集合を生成し、 上記プレディケートの集合の成立条件が常に成立するか
    どうかを判定し、成立する場合には、基本ブロックの入
    口に到達したvの全定義が基本ブロック出口まで到達で
    きない、即ちvの全定義はキルされるとしてキル属性を
    設定することを特徴とするプログラム解析方法。
  5. 【請求項5】請求項4のプログラム解析方法において、 データフロー方程式解法ステップで得られた、各基本ブ
    ロック入口に到達する定義集合に基づき、基本ブロック
    内の参照に到達定義を設定するステップをさらに有し、 上記到達定義を設定するステップは、到達定義集合内の
    定義を参照の到達定義に登録する登録ステップと、到達
    定義集合を更新する更新ステップとから成り、 上記登録ステップでは、定義と参照に付加されたプレデ
    ィケートが同時に真にならないと判定した場合には、到
    達定義にその定義の登録は行わなず、 また上記更新ステップでは、到達定義集合内の定義に付
    加されたプレディケートと、その定義以降に現われた定
    義に付加されたプレディケートの集合との包含関係を判
    定することを特徴とするプログラム解析方法。
  6. 【請求項6】請求項1〜5のプログラム解析方法におい
    て、 プレディケートを付加されたプレディケートの定義文に
    対し、定義されるプレディケートとその定義文に付加さ
    れたプレディケートの関係を有向エッジで表現したグラ
    フを作成するステップと、 2つのプレディケート間に上記エッジによる経路が存在
    するかどうかを調べるステップとをさらに有し、 これらのステップによりプレディケート間の包含関係を
    解析することを特徴とするプログラム解析方法。
  7. 【請求項7】請求項1〜5のプログラム解析方法におい
    て、 定義されるプレディケートとその定義文に付加されたプ
    レディケートの関係を包含関係エッジと呼ぶ有向エッジ
    で表現し、プレディケートとそのプレディケートの真偽
    値を反転する否定プレディケートとの関係を補集合関係
    エッジと呼ぶエッジで表現したグラフを作成するステッ
    プと、 一方のプレディケートと補集合関係エッジで結ばれたプ
    レディケートと、他方のプレディケートとの間に、上記
    包含関係エッジによる経路が存在するかどうかを調べる
    ステップとをさらに有し、 これらのステップにより、2つのプレディケートが同時
    に真になることがないかどうかを解析することを特徴と
    するプログラム解析方法。
JP28742396A 1996-10-09 1996-10-09 プログラム解析方法 Pending JPH10116197A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP28742396A JPH10116197A (ja) 1996-10-09 1996-10-09 プログラム解析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP28742396A JPH10116197A (ja) 1996-10-09 1996-10-09 プログラム解析方法

Publications (1)

Publication Number Publication Date
JPH10116197A true JPH10116197A (ja) 1998-05-06

Family

ID=17717142

Family Applications (1)

Application Number Title Priority Date Filing Date
JP28742396A Pending JPH10116197A (ja) 1996-10-09 1996-10-09 プログラム解析方法

Country Status (1)

Country Link
JP (1) JPH10116197A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000222218A (ja) * 1999-02-01 2000-08-11 Fujitsu Ltd コンパイル装置および記録媒体
JP2006114069A (ja) * 2006-01-20 2006-04-27 Matsushita Electric Ind Co Ltd コンパイラ装置
US7698696B2 (en) 2002-07-03 2010-04-13 Panasonic Corporation Compiler apparatus with flexible optimization
CN113741861A (zh) * 2020-05-29 2021-12-03 中科寒武纪科技股份有限公司 计算程序中数据依赖关系的方法及计算机可读存储介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000222218A (ja) * 1999-02-01 2000-08-11 Fujitsu Ltd コンパイル装置および記録媒体
US7698696B2 (en) 2002-07-03 2010-04-13 Panasonic Corporation Compiler apparatus with flexible optimization
US8418157B2 (en) 2002-07-03 2013-04-09 Panasonic Corporation Compiler apparatus with flexible optimization
JP2006114069A (ja) * 2006-01-20 2006-04-27 Matsushita Electric Ind Co Ltd コンパイラ装置
CN113741861A (zh) * 2020-05-29 2021-12-03 中科寒武纪科技股份有限公司 计算程序中数据依赖关系的方法及计算机可读存储介质

Similar Documents

Publication Publication Date Title
US6588009B1 (en) Method and apparatus for compiling source code using symbolic execution
US6662354B1 (en) Determining destinations of a dynamic branch
EP0533813B1 (en) Method for representing scalar data dependencies for an optimizing compiler
US6954747B1 (en) Methods for comparing versions of a program
JP3311462B2 (ja) コンパイル処理装置
JP4962564B2 (ja) 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
US6412105B1 (en) Computer method and apparatus for compilation of multi-way decisions
US20080216061A1 (en) Inferring Function Calls In An Ambiguous Language Computer Program
US20010011370A1 (en) Interactive software testing system and method
US20030028860A1 (en) Compiler and debugging device
JPH06314203A (ja) コンパイラの最適化方法および装置
US5790859A (en) Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
US20140325495A1 (en) Semi-Automatic Restructuring of Offloadable Tasks for Accelerators
US6539543B1 (en) Method and apparatus for compiling source code by flattening hierarchies
US7058561B1 (en) System, method and program product for optimising computer software by procedure cloning
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
CN102360306A (zh) 高级语言代码中循环数据流图提取优化信息处理方法
Puschner A tool for high-level language analysis of worst-case execution times
JPH10116197A (ja) プログラム解析方法
US7774700B2 (en) Partial evaluation of XML queries for program analysis
US8762974B1 (en) Context-sensitive compiler directives
JPH06202875A (ja) インライン展開による最適化を行うコンパイラ
Cuevas Modeling Recursion with Iteration: Enabling LLVM Loop Optimizations for Recursive Data Structure Traversal
JPH09282173A (ja) プログラムの静的解析方法
Tomašević et al. Implementation of the debugging support for the llvm outlining optimization