JPH06208470A - 目的コード最適化装置 - Google Patents

目的コード最適化装置

Info

Publication number
JPH06208470A
JPH06208470A JP225393A JP225393A JPH06208470A JP H06208470 A JPH06208470 A JP H06208470A JP 225393 A JP225393 A JP 225393A JP 225393 A JP225393 A JP 225393A JP H06208470 A JPH06208470 A JP H06208470A
Authority
JP
Japan
Prior art keywords
conditional branch
code
optimizing
start position
optimized
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP225393A
Other languages
English (en)
Inventor
Tetsuyuki Niihori
哲之 新堀
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP225393A priority Critical patent/JPH06208470A/ja
Publication of JPH06208470A publication Critical patent/JPH06208470A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】本発明は、効率の良い目的コードの最適化を可
能とする。 【構成】最適化対象コード内から最適化される条件分岐
の最適化実施の起点となる開始位置を検出するトレース
開始位置検出部10と、トレース開始位置検出部10に
よって検出された開始位置から以降を、開始位置を通ら
ないパスを除いてトレースし、開始位置を通る場合に限
定することで分岐方向を確定できる最適化可能な条件分
岐を検出する条件分岐検出部12と、条件分岐検出部1
2により検出された条件分岐を除いた新たなパスを作成
して目的コードの最適化を行なうパス作成部14を具備
して構成する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、コンピュータ上で動作
する目的コードへの変換を実施する際に、目的コードの
実行効率を改善する目的コード最適化装置及び方法に関
する。
【0002】
【従来の技術】一般に、アセンブラテキストや中間コー
ド等をコンピュータ上で動作する目的コードへ変換する
際、例えばアセンブラやコンパイラ等では、目的コード
の実行効率を改善するするための最適化が行なわれてい
る。
【0003】図12には、目的コードの最適化を行なう
一般的なコンパイラの概念を示している。図12に示す
ように、複数種のプログラム言語が存在し、また各種プ
ログラムで記述されたプログラムを実行する複数種のマ
シンが存在する。
【0004】通常、各プログラム言語の規則に従って記
述されたプログラムを、プログラム言語の種類に関係な
い中間コードである共通言語に変換するためのプリプロ
セッサが、各プログラム言語毎に用意されている。
【0005】従来、目的コードの最適化は、プリプロセ
ッサの段階で、プログラム言語で記述されたプログラム
(ソースプログラム)に対して、最適化の対象とする特
定のプログラムパターンを検出し、このパターンに応じ
た最適化を行なうことによって実現される。例えば、特
定のパターンについて、冗長な条件分岐が生じないよう
に配慮する(ブーリアンショートカットの実施)処理が
成されている。
【0006】
【発明が解決しようとする課題】このように従来の目的
コード最適化は、プログラム言語で記述されたソースプ
ログラム中の特定のパターンに一致する部分について行
なわれるため、このパターンに当てはまらない場合は最
適化の対象とならず、特に冗長な条件分岐が生ずる場合
があった。また、プログラムが複雑になってしまうと、
特定のパターンに当てはまりにくくなり、このような部
分について共通言語に変換が行なわれてしまうと最適化
ができなくなってしまう。
【0007】さらに、ソースプログラムに対して特定パ
ターンのマッチングを行なうことにより最適化が実現さ
れるので、各プログラム言語毎のプリプロセッサにおい
て最適化ルーチンを開発しなければならず、開発負担が
大きかった。本発明は前記のような点を考慮してなされ
たもので、効率の良い目的コードの最適化が可能な目的
コード最適化装置及び方法を提供することを目的とす
る。
【0008】
【課題を解決するための手段】本発明は、コンピュータ
上で動作する目的コードを最適化することにより実行効
率を改善させる目的コード最適化装置において、最適化
対象とするコード内から最適化される条件分岐の最適化
実施の起点となる開始位置を検出する開始位置検出手段
と、前記開始位置検出手段によって検出された開始位置
から以降を、前記開始位置を通らないパスを除いて前記
コードをトレースし、前記開始位置を通る場合に限定す
ることで分岐方向を確定できる最適化可能な条件分岐を
検出する条件分岐検出手段と、前記条件分岐検出手段に
より検出された条件分岐を除いた新たなパスを作成して
前記コードの最適化を行なうパス作成手段とを具備した
ことを第1の特徴とする。
【0009】また本発明は、コンピュータ上で動作する
目的コードを最適化することにより実行効率を改善させ
る目的コード最適化装置において、最適化対象とするコ
ード内から条件分岐命令を検出する条件分岐命令検出手
段と、前記条件分岐命令検出手段によって検出された条
件分岐命令に対し、その分岐直後に成立する条件を検出
し、その条件を表現する情報を作成する成立条件作成手
段と、前記成立条件作成手段によって作成された情報を
利用して、前記コードの最適化を行なう最適化手段とを
具備したことを第2の特徴とする。
【0010】
【作用】このような構成によれば、目的コードから検出
された最適化実施の起点となる開始位置を通らないパス
を考慮外としたトレースを行なうことにより、最適化可
能な条件分岐命令が検出される。
【0011】また、条件分岐命令の直後で成立する成立
条件について、その条件を表現する形式、すなわち分岐
情報を作成することにより、この情報を用いた最適化の
実行が可能となる。
【0012】
【実施例】以下、図面を参照して本発明の実施例を説明
する。図1は本発明の第1実施例に係わる目的コード最
適化装置の構成を示すブロック図である。図1に示すよ
うに、目的コード最適化装置は、トレース開始位置検出
部10、トレース開始位置記憶部11、条件分岐検出部
12、条件分岐記憶部13、及びパス作成部14によっ
て構成されている。
【0013】トレース開始位置検出部10は、最適化の
対象とするコード(以下、最適化コード)、例えば目的
コードへの変換の中間結果である中間コードから、最適
化される条件分岐の最適化実施の起点となるトレース開
始位置を検出する。トレース開始位置記憶部11は、ト
レース開始位置検出部10によって検出されたトレース
開始位置、すなわち基本ブロックを記憶するためのもの
である。
【0014】条件分岐検出部12は、トレース開始位置
検出部10によって検出されたトレース開始位置Pから
最適化対象コードをトレースし、分岐方向を確定するこ
とができる条件分岐を検出する。条件分岐記憶部13
は、条件分岐検出部12によって検出された条件分岐を
記憶するためのものである。
【0015】パス作成部14は、条件分岐検出部12に
よって検出された条件分岐を取り除いた新しいパスを作
成し、最適化対象コードの効率を改善した最適化コード
を作成する。
【0016】次に、第1実施例の動作について説明す
る。本発明の目的コード最適化装置による最適化は、例
えば、図2に示すように、一般に行なわれている他の最
適化処理と同じようにして実行される。すなわち、最適
化対象とするコードに対して、本発明の目的コード最適
化装置が対象とする部分(条件分岐部分)と異なる部分
を対象とする通常の最適化(1,2)が行なわれて、あ
る程度の最適化が施された後に、条件分岐部分について
の最適化が行なわれる。これにより、目的コード最適化
装置による最適化をより効率的に行なうことができる。
また、目的コード最適化装置により最適化が施されたコ
ードについても他の通常の最適化(3)が行なわれる。
なお、図2に示すフローチャートでは、本願発明による
最適化処理の他に通常の最適化1〜3が示されている
が、これに限定するものではない。
【0017】図3は、本発明の第1実施例における目的
コード最適化装置の動作を説明するためのフローチャー
トである。まず、トレース開始位置検出部10は、最適
化対象コードについて、基本ブロックへの分割及び種々
のコード解析を行なう(ステップA1)。なお、基本ブ
ロックは、最適化対象コードの命令列中で、命令の流れ
の分岐や合流によって分割される単位を表している。
【0018】また、トレース開始位置検出部10は、分
岐をもつ基本ブロックを検出し、その後続する基本ブロ
ックを収集する(ステップA2)。ここで収集された基
本ブロックの先頭位置がトレースの開始位置となる。ト
レース開始位置検出部10は、トレース開始位置をトレ
ース開始位置記憶部11に記憶させる。
【0019】図4には最適化されるコードの一例を示し
ている。図4(a)に示すような命令では、図4(b)
に示すようなコードとなる。ここでは、トレース開始位
置検出部10によってステップBBがトレース開始位置
として検出され、トレース開始位置記憶部11に記憶さ
れたものとする。
【0020】条件分岐検出部12は、トレース開始位置
のステップBB以降を順次トレースし、最適化可能な条
件分岐を検出していく(ステップA3)。すなわち、条
件分岐検出部12は、ステップBBを通らないパスが皆
無である場合に限定し、ステップBB0 、ステップBB
3 のそれぞれからトレースを行ない、分岐方向を確定で
きる条件分岐命令を検出していく(ステップA3)。
【0021】図5には、ステップA3における条件分岐
検出部12の具体的な実現例を示している。条件分岐検
出部12の入力は基本ブロック(その先頭位置がトレー
スの開始場所となる)であり、ここで与えられた基本ブ
ロックの先頭位置はステップBB0 である。
【0022】なお、図5中において、bbは、与えられ
た基本ブロック(の先頭でありステップBB0 )を表わ
し、Iは、各変数(例えばX)が取り得る値の範囲(値
域)を示す値域情報(定数解析の結果得られる定数情報
を含む)であり、ステップBB0 の先頭位置に対応する
ものを表わしている。また、処理結果Resの初期状態
は、空集合とする。
【0023】まず、条件分岐検出部12は、bb(ステ
ップBB)の後続基本ブロックの数を判別する(ステッ
プC1)。この判別の結果、基本ブロックの数が「0」
である場合には、処理結果Res(この場合は空集合)
を返して終了する(ステップC2)。
【0024】また、ステップC1における判別の結果、
後続基本ブロックの数が「1」である場合には、bbの
後続基本ブロックをbb´とし、I(値域情報)を、b
b内の各コードが実行されることによる各変数の値域の
変化を計算し、bb´の先頭での値域の情報に更新す
る。そして、bbをbb´とし(ステップC3)、ステ
ップC1に戻る。
【0025】また、ステップC1における判別の結果、
後続基本ブロックの数が「2」以上である場合には、I
に示された値域情報をもとにbbでの条件分岐の分岐方
向を確定できるか判別する(ステップC4)。この結
果、分岐方向が確定できないと判別された場合、処理結
果Resを返して終了する(ステップC2)。
【0026】これに対し、分岐方向が確定できると判別
された場合、bbが持つ条件分岐を処理結果Resに加
える。ここで、bbの後続基本ブロックのうち確定され
ている分岐方向のものをbb´とし、Iをbb内の各コ
ードが実行されることによる各変数の値域の変化を計算
し、bb´の先頭での値域情報に更新する。そして、b
bをbb´とし(ステップC5)、ステップC1に戻
る。条件分岐検出部12は、こうして分岐方向を確定で
きる条件分岐命令を検出していく。
【0027】図4(b)においては、条件分岐検出部1
2は、例えばステップBB0 →ステップBB1 とトレー
スする。この時、ステップBB3 からステップBB1 に
至るパスは考慮しないので、ステップBB1 では「Re
s=true」である。この内容については、条件分岐
検出部12は、値域情報によって認識しているので、ス
テップBB1 での分岐は、「Yes」方向に確定され
る。すなわち、ステップBB1 の条件分岐が最適化可能
として検出される。この条件分岐は、条件分岐記憶部1
3において記憶される。
【0028】条件分岐検出部12によって最適化可能な
条件分岐が検出されると、パス作成部14は、その条件
分岐について、最適化パスを作成することにより最適化
する(図3、ステップA4)。
【0029】すなわち、パス作成部14は、次のように
して新しいパス生成を実現する。ここでは、条件分岐検
出部12の入力となった基本ブロック(その先頭位置が
トレース開始位置)をBB0 、条件分岐検出部12が最
後に最適化可能として検出した条件分岐を含む基本ブロ
ックをBBf とする。また、条件分岐検出部12がトレ
ースした基本ブロックの列を、BB0 →BB1 →…→B
Bf →BBn →…とする。まず、パス作成部14は、ス
テップBB0 にBB1 →…→BBf に含まれていたコー
ドのうち、条件分岐以外のコードをコピーして加える
(コードの順序は変えない)。次に、ステップBB0 の
後続ブロックの1つとして、ステップBBn を加え、そ
の代わりにステップBB1 を取り除く。
【0030】従って、図4(b)では、パス作成部14
は、ステップBBで「No」方向に分岐した場合の最適
化パスを、ステップBB00→ステップBB00→ステップ
BB2 と作成する。
【0031】ステップA2において収集された基本ブロ
ックの中で、最適化されていない条件分岐があればステ
ップA3に戻る(ステップA5)。同様にして、条件分
岐部12は、ステップBB3 →ステップBB1 とトレー
スし、ステップBB1 での分岐を「No」方向に確定す
る(ステップA3)。パス作成部14は、ステップBB
で「Yes」方向に分岐した場合の最適化パスを、ステ
ップBB00→ステップBB01→ステップBB4 と作成す
る。
【0032】最適化パスの作成が完了すると、パス作成
部14は、「dead code elimination 」「空な基本ブロ
ックの除去」を実施し、更にコードの最適化を行なう
(ステップA6)。
【0033】この時、ステップBB00、ステップBB01
のコードは削除され、ステップBBで「No」方向に分
岐した場合の最適化パスはステップBBから直接ステッ
プBB2 へ、ステップBBで「Yes」方向に分岐した
場合の最適化パスは、ステップBBから直接ステップB
B4 へ、各々至るものとなる。こうして、最適化コード
が得られる。
【0034】なお、図3に示すフローチャートでは、ト
レース開始位置検出部10によって最適化対象コードか
らトレース開始位置を全て検出した後、トレースによっ
て最適化可能な条件分岐命令を検出する毎に最適化パス
を作成しているが、最適化対象コードからトレース開始
位置を検出する毎に最適化パスを作成するような流れで
あっても良い。
【0035】次に、第2実施例について説明する。図6
は本発明の第2実施例に係わる目的コード最適化装置の
構成を示すブロック図である。図1に示すように、目的
コード最適化装置は、条件分岐命令検出部20、条件分
岐命令記憶部21、成立条件作成部22、成立条件付加
コード記憶部23、及び最適化部24によって構成され
ている。
【0036】条件分岐命令検出部20は、最適化対象コ
ード(第1実施例と同じ)から、条件分岐命令を全て検
出する。条件分岐命令記憶部21は、条件分岐命令検出
部20によって検出された条件分岐命令を記憶するため
のものである。
【0037】成立条件作成部22は、条件分岐命令記憶
部21に記憶された全条件分岐命令の各々に対して、条
件分岐直後で成立する条件(成立条件)を検出し、その
条件を表現する所定の形式を作成して、最適化対象コー
ドに付加して出力する。成立条件付加コード記憶部23
は、成立条件作成部22から出力される成立条件が付加
された最適化コードを記憶するためのものである。最適
化部24は、成立条件付加コード記憶部23に記憶され
た最適化対象コードを、付加された成立条件を用いて最
適化を実施するものである。
【0038】次に、第2実施例について説明する。図7
は、本発明の第2実施例における目的コード最適化装置
の動作を説明するためのフローチャートである。まず、
条件分岐命令検出部20は、最適化対象コードから、全
て条件分岐命令を検出し、条件分岐命令記憶部21に記
憶させる(ステップD1)。
【0039】図8には最適化されるコードの一例を示し
ている。図8(a)に示すような命令では、図8(b)
に示すようなコードとなる。ここでは、条件分岐命令検
出部20によってステップE0が検出され、条件分岐命
令記憶部21に記憶されたものとする。
【0040】成立条件作成部22は、条件分岐命令検出
部20によって検出された条件分岐命令について、その
条件分岐直後の各位置で成立する条件(成立条件)を作
成する(ステップD2)。図8(b)に示す条件分岐の
直後では、図9に示すように、「NonJump 」方向では
「X=0」が成立条件となり、「Jump」方向では「X≠
0」が成立条件となる。成立条件作成部22は、作成し
た成立条件を表現する形式を作成し、成立条件付加コー
ド記憶部23に記憶させる。
【0041】成立条件作成部22は、例えば図10に示
すように、成立条件を表現する形式を定義する。すなわ
ち、3つのフィールドvariable,relation,value を持
つ構造体型value-range-information を定義し、記憶さ
せるものである。この定義であれば、「X=0」の成立
条件については、variableフィールド=“X”、relati
onフィールド=“=”、value フィールド=“0”であ
るものを生成すれば良い。
【0042】最適化部24は、成立条件作成部22によ
って作成された成立条件を用いて、コードの最適化を実
施する(ステップD3)。図8(b)に示す例では、最
適化の結果、図11に示すようになる。すなわち、成立
条件に基づいて、ステップE1における演算内容が変更
され、「Z=0」となっている。従って、実行ステップ
が短縮される。
【0043】このように、条件分岐命令直後の成立条件
を表わす情報を作成し、この情報を用いて最適化を行な
うので、特に変数と定数(データフロー解析の結果、値
が一定数と分かっているものを含む)の比較結果により
分岐するようなコードに対しては、有効度の高い情報が
作成される(ステップE0の条件分岐に対する成立条件
が一例)。従って、効果的な最適化が可能となる。ま
た、成立条件をもとに最適化を行なうので、従来のよう
に例えばソースプログラムに対する特定パターンについ
てのマッチングに当てはまらなくても最適化が可能とな
る。なお、本願発明の目的コード最適化装置は、各種の
コンパイラ/アセンブラを含む、コード最適化で広く応
用することができる。
【0044】
【発明の効果】以上のように本発明によれば、最適化対
象とするコード条件分岐に関係する冗長さを、高度に最
適化することが可能となるものである。
【図面の簡単な説明】
【図1】本発明の第1実施例に係わる目的コード最適化
装置の構成を示すブロック図。
【図2】本願発明による最適化処理と一般に行なわれて
いる他の最適化処理の関係を説明するための図。
【図3】第1実施例における目的コード最適化装置の動
作を説明するためのフローチャート。
【図4】最適化されるコードの一例を示す図。
【図5】条件分岐検出部12の具体的な実現例を示す
図。
【図6】本発明の第2実施例に係わる目的コード最適化
装置の構成を示すブロック図。
【図7】第2実施例における目的コード最適化装置の動
作を説明するためのフローチャート。
【図8】最適化されるコードの一例を示す図。
【図9】条件分岐直後の成立条件を説明するための図。
【図10】成立条件を表現する形式の一例を示す図。
【図11】最適化の結果得られたコードの一例を示す
図。
【図12】目的コードの最適化を行なう一般的なコンパ
イラの概念を示す図。
【符号の説明】
10…トレース開始位置検出部、11…トレース開始位
置記憶部、12…条件分岐検出部、13…条件分岐記憶
部、14…パス作成部、20…条件分岐命令検出部、2
1…条件分岐命令記憶部、22…成立条件作成部、23
…成立条件付加コード記憶部、24…最適化部。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータ上で動作する目的コードを
    最適化することにより実行効率を改善させる目的コード
    最適化装置において、 最適化対象とするコード内から最適化される条件分岐の
    最適化実施の起点となる開始位置を検出する開始位置検
    出手段と、 前記開始位置検出手段によって検出された開始位置から
    以降を、前記開始位置を通らないパスを除いて前記コー
    ドをトレースし、前記開始位置を通る場合に限定するこ
    とで分岐方向を確定できる最適化可能な条件分岐を検出
    する条件分岐検出手段と、 前記条件分岐検出手段により検出された条件分岐を除い
    た新たなパスを作成して前記コードの最適化を行なうパ
    ス作成手段と、 を具備したことを特徴とする目的コード最適化装置。
  2. 【請求項2】 コンピュータ上で動作する目的コードを
    最適化することにより実行効率を改善させる目的コード
    最適化装置において、 最適化対象とするコード内から条件分岐命令を検出する
    条件分岐命令検出手段と、 前記条件分岐命令検出手段によって検出された条件分岐
    命令に対し、その分岐直後に成立する条件を検出し、そ
    の条件を表現する情報を作成する成立条件作成手段と、 前記成立条件作成手段によって作成された情報を利用し
    て、前記コードの最適化を行なう最適化手段と、 を具備したことを特徴とする目的コード最適化装置。
JP225393A 1993-01-11 1993-01-11 目的コード最適化装置 Pending JPH06208470A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP225393A JPH06208470A (ja) 1993-01-11 1993-01-11 目的コード最適化装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP225393A JPH06208470A (ja) 1993-01-11 1993-01-11 目的コード最適化装置

Publications (1)

Publication Number Publication Date
JPH06208470A true JPH06208470A (ja) 1994-07-26

Family

ID=11524202

Family Applications (1)

Application Number Title Priority Date Filing Date
JP225393A Pending JPH06208470A (ja) 1993-01-11 1993-01-11 目的コード最適化装置

Country Status (1)

Country Link
JP (1) JPH06208470A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009110299A (ja) * 2007-10-30 2009-05-21 Internatl Business Mach Corp <Ibm> プログラムを最適化するコンパイラ

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009110299A (ja) * 2007-10-30 2009-05-21 Internatl Business Mach Corp <Ibm> プログラムを最適化するコンパイラ

Similar Documents

Publication Publication Date Title
US7571427B2 (en) Methods for comparing versions of a program
JP3311462B2 (ja) コンパイル処理装置
US6233733B1 (en) Method for generating a Java bytecode data flow graph
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US20020095667A1 (en) Optimizing compilation by forward store movement
JP3280332B2 (ja) ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法
JPH11110225A (ja) 最適化装置及び最適化装置に適用されるプログラムが記録された記録媒体
JPH02217926A (ja) コード生成方法
US20100199269A1 (en) Program optimization device and program optimization method
JP4026940B2 (ja) プログラム変換装置
US6983457B2 (en) Compile method for storing source code within object code
JPH06208470A (ja) 目的コード最適化装置
US9274929B2 (en) Constraint derivation in context following for use with object code insertion
JPH0756745A (ja) 言語処理プログラムのコンパイラ処理方式
Alblas Incremental attribute evaluation
US5437035A (en) Method and apparatus for compiling a program incending a do-statement
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
JPH0667871A (ja) プログラム自動更新方式
JP3594106B2 (ja) 自動プログラミング装置、自動プログラミング方法および記録媒体
US20040243985A1 (en) Method for compression of object code interpreted by tree-structured expression factorization
JP2002082811A (ja) コンパイル方法および記録媒体
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
JP2003067195A (ja) 最適化コンパイル方法及び最適化コンパイル装置
JP3018783B2 (ja) コンパイル方式
JP2003337709A (ja) コンパイル方法