JPH07234790A - プログラム変換処理装置およびプログラム変換処理方法 - Google Patents

プログラム変換処理装置およびプログラム変換処理方法

Info

Publication number
JPH07234790A
JPH07234790A JP6024589A JP2458994A JPH07234790A JP H07234790 A JPH07234790 A JP H07234790A JP 6024589 A JP6024589 A JP 6024589A JP 2458994 A JP2458994 A JP 2458994A JP H07234790 A JPH07234790 A JP H07234790A
Authority
JP
Japan
Prior art keywords
node
intermediate code
optimization
predetermined
nodes
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
JP6024589A
Other languages
English (en)
Other versions
JP2755154B2 (ja
Inventor
Hiroko Isozaki
博子 磯崎
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP6024589A priority Critical patent/JP2755154B2/ja
Priority to EP95102626A priority patent/EP0669574A3/en
Priority to US08/392,483 priority patent/US5586020A/en
Publication of JPH07234790A publication Critical patent/JPH07234790A/ja
Application granted granted Critical
Publication of JP2755154B2 publication Critical patent/JP2755154B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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/42Syntactic analysis

Abstract

(57)【要約】 【目的】コンパイル処理の所要メモリ容量を削減し高速
な処理速度で、命令長が短かく実行速度が早い出力オブ
ジェクトを生成する。 【構成】変換処理部10が中間コードの中から選択条件
に適合し最適化の候補中間コードを選択する候補中間コ
ード選択部11と、上記候補中間コードを起点として探
索し最適化最適化パターンを抽出する最適化パターン抽
出部12と、上記最適化パターンに対応する最適中間コ
ードを出力する最適中間コード出力部13とを備える。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はプログラム変換処理装置
およびプログラム変換処理方法に関し、特にコンパイラ
などの言語処理プログラムの最適化処理用のプログラム
変換処理装置およびプログラム変換処理方法に関する。
【0002】
【従来の技術】コンパイラは手書の原始(ソース)プロ
グラムをコンピュータが実行できる機械語プログラムす
なわちオブジェクトモジュール(以下オブジェクト)に
翻訳する言語処理プログラムである。一般に、この種の
言語処理プログラムにより処理されるソフトウェアは、
その実行性能として高速性が要求される。この高速性を
実現するためには、言語処理結果である上記オブジェク
トのサイズが小さいことと上記オブジェクトの実行速度
が速いこととが必要条件である。これらの要求に対応す
るため言語処理プログラムでは、上記オブジェクト上で
冗長な演算を削除するよう修正することや、実行時間が
比較的長い種類の演算をより短かい実行時間で済む他の
種類のプログラムに変更することなどの種々の最適化方
法が採用されている。
【0003】特に、最適化対象範囲に関しては、プログ
ラムのどの部分あるいはどの範囲で行うかにより、局所
(ローカル)最適化および広域(グローバル)最適化に
分かれる。局所最適化は式や代入文あるいはそれらの並
びのように、途中から外部への分岐や外部から途中への
分岐が起らず上記代入文などが連続的に実行されるプロ
グラム範囲、すなわち基本ブロックの範囲を対象とする
ものであり、これに対して、広域最適化は何箇所かで分
岐を生じる構文要素、例えば複合文、繰返し文、手続き
や関数など上記基本ブロックの範囲を越える範囲を対象
とするものである。広域最適化はプログラムを広い範囲
について解析し、変換しなければならないから、その分
だけコンパイル時間は長くなるけれども、より緻密な最
適化が可能でありしたがってその効果が大きい。
【0004】広域的な最適化を行う従来のプログラム変
換処理装置をブロックで示す図9を参照すると、この従
来のプログラム変換処理装置は、ソースプログラムを格
納するソースファイル1と、上記ソースプログラムの供
給を受け最適化処理を実行しオブジェクトコードを供給
する言語処理部2と、上記オブジェクトコードの供給を
受け格納するオブジェクトファイル9とを備える。
【0005】言語処理部2は、上記ソースプログラムの
供給を受け構文解析を行い上記ソースプログラム対応の
中間コードを出力する構文解析部3と、上記中間コード
を格納する中間ファイル4と、上記中間コードの供給を
受けデータフロー解析を行なうデータフロー解析部5
と、上記データフロー解析結果を基に最適化処理を実行
する最適化処理部6と、上記最適化処理結果の中間デー
タを格納する中間ファイル7と、上記中間データの供給
を受けオブジェクトコードを生成するコード生成部8と
を備える。
【0006】次に、図9を参照して、従来のプログラム
変換処理方法について説明すると、まず、構文解析部3
はソースファイル1からソースプログラムの供給を受
け、その内容を解析して上記ソースプログラムを言語処
理しやすい形式に変換した中間コードを出力して中間フ
ァイル4に格納する。次に、データフロー解析部5は中
間ファイル4から上記中間コードの供給を受け後述する
データフロー解析を行う。次に、上記データフロー解析
の結果を基に最適化処理部6が共通式の削除やレジスタ
の割付けなどの各種の最適化処理を行う。これらの最適
化処理の結果の中間データは中間ファイル7に格納され
る。コード生成部8は上記中間データの供給を受けオブ
ジェクトコードを生成してオブジェクトファイル9に格
納する。
【0007】次に、広域的なデータフロー解析および最
適化の方法について、A.V.エイホ他共著原田賢一訳
「コンパイラ原理・技法・ツール」サイエンス社(19
90年)第765〜769,773頁(文献1)所載
の、共通式の削除を行う一般的な従来の第1のプログラ
ム変換処理方法について説明する。
【0008】2つの式、一般には部分式が等価な値を持
つときは、評価を1回で済ますことができる。ある部分
式を最初に評価したら、結果を一時変数に格納し、その
あとの共通な各部分式をその変数に置換する。これを共
通式の削除という。
【0009】まず、広域的なデータフロー解析では、供
給を受けた中間ファイルから中間コードを読出し、文が
連続的に実行される単位である基本ブロックに分割す
る。次上記基本ブロックの集まりに処理実行の制御の流
れに関する情報を付加してフローグラフを生成する。フ
ローグラフは、逐次的に実行される文あるいは中間語の
列を一つの節点とし、それらの間の制御の流れを辺とし
た有向グラフで処理の流れを表現したものである。
【0010】最適化処理対象のソースプログラムの一例
を示す図2を参照すると、この図に示すソースプログラ
ムは条件に従って二者択一を行うif文を含む。図2の
ソースプログラムに対応するフローグラフを示す図10
(A)を参照すると、このソースプログラムは4つの基
本ブロック(以下ブロック)B1〜B4に分割される。
最初のブロックB1を開始節と呼ぶ。図10(A)に示
すように、if文を含むブロックB1,B3は2つに分
割される。
【0011】次に、共通式削除を行うための所要情報で
ある利用可能な部分式(以下利用可能式)の情報を求め
る。上記利用可能式を説明するためのフローグラフであ
る図10(B)を参照すると、開始節ブロックB1Bか
ら任意位置の点p(ここではブロックB5Bに設定)へ
の全ての経路上で、式x+yを評価し、その式の最後の
評価から点pに至るまでに値x,yのいずれに対しても
代入がない場合、この式x+yは点pで利用可能である
という。また、式x+yがあるブロックBiで値x,y
のいずれかに対し代入を行い、その後、この式x+yを
再計算しなければ、ブロックBiは式x+yを消滅させ
るという。図10(B)のブロックB5Bがこのブロッ
クBiに該当する。逆に、あるブロックBjが式x+y
を評価し、その後値x,yのいずれも再定義されること
がなければ、式x+yはこのブロックBjで生成される
という。図10(B)のブロックB2B,B3Bがこの
ブロックBjに該当する。
【0012】利用可能式の情報を求める最初の処理は、
先に作成したフローグラフを読込み、各基本ブロックに
対して生成される部分式(以下生成式)および消滅され
る部分式(以下消滅式)のそれぞれの集合を求める。こ
の生成式および消滅式の集合を求めるアルゴリズムをフ
ローチャートで示す図11を参照すると、まず、生成式
および消滅式のそれぞれの集合を空集合に初期化する
(ステップP1)。次に、着目対象の部分式がブロック
の最後か否かを調べ(ステップP2)、最後ならば処理
を終了する。最後でなければ上記着目部分式を読込み
(ステップP3)、この部分式○○=△△op□□に対
し、この△△op□□を生成式の集合に加える(ステッ
プP4)。また、生成式の集合中に○○を使用した式が
あるか否かを調べ(ステップP5)、存在すればその式
を消滅式集合に加え、生成式集合から削除する(ステッ
プP6)。そして次の式に着目して(ステップP7)、
再度ステップP2に戻り、着目対象の部分式がブロック
の最後か否かを調べる。以上のステップP2〜P7の処
理を反復して、生成式および消滅式のそれぞれの集合を
求める。
【0013】次に、利用可能式を求める。プログラム中
の文の右辺に表れる式の全体集合をU、各ブロックBi
について、ブロックBiの開始点における利用可能式の
集合をin[Bi]、ブロックBiの終了点における利
用可能式の集合をout[Bi]とし、ブロックBiの
生成式および消滅式の集合をそれぞれe_gen[B
i],e_kill[Bi]と定義すると、下記の方程
式が成立する。 out[Bi]=e_gen[Bi]∪(in[Bi]
−e_kill[Bi]) in[Bi]=∩out[p] ただし、開始節B
1を除く in[B1]=φ. ここで、PはBiの先行ブロックである。
【0014】当業者には周知のように、この方程式を解
くアルゴリズムも確立されており、このアルゴリズムを
解くことにより、各々のブロックBiに対する利用可能
式の集合in[Bi]を求めることができる。
【0015】処理目的である広域的の共通式の削除は、
上述のように求めた利用可能式の情報を使用して最適化
処理部6で次のように行われる。
【0016】あるブロックの先頭で式y+zが利用可能
式であり、そのブロックの中にx=y+zという内容の
文sがあれば以下のステップK1〜K4の処理を行う。
ただし、上記ブロックの先頭から文sの直前までには、
y,zのいずれの定義もないものとする。
【0017】まず、ステップK1では、文sのブロック
に到達する式y+zの評価部分を探索するため、文sを
含むブロックからフローグラフの辺を逆向きに走査す
る。ただし、式y+zを評価するブロックが検出される
と、それから先のブロックは走査しない。このようにし
て検出した各々のブロックでの文w=y+zの最後の評
価が文sに到達する式y+zの評価部分である。
【0018】次に、ステップK2で新しい変数uを生成
する。
【0019】次に、ステップK3で、ステップ1で検出
した文w=y+zを次の文で置換する。
【0020】u=y+z w=u 次に、ステップK4で、文sを文x=uで置換する。
【0021】以上の方法により、広域的なデータフロー
解析を用いた共通式の削除が可能である。図10(C)
は図10(A)のフローグラフに対して広域的な共通式
の削除を実施した結果を示す。
【0022】この従来の第1のプログラム変換処理装置
およびプログラム変換処理方法の、データフロー解析の
処理ステップ数について考察すると、まず、中間ファイ
ル4の全体の読直し回数が、ブロックに分割するための
1回と、データフロー解析後の最適化の実行のための1
回との最低限2回必要である。また、ブロックの流れを
探索してフローグラフを作成したり、利用可能式を求め
るために、全ブロックに対する生成式と消滅式のそれぞ
れの集合を求め、その後上記利用可能式を求め、これを
基に共通式の削除を行うという非常に多くの処理ステッ
プを要する。
【0023】さらに、これらの処理を行うとき、中間コ
ード以外に、上記生成式集合や消滅式集合対応の一般的
にはビットベクトル形式のデータを一時格納するメモリ
領域を要する。このビットベクトル形式のデータは、フ
ローグラフ中の解析対象式に番号iを付与し、その番号
iが求める集合に属していればビットベクトルの位置i
を’1’として表す。すると1つのブロックの例えば生
成式集合に対するビットベクトルのデータ長は、最低限
上記ブロック中の生成式の個数と同数のビット長とな
る。消滅式集合やブロック入口および出口でのそれぞれ
の利用可能式の集合に対しても同様のビットベクトル形
式のデータが形成される。
【0024】また、最適化可能な部分が結果的にソース
プログラムのごく一部である場合も、最適化処理部6で
は予測不可能であるため、常に全部のブロックに対して
処理を実行する必要があるので、全ての処理対象データ
をメモリ領域上に持つことになる。その結果、上記メモ
リ領域はこれらデータの格納に対し十分余裕を取るよう
準備する必要がある。
【0025】この種の共通式の削除を効率的に実行する
ための、特開昭64−3737号公報(文献2)記載の
従来の第2のプログラムの変換方法は、C言語のコンパ
イラを対象としており、解析木を利用して、アドレス計
算もしくは添字式を探索し、等しい演算結果をもたらす
共通な2式がある場合にその片方の式を削除するという
処理方法が記載されている。しかし、この方法の対象は
基本ブロック内のアドレス計算や添字式に限定されてお
り、上記基本ブロックを越える広域的な場合や、その他
の一般的な部分式については考慮されていない。
【0026】
【発明が解決しようとする課題】上述した従来のプログ
ラム変換処理装置およびプログラム変換処理方法は、第
1の装置・方法ではデータフロー解析に非常に多くの処
理ステップ数を必要とするため処理時間が長くなるとい
う欠点があった。
【0027】また、中間コード以外に全ての基本ブロッ
ク対応の生成式や消滅式および利用可能式のそれぞれの
集合などの処理途中のデータを一時格納するための大容
量のメモリ領域を必要とするという欠点があった。
【0028】さらに、上記メモリ領域の余裕が少ない場
合には、最適化が不可能となる場合が生じ、その場合に
は生成するオブジェクトのサイズの増大や実行速度の低
下の要因を発生する可能性があるという欠点があった。
【0029】従来の第2の装置・方法は、処理対象が基
本ブロック内のアドレス計算や添字式に限定されてお
り、上記基本ブロックを越える広域的な場合や、その他
の一般的な部分式については考慮されていないという欠
点があった。
【0030】
【課題を解決するための手段】本発明のプログラム変換
処理装置およびプログラム変換処理方法は、供給を受け
たソースプログラムの構文解析を行ない予め定めた様式
の中間コードを生成する構文解析手段と、前記中間コー
ドの供給を受けプログラムサイズができるだけ小さくか
つ実行時間が短かいオブジェクトコードを生成するよう
所定の最適化処理を行う最適化処理手段とを備えるプロ
グラム変換処理装置において、前記最適化処理手段が前
記中間コードの中から予め定めた選択条件に適合し前記
最適化処理の対象の可能性を有する最適化の候補中間コ
ードを選択する候補中間コード選択手段と、前記候補中
間コードを起点として探索し最適化対象の前記中間コー
ドのパターンである最適化パターンを抽出する最適化パ
ターン抽出手段と、前記最適化パターンに対応する最適
中間コードを出力する最適中間コード出力手段とを備え
て構成されている。
【0031】本発明のプログラム変換処理方法は、供給
を受けたソースプログラムの構文解析を行ない予め定め
た様式のノードから成る構文木構造の中間コードを生成
し、前記中間コードの供給を受けプログラムサイズがで
きるだけ小さくかつ実行時間が短かいオブジェクトコー
ドを生成するよう所定の最適化処理を行うプログラム変
換処理方法において、前記中間コードの供給を受け前記
構文木のノードを予め定めた評価順序にしたがって読出
すことにより探索し読出しノードを出力する第1のステ
ップと、前記読出しノードの中から予め定めた選択条件
に適合し前記最適化処理の対象の可能性を有する最適化
の候補ノードを選択する第2のステップと、前記候補ノ
ードの予め定めた構成語に直接接続したノードである直
接ネスト関係ノードを探索・検出する第3のステップ
と、前記直接ネスト関係ノードを検出した場合には最上
位の直接ネスト関係ノードの予め定めた第1の条件文対
応の第1の条件ノードと等しい第2の条件ノードが下位
の第2の条件文での存否を判定し存在すればこれら第
1,第2の条件ノードを共通式として検出する第4のス
テップと、前記共通式の検出に応答して前記構文木を前
記最適化処理対応の最適化な形に変形する第5のステッ
プとを含むことを特徴とするものである。
【0032】
【実施例】次に、本発明の第1の実施例を図9と共通の
構成要素を共通の参照文字/参照数字を付して同様にブ
ロックで示す図1を参照すると、この図に示す本実施例
のプログラム変換処理装置は、従来の言語処理部2の代
りに、データフロー解析部5と最適化処理部6とに代る
変換処理部10を備える言語処理部2Aを備える。
【0033】変換処理部10は、最適化の可能性を有す
るすなわち最適化候補の中間コードを選択する候補中間
コード選択部11と、選択した候補中間コードを親ノー
ドとする構文木から最適化可能なパターンを抽出する最
適化パターン抽出部12と、抽出した最適化パターンに
対応の最適な中間コードを出力する最適中間コード出力
部13とを含む。
【0034】次に、図1、図2、図2に示すソースプロ
グラムの一部を変換した構文木を示す図3および変換処
理部10の上記構文木の最適化処理をフローチャートで
示す図4を参照して本実施例のプログラム変換処理方法
について説明すると、まず、構文解析部3はソースファ
イル1からソースプログラムの供給を受け、その内容を
解析して中間コードである構文木を生成して中間ファイ
ル4に格納する。次に、候補中間コード選択部11は、
中間ファイル4から構文木を読出しながら、上記構文木
を通常の評価順路にしがって探索し(ステップS2)、
最適化の可能性のあるノードすなわち最適化候補ノード
を選択すると(ステップS3)、最適化パターン抽出部
12に制御を移す。本実施例では、上記最適化候補ノー
ドとしてifノードに着目する。最適化パターン抽出部
12は選択したifノードが直接ネスト(入れ子)して
いるか否かを調べる(ステップS4)。
【0035】直接ネストしているとは上記構文木におい
て、ソースプログラムのif文対応のノードのif−t
hen−elseを構成するthenあるいはelse
に直接if−then−elseノードが直結している
場合を意味する。したがって、thenあるいはels
eに何等かの文を介してif−then−elseノー
ドが接続している場合は直接ネストしている(以下直接
ネスト)とは呼ばない。
【0036】直接ネストが検出されたならば、ifの条
件式(図3の条件式101)、thenの直下の条件
式、あるいはelseの直下のifの条件式(図3の条
件式102)、以下直接ネストしている最も深いif文
の条件式まで探索する。これらの条件式は、条件が真に
なるまで順次評価されるだけであるので、これら条件式
を構成する変数等の被演算子は基本的には値が変更され
ることがない。そこで、これらの条件式の中で共通な式
すなわち共通式を抽出する。本実施例では、最上位の条
件式中のノードと等しいノードが下位の条件式中に存在
すれば(ステップS5)、上記共通式が検出されたとす
る。共通式を検出したときは、最適中間コード出力部1
3において構文木を最適な形に変形する。すなわち、検
出した共通式ノードをテンポラリ変数に置換するととも
に、その共通式ノードを「テンポラリ変数=共通式ノー
ド」という文として最上位のif文の前に前置挿入する
(ステップS6)。上記変形が終了したならば、最適化
パターン抽出部12に戻り、上記共通式の抽出を続行
し、最上位のif文の条件式全てのノードの探索を完了
する(ステップS7)により、このif文に対する最適
化パターンの抽出を終了する。次に、再度、候補中間コ
ード選択部11に戻り、ifノード抽出対象の全ての構
文木の探索が完了する(ステップS1)まで反復実行す
る。
【0037】次に、図3を参照して直接ネストしたif
文対応のノードから共通式を抽出する過程と、構文木を
変形する過程とを説明する。図3(A)を参照すると、
この図に示す変換前の構文木はソースプログラムの2行
目のif文対応の第1のif−then−elseノー
ド(以下ifノード)に直接ネストした第2のifノー
ドを含み、第1,第2の各々のifノードの[if]に
それぞれ接続した条件式101,102と、条件式10
1,102の各々の式ノード103,104とを含む。
【0038】まず、条件式101の評価の実行順序にし
たがい探索対象の着目ノードを決定する。ここで、1番
目の着目ノードとしてノード[a+b]なる式ノード1
03を取上げ、条件式102中に同一の式ノードが存在
するか否かを探索する。この条件式102も評価の実行
順序にしたがい探索し、まず、[<]の左側のノードを
検索するが、これは演算ノードではないので次に進む。
[<]の右側のノード[a+b]なる式モード104
は、比較結果式ノード103と同一ノードであるのでパ
ターンマッチしたことになる。条件式102には他にノ
ード[a+b]が存在しないので構文木の変換に移行す
る。もし、図3(A)の例よりも深くif文がネストし
ており他の条件式がある場合には、上記移行はこの他の
条件式におけるノード[a+b]に対するパターンマッ
チノードの有無の探索後となる。
【0039】変換後の構文木を示す図3(B)を参照す
ると、構文木の変換は、まず、抽出したノード[a+
b]をテンポラリ変数t=(a+b)に置換する。図2
(A)の条件式101,102は図3(B)においてそ
れぞれ対応する上記置換後の条件式101A,102A
として示される。次に、ノード[a+b]を「テンポラ
リ変数t=(a+b)」の式ノード105にして最上位
のif文の前に移動する。以上の処理により構文木の変
形は終了したので、共通式の抽出に戻る。2番目の着目
ノードは先程置換した部分を含むノード[t+c]なる
条件式101Aである。条件式102Aはノード[d+
t]のみしか残っておらず着目ノードとは異なるので変
換対象とはならない。以上で条件式101を全て探索完
了したので、このif−then−elseノードでの
共通式の抽出と、構文木の変形は終了したことになる。
【0040】なお、条件式の中で変数値の変更作用を有
する演算子、例えば代入演算子や被演算子を1増加させ
る単項演算子などがある場合には、着目したifノード
以降の文に対しては最適化が実施できないので、候補中
間コード選択部11に制御を戻す。上記演算子の有無は
共通式の抽出時における式ノードの探索により検出でき
る。
【0041】一例として、「NEC16/8ビット・シ
ングルチップ・マイクロコンピュータμPD78328
ユーザズ・マニュアルIEU−693E(1993
年)」第205〜224頁(文献3)記載のNECの7
8Kシリーズ・シングルチップ・マイクロコンピュータ
μPD78328用の命令セットに適用して求めた、上
述の最適化処理による図2のソースプログラム対応のコ
ード出力結果のオブジェクトを示す図5(A)を参照す
ると、[a+b]を前に移動したことにより、この[a
+b]の計算は命令文51で1回のみ行われる。一方、
この最適化処理を実施しない場合の上記ソースプログラ
ム対応のコード出力結果を示す図5(B)を参照する
と、構文木通り[a+b]の計算は命令文61,62の
2回行われる。図5(A),(B)を比較すると、本実
施例の方がオブジェクトサイズは本実施例の方が10バ
イト短かい。
【0042】次に、本発明の第2の実施例をフローチャ
ートで示す図6を参照して説明すると、本実施例の前述
の第1の実施例に対する相違点は、ステップS4〜S6
の代りに、ステップS14〜S16を含む。
【0043】前述の第1の実施例では最適化候補ノード
としてifノードに着目し、条件式から共通式を抽出し
てif文の前に移動することにより中間コードの最適化
を実施する代りに、本実施例では最適化候補ノードは同
様にifノードとし、異なる最適化パターンを抽出し対
応する最適な中間コードーを生成する。
【0044】本実施例のプログラム変換処理装置は第1
の実施例と共通の図1に示すものである。
【0045】図1および図6を参照して本実施例のプロ
グラム変換処理方法について説明すると、まず、構文解
析部3が構文木を作成し、候補中間コード選択部11が
上記構文木を探索して最適化候補ノードであるifノー
ドを選択する(ステップS1〜S3)までは、第1の実
施例と同様である。次に最適化パターン抽出部12は、
抽出したifノード以下の文が設定構造例えば下記のC
言語のソースプログラム対応の図7(A)に示す構文木
構造であるか否かをチエックする(ステップS14)。 次に、上記構造を持つifノードならば、条件式1,2
について次の2つの条件を満たすか否かをチエックする
(ステップS15)。まず、条件式1,2の各々のノー
ドのトップが不等号(>),(<),等号(==)のう
ちのそれぞれ相互に異なるいずれかで1つである。そし
て、条件式1,2の各々の右辺式および左辺式が相互に
同一である。これらの条件を満たすif文は、図7
(A)に示す構文木および対応のC言語ソースプログラ
ムで表すと、以下のようになる。 このif文は、aとbの値の大小について調べ、その結
果に対応する3つの処理に分岐するが、このままの中間
コードでコード生成を実行すると、この生成結果の変換
前オブジェクトではaとbの値の比較処理が2回行われ
るという不都合が生ずる。しかしながら、aとbの値の
大小あるいは等しいかのチエックは、1回の比較で可能
であるので、最適中間コード出力部13は図7(A)の
構文木をコード生成部で変換し図7(B)に示す比較命
令を1回だけ出力する新たな構文木を生成する(ステッ
プS16)。[if−gt−lt−eq]が新たなノー
ド名であり、そのifの下に2式を比較する条件式ノー
ド、gtの下に比較結果左辺が大きい(GreaT)場
合対応の処理Aノード、ltの下に左辺が小さい(Li
Tle)場合対応の処理Bノード、およびeqの下に左
辺/右辺が等しい(EQual)場合対応の処理Cノー
ドをそれぞれ接続する。
【0046】この変換が終了したならば、最適化パター
ン抽出部12に戻り、第1の実施例と同様のステップS
7〜S8,S1の処理を行いifノード抽出対象の全て
の構文木の探索が完了するまで反復実行する。
【0047】上記変換後の構文木に対して、第1の実施
例と同様の文献3のシングルチップマイクロコンピュー
タの命令コードを生成した結果の変換後オブジェクトを
示す図8を参照すると、aとbの値の比較処理が3行目
の命令文71で1回行われるだけであり、上記変換前オ
ブジェクトのコードサイズより12バイト短縮される。
【0048】最適化処理時間について考察すると、ま
ず、中間コード読出処理時間について、第1,第2のい
ずれの(以下これら)実施例でも中間コードの読出し量
は最初に構文木を生成した後に最適化候補ノードの抽出
のための1回と、if文の最適化可能性の点検のための
条件式部分に対する所要回数の読出量との和になる。し
かし、上記条件式部分に対する所要回数は、最上位のノ
ード数に等しく、一般には複雑な式が書かれないことを
考慮するとさほど多くはない。また、上記条件式は構文
木全体から見るとごく一部である。一方、従来の技術の
データフロー解析では、中間コード全体を最低2回、共
通式の検索のため上記共通式が検出されるまで逆方向に
中間コードを読出す必要があり、この中間コード読出処
理時間の比較では圧倒的に本実施例の方が少ない。次
に、アルゴリズムについて比較すると、これら実施例で
は従来の技術で用いたデータフロー方程式を解くための
複雑なアルゴリズムの演算処理を必要としない。したが
って、本実施例の最適化処理時間は、主として検索時間
に依存し、この検索対象のスペースは最適化候補の条件
式のみに限定されているので、上記検索時間もさほど多
くはない。以上を総合すると、これら実施例により、最
適化処理時間を大幅に削減できるといえる。
【0049】次に、所要メモリ領域の容量について考察
すると、第1および第2のいずれの実施例も、上述した
ように、中間コード自身を検索する処理方法であるの
で、従来のデータフロー解析方法で必要とした最適化の
ための情報を保持する別のメモリ領域を必要としない。
したがって、従来の技術の方法にと比較すると、大幅な
メモリ容量を節減することができ、メモリ容量に制約が
あるマシンの場合でも、ソースプログラムの大きさとは
無関係に常に最適化を実施することが可能である。した
がって、小容量のメモリ領域にて高速な処理時間で実行
時間の速いオブジェクトを生成できる。
【0050】
【発明の効果】以上説明したように、本発明のプログラ
ム変換処理方法は、if文のように基本ブロックが分割
されるソースプログラムに対しても、構文解析時に中間
コードを変形する最適化を行うことにより、複雑なアル
ゴリズムの広域的データフロー解析を用いることなく生
成対象のオブジェクトを最適化することが可能であるの
で、処理ステップ数が削減でき、したがって処理時間を
短縮できるととともに実行時間が速いオブジェクトを生
成できるいう効果がある。
【0051】また、コンパイル処理処理時に使用するメ
モリ領域の容量を大幅に削減できるという効果がある。
【0052】さらに、上記メモリ領域に制約があるマシ
ンの場合でも、ソースプログラムの大きさとは無関係に
常に最適化を実施することが可能であるという効果があ
る。
【0053】
【図面の簡単な説明】
【図1】本発明のプログラム変換処理方法の実施例を示
すブロック図である。
【図2】ソースプログラムの一例を示す図である。
【図3】図2のソースプログラムの変換前および変換後
の構文木の例を示す図である。
【図4】本発明の第1の実施例のプログラム変換処理方
法における動作の一例を示すフローチャートである。
【図5】本実施例による最適化処理後および処理しない
場合のオブジェクトコードの一例を示す図である。
【図6】本発明の第2の実施例のプログラム変換処理方
法における動作の一例を示すフローチャートである。
【図7】本実施例における図2のソースプログラムの変
換前および変換後の構文木の例を示す図である。
【図8】本実施例の最適化しない場合および最適化後の
オブジェクトコードの一例を示す図である。
【図9】従来のプログラム変換処理装置の一例を示すブ
ロック図である。
【図10】図2のソースプログラム対応のフローグラフ
の例を示す図である。
【図11】従来のプログラム変換処理方法における動作
の一例を示すフローチャートである。
【符号の説明】
1 ソースファイル 2,2A 言語処理部 3 構文解析部 4,7 中間ファイル 5 データフロー解析部 6 最適化処理部 8 コード生成部 9 オブジェクトファイル 11 候補中間コード選択部 12 最適化パターン抽出部 13 最適中間コード出力部 101,102,105,101A,102A 条件
式 103,104 ノード 51,61,62,71 命令文

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 供給を受けたソースプログラムの構文解
    析を行ない予め定めた様式の中間コードを生成する構文
    解析手段と、前記中間コードの供給を受けプログラムサ
    イズができるだけ小さくかつ実行時間が短かいオブジェ
    クトコードを生成するよう所定の最適化処理を行う最適
    化処理手段とを備えるプログラム変換処理装置におい
    て、 前記最適化処理手段が前記中間コードの中から予め定め
    た選択条件に適合し前記最適化処理の対象の可能性を有
    する最適化の候補中間コードを選択する候補中間コード
    選択手段と、 前記候補中間コードを起点として探索し最適化対象の前
    記中間コードのパターンである最適化パターンを抽出す
    る最適化パターン抽出手段と、 前記最適化パターンに対応する最適中間コードを出力す
    る最適中間コード出力手段とを備えることを特徴とする
    プログラム変換処理装置。
  2. 【請求項2】 供給を受けたソースプログラムの構文解
    析を行ない予め定めた様式のノードから成る構文木構造
    の中間コードを生成し、前記中間コードの供給を受けプ
    ログラムサイズができるだけ小さくかつ実行時間が短か
    いオブジェクトコードを生成するよう所定の最適化処理
    を行うプログラム変換処理方法において、 前記中間コードの供給を受け前記構文木のノードを予め
    定めた評価順序にしたがって読出すことにより探索し読
    出しノードを出力する第1のステップと、 前記読出しノードの中から予め定めた選択条件に適合し
    前記最適化処理の対象の可能性を有する最適化の候補ノ
    ードを選択する第2のステップと、 前記候補ノードの予め定めた構成語に直接接続したノー
    ドである直接ネスト関係ノードを探索・検出する第3の
    ステップと、 前記直接ネスト関係ノードを検出した場合には最上位の
    直接ネスト関係ノードの予め定めた第1の条件文対応の
    第1の条件ノードと等しい第2の条件ノードが下位の第
    2の条件文での存否を判定し存在すればこれら第1,第
    2の条件ノードを共通式として検出する第4のステップ
    と、 前記共通式の検出に応答して前記構文木を前記最適化処
    理対応の最適化な形に変形する第5のステップとを含む
    ことを特徴とするプログラム変換処理方法。
  3. 【請求項3】 前記候補ノードが仮定を示す「if」か
    ら始まる「if」文対応の「if」ノードであり、 前記第1および第2の条件ノードが第1および下位の第
    2の「if」ノードの各々に対応の第1および第2の条
    件式にそれぞれ含まれる第1および第2の式ノードであ
    り、 前記第5のステップが前記共通式を予め定めたテンポラ
    リ変数に置換し前記最上位の「if」文に前記テンポラ
    リ変数が前記共通式ノードと等しいことを指示する文を
    前置する処理を含むことを特徴とする請求項2記載のプ
    ログラム変換処理方法。
  4. 【請求項4】 供給を受けたソースプログラムの構文解
    析を行ない予め定めた様式のノードから成る構文木構造
    の中間コードを生成し、前記中間コードの供給を受けプ
    ログラムサイズができるだけ小さくかつ実行時間が短か
    いオブジェクトコードを生成するよう所定の最適化処理
    を行うプログラム変換処理方法において、 前記中間コードの供給を受け前記構文木のノードを予め
    定めた評価順序にしたがって読出すことにより探索し読
    出しノードを出力する第1のステップと、 前記読出しノードの中から予め定めた選択条件に適合し
    前記最適化処理の対象の可能性を有する最適化の候補ノ
    ードを選択する第2のステップと、 前記候補ノードが予め定めた第1および第2の条件式を
    含む第1の構文木構造であることを判定する第6のステ
    ップと、 前記候補ノードが前記第1の構文木構造である場合に前
    記第1および第2の条件式の各々の最初の第1および第
    2のノードが右辺値が左辺値より大きいことを示す第1
    の不等号と右辺値が左辺値より小さいことを示す第2の
    不等号と右辺値と左辺値とが等しいことを示す等号との
    うちのそれぞれ相互に異なるいずれか1つであること
    と、前記第1および第2の条件式の各々の右辺値同志お
    よび左辺値同志が相互に同一であることとを判定する第
    7のステップと、 前記右辺値と左辺値の比較処理を行う比較命令を1回だ
    け出力する第2の構文木構造を生成する第8のステップ
    とを含むことを特徴とするプログラム変換処理方法。
JP6024589A 1994-02-23 1994-02-23 プログラム変換処理装置およびプログラム変換処理方法 Expired - Lifetime JP2755154B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP6024589A JP2755154B2 (ja) 1994-02-23 1994-02-23 プログラム変換処理装置およびプログラム変換処理方法
EP95102626A EP0669574A3 (en) 1994-02-23 1995-02-23 Method and system for transforming programs.
US08/392,483 US5586020A (en) 1994-02-23 1995-02-23 Program transformation processing system and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6024589A JP2755154B2 (ja) 1994-02-23 1994-02-23 プログラム変換処理装置およびプログラム変換処理方法

Publications (2)

Publication Number Publication Date
JPH07234790A true JPH07234790A (ja) 1995-09-05
JP2755154B2 JP2755154B2 (ja) 1998-05-20

Family

ID=12142350

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6024589A Expired - Lifetime JP2755154B2 (ja) 1994-02-23 1994-02-23 プログラム変換処理装置およびプログラム変換処理方法

Country Status (3)

Country Link
US (1) US5586020A (ja)
EP (1) EP0669574A3 (ja)
JP (1) JP2755154B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6014519A (en) * 1996-08-19 2000-01-11 Nec Corporation Language processing unit and a language processing method to translate a source program and generate an object module file
JP2008102740A (ja) * 2006-10-19 2008-05-01 Hitachi Ltd 最適化処理方法、及びその言語処理系
JP2017058733A (ja) * 2015-09-14 2017-03-23 株式会社エクサ Cobolソースコード変換プログラム

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226789B1 (en) * 1996-01-29 2001-05-01 Compaq Computer Corporation Method and apparatus for data flow analysis
JP3305949B2 (ja) * 1996-02-08 2002-07-24 富士通株式会社 プログラム解析装置
JP3137590B2 (ja) * 1996-12-04 2001-02-26 三菱電機株式会社 データ統合手順決定装置およびその応用による物品の製造手順決定装置
US6260191B1 (en) 1997-04-07 2001-07-10 Hewlett-Packard Company User controlled relaxation of optimization constraints related to volatile memory references
US6145124A (en) * 1997-08-12 2000-11-07 Veronex Technologies, Inc. Software optimization system
US5987256A (en) * 1997-09-03 1999-11-16 Enreach Technology, Inc. System and process for object rendering on thin client platforms
EP0947922B1 (en) * 1998-04-01 2006-09-27 Matsushita Electric Industrial Co., Ltd. Compiler
US6665866B1 (en) * 1999-05-28 2003-12-16 Microsoft Corporation Extensible compiler utilizing a plurality of question handlers
ES2166279B1 (es) * 1999-09-09 2003-04-16 Univ Valencia Politecnica Un metodo y sistema para la optimizacion de programas multiparadigma por transformacion automatica.
US20020100031A1 (en) * 2000-01-14 2002-07-25 Miguel Miranda System and method for optimizing source code
JP3430252B2 (ja) * 2000-01-24 2003-07-28 独立行政法人産業技術総合研究所 ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置
US20020038453A1 (en) * 2000-08-09 2002-03-28 Andrew Riddle Method and system for software optimization
BR0209497A (pt) * 2001-05-11 2005-08-30 Computer Ass Think Inc Método e sistema para a transformação de aplicações de software de legado em sistemas modernos orientados a objetos
US20050268305A1 (en) * 2001-06-07 2005-12-01 Hostetter Mathew J Software atomization
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US7117507B2 (en) * 2002-06-03 2006-10-03 Sumisho Computer Systems Corporation Software atomization
US7281017B2 (en) * 2002-06-21 2007-10-09 Sumisho Computer Systems Corporation Views for software atomization
US6754878B1 (en) * 2003-03-27 2004-06-22 Xilinx, Inc. Recognizing structure information from a netlist
US7367023B2 (en) * 2003-07-10 2008-04-29 International Business Machines Corporation Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability
US7426716B2 (en) * 2003-07-11 2008-09-16 Board Of Regents, The University Of Texas System Recovery and representation of object interaction in an object oriented program
US8984496B2 (en) * 2004-09-20 2015-03-17 The Mathworks, Inc. Extensible internal representation of systems with parallel and sequential implementations
US8448158B2 (en) 2005-02-03 2013-05-21 Mitsubishi Electric Corporation Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof
EP2330502B1 (en) * 2005-02-03 2018-12-05 Mitsubishi Denki Kabushiki Kaisha Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof
US7913239B2 (en) * 2005-03-08 2011-03-22 International Business Machines Corporation Method and apparatus for a programming framework for pattern matching and transformation of intermediate language expression trees
KR100692172B1 (ko) * 2005-03-30 2007-03-12 아이티플러스 주식회사 종합 문자열 분석기 및 그 분석 방법
US9774699B2 (en) * 2005-09-20 2017-09-26 The Mathworks, Inc. System and method for transforming graphical models
JP4860240B2 (ja) * 2005-11-11 2012-01-25 パナソニック株式会社 翻訳方法および実行通知命令の埋め込み方法
US20090037483A1 (en) * 2006-10-26 2009-02-05 Christensen Steven J System, Method and Apparatus for Dynamically Expanding the Functionality of Legacy Systems
US8813057B2 (en) * 2007-03-31 2014-08-19 Intel Corporation Branch pruning in architectures with speculation support
US9235390B1 (en) * 2008-03-31 2016-01-12 Symantec Corporation Application optimization for use based on feature popularity
US7685565B1 (en) 2009-03-19 2010-03-23 International Business Machines Corporation Run time reconfiguration of computer instructions
JP5110111B2 (ja) * 2010-03-23 2012-12-26 株式会社デンソー 中間モジュールの生成方法及び支援装置
WO2014115189A1 (en) 2013-01-28 2014-07-31 Nec Corporation Method and system for transforming specification scripts to program code
JP6536266B2 (ja) * 2015-08-03 2019-07-03 富士通株式会社 コンパイル装置、コンパイル方法およびコンパイルプログラム
KR102327913B1 (ko) * 2017-04-28 2021-11-19 엔에이치엔 주식회사 블록 기반 데이터 분석 방법 및 시스템
US10459829B2 (en) * 2017-06-07 2019-10-29 M/S. Cigniti Technologies Limited Overall test tool migration pipeline
CN114594954A (zh) * 2020-12-07 2022-06-07 华为技术有限公司 一种代码优化方法、装置、计算设备及计算机存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06501582A (ja) * 1991-02-27 1994-02-17 ディジタル イクイップメント コーポレイション コード生成方法及び装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4656583A (en) * 1984-08-13 1987-04-07 International Business Machines Corporation Method for improving global common subexpression elimination and code motion in an optimizing compiler
JPH0685148B2 (ja) * 1986-03-07 1994-10-26 株式会社日立製作所 配列デ−タフロ−解析装置
US4841570A (en) * 1987-05-11 1989-06-20 The United States Of America As Represented By The United States Department Of Energy One-way transformation of information
JPS643737A (en) * 1987-06-26 1989-01-09 Fujitsu Ltd Common formula deleting method
IE920032A1 (en) * 1991-01-11 1992-07-15 Marconi Gec Ltd Parallel processing apparatus
JPH04241023A (ja) * 1991-01-25 1992-08-28 Hitachi Ltd プログラム合成方法
US5485619A (en) * 1993-12-29 1996-01-16 International Business Machines Corporation Array variable transformation system employing subscript table mapping to scalar loop indices

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06501582A (ja) * 1991-02-27 1994-02-17 ディジタル イクイップメント コーポレイション コード生成方法及び装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6014519A (en) * 1996-08-19 2000-01-11 Nec Corporation Language processing unit and a language processing method to translate a source program and generate an object module file
JP2008102740A (ja) * 2006-10-19 2008-05-01 Hitachi Ltd 最適化処理方法、及びその言語処理系
JP2017058733A (ja) * 2015-09-14 2017-03-23 株式会社エクサ Cobolソースコード変換プログラム

Also Published As

Publication number Publication date
EP0669574A2 (en) 1995-08-30
EP0669574A3 (en) 1997-07-09
JP2755154B2 (ja) 1998-05-20
US5586020A (en) 1996-12-17

Similar Documents

Publication Publication Date Title
JPH07234790A (ja) プログラム変換処理装置およびプログラム変換処理方法
US5355494A (en) Compiler for performing incremental live variable analysis for data-parallel programs
US4773007A (en) Complier code optimization method for a source program having a first and second array definition and use statements in a loop
JP3327818B2 (ja) プログラム変換装置及び記録媒体
US8346697B2 (en) Direct construction of finite state machines
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
US6983458B1 (en) System for optimizing data type definition in program language processing, method and computer readable recording medium therefor
JPH10228382A (ja) コンパイル方式
CN113283613B (zh) 深度学习模型的生成方法、优化方法、装置、设备及介质
US20040154009A1 (en) Structuring program code
US11262988B2 (en) Method and system for using subroutine graphs for formal language processing
Fedorchenko et al. Equivalent transformations and regularization in context-free grammars
US5522074A (en) Vectorization system for vectorizing loop containing condition induction variables
JP2001166946A (ja) 階層の平坦化によりソースコードをコンパイルする方法及び装置
US20030233640A1 (en) Structuring program code
JP2002527816A (ja) プログラム最適化装置および方法
US20050144605A1 (en) Information processing system and code generation method
Naumann et al. Control flow reversal for adjoint code generation
Kipps Analysis of Tomita’s algorithm for general context-free parsing
CN113011585A (zh) 消除拼接算子的编译优化方法、系统、设备及存储介质
CN114675831B (zh) 一种编程语言的编译系统及方法
Blindell Survey on instruction selection: An extensive and modern literature review
Dechering et al. V-cal: a Calculus for the Compilation of Data Parallel Languages
JPH0522272B2 (ja)

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19980203