JP3234552B2 - 最適化装置及びコンピュータ読取可能な記録媒体 - Google Patents

最適化装置及びコンピュータ読取可能な記録媒体

Info

Publication number
JP3234552B2
JP3234552B2 JP26565597A JP26565597A JP3234552B2 JP 3234552 B2 JP3234552 B2 JP 3234552B2 JP 26565597 A JP26565597 A JP 26565597A JP 26565597 A JP26565597 A JP 26565597A JP 3234552 B2 JP3234552 B2 JP 3234552B2
Authority
JP
Japan
Prior art keywords
expression
instruction
holding unit
equivalent
variable
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
Application number
JP26565597A
Other languages
English (en)
Other versions
JPH11110225A (ja
Inventor
旭 田中
謙介 小谷
裕久 田中
旬子 佐山
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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co 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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP26565597A priority Critical patent/JP3234552B2/ja
Priority to US09/165,587 priority patent/US6289507B1/en
Publication of JPH11110225A publication Critical patent/JPH11110225A/ja
Application granted granted Critical
Publication of JP3234552B2 publication Critical patent/JP3234552B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンパイラに装備
される最適化装置及びコンピュータ読取可能な記録媒体
に関する。
【0002】
【従来の技術】近年、エレクトロニクス業界の技術者が
最も苦心しているのは、より高度で複雑な制御を実現す
る組込型マイコンシステムの開発である。一般に組込型
マイコンシステムとは、ファームウェアからアプリケー
ションプログラムまでの制御用プログラム全般をマスク
ROMに記録し、これと組み込み用途向けのマイクロプ
ロセッサとを一体型に構成したコンピュ−タシステムを
いい、その応用製品は家電製品、工作機械、情報機器、
通信機器等さまざまな分野に活躍の場を広げている。
【0003】このようなマイコンシステムにおける組み
込みプログラムは、C言語などの高級プログラミング言
語で開発されることが一般的になっている。これは、組
み込み用途の応用ソフトウェアの規模が著しく増大する
傾向にあり、旧態依然としたアセンブリ言語を中心とし
たソフトウェア開発環境では、もはや組込型プログラム
に要求される高度な処理を実現することが不可能だから
である。また、高度な処理を実現する組込型プログラム
をアセンブリ言語を用いて開発しようとすると技術者に
多大な負担を強要してしまうからである。
【0004】とはいえ、アセンブラ言語により開発され
た応用ソフトウェアと比較して、高級プログラミング言
語を用いて開発された機械語プログラムは冗長性が高い
という欠点が有り、より低価格な製品を開発しようとし
ているメーカ程、高級プログラミング言語を用いた組み
込み用途プログラムの開発を冷ややかな目で見る傾向が
ある。
【0005】何故なら、組み込みプログラムは製品時に
読みだし専用メモリ(ROM)に格納されるので、その
サイズの増大は製品コストに大きな皺寄せを及ぼすから
である。また特定の性能(実行速度)が要求される製品
では、組み込みプログラムの実行時間の増大は、よりコ
スト高のマイクロプロセッサや、より高いクロック数に
おけるマイクロプロセッサの動作を要求してしまうから
である。
【0006】現状では、これらの欠点が顕著な故に組み
込み用途の分野における認知度は必ずしも高いとはいえ
ない。組み込み用途の分野において高級プログラミング
言語を用いたソフトウェア開発環境を主流とするには、
このような冗長性を徹底して排除する高度な最適化アル
ゴリズムを確立する必要があり、研究者の手腕が問われ
るところである。
【0007】尚『プログラムの冗長性』には様々な解釈
があるが、以降の説明における『プログラムの冗長性』
は、高級言語或は中間言語にて記述されたプログラムに
おいて、最終的に得られる機械語プログラムのコードサ
イズや実行時間を増大させる全ての要因を意味すること
とする。従来の最適化装置について述べる前に、コンパ
イラの構成について説明する。説明に先立ち、本発明で
引用する文献を上げる。 [1] A.V.Aho, R.Sethi, J.D.Ullman:"Compilers, Princ
iple, Techniques, andTool", Addison Wesley Publish
ing Company Inc.,1986 (邦訳)原田賢一:”コンパイラI、II”,サイエンス
社,1990 [2]Hans Zima:"Supercompilers for Parallel and Vect
or Computers",Addison Wesley Publishing Company In
c.,1991 (邦訳)村岡洋一:”スーパーコンパイラ”,オーム社,
1995 [3]佐々政孝 :"プログラミング言語処理系",岩波書店,
1989
【0008】構文解析装置41は記憶装置(図外)にフ
ァイルとして記憶されているソースプログラムの字句解
析、構文解析および意味解析を行ない、中間プログラム
に変換する。ここで中間プログラムとは、コンパイラが
コンパイラ内部でソースプログラムを処理しやすくする
ために変換した中間的なプログラムのことであり、中間
プログラムの1ステップを中間命令と呼ぶことにする。
中間命令には文献[1]p464に示されているように、4つ
組や、3つ組や、抽象式ツリーなどが存在し、これらが
変換されて最終的なオブジェクトコードが生成される。
尚、構文解析装置41については、以降の主題である最
適化との関連は希薄であるのでこれ以上の説明は省略す
る。
【0009】最適化装置42は最終的に生成される機械
語プログラムのプログラムサイズおよび処理実行時間を
減少させる目的で中間プログラムの最適化を行なう。最
適化装置42は、最適化制御部43、制御フロー情報解
析部44、データフロー情報解析部45、中間コード最
適化部46、制御フロー情報保持部47、データフロー
情報保持部48より構成される。
【0010】制御フロー情報解析部44は、制御の流れ
が一方向である基本ブロックに中間プログラムを分割
し、基本ブロック間の制御の流れを示す、制御フロー情
報を求める(文献[1]p528)。基本ブロックの詳細な説
明は後述の従来の最適化装置42の説明で述べる。デー
タフロー情報解析部45は、文献[1]p608で示されてい
るように、前述の制御フロー情報を使用して、さらに中
間コードを解析し、到達する定義、利用可能式、生きて
いる変数などのデータフロー情報を求める。詳細は文献
[1]p608-722に記載されている通りであり、概要は、ま
ずいかなる情報をデータフロー情報とするかというデー
タフロー情報の設定、次に基本ブロックの入口出口での
データフロー方程式の設定、そして繰り返しアルゴリズ
ムによるデータフロー方程式の解を求めることによっ
て、最終的なデータフロー情報を求めている。
【0011】中間コード最適化部46は、前述の制御フ
ロー情報とデータフロー情報を使用して、中間コードの
最適化を行なう。例えば、制御フロー情報を使用して制
御が届かない基本ブロックを削除したり、前述の利用可
能式の情報を使用した共通部分式の最適化(文献[1]p59
2)や、到達する定義の情報を使用したコピー伝搬の最
適化(文献[1]p594)や、生きている変数の情報を使用
した不要コード削除の最適化(文献[3]p482)など行な
う。詳細については、コード生成装置の説明の後に述べ
る。
【0012】コード生成装置49は、中間プログラム中
の変数にレジスタまたはメモリを割り付け、さらに中間
命令毎に機械語命令に変換する。但し、このコード生成
装置49は、本発明の主眼ではないのでこれ以上の説明
は省略する。次に、従来の最適化装置42についてさら
に詳しく説明する。但し、ここでは、本発明と関係のあ
る、到達する定義の情報を使用した最適化であるコピー
伝搬と、利用可能式の情報を使用した共通部分式の最適
化について述べる。
【0013】まず、説明の前に以下で用いる用語につい
て説明する。 ・プログラムの点 ある中間命令と、その次に位置する中間命令との間を
「点」と呼ぶ(文献[3]p461)。 ・基本ブロック(文献[1]p528) 最適化のためにプログラムを書き換えるあたって、列の
途中に飛び越し命令があったり列の途中が飛び越し先に
なっていれば命令の書き換えによってアルゴリズムが破
壊される恐れがある。従って最適化にあたってはプログ
ラムの実行順序が先頭から最後に向かうという一方向の
みである必要がある。中間プログラムの一部分(ブロッ
ク)であり、そのブロックの途中からの飛び越しがな
く、さらにブロックの途中への飛び越し先もないものを
基本ブロックといい、最適化は、基本ブロックを最小単
位にして行われる。基本ブロックの最初の中間命令の直
前の点を基本ブロックの入口といい、基本ブロックの最
後の中間命令の直後の点を基本ブロックの出口という。
サブルーチン(関数)呼び出しの中間命令では基本ブロ
ックは分割されないとする。何故なら、基本ブロックを
より大きな領域と解釈する方が、より多くの最適化情報
を解析できるからである。
【0014】以下の説明では、基本ブロックを中間命令
の集合と考え、中間命令sが基本ブロックBに属している
ことを「s∈B」 と表す。また、文献[1]p532の示される
ように基本ブロックBの実行の前に実行される直前の基
本ブロックをBの「先行ブロック」といい、基本ブロッ
クBの先行ブロックの集合をpred(B)と表す。同様に、基
本ブロックBの直後に実行される基本ブロックをBの「後
続ブロック」といい、基本ブロックBの後続ブロックの
集合をsucc(B)と表す。基本ブロックの例を図3に示
す。基本ブロックBLK2の先行ブロックは基本ブロックBL
K1とBLK5であり、後続ブロックが基本ブロックBLK3とBL
K4である。特に、最初に実行され、pred(B)を持たない
基本ブロックは「初期ブロック」という。 ・変数の定義、使用 文献[3]p.419に示すように変数に値を設定することを
「定義する」といい、設定した値を使用することを「使
用する」または「参照する」という。また、中間命令
「s1: a = b op c」(a,b,cは変数、op は演算子)にお
いて、中間命令s1:は変数aの「定義」といい、また、中
間命令s1:は変数b,cの「使用」または「参照」という。
以下の説明では簡単化のために、「s1(a=)」で中間命令
s1:が変数aの「定義」であることを、「s1(=b)」で中間
命令s1が変数bの「使用」または「参照」であることを
表す。 ・到達する定義 これはデータフロー情報を論述する場合に、理解が求め
られる基本概念である。文献[3]p465-p466に示されてい
るように、ある中間命令sにおいて変数xを使用したと仮
定するとき、中間命令sにおいて変数xの値を設定した可
能性のある定義dの集合のことを 中間命令sに到達する
定義という。
【0015】一方、ある変数xの定義dからある中間命令
sに至る経路に変数xの定義d以外の定義が存在するとき
『定義dは中間命令sに到達しない』という。定義d以外
の定義が存在しないとき定義dは中間命令sに到達すると
いう。そのような定義dの集合を中間命令sに到達する定
義という。ここで必ずしも中間命令sにおいて変数xの使
用があるとは限らないことに注意されたい。尚、これま
での説明で、中間命令sを「中間命令sの直前の点p」と
読み換えてもよい。
【0016】ある基本ブロックに先行ブロックが複数あ
り、その複数の先行ブロック内の定義が基本ブロック内
の中間命令に到達するという態様が存在する点も注意に
値する。このような態様を図39の例で示す。変数b2の
定義中間命令s17からs33に至る経路において、基本ブロ
ックB1に位置し、変数b2を定義する定義中間命令s17
は、中間命令s33に到達する定義である。同様に基本ブ
ロックB2内に位置し、変数b2を定義する定義中間命令s2
9も中間命令s33に到達する定義である。つまり、変数b2
には、2つの先行ブロック内に位置する複数の定義が一
つの中間命令に到達する態様が存在する。さらに中間命
令s33において変数t21の使用はないが、t21の定義中間
命令s13からs33に至る経路にs13の他にt21の定義がない
とき、t21の定義中間命令s13もs33に到達する定義であ
る。 ・データフロー方程式 文献[3]p471-472で示されているように、『各中間命令
にどのような定義が到達しているか』を示すデータフロ
ー情報を算出するには、各データフロー情報毎にデータ
フロー方程式を設定し、繰り返し解法を用いてその方程
式を解く必要がある。ここでは、到達する定義のデータ
フロー方程式について説明する。
【0017】文献[3]p471-472で示されているように、
基本ブロックBにおいてGEN[B]をBで生成される定義の集
合とする、これは、基本ブロックBの中で定義され、そ
の定義がBの出口まで到達する定義の集合である。形式
的には次の{数式2}のようになる。 {数式2} GEN[B] = {s| s(x=)∈B, かつ sからBの出口までにs'(x
=)なるs'は存在しない。} 次に、基本ブロックB内に定義中間命令s'(x=)が存在す
る、基本ブロックB以外の基本ブロックに属するxの定義
の集合をKILL[B]とする。形式的には次の数式3のよう
になる。 {数式3} KILL[B] = {s| s(x=)∈(B以外の任意の基本ブロック)、
かつs'(x=)∈Bなるs'が存在する。} 次に、基本ブロックBの入口に到達する可能性のある定
義の集合をIN[B]、基本ブロックBの出口に到達する可能
性のある定義の集合をOUT[B]とする。形式的には次の数
式4のようになる。 {数式4} IN[B] = {s| 定義中間命令s(x=)において、sからBの入
口までの経路の中に、s'(x=)なるs'が存在しない。} OUT[B] = {s| 定義中間命令s(x=)において、sからBの出
口までの経路の中に、s'(x=)なるs'が存在しない。} これらを用いると、データフロー方程式は次の数式5の
ように表される。 {数式5} IN[B] = ∪ OUT[B'] ...(1) B'∈pred(B) OUT[B] = GEN[B] ∪ (IN[B] - KILL[B]) ...(2) ここで、「∪」は集合和、「-」は集合の差を表す。数
式5(1)は基本ブロックBの入口に到達する定義は、基本
ブロックBの先行ブロックの出口に到達する定義の集合
和であることを表し、数式5(2)は基本ブロックBの出口
に到達する定義は、基本ブロックBで生成される定義GEN
[B]と、基本ブロックBの入口に到達しかつBの中で定義
されない変数の定義であることを表す。
【0018】数式5(1),(2)は、IN[B]、OUT[B]を変数と
みなした連立方程式になっており、この解を求めること
により、基本ブロックBに到達するIN[B]の情報が求めら
れる。IN[B]が求まれば、文献[3]p475に示されているよ
うに、基本ブロック内の各中間命令に達する定義は実行
順に、IN[B]の内容を必要に応じて変更することにより
容易に求まる。 ・データフロー方程式を解く繰り返しアルゴリズム 文献[3]p473-p474に示されている到達する定義の場合の
ように、データフロー方程式を繰り返しアルゴリズムを
使用して解くのが一般的である。到達する定義の繰り返
しアルゴリズムは図37に示す通りである。
【0019】尚、図37において、repeat, for, if の
各文と、=, != , ==などの演算はC言語に準じ、false,
trueは値0, 1 であるとする。以下で述べる他のアルゴ
リズムの記述も同様である。上記のアルゴリズムは、全
ての基本ブロックBのOUT[B]の値が変化しなくなるまでI
N[B]とOUT[B]を再計算し続け、変化しなくなった(つま
り収束した)ときのIN[B],OUT[B]の値が上記データフロ
ー方程式の解となる。尚、繰り返しアルゴリズムの収束
性に関しては、文献[2]p79-p88 で示されているよう
に、一般にデータフロー情報の集合が合流演算に関して
セミラテスであること、例えば、到達する定義の場合で
は、到達する定義の集合が、先行ブロックの合流演算で
ある集合演算「∪」においてセミラテスであることを示
す必要がある。
【0020】また各基本ブロックの影響を表す関数fが
単調関数であること、例えば、到達する定義の場合、基
本ブロックBに関して、OUT[B]を求める式のIN[B]をXと
した、関数f(X) = GEN[B] ∪ (X - KILL[B]) が単調関
数であることを示す必要がある。 ・使用−定義連鎖情報、定義−使用連鎖情報(文献[3]p
476) 到達する定義の情報から、さらに有用な情報として変数
の各使用に到達する変数の定義をリストとして表すもの
を使用−定義連鎖情報という、図38において、変数b1
の使用s32に到達するb1の定義がs12,s24であるとき、s3
2における変数b1の使用−定義連鎖情報は(s12,s24)とい
うリストで表現される。
【0021】また、これとは逆に、定義が到達する使用
をリストとして表すのが定義−使用連鎖情報である。図
38においては、変数b1の定義中間命令s12はs32に到達
する定義であるときs12における変数b1の定義−使用連
鎖情報は(s32)というリストで表現される。s24について
も同様である。また、図41において、変数x4の定義中
間命令s5がs16,s27,s35に到達する定義であるときs5に
おける変数x4の定義−使用連鎖情報は(s16,s27,s35)と
いうリストで表現される。
【0022】尚、図38から図42において使用−定義
連鎖情報、定義−使用連鎖情報は破線の矢印で図示して
おり、例えば図38ではs32からs12に向かう破線の矢印
が変数b1の使用−定義を、s12からs32から向かう破線の
矢印が変数b1の定義−使用連鎖情報を表している。 ・利用可能式 これも、データフロー情報の一つである。文献[3]p476
に示されているように、プログラムの入口からある中間
命令sまでに至るすべての経路で式E: x op y(opは演算
子)が評価され、その式Eの最後の評価から、sに至るま
でに、xやyの定義がないとき、式Eは中間命令sにおいて
利用可能であるという。尚、これまでの説明で、中間命
令sを「中間命令sの直前の点p」と読み換えてもよい。
【0023】以上を図41の例で示す。中間命令s16か
ら中間命令s35に至る経路で、s16が式「x4+y4」の最後
の評価であり(つまり、s16からs35の間にs16以外で 式
「x4+y4」を実行する中間命令がない)、かつ変数x4, y
4の定義が存在せず、さらに中間命令s27についてもs16
と同様であるとき、中間命令s35において式「x4+y4」は
利用可能式である。
【0024】利用可能式に関するデータフロー情報も到
達する定義と同様に、利用可能式に関するデータフロー
方程式の設定と、繰り返しアルゴリズムにより計算され
る(文献[3]p476-p479)。次に上記の到達する定義およ
び、利用可能式の情報を用いた最適化である、コピー伝
搬による最適化と、共通部分式の最適化について述べ
る。 ・コピー伝搬による最適化 これは、s: x=y という形の中間命令(以下コピーとい
う)があるとき、このxを使用する中間命令s'におい
て、s'に到達するxの定義がsのみであるとき、s'におけ
るxをyに置き換え(この置き換えをコピー伝搬とい
う)、さらにxの使用がs'の他に存在しないとき、sを削
除する。例えば図40において中間命令s6は中間命令s2
6,s30に到達する変数t32の唯一の定義であり、かつs26,
s30のみがs6で定義されるt32の使用であるので、s26,s3
0におけるt32をx3に置き換え、s6の削除が可能となる
(文献[3]p445)。 ・共通部分式の最適化 これはすでに計算済みの式の評価(実行)を重複して評
価しないようにする最適化である。
【0025】例えば図41において、前述の利用可能式
の説明で述べたように中間命令s35において式「x4+y4」
は利用可能式である。つまり中間命令s16,s27において
式「x4+y4」が評価済みであるので、s35によって再び式
「x4+y4」の評価を行なう必要がないということであ
る。よって、共通部分式の最適化では新たに変数wを導
入して、図42のように中間命令s16,s27,s35を置き換
え、新たに中間命令s50,s51のコピーを挿入する。尚、
図42から推測されるようにこの最適化は、中間命令s5
0,s51のコピーを挿入しても、中間命令s35における式
「x4+y4」の評価を行なわないことで、コスト(プログ
ラムサイズや実行時間)が削減できるときに行なわれる
(文献[3]p446)。
【0026】
【発明が解決しようとする課題】しかしながら従来技術
では、データフロー情報を使用して、基本ブロックを跨
いだ大域的な依存関係を用いた最適化を行おうとする
と、コピー伝搬可能であることを裏付けるため、或は、
命令の削除が可能であることを裏付けるための解析時間
がかかり過ぎてしまうという問題点がある。これは、大
域的な依存関係の解析を行う場合は、複数の基本ブロッ
クが条件付き分岐により起動することにより、実行順序
が何通りも存在し、これに併せて依存関係も何通りも存
在することを念頭に置いた徹底した解析が求められるか
らである。また分岐元基本ブロックの制御フローが分岐
先基本ブロックの制御フローに依存するという『フィー
ドバック型の依存関係』を想定した解析が求められるか
らである。たとえ多大な解析時間を費やして大域的な依
存関係の解析を行っても基本ブロックを跨いだ最適化が
安全であるという確固たる根拠がないため、それを実行
に移すことはやはり躊躇される。
【0027】最適化の安全性を裏付けるための解析が如
何にして行われるかを図38から図41を参照しながら
説明を行なう。図38では中間命令s32において、変数a
1とb1は同じ値を保持しているので、単純に思考する
と、s32は削除すべきのように思える。しかしs32に到達
する変数b1の定義が中間命令s12,s24と2つ存在し、唯
一でない。唯一でないから、s12,s24はコピー伝搬の対
象とすべきでない。よって、コピー伝搬とは異なる最適
化を行なう必要がある。他の最適化を実行する場合で
も、中間命令s32に到達する変数b1の定義がどのような
中間命令にて行われ、その中間命令においてどのような
使用がなされいるかを調べておく必要がある。s12,s24
がコピーであって、その右辺が変数a1であることを調べ
る必要がある。図38の場合であれば、中間命令s32の
変数b1の使用−定義の依存関係がまだ単純であり、変数
b1の使用−定義連鎖情報を参照すれば最適化の要否を決
定することができる。
【0028】続いて紹介する図39の一例は、依存関係
が複雑であり、使用−定義連鎖情報を詳しく解析する必
要がある。図39において、使用−定義連鎖情報、定義
−使用連鎖情報から解るように、中間命令s33が削除可
能であることは直感的に察知されるであろう。しかし中
間命令s33が削除可能であると判断するのは余りにも軽
率である。中間命令s33の削除に危険性が無いことを裏
付けるには、中間命令s33の変数b2の使用−定義連鎖情
報に存在する変数b2の定義中間命令s17にまず着目し、
その右辺の変数t21の使用−定義連鎖情報をさらに調べ
て、変数t21の定義中間命令s13に着目してその右辺を調
べる必要がある。同様のことを中間命令s33の変数b2の
使用−定義連鎖情報にあるもう一つの定義中間命令s29
および、s29に到達する変数t22の定義中間命令s25につ
いても調べる必要がある。このように使用−定義連鎖情
報を次々に辿って、全てのケースについて変数b2が変数
a2と同じ値を保持することを念入りに調べ上げることに
より、中間命令s33が削除可能であるとの裏付けがなさ
れる。
【0029】続いて紹介する図40の一例は、依存関係
が更に複雑であり、使用−定義連鎖情報のみならず、定
義-使用連鎖情報を詳しく解析する必要がある。つまり
図40において中間命令s34が削除可能であることは直
感的に理解できるが、中間命令s34の削除に危険が無い
ことを裏付けるには、使用−定義連鎖情報に加えて定義
−使用連鎖情報を調べる必要がある。まず、図39のと
きと同様に中間命令s34の変数b3の使用−定義連鎖情報
から中間命令s18,s15 を辿ってa3とb3が同じ値を保持す
ることを確認し、さらに、中間命令s30における変数t32
の使用−定義連鎖情報から中間命令s6を検出し、さらに
s6で定義される変数t32の定義−使用連鎖情報から中間
命令s26を得てその左辺を調べて、初めて中間命令s34に
おいて、変数a3,b3が同じ値を保持することが解る。中
間命令s26の右辺が変数a3でない場合は、さらに中間命
令s6の他の定義−使用連鎖情報を辿る必要がある。
【0030】以上見てきたように、一般的に中間命令s:
x = yにおいて 変数x, y が同じ値を保持するか否かを
判定し、変数の書き換えが安全である旨を裏付けるに
は、使用−定義連鎖情報、定義−使用連鎖情報を辿って
行く必要があるので、多大な解析時間が費される。次に
図41についての最適化について述べる。図41におい
て、中間命令s16,s20および中間命令s27,s31の使用−定
義連鎖情報、定義−使用連鎖情報から解るように、中間
命令s35の直前で変数a4は式「x4+y4」の値を保持してい
るので、s35は削除可能である。しかし前述の共通部分
式の最適化では、中間命令s35はコピーに変わるもの
の、削除までは行なうことができなかった。よってこの
最適化も前述の共通部分式による最適化とは異なる。さ
て、中間命令s35において変数a4が式「x4+y4」と同じ値
を保持していることを検出するには、図38から図40
で見てきたように、使用−定義連鎖情報、定義−使用連
鎖情報の解析の他に、式「x4+y4」というような式の形
まで含めて解析する必要があり、さらなる解析時間を要
することとなる。
【0031】以上のような解析は、プログラム書き換え
に伴う危険性を払拭するために必須となる処理である
が、余りにも多大な解析時間が費やされ、とてもでは無
いが実用に耐えるものではない。また、この解析時間が
有限時間内に収まるという保証がない。故に従来技術に
おける最適化では、本質的に基本ブロックを跨いだ最適
化に不充分であり、複数基本ブロックの間に多くの冗長
性を残してしまうものと結論付けざるを得ない。
【0032】本発明の第1の目的は、より少ない解析時
間でプログラム書き換えに伴う危険性を払拭することが
でき、より高度に冗長性を排除することができる最適化
装置を提供することである。本発明の第2の目的は、基
本ブロックを跨いだ大域的な最適化にも耐え得る高度な
解析能力を有する最適化装置を提供することである。
【0033】
【課題を解決するための手段】上記第1、第2の目的を
解決するため、本明細書における最上位概念の発明で
は、各基本ブロックの出口において各式間に等価性がど
のように発生し、発生した等価性が分岐先の各基本ブロ
ックの入口にどのように分配されるかを解析するように
している。分岐元基本ブロックの出口から分岐先基本ブ
ロックの入口までの、丁度基本ブロック間の境界に相当
する部位における各式間の等価性の解析は、従来から行
われてきた解析技術の盲点であり、本明細書では、いわ
ばこの盲点をつく形で大域的な依存関係の解析を実現し
ている。
【0034】そこで本発明は、各命令の左辺及び右辺の
何れか一方に位置する式を他の式に置き換えてもプログ
ラムの実行が等価であることを示す式間の等価性を解析
することにより、分岐元−分岐先の関係に基づいて複数
の基本ブロックに分割されたプログラムを最適化する最
適化装置であって、プログラム内の各基本ブロックの出
口において、等価性が成立する式からなる等価式集合E_
OUTの初期集合を求める初期化手段と、初期集合たるE_O
UTを[方程式1]に代入して、各基本ブロック入口におい
て等価性が成立する式からなる等価式集合E_INを得る第
1解析手段と、[方程式1]から求められたE_INを[方程
式2]に代入し、E_OUTを得る第2解析手段と、[方程式
2]で求められたE_OUTを[方程式1]に代入する解法を繰
り返し行い、E_INの収束解を得る繰返手段と、収束解た
る等価式集合E_INを用いて各基本ブロック内に位置する
先頭命令から終了命令までを最適化するブロック内最適
化手段とを備えるように最適化装置を構成している。 {方程式1] E_IN[B] = ∩e E_OUT[P] {方程式2] E_OUT[B] = E_GEN[B] ∪e (E_IN[B] ∩e [E_PRE[B]]) ∩e:等価積演算の演算子 ∪e:等価和演算の演算子 P:基本ブロックBを分岐先とする基本ブロック E_GEN[B]:基本ブロックBに含まれている先頭命令から最
終命令までの実行により等価性が成立する全ての式から
なる等価式集合 E_PRE[B]:プログラム全域における全式集合のうち、基
本ブロックBに含まれている先頭命令から最終命令まで
の実行により更新されないものからなる等価式集合
【0035】『式間の等価性』とは、プログラム内のあ
る式を他の式に置き換えてもプログラムの実行が等価で
あることを示すという性質をいい、本明細書では、基本
ブロックの入口、出口において等価性が成立する全ての
式を示すE_IN集合及びE_OUT集合を、基本ブロックの個
別の解析により一意に得られるE_GEN集合、E_PRE集合か
ら求めるためのデータフロー方程式を提示している。デ
ータフロー方程式の収束解が得られるまで、このデータ
フロー方程式を解く作業を繰り返せば、複数の基本ブロ
ックが条件分岐により複雑に起動し、実行順序が何通り
も存在する場合や分岐元基本ブロックの制御フローが分
岐先基本ブロックの制御フローに依存するという『フィ
ードバック型の依存関係』が存在する場合でも、基本ブ
ロック間の境界に相当する部位の等価式集合を高精度に
求めることができる。
【0036】
【発明の実施の形態】
(第1章 序論)序論では、本実施形態の理解に必要な概
念の定義、性質、用語について説明し、併せて新たに考
案したデータフロー情報である「等価式集合」と、その
データフロー方程式、およびその方程式を解く繰り返し
アルゴリズム、および等価式集合を使った最適化につい
て説明する。 (第1.1章 本実施形態にて用いるプログラム系の概
念) ・中間命令 『従来の技術』において述べた通り中間命令には数種類
存在するが、ここでは説明を明確化するために、もっと
も一般的な3番地形式のものを取り扱う。尚、以下で述
べる本方式は他の中間命令にも適用可能である。
【0037】中間命令の形式は次の通りである。但し、
本発明の説明に必要な基本的な部分ついてのみ述べる。 (1)代入中間命令「a = b」 ... ここで、aは、変数か
間接演算式であり、bは変数、定数、単項演算子また
は、2項演算子の式である。なお演算子はC言語に準ず
るものとする。例えば図3の中間命令s1,s17がその例で
ある。
【0038】(2)条件分岐中間命令 ... この中間命令
は、「if(条件式)goto(飛び先ラベル)」という形式をと
る。条件式はC言語に準ずるものとする。例えば図3の
中間命令s8,s39がその例である。 (3)無条件分岐中間命令 ... この中間命令は、「goto
(飛び先ラベル)」という形式をとる。例えば図3の中間
命令s24がその例である。
【0039】(4)関数(サブルーチン)呼び出し中間命
令 ... この中間命令は、「関数名(実引数リスト)」と
いう形式をとる。例えば図3の中間命令s20がその例で
ある。 (5)ラベル ... この中間命令は、中間プログラムの特
定の場所を表すものである。例えば図3のL1, L2, L3
がその例である。 ・式 1996年度版JISハンドブック58『情報処理 用語・符号・デ
ータコード編』によれば、"式"は『一つ以上のオペラン
ドから値を計算する言語構成要素』と解説されている。
JISハンドブックにおけるこの"式"の解説に準拠して、
本明細書における"式"を、変数、定数、単項式、2項式
を始めとする言語構成要素と定義する。特に単項式のう
ちC言語のような間接演算子「*」を使用した「*(変
数)」形式の式を間接演算式という(尚「*(変数)」形式
で使用される変数をポインタ変数という。)。 ・指示変数集合 変数vがポインタ変数であるとき、中間命令sにおいて変
数vが指し示す可能性のある変数の集合を指示変数集合
ということにし、この集合をPOINT[s,v]と表現すること
とする。指示変数集合の算出方法は、文献[1]p648-660
で述べられておりその詳細な説明は省略するが、図13
(a)を使ってその概念を簡単に説明する。図13(a)にお
いて、まず中間命令s1,s2の直後から中間命令s3の直前
に至る経路までに、ポインタ変数pへの定義がないとす
る。このとき、中間命令s1,s2では、それぞれポインタ
変数pに変数a,bのアドレスが代入されているので、中間
命令s3において、変数pは変数a, bを指すことが解る。
よって、中間命令s3における指示変数集合POINT[s3,p]
には変数a,bが含まれる。また、中間命令s3では変数aか
またはbが変更され、言い換えると、中間命令s3は変数
a,bの定義であるといえる。同様に中間命令s4は、変数
a, bの使用があるといえる。
【0040】尚、この指示変数集合の算出は、本方式の
等価式集合の算出をする前に既に図1のデータフロー情
報解析部13で行なっているものとする。 ・変更変数集合 中間命令sにおける関数fの呼び出しにより、値が変化す
る可能性のある変数の集合を変更変数集合ということに
し、この集合をCHANGE[s,f]と表現することとする。変
更変数集合の算出方法は、文献[1]p648-660で述べられ
ておりその詳細な説明は省略するが、図13(b)を使っ
てその概念を簡単に説明する。図13(b)は中間プログ
ラムをおける関数の呼び出し関係を、C言語記述的に示
しており、変数aは外部変数を示し、関数f1は局所変数
として変数b1,b2を持つことを示している。さらに中間
命令s1,s2において変数b1,b2のアドレスを実引数として
渡して、関数f2を呼び出している。また、関数f2では、
矢印y1のように仮引数であるポインタ変数pを使用し
て、その指示先に値を代入しており、さらに、矢印y2の
ように外部変数aに値を設定している。
【0041】よって、関数f1における中間命令s1の関数
f2の呼び出しでは、変数b1,aの値が変更される可能性が
あり、集合CHANGE[s1,f2]に変数b1,aが含まれることに
なる。同様に、集合CHANGE[s2,f2]に変数b2,a が含まれ
ることになる。尚、この変更変数集合の算出は、本方式
の等価式集合の算出をする前に既に図1のデータフロー
情報解析部13で行なっているものとする。 ・等価式集合 プログラムにおいて、ある式aを別な式bに置き換え可能
なとき、「式bは式aに等価である」又は「式bは式aと等
価性を有する」ということにする。また等価である式同
士は、「等価な関係にある」ということにする。
【0042】等価な関係にある式を一つの集合にまとめ
たものを「等価式集合」ということにする。尚、本明細
書において式は、変数、定数、単項式、2項式と定義さ
れているので、例えば、図41において、中間命令s20
の直後から中間命令s35の直前までの間で変数a4の定義
が存在せず、さらに中間命令s31の直後から中間命令s35
の直前までの間で変数a4の定義が存在しないとき、中間
命令s35の直前で式「x4+y4」と「a4」はお互いに等価な
式となり、等価式集合(x4+y4, a4)が得られる。そし
て、この等価式集合から式「x4+y4」が式「a4」に置き
換え可能となり、結果、中間命令s35を削除できること
が判明する。
【0043】一般的に、等価式集合はプログラムの点ご
とに異なり、各点において等価式集合が複数個存在す
る。例えば、図41において先ほどの変数a4の仮定の他
に、中間命令s5の直後から中間命令s35の直前まで至る
全ての経路に 変数x4,p41の定義がなく、さらに中間命
令s7の直後から中間命令s35の直前まで至る全ての経路
に変数y4,p42の定義がないとき、中間命令s35の直前で
は{(x4,p41),(y4,p42),(a4,x4+y4)}と複数の等価式集合
が得られる。また同じ仮定において中間命令s31の直後
では{(x4,p41),(y4,p42),(t42,x4+y4,a4)}となる。つま
り、一般にプログラムの点ごとに等価式集合の集合(以
下、等価式集合群という場合もある)が存在する。
【0044】また、図41の中間命令s5において、変数
x4と変数p41との等価関係が生成し、この関係が中間命
令s35の直前でも壊れず成立していることであるので、
このことを変数xと変数p1の等価な関係が、中間命令s35
の直前に「到達する」ということにする。 (第1.2章 本実施形態で引用する数学的な記述および
用語) 以下では、集合論における一般的な用法である記号を用
いる。すなわち、集合の要素であることを「∈」で、集
合の和を「∪」、集合の共通部分を「∩」、集合の差を
「−」、集合同士が等しいかまたは一方に含まれれるこ
とを「⊆」で表現する。また空集合を「φ」と表現す
る。また共通部分が空集合である集合同士は「互いに素
である」という。 また、全称記号を「∀」、存在記号
を「∃」で表現する。 ・式の全体集合E 中間命令のプログラムに現れる条件式以外の式の全体集
合をEとする。例えば、図3に記載されている式が全て
であれば、式の全体集合Eは図5(a)となる。
【0045】また、全体集合Eは一般的に数式6に示す
ように表現される有限集合である。 {数式6} E = {e1,e2,...en} 以下の説明を進めるにあたり、集合E, その巾集合(Eの
部分集合の全体)P(E),P(E)の巾集合(P(E)の部分集合
の全体)P∧2(E)とする。さらに、P∧2(E)の巾集合(P
(E)∧2の部分集合の全体)P∧4(E)とする。集合Eととも
に、一般的に次の数式7のように表現される。 {数式7} E = {e1,e2,...en} P(E) = {(e1),(e2),..(e1,e2),..(e1,e2,e3)..,E} P∧2(E) = {{(e1)},{(e2)},.. {(e1,e2)},.. {(e1,e2,e3),(e3,e4)}.. ...........{(e1,e2),(e3,e4),(e5,e6,e7)},.. P(E)...} P∧4(E) = { { {(e1)},{(e2)} },.. { {(e1,e2)}, {(e1,e2,e3),(e3,e4)} }.. { {(e1,e3),(e3,e5),(e5,e7,e9)}, {(e2,e4,e6),(e4,e8)} }.. P(E)∧2...} ・集合PR(E) P∧2(E)に属するもので、要素の集合が互いに素である
もの集合全体をPR(E)とする。形式的には次の数式8の
ようになる。 {数式8} PR(E) = {S| S∈P∧2(E), Si∈S, Sj∈S, Si≠Sj, Si
∩ Sj = φ} 例えば、{(e1,e2),(e3,e4),(e5,e6,e7)}はPR(E)に属す
るが、{(e1,e2,e3),(e3,e4)}では、e3が両方の要素に含
まれているのでPR(E)に属さない。
【0046】尚、後で示されるように等価集合群は、そ
の性質からPR(E)に属する。 ・CM関係 集合X∈P∧2(E) 上でのCM関係を次に示す。 (1)Xの要素A,Bに共通部分が存在するとき、A,BはCM関係
にあるという。形式的には次のようになる。
【0047】A,B∈X, A∩B≠φ であるとき、A,BはCM関
係にあるといい、これを 「A cm B」 と表現する。 (2)Xの要素A,B,Cにおいて、A,BがCM関係にあり、B,CもC
M関係にあるときA,CはCM関係にあるという。形式的には
次のようになる。A,B,C∈X, A,BはCM関係にありかつ、
B,CもCM関係にあるとき、A,CはCM関係にある。つまり、
A cm B かつ B cm C ならば A cm C。 (3)Xの要素Aは自身とCM関係にある。形式的には次のよ
うになる。
【0048】A∈X 自身とはCM関係にある。つまり、A c
m A。例えば、X = {(e1,e2),(e2,e3),(e3,e4),(e5,e6)}
において、それぞれの要素を、A,B,C,D とすると、A,B
は共通部分e2、B,Cは共通部分e3が存在するので、Acm
B, B cm C, A cm C である。しかし、DはA,B,Cのどれ
とも共通部分が存在しないので、A,B,CとはCM関係にな
い。
【0049】また、CM関係の定義から、CM関係は文献
[2]p351にあるような反射的((3))、対称的((1))か
つ推移的((2))な関係である。よってCM関係は同値関
係であり、集合X∈P∧2(E)はCM関係によって、互いに素
な部分集合に分割できる。例えば、X = {(e1,e3),(e2,e
4,e6),(e3,e5),(e4,e8),(e5,e7,e9)} は、CM関係によっ
て X1={(e1,e3),(e3,e5),(e5,e7,e9)}, X2={(e2,e4,e
6),(e4,e8)} という2つの部分集合に分割できる。
【0050】ここで注目する点は、分割の結果できた特
定の部分集合に属する集合の要素、例えば上述のX1にお
けるe3は、他の部分集合に属する集合、例えば上述のX2
のどの要素の集合にも属さない。 ・集合CM_PT[X] 集合CM_PT[X]は、集合X(∈P∧2(E))をCM関係により分割
した結果できる分割の集合である。尚、明らかにCM_PT
[X]∈P∧4(E) である。
【0051】例えば、上述の、X = {(e1,e3),(e2,e4,e
6),(e3,e5),(e4,e8),(e5,e7,e9)} において、CM_PT[X]
= {{(e1,e3),(e3,e5),(e5,e7,e9)},{(e2,e4,e6),(e4,e
8)}}となる。 ・集合E_SET[Y] 集合Y(∈P∧4(E))に属する要素集合P(∈P∧2(E))毎に、
集合Pに属する集合E(∈P(E))の要素e(∈E) で構成され
る、集合S(∈P(E))を集めたものが E_SET[Y](∈P∧2
(E))である。形式的には次の数式9のようになる。{数
式9} Y∈P∧4(E), E_SET[Y]集合 = {S | Pi∈Y, S = ∪Ej} Ej∈Piである。
【0052】例えば、上述の、X = {(e1,e3),(e2,e4,e
6),(e3,e5),(e4,e8),(e5,e7,e9)} および Y = CM_PT[X]
= { {(e1,e3),(e3,e5),(e5,e7,e9)}, {(e2,e4,e6),(e
4,e8)}} (∈P∧4(E)) の例で示すと、次の数式10のよ
うになる。 {数式10} E_SET[Y] = E_SET[ CM_PT[{(e1,e3),(e2,e4,e6),(e3,e5),(e4,e8),(e5,e7,e9)}] ] = E_SET[ { {(e1,e3),(e3,e5),(e5,e7,e9)}, {(e2,e4,e6),(e4,e8)} } ] = { (e1,e3,e5,e7,e9), (e2,e4,e6,e8) }となる。
【0053】更に図35は、E_SET[CM_PT[X]]集合を図
式的に表現したものであり、図35(a)は次の数式11
に示す集合のベン図である。 {数式11} X1 = (e1,e3) X2 = (e2,e4,e6) X3 = (e3,e5) X4 = (e4,e8) X5 = (e5,e7,e9) さらに、図35(b)はCM_PT[X]集合であり、図35(c)は
E_SET[CM_PT[X]]集合を図式的に表現したものである。
このように、もともと共通部分が存在する部分で連結さ
れた集合(例えば図35(a)のX1,X3,X5)が、E_SET[CM_
PT[X]]集合では一つの集合(例えば図35(b)のX1∪X3
∪X5)を形成することを示している。さらに、E_SET[CM
_PT[X]]集合はその要素である、X1∪X3∪X5および、X2
∪X4は互いに素であるので、E_SET[CM_PT[X]]集合は、P
R(E)集合に属する集合である。なおこの性質は、X以外
の一般のP∧2(E)に属する集合についても同様に成り立
つことである。
【0054】・等価和演算の定義 (演算子「∪e」の
定義) 次の数式12に示されるような集合演算を等価和演算と
呼び、その演算子を「∪e」で表現するとする。 {数式12} A,B∈PR(E) A ∪e B = E_SET[CM_PT[A∪B]] 例えば、A = {(e1,e3),(e2,e4,e6)}, B = {(e1,e3),(e
4,e8),(e5,e7,e9)} のとき、A ∪e B は次の{数式1
3}のようになる。 {数式13} A ∪e B = E_SET[CM_PT[A∪B]] = E_SET[CM_PT[(e1,e3),(e2,e4,e6),(e4,e8),(e5,e7,e9)]] = E_SET[{(e1,e3)},{(e2,e4,e6),(e4,e8)},{(e5,e7,e9)}] = {(e1,e3),(e2,e4,e6,e8),(e5,e7,e9)} また直観的には、前述の図35の説明からも解るよう
に、集合E_SET[CM_PT[X]]自体は、集合X(∈P∧2(E)) の
要素に対して、「共通部分をもつもの同士を連結して一
つの集合する」という操作を、共通部分をもつものがな
くなるまで繰り返した結果にできる集合に等しい。 ・等価和演算子∪eの性質 文献[2]p81の意味において、次のようにPR(E)上の演算
子∪eについて以下の性質がなり立つ。 (1) A ∪e A = A(同一性) [証明] 和集合「∪」の性質により、A∪A = A であり、
A∈PR(E) であるから A ∪e A = E_SET[CM_PT[A∪A]] = E_SET[CM_PT[A]] =
Aが成り立つ。(2)A ∪e B = B ∪e A(可換性) [証明] 和集合「∪」の性質により、A∪B = B∪A であ
るので、 A ∪e B = E_SET[CM_PT[A∪B]] = E_SET[CM_PT[B∪A]]
= B ∪e A が成り立つ。 (3) (A ∪e B )∪e C = A ∪e (B ∪e C)(連合性) [証明] 演算∪eの定義より明らかに、まず E_SET[ CM_P
T[A ∪ B] ] = X を行ない、さらに、E_SET[ CM_PT[X
∪ C] ] を行なったものは、はじめから、E_SET[ CM_PT
[A ∪ B ∪ C] ] を行なったものに等しい。よって、(A
∪e B )∪e C= E_SET[CM_PT[A∪B∪C]]である。
【0055】同様に、A ∪e (B ∪e C) = E_SET[CM_PT
[A∪B∪C]]でもあるので、(A ∪e B)∪e C = A ∪e (B
∪e C) が成り立つ。 ・等価積演算の定義 (演算子「∩e」の定義) 次の数式14に示されるような集合演算を等価積演算と
呼び、その演算子を「∩e」で表現するとする。 {数式14} A,B∈PR(E) A ∩e B = {C | Ai∈A, Bi∈B, C = Ai ∩ Bi} 例えば、A = {(e1,e3),(e2,e4,e6)}, B = {(e1,e3),(e
4,e8),(e5,e7,e9)}のとき、A ∩e B = {(e1,e3),(e4)}
となる。 ・等価積演算子∩e の性質 文献[3]p81の意味において、次のように集合PR(E)上の
演算子∩eについて以下の性質が成り立つ。 (1) A ∩e A = A(同一性) [証明] Ai∈A, Aj∈A, i = j のとき Ai ∩ Ai = Ai で
あり、i ≠ j において、Ai ∩ Aj = φ であるので A
∩e A = A が成立する。例えば、A = (A1,A2,...An)に
おいて、A1に着目すると、A1∩Aj = φ (n≧j>1)である
ので、結局 A1∩A = A1 しか残らない。 (2) A ∩e B = B ∩e A (可換性) [証明]∩eの定義の集合の共通部分「∩」の性質より明
らか。 (3) (A∩e B) ∩e C = A ∩e (B ∩e C)(連合性) [証明]∩eの定義の集合の共通部分「∩」の性質より明
らか。 (4) 全ての A∈PR(E) において、A ∩e φ = φ である
ので、ゼロ要素はφである。 (5) 全ての A∈PR(E) において、A ∩e {E} = A である
ので、1要素は{E}である。
【0056】以上により、文献[3]p81の意味において、
集合PR(E)は演算∩eおいてセミラテスである。 ・演算子∪eへの演算子∩eの分配 ここでは、後述の「・関数f(X) = E#GEN[B] ∪e (X∩e
[E#PRE[B]]) の単調性の証明」で使用する演算∪eに演
算∩eを分配したときの次の数式15の命題について証
明する。 {数式15} A,B,C∈PR(E) に対して、 ∀Wi∈ (A ∩e C)∪e (B∩e C), ∃Xj∈ (A ∪e B)∩e C, Wi⊆ Xj ...(a) (全てのWi∈ (A ∩e C)∪e (A∩e C)に対して、 Xj∈ (A ∪e B)∩e C が存在し、Wi⊆ Xjである。) [証明] まず、∪eの定義より、 (1)∀Ak∈ A, ∃Xl∈ A∪e B, Ak ⊆ Xl であり、 (2)∀Bm∈ B, ∃Xn∈ A∪e B, Bm ⊆ Xn である。 (3) (1)より、∀Cp∈C について、 Ak ∩ Cp ⊆ Xl∩ Cp ここで、(Ak ∩ Cp)∈(A∩e C), (Xl∩ Cp)∈((A ∪e
B)∩e C) であり、Ak, Cpは任意であるから、 ∀ACi∈(A∩e C), ∃Yj∈((A ∪e B)∩e C), ACi⊆ Yj である。 (4)(3)と同様に(2)より、∀Cq∈C について、 (Bm∩ Cq)⊆(Xn ∩ Cq) ここで、(Bm ∩ Cq)∈(B∩e C), (Xn∩ Cq)∈((A ∪e
B)∩e C) であり、Bk, Cqは任意であるから、 ∀BCi∈(B∩e C), ∃Yk∈((A ∪e B)∩e C), BCi ⊆ Yk である。 (5)(3)(4)より、 ∀Ei∈((A ∩e C)∪(B∩e C)),∃Ym∈((A ∪e B)∩e
C),Ei ⊆ Ym である。 (6)演算∪eの定義より、 Wi∈(A∩e C)∪e(B ∩e C)に対して、 分割 Pi = [Ek, Ek+1, ..,En] (Pi∈ CM#PT[(A ∩e C)∪(B∩e C)], Ei∈((A ∩e C)∪(B∩e C)) (k=1..n) ) が存在し、Wi =∪Ej j=k..n である。 (7)(6)において、Piが一つの要素しかもたないとき、つ
まりPi=[Ek]であるときは、Wi = Ek となり(5)より、Wi
⊆ Ym となるYm∈((A ∪e B)∩e C)が存在する。 (8)CM関係が推移的であることから、(6)においてPiが複
数の要素をもつときは、任意のE1,En∈Piについて、 E1∩ E2 ≠φ ................. Et-1∩ Et ≠φ Et∩ Et+1 ≠φ ................. En-1∩ En ≠φ なる、Et∈ Pi (t=1..n)が存在する。 (9) ここで、(5)より、Et⊆ Yt, Et+1 ⊆ Yt+1 (Yt,Yt+
1∈((A ∪e B)∩e C))が存在し、かつ、Et∩ Et+1 ≠φ
であるから、共通項 Yc = Et∩ Et+1は、Yt, Yt+1両方
に含まれる。つまり、 Yc ⊆ Yt かつ、Yc⊆ Yt+1 ところで、((A ∪e B)∩e C)∈PR(E) であり要素間は互
いに素であるから、Yt = Yt+1となる。 (10)E1,EnはPiの任意の要素であるので、結局、Piの全
要素がYtに含まれPiの全要素の集合和であるWiは、Ytに
含まれる。つまり、Wiに対して、Wi⊆YtなるYt∈((A ∪
e B)∩e C)が存在する。 (11)結論 (7)と(10)より、(a)が証明された。(証明終り) ・変数使用式集合 (VEXP[s,v]) ある特定の中間命令sにおいて変数vの値が更新されると
き影響を受ける式の集合を、中間命令sにおける変数vの
変数使用式集合と呼び、VEXP[s,v]と表現する。形式的
には次の数式16に示すような式の集合である。 {数式16} VEXP[s,v] = [e| eはEに属する次の形の式である。但し、opはアドレ
ス演算子&以外の任意の演算子である。
【0057】・変数v ・式「op v」 (vをオペランドとする単項式) ・式「v op b」 または、式「b op v」(vをオペランド
とする2項式) ・式「*p」 但し、v ∈ POINT[s,p] } (第1.3章 本実施形態にて特別に用いる集合) ・E_GEN集合 基本ブロックBにおける E_GEN[B]は次に示すような等価
式集合の集合である。また、別ないい方をすると、基本
ブロックBにおいて発生する等価な関係のうち、基本ブ
ロックBの出口に到達する。E_GEN[B]を求めるアルゴリ
ズムを図14に示す。
【0058】但し図14において、WSETは式の集合を保
持する作業用の変数であり、また、aは変数かまたは間
接演算式、b は式(変数、定数、単項式、2項式)であ
る。図14の文(1)は簡単にいうと、変数aを使用する式
を、WSETに属する集合Xの要素から取り去ることを意味
する。また文(2)は、ポインタ変数pが指す変数vを使用
する式を、WSETに属する集合Xの要素から取り去ること
を意味する。文(3)での処理は式aが属する集合Yが既に
集合WSETの要素として存在するなら、Yに式bを追加する
ことを意味する。文(4)での処理は式bが属する集合Yが
既に集合WSETの要素として存在するなら、Yに式aを追加
することを意味する。文(5)は新たに式a,bを要素とする
等価式集合をWSETに追加することを意味する。文(6)
は、関数fの呼び出しにより変更される可能性のある変
数vを使用する式を、WSETに属する集合Xの要素から取り
去ることを意味する。
【0059】次に図12の基本ブロックB1における集合
WSETの推移を示す。但し、図12の中間命令s4における
ポインタ変数dが指す変数は変数a,bとする。すなわちPO
INT[s4,d]={a,b}。また中間命令s6の関数fの呼び出しに
より値が変化する変数はxとする。すなわちCHANGE[s6,
f]={x}。まず中間命令s1に対する処理では、図14(5)
において{(a,b+10)}がWSETに加わり、WSET={(a,b+10)}
となる。
【0060】次に中間命令s2に対する処理では、図14
(1)において(a,b+10)から式b+10が削除されて、WSET=
{(a)}となり、次に図14(5)において{(b,x+20)}がWSET
に加わり、WSET={(a),(b,x+20)}となる。次に中間命令s
3に対する処理では、図14(5)において{(c,x+y)}がWSE
Tに加わり、WSET={(a),(b,x+20),(c,x+y)}となる。
【0061】次に中間命令s4に対する処理では、図14
(2)においてa, bを使用している式を含む(a),(b,x+20)
からa,bが削除されて、WSET={(x+20),(c,x+y)}となり、
次に図14(5)において{(*d,30)}がWSETに加わり、WSET
={(x+20),(c,x+y),(*d,30)}となる。次に中間命令s5に
対する処理では、図14(4)において(e,x+y)がWSETの要
素(c,x+y)に加わり、WSET={(x+20),(c,x+y,e),(*d,30)}
となる。
【0062】次に中間命令s6に対する処理では、図14
(6)において変数xを使用している式がWSETから削除さ
れ、WSET={(c,e),(*d,30)}となる。次に中間命令s7に対
する処理では、図14(4)において(z,*d)がWSETの要素
(*d,30)に加わり、WSET={(c,e),(*d,30,z)}となる。次
に中間命令s8に対する処理では、図14(1)において変
数aの値が変更されるので、(*d,30,z)から*dが削除さ
れ、WSET={(c,e),(30,z)}となり、図14(5)において
{(a,x+z)}がWSETに加わり、WSET={(c,e),(30,z),(a,x+
z)}となる。
【0063】以上から最終的なE_GEN[B1]の値は、{(c,
e),(30,z),(a,x+z)}となる。尚、E_GEN[B]の計算アルゴ
リズムから解るように、代入演算による等価な変数は同
じ集合に属することになるので、それぞれの集合間には
共通項が存在せず互いに素であるので、E_GEN[B]は集合
PR(E)に属する。 ・E_PRE集合 全式集合のうち、基本ブロックB内の各中間命令におけ
る変数の更新によって影響を受けない式の集合である。
E_PRE[B]を求めるアルゴリズムを図15に示す。 (第1.4章 本実施形態にて特別に用いるデータフロー
方程式) ・等価式集合に関するデータフロー方程式 上述の用語を用いて、基本ブロックBの入口、出口に到
達する式間の等価な関係を表す、等価式集合群E_IN[B],
E_OUT[B]に関するデータフロー方程式を次の数式17に
示す。 {数式17} E_IN[B] = ∩e E_OUT[P] P ∈ pred[B] E_OUT[B] = E_GEN[B] ∪e (E_IN[B] ∩e {E_PRE[B]}) この方程式を「等価な関係の到達」という観点から簡単
に説明すると、E_IN[B]は各先行ブロックの出口におけ
る等価な関係のうち、全ての出口で成立しているものの
みが、基本ブロックBの入口に到達することを意味す
る。E_OUT[B]は、基本ブロックBの出口に到達する等価
な関係は、基本ブロックBで発生する等価な関係E_GEN
[B]と、基本ブロックBの入口に到達する等価な関係のう
ちBで変更されないものであることを意味する。 ・関数f(X) = E_GEN[B] ∪e (X ∩e {E_PRE[B]}) の単
調性の証明 前述の到達する定義の説明でも触れたように、前述の等
価式集合に関するデータフロー方程式を、後述する繰り
返しアルゴリズムで解くには、文献[2]p79-p88に示すよ
うに、合流演算「∩e」において、集合PR(E)がセミラテ
スであることと(これについては既に示した)、前述の
等価式集合に関するデータフロー方程式において、基本
ブロックBにおける影響を表すE_OUT[B] の右辺のE_IN
[B]をXとおいた関数、f(X) = E_GEN[B] ∪e (X ∩e {E_
PRE[B]}) に単調性が成り立つことを証明する必要があ
る。ここでは、簡単化のためにE_GEN[B]、{E_PRE[B]}を
それぞれG, Pとして、f(X) = G ∪e (X ∩e P) の単調
性の証明について述べる。
【0064】文献[3]p81-83より、単調性の証明は次の
数式18を証明する必要がある。 {数式18} X, Y ∈ PR(E) f(X ∩e Y) ∩e (f(X) ∩e f(Y)) = f(X ∩e Y) さらに、このことを示すには、文献[3]p81より、次の数
式19を証明できれば十分である。 {数式19} 任意の Ai ∈ f(X ∩e Y), に対して、Bj ∈ f(X) ∩e
f(Y) が存在して、 Ai ⊆ Bj [証明]まず、f(X ∩e Y)およびf(X) ∩e f(Y)に実際の
関数fを適用すると次のようになる。 f(X ∩e Y) = G ∪e ((X ∩e Y) ∩e P) ...(1) f(X) ∩e f(Y) = (G ∪e (X ∩e P)) ∩e ( G ∪e (Y ∩e P)) ...(2) ここで、(2)の右辺をさらに変形する。
【0065】(2)の右辺の左側から順に「G」をA部、
「(X ∩e P)」をB部、「( G ∪e (Y ∩e P)」をC部と考
えて、C部分をA,B部分に分配すると次のようになる。 (G ∩e ( G ∪e (Y ∩e P))) ∪e ((X ∩e P)∩e(G ∪e(Y ∩e P))) ...(3) さらに、∩eの可換性から整理すると次のようになる。 (3)= ( (G ∪e (Y ∩e P)) ∩e G ) ∪e ((G ∪e (Y ∩e P)) ∩e (X ∩e P)) = S (3)の式の左側から順に最初の「G」をA部、次の「 (Y
∩e P)」をB部、次の「G」をC部、その次の「G」をA
部、次の「(Y ∩e P)」をB部、次の「(X ∩e P)」をC部
と考えてC部分をA,B部分に分配すると次のようになる。
【0066】 ( (G ∩e G) ∪e ((Y ∩e P) ∩e G) ) ∪e ( (G ∩e (X ∩e P)) ∪e ((Y ∩e P) ∩e (X ∩e P)) ) ...(4) ここで、演算∩eの同一性、交換性、連合性から整理す
ると次のようになる。 (4) = (G ∪e (G ∩e (Y ∩e P))) ∪e((G ∩e (X ∩e
P)) ∪e ((X ∩e Y) ∩e P)) さらに、演算∪eの交換性、連合性から整理すると次の
ようになる。 (4) = (G ∪e((X ∩e Y) ∩eP)) ∪e((G ∩e (Y ∩eP))
∪e (G∩e (X ∩e P))) ここで、(4)のG ∪e((X ∩e Y) ∩eP)は、(1)よりf(X
∩e Y)であるから、 (4) = f(X ∩e Y)∪e ( (G ∩e Y ∩e P) ∪e (G ∩e X ∩e P) ) = T となる。ここで、一般に次のことが成り立つ。
【0067】 X,Y∈PR(E), ∀Xi∈ X, ∃Zj∈(X ∪e Y), Xi ⊆ Zj. よって、 ∀Ai∈f(X ∩e Y), ∃Tj∈T, Ai ⊆ Tj. である。さらに、前述の「・演算子∪eへの演算子∩eの
分配」の結果から、次のことが成り立つ。
【0068】∀Ti∈T, ∃Sj∈S, Ti ⊆ Sj ∀Si∈S, ∃Bj∈(f(X) ∩e f(Y)), Si ⊆ Bj 故に、 ∀Ai∈f(X ∩e Y), ∃Bj∈(f(X) ∩e f(Y)), Ai ⊆ Bj が成立する。(証明終り) (第1.5章 本実施形態にて特別に用いるアルゴリズ
ム) ・等価式集合の繰り返しアルゴリズム 等価式集合に関するデータフロー方程式を解く、繰り返
しアルゴリズムを図16に示す。
【0069】図16のアルゴリズムは、1つのブロック
でもE_OUT[B]の値が変化しなくなるまで、全ての基本ブ
ロックBについて計算を繰り返し、結果が終了した(つ
まり収束した)ときのE_IN[B],E_OUT[B]の値が上記デー
タフロー方程式の解となる。また、直観的には図16
(1)は、基本ブロックBの出口で成り立つ等価関係とし
て、E_GEN[B]集合で示される基本ブロックB内で発生す
る等価関係の他に、E_PRE[B]集合のみを要素とする式集
合群を等価和演算で追加することにより、基本ブロック
Bで更新されない式は全て等価関係にあると仮定してい
る。これは、最終的により大きな等価集合を得るため、
つまり式のデータフロー方程式を満たす最大解を得るた
めである。 ・等価式置換アルゴリズム 等価式集合の繰り返しアルゴリズムにより求まった等価
式集合を用いた、最適化の一例である等価式置換アルゴ
リズムを図17に示す。この処理は各基本ブロック単位
に実行される。 (第2.1章 実施形態の総説)以下、本明細書に添付し
た図面を参照しながら、最適化装置の実施形態を説明す
る。ところで当業者で慣用されている最適化装置の流通
・売買の形態は、最適化装置の機能を実現する実行形式
のソフトウェアを記録媒体に記録して、パッケージソフ
トとして流通・売買する形態である。このようなパッケ
ージソフトはこれを購買した顧客により汎用コンピュ−
タにインストールされ、インストールされた汎用コンピ
ュ−タがこのソフトウェア通りの処理を行うことにより
汎用コンピュ−タは最適化装置としての機能を果たす。
【0070】上記のような形態が慣用されることを考え
ると、最適化装置としての機能主体は、汎用コンピュ−
タが具備しているプロセッサ、メモリ等のハードウェア
資源というよりは、記録媒体に記録されたソフトウェア
と考える方が妥当である。また複雑な処理内容を有する
ソフトウェアは、複数のサブルーチンやワークエリアに
て構成されることが一般的であるので、個々のサブルー
チンやワークエリアが独立した構成要素と考えるべきで
ある。以降の説明では、最適化装置の機能を果たすため
にどのような機能を果たすサブルーチン、ワークエリア
を構成要素として開発すべきかについて述べる。尚、最
適化装置の構成要素の全てを新規に開発する必要は無
く、既存のオペレーティングシステムやコンパイラ、最
適化装置等がライブラリ化しているものを利用すること
も一般的である。このように既存のサブルーチン、ワー
クエリアを利用して実現される構成要素については詳細
は述べないこととする。 (第2.2章 最適化装置の内部構成の全体像)図1は、
本発明の実施例における最適化装置1の内部構成の全体
像を示す図である。図1に示すように最適化装置は、最
適化制御部11、制御フロー情報解析部12、データフ
ロー情報解析部13、等価式情報解析部14、中間コー
ド最適化部15、等価式置換最適化部16、制御フロー
情報保持部17、データフロー情報保持部18、等価式
情報保持部19、作業用式集合保持部101より構成さ
れる。これらの構成要素の逐次解説を行う。
【0071】最適化制御部11は、最適化全体を制御す
る。制御フロー情報解析部12は、最適化制御部11よ
り起動され、従来と同様に、制御の流れが一方向である
基本ブロックに中間プログラムを分割し、基本ブロック
間の制御の流れを示す、制御フロー情報を求める。デー
タフロー情報解析部13は、最適化制御部11より起動
され、従来と同様に、前述の制御フロー情報を使用し
て、さらに中間コードを解析し、到達する定義、利用可
能式などのデータフロー情報を求める。
【0072】中間コード最適化部15は、最適化制御部
11より起動され、従来と同様に制御フロー情報とデー
タフロー情報を使用して、中間コードの最適化を行な
う。データフロー情報保持部18は、前述のデータフロ
ー情報解析部13で求めたデータフロー情報を保持す
る。制御フロー情報保持部17は、前述の制御フロー情
報解析部12で求めた制御フロー情報を保持する。
【0073】等価式情報保持部19は、前述の等価式情
報解析部14の結果である基本ブロックの入口、出口に
達する等価集合の集合を保持する。等価式情報解析部1
4は、本最適化装置1の主要部分であり、最適化制御部
11より起動され、前述の図16「等価式集合の繰り返
しアルゴリズム」を用いて大域的な依存関係の解析を、
最適化の前工程として行う。 (第2.2.1章 等価式情報解析部14を実現する全ての構
成要素)本最適化装置における解析工程の特徴部を実現
する等価式情報解析部14に焦点を絞った説明を行う。
等価式情報解析部14の内部構成を図2に示す。等価式
情報解析部14は、等価式情報生成制御部21、全体式
集合検出部22、全式集合保持部23、等価式集合生成
部24、E_GEN集合生成部25、変数使用式判定部2
6、E_PRE集合生成部27、E_GEN作業用式集合保持部2
8、E_PRE作業用式集合保持部29、E_GEN集合保持部3
0、E_PRE集合保持部31、E_IN集合保持部32、E_OUT
集合保持部33、状態保持部34、旧E_OUT集合保持部
35より構成される。等価式情報解析部14の構成要素
の逐次解説を行う。 (第2.2.2章 等価式情報生成制御部21、全体式集合
検出部22、全式集合保持部23の解説)等価式情報生
成制御部21は、等価式情報解析部14の全体を制御す
る。
【0074】全体式集合検出部22は、等価式情報生成
制御部21より起動され、プログラムに現れる全ての式
を検出し、全式集合保持部23に格納する。全式集合保
持部23はプログラムに現れる全ての式を保持する。 (第2.2.3章 等価式集合生成部24の解説)等価式集
合生成部24は、等価式情報生成制御部21より起動さ
れ、E_GEN集合、E_PRE集合、E_OUT集合、E_IN集合を各
基本ブロック毎について生成する。等価式集合生成部2
4による等価式集合生成は、大きく分けて3つのフェー
ズからなる。第1フェーズでは、各基本ブロックのE_GE
N集合及びE_PRE集合のみを生成し、第2フェーズでは、
第1フェーズにおいて生成されたE_GEN集合及びE_PRE集
合を用いて、E_OUT集合及びE_IN集合の初期化を行う。
第3フェーズでは、{数式17}のデータフロー方程式
を繰り返し解法を用いて解くことにより、生成されたE_
OUT集合及びE_IN集合の最大解を導出する。 (第2.2.4章 等価式集合生成部24の処理内容の階層
構造)図27及び図28のフローチャートに上記等価式
集合の処理内容を示す。
【0075】本フロ−チャ−トにおいて第1フェーズに
相当するのは、ステップd2におけるE#GEN集合生成部
25によるE#GEN[B]の生成と、ステップd3におけるE#
PRE集合生成部27によるE#PRE[B]の生成とを全ての基
本ブロックBについて繰り返すループ1である。フロ−チ
ャ−トにおいて第2フェーズに相当するのは、初期化ブ
ロックB1のE#OUT集合及びE#IN集合の初期化を行うステ
ップd4と、等価演算E#GEN[B2]∪eE#PRE[B2]を行う
ステップd6を初期ブロック以外の全ての基本ブロック
B2について繰り返すループ2である。
【0076】第3フェーズに相当するのは、E_IN[B3]=
∩e E_OUT[B4]、B4 ∈ pred[B3]の演算を行うステップ
d9と、 E_OUT[B3]を旧E_OUT集合保持部35に格納す
るステップd10と、E_OUT[B3] = E_GEN[B3] ∪e (E_I
N[B3] ∩e E_PRE[B3]) の演算を行うステップd11
と、E_OUT[B3]と、旧E_OUT集合保持部35との内容比較
を行うステップd12と、内容比較の結果に応じて状態
保持部34を「真」に設定するステップd13とを全て
の基本ブロックについて繰り返し行うループ3と、状態
保持部の設定が『真』に切り換わるまでループ3の起動
を繰り返させるステップd14とである。本フローチャ
ートにおける各ステップの逐次解説は後段で行う。 (第2.2.5章 E_GEN集合生成部25の解説)E_GEN集合
生成部25は、図27のフロ−チャ−トのループ1が一
巡する度に、等価式集合生成部24より起動され、前述
の図14の「E_GEN[B]の計算アルゴリズム」を用いて、
基本ブロックのE_GEN集合を生成する。図19から図2
3までのフローチャートにE_GEN集合生成部25の処理
内容を示す。E_GEN集合生成部25の処理内容は、最上
位層、中間層、最下位層からなる階層構造を有する。 (第2.2.5.1章 E_GEN集合生成部25の処理内容の階層
構造)図19のフロ−チャ−トはE_GEN集合生成部25
の階層構造における最上位層に位置し、基本ブロックに
含まれている中間命令sを解析するためのループ構造に
なっている。ループ構造に相当するのは、中間命令sが
式「a=b」の様式であるかを判定するステップb3と、
中間命令sが関数呼び出しであるかを判定するステップ
b19とを基本ブロックに属する全ての中間命令sにつ
いて繰り返すループ1であり、このループ1の繰り返しの
過程でE_GEN作業用式集合保持部28内に得られた集合
をE_GEN集合としている。
【0077】図20のフロ−チャ−トは、E_GEN集合生
成部25の階層構造における中間層に位置し、最上位層
における解析結果を受けて、更に深い内容の解析を行う
と共に、E_GEN集合の生成を行うものである。その「深
い内容の解析」に相当するのは、ステップb3において
判定された式aが変数v1であるかを判定するステップb
4と、式aが間接演算式「*p」であるかを判定するステ
ップb9であり、「E_GEN集合の生成」に相当するの
は、変数v1でも、間接演算式「*p」でも無い場合に、式
集合Y(∀式集合Y∈E_GEN作業用式集合保持部28の保
持集合)に式a及び式bが属しているかを判定するステッ
プb16をE_GEN作業用式集合保持部28に保持されて
いる全ての式集合Yについて繰り返すループ7と、ループ
7の繰り返しが継続されている期間において、一度でも
ステップb16での判定がYesと判定されると、式集合Y
に式a及び式bを加えてループ7から抜け出て、最上位層
である図19のフロ−チャ−トにリターンするステップ
b17と、ループ7における処理が全ての式集合Yについ
て繰り返されると、式a及び式bを要素とする式集合(a,
b)をE_GEN作業用式集合保持部28に格納するステップ
b18とである。
【0078】図21のフロ−チャ−トは、E_GEN集合生
成部25の階層構造における最下位層に位置し、中間層
における解析結果が「式aが変数v1」である場合のみE_G
EN集合の生成を行うものである。「E_GEN集合の生成」
に相当するのは、ステップb4において判別された変数
v1の値を中間命令sにおいて更新した場合に、式e(∀式
e∈式集合x)が影響を受けるかを判定するステップb7
と、影響を受ける場合に式集合xから式eを削除するステ
ップb8とを式集合x(∀式集合x∈E_GEN作業用式集合
保持部28の保持集合)内の全ての式eについて繰り返
すループ3と、当該ループ3をE_GEN作業用式集合保持部
28に保持されている全ての式集合xについて繰り返す
ループ2とである。
【0079】図22のフロ−チャ−トは、E_GEN集合生
成部25の階層構造における最下位層に位置し、中間層
における解析結果が「式aが間接演算式「*p」」である
場合のみE_GEN集合の生成を行うものである。変数v2
(∀変数v2∈POINT[s,p])の値を中間命令sにおいて更
新した場合に、式e(∀式e∈式集合x)が影響を受ける
かを判定するステップb13と、影響を受けると判定さ
れれば式集合xから式eを削除するステップb14とを備
え、当該ステップb13、b14を式集合x内の全ての
式eについて繰り返すループ6と、当該ループ6をE_GEN作
業用式集合保持部28に保持されている全ての式集合x
(∀式集合x∈E_GEN作業用式集合保持部28の保持集
合)について繰り返すループ5と、当該ループ5をPOINT
[s,p]に属する全ての変数v2について繰り返すループ4と
を有する。
【0080】図23のフロ−チャ−トは、E_GEN集合生
成部25の階層構造における最下位層に位置し、最上位
層における解析結果が「中間命令sが関数呼出f」である
場合にのみ、E_GEN集合の生成を行うものである。本フ
ロ−チャ−トは、変数v3(∀変数v3∈CHANGE[s,f])の
値を中間命令sにおいて更新した場合に、式e(∀式e∈
式集合x)が影響を受けるかを判定するステップb23
と、影響を受けると判定されれば式集合xから式eを削除
するステップb24とを備え、当該ステップb23を式
集合x内の全ての式eについて繰り返すループ10と、当
該ループ10をE_GEN作業用式集合保持部28に保持され
ている全ての式集合x(∀式集合x∈E_GEN作業用式集合
保持部28の保持集合)について繰り返すループ9と、
当該ループ8をCHANGE[s,f]に属する全ての変数v3につい
て繰り返すループ8とを有する。 (第2.2.6章 変数使用式判定部26の処理内容)変数
使用式判定部26は、等価式集合生成部24、E_GEN集
合生成部25及びE_PRE集合生成部27より外部から中
間命令s、変数v、式eが第1引数〜第3引数として指定
されて起動される。このようにして起動されると、変数
使用式判定部26は、第1引数として指定された中間命
令において、第2引数として指定された変数の保持値が
更新された場合、第3引数として指定された式が影響を
受けるか否かを判定する。図18にその処理内容のフロ
ーチャートを示す。本フローチャートでは、ステップa
1において式eがアドレス演算子&の式「& a」であるか
を判定し、そうでなければステップa2〜ステップa5
を起動する。そうであればこれらステップa2〜ステッ
プa5をスキップしてステップa6において自身を起動
した等価式集合生成部24、E_GEN集合生成部25及びE
_PRE集合生成部27の何れかに『No』を戻り値として返
す。
【0081】ステップa2〜ステップa5では、式eの
様式が変数vそのものみであるか(1)、式eの様式が単項
演算子op1の式「op1 v」であるか(2)、2項演算子op2の
式「aop2 v 」または、「v op2 a」であるか(3)、間接
参照演算子*の式「*p」であり、かつ指示変数集合POIN
T[s,p]に変数vが属しているか(4)を判定する。式eが上
述した(1)から(4)までの何れのケースにも合致しなけれ
ばステップa6において自身の起動元に『No』を返して
起動元にリターンするが、一つのケースに合致すればス
テップa7において自身の起動元に『Yes』を返して起
動元にリターンする。 (第2.2.7章 E_PRE集合生成部27の処理内容の階層構
造)E_PRE集合生成部27は、図27のフロ−チャ−ト
のループ1が一巡する度に、等価式集合生成部24より
起動され、前述の図15の「E_PRE[B]の計算アルゴリズ
ム」を用いて、基本ブロックのE_PRE集合を生成する。
図24から図26にそのフローチャートを示す。E_PRE
集合生成部27の処理内容は、最上位層、中間層、最下
位層からなる階層構造である。
【0082】図24のフロ−チャ−トは、E_PRE集合生
成部27の処理の最上位層に相当し、基本ブロックに含
まれる各中間命令sについての解析を行う。この解析処
理に相当するのは、中間命令s(∀中間命令s∈基本ブロ
ックB)が式「a=b」の様式であるかを判定するステップ
c3と、中間命令sが関数呼び出しであるかを判定する
ステップc13とを基本ブロックに属する全ての中間命
令sについて繰り返すループ1であり、このループ1の繰
り返しの過程でE_PRE作業用式集合保持部29内に得ら
れた集合をE_PRE集合とするステップc18を有してい
る。
【0083】図25のフロ−チャ−トは、E_PRE集合生
成部27の処理の最下位層に相当し、より深い内容の解
析処理と、その解析結果に基づいた式集合の生成を行
う。この『解析処理』に相当するのは、式aが変数v1で
あるかを判定するステップc4と、式aが間接演算式「*
p」であるかを判定するステップb9とである。ステッ
プc4において式aが変数v1と判定された場合に式集合
の生成を行うのは、判別された変数v1の値を中間命令s
において更新した場合に、式e(∀式e∈E_PRE作業用式
集合保持部29の保持集合)が影響を受けるかを判定す
るステップc6と、影響を受けると判定した場合に式e
をE_PRE作業用式集合保持部29から削除するステップ
c7とを有し、当該ステップc6をE_PRE作業用式集合
保持部29内の全ての式eについて繰り返すループ2であ
る。
【0084】ステップc11において式aが間接演算式
「*p」と判定された場合に式集合の生成を行うのは、変
数v2(∀変数v2∈POINT[s,p])の値を中間命令sにおい
て更新した場合に、式e(∀式e∈E_PRE作業用式集合保
持部29の保持集合)が影響を受けるかを判定するステ
ップc11と、影響を受けると判定されればE_PRE作業
用式集合保持部29の保持集合から式eを削除するステ
ップc12とを備え、当該ステップc11をE_PRE作業
用式集合保持部29の保持集合内の全ての式eについて
繰り返すループ4と、当該ループ4をPOINT[s,p]に属する
全ての変数v2について繰り返すループ3である。
【0085】図26のフロ−チャ−トも、E_PRE集合生
成部27の処理の最下位層に相当し、式aが関数呼出式
「f」と判定された場合に式集合の生成を行う。この式
集合生成処理に相当するのは、変数v3(∀変数v3∈CHAN
GE[s,f])の値を中間命令sにおいて更新した場合に、式
e(∀式e∈E_PRE作業用式集合保持部29の保持集合)
が影響を受けるかを判定するステップc16と、影響を
受けると判定されればE_PRE作業用式集合保持部29の
保持集合から式eを削除するステップc17とを備え、
当該ステップc16をE_PRE作業用式集合保持部29の
保持集合内の全ての式eについて繰り返すループ6、当該
ループ6をCHANGE[s,f]に属する全ての変数v3について繰
り返すループ5である。 (第2.2.8章 E_GEN作業用式集合保持部28が設けられ
ていることの意義。)E_GEN作業用式集合保持部28
は、一つの基本ブロックの中の各中間命令の実行過程に
おいて等価性が成立している全ての式を集合化して保持
する。
【0086】図3の基本ブロックBLK3内に位置する中間
命令s9から中間命令s24までの一連の中間命令に対してE
_GEN集合生成部25がE_GEN集合を生成しようとした
際、E_GEN作業用式集合保持部28がどのような要素を
集合化するかを図6(a)に示す。図6(a)では、E_GEN作
業用式集合保持部28が中間命令s9に対して処理を行っ
た場合、E_GEN集合の要素として、式『b6』と式『a5+1
0』とが追加されていることがわかる。E_GEN作業用式集
合保持部28が中間命令s10に対して処理を行った場
合、E_GEN集合の要素として、式『z6』と式『p6』とが
追加されていることがわかる。 (第2.2.9章 E_PRE作業用式集合保持部29が設けられ
ていることの意義。)E_PRE作業用式集合保持部29
は、初期状態で全式集合を保持する。保持されている全
式集合は、E_PRE集合生成部27による解析が進行する
につれ削除されてゆく。最終状態、即ち、基本ブロック
の最後の中間命令に対して影響を受ける式を特定する
と、E_PRE作業用式集合保持部29が保持している全て
の式はE_PRE集合の要素となる。図3の基本ブロックBLK
3内に位置する中間命令s9から中間命令s24までの一連の
中間命令に対して、E_PRE集合生成部27がE_PRE集合を
生成しようとした際、E_PRE集合にどのように生成され
てゆくかを図6(b)に示す。図6(b)における中間命令s2
0の欄と、中間命令s21の欄とを比較した場合、中間命令
s20の欄において記載されていた変数a4が中間命令s21の
欄では削除されていることがわかる。これは、図3の基
本ブロックBLK3の中間命令s21において変数a4が定義さ
れているからであり、本変数は、中間命令s21により影
響を受ける変数として削除されているのである。 (第2.2.10章 E_GEN集合保持部30が設けられている
ことの意義)E_GEN集合保持部30は、基本ブロックの
何れかのもののE_GEN集合をE_GEN集合生成部25が生成
すると、生成されたE_GEN集合を基本ブロック別に格納
する。図3に示す基本ブロックBLK1〜BLK6に対してE_GE
N集合生成部25がE_GEN集合を生成すると、生成された
各基本ブロック毎のE_GEN集合は、図5(b)に示すように
E_GEN集合保持部30により保持される。 (第2.2.11章 E_PRE集合保持部31が設けられている
ことの意義)E_PRE集合保持部31は、基本ブロックの
うち、何れかのもののE_PRE集合をE_PRE集合生成部27
が生成すると、生成されたE_PRE集合を基本ブロック別
に格納する。図3に示す基本ブロックBLK1〜BLK6に対し
てE_PRE集合生成部27がE_PRE集合を生成すると、生成
された各基本ブロック毎のE_PRE集合は、図5(c)に示す
ようにE_PRE集合保持部31により保持される。 (第2.2.12章 E_OUT集合保持部33が設けられている
ことの意義)データフロー方程式の最大解を求めるため
にE_OUT集合保持部33は、E_GEN集合保持部30が保持
しているE_GEN集合と、E_PRE集合保持部31が保持して
いるE_PRE集合とから初期化されたE_OUT集合を各基本ブ
ロック毎に保持する。図3に示す基本ブロックBLK1〜BL
K6についてのE_OUT集合の初期内容の一例を図7(b)に示
す。
【0087】E_GEN集合と、E_PRE集合とに加えて、E_IN
集合保持部32が保持しているE_IN集合をデータフロー
方程式を解く処理に適用することにより、データフロー
方程式を満たすE_OUT集合を各基本ブロック毎に保持す
る。一回目のループ処理の後、図3に示す基本ブロック
BLK1〜BLK6について生成されたE_OUT集合がどのように
変化したかを図8(c)に示す。収束状態のE_OUT集合を図
9(b)に示す。
【0088】状態保持部34は、等価式集合生成部24
の処理過程において、繰り返し処理の判定に使用する。
旧E_ OUT集合保持部35は、等価式集合生成部24の処
理過程において、状態保持部34に値を設定する際に使
用する。 (第2.2.13章 E_IN集合保持部32が設けられているこ
との意義)E_OUT集合保持部33が新たに保持したE_OUT
集合をデータフロー方程式を解く処理に適用することに
より、データフロー方程式を満たすE_OUT集合を各基本
ブロック毎に保持する。
【0089】一回目のループ処理の後、図3に示す基本
ブロックBLK1〜BLK6について生成されたE_IN集合がどの
ように変化したかを図8(a)に示す。等価式集合生成部
24による処理が収束し、最大解となるE_IN集合を図9
(a)に示す。 (第2.3章 等価式置換最適化部16の解説)等価式置換
最適化部16は、本発明の主要部分であり、最適化制御
部11部より起動され、前述の図17の「等価式置換ア
ルゴリズム」を用いて、中間プログラムの最適化を行な
う。図29から図34までのフロ−チャ−トは等価式置
換最適化部16の処理内容を示し、階層構造を形成して
いる。これらのフロ−チャ−トは、実際の最適化処理を
含むと共に、その最適化処理に付随した等価式集合の改
訂作業を多く含んでいる。このような改訂作業を行うの
は、最適化処理を行うと式集合の要素が変動するからで
ある。
【0090】以上で等価式情報解析部14を実現する構
成要素についての説明を終える。 (第2.3.1章 等価式置換最適化部16の処理内容の階層
構造)図29のフロ−チャ−トは等価式置換最適化部1
6の階層構造における最上位層に位置し、基本ブロック
に含まれている中間命令sを逐次解析するための二重ル
ープ構造になっている。二重ループは、中間命令sが式
「a=b」の様式であるかを判定するステップe4と、中
間命令sが関数呼び出しであるかを判定するステップe
26と、中間命令sが「if a cmp b goto label」の様式
であるかを判定するステップe32とを基本ブロックに
属する全ての中間命令sについて繰り返すループ2と、こ
のループ3を全ての基本ブロックについて繰り返すルー
プ1とにより形成される。ここでcmpは条件演算子一般を
意味している。
【0091】図30のフロ−チャ−トは、等価式置換最
適化部16の階層構造における中間層に位置し、最上位
層において中間命令sの様式が式「a=b」の様式と解析さ
れた場合に最適化を行い、その解析作業に付随した式集
合の改訂作業を行う階層である。『最適化作業』に相当
するのは、作業用式集合保持部101に式「a=b」の両
辺が保持されているかを判定するステップe5と、保持
されている場合、中間命令sの両辺は等価性が成立して
いるとしてその中間命令s自体を削除するステップe6
と、中間命令sの右辺bの様式が2項演算式「b1 op b2」
であるかを判定するステップe7と、その計算結果が定
数に置き換え可能な場合にその置き換えを敢行するステ
ップe8と、中間命令sの右辺bの様式が単項演算式「op
b1」であるかを判定するステップe9と、その計算結
果が定数に置き換え可能な場合にその置き換えを敢行す
るステップe10とである。
【0092】『解析作業に付随した改訂作業』に相当す
るのは、式aが変数であれば図31の最下位層のフロ−
チャ−トを呼び出すステップe11と、式aが間接演算
式「*p」であれば図32の最下位層のフロ−チャ−トを
呼び出すステップe16と、式集合Y(∀式集合Y∈作業
用式集合保持部101の保持集合)に式a及び式bが属し
ているかを判定するステップe23を作業用式集合保持
部101に保持されている全ての式集合Yについて繰り
返すループ8と、ループ8の繰り返しが継続されている期
間において、一度でもステップe23での判定がYesと
判定されると、式集合Yに式a及び式bを加えてループ8か
ら抜け出して、最上位層である図29のフロ−チャ−ト
にリターンするステップe24とである。
【0093】図31のフロ−チャ−トは、等価式置換最
適化部16の階層構造における最下位層に位置し、中間
層における解析結果が「式aが変数v1」である場合のみ
等価式集合の改訂作業を行うものである。「等価式集合
の改訂作業」に相当するのは、変数v1の値を中間命令s
において更新した場合に、式e(∀式e∈式集合x)が影
響を受けるかを判定するステップe14と、影響を受け
る場合に式集合xから式eを削除するステップe15とを
式集合x(∀式集合x∈作業用式集合保持部101の保持
集合)内の全ての式eについて繰り返すループ4と、当該
ループ4を作業用式集合保持部101に保持されている
全ての式集合xについて繰り返すループ3とである。
【0094】図32のフロ−チャ−トは、等価式置換最
適化部16の階層構造における最下位層に位置し、中間
層における解析結果が式『式aが間接演算式「*p」』で
ある場合のみ等価式集合の改訂作業を行うものである。
変数v2(∀変数v2∈POINT[s,p])の値を中間命令sにお
いて更新した場合に、式e(∀式e∈式集合x)が影響を
受けるかを判定するステップe20と、影響を受けると
判定されれば式集合xから式eを削除するステップe21
とを備え、当該ステップe20、ステップe21を式集
合x内の全ての式eについて繰り返すループ7と、当該ル
ープ7を作業用式集合保持部101に保持されている全
ての式集合x(∀式集合x∈作業用式集合保持部101の
保持集合)について繰り返すループ6と、当該ループ6を
POINT[s,p]に属する全ての変数v2について繰り返すルー
プ5とを有する。
【0095】図33のフロ−チャ−トは、等価式置換最
適化部16の階層構造における最下位層に位置し、最上
位層における解析結果が「中間命令sが関数呼出f」であ
る場合にのみ、等価式集合の改訂作業を行うものであ
る。本フロ−チャ−トは、変数v3(∀変数v3∈CHANGE
[s,f])の値を中間命令sにおいて更新した場合に、式e
(∀式e∈式集合x)が影響を受けるかを判定するステッ
プe30と、影響を受けると判定されれば式集合xから
式eを削除するステップe31とを備え、当該ステップ
e30、e31を式集合x内の全ての式eについて繰り返
すループ10と、当該ループ10を作業用式集合保持部1
01に保持されている全ての式集合x(∀式集合x∈作業
用式集合保持部101の保持集合)について繰り返すル
ープ9と、当該ループ8をCHANGE[s,f]に属する全ての変
数v3について繰り返すループ8とを有する。
【0096】図34のフロ−チャ−トは、等価式置換最
適化部16の階層構造における中間層に位置し、最上位
層における解析結果が中間命令sが「if a cmp b goto l
abel」である場合にのみ、条件式に対しての最適化を行
うものである。本フロ−チャ−トは、条件式「a cmp
b」の左辺式a及び右辺式bそれぞれと等価性が成立する
式であって、上記条件式を恒真とする式a1,b1が式集合
に存在するかを判定するステップe33と、そのような
式のa1,b1が存在する場合、中間命令sの条件式「a cmp
b」を「(1)」に置き換えるステップe34と、条件式
「a cmp b」の左辺式a及び右辺式bのそれぞれと等価性
が成立する式であって、上記条件式を恒偽とする式a2,b
2が式集合に存在するかを判定するステップe35と、
そのような式a2,b2が存在する場合、中間命令sの条件式
「a cmp b」を「(0)」に置き換えるステップe36とに
より条件式「a cmp b」を最適化する。 (第2.4章 これまでに示したフロ−チャ−トの各ステッ
プの逐次解説)変数使用式判定部26の処理過程を図1
8のフローチャートの逐次解説により更に具体化する。
変数使用式判定部26の起動時の引数は、中間命令sと
変数vと式eであり、中間命令sにおいて変数vの値を更新
したときに、式eが影響を受けるとき「YES」を戻り値と
して起動元に返し、そうでないとき「NO」を返す。以下
その詳細について説明する。但しaは任意の変数または
定数とし、pはポインタ変数とする。
【0097】ステップa1では、式eがアドレス演算子
&の式「& a」であるときステップa6へ進む。ステッ
プa2では、式eの様式が変数vそのものみであるときス
テップa7へ進む。ステップa3では、式eの様式が単
項演算子op1の式「op1 v」であるとき ステップa7へ
進む。
【0098】ステップa4では、式eの様式が2項演算
子op2の式「a op2 v 」または、「vop2 a」であるとき
ステップa7へ進む。ステップa5では、式eの様式が
間接参照演算子*の式「*p」であり、かつ指示変数集合
POINT[s,p]に変数vが属しているときはステップa7へ
進む。ステップa6では、NOを返して変数使用式判定部
を終了する。
【0099】ステップa7では、YESを返して変数使用
式判定部を終了する。E_GEN集合生成部25の処理過程
を図19から23のフローチャートの逐次解説により更
に具体化する。E_GEN集合生成部25を起動する際の引
数は基本ブロックBであり、E_GEN[B]を算出しこの結果
を戻り値としてE_GEN集合保持部30に格納する。以下
その詳細について説明する。
【0100】ステップb1では、E_GEN作業用式集合保
持部28を空にする。ステップb2では、基本ブロック
の先頭から順に中間命令を取り出し、取り出した中間命
令sについて、ステップb3からステップb24の処理
を実行する。基本ブロックB内の全ての中間命令につい
て、処理を終了したらステップb25へ進む。
【0101】ステップb3では中間命令sが「a = b」の
様式であれば、ステップb4からステップb18を行な
い、そうでないときはステップb19へ進む。(但し、
ここでa,b は式である。) ステップb4では、ステップb3で判別された式aが変
数v1のとき次のステップb5へ進む。そうでないときス
テップb9へ進む。
【0102】ステップb5では、E_GEN作業用式集合保
持部28に格納されている式集合Xを取り出し、取り出
した式集合Xについてステップb6からステップb8の
処理を実行する。E_GEN作業用式集合保持部28に格納
されている全ての式集合について処理を終了したらステ
ップb15へ進む。ステップb6では、ステップb5で
取り出した式集合Xに属する式を取り出し、取り出した
式eについて、次のステップb7、8の処理を実行す
る。ステップb5で取り出した式集合Xに属する全ての
式について処理を終了したら、ステップb5へ進み次の
式集合を取り出す。
【0103】ステップb7では、ステップb2で取り出
した中間命令sと、ステップb4で判別された変数v1
と、ステップb6で取り出した式eとを入力として変数
使用式判定部26を起動する。判定結果が「YES」であ
るとき次のステップb8へ進む。そうでないときはステ
ップb6へ進み次の式を取り出す。ステップb8では、
ステップb6で取り出した式eをステップb5で取り出
した式集合Xから削除する。ステップb6へ進み次の式
を取り出す。
【0104】ステップb9では、ステップb3で判別さ
れた式aが間接演算式「*p」であるとき次のステップb
10へ進む。そうでないときは、ステップb15へ進
む。ステップb10では、ステップb9で判別されたポ
インタ変数pが指す変数集合POINT[s, p]に属する変数v2
を取り出し、取り出した変数v2について、ステップb1
1からステップb14の処理を実行する。ステップb9
で判別された変数pが指す変数集合POINT[s,p]に属する
全ての変数について処理を終了したらステップb15へ
進む。
【0105】ステップb11では、E_GEN作業用式集合
保持部28に格納されている式集合を順次取り出し、取
り出した式集合Xについて、ステップb12からステッ
プb14の処理を実行する。E_GEN作業用式集合保持部
28に格納されている全ての式集合について処理を終了
したら、ステップb10へ進み次の変数を取り出す。ス
テップb12では、ステップb11で取り出した式集合
Xに属する式を順次取り出し、取り出した式eについてス
テップb13、14の処理を実行する。ステップb11
で取り出した式集合Xに属する全て式について、処理を
終了したらステップb11へ進み次の式集合を取り出
す。
【0106】ステップb13では、ステップb2で取り
出した中間命令sと、ステップb10で判別された変数v
2と、ステップb12で取り出した式eとを入力として変
数c変数使用式判定部26を起動する。判定結果が「YE
S」であるとき次のステップb14へ進む。そうでない
ときはステップb12へ進み次の式を取り出す。ステッ
プb14では、ステップb12で取り出した式eをステ
ップb11で取り出した式集合Xから削除する。ステッ
プb12へ進み次の式を取り出す。
【0107】ステップb15では、E_GEN作業用式集合
保持部28に格納されている式集合を順次取り出し、取
り出した式集合Yについてステップb16、17の処理
を実行する。E_GEN作業用式集合保持部28に格納され
ている全ての式集合について処理が終了したら、つま
り、ステップb16の判定に該当する式集合Yが存在し
なかった時、ステップb18へ進む。ステップb16で
は、ステップb15で取り出した式集合Yの中に、ステ
ップb3で判別された式aまたは式bが属しているとき、
ステップb17へ進む。そうでないときはステップb1
5へ進み次の式集合を取り出す。
【0108】ステップb17では、ステップb15で取
り出した式集合Yにステップb3で判別された式aおよび
式bを加える。ステップb2へ進み、次の中間命令を取
り出す。ステップb18では、ステップb3で判別され
た式a,bを要素とする式集合(a,b)を生成し、E_GEN作業
用式集合保持部28に格納する。ステップb2へ進み、
次の中間命令を取り出す。
【0109】ステップb19では、ステップb2で取り
出した中間命令sが関数fの呼び出しであるとき、次のス
テップb20に進み、そうでないときはステップb2へ
進み次の中間命令を取り出す。ステップb20では、ス
テップb19で判別された中間命令sにおける関数fの呼
び出しにより変更される可能性のある 変更変数集合CHA
NGE[s,f]に属する変数を順次取り出し、取り出した変数
v3について、ステップb21からステップb24の処理
を実行する。変更変数集合CHANGE[s,f]に属する全ての
変数について、処理を終了したらステップb2へ進み、
次の中間命令について処理を行なう。
【0110】ステップb21では、E_GEN作業用式集合
保持部28に格納されている式集合Xを順次取り出し、
取り出した式集合Xについて、ステップb22からステ
ップb24の処理を実行する。E_GEN作業用式集合保持
部28に格納されている全ての式集合について、処理を
終了したらステップb20へ進み次の変数を取り出す。
ステップb22では、ステップb21で取り出した式集
合Xに属する式を順次取り出し、取り出した式eについ
て、次のステップb23、24の処理を実行する。ステ
ップb21で取り出した式集合Xに属する全ての式につ
いて、処理を終了したらステップb21へ進み次の式集
合を取り出す。
【0111】ステップb23では、ステップb2で取り
出した中間命令sと、ステップb20で判別された変数v
3と、ステップb22で取り出した式eとを入力として変
数使用式判定部26を起動する。判定結果が「YES」で
あるとき次のステップb24へ進む。そうでないときは
ステップb22へ進み次の式を取り出す。ステップb2
4では、ステップb22で取り出した式eをステップb
21で取り出した式集合Xから削除する。ステップb2
2へ進み次の式を取り出す。
【0112】ステップb25では、E_GEN作業用式集合
保持部28の内容を基本ブロックBのE_GEN[B]集合とし
てE_GEN集合保持部30に格納し、E_GEN集合生成部25
の処理を終了する。E_PRE集合生成部27の処理過程を
図24から26のフローチャートの逐次解説により更に
具体化する。E_PRE集合生成部27を起動する際の引数
は基本ブロックBであり、E_PRE[B]を算出しこの結果を
戻り値としてE_PRE集合保持部31に格納する。以下そ
の詳細について説明する。
【0113】ステップc1では、全式集合保持部23に
格納されている全ての式を、E_PRE作業用式集合保持部
29に格納する。ステップc2では、基本ブロックの先
頭から順に中間命令を取り出し、取り出した中間命令s
について、ステップc3からステップc17の処理を実
行する。基本ブロックB内の全ての中間命令について、
処理を終了したらステップc18へ進む。
【0114】ステップc3では、中間命令sが「a = b」
の形であれば、ステップc4からステップc12を行な
い、そうでないときはステップc13へ進む。(但し、
ここでa,b は式である。) ステップc4では、ステップc3で判別された式aが変
数v1のとき次のステップc5へ進む。そうでないときス
テップc8へ進む。
【0115】ステップc5では、E_PRE作業用式集合保
持部29に属する式を取り出し、取り出した式eについ
て、次のステップc6、7の処理を実行する。E_PRE作
業用式集合保持部29に属する全ての式について処理を
終了したら、ステップc2へ進み次の中間命令を取り出
す。ステップc6では、ステップc2で取り出した中間
命令sと、ステップc4で判別された変数v1と、ステッ
プc5で取り出した式eとを入力として 変数使用式判定
部26を起動する。判定結果が「YES」であるとき次の
ステップc7へ進む。そうでないときはステップc5へ
進み次の式を取り出す。
【0116】ステップc7では、ステップc5で取り出
した式eをE_PRE作業用式集合保持部29から削除する。
ステップc5へ進み次の式を取り出す。ステップc8で
は、ステップc3で判別された式aが 間接演算式「*p」
であるとき次のステップc9へ進む。そうでないとき
は、ステップc13へ進む。ステップc9では、ステッ
プc8で判別された変数pが指す変数集合POINT[s,p] に
属する変数v2を取り出し、取り出した変数v2について、
ステップc10からステップc12の処理を実行する。
ステップc8で判別された変数pが指す変数集合POINT
[s,p]に属する全ての変数について処理を終了したらス
テップc2へ進み次の中間命令を取り出す。
【0117】ステップc10では、E_PRE作業用式集合
保持部29に属する式を順次取り出し、取り出した式e
についてステップc11、12の処理を実行する。E_PR
E作業用式集合保持部29に属する全て式について、処
理を終了したらステップc9へ進み次の変数を取り出
す。ステップc11では、ステップc2で取り出した中
間命令sと、ステップc9で判別された変数v2と、ステ
ップc10で取り出した式eとを 入力として変数使用式
判定部26を起動する。判定結果が「YES」であるとき
次のステップc12へ進む。そうでないときはステップ
c10へ進み次の式を取り出す。
【0118】ステップc12では、ステップc10で取
り出した式eをE_PRE作業用式集合保持部29から削除す
る。ステップc10へ進み次の式を取り出す。ステップ
c13では、ステップc2で取り出した中間命令sが関
数fの呼び出しであるとき、次のステップc14に進
み、そうでないときはステップc2へ進み次の中間命令
を取り出す。
【0119】ステップc14では、ステップc13で判
別された中間命令sにおける関数fの呼び出しにより変更
される可能性のある変更変数集合CHANGE[s, f]に属する
変数を順次取り出し、取り出した変数v3について、ステ
ップc15からステップc17の処理を実行する。変更
変数集合CHANGE[s, f]に属する全ての変数について、処
理を終了したらステップc2へ進み次の中間命令につい
て処理を行なう。
【0120】ステップc15では、E_PRE作業用式集合
保持部29に属する式を順次取り出し、取り出した式e
についてステップc16、17の処理を実行する。E_PR
E作業用式集合保持部29に属する全て式について、処
理を終了したらステップc14へ進み次の変数を取り出
す。ステップc16では、ステップc2で取り出した中
間命令sと、ステップc14で判別された変数v3と、ス
テップc15で取り出した式eとを入力として変数使用
式判定部26を起動する。判定結果が「YES」であると
き次のステップc17へ進む。そうでないときはステッ
プc15へ進み次の式を取り出す。
【0121】ステップc17では、ステップc15で取
り出した式eをE_PRE作業用式集合保持部29から削除す
る。ステップc15へ進み次の式を取り出す。ステップ
c18では、E_PRE作業用式集合保持部29の内容をE_P
RE集合保持部31に格納し、E_PRE集合生成部27の処
理を終了する。等価式集合生成部24の処理過程を図2
7、28のフローチャートの逐次解説により更に具体化
する。
【0122】ステップd1では、基本ブロックを順次取
り出し、取り出した基本ブロックBについて、ステップ
d2、3を行なう。全ての基本ブロックについて処理を
終了したらステップd4へ進む。ステップd2では、基
本ブロックBを入力としてE_GEN集合生成部25を起動
し、生成した各基本ブロックBのE_GEN集合をE_GEN集合
保持部30に格納する。
【0123】ステップd3では、基本ブロックBを入力
としてE_PRE集合生成部27を起動し、生成した各基本
ブロックBのE_PRE集合をE_PRE集合保持部31に格納す
る。ステップd4では、初期ブロックB1に関して、E_IN
集合保持部32に保持されるB1のE_IN集合を空集合に
し、さらに、ステップd2で算出されたE_GEN集合保持
部30に保持されているB1のE_GEN集合を、E_OUT集合保
持部33に保持されるB1のE_OUT集合に格納する。
【0124】ステップd5では、初期ブロックB1以外の
基本ブロックを順次取り出し、取り出した基本ブロック
B2についてステップd6の処理を実行する。初期基本ブ
ロックB1以外の全ての基本ブロックについて処理を終了
したらステップd7へ進む。ステップd6では、まず、
全式集合保持部23に保持されている全べての式集合
と、ステップd3で算出されるE#PRE集合保持部31に
保持されているB2のE#PRE集合に関して等価演算を行
なう。さらに演算結果と、ステップd2で算出されるE#
GEN集合保持部30に保持されているB2のE#GEN集合に関
して、等価和演算を行ない、演算結果をE#OUT集合保持
部33に保持される、基本ブロックB2のE#OUT集合に保
持する。ステップd5へ進み次の基本ブロックを取り出
す。
【0125】ステップd7では、状態保持部34に
「偽」を格納する。ステップd8では、基本ブロックを
順次取り出し、取り出した基本ブロックB3について、ス
テップd9からステップd13を行なう。全ての基本ブ
ロックについて処理を終了したらステップd14へ進
む。ステップd9では、基本ブロックB3の全ての先行ブ
ロックを取り出し、さらに取り出した先行ブロックB4
のE_OUT集合保持部33に保持されている基本ブロックB
4のE_OUT集合を取り出し、取り出したE_OUT集合(E_OUT
[B4])について等価積演算を行ない、演算結果をE_IN集
合保持部32に保持されるB3のE_IN集合に格納する。
【0126】ステップd10では、E_OUT集合保持部3
3に保持されている基本ブロックB3のE_OUT集合を、旧E
_OUT集合保持部35に格納する。ステップd11では、
まず、E_IN集合保持部32に保持されている基本ブロッ
クB3のE_IN集合と、ステップd3で算出されるE_PRE集
合保持部31に保持されているB3のE_PRE集合に関して
等価積演算を行なう。さらに得られた結果と、ステップ
d2で算出されるE_GEN集合保持部30に保持されてい
るB3のE_GEN集合に関して等価和演算を行ない、演算結
果をE_OUT集合保持部33に保持されるB3のE_OUT集合に
保持する。
【0127】ステップd12では、旧E_OUT集合保持部
35に格納されている内容と、E_OUT集合保持部33に
保持されている基本ブロックB3のE_OUT集合の内容を比
較し、異なっているときはステップd13へ進み、同じ
場合はステップd8へ進み、次の基本ブロックを取り出
す。ステップd13では、状態保持部34に「真」を格
納する。ステップd8へ進み、次の基本ブロックを取り
出す。
【0128】ステップd14では、状態保持部34が
「偽」であるか判定し、そうであるときステップステッ
プd7へ進む。そうでないとき、ステップd15へ進
む。ステップd15では、E_IN集合保持部32、E_OUT
集合保持部33の内容を図1の等価式情報保持部19に
格納し、等価式集合生成部の処理を終了する。等価式置
換最適化部16の処理過程を図29から図34のフロー
チャートの逐次解説により更に具体化する。
【0129】ステップe1では、基本ブロックを順次取
り出し、取り出した基本ブロックBについて、ステップ
e2からステップe36を行なう。全ての基本ブロック
について処理を終了したら等価式置換最適化部16の処
理を終了する。ステップe2では、等価式情報保持部1
9に格納されている基本ブロックBのE_IN集合を取り出
し、作業用式集合保持部101に格納する。
【0130】ステップe3では、基本ブロックの先頭か
ら順に中間命令を取り出し、取り出した中間命令sにつ
いて、ステップe4からステップe36の処理を実行す
る。基本ブロックB内の全ての中間命令について、処理
を終了したらステップe1へ進み次の基本ブロックを取
り出す。ステップe4では、ステップe3で取り出した
中間命令sが「a = b」の形であれば、ステップe5から
ステップe24を行ない、そうでないときはステップe
25へ進む。(但し、ここでa, b は式である。) ステップe5では、ステップe4で判別された式a, b
の両方を要素とする式集合が、作業用式集合保持部10
1に格納されているとき、ステップe6へ進む。そうで
ないときはステップe7へ進む。
【0131】ステップe6では、ステップe3で取り出
した中間命令sをプログラム上から削除し、ステップe
11へ進む。ステップe7では、ステップe4で判別さ
れた式bが2項演算「b1 op b2」 であるとき、ステップ
e8を行ない、そうでないときステップe9に進む。ス
テップe8では、ステップe7で判定された式「b1 op
b2」の、b1が定数c1であるかまたは、作業用式集合保持
部101に格納されている集合のうちb1が属している集
合に定数c1が含まれていて、かつ、b1同様に、b2が定数
c2であるかまたは、作業用式集合保持部101に格納さ
れている集合のうちb2が属している集合に定数c2が含ま
れているとき「定数c1 op 定数c2」の計算結果を改めて
式bとする。またプログラム上の中間命令sの式b も「定
数c1 op 定数c2」の計算結果に置き換える。次にステッ
プe11に進む。
【0132】ステップe9では、ステップe4で判別さ
れた式bが単項演算「op b1」であるとき、ステップe1
0を行ない、そうでないときステップe11に進む。ス
テップe10では、ステップe9で判定された式「op b
1」の、b1が定数c1であるかまたは、作業用式集合保持
部101に格納されている集合のうちb1が属している集
合に定数c1が含まれていているとき「op 定数c1」の 計
算結果を改めて式bとする。またプログラム上の中間命
令sの式bも「op 定数c1」の計算結果に置き換える。
【0133】ステップe11では、ステップe4で判別
された式aが変数v1であるときステップe12を行な
い、そうでないときステップe16を行なう。ステップ
e12では、作業用式集合保持部101に格納されてい
る式集合Xを取り出し、取り出した式集合Xについてステ
ップe13からステップe15の処理を実行する。作業
用式集合保持部101に格納されている全ての式集合に
ついて処理を終了したらステップe22へ進む。
【0134】ステップe13では、ステップe12で取
り出した式集合Xに属する式を取り出し、取り出した式e
について、次のステップe14、15の処理を実行す
る。ステップe12で取り出した式集合Xに属する全て
の式について 処理を終了したら、ステップe12へ進
み次の式集合を取り出す。ステップe14では、ステッ
プe3で取り出した中間命令sとステップe11で判別
された変数v1とステップe13で取り出した式eとを 入
力として変数使用式判定部26を起動する。判定結果が
「YES」であるとき次のステップe15へ進む。そうで
ないときはステップe13へ進み次の式を取り出す。
【0135】ステップe15では、ステップe13で取
り出した式eをステップe12で取り出した式集合Xから
削除する。ステップe13へ進み次の式を取り出す。ス
テップe16では、式aが間接演算式「*p」であるとき
次のステップe17へ進む。そうでないときは、ステッ
プe22へ進む。ステップe17では、ステップe16
で判別された変数pが指す変数集合POINT[s, p]に属する
変数v2を取り出し、取り出した変数v2について、ステッ
プe18からステップe21の処理を実行する。ステッ
プe16で判別された変数pが指す変数集合POINT[s,p]
に属する全ての変数について処理を終了したらステップ
e22へ進む。
【0136】ステップe18では、作業用式集合保持部
101に格納されている式集合を順次取り出し、取り出
した式集合Xについて、ステップe19からステップe
21の処理を実行する。作業用式集合保持部101に格
納されている全ての式集合について処理を終了したら、
ステップe17へ進み次の変数を取り出す。ステップe
19では、ステップe18で取り出した式集合Xに属す
る式を順次取り出し、取り出した式eについてステップ
e20、21の処理を実行する。ステップe18で取り
出した式集合Xに属する全て式について、処理を終了し
たらステップe18へ進み次の式集合を取り出す。
【0137】ステップe20では、ステップe3で取り
出した中間命令sとステップe17で判別された変数v2
と、ステップe19で取り出した式eとを入力として変
数使用式判定部26を起動する。判定結果が「YES」で
あるとき次のステップe21へ進む。そうでないときは
ステップe19へ進み次の式を取り出す。ステップe2
1では、ステップe19で取り出した式eをステップe
18で取り出した式集合Xから削除する。ステップe1
9へ進み次の式を取り出す。
【0138】ステップe22では、作業用式集合保持部
101に格納されている式集合を順次取り出し、取り出
した式集合Yについてステップe23、24の処理を実
行する。作業用式集合保持部101に格納されている全
ての式集合について処理が終了したら、つまり、ステッ
プe23の判定に該当する式集合Yが存在しなかったと
き、ステップe25へ進む。
【0139】ステップe23では、ステップe22で取
り出した式集合Yの中に、ステップe4で判別された式a
または式bが属しているとき、ステップe24へ進む。
そうでないときはステップe22へ進み次の式集合を取
り出す。ステップe24では、ステップe21で取り出
した式集合Yにステップe4で判別された式aおよび式b
を加える。ステップe3へ進み次の中間命令を取り出
す。
【0140】ステップe25では、ステップe4で判別
された式a, b を要素とする式集合(a,b)を生成し、作業
用式集合保持部101に格納する。ステップe3へ進み
次の中間命令を取り出す。ステップe26では、ステッ
プe3で取り出した中間命令sが関数fの呼び出しである
とき、ステップe27からステップe32を行ない、そ
うでないときはステップe33へ進む。
【0141】ステップe27では、ステップe26で判
別された中間命令sにおける関数fの呼び出しにより変更
される可能性のある 変更変数集合CHANGE[s,f]に属する
変数を順次取り出し、取り出した変数v3について、ステ
ップe28からステップe32の処理を実行する。変更
変数集合CHANGE[s,f]に属する全ての変数について、処
理を終了したらステップe3へ進み、次の中間命令を取
り出す。
【0142】ステップe28では、作業用式集合保持部
101に格納されている式集合Xを順次取り出し、取り
出した式集合Xについて、ステップe29からステップ
e32の処理を実行する。作業用式集合保持部101に
格納されている全ての式集合について、処理を終了した
らステップe27へ進み次の変数を取り出す。ステップ
e29では、ステップe28で取り出した式集合Xに属
する式を順次取り出し、取り出した式eについて、次の
ステップe30、31の処理を実行する。ステップe2
8で取り出した式集合Xに属する全ての式について、処
理を終了したらステップe28へ進み次の式集合を取り
出す。
【0143】ステップe30では、ステップe3で取り
出した中間命令sとステップe27で判別され た変数v3
と、ステップe29で取り出した式eとを入力として変
数使用式判定部26を起動する。判定結果が「YES」で
あるとき次のステップe31へ進む。そうでないときは
ステップe29へ進み次の式を取り出す。ステップe3
1では、ステップe29で取り出した式eをステップe
28で取り出した式集合Xから削除する。ステップe2
9へ進み次の式を取り出す。
【0144】ステップe32では、ステップe3で取り
出した中間命令sが条件分岐「if acmp b goto labe
l」(cmp: 条件演算子, label:分岐先ラベル)であると
き、ステップe33からステップe34を行ない、そう
でないときは、ステップe3へ進み次の中間命令を取り
出す。ステップe33では、条件式「a1 cmp b1」を恒
真とする、aと等価であるa1,bと等価であるb1が存在す
るとき、ステップe34を行ない、そうでないときステ
ップe35へ進む。ここでa1は, a そのものまたは、作
業用式集合保持部101に格納されているaが属する式
集合に含まれているものであり、同様にb1もbそのもの
または、作業用式集合保持部101に格納されているb
が属する式集合に含まれている。
【0145】ステップe34では、ステップe3で取り
出した中間命令sのプログラム上の条件式を「(1)」と恒
真を示す条件式に置き換える。ステップe3へ進み次の
中間命令を取り出す。ステップe35では、条件式「a1
cmp b1」を恒偽とする、aと等価であるa1,bと等価であ
るb1が存在するとき、ステップe36を行ない、そうで
ないときステップe3へ進み次の中間命令を取り出す。
ここでa1は aそのものまたは、作業用式集合保持部10
1に格納されている aが属する式集合に含まれているも
のであり、同様にb1もb そのものまたは、作業用式集合
保持部101に格納されているbが属する式集合に含ま
れている。
【0146】ステップe36では、ステップe3で取り
出した中間命令sのプログラム上の条件式を「(0)」と恒
偽を示す条件式に置き換える。ステップe3へ進み次の
中間命令を取り出す。 (第2.5章 最適化装置1の動作)以上のように構成され
る本実施形態の最適化装置1における等価式情報解析部
14と、等価式置換最適化部16について、具体的な処
理内容をこれまでに示したフローチャートを参照しなが
ら説明する。説明の前に以下では図3のプログラム例を
用いる。図3において四角で囲んだものが基本ブロック
を示している。基本ブロック内のs1: s2: などは中間命
令を表す。その他の記述はC言語の記述に準ずる。ま
た、図1の等価式情報解析部14が起動される前に、当
該解析部で使用するデータが図1のデータフロー情報解
析部13により算出される。 具体的には図4に示すも
のであり、図4(a)は図3におけるポインタ変数p5のPOI
NT集合であり、図3の中間命令s22において変数a7を指
し示すことを表している。また、図4(b)は図3におけ
る関数fの呼び出しに関するCHANGE集合であり、図3の
中間命令s20において関数fにより更新される可能性のあ
る変数がb6,z6であることを示している。これらの値は
文献[1]p648-660で示されるような方法を用いて算出さ
れる。次に図1の等価式情報解析部14の処理内容を、
図2、図19から28のフローチャート、図3から41
を参照しながら説明する。
【0147】まず、等価式情報解析部14において図2
の等価式情報生成制御部21により全体式集合検出部2
2が起動され、プログラム中に現れる条件式以外の全て
の式が検出され全式集合保持部23に格納される。図3
のプログラム例では図5(a)となる。次に等価式情報生
成制御部21に等価式集合生成部24が起動され、最終
的に各基本ブロック毎にE_IN集合、E_OUT集合が算出さ
れ図1の等価式情報保持部19に格納される。
【0148】[等価式集合生成部24の処理過程]次ぎに
等価式集合生成部24について図27、28フローチャ
ートを用いて説明する。まず、ステップd1からd3に
おいて各基本ブロックのE_GEN集合、E_PRE集合が算出さ
れる。ここで、E_GEN集合生成部25とE_PRE集合生成部
27の処理過程について説明する。 [E_GEN集合生成部25の処理過程]まず最初にE_GEN集合
生成部25の処理過程を、図3の基本ブロックB3を例
に、図18から23のフローチャートを用いて説明す
る。
【0149】まず図19のステップb1では、E_GEN作
業用式集合保持部28を空にしその内容は図6(a)の最
上段になる。次に図19のステップb2で中間命令s9が
取り出され、ステップb3で中間命令s9が「a = b 」の
形であるので図20のステップb4に進み、ステップb
4では式aが変数b6であるので図21のステップb5に
進み、ステップb5ではE_GEN作業用式集合保持部28
が空であるので図20のステップb15に進み、ステッ
プb15ではE_GEN作業用式集合保持部28が空である
ので ステップb18へ進み、ステップb18では図1
9のステップb3で判定された 式a, bに相当する中間
命令s9の 式b6, a5+10 から、式集合(b6,a5+10)が生成
され、E_GEN作業用式集合保持部28に格納される。そ
の結果、E_GEN作業用式集合保持部28の内容は図6(a)
の中間命令s9の段になる。
【0150】次に図19のステップb2に戻り中間命令
s10が取り出され、ステップb3で中間命令s10が「a =
b 」の形であるので図20のステップb4に進み、ステ
ップb4では式aが変数z6であるので図21のステップ
b5に進み、ステップb5では E_GEN作業用式集合保持
部28から式集合(b6,a5+10)が取り出だされ、ステップ
b6では式集合(b6,a5+10)から式b6が取り出され、ステ
ップb7では中間命令s10、変数z6、式b6を入力として
変数使用式判定部26が起動される。次に変数使用式判
定部26の図18のステップa1からa5では式b6はど
の条件にも合致しないので、ステップa6で「NO」が起
動先の図21のステップb7に返される。ステップb7
では「NO」が返されたのでステップb6へ進み、次の式
「a5+10」が取り出され、ステップb7では中間命令s1
0、変数z6、式「a5+10」を入力として変数使用式判定部
26が起動される。図18のステップa1からa5が実
行されるが式「a5+10」はどの条件にも合致しないの
で、ステップa6が実行され「NO」が返される。図21
のステップb7で再びステップb6に進むが取り出すべ
き式がないので、ステップb5へ進む。しかしステップ
b5でも取り出すべき次の式集合が、E_GEN作業用式集
合保持部28にないので図20のステップb15へ進
む。ステップb15ではE_GEN作業用式集合保持部28
から式集合(b6,a5+10)が取り出され、ステップb16で
は式集合(b6,a5+10)に式z6, p6ともに属していないので
ステップb15に進む。しかしステップb15では次の
式集合が存在しないのでステップ18に進む。ステップ
18では式集合(z6, p6)が生成され、E_GEN作業用式集
合保持部28に格納される。その結果、E_GEN作業用式
集合保持部28の内容は図6(a)の中間命令s10の段にな
る。
【0151】以下同様に中間ステップs11からs24まで処
理した結果、E_GEN作業用式集合保持部28の内容は図
6(a)の中間命令s24の段になる。 特に図3の中間命令
s18の処理では、変数b2が更新されるため図21のステ
ップb8において、図6(a)の中間命令s17の段における
式集合(a7,p7+b2)から式「p7+b2」が削除され、さら
に、図20のステップb16において式「t21」が中間
命令s17の段における式集合(t21,a)に属しているので、
ステップb17で式集合(t21,a)に式「b2」が加えられ
る。また、図3の中間命令s20の処理では、中間命令s20
が関数f1の呼び出しであるので、図19のステップb1
9の判定で「YES」となり、次に図23のステップb2
0からステップb24が実行されて、図4(b)の関数f1
のCHANGE集合に属する変数b6,z6が関数f1の呼び出しに
よって更新される可能性があるため、図23のステップ
b24において、図6の中間命令19の段における式集合
(z6,p6),(b6,a5+10)から 式z6,p6がそれぞれ削除され
る。また、図3中間命令s22の処理では、図20のステ
ップb9の判定で「YES」と判定なり、次に図22のス
テップb10からステップb14が実行されて、図4
(a)の変数p5の中間命令s22における指示変数集合に属す
る変数a7が更新される可能性があるため、図6の中間命
令21の段における式集合(a7),(z7,a7)から式a7が削除さ
れる。
【0152】次に図3の中間ステップs24は基本ブロッ
クB3 の最後の中間命令であるので、この中間命令に
対する処理が終ると図19のステップb25が実行さ
れ、図6(a)の中間命令s24の段の内容が E_GEN集合保持
部30に格納されて、図5(b)の基本ブロックBLK3の段
の内容となる。以下同様に、基本ブロックBLK1,BLK2,BL
K4,BLK5,BLK6に対してE_GEN集合生成部25が実行さ
れ、結果は図5(b)となる。 [E_PRE集合生成部27の処理過程]次に、E_PRE集合生成
部27の処理過程を、図3の基本ブロックBLK3を例に、
図24から26のフローチャートを用いて説明する。
【0153】まず最初に図24のステップc1が実行さ
れて、図6(b)の最上段のように、図2の全体式集合検
出部22で算出した 図5(a)の全式集合保持部23の内
容を図2のE_PRE作業用式集合保持部29に格納する。
次に図24のステップc2で中間命令s9が取り出され、
ステップc3で中間命令s5が「a = b 」の形であるので
図25のステップc4に進み、ステップc4では式aが
変数b6であるので同図のステップc5に進む、ステップ
c5ではE_PRE作業用式集合保持部29に格納されてい
る図6(b)の最上段の 式「x5」が取り出されステップc
6に進み、ステップc6では中間命令s9、変数b6、式
「x5」を入力として変数使用式判定部26が起動され、
図のステップa1からa5が実行されるが式「x5」はど
の条件にも合致しないので、ステップa6が実行され
「NO」が返される。同様に図6(b)の最上段の残りの式
に対してステップc5からステップ7までの処理が行な
われる。特にE_PRE作業用式集合保持部29に格納され
ている図6(b)の最上段の式「b6」に対しては、ステッ
プc6で変数使用式判定部26の判定で「YES」が返さ
れ、ステップc7でE_PRE作業用式集合保持部29から
式「b6」が削除される。
【0154】以下同様に中間ステップs10からs24まで処
理した結果、E_PRE作業用式集合保持部29の内容は図
6(b)の中間命令s24の段になる。特に、中間命令s18で
はE_PRE作業用式集合保持部29から図25のステップ
c7において式「b7+b2」、「b2」が削除される。また
中間命令s20では図4(b)に示す関数f1のCHANGE集合に属
する変数b6,z6が図26のステップc14で取り出さ
れ、取り出された変数b6,z6それぞれに対して同様の処
理が行なわれるので、E_PRE作業用式集合保持部29か
ら変数b6,z6を使用する式が削除される。但し、この例
では既に中間命令s9,s10で変数b6,z6を使用する式が削
除されているので、中間命令s20に関する処理によってE
_PRE作業用式集合保持部29の内容に変化はない。また
中間命令s22では図4(a)に示す変数p5の中間命令s22に
おける指示変数集合に属する変数a7が図25のステップ
c9で取り出され、取り出された変数a7に対して同様の
処理が行なわれるので、E_PRE作業用式集合保持部29
から変数a7を使用する式が削除される。
【0155】但し、この例では既に中間命令11で変数a7
を使用する式が削除されているので、中間命令s22関す
る処理によってE_PRE作業用式集合保持部29の内容に
変化はない。次に図3の中間ステップs24は基本ブロッ
クB3 の最後の中間命令であるので、この中間命令に
対する処理が終ると図24のステップc18が実行さ
れ、図6(b) の中間命令s24の段の内容がE_PRE集合保持
部31に格納されて、図5(c)の基本ブロックBLK3の段
の内容となる。
【0156】以下同様に、基本ブロックBLK1,BLK2,BLK
4,BLK5.BLK6に対してE_PRE集合生成部27が実行され、
結果は図5(c)となる。 [等価式集合生成部24の処理過程の続き]次に等価式集
合生成部24の処理に戻って図27ステップd4に進
み、図3の初期ブロックBLK1のE_IN集合が空集合にさ
れ、さらにステップd5、d6において基本ブロックBL
K1以外の基本ブロックに関して、E_OUT集合の初期値を
求められる。例えば基本ブロックBLK3では、図5(b)の
基本ブロックBLK3のE_GEN集合 E_GEN[BLK3]と同図(c)の
E_PRE集合 E_PRE[BLK3]が取り出され、E_GEN[BLK3]と、
E_PRE[BLK3]のみを要素とする集合{E_PRE[BLK3]} に対
して等価和演算が行なわれ、その結果図7(b)の基本ブ
ロックBLK3のE_OUT集合が得られる。同様にその他の基
本ブロックに対して処理を行なった結果を図7(b)に示
す。
【0157】次に図28ステップd7に進み、図2の状
態保持部34が「偽」にされ、ステップd8においてま
ず図3の基本ブロックBLK1が取り出され、ステップd9
では基本ブロックBLK1の先行ブロックは存在しないの
で、E_IN[BLK1]集合が空集合になり結果が図8(a)のよ
うに基本ブロックBLK1の場所に格納される。ステップd
10では現時点でのE_OUT[BLK1]集合が図3の旧E_OUT集
合保持部35に格納される。よって図6(c)(1)のように
図7(b)の基本ブロックBLK1のE_OUT集合が旧E_OUT集合
保持部35に格納される。次にステップd11では図7
(a)に示すとおり、基本ブロックBLK1のE_IN集合が空集
合なので新しいE_OUT集合は図5(b)の基本ブロックBLK1
のE_GEN集合となる。よって図8(c)のように基本ブロッ
クBLK1の場所に格納される。次にステップd12では、
図8(c)の基本ブロックBLK1のE_OUT集合の内容と、図6
(c)(1)に示す旧E_OUT集合保持部35の内容が比較され
同じあるのでステップd8へ進む。
【0158】次にステップd8では、次の基本ブロック
BLK2が取り出され、ステップd9において基本ブロック
BLK2の先行ブロックである 基本ブロックBLK1とBLK5のE
_OUT集合に対して等価積演算が行なわれる。よって新た
に求められて基本ブロックBLK1のE_OUT集合である図8
(c)の基本ブロックBLK1のE_OUT集合と、図7(b)の基本
ブロックBLK5のE_OUT集合の間で等価積演算が行なわ
れ、結果が図8(a)の基本ブロックBLK2のE_IN集合に格
納される。
【0159】次にステップd10では基本ブロックBLK2
の旧E_OUT集合である図7(b)の基本ブロックBLK2のE_OU
T集合が、図6(c)(2)のように旧E_OUT集合保持部35に
格納される。次にステップd11では、まず図8(a)の
基本ブロックBLK2のE_IN集合E_IN[BLK2]と図5(c)の基
本ブロックBLK2のE_PRE集合E_PRE[BLK2]が取り出され、
集合E_IN[BLK2]と、集合E_PRE[BLK2]を唯一要素とする
集合{E_PRE[BLK2]}に対して等価積演算が行なわれる。
その結果は図8(b)の基本ブロックBLK2の段の内容とな
る。
【0160】次に図5(b)の基本ブロックBLK2のE_GEN集
合と、先に求めた図8(b)の基本ブロックBLK2の段内容
との間に等価和演算が行なわれ、その結果が図8(c)の
基本ブロックBLK2のE_OUT集合に格納される。次にステ
ップd12では、図8(c)の基本ブロックBLK2のE_OUT集
合の内容と、図6(c)(2)に示す旧E_OUT集合保持部35
の内容が比較され、異なるのでステップd13に進み状
態保持部34が「真」に設定される。
【0161】以下基本ブロックBLK3, BLK4, BLK5, BLK6
に対しても同様に処理が行なわれ、その結果は図8に
示すとおりとなる。次にステップd14に進み状態保持
部34が「真」か判定し、「真」であるのでステップd
7に戻り、ステップd8から再び全ての基本ブロックに
ついてE_IN集合とE_OUT集合を再計算する。しかし、図
3の例では、ステップd8の2回目のループ処理におい
て、基本ブロックBLK1のE_OUT集合に変化はなく、さら
に、基本ブロックBLK1のE_OUT集合と基本ブロックBLK5
のE_OUT集合の間で行なわれる等価積演算の結果は、基
本ブロックBLK2のE_IN集合と同じである。よって、基本
ブロックBLK2のE_OUT集合にも変化がなく、結局、基本
ブロックBLK3, BLK4,BLK5, BLK46の各E_OUT集合にも変
化がなくなるので、状態保持部34が「偽」のままとな
る。よって、ステップd8の2回目のループ処理が終了
した後はステップd12の判定が「NO」となり次にステ
ップd15に進み、ステップd15では、図8(a)(b)の
内容が図9に示すように図1の等価式情報保持部19に
格納され、等価式集合生成部24の処理が終了する。
【0162】次に図1の等価式置換最適化部16の処理
内容を、図3の基本ブロックBLK5,BLK4, BLK2に対する
処理について、図29からの図34のフローチャート、
図9、42を参照しながら主要な要点を説明する。 [基本ブロックBLK2に対する処理の説明]まずはじめ
に、基本ブロックBLK2に対する処理について説明する。
図29のステップe2において図9(a)の基本ブロックB
LK2のE_IN集合 E_IN[BLK2]が図1の作業用式集合保持部
101へ格納され、図10(a)の最上段の内容になる。
次にステップe3で図3の中間命令s5が取り出され、以
後ステップe4、図30のステップe5、e7、e9、
e11と実行され、さらに図31のステップe12から
e15では中間命令s5の左辺である変数x4の更新によっ
て影響を受ける作業用式集合保持部101に格納されて
いる式集合が変更される可能性があるが、この場合は変
数x4によっては変更されない。次に図30のステップe
22へ進み、ステップe22からe24が実行される。
特に中間命令s5の変数p41が属する式集合(p41,10)が 作
業用式集合保持部101に格納されているので、ステッ
プe24において式集合(p41,10)に中間命令s5の変数x4
が追加される。中間命令s5に関する処理の結果、作業用
式集合保持部101の内容は図10(a)の中間命令s5の
段となる。
【0163】次に図3の中間命令s6が図29のステップ
e3で取り出され、中間命令s5と同様に処理される。但
し、中間命令s6の場合は図30のステップe23におい
て、作業用式集合保持部101格納されている全ての式
集合に関して「NO」と判定されるので、ステップe25
において式集合(t32,x3)が作業用式集合保持部101に
追加され、その結果、作業用式集合保持部101の内容
は図10(a)の中間命令s6の段となる。 次に図3の中
間命令s7が図29のステップe3で取り出されるが、こ
れも中間命令s5と同様に処理が施され、結果、作業用式
集合保持部101の内容は図10(a)の中間命令s7の段
となる。
【0164】次に図3の中間命令s8が図29のステップ
e3で取り出され、中間命令s5と同様に処理が進むが、
図29のステップe32の判定で「YES」と判定され図
34のステップe33に進む。ここで、中間命令s8の式
「b5」「x5」の両方が属する式集合(x5, b5)が、図10
(a)の中間命令s7の段に存在し、変数x5とb5が等価であ
ることが判明するので、条件式「b5 == x5」は恒真とな
る。よってステップe34において図3のプログラム上
の中間命令s8の条件式を恒真であることを示す「(1)」
に置き換える。置き換えた結果を図11の中間命令s8に
示す。
【0165】次に基本ブロックBLK4, BLK5に関する処理
は、原則的には基本ブロックBLK2と同等であるので、説
明を省くためにその特徴的な処理部分についてのみ説明
を行なう。 [基本ブロックBLK4に対する処理の説明]まず、図3の
基本ブロックBLK4の中間命令s25からs27に関しては、基
本ブロックBLK2の中間命令s5やs6と同様な処理が行なわ
れ、その結果、作業用式集合保持部101の内容は図1
0(b)の中間命令s27の段となる。次に中間命令s28の処
理では、ステップe6において中間命令s28の式「x4+y
4」が取り出され、変数x4,y4のそれぞれが、作業用式集
合保持部101の中間命令s27の段の式集合(x4,p41,1
0),(y4,p42,20)に属するので、変数x4,y4はそれぞれ定
数10, 20 と等価になり、結果、式「x4+y4」は定数30と
等価となって図3の中間命令s28は図11の中間命令s28
のように置き換えられる。
【0166】[基本ブロックBLK5に対する処理の説明]
図3基本ブロックBLK5の 中間命令s33を処理する前の作
業用式集合保持部101の内容は図10(c)の最上段と
なる。ここで図10(c)の最上段には、中間命令s33の変
数a1,b1の両方が属する式集合(b1,a1)が存在するので、
図30のステップe5で「YES」と判定され、ステップ
e6でプログラムから中間命令s33が冗長な中間命令と
して削除される。 中間命令s34からs38の中間命令につ
いても中間命令s33と同様に冗長な中間命令として削除
されるので、その結果、図3の基本ブロックBLK5は図1
1の基本ブロックBLK5にように置き換えられる。
【0167】また、上記の説明で現れなかった図32、
33のフローチャートに示す処理は、基本ブロックBLK3
の中間命令s22およびs20のような間接参照式が代入の左
辺に現れる中間命令や、関数呼び出しの中間命令のとき
に実行されるものであり、これは前述のE_GEN集合生成
部25の処理過程で説明した図22、23の動作と同様
な処理をする。
【0168】そして、残りの基本ブロックについても同
様に処理されて、その結果、図3のプログラムは図11
のように最適化される。このような本発明によれば、基
本ブロックに跨って等価式集合を各中間命令毎に求める
ことが可能となり、等価式集合を使用してさらにプログ
ラムの冗長性を削除するプログラム最適化が可能とな
る。
【0169】尚、図11の結果から中間命令s8の条件式
が恒真であるので基本ブロックBLK3は実行されないこと
が解る。よって、図1の等価式置換最適化部16を実行
した後に、再び、中間コード最適化部15を起動して従
来の制御フローに対する最適化を行ない基本ブロックBL
K3を削除してもよい。また、図1の等価式置換最適化部
16を複数回繰り返してさらに最適化を行なってもよ
い。
【0170】また、図1の中間コード最適化部15に等
価式置換最適化部16を組み入れて、中間コード最適化
部15と等価式置換最適化部16を複数回数繰り返して
さらに最適化を行なってもよい。
【0171】
【発明の効果】以上説明したように、各命令の左辺及び
右辺の何れか一方に位置する式を他の式に置き換えても
プログラムの実行が等価であることを示す式間の等価性
を解析することにより、分岐元−分岐先の関係に基づい
て複数の基本ブロックに分割されたプログラムを最適化
する最適化装置であって、プログラム内の各基本ブロッ
クの出口において、等価性が成立する式からなる等価式
集合E_OUTの初期集合を求める初期化手段と、初期集合
たるE_OUTを[方程式1]に代入して、各基本ブロック入
口において等価性が成立する式からなる等価式集合E_IN
を得る第1解析手段と、[方程式1]から求められたE_IN
を[方程式2]に代入し、E_OUTを得る第2解析手段と、
[方程式2]で求められたE_OUTを[方程式1]に代入する
解法を繰り返し行い、E_INの収束解を得る繰返手段と、
\u収束解たる\u等価式集合E_INを用いて各基本ブロック
内に位置する先頭命令から終了命令までを最適化するブ
ロック内最適化手段とを備える最適化装置によれば、
数基本ブロックの境界部の等価性発生−消滅をE_IN、E_
OUT集合の形式で表しながら、式間の大域的な等価性を
高精度に解析することができる。この繰り返しを何度も
行えば、プログラム内の基本ブロックが如何なる実行順
序で実行されても基本ブロックの入口で必ず等価性が成
立する式を集合化することができ、これを利用した大域
的な最適化を安全に行うことができる。
【0172】また、等価性の変動が無くなるまでデータ
フロー方程式を解くために第1、第2解析手段は等価和
演算、等価積演算を繰り返し行う。
【0173】データフロー方程式は、その単調性が保証
された関数であるため、データフロー方程式を解く繰り
返し作業は有限時間内に完了することが保証されてい
る。またデータフロー方程式は、全式集合のうち、各基
本ブロックに含まれている先頭命令から最終命令までの
実行により更新されないものからなる等価式集合E_PRE
と、各基本ブロックで生成される等価式集合E_GENとに
より各基本ブロックのE_OUT集合が初期化されるので、
データフロー方程式の繰り返し作業により最大解を導き
出すことができる。
【0174】各基本ブロックの等価式集合E_INに基づい
て基本ブロック内に位置する各々の命令に対しての等価
式集合が算出すれば、当該命令で使用される式と等価な
式に置き換えることができ、冗長性が排除された命令へ
の置き換えが可能となる。よってプログラムの冗長性が
削減されて、結果的にコンパイラが生成する機械語プロ
グラの実行時間の短縮化や、プログラムサイズの縮小化
が可能となる。
【0175】
【0176】また、[方程式2]により得られた等価式集
合E_OUTを過渡的な集合として記憶する過渡集合記憶部
と、過渡集合を記憶した後、解法の繰り返しにより新た
な等価式集合E_INが[方程式2]により得られると、両者
を照合する照合部と、照合した結果、記憶されている過
渡集合と、新たな等価式集合E_OUTとが一致すると、記
憶された過渡集合たる等価式集合E_OUTと共に得られた
等価式集合E_INが収束解であるとの判定を下す判定部と
を備えることを特徴としている。この構成によれば、デ
ータフロー方程式を解く繰り返し作業の起動が適格性を
満たすまで繰り返し行われるので、大域的な基本ブロッ
クの最適化に求められる高精度な解を導き出せることが
できる。
【0177】
【0178】また、前記等価式集合E_GEN生成手段は、
等価性成立を解析すべき命令を取り出す第1取出部と、
各基本ブロックに含まれている先頭命令からそれまで取
り出された命令までの間に等価性成立が明らかになった
式の集合を保持しているE_GEN作業用保持部と、取り出
された命令が代入であり、かつ代入の左辺が変数である
場合、当該変数の代入により影響を受ける式を前記E_GE
N作業用保持部が保持する式集合から削除する第1のE_G
EN作業用保持部更新部と、取り出された命令が代入であ
り、かつ代入の左辺が間接演算式である場合、当該間接
演算式により更新される可能性のある変数によって影響
を受ける式を前記E_GEN作業用保持部が保持する式集合
から削除する第2のE_GEN作業用保持部更新部と、取り
出された命令が代入であり前記E_GEN作業用保持部が保
持する式集合の中に、当該命令における両辺のいずれか
の式を含む式集合がある場合、当該命令の両辺の式を当
該式集合に追加し、当該式集合が存在しないとき新たに
当該命令の両辺を要素とする式集合を生成して前記E_GE
N作業用保持部に追加する第3のE_GEN作業用保持部更新
部と、命令が関数呼び出し命令である場合、関数呼び出
し命令によって更新される可能性のある変数によって影
響を受ける式を前記E_GEN作業用保持部が保持する式集
合から削除する第4のE_GEN作業用保持部更新部とを備
えることを特徴としている。この構成によれば、式間の
等価関係を等価式集合のデータフロー解析で求めること
が可能となり、等価関係の抽出を少ない時間で行なうこ
とが可能となる。また、基本ブロックに跨った式間の等
価関係が取得でき、より情報量の多い等価集合が得られ
るのでさらにプログラム全体の冗長性が削減されて、結
果的にコンパイラが生成する機械語プログラの実行時間
の短縮化や、プログラムサイズの縮小化が可能となる。
【0179】また、ブロック内最適化手段は、収束解た
等価式集合E_INを保持し、基本ブロック内の命令に対
しての最適化が開始されると、その保持集合に対してこ
れまでに行われた同基本ブロック内の最適化に伴った更
新がなされた等価式集合を保持している作業用保持部
と、基本ブロックの先頭命令から末尾命令までを順番に
取り出す第3取出部と、取り出された式に対して最適化
を行う命令最適化手段と、式が最適化されると、作業用
保持部の保持集合を更新する更新手段とを備えることを
特徴としている。この構成によれば、代入命令の両辺の
式が等価関係にあるとき、当該代入命令が削除される。
【0180】また、前記ブロック内最適化手段は、等価
式集合の集合を保持する作業用保持部を前記等価式集合
E_INに設定する作業用保持部初期化手段を備え、命令最
適化手段は、取り出された命令を、等価式集合保持部が
保持している等価式集合内の式のうち、その式を等価性
を有する式に置換することにより冗長性を削除する第1
の冗長性削除部と、取り出された命令が代入でありかつ
代入の両辺の式が、前記作業用保持部が保持する同一の
式集合に含まれている場合、プログラム上の当該命令を
削除する第2の冗長性削除部とを備え、更新手段は、取
り出された命令が代入でありかつ代入の左辺が変数であ
る場合、当該変数の代入により影響を受ける式を前記作
業用保持部が保持する式集合から削除する第1の作業用
保持部更新部と、取り出された命令が代入でありかつ代
入の左辺が間接演算式である場合、当該間接演算式によ
り更新される可能性のある変数によって影響を受ける式
を、前記作業用保持部が保持する式集合から削除する第
2の作業用保持部更新部と、取り出された命令が代入で
ありかつ、前記作業用保持部が保持する式集合の中に、
当該命令における両辺のいずれかの式を含む式集合があ
る場合、当該命令の両辺の式を当該式集合に追加し、当
該式集合が存在しないとき新たに当該命令の両辺を要素
とする式集合を生成し前記作業用保持部に追加する第3
の作業用保持部更新部と、取り出された命令が関数呼び
出し命令である場合、関数呼び出し命令によって更新さ
れる可能性のある変数によって影響を受ける式を、前記
作業用保持部が保持する式集合から削除する第4の作業
用保持部更新部と、前記作業用保持手段初期化手段を起
動し、次に基本ブロック内の全ての命令に対して、前記
第1、第2の冗長性削除部を起動しさらに、前記第1、
2、3、4の作業用保持手段更新部を順番に起動する等
価置換最適化制御部とを備えることを特徴としている。
【0181】この構成によれば、式の等価関係から可能
であれば式を定数に置き換えて冗長が削除される。ま
た、ブロック内最適化手段は、命令が代入である場合、
右辺の式が前記作業用保持部が保持する式集合の中に含
まれていて、当該式集合に定数が含まれているときは、
当該定数で当該命令の右辺を置き換え、当該右辺の式が
2項演算や単項演算であって当該演算で使用されている
一つないし二つの変数が前記作業用保持部が保持する式
集合の中に含まれており、かつ当該式集合に定数が含ま
れている場合、変数を定数に置き換えて当該演算を行な
い、当該演算結果の定数値で当該命令の右辺を置き換え
る第3の冗長性削除部を有し、前記等価置換最適化制御
部は、前記作業用保持部初期化手段を起動し、次に基本
ブロック内の全ての命令に対して、 前記第1、2、3
の冗長性削除部を起動しさらに前記第1、2、3、4の
作業用保持部更新部を順番に起動することを備えること
を特徴としている。この構成によれば、条件式を可能で
あれば式の等価関係から恒真や恒偽に置き換えて冗長が
削除され、また、基本ブロック内の最適化時に基本ブロ
ック内の各命令の冗長性の削除とともに、各命令て更新
される変数によって更新される式を考慮にいれて、等価
式集合を各命令毎に生成するので、より良い精度の高い
等価式を各命令で求めることが可能であるので、結果的
にコンパイラが生成する機械語プログラの実行時間の短
縮化や、プログラムサイズの縮小化が可能となる。
【図面の簡単な説明】
【図1】実施形態に係る最適化装置1の構成図である。
【図2】等価式情報解析部14の構成図である。
【図3】具体的な動作の説明に使用するプログラム例で
ある。
【図4】(a)POINT集合の一例を示す図である。 (b)CHANGE集合の一例を示す図である。
【図5】(a)全式集合保持部23の具体的な内容を示
す図である。 (b)E_GEN集合保持部30の具体的な内容を示す図で
ある。 (c)E_PRE集合保持部31の具体的な内容を示す図で
ある。
【図6】(a)E_GEN作業用式集合保持部28の保持内
容の推移を示す図である。 (b)E_PRE作業用式集合保持部29の保持内容の推移
を示す図である。 (c)旧E_OUT集合保持部35の保持内容の推移であ
る。
【図7】(a)E_IN集合保持部32の初期内容を示す図
である。 (b)E_OUT集合保持部33の初期内容を示す図であ
る。
【図8】(a)E_IN集合保持部32の1回目のループ処
理後の内容を示す図である。 (b)E_IN集合とE_PRE集合の間での等価積演算後の結
果である。 (c)E_OUT集合保持部33の1回目のループ処理後の
内容を示す図である。
【図9】(a)等価式情報保持部19のE_IN集合の内容
を示す図である。 (b)等価式情報保持部19のE_OUT集合の内容を示す
図である。
【図10】(a)基本ブロックBLK2処理時の作業用式集
合保持部101の保持内容の推移を示す図である。 (b)基本ブロックBLK4処理時の作業用式集合保持部1
01の保持内容の推移を示す図である。 (c)基本ブロックBLK5処理時の作業用式集合保持部1
01の保持内容の推移である。
【図11】図3のプログラムに対する等価式置換最適化
部16を行なって最適化した後のプログラムである。
【図12】E_GEN集合の生成過程の例を示す説明図であ
る。
【図13】(a)指示変数集合の例を示す説明図である。 (b)変更変数集合の例を示す説明図である。
【図14】E_GEN集合]の計算アルゴリズムである。
【図15】E_PRE集合の計算アルゴリズムである。
【図16】等価式集合の計算アルゴリズムである。
【図17】等価式置換による最適化のアルゴリズムであ
る。
【図18】変数使用式判定部26の処理のフローチャー
トである。
【図19】E_GEN集合生成部25の最上位層の処理内容
を示すフローチャートである。
【図20】E_GEN集合生成部25の中間層の処理内容の
フローチャートである。
【図21】E_GEN集合生成部25の最下位層の処理内容
のフローチャートである。
【図22】E_GEN集合生成部25の最下位層の処理内容
のフローチャートである。
【図23】E_GEN集合生成部25の最下位層の処理内容
のフローチャートである。
【図24】E_PRE集合生成部27の最上位層の処理内容
のフローチャートである。
【図25】E_PRE集合生成部27の中間層の処理内容の
フローチャートである。
【図26】E_PRE集合生成部27の最下位層の処理内容
のフローチャートである。
【図27】等価式集合生成部24の処理内容のフローチ
ャートである。
【図28】等価式集合生成部24の処理内容のフローチ
ャートである。
【図29】等価式置換最適化部16の最上位層の処理内
容のフローチャートである。
【図30】等価式置換最適化部16の中間層の処理内容
のフローチャートである。
【図31】等価式置換最適化部16の最下位層の処理内
容のフローチャートである。
【図32】等価式置換最適化部16の最下位層の処理内
容のフローチャートである。
【図33】等価式置換最適化部16の最下位層の処理内
容のフローチャートである。
【図34】等価式置換最適化部16の中間層の処理内容
のフローチャートである。
【図35】等価和演算の概念を示す概念図である。
【図36】従来のコンパイラの構成図である。
【図37】到達する定義の繰り返しアルゴリズムであ
る。
【図38】従来技術の説明で用いるプログラム例であ
る。
【図39】従来技術の説明で用いるプログラム例であ
る。
【図40】従来技術の説明で用いるプログラム例であ
る。
【図41】従来技術の説明で用いるプログラム例であ
る。
【図42】従来技術の説明で用いるプログラム例であ
る。
【符号の説明】
1 最適化装置 11 最適化制御部 12 制御フロー情報解析部 13 データフロー情報解析部 14 等価式情報解析部 15 中間コード最適化部 16 等価式置換最適化部 17 制御フロー情報保持部 18 データフロー情報保持部 19 等価式情報保持部 101 作業用式集合保持部 21 等価式情報生成制御部 22 全体式集合検出部 23 全式集合保持部 24 等価式集合生成部 25 E_GEN集合生成部 26 変数使用式判定部 27 E_PRE集合生成部 28 E_GEN作業用式集合保持部 29 E_PRE作業用式集合保持部 30 E_GEN集合保持部 31 E_PRE集合保持部 32 E_IN集合保持部 33 E_OUT集合保持部 34 状態保持部 35 旧E_OUT集合保持部 41 構文解析装置 42 最適化装置 43 最適化制御部 44 制御フロー情報解析部 45 データフロー情報解析部 46 中間コード最適化部 47 制御フロー情報保持部 48 データフロー情報保持部 49 コード生成装置
───────────────────────────────────────────────────── フロントページの続き (72)発明者 佐山 旬子 大阪府門真市大字門真1006番地 松下電 器産業株式会社内 (56)参考文献 インターフェース,CQ出版社,1989 −3,第15巻第3号(No.142),p. 196−210 情報処理,1977−1,第18巻第1号, p.27−34 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45

Claims (20)

    (57)【特許請求の範囲】
  1. 【請求項1】 各命令の左辺及び右辺の何れか一方に位
    置する式を他の式に置き換えてもプログラムの実行が等
    価であることを示す式間の等価性を解析することによ
    り、分岐元−分岐先の関係に基づいて複数の基本ブロッ
    クに分割されたプログラムを最適化する最適化装置であ
    って、プログラム内の各基本ブロックの出口において、等価性
    が成立する式からなる等価式集合E_OUTの初期集合を求
    める初期化手段と、 初期集合たるE_OUTを[方程式1]に代入して、各基本ブ
    ロック入口において等価性が成立する式からなる等価式
    集合E_INを得る 第1解析手段と、[方程式1]から求められたE_INを[方程式2]に代入し、
    E_OUTを得る第2解析手段と、 [方程式2]で求められたE_OUTを[方程式1]に代入する
    解法を繰り返し行い、E_INの収束解を得る繰返手段と、 収束解たる 等価式集合E_INを用いて各基本ブロック内に
    位置する先頭命令から終了命令までを最適化するブロッ
    ク内最適化手段とを備えることを特徴とする最適化装
    置。{方程式1] E_IN[B] = ∩e E_OUT[P] {方程式2] E_OUT[B] = E_GEN[B] ∪e (E_IN[B] ∩e [E_PRE[B]]) ∩e:等価積演算の演算子 ∪e:等価和演算の演算子 P:基本ブロックBを分岐先とする基本ブロック E_GEN[B]:基本ブロックBに含まれている先頭命令から最
    終命令までの実行により等価性が成立する全ての式から
    なる等価式集合 E_PRE[B]:プログラム全域における全式集合のうち、基
    本ブロックBに含まれている先頭命令から最終命令まで
    の実行により更新されないものからなる等価式集合
  2. 【請求項2】 請求項1記載の最適化装置は、等価式集
    合E_GENを各基本ブロックについて生成する等価式集合E
    _GEN生成手段と、等価式集合E_PRE を各基本ブロックについて生成する等
    価式集合E_PRE生成手段とを備え、前記初期化手段は、 分岐先にならない基本ブロックである初期ブロックにつ
    いて生成された等価式集合E_GENを初期ブロックの等価
    式集合E_OUTの初期集合とし、初期ブロック以外の基本
    ブロックについて等価式集合E_GENと、等価式集合E_PRE
    との等価和演算を行なってその演算結果を等価式集合E_
    OUTの初期集合とする ことを特徴とする最適化装置。
  3. 【請求項3】 請求項2記載の繰返手段は、[方程式2] により得られた等価式集合E_OUTを過渡的な
    集合として記憶する過渡集合記憶部と、 過渡集合を記憶した後、解法の繰り返しにより新たな等
    価式集合E_INが[方程式2]により得られると、両者を照
    合する照合部と、 照合した結果、記憶されている過渡集合と、新たな等価
    式集合E_OUTとが一致すると、記憶された過渡集合たる
    等価式集合E_OUTと共に得られた等価式集合E_INが収束
    解であるとの判定を下す判定部とを備えることを特徴と
    する最適化装置。
  4. 【請求項4】 請求項2〜3の何れかに記載の最適化装
    置において等価式集合E_GEN生成手段は、 等価性成立を解析すべき命令を取り出す第1取出部と、 各基本ブロックに含まれている先頭命令からそれまで取
    り出された命令までの間に等価性成立が明らかになった
    式の集合を保持しているE_GEN作業用保持部と、 取り出された命令が代入であり、かつ代入の左辺が変数
    である場合、当該変数の代入により影響を受ける式を前
    記E_GEN作業用保持部が保持する式集合から削除する第
    1のE_GEN作業用保持部更新部と、 取り出された命令が代入であり、かつ代入の左辺が間接
    演算式である場合、当該間接演算式により更新される可
    能性のある変数によって影響を受ける式を前記E_GEN作
    業用保持部が保持する式集合から削除する第2のE_GEN
    作業用保持部更新部と、 取り出された命令が代入であり前記E_GEN作業用保持部
    が保持する式集合の中に、当該命令における両辺のいず
    れかの式を含む式集合がある場合、当該命令の両辺の式
    を当該式集合に追加し、当該式集合が存在しないとき新
    たに当該命令の両辺を要素とする式集合を生成して前記
    E_GEN作業用保持部に追加する第3のE_GEN作業用保持部
    更新部と、 命令が関数呼び出し命令である場合、関数呼び出し命令
    によって更新される可能性のある変数によって影響を受
    ける式を前記E_GEN作業用保持部が保持する式集合から
    削除する第4のE_GEN作業用保持部更新部とを備えるこ
    とを特徴とする最適化装置。
  5. 【請求項5】 請求項に記載の最適化装置において
    等価式集合E_PRE生成手段は、 等価性成立を解析すべき命令を取り出す第2取出部と、 プログラム全域にて存在する全ての式を保持するE_PRE
    作業用保持部と、 取り出された命令が代入でありかつ代入の左辺が変数で
    ある場合、当該変数の代入により影響を受ける式を前記
    E_PRE作業用保持部から削除する第1のE_PRE作業用保持
    部更新部と、 取り出された命令が代入でありかつ代入の左辺が間接演
    算式である場合、当該間接演算式により更新される可能
    性のある変数によって影響を受ける式を、前記E_PRE作
    業用保持部から削除する第2のE_PRE作業用保持部更新
    部と、 取り出された命令が関数呼び出し命令である場合、関数
    呼び出し命令によって更新される可能性のある変数によ
    って影響を受ける式を、前記E_PRE作業用保持部から削
    除する第3のE_PRE作業用保持部更新部とを備えること
    を特徴とする最適化装置。
  6. 【請求項6】 請求項に記載の最適化装置におけるブ
    ロック内最適化手段は、収束解たる 等価式集合E_INを保持し、基本ブロック内の
    命令に対しての最適化が開始されると、その保持集合に
    対してこれまでに行われた同基本ブロック内の最適化に
    伴った更新がなされた等価式集合を保持している作業用
    保持部と、 基本ブロックの先頭命令から末尾命令までを順番に取り
    出す第3取出部と、 取り出された式に対して最適化を行う命令最適化手段
    と、 式が最適化されると、作業用保持部の保持集合を更新す
    る更新手段とを備えることを特徴とする最適化装置。
  7. 【請求項7】 請求項に記載の最適化装置においてブ
    ロック内最適化手段は、 等価式集合の集合を保持する作業用保持部を前記等価式
    集合E_INに設定する作業用保持部初期化手段を備え、 命令最適化手段は、 取り出された命令を、等価式集合保持部が保持している
    等価式集合内の式のうち、その式を等価性を有する式に
    置換することにより冗長性を削除する第1の冗長性削除
    部と、 取り出された命令が代入でありかつ代入の両辺の式が、
    前記作業用保持部が保持する同一の式集合に含まれてい
    る場合、プログラム上の当該命令を削除する第2の冗長
    性削除部とを備え、 更新手段は、 取り出された命令が代入でありかつ代入の左辺が変数で
    ある場合、当該変数の代入により影響を受ける式を前記
    作業用保持部が保持する式集合から削除する第1の作業
    用保持部更新部と、 取り出された命令が代入でありかつ代入の左辺が間接演
    算式である場合、当該間接演算式により更新される可能
    性のある変数によって影響を受ける式を、前記作業用保
    持部が保持する式集合から削除する第2の作業用保持部
    更新部と、 取り出された命令が代入でありかつ、前記作業用保持部
    が保持する式集合の中に、当該命令における両辺のいず
    れかの式を含む式集合がある場合、当該命令の両辺の式
    を当該式集合に追加し、当該式集合が存在しないとき新
    たに当該命令の両辺を要素とする式集合を生成し前記作
    業用保持部に追加する第3の作業用保持部更新部と、 取り出された命令が関数呼び出し命令である場合、関数
    呼び出し命令によって更新される可能性のある変数によ
    って影響を受ける式を、前記作業用保持部が保持する式
    集合から削除する第4の作業用保持部更新部と、 前記作業用保持手段初期化手段を起動し、次に基本ブロ
    ック内の全ての命令に対して、 前記第1、第2の冗長
    性削除部を起動しさらに、 前記第1、2、3、4の作
    業用保持手段更新部を順番に起動する等価置換最適化制
    御部とを備えることを特徴とする最適化装置。
  8. 【請求項8】 請求項記載の最適化装置においてブロ
    ック内最適化手段は、 命令が代入である場合、右辺の式が前記作業用保持部が
    保持する式集合の中に含まれていて、当該式集合に定数
    が含まれているときは、当該定数で当該命令の右辺を置
    き換え、 当該右辺の式が2項演算や単項演算であって当該演算で
    使用されている一つないし二つの変数が前記作業用保持
    部が保持する式集合の中に含まれており、かつ当該式集
    合に定数が含まれている場合、変数を定数に置き換えて
    当該演算を行ない、当該演算結果の定数値で当該命令の
    右辺を置き換える第3の冗長性削除部を有し、 前記等価置換最適化制御部は、 前記作業用保持部初期化手段を起動し、次に基本ブロッ
    ク内の全ての命令に対して、 前記第1、2、3の冗長
    性削除部を起動しさらに前記第1、2、3、4の作業用
    保持部更新部を順番に起動することを備えることを特徴
    とする最適化装置。
  9. 【請求項9】 請求項記載の最適化装置においてブロ
    ック内最適化手段は、 命令が条件分岐である場合、条件式の両辺の式を含む前
    記作業用保持部が保持する式集合から、条件式を恒真ま
    たは恒偽とすることが可能である場合、条件式を恒真を
    示す「(1)」または恒偽を示す「(0)」に置き換える第4
    の冗長性削除部を有し、 前記等価置換最適化制御部は、 前記作業用保持部初期化手段を起動し、次に基本ブロッ
    ク内の全ての命令に対して、前記第1、2、3、4の冗
    長性削除部を起動しさらに、 前記第1、2、3、4の
    作業用保持部更新部を順番に起動することを備えること
    を特徴とする最適化装置。
  10. 【請求項10】 請求項1〜9の何れかに記載の最適化
    装置において等価積演算は、 共通項を持たない互いに素な集合を要素とする二つの集
    合に対して、要素間の集合積演算を行なうことを特徴と
    する最適化装置。
  11. 【請求項11】 請求項1〜10の何れかに記載の最適
    化装置において等価和演算は、 集合を要素とする二つの集合に対して、まず二つの集合
    の集合和演算を行ない、当該演算結果の中で、共通項を
    もつ集合同士を連結して一つの集合にするという操作
    を、それ以上連結できなくなるまで繰り返すことを特徴
    とする最適化装置。
  12. 【請求項12】 各命令の左辺及び右辺の何れか一方に
    位置する式を他の式に置き換えてもプログラムの実行が
    等価であることを示す式間の等価性を解析することによ
    り、分岐元−分岐先の関係に基づいて複数の基本ブロッ
    クに分割されたプログラムを最適化する最適化プログラ
    ムを記録したコンピュータ読取可能な記録媒体であっ
    て、 プログラム内の各基本ブロックの出口において、等価性
    が成立する式からなる等価式集合E_OUTの初期集合を求
    める初期化ステップと、 初期集合たるE_OUTを[方程式1]に代入して、各基本ブ
    ロック入口において等価性が成立する式からなる等価式
    集合E_INを得る 第1解析ステップと、[方程式1]から求められたE_INを[方程式2]に代入し、
    E_OUTを得る 第2解析ステップと、[方程式2]で求められたE_OUTを[方程式1]に代入する
    解法を繰り返し行い、E_INの収束解を得る 繰返ステップ
    と、収束解たる 等価式集合E_INを用いて各基本ブロック内に
    位置する先頭命令から終了命令までを最適化するブロッ
    ク内最適化ステップとをコンピュータに行わせるプログラムが記録されている
    ことを特徴とするコン ピュータ読取可能な記録媒体。 {方程式1] E_IN[B] = ∩e E_OUT[P] {方程式2] E_OUT[B] = E_GEN[B] ∪e (E_IN[B] ∩e [E_PRE[B]]) ∩e:等価積演算の演算子 ∪e:等価和演算の演算子 P:基本ブロックBを分岐先とする基本ブロック E_GEN[B]:基本ブロックBに含まれている先頭命令から最
    終命令までの実行により等価性が成立する全ての式から
    なる等価式集合 E_PRE[B]:プログラム全域における全式集合のうち、基
    本ブロックBに含まれている先頭命令から最終命令まで
    の実行により更新されないものからなる等価式集合
  13. 【請求項13】 請求項12記載のコンピュータ読取可
    能な記録媒体は、等価式集合E_GENを各基本ブロックに
    ついて生成する等価式集合E_GEN生成ステップと、等価式集合E_PRE を各基本ブロックについて生成する
    価式集合E_PRE生成ステップとを備え、 前記初期化ステップは、 分岐先にならない基本ブロックである初期ブロックにつ
    いて生成された等価式集合E_GENを初期ブロックの等価
    式集合E_OUTの初期集合とし、初期ブロック以外の基本
    ブロックについて等価式集合E_GENと、等価式集合E_PRE
    との等価和演算を行なってその演算結果を等価式集合E_
    OUTの初期集合とする ことを特徴とするコンピュータ読
    取可能な記録媒体。
  14. 【請求項14】 前記コンピュータは[方程式2]により
    得られた等価式集合E_OUTを過渡的な集合として記憶す
    る過渡集合記憶部を備え、請求項13記載の 繰返ステップは、 過渡集合を記憶した後、解法の繰り返しにより新たな等
    価式集合E_INが[方程式2]により得られると、両者を照
    合する照合サブステップと、照合した結果、記憶されている過渡集合と、新たな等価
    式集合E_OUTとが一致 すると、記憶された過渡集合 たる
    等価式集合E_OUTと共に得られた等価式集合E_INが収束
    解であるとの判定を下す判定サブステップとを含むこと
    を特徴とするコンピュータ読取可能な記録媒体。
  15. 【請求項15】 前記コンピュータは、各基本ブロック
    に含まれている先頭命令からそれまで取り出された命令
    までの間に等価性成立が明らかになった式の集合を保持
    しているE_GEN作業用保持部を備え、請求項13〜14の何れかに記載の 前記等価式集合E_GE
    N生成ステップは、 等価性成立を解析すべき命令を取り出す第1取出サブス
    テップと、 取り出された命令が代入であり、かつ代入の左辺が変数
    である場合、当該変数の代入により影響を受ける式を前
    記E_GEN作業用保持部が保持する式集合から削除する第
    1のE_GEN作業用保持部更新サブステップと、 取り出された命令が代入であり、かつ代入の左辺が間接
    演算式である場合、当該間接演算式により更新される可
    能性のある変数によって影響を受ける式を前記E_GEN作
    業用保持部が保持する式集合から削除する第2のE_GEN
    作業用保持部更新サブステップと、 取り出された命令が代入であり前記E_GEN作業用保持部
    が保持する式集合の中に、当該命令における両辺のいず
    れかの式を含む式集合がある場合、当該命令の両辺の式
    を当該式集合に追加し、当該式集合が存在しないとき新
    たに当該命令の両辺を要素とする式集合を生成して前記
    E_GEN作業用保持部に追加する第3のE_GEN作業用保持部
    更新サブステップと、 命令が関数呼び出し命令である場合、関数呼び出し命令
    によって更新される可能性のある変数によって影響を受
    ける式を前記E_GEN作業用保持部が保持する式集合から
    削除する第4のE_GEN作業用保持部更新サブステップと
    を含むことを特徴とするコンピュータ読取可能な記録媒
    体。
  16. 【請求項16】 前記コンピュータはプログラム全域に
    て存在する全ての式を保持するE_PRE作業用保持部を備
    え、請求項15記載の 等価式集合E_PRE生成ステップは、 等価性成立を解析すべき命令を取り出す第2取出サブス
    テップと、 取り出された命令が代入でありかつ代入の左辺が変数で
    ある場合、当該変数の代入により影響を受ける式を前記
    E_PRE作業用保持部から削除する第1のE_PRE作業用保持
    部更新サブステップと、 取り出された命令が代入でありかつ代入の左辺が間接演
    算式である場合、当該間接演算式により更新される可能
    性のある変数によって影響を受ける式を、前記E_PRE作
    業用保持部から削除する第2のE_PRE作業用保持部更新
    サブステップと、 取り出された命令が関数呼び出し命令である場合、関数
    呼び出し命令によって更新される可能性のある変数によ
    って影響を受ける式を、前記E_PRE作業用保持部から削
    除する第3のE_PRE作業用保持部更新サブステップと
    含むことを特徴とするコンピュータ読取可能な記録媒
    体。
  17. 【請求項17】 前記コンピュータは、収束解たる等価
    式集合E_INを保持し、同基本ブロック内の命令に対して
    の最適化が開始されると、その保持集合に対してこれま
    でに行われた同基本ブロック内の最適化に伴った更新が
    なされた等価式集合を保持している作業用保持部を備
    え、請求項16記載の ブロック内最適化ステップは、 基本ブロックの先頭命令から末尾命令までを順番に取り
    出す第3取出サブステップと、 取り出された式に対して最適化を行う命令最適化ステッ
    プと、 式が最適化されると、作業用保持部の保持集合を更新す
    る更新ステップとを含むことを特徴とするコンピュータ
    読取可能な記録媒体。
  18. 【請求項18】 請求項17に記載のコンピュータ読取
    可能な記録媒体におけるブロック内最適化ステップは、 等価式集合の集合を保持する作業用保持部を前記等価式
    集合E_INに設定する作業用保持部初期化ステップを備
    え、 命令最適化ステップは、 取り出された命令を、等価式集合保持部が保持している
    等価式集合内の式のうち、その式を等価性を有する式に
    置換することにより冗長性を削除する第1の冗長性削除
    サブステップと、 取り出された命令が代入でありかつ代入の両辺の式が、
    前記作業用保持部が保持する同一の式集合に含まれてい
    る場合、プログラム上の当該命令を削除する第2の冗長
    性削除サブステップとを備え、前記 更新ステップは、 取り出された命令が代入でありかつ代入の左辺が変数で
    ある場合、当該変数の代入により影響を受ける式を前記
    作業用保持部が保持する式集合から削除する第1の作業
    用保持部更新サブステップと、 取り出された命令が代入でありかつ代入の左辺が間接演
    算式である場合、当該間接演算式により更新される可能
    性のある変数によって影響を受ける式を、前記作業用保
    持部が保持する式集合から削除する第2の作業用保持部
    更新サブステップと、 取り出された命令が代入でありかつ、前記作業用保持部
    が保持する式集合の中に、当該命令における両辺のいず
    れかの式を含む式集合がある場合、当該命令の両辺の式
    を当該式集合に追加し、当該式集合が存在しないとき新
    たに当該命令の両辺を要素とする式集合を生成し前記作
    業用保持部に追加する第3の作業用保持部更新サブステ
    ップと、 取り出された命令が関数呼び出し命令である場合、関数
    呼び出し命令によって更新される可能性のある変数によ
    って影響を受ける式を、前記作業用保持部が保持する式
    集合から削除する第4の作業用保持部更新サブステップ
    と、 前記作業用保持ステップ初期化ステップを起動し、次に
    基本ブロック内の全ての命令に対して、 前記第1、第
    2の冗長性削除サブステップを起動しさらに、前記第
    1、2、3、4の作業用保持ステップ更新サブステップ
    を順番に起動する等価置換最適化制御サブステップと
    含むことを特徴とするコンピュータ読取可能な記録媒
    体。
  19. 【請求項19】 請求項18記載のコンピュータ読取可
    能な記録媒体においてブロック内最適化ステップは、 命令が代入である場合、右辺の式が前記作業用保持部が
    保持する式集合の中に含まれていて、当該式集合に定数
    が含まれているときは、当該定数で当該命令の右辺を置
    き換え、 当該右辺の式が2項演算や単項演算であって当該演算で
    使用されている一つないし二つの変数が前記作業用保持
    部が保持する式集合の中に含まれており、かつ当該式集
    合に定数が含まれている場合、変数を定数に置き換えて
    当該演算を行ない、当該演算結果の定数値で当該命令の
    右辺を置き換える第3の冗長性削除サブステップを有
    し、 前記等価置換最適化制御サブステップは、 前記作業用保持部初期化ステップを起動し、次に基本ブ
    ロック内の全ての命令に対して、 前記第1、2、3の
    冗長性削除サブステップを起動しさらに前記第1、2、
    3、4の作業用保持部更新サブステップを順番に起動す
    ことを特徴とするコンピュータ読取可能な記録媒体。
  20. 【請求項20】 請求項19記載のコンピュータ読取可
    能な記録媒体においてブロック内最適化ステップは、 命令が条件分岐である場合、条件式の両辺の式を含む前
    記作業用保持部が保持する式集合から、条件式を恒真ま
    たは恒偽とすることが可能である場合、条件式を恒真を
    示す「(1)」または恒偽を示す「(0)」に置き換える第4
    の冗長性削除サブステップを有し、 前記等価置換最適化制御サブステップは、 前記作業用保持部初期化ステップを起動し、次に基本ブ
    ロック内の全ての命令に対して、前記第1、2、3、4
    の冗長性削除サブステップを起動しさらに、 前記第1、2、3、4の作業用保持部更新サブステップ
    を順番に起動することを特徴とするコンピュータ読取可
    能な記録媒体。
JP26565597A 1997-09-30 1997-09-30 最適化装置及びコンピュータ読取可能な記録媒体 Expired - Fee Related JP3234552B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP26565597A JP3234552B2 (ja) 1997-09-30 1997-09-30 最適化装置及びコンピュータ読取可能な記録媒体
US09/165,587 US6289507B1 (en) 1997-09-30 1998-09-30 Optimization apparatus and computer-readable storage medium storing optimization program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP26565597A JP3234552B2 (ja) 1997-09-30 1997-09-30 最適化装置及びコンピュータ読取可能な記録媒体

Publications (2)

Publication Number Publication Date
JPH11110225A JPH11110225A (ja) 1999-04-23
JP3234552B2 true JP3234552B2 (ja) 2001-12-04

Family

ID=17420159

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26565597A Expired - Fee Related JP3234552B2 (ja) 1997-09-30 1997-09-30 最適化装置及びコンピュータ読取可能な記録媒体

Country Status (2)

Country Link
US (1) US6289507B1 (ja)
JP (1) JP3234552B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012004972A1 (ja) * 2010-07-05 2012-01-12 パナソニック株式会社 プログラム生成装置、プログラム生産方法及びプログラム

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19946607C2 (de) * 1998-10-01 2002-11-07 Ibm Optimierung mit Zerstörung & Wiederaufbau
JP2000132404A (ja) * 1998-10-22 2000-05-12 Matsushita Electric Ind Co Ltd 命令列最適化装置
JP2000207223A (ja) * 1999-01-12 2000-07-28 Matsushita Electric Ind Co Ltd 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
US6523168B1 (en) * 1999-07-01 2003-02-18 International Business Machines Corporation Reduction of object creation during string concatenation and like operations that utilize temporary data storage
US7337437B2 (en) 1999-12-01 2008-02-26 International Business Machines Corporation Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code
US6981249B1 (en) * 2000-05-02 2005-12-27 Microsoft Corporation Methods for enhancing type reconstruction
US8176108B2 (en) 2000-06-20 2012-05-08 International Business Machines Corporation Method, apparatus and computer program product for network design and analysis
US7043510B1 (en) 2000-06-20 2006-05-09 International Business Machines Corporation Determining the equivalence of two sets of simultaneous linear algebraic equations
US6820253B1 (en) * 2000-09-27 2004-11-16 Intel Corporation Method and system for interprocedural analysis with separate compilation
US7065757B2 (en) * 2001-09-28 2006-06-20 Hewlett-Packard Development Company, L.P. Efficient compilation of family of related functions
US7143403B2 (en) * 2002-06-18 2006-11-28 Hewlett-Packard Development Company, L.P. System and method for merging control flow paths
US7065759B2 (en) * 2002-06-18 2006-06-20 Hewlett-Packard Development Company, L.P. System and method for assigning basic blocks to computer control flow paths
US7650596B2 (en) 2003-02-13 2010-01-19 Accurate Technologies Inc. Method for ECU calibration and diagnostics development
US20040163078A1 (en) * 2003-02-13 2004-08-19 Correa Colt R. Method for rapidly prototyping, testing and verifying application software
US8225293B2 (en) * 2003-02-13 2012-07-17 Accurate Technologies Inc. Method for supporting calibration parameters in an ECU
US7171544B2 (en) 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US7661099B2 (en) * 2004-06-29 2010-02-09 International Business Machines Corporation Using idempotent operations to improve transaction performance
JP2006171800A (ja) * 2004-12-10 2006-06-29 Fujitsu Ltd データ集計装置、その方法、及びプログラム
JP2006243839A (ja) * 2005-02-28 2006-09-14 Toshiba Corp 命令生成装置及び命令生成方法
JP2006260096A (ja) * 2005-03-16 2006-09-28 Matsushita Electric Ind Co Ltd プログラム変換方法およびプログラム変換装置
US8037466B2 (en) * 2006-12-29 2011-10-11 Intel Corporation Method and apparatus for merging critical sections
US8291383B1 (en) * 2008-10-20 2012-10-16 Google Inc. Code analysis via dual branch exploration
US9134977B2 (en) * 2010-02-26 2015-09-15 Red Hat, Inc. Compiler operation for handling conditional statements
US8966463B2 (en) * 2011-11-29 2015-02-24 Microsoft Technology Licensing, Llc Eliminating redundant function calls
US9652208B2 (en) * 2013-08-01 2017-05-16 Futurewei Technologies, Inc. Compiler and method for global-scope basic-block reordering
JP6366033B2 (ja) * 2014-05-09 2018-08-01 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation プログラム中のif文の最適化方法
US9733911B2 (en) * 2015-11-11 2017-08-15 National Instruments Corporation Value transfer between program variables using dynamic memory resource mapping
KR102195103B1 (ko) * 2017-06-26 2020-12-24 삼성전자주식회사 프로그램 컴파일 방법
US11526336B2 (en) * 2021-03-15 2022-12-13 Fujitsu Limited Community-oriented, cloud-based digital annealing platform

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3311462B2 (ja) * 1994-02-23 2002-08-05 富士通株式会社 コンパイル処理装置
US5920716A (en) * 1996-11-26 1999-07-06 Hewlett-Packard Company Compiling a predicated code with direct analysis of the predicated code

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
インターフェース,CQ出版社,1989−3,第15巻第3号(No.142),p.196−210
情報処理,1977−1,第18巻第1号,p.27−34

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012004972A1 (ja) * 2010-07-05 2012-01-12 パナソニック株式会社 プログラム生成装置、プログラム生産方法及びプログラム
JP5580416B2 (ja) * 2010-07-05 2014-08-27 パナソニック株式会社 プログラム生成装置、プログラム生産方法及びプログラム

Also Published As

Publication number Publication date
JPH11110225A (ja) 1999-04-23
US6289507B1 (en) 2001-09-11

Similar Documents

Publication Publication Date Title
JP3234552B2 (ja) 最適化装置及びコンピュータ読取可能な記録媒体
Lhoták et al. Points-to analysis with efficient strong updates
EP1728155B1 (en) Method and system for performing link-time code optimization without additional code analysis
US5768592A (en) Method and apparatus for managing profile data
US6662354B1 (en) Determining destinations of a dynamic branch
US8555266B2 (en) Managing variable assignments in a program
US8510727B2 (en) Link-time redundant code elimination using functional equivalence
US20020095667A1 (en) Optimizing compilation by forward store movement
JP3813087B2 (ja) プログラム変換方法、コンピュータ装置及びプログラム
US6072950A (en) Pointer analysis by type inference combined with a non-pointer analysis
Ohori et al. Lightweight fusion by fixed point promotion
US7058561B1 (en) System, method and program product for optimising computer software by procedure cloning
US8458679B2 (en) May-constant propagation
US20030233640A1 (en) Structuring program code
Mosaner et al. Machine-Learning-Based Self-Optimizing Compiler Heuristics✱
JP2022114722A (ja) コード変更パターンマイニングプログラム及びコード変更パターンマイニング方法
Moyen et al. Loop quasi-invariant chunk motion by peeling with statement composition
Webb et al. Verifying term graph optimizations using Isabelle/HOL
CN111796832A (zh) 热补丁文件生成方法、装置、设备及存储介质
US11822908B1 (en) Extensible compilation using composite programming for hardware
CN115562649B (zh) 一种计算机混合程序语言源代码辅助编写方法及系统
CN117235746B (zh) 一种基于多维ast融合检测的源代码安全管控平台
US20240135210A1 (en) Replacing lambda expressions in a rete network with corresponding code classes
JPH11272475A (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
Di Rocco et al. Supporting users to manage breaking and unresolvable changes in coupled evolution

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080921

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080921

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090921

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090921

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100921

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees