JPH0883185A - コンパイラ - Google Patents

コンパイラ

Info

Publication number
JPH0883185A
JPH0883185A JP6218811A JP21881194A JPH0883185A JP H0883185 A JPH0883185 A JP H0883185A JP 6218811 A JP6218811 A JP 6218811A JP 21881194 A JP21881194 A JP 21881194A JP H0883185 A JPH0883185 A JP H0883185A
Authority
JP
Japan
Prior art keywords
instruction
variable
definition
block
live
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.)
Granted
Application number
JP6218811A
Other languages
English (en)
Other versions
JP3606387B2 (ja
Inventor
Akira Tanaka
旭 田中
Jiyunko Irikou
旬子 入交
Hiroshi Yugawa
博司 湯川
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 Holdings Corp
Original Assignee
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP21881194A priority Critical patent/JP3606387B2/ja
Priority to CN95106164A priority patent/CN1097226C/zh
Priority to US08/508,136 priority patent/US5642512A/en
Priority to EP95305885A priority patent/EP0702293B1/en
Priority to DE69524511T priority patent/DE69524511T2/de
Priority to KR1019950029734A priority patent/KR100226233B1/ko
Publication of JPH0883185A publication Critical patent/JPH0883185A/ja
Application granted granted Critical
Publication of JP3606387B2 publication Critical patent/JP3606387B2/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】 変数の生存区間の重複検査を高速に検査可能
とすることにより、コンパイル速度を向上させることを
目的とする。 【構成】 基本ブロック内に単純ブロックを形成し、単
純ブロック内生存変数集合保持部12は一つの単純ブロ
ック内にのみ生存区間が存在する変数を保持する。基本
ブロック内生存変数集合保持部13は、複数の単純ブロ
ックに生存区間が存在するが、一つの基本ブロック内に
のみ生存区間が存在する変数を保持する。基本ブロック
間生存変数集合保持部14は、複数の基本ブロック間に
生存区間が存在する変数を保持する。生存区間生成部1
5は、変数の生存区間を検出して、その結果を、生存区
間保持部11に格納し、かつ生存区間の検出時に、生存
区間の範囲によって変数を、単純ブロック内生存変数集
合保持部12か、基本ブロック内生存変数集合保持部1
3か、基本ブロック間生存変数集合保持部14のいずれ
かに変数を格納する。生存区間重複検査部16は、生存
区間の範囲によって生存区間の重複検査を必要な割付対
象間に対してのみ行なう。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は高級プログラミング言語
で書かれたソースプログラムを機械語プログラムにコン
パイルするコンパイラに関する。
【0002】
【従来の技術】近年、C言語などの高級プログラミング
言語でプログラムを記述し、プログラムの開発効率を高
めることが盛んに行なわれている。高級プログラミング
言語を用いれば、プログラマは、プログラム中の数値の
保持、演算、転送等の処理を、変数を被演算子とした演
算(ステップ)で表現できる。この変数はプログラマに
よって任意に定義され、また必要な個数だけ用いられる
ため、プログラマは自由にプログラムを記述できる。ま
た記述されたプログラム(ソースプログラムと称す。)
は、コンパイルされることにより、コンピュータが理解
可能な機械語プログラムとなる。当該機械語プログラム
中の演算は、機械語命令によって表現され、また当該機
械語命令は、レジスタあるいはメモリを被演算子とする
ので、上記変数には、レジスタあるいはメモリを割り付
ける必要がある。この割り付け処理は資源割付処理と称
される。この資源割付処理が最適であれば、上記機械語
命令のコードサイズは最小、実行時間は最短となる。
【0003】一方、レジスタとメモリとを比較すれば、
レジスタを被演算子とする方が機械語命令の小サイズ
化、実行時間の最短化が図れる。但しレジスタは、使用
できる個数が少数であるため、上記資源割付を行う前に
同一レジスタを割り付け得る変数はどれとどれであるか
を生存区間に基づき検査し、当該検査の検査結果によっ
て、資源割付を行うことが一般的である。生存区間と
は、それぞれの変数に格納されている値が有効となる区
間のことであり、プログラムと、当該プログラムにおい
て使用されている変数の生存区間を図23(a)に示
す。
【0004】本図において、変数x4と、変数t3は、生存
区間が重なっていることから、同一レジスタを割り付け
得ないことがわかる。変数t1と、変数t3は、この生存区
間が重なっていないことから、同一レジスタを割り付け
得ることがわかる。次に、プログラム中の各変数の生存
区間を、中間言語ステップの集合で表現する。中間言語
ステップは、図23(a)の一例では、s1,s2,s3,s4,s5
・・・・で表される。また中間言語ステップ集合での生存区
間の表現を図23(b)の一例に示す。図23(b)の
一例では、変数t1の生存区間は、中間言語ステップs2の
みであり、変数xの生存区間は、中間言語ステップs8,s
9,s10,s11であることが示される。
【0005】次に、プログラム中の任意の2変数につい
て、中間言語ステップ集合の集合積をとる。この集合積
が空であれば、その2変数の生存区間は重ならないと判
定でき、空でなければ重なると判定できる。図23
(b)の一例では、変数xと変数x4とは、生存区間の集
合に共通要素がないため上記集合積が空となり、非重複
が判定される。また、変数x4と変数t3とは、生存区間の
集合に共通要素s4が存在するため、上記集合積の結果が
空でなくなる。そのため、変数x4と変数t3とは生存区間
の重複が判定される。
【0006】このように、集合積の算出を繰り返し、各
変数の生存区間の重複、非重複を、図23(c)に示す
ように判定する。本図において、変数t1は、変数p1,p2,
p3と生存区間が重なることが示される。また変数x4も、
変数p1,p2,p3と生存区間が重なることが示される。以上
に述べた重複調査を行うと、レジスタに割り付ける変数
の数を、より多くすることができる。
【0007】
【発明が解決しようとする課題】しかしながら上記従来
技術によれば、生存区間の重複検査に要する処理時間が
多大なものとなるという問題点があった。上述のよう
に、変数はプログラマの都合によって作成される。その
ため、複数人のプログラマによって作成されるソフトウ
ェア中の変数の総数は、百個前後になることが一般的で
ある。これに加えて、中間言語プログラムの生成時に
は、変数が、コンパイラによって自動的に生成されるの
で、結果として重複検査の対象となる変数の総数は、数
百個単位になる。
【0008】変数の生存区間の重複検査は、集合積の算
出によって求められるが、この集合積の、n個の変数に
ついての計算回数は、nC2=n(n−1)/2回であ
り、個数nが数百個である場合、集合積の計算回数が非
常に大きな数となる。例えば変数の個数nが100個だ
とすると、nC2=4950となり、コンパイラは、上記
集合積の計算を4950回行うことになる。個数nが3
00個だとすると、nC2=44850となり、コンパイ
ラは、集合積の計算を44850回行うことになる。
【0009】本発明は、上記問題点に鑑み、生存区間の
重複検査に要する処理時間を大きく低減できるコンパイ
ラを提供することを目的とする。
【0010】
【課題を解決するための手段】上記目的を達成するため
に請求項1のコンパイラは、複数の命令からなるプログ
ラムを、機械語プログラムに翻訳するコンパイラであっ
て、前記プログラム中の飛び越し命令と、当該飛び越し
命令の飛び越し先の命令とを検出する飛び越し検出手段
と、飛び越し検出手段が検出した命令に基づいて、前記
プログラムを基本ブロックに分割する分割手段と、プロ
グラム中の各変数について、変数の設定値が有効となる
プログラム中の区間である生存区間を検出し、検出結果
を、生存区間内に含まれる命令の位置を示す位置情報の
集合で表す生存区間検出手段と、生存区間検出手段が検
出した生存区間が1つの基本ブロック内に収まる変数を
全て検出し、検出結果を、当該基本ブロックに対応づけ
た基本ブロック内生存変数集合で表す基本ブロック内生
存変数検出手段と、生存区間検出手段が検出した生存区
間が、複数の基本ブロック間におよぶ変数を全て検出
し、検出結果を、基本ブロック間生存変数集合で表す基
本ブロック間生存変数検出手段と、基本ブロック間生存
変数集合から変数を2つずつ取り出し、当該2変数の生
存区間に対応する命令位置情報集合の集合積を算出する
ことで、生存区間の重複を判定する第1の生存区間重複
判定手段と、同一の基本ブロックに対応づけられた基本
ブロック内生存変数集合から変数を2つずつ取り出し、
当該2変数の生存区間に対応する命令位置情報集合の集
合積を算出することで、生存区間の重複を判定する第2
の生存区間重複判定手段と、前記基本ブロックに対応づ
けられた基本ブロック内生存変数集合と、基本ブロック
間生存変数とから変数を1つずつ取り出し、当該2変数
の生存区間に対応する命令位置情報集合の集合積を算出
することで、生存区間の重複を判定する第3の生存区間
重複判定手段と、前記第1、第2、第3の生存区間重複
判定手段の判定結果を用いて資源割付を行うことを特徴
としている。
【0011】請求項2のコンパイラは更に、変数の値を
設定する命令である定義命令と、当該定義命令で設定さ
れた変数の値を使用する命令である参照命令とが、少な
くとも一組順に並ぶ命令列である単純ブロックを、基本
ブロック内に形成する単純ブロック形成手段と、前記基
本ブロック内生存変数集合から、生存区間が一つの単純
ブロック内に収まる変数を全て検出し、検出結果を、当
該単純ブロックに対応づけた単純ブロック内生存変数集
合で表す単純ブロック内生存変数検出手段と、前記基本
ブロック内生存変数集合から生存区間が複数の単純ブロ
ック間におよぶ変数を検出し、検出結果を、単純ブロッ
ク間生存変数集合で表す単純ブロック間生存変数検出手
段と、を備え、前記第2の生存区間重複判定手段は、前
記単純ブロック間生存変数集合から変数を2つずつ取り
出し、当該2変数の生存区間に対応する命令位置情報集
合の集合積を算出することで、生存区間の重複を判定す
る第1の生存区間重複判定部と、同一の単純ブロックに
対応づけられた単純ブロック内変数集合から変数を2つ
ずつ取り出し、当該2変数の生存区間に対応する命令位
置情報集合の集合積を算出することで、生存区間の重複
を判定する第2の生存区間重複判定部と、前記単純ブロ
ックに対応づけられた単純ブロック内変数集合と、単純
ブロック間生存変数集合とから変数を1つずつ取り出
し、当該2変数の生存区間に対応する命令位置情報集合
の集合積を算出することで、生存区間の重複を判定する
第3の生存区間重複判定部と、を備えることを特徴とし
ている。
【0012】請求項3のコンパイラは、前記第3の生存
区間重複判定手段は、基本ブロック間生存変数集合と、
前記単純ブロックに対応づけられた単純ブロック内生存
変数集合とから変数を1つずつ取り出し、当該2変数の
生存区間に対応する命令位置集合の集合積を算出するこ
とで、生存区間の重複を判定する第4の生存区間重複判
定部と、基本ブロック間生存変数集合と、単純ブロック
間生存変数集合とから変数を1つずつ取り出し、当該2
変数の生存区間に対応する命令位置集合の集合積を算出
することで、生存区間の重複を判定する第5の生存区間
重複判定部と、を備えることを特徴としている。
【0013】請求項4のコンパイラは、前記単純ブロッ
ク形成手段として、基本ブロックから、定義命令を1つ
ずつ取り出す定義命令取り出し手段と、定義命令取り出
し手段が取り出した定義命令が含まれる基本ブロックか
ら、その定義命令に対応する参照命令を検出する対応参
照命令検出手段と、対応参照命令検出手段が検出した参
照命令の位置に、当該参照命令に対応する定義命令が移
動可能か否かを判定する定義命令移動可否判定手段と、
定義命令移動可否判定手段が可能と判定した場合、定義
命令移動可否判定手段が可能と判定した定義命令を、当
該定義命令に対応する参照命令の直前に移動し、当該定
義命令及び参照命令を一つの単純ブロックに統合する定
義命令移動手段と、定義命令移動手段が移動した定義命
令が、移動前において、単純ブロック内の最後の命令で
ある場合、移動前の単純ブロックの残りの命令の全てを
当該定義命令の移動先の直前に移動し、移動した残命令
を、移動先の単純ブロックに統合する単純ブロック残命
令移動手段と、を備えることを特徴としている。
【0014】請求項5のコンパイラは、前記定義命令移
動可否判定手段として、前記定義命令取り出し手段が取
り出した定義命令によって値が設定される変数が一つで
あるか否かを判定する変数単複判定部と、前記変数単複
判定部が一つであると判定した場合、前記対応参照命令
検出手段が検出した参照命令が一つか否かを判定する参
照命令単複判定部と、前記参照命令単複判定部が一つで
あると判定した場合、当該参照命令に対応する定義命令
で値が設定される変数が、当該定義命令から当該参照命
令までの区間において再設定されるか否かを判定する第
1の再設定有無判定部と、前記第1の再設定有無判定部
が再設定がないと判定した場合、当該定義命令において
使用される変数を検出する定義命令内使用変数検出部
と、前記定義命令内使用変数検出部が検出した変数が、
当該定義命令から当該参照命令までの間に、再設定され
ないことを判定する第2の再設定有無判定部と、前記第
2の再設定有無判定部が再設定が無いと判定した場合、
当該定義命令が、当該参照命令の位置に移動可能と判定
する移動可否判定部と、からなることを特徴としてい
る。
【0015】請求項6のコンパイラは更に、前記プログ
ラム中の各基本ブロックと、当該基本ブロックの入口に
おいて有効となる変数及び出口において有効となる変数
とを対応させて記憶する有効変数情報記憶手段を備え、
前記生存区間検出手段は、前記プログラムから定義命令
を1つずつ取り出す定義命令取り出し部と、前記定義命
令取り出し部によって取り出された定義命令を含む基本
ブロックと、当該定義命令によって設定される変数とを
検出し、検出した変数の設定値が当該基本ブロックの出
口で無効か否かを、前記有効変数情報記憶手段の記憶内
容に基づき判定する出口無効判定部と、前記出口無効判
定部が設定値無効と判定した場合、当該基本ブロックか
ら、当該定義命令に対応する参照命令であって、当該基
本ブロックの出口に最も近いものを検出する出口最近参
照命令検出部と、当該定義命令の次の命令から出口最近
参照命令検出部が検出した参照命令までの命令位置情報
を全て検出する基本ブロック内命令位置検出部と、命令
位置情報が検出された変数についての生存区間を、基本
ブロック内命令位置検出部が検出した命令位置情報の集
合で表す基本ブロック内生存区間表現部と、を備え、前
記基本ブロック内生存変数検出手段は、前記基本ブロッ
ク内生存区間表現部が生存区間を表現した変数を、当該
変数が含まれる基本ブロックに対応する基本ブロック内
生存変数集合のメンバーにすることを特徴としている。
【0016】請求項7のコンパイラは更に、基本ブロッ
クと、当該基本ブロックにおいて設定される変数とを対
応させて記憶する基本ブロック内定義情報記憶手段を備
え、前記生存区間検出手段は、前記出口無効判定部が有
効と判定した場合、前記基本ブロック内定義情報記憶手
段の記憶内容に基づいて、前記出口無効判定部によって
有効と判定された定義命令において設定される変数が、
当該定義命令から当該定義命令を含む基本ブロックの出
口までの間に再設定されるか否かを判定する再設定有無
判定部と、前記再設定値有無判定部が再設定無しと判定
した場合、当該定義命令の次の命令から当該基本ブロッ
クの出口までの命令位置情報を検出する出口有効時位置
情報検出部と、前記再設定有無判定部が再設定無しと判
定した場合、前記有効変数情報記憶手段および基本ブロ
ック内定義情報記憶手段の記憶内容に基づいて、当該定
義命令が含まれる基本ブロックの次順の基本ブロックの
うち、当該変数がその入口及び出口で有効であり、かつ
その内部で、当該変数が再設定されないものを全て検出
する生存基本ブロック検出部と、前記基本ブロック内定
義情報記憶手段の記憶内容に基づいて、前記生存基本ブ
ロック検出部が検出した基本ブロック内に含まれる命令
位置情報を全て検出する基本ブロック間位置情報検出部
と、前記再設定有無判定部が再設定無しと判定した場
合、当該定義命令が含まれる基本ブロックの次順の基本
ブロックのうち、その入口で当該変数の値が有効であ
り、その出口で無効である基本ブロックを検出する末尾
基本ブロック検出部と、前記末尾基本ブロック検出部が
検出した基本ブロックから、当該定義命令に対応する最
後の参照命令を検出する末尾参照命令検出部と、前記末
尾基本ブロック検出部が検出した基本ブロックの入口か
ら前記末尾参照命令検出部が検出した参照命令までの命
令位置情報を全て検出する入口有効時位置情報検出部
と、前記再設定有無判定部が再設定無しと判定した変数
に対応する生存区間の集合を、出口有効時位置情報検出
手段の検出結果と、入口有効時位置情報検出手段の検出
結果と、基本ブロック間位置情報検出手段の検出結果と
をあわせた集合で表す基本ブロック間生存区間表現部
と、を備え、前記基本ブロック間生存変数検出手段は、
前記再設定有無判定部が再設定無しと判定した変数を、
基本ブロック間生存変数集合のメンバーにすることを特
徴としている。
【0017】請求項8のコンパイラは、プログラム中の
各命令位置と、当該命令位置の命令において使用される
変数と、当該変数が設定される命令の命令位置情報とを
対応させて記憶する参照−定義情報記憶手段を備え、前
記生存区間検出手段は、前記定義命令取り出し部が取り
出した定義命令の位置に識別情報を付するマーキング部
と、前記定義命令取り出し部が取り出した定義命令に対
応する参照命令で使用される変数を検出する参照変数検
出部と、参照−定義情報記憶手段の記憶内容に基づい
て、前記参照変数検出部が検出した変数に設定値を設定
する定義命令を全て検出する定義命令検出部と、前記定
義命令検出部が検出した定義命令のうち、前記マーキン
グ部によって付された識別情報が無いものを検出する無
マーク定義命令検出部と、前記無マーク定義命令検出部
が検出した定義命令の次の命令から、その定義命令を含
む基本ブロックの出口までの命令位置情報を全て検出す
る第1の分岐ブロック内位置情報検出部と、前記基本ブ
ロック間生存区間表現部が表した命令位置情報の集合
に、前記第1の分岐ブロック内位置情報検出部が検出し
た命令位置情報を付加する第1の命令位置情報付加部
と、を備えることを特徴としている。
【0018】請求項9のコンパイラは、プログラム中の
各命令位置と、当該命令位置の命令において設定される
変数と、当該変数が使用される命令の命令位置情報とを
対応させて記憶する定義−参照情報記憶手段を備え、前
記生存区間検出手段は、前記定義−参照情報記憶手段の
記憶内容に基づいて、前記無マーク定義命令検出部が検
出した定義命令に対応する参照命令を検出する分岐ブロ
ック内参照命令検出部と、前記分岐ブロック内参照命令
検出部が検出した参照命令を含む基本ブロックを検出す
る分岐ブロック検出部と、前記分岐ブロック検出部が検
出した基本ブロックの入口から、前記分岐ブロック内参
照命令検出部が検出した参照命令までの命令位置情報を
全て検出する第2の分岐ブロック内位置情報検出部と、
前記基本ブロック間生存区間表現部が表した命令位置情
報の集合に、前記第2の分岐ブロック内位置情報検出部
が検出した命令位置情報を付加する第2の命令位置情報
付加部と、を備えることを特徴としている。
【0019】
【作用】請求項1のコンパイラによれば、飛び越し検出
手段によって前記プログラム中の飛び越し命令と、当該
飛び越し命令の飛び越し先の命令とが検出される。飛び
越し検出手段が検出を行うと、飛び越し検出手段が検出
した命令に基づいて、前記プログラムが、分割手段によ
って、基本ブロックに分割される。分割後、プログラム
中の各変数について、変数の設定値が有効となるプログ
ラム中の区間である生存区間が生存区間検出手段によっ
て検出され、検出結果が、生存区間内に含まれる命令の
位置を示す命令位置情報の集合で表される。検出後、生
存区間検出手段によって検出された生存区間が1つの基
本ブロック内に収まる変数が基本ブロック内生存変数検
出手段によって全て検出され、検出結果が、当該基本ブ
ロックに対応づけられた基本ブロック内生存変数集合で
表される。また前記生存区間が複数の基本ブロック間に
およぶ変数が基本ブロック間生存変数検出手段によって
全て検出され、検出結果が、基本ブロック間生存変数集
合で表される。
【0020】検出後、基本ブロック間生存変数集合か
ら、変数が第1の生存区間重複判定手段によって2つず
つ取り出され、当該2変数の生存区間に対応する命令位
置情報集合の集合積が算出されて、生存区間の重複が判
定される。また同一の基本ブロックに対応づけられた基
本ブロック内生存変数集合と、第2の生存区間重複判定
手段によって、変数が2つずつ取り出され、当該2変数
の生存区間に対応する命令位置情報集合の集合積が算出
されることで、生存区間の重複が判定される。更に、前
記基本ブロックに対応づけられた基本ブロック内生存変
数集合から、基本ブロック間生存変数とから変数が第3
の生存区間重複判定手段によって1つずつ取り出され、
当該2変数の生存区間に対応する命令位置情報集合の集
合積が算出されることで、生存区間の重複が判定され
る。プログラム中の変数の生存区間の重複判定は以上の
判定処理によって全て完了する。以上の判定処理では、
基本ブロック内のみに生存区間が収まる変数のうち、異
なる基本ブロック内に属するもの同士の重複判定処理が
結果として省かれる。このような判定処理の後、第1、
第2、第3の生存区間重複判定手段の判定結果を用いて
資源割付が行われる。
【0021】また、請求項2において、変数の値を設定
する命令である定義命令と当該定義命令で設定された変
数の値を使用する命令である参照命令とが少なくとも一
組順に並ぶ命令列である単純ブロックが単純ブロック形
成手段によって基本ブロック内に形成される。単純ブロ
ックは、定義命令と参照命令とが順に並ぶ命令列である
ため、当該定義命令で定義される変数の生存区間は最短
になる。プログラマが作成したソ−スプログラムおよび
中間言語プログラムには、設定および使用が一回限りの
変数が大多数を占めるので、プログラム中の大多数の変
数が、上記単純ブロック内に納められる。
【0022】単純ブロック形成後、前記基本ブロック内
生存変数集合から生存区間が一つの単純ブロック内に収
まる変数が単純ブロック内生存変数検出手段によって全
て検出され、検出結果は当該単純ブロックに対応づけた
単純ブロック内生存変数集合で表される。また前記基本
ブロック内生存変数集合から生存区間が複数の単純ブロ
ック間におよぶ変数が単純ブロック間生存変数検出手段
によって全て検出され、検出結果が単純ブロック間生存
変数集合で表される。
【0023】単純ブロック内生存変数集合、単純ブロッ
ク間生存変数集合生成後、変数が、前記単純ブロック間
生存変数集合から第1の生存区間重複判定部によって、
2つずつ取り出され、当該2変数の生存区間に対応する
命令位置情報集合の集合積が算出されることで、生存区
間の重複が判定される。また、同一の単純ブロックに対
応づけられた単純ブロック内変数集合から、第2の生存
区間重複判定部によって、変数が2つずつ取り出され、
当該2変数の生存区間に対応する命令位置情報集合の集
合積が算出されることで、生存区間の重複を判定され
る。上記のように、単純ブロックにおいては、変数の生
存区間は最短となり、上記集合積の算出は簡略なものと
なる。更に前記単純ブロックに対応づけられた単純ブロ
ック内変数集合と、単純ブロック間生存変数集合とか
ら、第3の生存区間重複判定部によって、変数が1つず
つ取り出され、当該2変数の生存区間に対応する命令位
置情報集合の集合積が算出することで、生存区間の重複
が判定される。
【0024】また請求項3において、基本ブロック間生
存変数集合と前記単純ブロックに対応づけられた単純ブ
ロック内生存変数集合とから第4の生存区間重複判定部
によって変数が1つずつ取り出され、当該2変数の生存
区間に対応する命令位置集合の集合積が算出されること
で、生存区間の重複が判定される。また、基本ブロック
間生存変数集合と単純ブロック間生存変数集合とから、
第5の生存区間重複判定部によって変数が1つずつ取り
出され、当該2変数の生存区間に対応する命令位置集合
の集合積を算出することで、生存区間の重複が判定され
る。
【0025】また請求項4において、前記単純ブロック
形成手段は、定義命令取り出し手段によって、基本ブロ
ックから、定義命令が1つずつ取り出される。定義命令
取り出し手段によって取り出された定義命令が含まれる
基本ブロックから、対応参照命令検出手段によって定義
命令取り出し手段が取り出した定義命令に対応する参照
命令が検出される。検出後、対応参照命令検出手段が検
出を行った定義命令が、対応参照命令検出手段が検出し
た参照命令の位置に移動可能か否かが定義命令移動可否
判定手段によって判定される。この判定において定義命
令移動可否判定手段が可能と判定した場合、定義命令移
動可否判定手段が可能と判定した定義命令が定義命令移
動手段によって当該定義命令に対応する参照命令の直前
に移動され、当該定義命令及び参照命令が一つの単純ブ
ロックに統合される。定義命令移動手段が移動した定義
命令が移動前において単純ブロック内の最後の命令であ
る場合、単純ブロック残命令移動手段によって移動前の
単純ブロックの残りの命令の全てが当該定義命令の移動
先の直前に移動され、移動した残命令が、移動先の単純
ブロックに統合される。
【0026】また請求項5において、前記定義命令取り
出し手段が取り出した定義命令によって値が設定される
変数が一つであるか否かが変数単複判定部によって判定
される。前記変数単複判定部が一つであると判定した場
合、前記対応参照命令検出手段が検出した参照命令が一
つか否かが参照命令単複判定部によって判定される。前
記参照命令単複判定部が一つであると判定した場合、当
該参照命令に対応する定義命令で値が設定される変数
が、当該定義命令から当該参照命令までの区間において
再設定されるか否かが、第1の再設定有無判定部によっ
て判定される。前記第1の再設定有無判定部が再設定が
ないと判定すると当該定義命令において使用される変数
が定義命令内使用変数検出部によって検出される。当該
定義命令から当該参照命令までの間において、前記定義
命令内使用変数検出部が検出した変数が再設定されない
ことが第2の再設定有無判定部によって判定される。前
記第2の再設定有無判定部が再設定が無いと判定する
と、当該定義命令が、当該参照命令の位置に移動可能で
あることが移動可否判定部によって判定される。 ま
た、請求項6において、前記定義命令取り出し部によっ
て前記プログラムから定義命令が1つずつ取り出され
る。取り出された定義命令を含む基本ブロックと、当該
定義命令によって設定される変数とが出口無効判定部に
よって検出され、検出された変数の設定値が当該基本ブ
ロックの出口で無効か否かが、前記有効変数情報記憶手
段の記憶内容に基づき判定される。前記出口無効判定部
が設定値無効と判定した場合、当該基本ブロックから、
当該定義命令に対応する参照命令であって、当該基本ブ
ロックの出口に最も近いものが出口最近参照命令検出部
によって検出される。参照命令の検出後、当該定義命令
の次の命令から出口最近参照命令検出部が検出した参照
命令までの命令位置情報が、基本ブロック内命令位置検
出部によって全て検出される。命令位置情報の検出後、
命令位置情報が検出された変数についての生存区間が、
基本ブロック内生存区間表現部によって基本ブロック内
命令位置検出部が検出した命令位置情報の集合で表され
る。一方、前記基本ブロック内生存区間表現部が生存区
間を表現した変数が、前記基本ブロック内生存変数検出
手段によって、当該変数が含まれる基本ブロックに対応
する基本ブロック内生存変数集合のメンバーに加えられ
る。
【0027】また、請求項7において、前記出口無効判
定部が有効と判定した場合、前記基本ブロック内定義情
報記憶手段の記憶内容に基づいて、前記出口無効判定部
によって有効と判定された定義命令において設定される
変数が、再設定有無判定部によって当該定義命令から当
該定義命令を含む基本ブロックの出口までの間に再設定
されるか否かが判定される。前記再設定値有無判定部が
再設定無しと判定した場合、出口有効時位置情報検出部
によって当該定義命令の次の命令から当該基本ブロック
の出口までの命令位置情報が検出される。前記再設定有
無判定部が再設定無しと判定することで、前記有効変数
情報記憶手段および基本ブロック内定義情報記憶手段の
記憶内容に基づいて、当該定義命令が含まれる基本ブロ
ックの次順の基本ブロックのうち、当該変数がその入口
及び出口で有効であり、かつその内部で、当該変数が再
設定されないものの全てが、生存基本ブロック検出部に
よって検出される。前記基本ブロック内定義情報記憶手
段の記憶内容に基づいて、基本ブロック間位置情報検出
部によって、前記生存基本ブロック検出部が検出した基
本ブロック内に含まれる命令位置情報が全て検出され
る。
【0028】前記再設定有無判定部が再設定無しと判定
することで、当該定義命令が含まれる基本ブロックの次
順の基本ブロックのうち、その入口で当該変数の値が有
効であり、その出口で無効である基本ブロックが末尾基
本ブロック検出部によって検出される。基本ブロックの
検出後、前記末尾基本ブロック検出部が検出した基本ブ
ロックから、末尾参照命令検出部により該定義命令に対
応する参照命令が検出される。参照命令の検出後、前記
末尾基本ブロック検出部が検出した基本ブロックの入口
から前記末尾参照命令検出部が検出した参照命令までの
命令位置情報が、入口有効時位置情報検出部によって全
て検出される。命令位置情報の検出後、命令位置情報が
検出された変数に対応する生存区間の集合が、基本ブロ
ック間生存区間表現部によって出口有効時位置情報検出
手段の検出結果と、入口有効時位置情報検出手段の検出
結果と、基本ブロック間位置情報検出手段の検出結果と
をあわせた集合で表される。
【0029】一方、再設定有無判定部が再設定なしと判
定した変数は、前記基本ブロック間生存変数検出手段に
よって基本ブロック間生存変数集合のメンバーに加えら
れる。また、請求項8において、マーキング部によっ
て、前記定義命令取り出し部が取り出した定義命令の位
置に識別情報が付される。マーキング部によるマーキン
グ後、当該定義命令に対応する参照命令で使用される変
数が、参照変数検出部によって検出される。変数の検出
後、参照−定義情報記憶手段の記憶内容に基づいて、前
記参照変数検出部が検出した変数に設定値を設定する定
義命令が、定義命令検出部によって全て検出される。定
義命令の検出後、前記定義命令検出部が検出した定義命
令のうち、前記マーキング部によって付された識別情報
が無いものが無マーク定義命令検出部によって全て検出
される。識別情報無し定義命令の検出後、前記無マーク
定義命令検出部が検出した定義命令の次の命令から、そ
の定義命令を含む基本ブロックの出口までの命令位置情
報が、第1の分岐ブロック内位置情報検出部によって全
て検出される。命令位置情報の検出後、基本ブロック間
生存区間表現部が表した命令位置情報の集合に、第1の
命令位置情報付加部によって、前記第1の分岐ブロック
内位置情報検出部が検出した命令位置情報が付加され
る。
【0030】また、請求項9において、前記定義−参照
情報記憶手段の記憶内容に基づいて、分岐ブロック内参
照命令検出部によって前記無マーク定義命令検出部が検
出した定義命令に対応する参照命令が検出される。参照
命令の検出後、前記分岐ブロック内参照命令検出部が検
出した参照命令を含む基本ブロックが分岐ブロック検出
部によって検出される。参照命令の検出後、前記分岐ブ
ロック検出部が検出した基本ブロックの入口から、前記
分岐ブロック内参照命令検出部が検出した参照命令まで
の命令位置情報が、第2の分岐ブロック内位置情報検出
部によって全て検出される。命令位置情報の検出後、前
記基本ブロック間生存区間表現部が表した命令位置情報
の集合に、前記第2の分岐ブロック内位置情報検出部が
検出した命令位置情報が第2の命令位置情報付加部によ
って付加される。
【0031】
【実施例】以下、本発明のコンパイラの一実施例を図面
を用いて説明する。先ず、本明細書においてので引用す
る用語を、以下に説明しておく。 ・基本ブロック プログラム中の連続命令列であって、列の途中に飛び越
しもなく、また途中への飛び越しもないものをいう。こ
の基本ブロックの一例を図16に示す。本実施例では処
理対象を中間言語プログラムとしているので、上記命令
列は、中間言語のものが与えられる。
【0032】更に、判断処理、あるいは、多方向分岐処
理内の基本ブロックを、図13を参照しながら説明す
る。図13(a)に示すように、基本ブロックとは列の
途中に飛び越しもなく、また途中への飛び越しもないも
のを指すから、C言語風のif(p)文で表される判断
処理において、選択的に実行される処理S1、S2は、そ
れぞれ1つの基本ブロックB1、B2となる。このように処
理S1、S2に相当する基本ブロックB1、B2を、分岐基本
ブロックと称する。
【0033】更に図13(b)に示すように、C言語で
switch(p)文で表される多方向分岐処理におい
て、選択的に実行される処理S1、S2、S3、S4・・・
・は、それぞれ1つの基本ブロックB1、B2、B3、B4・・
・・となる。また、プログラム中の一つの文あるいは中
間コード命令など、中間言語プログラムの1実行単位を
中間言語ステップと呼ぶことにする。 ・変数の定義、参照 ある変数に値を設定している中間言語ステップをその変
数の定義といい、定義された値を使っている中間言語ス
テップを変数の参照という。逆に変数に値を設定するこ
とを、変数を定義するという。更に変数の値を使うこと
を、変数を参照するという。 ・生存変数に関する情報 ソースプログラム、中間言語プログラムを問わず、プロ
グラム中のステップの狭間を点といい、その点において
変数に格納されている値が有効であるとき、その点で当
該変数は生きているという。更に基本ブロックBの入口
の点で生きている変数の集合は、LiveIn[B]と表され、
基本ブロックBの出口の点で生きている変数の集合は、L
iveOut[B]と表される。また、基本ブロックB内に定義
がある変数の集合をDef[B]で表す。尚この変数集合Def
[B]は、生存変数に関する情報を求める過程に得られ
る。図16に示したプログラム例での、集合LiveIn
[B]、集合LiveOut[B]を、図17(a)に示す。本図
において、基本ブロックB1の入口で生きている変数は
「p1,p2,p3」であることが判り、出口で生きている変数
は「z1,a,b」であることが示される。 ・定義-参照情報、参照-定義情報 定義-参照情報とは、定義によって設定された設定値が
どこで使用されているかが示される情報であり、その一
例を図17(b)に示す(定義によって設定された設定
値を参照によって使用することを、定義が参照に到達す
るという。)。図17(b)の一例では、中間言語ステ
ップs1で定義されている変数t1は、中間言語ステップs2
で参照されることが判る。
【0034】参照-定義情報とは、参照によって使用さ
れた設定値がどこで定義されているかが示される情報で
あり、その一例を図17(c)に示す。本図において、
中間言語ステップs2で参照される変数は、変数t1,p3で
あり、これらの何れかは、中間言語ステップs1で定義さ
れる。 ・変数についての注意 変数の中には、その生存区間を複数持つものがある。こ
の場合、生存区間毎に異なるレジスタを割り付けること
ができ、また、そうした方がオブジェクトプログラムを
より良くすることができる。そのため生存区間が複数あ
る場合は、生存区間毎に1つの変数が存在するものとす
る。これを図13(c)を参照しながら説明する。図1
3(c)において、「x=10」で定義される変数xは、「y
=x+5」で参照されるから、「x=10」で定義される変数x
の生存区間は図中のL5となる。一方「x=20」で定義さ
れる変数xは、「y=x+30」で参照されるから、「x=20」
で定義される変数xの生存区間は図中のL6となる。
【0035】一方、図13(d)において、「x=40」で
定義される変数xは、参照されないまま、「x=30」で再
定義されるので、「x=40」で定義される変数xの生存区
間は、存在しないことになる。即ち、「x=40」で定義さ
れる変数xは生存しないと判定される。「x=30」で定義
される変数xは「y=x+50」で参照されるから、「x=30」
で定義される変数xの生存区間は図中のL7となる。 ・生存区間についての注意 生存区間は、基本ブロックの集合、中間言語ステップの
集合で表される。本実施例では、詳細な情報が必要とさ
れるため、後者のものが採用されている。また、生存区
間の重複、非重複を集合積で判定するため、生存区間の
終始が一致する中間言語ステップでは、生存区間は重な
らないとしている。そのため、変数の生存区間をステッ
プ集合で表す場合、定義のステップは、当該集合に含ま
ない。
【0036】以上の変数及び生存区間に関する情報、定
義-参照情報、参照-定義情報については、以下の文献に
詳細が記されている。 A.Aho, R.Sethi, J.Ulman: "Compilers Principles, Techniques, and Tools", Addison Wesley, 1988 以下、本発明の生存区間重複検査装置の一実施例を図面
を用いて説明する。図1は、本発明の第1の実施例にお
けるコンパイラの構成図である。コンパイラは、構文解
析装置1と、最適化装置2と、資源割付装置3と、コー
ド生成装置4とで構成されている。
【0037】構文解析装置1は、ファイルとして記憶さ
れているソースプログラムの字句解析、構文解析、およ
び意味解析を行なう。解析結果は、中間言語プログラム
として出力される。ソースプログラムの一例を図14に
示し、当該ソースプログラムに対応する中間言語プログ
ラムの一例を図15に示す。最適化装置2は最終的に生
成される機械語プログラムのプログラムサイズを削減
し、実行時間を短縮させる目的で中間言語プログラムの
最適化を行なう。
【0038】資源割付装置3は、プログラムの変数の生
存区間を求め、生存区間毎に変数に資源であるレジスタ
やメモリを割り付ける。コード生成装置4は、最適化さ
れた中間言語プログラムを、資源割付装置3の割り付け
結果に従って、ターゲットマシンの機械語命令に変換
し、オブジェクトプログラムとして出力する。
【0039】図2は、図1に示す最適化装置2の構成図
である。この最適化装置2の詳細については本発明の主
眼でないので説明を省略し、本発明のコンパイラと特に
関係のある点のみを説明する。最適化装置2は、制御フ
ロー解析部5と、データフロー解析部6と、最適化処理
部7と、単純ブロック生成部8とで構成される。制御フ
ロー解析部5およびデータフロー解析部6では、基本ブ
ロック化、制御フロー解析、データフロー解析という作
業を行う。基本ブロック化とは、処理対象のプログラム
を、以後の処理単位である基本ブロックに分割すること
である。図15に示した中間言語プログラムについての
基本ブロックを図16に示す。また制御フロー解析と
は、各基本ブロック間の制御の流れを解析することであ
る。更にデータフロー解析とは各基本ブロックの内部を
調べ、それぞれの変数がどこで定義され、どこで参照さ
れているかについて解析することである。これらの処理
によって、データ情報、定義-参照情報、及び参照-定義
情報が得られる。以上の3情報の一例を図17(a)
(b)(c)に図示する。本一例は図16に示した中間
言語プログラムについてのものである。図17(a)に
示すデータフロ−情報において、基本ブロックB1の入り
口では、変数p1,p2,p3が生きていることが示される。ま
た、基本ブロックB1の出口では、変数z,a,bが生きてい
ることが示される。図17(b)において、中間言語ス
テップs1で定義される変数t1は、中間言語ステップs2で
参照されることが示される。図17(c)の参照−定義
情報において、中間言語ステップs2で参照される変数t
1,p3は、中間言語ステップs1で定義されることが示され
る。
【0040】最適化処理部7は、制御フロー解析部5お
よびデータフロー解析部6の処理結果を使って中間言語
プログラムに対する最適化を行う。この部分は本発明の
主眼でないのでその詳細は省略する。単純ブロック生成
部8は、基本ブロックを複数個の小ブロックに分割し、
分割後、小ブロック同士の統合が可能か否を判定して、
当該判定で可能と判定されたもの同士を統合し、定義と
参照とが少なくとも一組順に並ぶステップ列を形成す
る。単純ブロック生成部8は、この統合処理によって基
本ブロック内の生存区間の重複をより単純なものとす
る。このような統合処理によって、最終的に形成される
小ブロックは単純ブロックと称される。単純ブロック生
成前の生存区間の重複を図18に図示し、生成後の生存
区間の重複を図20に図示する。図20と図18では、
図20のほうが、比較的に生存区間の重複がより単純に
なり、生存区間の重複数が減少するので、資源割付部で
必要とするレジスタ数も少ないもので済む。
【0041】単純ブロック生成部8の処理過程を図3の
フロ−チャ−ト、図4の説明図を参照しながら説明す
る。図3は単純ブロックを生成する手順を示すフローチ
ャートであり、図4は、図3のフロ−チャ−トの各ステ
ップでの処理を図的に表した説明図である。ステップA
1において単純ブロック生成部8は、基本ブロック内の
各中間言語ステップを1つの小ブロックにする。図18
に示したプログラムの基本ブロックB1に対して、この処
理を行うと、基本ブロックB1内部は、図19(a)に示
すものとなる。図19(a)において、中間言語ステッ
プs1は小ブロックPB1となる。また、中間言語ステップs
2は小ブロックPB2となる。同様に中間言語ステップs3、
s4、s5・・・は小ブロックPB3、PB4、PB5・・・とな
る。
【0042】ステップA2において、単純ブロック生成
部8は小ブロックを、図4(a)の矢符b11、12、
13に示すように、実行順に小ブロックを一つずつ取り
出す。ステップA3において単純ブロック生成部8は、
取り出した小ブロックb1が基本ブロック内で最後のも
のであるかを判定し、最後の場合、処理を終了する。小
ブロックb1が最後でない場合、ステップA4を行う。
【0043】ステップA4において単純ブロック生成部
8は、小ブロックb1の最後にある中間言語ステップs1
を取り出す。ステップA5において単純ブロック生成部
8は、図4(b)に示すように、取り出した中間言語ス
テップs1で定義される変数vが一つか複数かの判定を行
い、複数の場合、ステップA2を行う。単数の場合、ス
テップA6を行う。
【0044】ステップA6において、単純ブロック生成
部8は、図4(c)に示すように変数vの参照が基本ブ
ロック内に存在するか否か、即ち、変数の生存区間の長
さが他の基本ブロックに及ぶか否かを判定する。及ぶ場
合ステップA2を行い、及ばない場合、ステップA7を
行う。ステップA7において、図4(d)に示すよう
に、その変数vの参照が一回限りであることを判定す
る。この判定は、定義-参照情報から変数vの参照回数
を調べることで行われる。複数回であればステップA2
を行い、一回限りであれば、ステップA8を行う。
【0045】ステップA8において、単純ブロック生成
部8は、図4(e)に示すように、定義s1から変数vの
参照までに、変数vが再定義されているかを判定する。
定義されている場合はステップA2を行う。定義されて
いない場合は、ステップA9を行う。ステップA9にお
いて、単純ブロック生成部8は、図4(f)に示すよう
に、変数vが依存する変数vx、即ち、小ブロックb1
内で参照される変数が、定義s1から変数vの参照までに
再定義されるか否かを判定する。再定義されるときはス
テップA2を行い、再定義がない場合はステップA10
を行う。ここで依存がある変数とは、当該変数の設定値
に、影響を及ぼし得る全ての変数をいう。上述のよう
に、小ブロックb1は参照と定義とが順に並ぶステップ
列に形成されてゆくから、小ブロックb1は、変数vが
依存する変数を全て含んでいる。例えば、図19(d)
の小ブロックPB7に示す変数xの設定値は、変数x4、t1、
p3、p1、p2の設定値の影響を受けるので、変数xは、変
数x4、t1、p3、p1、p2に依存するという。もし依存変数
の定義、即ち、変数x4、t1、p3、p1、p2の定義が、変数
xの定義から参照までの区間に存在すると、変数xの定義
命令を参照命令の位置に移動することは上記依存関係を
損なうことになる。このような依存関係の損失を考慮し
て、単純ブロック生成部8は移動可、移動不可を判定す
る。
【0046】ステップA10、ステップA11、ステッ
プA12において、単純ブロック生成部8は小ブロック
b1を抜き出し、抜き出した小ブロックb1を、変数v
の参照(中間言語ステップs2)が属する小ブロックb2
の先頭に挿入する。または小ブロックb1をステップS2
の直前に挿入してもよい。この抜き出し及び挿入処理
で、小ブロックb1及びb2が、1つの小ブロックに統
合される。このような統合をおこなった後、単純ブロッ
ク生成部8は小ブロックb1を削除する。図19(a)
に示した一例では、小ブロックPB1が抜き出され、小ブ
ロックPB2の直前に挿入されて、図19(a)に示した
小ブロックPB1、PB2は小ブロックPB2に統合される(矢
線g12参照)。その結果、小ブロックPB2は、図19
(b)に示すように、中間言語ステップs1、s2をメンバ
ーに含むようになる。更に、小ブロックPB2が抜き出さ
れ、小ブロックPB7の直前に挿入されて、図19(b)
に示した小ブロックPB2、PB7は、小ブロックPB7に統合
される(矢線g27参照)。その結果、小ブロックPB7
は、図19(c)に示すように、中間言語ステップs1、
s2、s7をメンバーに含むようになる。同様に、矢線g3
8に示すように小ブロックPB3及びPB4がPB8に統合さ
れ、更に矢線g59に示すように、小ブロックPB5及びP
B6がPB9に統合されるので、小ブロックPB8は、中間言語
ステップs3、s4、s8をメンバーとして含むようになり、
小ブロックPB9は、中間言語ステップs5、s6、s9をメン
バーとして含むようになる。以上の統合によって、小ブ
ロックPB7,PB8,PB9が単純ブロックとなる。
【0047】以上のステップA1〜ステップA12の手
順を、単純ブロック生成部8は、図4(a)の矢符b1
1、b12に示すように、残りの小ブロックについて繰
り返す。これらの単純ブロックにおいて、その内部の中
間言語ステップは、始めから終りの一ステップ前まで、
変数の参照が1回きりのもののみで構成されるようにな
る。また、その変数の参照が行われる中間言語ステップ
は、変数の定義が行われる中間言語ステップと同一の単
純ブロックとなる。
【0048】図5は、図1に示した資源割付装置3の構
成図である。生存区間重複判定部9は、生存区間を生成
しその生存区間の重複を検出する。変数資源割付部10
は、生存区間重複判定部9が求めた生存区間の情報を用
いて、資源であるレジスタやメモリを変数に割り付け
る。このとき、生存区間が重なる変数においては異なる
レジスタを変数に割付ける。
【0049】図5は、図1の資源割付装置3の構成図で
ある。資源割付装置3は、生存区間保持部11、単純ブ
ロック内生存変数集合保持部12、基本ブロック内生存
変数集合保持部13、基本ブロック間生存変数集合保持
部14、生存区間生成部15、生存区間重複検査部16
とで構成される。生存区間保持部11は、中間言語ステ
ップによって表現された生存区間を、変数と対応づけて
保持する。また、各変数がどの単純ブロックにあるか、
更に、どの基本ブロックにあるかを対応づけている。生
存区間保持部11の保持内容の一例を図21(a)に示
す。これは、図20に示したプログラム例と対応してい
る。本図を参照すれば、変数t1の生存区間は中間言語ス
テップs2のみであり、また、変数t1は単純ブロックPB7
に属し、基本ブロックB1に属することが明確になる。
【0050】単純ブロック内生存変数集合保持部12
は、単純ブロック内のみに生存区間が存在する変数を、
当該単純ブロックと対応づけて保持する。このように単
純ブロック内のみに生存区間が存在する変数は、単純ブ
ロック内変数集合と称される。単純ブロック内生存変数
集合保持部12の保持内容の一例を図21(b)に示
す。本図も図20に示したプログラム例と対応づけられ
ている。本図を参照すれば、単純ブロックPB7は、変
数t1と、変数x4とを含むことがわかる。
【0051】基本ブロック内生存変数集合保持部13
は、基本ブロック内のみに生存区間が存在する変数であ
って、その生存区間が、複数の単純ブロック間にわたる
ものを当該基本ブロックと対応づけて保持する。この基
本ブロック内生存変数集合保持部13が保持する変数の
集合は、基本ブロック内変数集合と称される。基本ブロ
ック内生存変数集合保持部13の保持内容の一例を図2
1(c)に示す。本図も図20に示したプログラム例と
対応づけられている。本図を参照すれば、単純ブロック
B1の基本ブロック内変数集合は、変数xと、変数yとを含
むことがわかる。
【0052】基本ブロック間生存変数集合保持部14
は、変数のうち、生存区間が、複数の基本ブロック間に
わたるものの集合を保持する。基本ブロック間生存変数
集合保持部14が保持する変数の集合は基本ブロック間
変数集合と称される。基本ブロック間生存変数集合保持
部14の保持内容の一例を図21(d)に示す。本図も
図20に示したプログラム例と対応づけられている。本
図を参照すれば、変数z,a,bは、その生存区間が、複数
の基本ブロック間にまたがっていることがわかる。
【0053】生存区間生成部15は、変数の生存区間を
中間言語ステップの集合で表現し、当該生存区間の範囲
によって、変数を3つの集合に分類する。生存区間生成
部15の処理は、生存区間生成処理、定義毎生存区間検
出処理、及び後続ブロック生存区間検出処理に大別さ
れ、また上記の3つの集合とは、先に述べた単純ブロッ
ク内変数集合、基本ブロック内変数集合、基本ブロック
間生存変数集合である。この分類は、変数の格納先を、
単純ブロック内生存変数集合保持部12、基本ブロック
内生存変数集合保持部13、基本ブロック間生存変数集
合保持部14に切り換えることで行われる。
【0054】生存区間生成部15の処理過程を図7、図
8、図9、図10のフロ−チャ−トを参照しながら説明
する。図7は生存区間生成処理のフロ−チャ−ト、図8
は定義毎生存区間検出処理のフロ−チャ−ト、図9は後
続ブロック探索処理のフロ−チャ−ト、図10は後続ブ
ロック生存区間検出処理のフロ−チャ−トである。
【0055】図7のステップB1において、生存区間生
成部15は、未処理の定義が存在するか否かを判定す
る。処理済みか未処理かは、定義に付されるマークで判
別される。存在するとき、ステップB2を行い、そうで
ないときは処理を終了する。ステップB2、B3、B
4、B5において、生存区間生成部15は、先ず全ての
基本ブロックを未探索にして、未マークの定義s1を取り
出し、定義s1にマークをつけ、定義毎生存区間検出処理
を行なう。
【0056】以上のステップB1、B2、B3、B4、
B5の処理は、全ての中間言語ステップがマークされる
まで繰り返される。図8に示すステップC2において、
生存区間生成部15は、中間言語ステップsで定義され
る変数vが基本ブロックBの出口において生きているこ
と、つまり、変数vがLiveOut[B]に属することを判定
し、存在する場合、ステップC18を行ない、存在しな
い場合、ステップC3〜ステップC7を行う。
【0057】ステップC18において生存区間生成部1
5は、定義sの次の中間言語ステップからBの最後の中
間言語ステップまでに定義s以外の変数vの定義が存在
しないことを判定する。存在しないときステップC8〜
ステップC16を行ない、存在するときステップC3〜
ステップC7を行う。ステップC3、C4において、生
存区間生成部15は、基本ブロックBの出口から入口に
向かう方向に向けて探索を行い、変数vの参照s1を見つ
ける。この探索作業は、定義sの定義-参照情報を参照す
ることで行われる。参照s1を見つけると、生存区間生成
部15は、定義sの次の中間言語ステップから参照s1ま
での中間言語ステップを変数vの生存区間として生存区
間保持部11に格納する。
【0058】ステップC5、ステップC6、ステップC
7において、生存区間生成部15は、定義sが属する単
純ブロックpbと、参照s1が属する単純ブロックが同じ
かどうか判定し、同じ場合(ステップC5)、生存区間
生成部15は、定義sを単純ブロック内生存変数集合保
持部12に格納し(ステップC6)、そうでない場合、
即ち、定義sが属する単純ブロックpbと参照s1が属する
単純ブロックとが異なる場合(ステップC5)、変数v
を基本ブロック内生存変数集合保持部13に格納し(ス
テップC7)、ステップC17へ進む。
【0059】ステップC8、C9において、生存区間生
成部15は、変数vを基本ブロック間生存変数集合保持
部14に格納し(ステップC8)、定義sの次の中間言
語ステップから基本ブロックBの最後の中間言語ステッ
プまでを、変数vの生存区間として生存区間保持部11
に格納する(ステップC9)。ただし、定義s自体が基
本ブロックBの最後の中間言語ステップのときは、生存
区間保持部11には何にも格納しない。
【0060】ステップC10において、生存区間生成部
15は、実行順が基本ブロックBの次のもの(後続基本
ブロック)を取り出し、その後続基本ブロックB1のLive
In[B1]を参照して、後続の基本ブロックB1が未探索であ
り、かつその入口で変数vが生きていることを確認す
る。確認後、定義s及び基本ブロックB1を処理対象にし
て、後続ブロック探索処理を行なう。
【0061】図9は、後続ブロック探索処理のフロ−チ
ャ−トである。ステップF1、F2、F3、F4、F5
において、生存区間生成部15は、LiveIn[B1]に変数v
が属するかを判定し(ステップF2)、属する場合基本
ブロックB1は未探索であるかどうかを判定する(ステッ
プF3)。未探索であると、後続ブロック生存区間検出
処理を行う(ステップF4)。もし未探索でないなら、
基本ブロックBの後続基本ブロックB1がみつかるまで
(ステップF3)、以上の処理を繰り返す(ステップF
1、F5)。
【0062】図10は後続ブロック生存区間検出処理の
手順を示すフローチャートである。ステップD1におい
て、生存区間生成部15は、基本ブロックBを探索済み
とする。ステップD2において、生存区間生成部15
は、中間言語ステップsで定義される変数vが、基本ブ
ロックBの出口で生きていることを判定する。生きてい
る場合ステップD8を行い、そうでない場合ステップD
5〜ステップD6を行なう。上記判定は、具体的には、
生存区間生成部15が、変数vがLiveOut[B]にvが属
していることを確認することで行われる。
【0063】ステップD8において、生存区間生成部1
5は、基本ブロックBに変数vの定義が存在しないこと
を判定し、この場合、ステップD3〜ステップD4を行
なう、そうでないときステップD5〜D6を行う。この
判定は、具体的には、Def[B]に変数vが属さないこと
を確認することで行われる。ステップD3において、生
存区間生成部15は、基本ブロックB1の入口から出口ま
での中間言語ステップを変数vの生存区間にする(ステ
ップD3)。
【0064】ステップD4において、生存区間生成部1
5は、後続ブロック探索処理を行う。ステップD5にお
いて、生存区間生成部15は、定義sの定義-参照情報に
基づいて、基本ブロックBの出口から入口に向けて探索
を行い、変数vの参照s1を見つける。
【0065】ステップD6では、Bの先頭の中間言語ス
テップから参照s1までをvの生存区間として生存区間保
持部11に格納し、図10に示した後続ブロック生存区
間検出処理を終了する。ステップC12、C13、C1
4のループ処理において、生存区間生成部15は、参照
s2に到達する残り全ての定義である定義s3について、生
存区間生成処理を再帰的に行い、変数vの生存区間の情
報に、この定義s3についての生存区間の情報を付け加え
る。この定義s3の所在の探し出しは、参照s2の参照−定
義情報を参照することで行われる。上記定義s3は、上述
の分岐基本ブロック内にあり、これらを全て探し出すた
め、ステップC12、C13、C14の処理は繰り返え
される。
【0066】ステップC11、C15、C16におい
て、生存区間生成部15は、プログラム中の判断分岐処
理あるいは多方向分岐処理が存在し、更に、上記参照s2
が一つの分岐先基本ブロック内にある場合、生存区間生
成部15は、残りの分岐基本ブロック内にある残り全て
の参照を求める。それぞれの参照s2について、ステップ
C12、C13、C14のループ処理を繰り返し行う。
【0067】ステップC17では、定義毎生存区間検出
処理を終了する。以上の手順により、変数は、単純ブロ
ック内生存変数集合保持部12か、基本ブロック内生存
変数集合保持部13か、基本ブロック間生存変数集合保
持部14のどれかに格納され、これらの保持部の保持内
容が、図21(b)、(c)、(d)に示したものとな
る。
【0068】生存区間重複検査部16は、変数の生存区
間の重複を検査する。当該検査は、単純ブロック内生存
変数集合保持部12、基本ブロック内生存変数集合保持
部13、基本ブロック間生存変数集合保持部14、生存
区間保持部11の情報を使用して行われる。この重複検
査処理を、図11のフロ−チャ−トを参照しながら説明
する。
【0069】ステップE2では、単純ブロック毎変数集
合ps1に属する変数間に対して、生存区間の重複を検査
する。(単純ブロック内にのみ生存区間がある変数間で
の生存区間重複検査) ステップE3、E4、E5のループ処理において、生存
区間重複検査部16は、図12(c)に示すように、基
本ブロックpb1が基本ブロックbs1に属するか否かを判定
し、基本ブロックbb1の基本ブロック内変数集合bs1に属
する変数v1の生存区間が単純ブロックpb1に存在するか
否かを判定して(ステップE4)、更に図12(d)に
示すように、単純ブロック内変数集合ps1に属する変数
と、変数v1の間で生存区間の重複を検査する(ステップ
E5 これは、単純ブロック内にのみ生存区間がある変
数と、基本ブロック内にのみ生存区間がある変数での生
存区間重複検査となる。)。このステップE4、E5の
処理を、生存区間重複検査部16は、基本ブロックbb1
の基本ブロック毎変数集合bs1に属するすべて変数につ
いて繰り返す(ステップE3)。
【0070】ステップE6、E7のループ処理におい
て、生存区間重複検査部16は、単純ブロック内変数集
合ps1に属する変数と、基本ブロック間生存変数集合保
持部14に保持されている変数v2のとで生存区間の重複
を検査する(ステップE7)。ステップE7の処理を、
全ての基本ブロック間生存変数集合保持部14に保持さ
れている残り全ての変数v2について繰り返す(ステップ
E6)。
【0071】ステップE1において生存区間重複検査部
16は、ステップE2からE7までの処理が単純ブロッ
ク内生存変数集合保持部12にある単純ブロックpb1の
単純ブロック毎変数集合ps1の全ての変数について行っ
たか否かを判定し、処理済みならば、ステップE8から
E12までの処理を行う。ステップE8において生存区
間重複検査部16は、基本ブロック内生存変数集合保持
部13にある全ての基本ブロックbb2の基本ブロック内
変数集合bs2についてステップE9からE11を行う。
【0072】ステップE9において生存区間重複検査部
16は、基本ブロック内変数集合bs2に属する変数につ
いての生存区間重複を検査する。ステップE10、E1
1では、基本ブロック内変数集合bs2に属する変数vと、
基本ブロック間変数集合に属する変数v3との間で生存区
間の重複を検査し(ステップE11)、基本ブロック間
生存変数集合保持部14に保持されている変数v3のう
ち、基本ブロックbb2内に生存区間が存在するものの全
てについて、ステップE11の検査を繰り返す(ステッ
プE10)。
【0073】ステップE12では、基本ブロック間生存
変数集合保持部14にある変数間について生存区間の重
複を検査する。以上のように生存区間重複検査部16が
検査処理を行うと、生存区間の重複が検査される。図2
0のプログラム例についての検査結果を図22に示す。
以上のように構成される本実施例の資源割付装置におけ
る具体的な動作を図14から図20を使用して説明す
る。
【0074】図14は、C言語記述のプログラムの一部
分の例である。本図において、変数p1, p2, p3の定義
は、プログラム例の1行目より以前にあるものとし、4
行目以降は使用がないものする。また、変数sの参照
が、この例の後に存在するとする。図15は、図14の
ソースプログラムに対する構文解析装置1の出力である
中間言語プログラムである。この中間言語プログラムは
2番地形式のもので与えられる。
【0075】図15の中間言語プログラムに対して制御
フロー解析部5が基本ブロック化を行い、図16に示し
た基本ブロックが生成される。図16において、中間言
語ステップs1からs11までが基本ブロックB1、中間言語
ステップs12からs15までが基本ブロックB2、中間言語ス
テップs16からs18までが基本ブロックB3である。図1
6に示した基本ブロック化後の中間言語プログラムに対
して、データフロー解析部6がデータフロー解析を行う
と、図17に示した生存変数に関する情報、定義-参照
情報、及び参照-定義情報が求められる。
【0076】単純ブロック生成部8が、単純ブロック生
成処理の手順により、図16中の基本ブロックB1を単純
ブロックに分割する過程を図19に示す。先ず単純ブロ
ック生成部8は、図19(a)に示すように、基本ブロ
ックB1を、中間言語ステップを一つだけ含む単純ブロッ
クに分割する(単純ブロック生成処理のステップA
1)。
【0077】単純ブロック生成部8が、図3に示したフ
ロ−チャ−トのステップA2からステップA12までの
処理を行い、小ブロックPB1に含まれている中間言語ス
テップs1を小ブロックPB2の先頭に移動する。詳しく
は、単純ブロック生成部8は、小ブロックPB1を取りだ
し(単純ブロック生成処理のステップA2)、小ブロッ
クPB1が基本ブロックB1の最後の小ブロックでないこと
を検出し(単純ブロック生成処理のステップA3)、小
ブロックPB1の最後の中間言語ステップs1を検出する
(単純ブロック生成処理のステップA4)。次に、中間
言語ステップs1で定義される変数が変数t1の唯一つであ
ることを検出し(単純ブロック生成処理のステップA
5)、変数t1の参照が1回であり、基本ブロックB1内に
あることを定義-参照情報から検出する(単純ブロック
生成処理のステップA6、A7)。次に、定義s1の次の
中間言語ステップから変数t1の参照までに、変数t1の定
義がないことを検出し、定義s1で参照される変数p1, p2
の定義が、定義s1の次の中間言語ステップから変数t1の
参照までにないことを検出し、変数t1の参照が属する小
ブロックPB2を検出する(単純ブロック生成処理のステ
ップA10)。そして、小ブロックPB2の先頭に小ブロ
ックPB1の要素である定義s1を挿入する(単純ブロック
生成処理のステップA11)。
【0078】同様に、図19(a)の小ブロックPB2に
属する中間言語ステップs1,s2を、小ブロックPB7の先頭
に移動した様子を図19(c)に示す。以上の処理を小
ブロックPB3, PB4, PB5, PB6の順に繰り返すと、基本ブ
ロックB1の内部は、図19(c)に示したものから、図
19(d)に示したものへと変遷する。続いて、単純ブ
ロック生成部8が、小ブロックPB7の最後の中間言語ス
テップs7で定義される変数xと、小ブロックPB8の最後の
中間言語ステップs8で定義される変数yとを移動しよう
とするが、これらの変数x,yは、参照回数が2回なので
小ブロックPB7, PB8の移動を行わないと判定する(単純
ブロック生成処理のステップA7)。同じく小ブロック
PB9を移動しようとするが、小ブロックPB9は、最後の
定義s9で定義される変数zの参照が基本ブロックB2に存
在するため、移動を行わないと判定する(単純ブロック
生成処理のステップA6)。小ブロックPB10は最後の中
間言語ステップs10で定義される変数aが基本ブロックB2
で参照されるので移動を行わないと判定し(単純ブロッ
ク生成処理のステップA6)、小ブロックPB11は基本ブ
ロックB1の最後の小ブロックであるので移動を行わない
と判定する(単純ブロック生成処理のステップA3)。
結局、基本ブロックB1の単純ブロック化は、図19
(d)に示した状態に留まる。
【0079】単純ブロック生成部8が、単純ブロック化
を基本ブロックB2,B3についても行った様子を、図20
に示す。単純ブロック生成部8による単純ブロック形成
後、生存区間生成部15が、生存区間の表現を行い、か
つ、各変数を、3つの集合に分類する。この様子を、代
表的な変数t1, y, a, b を一例にして説明する。
【0080】始めに変数t1について説明する。 1)生存区間生成部15によって、マーク済みでない中間
言語ステップs1が選択される。生存区間生成部15は、
中間言語ステップs1にマークし、定義毎生存区間検出処
理へ移る(生存区間生成処理のステップB1〜B5)。 2)全ての基本ブロックを未探索にする(生存区間生成処
理のステップB4)。
【0081】3)次に変数t1がLiveOut[B1]に含まれてい
るか検査する。変数t1は含まれていないので定義毎生存
区間検出処理のステップC3へ移る(定義毎生存区間検
出処理のステップC2、C18)。 4)定義s1の定義-参照情報から、基本ブロックB1の出口
から入口に向かって探索を行い、最初に見つかる変数t1
の参照s2を見つける(定義毎生存区間検出処理のステッ
プC3)。
【0082】5)生存区間生成部15は、中間言語ステッ
プs2を取り出し、これを、変数t1に対応づけて、変数t1
の生存区間の一部にする(定義毎生存区間検出処理のス
テップC4)。 6)生存区間生成部15は、中間言語ステップs1とs2は同
じ単純ブロックPB8に属しているので、変数t1を単純ブ
ロック内生存変数集合保持部12の単純ブロックPB7の
単純ブロック毎変数集合に格納する(定義毎生存区間検
出処理のステップC5)。
【0083】以上により、変数t1の生存区間が求めら
れ、また変数t1は、単純ブロック内生存変数集合保持部
12に格納される。次に変数yについて説明する。 1)マーク済みでない中間言語ステップs8が、生存区間生
成部15によって選択される。生存区間生成部15は、
中間言語ステップs8にマークし、生存区間生成処理を行
う(生存区間生成処理のステップB1〜B5)。
【0084】2)全ての基本ブロックを未探索にする(生
存区間生成処理のステップB4)。 3)次に変数yがLiveOut[B1]に含まれているか検査する。
生存区間生成部15は、変数yは含まれていないので定
義毎生存区間検出処理のステップC3を行う(定義毎生
存区間検出処理のステップC2、C18)。 4)生存区間生成部15は、中間言語ステップs8の定義-
参照情報に基づいて、基本ブロックB1の出口から入口に
向けての探索を行い、変数yの参照である中間言語ステ
ップs10を見つける(定義毎生存区間検出処理のステッ
プC3)。
【0085】5)生存区間生成部15は、変数yの生存区
間を、中間言語ステップs5,s6,s9,s10までにする(定義
毎生存区間検出処理のステップC4)。 6)生存区間生成部15は、中間言語ステップs8とs10は
異なる単純ブロックに属していることを判定し、変数y
を、基本ブロック内生存変数集合保持部13の保持集合
のうち、基本ブロックB1に対応するものに格納する(定
義毎生存区間検出処理のステップC5)。
【0086】以上により、変数yの生存区間が求めら
れ、生存区間生成部15は、変数yを基本ブロック内生
存変数集合保持部13に格納した。次に変数aについて
説明する。 1)先ずマーク済みでない中間言語ステップs10が、生存
区間生成部15によって選択される。生存区間生成部1
5は、中間言語ステップs10をマークし、定義毎生存区
間検出処理へ移る(生存区間生成処理ステップB1〜B
5)。
【0087】2)生存区間生成部15は、全ての基本ブロ
ックを未探索にする(生存区間生成処理ステップB
4)。 3)次に生存区間生成部15は、変数aがLiveOut[B1]に含
まれており、中間言語ステップs11には変数aの定義がな
いことを判定して、変数aを基本ブロック間生存変数集
合保持部14に格納し、定義毎生存区間検出処理ステッ
プC9へ移る(定義毎生存区間検出処理ステップC2、
C18、C8)。
【0088】4)生存区間生成部15は、中間言語ステッ
プs11を変数aの生存区間にする(定義毎生存区間検出処
理ステップC9)。 5)生存区間生成部15は、基本ブロックB2が探索済みで
あり、変数aがLiveIn[B2]に属していることを判定し、
基本ブロックB2と中間言語ステップs10に関して後続ブ
ロック生存区間検出処理を行う(定義毎生存区間探索処
理ステップC10)。
【0089】6)生存区間生成部15は、基本ブロックB2
を探索済みにする(後続ブロック生存区間検出処理ステ
ップD1)。 7)生存区間生成部15は、変数aがLiveOut[B2]に属する
ことを判定し、また、変数aが、Def[B2]には属さないこ
とを判定して、後続ブロック生存区間検出処理のステッ
プD3の処理を行う(後続ブロック生存区間検出処理ス
テップD2、D8)。
【0090】8)生存区間生成部15は、中間言語ステッ
プs13,s12,s14,s15 を、変数aの生存区間にする(後続
ブロック生存区間検出処理ステップD3)。 9)基本ブロックB2の後続基本ブロックB3が探索済みでな
く、かつ、LiveIn[B3]に変数aが属していることを判定
し、基本ブロックB3と定義s10に関して、後続ブロック
生存区間検出処理を行なう(後続ブロック生存区間検出
処理ステップD4)。
【0091】10)生存区間生成部15は、基本ブロックB
3を探索済みにする(後続ブロック生存区間検出処理ス
テップD1)。 11)生存区間生成部15は、変数aがLiveOut[B3]に属さ
ないことを判定し、後続ブロック生存区間検出処理のス
テップD5を行う(後続ブロック生存区間検出処理ステ
ップD2)。
【0092】12)生存区間生成部15は、基本ブロックB
3の出口から入口に向かって探索を行い、変数aの参照s1
6を見つけ出す(後続ブロック生存区間検出処理ステッ
プD5)。 13)参照s16を変数aの生存区間にする(後続ブロック生
存区間検出処理ステップD6)。
【0093】14)後続ブロック生存区間検出処理を終了
し、先の9)の状態に戻る(後続ブロック生存区間検出処
理ステップD7)。 15)基本ブロックB2に関して後続ブロック生存区間検出
処理を終了し、先の5)の状態に戻る(後続ブロック生存
区間検出処理ステップD7)。 16)生存区間生成部15は、中間言語ステップs10の定義
-参照情報を参照し、本情報内に存在する変数aの参照s1
2を取り出す。更に参照s12の参照-定義情報を参照し、
参照s12に到達する変数aの定義s10を取り出す。但し参
照s10はマーク済みなので、生存区間生成部15は、後
続ブロック生存区間検出処理ステップC10、C11を
行なわない。
【0094】17)定義毎生存区間検出処理を終了して、
1)の状態へ戻る。以上により、変数aの生存区間が求め
られ、変数aを基本ブロック間生存変数集合保持部14
に格納する。 次に変数bについて説明する。 1)生存区間生成部15は、マーク済みでない中間言語ス
テップs11を選択し、中間言語ステップs11をマークし
て、生存区間生成処理を行う(生存区間生成処理ステッ
プB1〜B5)。
【0095】2)生存区間生成部15は、全ての基本ブロ
ックを未探索にする(生存区間生成処理ステップB
4)。 3)生存区間生成部15は、変数bがLiveOut[B1]に含まれ
ており、定義s11自体がB1の最後の中間言語ステップで
あることを判定して、変数bを基本ブロック間生存変数
集合保持部14へ格納する。格納後、定義毎生存区間検
出処理ステップC6を行う(定義毎生存区間検出処理ス
テップC2、C18、C8)。
【0096】4)生存区間生成部15は、中間言語ステッ
プs11が、基本ブロックB1の最後の中間言語ステップで
あることを判定し、変数bの生存区間になにも格納しな
い(定義毎生存区間検出処理ステップC9)。 5)生存区間生成部15は、変数bがLiveIn[B2]に属して
いることを判定し、基本ブロックB2と中間言語ステップ
s11に関して後続ブロック生存区間検出処理を行う(定
義毎生存区間検出処理ステップC7)。
【0097】6)生存区間生成部15は、基本ブロックB2
を探索済みとする(後続ブロック生存区間検出処理ステ
ップD1)。 7)生存区間生成部15は、変数bがDef[B2]に属すること
を判定し、後続ブロック生存区間検出処理のステップD
5を行う(後続ブロック生存区間検出処理ステップD
2)。
【0098】8)生存区間生成部15は、中間言語ステッ
プs11の定義-参照情報を参照し、基本ブロックB2の出口
から入口に向けて探索を行い、最初に見つかる変数bの
参照s13を見つ出す(後続ブロック生存区間検出処理ス
テップD5)。 9)生存区間生成部15は、中間言語ステップs13を変数b
の生存区間にする(後続ブロック生存区間検出処理ステ
ップD6)。
【0099】10)後続ブロック生存区間検出処理を終了
し、先の5)の状態に戻る。11)変数bの参照s13につい
て、生存区間生成部15は、ステップC11〜C16を
行なう(定義毎生存区間検出処理ステップC11)。 12)生存区間生成部15は、参照s13の参照-定義情報に
存在する変数bの定義のうち、マーク済みでない定義s13
を見つ出す(定義毎生存区間検出処理ステップC1
2)。
【0100】13)生存区間生成部15は、参照s13をマー
クし、定義毎生存区間検出処理へ移る(定義毎生存区間
検出処理ステップC13、C14)。 15)生存区間生成部15は、変数bがLiveOut[B2]に含ま
れており、基本ブロックB2の最後までに変数bの定義が
ないことを判定し、定義毎生存区間検出処理ステップC
9へ移る(定義毎生存区間検出処理ステップC2、C1
8、C8)。
【0101】16)生存区間生成部15は、中間言語ステ
ップs12,s14,s15を変数bの生存区間にする(定義毎生存
区間検出処理ステップC9)。 17)生存区間生成部15は、変数bがLiveIn[B3]に属して
いることを判定し、基本ブロックB3が未探索であり、基
本ブロックB3と中間言語ステップs13に関して後続ブロ
ック生存区間検出処理を行う(定義毎生存区間検出処理
ステップC10)。
【0102】18)生存区間生成部15は、基本ブロックB
3を探索済みとする(後続ブロック生存区間検出処理ス
テップD1)。 19)生存区間生成部15は、変数bがLiveOut[B3]に属さ
ないことを判定し、後続ブロック生存区間検出処理ステ
ップD5へ移る(後続ブロック生存区間検出処理ステッ
プD2)。
【0103】20)生存区間生成部15は、基本ブロックB
3の出口から入口に向かって探索を行い、定義s13の定義
-参照情報に存在する変数bの参照s17を見つける(後続
ブロック生存区間検出処理ステップD5)。 21)生存区間生成部15は、中間言語ステップs16,s17を
変数bの生存区間にする(後続ブロック生存区間検出処
理ステップD6)。
【0104】22)後続ブロック生存区間検出処理を終了
し、先の17)の状態に戻る(後続ブロック生存区間検出
処理ステップD7)。 23)生存区間生成部15は、定義s13の定義-参照情報に
存在する参照s13,s14,s17を取り出す。参照s14,s17の参
照-定義情報に存在する変数bの定義s13だけであり、こ
の定義s13はマーク済みである。また参照s13の参照−定
義情報に存在する変数bの定義s11,s13はともにマーク済
みであるので、定義毎生存区間検出処理を終了し、先の
13)の状態に戻る(定義毎生存区間検出処理ステップC
11〜C16)。
【0105】24)生存区間生成部15は、更に参照s13の
参照-定義情報に存在するが、定義s11はマーク済みであ
るので、生存区間生成部15は定義毎生存区間検出処理
を終了し、先の1)の状態に戻る。以上により、変数bの
生存区間が求められ、変数bを基本ブロック間生存変数
集合保持部14に格納する。同様にして他の変数につい
ても、生存区間生成部15の生存区間検出処理を行うと
図21のようになる。
【0106】次に、図9の生存区間重複検査処理によっ
て変数の重複が検査される過程を示す。まず、生存区間
重複検査部16は、単純ブロック内にのみ生存区間が存
在する変数について重複検査を行う。例えば、同じ単純
ブロックPB8のみに存在する変数t3と、変数y4との生存
区間の重複検査を行い、変数t3と変数y4とは、生存区間
が重ならないと検査結果を下す(生存区間重複検査処理
ステップE2)。
【0107】次に生存区間重複検査部16は、単純ブロ
ック内にのみ生存区間が存在する変数と、基本ブロック
内にのみ生存区間が存在する変数との生存区間の重複検
査を行う。例えば、基本ブロックB1内にのみ生存区間が
存在する変数yと、単純ブロックPB9, PB10内にのみ生存
区間が存在する変数との重複検査を行い、変数t5, z4
は、生存区間が重なると検出結果を下す(生存区間重複
検査処理ステップE3〜E5)。
【0108】次に生存区間重複検査部16は、単純ブロ
ック内にのみ生存区間が存在する変数と、基本ブロック
間にまたがって生存区間が存在する変数との重複検査を
行う。例えば、基本ブロックB2に生存区間が存在する変
数aと、単純ブロックPB15内にのみ生存区間が存在する
変数cとの重複検査を行い、重複するという検査結果を
下す(生存区間重複検査処理ステップE6、E7)。
【0109】次に生存区間重複検査部16は、基本ブロ
ック内にのみ生存区間が存在する変数間の重複検査を行
う。例えば、生存区間重複検査部16は、基本ブロック
B1内のみに生存区間が存在する変数x,yについて重複検
査を行い、変数x,yは、生存区間が重複することを検出
する(生存区間重複検査処理ステップE9)。次に、生
存区間重複検査部16は、基本ブロック内にのみ生存区
間が存在する変数と、基本ブロック間にまたがって生存
区間が存在する変数との重複検査を行う。例えば、生存
区間重複検査部16は、基本ブロックB1に生存区間が存
在する変数aと、B1内にのみ生存区間が存在する変数x,
yとの重複検査を行い、変数x,yは、とは生存区間が重な
ることが検出され、yとは生存区間が重ならないことが
検出される(生存区間重複検査処理ステップE10、E
11)。
【0110】次に、生存区間重複検査処理ステップE1
2により、生存区間重複検査部16は、基本ブロック間
にまたがって生存区間が存在する変数間での生存区間の
重複検査を行う。例えば、生存区間重複検査部16は、
変数aと、変数bとの重複検査を行い、生存区間が重なる
と検査結果を下す。
【0111】
【発明の効果】以上説明してきたように請求項1の発明
に係るコンパイラによれば、基本ブロック内のみに生存
区間が収まる変数のうち、異なる基本ブロック内に属す
るもの同士の重複判定処理が結果として省かれるので、
生存区間の重複判定処理が無駄の無いものとなり、コン
パイル時間を短縮することができる。
【0112】また、請求項2に係るコンパイラによれ
ば、プログラム中の大多数の変数が単純ブロック内に納
められる。生存区間の重複判定処理は、同一の単純ブロ
ックに納められたもの同士で行われるため、生存区間の
重複判定処理が極めて無駄の無いものとなり、重複判定
に要する処理時間を大きく短縮できる。具体的には、n
個の変数について、nC2回行われた生存区間の重複判定
処理の処理時間は、この簡略化によって、約1/10と
なる。
【0113】また、請求項3に係るコンパイラによれ
ば、生存区間が単純ブロック内に属するか属しないか
で、生存区間の重複判定処理を個別化するので、冗長部
な重複判定処理が徹底して省かれる。また、請求項4に
係るコンパイラによれば、基本ブロック中の各定義命令
について統合可能か否かを判定するので、元のプログラ
ムのデータ依存関係を損なわずにプログラム中に単純ブ
ロックを形成できる。
【0114】また、請求項5に係るコンパイラによれ
ば、基本ブロック内のみに生存区間が存在する変数の生
存区間を、単純なアルゴリズムによって検出することが
できる。単純ブロック形成のために処理量が増加し、コ
ンパイル処理の高速性の低下を招くことは無い。また、
請求項6に係るコンパイラによれば、基本ブロック内の
みに生存区間が存在する変数の生存区間を、単純なアル
ゴリズムによって表現することができる。
【0115】また、請求項7に係るコンパイラによれ
ば、基本ブロック間に生存区間が存在する変数の生存区
間を、単純なアルゴリズムによって表現することができ
る。また、請求項8に係るコンパイラによれば、分岐処
理内で値が設定される変数の生存区間を、単純なアルゴ
リズムによって表現することができる。また、請求項9
に係るコンパイラによれば、分岐処理内で値が使用され
る変数の生存区間を、単純なアルゴリズムによって表現
することができる。
【図面の簡単な説明】
【図1】本発明に係るコンパイラの構成を示す図であ
る。
【図2】最適化装置2の構成を示す図である。
【図3】単純ブロック生成処理のフローチャートであ
る。
【図4】単純ブロック生成の過程を示した図である。
【図5】資源割付装置3の構成を示す図である。
【図6】生存区間重複判定部9の構成を示す図である。
【図7】生存区間生成処理のフローチャートである。
【図8】定義毎生存区間検出処理のフローチャートであ
る。
【図9】後続ブロック検索処理のフローチャートであ
る。
【図10】後続ブロック生存区間検出処理のフローチャ
ートである。
【図11】生存区間重複検査処理のフローチャートであ
る。
【図12】生存区間重複検査処理の処理過程を示す図で
ある。
【図13】基本ブロックを説明するための説明図であ
る。
【図14】ソースプログラムの一例である。
【図15】中間言語プログラムの一例である。
【図16】基本ブロック化された中間言語プログラムの
一例である。
【図17】データフロー情報、定義−参照情報、参照−
定義情報の一例である。
【図18】中間言語プログラム中の、各変数の生存区間
を図示したものである。
【図19】単純ブロック生成の過程を示した図である。
【図20】単純ブロック生成後の、各変数の生存区間を
図示したものある。
【図21】生存区間保持部11、単純ブロック内生存変
数集合保持部12、基本ブロック内生存変数保持部1
3、基本ブロック間生存変数集合保持部14の保持内容
の一例を図示したものである。
【図22】生存区間重複検査の検査結果を示したもので
ある。
【図23】生存区間、および、生存区間の重複検査の検
査結果を示す図である。
【符号の説明】
1 構文解析装置 2 最適化装置 3 資源割付装置 4 コード生成装置 5 制御フロー解析部 6 データフロー解析部 7 最適化処理部 8 単純ブロック生成部 9 生存区間重複検出部 10 変数資源割付部 11 生存区間保持部 12 単純ブロック内生存変数集合保持部 13 基本ブロック内生存変数集合保持部 14 基本ブロック間生存変数集合保持部 15 生存区間生成部 16 生存区間重複検査部

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】 複数の命令からなるプログラムを、機械
    語プログラムに翻訳するコンパイラであって、 前記プログラム中の飛び越し命令と、当該飛び越し命令
    の飛び越し先の命令とを検出する飛び越し検出手段と、 飛び越し検出手段が検出した命令に基づいて、前記プロ
    グラムを基本ブロックに分割する分割手段と、 プログラム中の各変数について、変数の設定値が有効と
    なるプログラム中の区間である生存区間を検出し、検出
    結果を、生存区間内に含まれる命令の位置を示す命令位
    置情報の集合で表す生存区間検出手段と、 生存区間検出手段が検出した生存区間が1つの基本ブロ
    ック内に収まる変数を全て検出し、検出結果を、当該基
    本ブロックに対応づけた基本ブロック内生存変数集合で
    表す基本ブロック内生存変数検出手段と、 生存区間検出手段が検出した生存区間が、複数の基本ブ
    ロック間におよぶ変数を全て検出し、検出結果を、基本
    ブロック間生存変数集合で表す基本ブロック間生存変数
    検出手段と、 基本ブロック間生存変数集合から変数を2つずつ取り出
    し、当該2変数の生存区間に対応する命令位置情報集合
    の集合積を算出することで、生存区間の重複を判定する
    第1の生存区間重複判定手段と、 同一の基本ブロックに対応づけられた基本ブロック内生
    存変数集合から変数を2つずつ取り出し、当該2変数の
    生存区間に対応する命令位置情報集合の集合積を算出す
    ることで、生存区間の重複を判定する第2の生存区間重
    複判定手段と、 前記基本ブロックに対応づけられた基本ブロック内生存
    変数集合と、基本ブロック間生存変数とから変数を1つ
    ずつ取り出し、当該2変数の生存区間に対応する命令位
    置情報集合の集合積を算出することで、生存区間の重複
    を判定する第3の生存区間重複判定手段と、 前記第1、第2、第3の生存区間重複判定手段の判定結
    果を用いて資源割付を行うことを特徴とするコンパイ
    ラ。
  2. 【請求項2】 前記コンパイラは更に、 変数の値を設定する命令である定義命令と、当該定義命
    令で設定された変数の値を使用する命令である参照命令
    とが、少なくとも一組順に並ぶ命令列である単純ブロッ
    クを、基本ブロック内に形成する単純ブロック形成手段
    と、 前記基本ブロック内生存変数集合から、生存区間が一つ
    の単純ブロック内に収まる変数を全て検出し、検出結果
    を、当該単純ブロックに対応づけた単純ブロック内生存
    変数集合で表す単純ブロック内生存変数検出手段と、 前記基本ブロック内生存変数集合から生存区間が複数の
    単純ブロック間におよぶ変数を検出し、検出結果を、単
    純ブロック間生存変数集合で表す単純ブロック間生存変
    数検出手段と、 を備え、 前記第2の生存区間重複判定手段は、 前記単純ブロック間生存変数集合から変数を2つずつ取
    り出し、当該2変数の生存区間に対応する命令位置情報
    集合の集合積を算出することで、生存区間の重複を判定
    する第1の生存区間重複判定部と、 同一の単純ブロックに対応づけられた単純ブロック内変
    数集合から変数を2つずつ取り出し、当該2変数の生存
    区間に対応する命令位置情報集合の集合積を算出するこ
    とで、生存区間の重複を判定する第2の生存区間重複判
    定部と、 前記単純ブロックに対応づけられた単純ブロック内変数
    集合と、単純ブロック間生存変数集合とから変数を1つ
    ずつ取り出し、当該2変数の生存区間に対応する命令位
    置情報集合の集合積を算出することで、生存区間の重複
    を判定する第3の生存区間重複判定部と、 を備えることを特徴とする請求項1記載のコンパイラ。
  3. 【請求項3】 前記第3の生存区間重複判定手段は、 基本ブロック間生存変数集合と、前記単純ブロックに対
    応づけられた単純ブロック内生存変数集合とから変数を
    1つずつ取り出し、当該2変数の生存区間に対応する命
    令位置集合の集合積を算出することで、生存区間の重複
    を判定する第4の生存区間重複判定部と、 基本ブロック間生存変数集合と、単純ブロック間生存変
    数集合とから変数を1つずつ取り出し、当該2変数の生
    存区間に対応する命令位置集合の集合積を算出すること
    で、生存区間の重複を判定する第5の生存区間重複判定
    部と、 を備えることを特徴とする請求項2記載のコンパイラ。
  4. 【請求項4】 前記単純ブロック形成手段は、 基本ブロックから、定義命令を1つずつ取り出す定義命
    令取り出し手段と、 定義命令取り出し手段が取り出した定義命令が含まれる
    基本ブロックから、その定義命令に対応する参照命令を
    検出する対応参照命令検出手段と、 対応参照命令検出手段が検出した参照命令の位置に、当
    該参照命令に対応する定義命令が移動可能か否かを判定
    する定義命令移動可否判定手段と、 定義命令移動可否判定手段が可能と判定した場合、定義
    命令移動可否判定手段が可能と判定した定義命令を、当
    該定義命令に対応する参照命令の直前に移動し、当該定
    義命令及び参照命令を一つの単純ブロックに統合する定
    義命令移動手段と、 定義命令移動手段が移動した定義命令が、移動前におい
    て、単純ブロック内の最後の命令である場合、移動前の
    単純ブロックの残りの命令の全てを当該定義命令の移動
    先の直前に移動し、移動した残命令を、移動先の単純ブ
    ロックに統合する単純ブロック残命令移動手段と、 を備えることを特徴とする請求項2又は3記載のコンパ
    イラ。
  5. 【請求項5】 前記定義命令移動可否判定手段は、 前記定義命令取り出し手段が取り出した定義命令によっ
    て値が設定される変数が一つであるか否かを判定する変
    数単複判定部と、 前記変数単複判定部が一つであると判定した場合、前記
    対応参照命令検出手段が検出した参照命令が一つか否か
    を判定する参照命令単複判定部と、 前記参照命令単複判定部が一つであると判定した場合、
    当該参照命令に対応する定義命令で値が設定される変数
    が、当該定義命令から当該参照命令までの区間において
    再設定されるか否かを判定する第1の再設定有無判定部
    と、 前記第1の再設定有無判定部が再設定がないと判定した
    場合、当該定義命令において使用される変数を検出する
    定義命令内使用変数検出部と、 前記定義命令内使用変数検出部が検出した変数が、当該
    定義命令から当該参照命令までの間に再設定されないこ
    とを判定する第2の再設定有無判定部と、 前記第2の再設定有無判定部が再設定が無いと判定した
    場合、当該定義命令が、当該参照命令の位置に移動可能
    と判定する移動可否判定部と、 からなることを特徴とする請求項4記載のコンパイラ。
  6. 【請求項6】 前記コンパイラは更に、 前記プログラム中の各基本ブロックと、当該基本ブロッ
    クの入口において有効となる変数及び出口において有効
    となる変数とを対応させて記憶する有効変数情報記憶手
    段を備え、 前記生存区間検出手段は、 前記プログラムから定義命令を1つずつ取り出す定義命
    令取り出し部と、 前記定義命令取り出し部によって取り出された定義命令
    を含む基本ブロックと、当該定義命令によって設定され
    る変数とを検出し、検出した変数の設定値が当該基本ブ
    ロックの出口で無効か否かを、前記有効変数情報記憶手
    段の記憶内容に基づき判定する出口無効判定部と、 前記出口無効判定部が設定値無効と判定した場合、当該
    基本ブロックから、当該定義命令に対応する参照命令で
    あって、当該基本ブロックの出口に最も近いものを検出
    する出口最近参照命令検出部と、 当該定義命令の次の命令から出口最近参照命令検出部が
    検出した参照命令までの命令位置情報を全て検出する基
    本ブロック内命令位置検出部と、 命令位置情報が検出された変数についての生存区間を、
    基本ブロック内命令位置検出部が検出した命令位置情報
    の集合で表す基本ブロック内生存区間表現部と、 を備え、 前記基本ブロック内生存変数検出手段は、前記基本ブロ
    ック内生存区間表現部が生存区間を表現した変数を、当
    該変数が含まれる基本ブロックに対応する基本ブロック
    内生存変数集合のメンバーにすることを特徴とする請求
    項1から5記載のコンパイラ。
  7. 【請求項7】 前記コンパイラは更に、 基本ブロックと、当該基本ブロックにおいて設定される
    変数とを対応させて記憶する基本ブロック内定義情報記
    憶手段を備え、 前記生存区間検出手段は、 前記出口無効判定部が有効と判定した場合、前記基本ブ
    ロック内定義情報記憶手段の記憶内容に基づいて、前記
    出口無効判定部によって有効と判定された定義命令にお
    いて設定される変数が、当該定義命令から当該定義命令
    を含む基本ブロックの出口までの間に再設定されるか否
    かを判定する再設定有無判定部と、 前記再設定値有無判定部が再設定無しと判定した場合、
    当該定義命令の次の命令から当該基本ブロックの出口ま
    での命令位置情報を検出する出口有効時位置情報検出部
    と、 前記再設定有無判定部が再設定無しと判定した場合、前
    記有効変数情報記憶手段および基本ブロック内定義情報
    記憶手段の記憶内容に基づいて、当該定義命令が含まれ
    る基本ブロックの次順の基本ブロックのうち、当該変数
    がその入口及び出口で有効であり、かつその内部で、当
    該変数が再設定されないものを全て検出する生存基本ブ
    ロック検出部と、 前記基本ブロック内定義情報記憶手段の記憶内容に基づ
    いて、前記生存基本ブロック検出部が検出した基本ブロ
    ック内に含まれる命令位置情報を全て検出する基本ブロ
    ック間位置情報検出部と、 前記再設定有無判定部が再設定無しと判定した場合、当
    該定義命令が含まれる基本ブロックの次順の基本ブロッ
    クのうち、その入口で当該変数の値が有効であり、その
    出口で無効である基本ブロックを検出する末尾基本ブロ
    ック検出部と、 前記末尾基本ブロック検出部が検出した基本ブロックか
    ら、当該定義命令に対応する最後の参照命令を検出する
    末尾参照命令検出部と、 前記末尾基本ブロック検出部が検出した基本ブロックの
    入口から前記末尾参照命令検出部が検出した参照命令ま
    での命令位置情報を全て検出する入口有効時位置情報検
    出部と、 再設定有無判定部が再設定なしと判定した変数に対応す
    る生存区間の集合を、出口有効時位置情報検出手段の検
    出結果と、入口有効時位置情報検出手段の検出結果と、
    基本ブロック間位置情報検出手段の検出結果とをあわせ
    た集合で表す基本ブロック間生存区間表現部と、 を備え、 前記基本ブロック間生存変数検出手段は、前記再設定有
    無判定部が再設定無しと判定した変数を、基本ブロック
    間生存変数集合のメンバーにすることを特徴とする請求
    項6記載のコンパイラ。
  8. 【請求項8】 前記コンパイラは更に、 プログラム中の各命令位置と、当該命令位置の命令にお
    いて使用される変数と、当該変数が設定される命令の命
    令位置情報とを対応させて記憶する参照−定義情報記憶
    手段を備え、 前記生存区間検出手段は、 前記定義命令取り出し部が取り出した定義命令の位置に
    識別情報を付するマーキング部と、 前記定義命令取り出し部が取り出した定義命令に対応す
    る参照命令で使用される変数を検出する参照変数検出部
    と、 参照−定義情報記憶手段の記憶内容に基づいて、前記参
    照変数検出部が検出した変数に設定値を設定する定義命
    令を全て検出する定義命令検出部と、 前記定義命令検出部が検出した定義命令のうち、前記マ
    ーキング部によって付された識別情報が無いものを検出
    する無マーク定義命令検出部と、 前記無マーク定義命令検出部が検出した定義命令の次の
    命令から、その定義命令を含む基本ブロックの出口まで
    の命令位置情報を全て検出する第1の分岐ブロック内位
    置情報検出部と、 基本ブロック間生存区間表現部が表した命令位置情報の
    集合に、前記第1の分岐ブロック内位置情報検出部が検
    出した命令位置情報を付加する第1の命令位置情報付加
    部と、 を備えることを特徴とする請求項7記載のコンパイラ。
  9. 【請求項9】 前記コンパイラは更に、 プログラム中の各命令位置と、当該命令位置の命令にお
    いて設定される変数と、当該変数が使用される命令の命
    令位置情報とを対応させて記憶する定義−参照情報記憶
    手段を備え、 前記生存区間検出手段は、 前記定義−参照情報記憶手段の記憶内容に基づいて、前
    記無マーク定義命令検出部が検出した定義命令に対応す
    る参照命令を検出する分岐ブロック内参照命令検出部
    と、 前記分岐ブロック内参照命令検出部が検出した参照命令
    を含む基本ブロックを検出する分岐ブロック検出部と、 前記分岐ブロック検出部が検出した基本ブロックの入口
    から、前記分岐ブロック内参照命令検出部が検出した参
    照命令までの命令位置情報を全て検出する第2の分岐ブ
    ロック内位置情報検出部と、 前記基本ブロック間生存区間表現部が表した命令位置情
    報の集合に、前記第2の分岐ブロック内位置情報検出部
    が検出した命令位置情報を付加する第2の命令位置情報
    付加部と、 を備えることを特徴とする請求項8記載のコンパイラ。
JP21881194A 1994-09-13 1994-09-13 コンパイル装置 Expired - Fee Related JP3606387B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP21881194A JP3606387B2 (ja) 1994-09-13 1994-09-13 コンパイル装置
CN95106164A CN1097226C (zh) 1994-09-13 1995-05-30 编译程序器
US08/508,136 US5642512A (en) 1994-09-13 1995-07-27 Compiler with improved live range interference investigation
EP95305885A EP0702293B1 (en) 1994-09-13 1995-08-23 Compiler with improved live range interference investigation
DE69524511T DE69524511T2 (de) 1994-09-13 1995-08-23 Kompiler mit verbesserter Untersuchung von Interferenz von Lebendigkeitsbereichen
KR1019950029734A KR100226233B1 (ko) 1994-09-13 1995-09-13 컴파일러

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP21881194A JP3606387B2 (ja) 1994-09-13 1994-09-13 コンパイル装置

Publications (2)

Publication Number Publication Date
JPH0883185A true JPH0883185A (ja) 1996-03-26
JP3606387B2 JP3606387B2 (ja) 2005-01-05

Family

ID=16725719

Family Applications (1)

Application Number Title Priority Date Filing Date
JP21881194A Expired - Fee Related JP3606387B2 (ja) 1994-09-13 1994-09-13 コンパイル装置

Country Status (6)

Country Link
US (1) US5642512A (ja)
EP (1) EP0702293B1 (ja)
JP (1) JP3606387B2 (ja)
KR (1) KR100226233B1 (ja)
CN (1) CN1097226C (ja)
DE (1) DE69524511T2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007094731A (ja) * 2005-09-28 2007-04-12 Matsushita Electric Ind Co Ltd コンパイラ装置
JP2009271572A (ja) * 2008-04-30 2009-11-19 Mitsubishi Electric Corp 制御システム開発支援装置

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1149476C (zh) * 1995-03-16 2004-05-12 松下电器产业株式会社 资源分配装置
JP3060907B2 (ja) * 1995-07-28 2000-07-10 日本電気株式会社 言語処理プログラムの処理方式
US5787287A (en) * 1995-12-27 1998-07-28 Intel Corporation Representation of control flow and data dependence for machine
TW470915B (en) * 1996-03-12 2002-01-01 Matsushita Electric Ind Co Ltd Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US5778233A (en) * 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
US5946492A (en) * 1997-02-19 1999-08-31 International Business Machines Corporation Compiler that reduces call stack size through identification of stackless variables
JPH11327879A (ja) * 1998-05-15 1999-11-30 Fujitsu Ltd 変数検索装置及び方法並びに変数検索プログラムを記録したコンピュータ読取り可能な記録媒体
US6421824B1 (en) * 1999-04-23 2002-07-16 Sun Microsystems, Inc. Method and apparatus for producing a sparse interference graph
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
US6381691B1 (en) * 1999-08-13 2002-04-30 International Business Machines Corporation Method and apparatus for reordering memory operations along multiple execution paths in a processor
CN100430896C (zh) * 2002-10-29 2008-11-05 洛克希德马丁公司 硬件解析器加速器
CN100380323C (zh) * 2003-02-28 2008-04-09 Bea系统公司 用于确定何时需要运行ejb编译器的系统和方法
US7210135B2 (en) * 2003-08-26 2007-04-24 Microsoft Corporation Data flow analysis of transactional processes
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
US7539983B2 (en) * 2005-01-14 2009-05-26 Microsoft Corporation Tool for processing software programs using modified live-ness definition
US8543992B2 (en) * 2005-12-17 2013-09-24 Intel Corporation Method and apparatus for partitioning programs to balance memory latency
JP4607958B2 (ja) * 2006-01-20 2011-01-05 パナソニック株式会社 プロセッサおよびプログラム変換装置
JP2008305337A (ja) * 2007-06-11 2008-12-18 Panasonic Corp プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
EP2022601B1 (de) 2007-08-03 2013-03-20 TRUMPF Werkzeugmaschinen GmbH + Co. KG Laserbearbeitungsmaschine zum Bearbeiten von Werkstücken sowie maschinelles Verfahren zum Bearbeiten von Werkstücken mittels eines Laserstrahls
EP3106982B1 (en) * 2015-06-18 2021-03-10 ARM Limited Determination of branch convergence in a sequence of program instructions

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4571678A (en) * 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring
US4782444A (en) * 1985-12-17 1988-11-01 International Business Machine Corporation Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring
US5530866A (en) * 1991-07-30 1996-06-25 Tera Computer Company Register allocation methods having upward pass for determining and propagating variable usage information and downward pass for binding; both passes utilizing interference graphs via coloring
US5355494A (en) * 1991-12-12 1994-10-11 Thinking Machines Corporation Compiler for performing incremental live variable analysis for data-parallel programs
US5418958A (en) * 1992-07-15 1995-05-23 Sun Microsystems, Inc. Register allocation by decomposing, re-connecting and coloring hierarchical program regions
US5367684A (en) * 1992-11-30 1994-11-22 Intel Corporation Register allocation using an improved register candidate usage matrix
JPH06250837A (ja) * 1993-02-25 1994-09-09 Ricoh Co Ltd スケジューリング処理方式

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007094731A (ja) * 2005-09-28 2007-04-12 Matsushita Electric Ind Co Ltd コンパイラ装置
JP2009271572A (ja) * 2008-04-30 2009-11-19 Mitsubishi Electric Corp 制御システム開発支援装置

Also Published As

Publication number Publication date
JP3606387B2 (ja) 2005-01-05
DE69524511T2 (de) 2002-05-08
EP0702293A3 (en) 1997-05-02
CN1118899A (zh) 1996-03-20
EP0702293B1 (en) 2001-12-12
CN1097226C (zh) 2002-12-25
US5642512A (en) 1997-06-24
KR100226233B1 (ko) 1999-10-15
EP0702293A2 (en) 1996-03-20
KR960011768A (ko) 1996-04-20
DE69524511D1 (de) 2002-01-24

Similar Documents

Publication Publication Date Title
JPH0883185A (ja) コンパイラ
US6243864B1 (en) Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
US20110119660A1 (en) Program conversion apparatus and program conversion method
US6662354B1 (en) Determining destinations of a dynamic branch
US4710872A (en) Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops
US6286135B1 (en) Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
JP3901181B2 (ja) プログラム並列化装置及びその方法並びにプログラム
JP3901180B2 (ja) プログラム並列化装置及びその方法並びにプログラム
US20090249307A1 (en) Program analysis apparatus, program analysis method, and program storage medium
JPH03172936A (ja) 手順間レジスタ割付けを伴うコンピュータプログラムのコンパイル方法及び装置
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
JP3901182B2 (ja) プログラム並列化装置及びその方法並びにプログラム
US20010044930A1 (en) Loop optimization method and a compiler
EP1202171A2 (en) Compile method and program recording medium
KR20080045545A (ko) 조건부 영역을 전처리하는 방법
JP2019109688A (ja) ソフトウェア評価システム
JPH07141192A (ja) 翻訳処理方法
JP4293223B2 (ja) プログラム並列化装置及びその方法並びにプログラム
KR102207775B1 (ko) 네트워크 스위치 병렬화를 위한 데이터 의존성 기반의 데이터 평면 정적 분석 방법 및 이를 이용한 병렬화 장치
JPS58149567A (ja) ベクトル・レングス制御範囲融合処理方式
JPH05204705A (ja) 未定義変数検出処理方法
JP3004340B2 (ja) プログラム最適化装置
JPH0522272B2 (ja)
JP6447358B2 (ja) ソースコード生成プログラム、ソースコード生成方法およびコンピュータ

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040706

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040827

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040928

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040930

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees