JPH10301791A - オブジェクトコード最適化装置、オブジェクトコード最適化方法、オブジェクトコード最適化プログラムを記録した機械読み取り可能な記録媒体、及び、コンパイラ - Google Patents

オブジェクトコード最適化装置、オブジェクトコード最適化方法、オブジェクトコード最適化プログラムを記録した機械読み取り可能な記録媒体、及び、コンパイラ

Info

Publication number
JPH10301791A
JPH10301791A JP11278897A JP11278897A JPH10301791A JP H10301791 A JPH10301791 A JP H10301791A JP 11278897 A JP11278897 A JP 11278897A JP 11278897 A JP11278897 A JP 11278897A JP H10301791 A JPH10301791 A JP H10301791A
Authority
JP
Japan
Prior art keywords
register
instruction
object code
code
contents
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
JP11278897A
Other languages
English (en)
Inventor
Keiko Takashima
啓子 高島
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 JP11278897A priority Critical patent/JPH10301791A/ja
Publication of JPH10301791A publication Critical patent/JPH10301791A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space

Landscapes

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

Abstract

(57)【要約】 【課題】 レジスタの使用効率を向上させて、オブジェ
クト効率を向上させることである。 【解決手段】 構文解析処理1を行い、その中間コード
7に含まれる変数をレジスタを割り付けるレジスタ割り
付け手段9と、レジスタ割り付け手段9で割り付けられ
た中間コードの各命令について、レジスタに格納された
内容の情報をオブジェクトテーブルに登録し、そのオブ
ジェクトテーブルに登録された内容と同じ内容をそのレ
ジスタに格納する命令が存在する場合に、その命令を削
除してオブジェクトコードの最適化を図る手段11と、
最適化を図ったオブジェクトコードから機械読み取り可
能な言語を生成するコード生成手段13と、を具備す
る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラム言語処
理の最適化に関するもので、特に、オブジェクトテーブ
ルを使用した命令の削減、命令の置換えによるアプリケ
ーションプログラムのオブジェクトコード短縮化を図る
技術に関する。
【0002】
【従来の技術】コンパイラとは、プログラム開発者が作
成したソースログラムを機械語に翻訳するための装置で
ある。一般的には、実体はコンピュータシステムに導入
(インストール)されたソフトウエアである場合が多
く、コンピュータシステムがそのソフトウエアであるコ
ンパイラを実行することにより、ソースプログラムを機
械読み取り可能な言語(機械語)に翻訳することができ
る。図30は従来のコンパイラを示すブロック図であ
る。このコンパイラは、プログラム開発者が作成したソ
ースコード(図示せず)を入力し、その構文を解析して
中間コード3を出力する構文解析部1と、構文解析され
て出力された中間コード3内の冗長な命令等を削除等す
ることで、プログラムの効率を向上させ、効率を向上さ
せた中間コード7を出力する最適化部5と、その中間コ
ード7で使用される変数等に対してレジスタを割り付け
るレジスタ割付部9と、このレジスタ割付部9の結果を
元にコードの生成を行い、アセンブラ言語プログラム1
5を出力するコード生成部13と、を備える。
【0003】ここで、レジスタ割付部9では、グラフカ
ラーリングなる手法が知られている。このグラフカラー
リングを使用した場合は、変数の生存区間をもとにレジ
スタが割り付けられる。図31は、このグラフカラーリ
ングを用いてレジスタ割付を行う例を説明するための図
面である。この例では変数「a」、「b」、及び「c」
がプログラム開発者が作成したソースコードに含まれて
いるものとする。また、説明の便宜上、コンパイルして
用いるコンピュータシステムが有するレジスタはWA,
BCとする。まず、グラフカラーリング手法では、各変
数の生存区間なる概念を用いる。ここで、生存区間と
は、各変数が最初に用いられてから、最後に用いられる
までのプログラム内の命令の区間をいう。この生存区間
を各変数毎に調査して、その生存区間が重ならないよう
にレジスタに割り付けてるようにする。レジスタが変数
に対して足りない場合には、メモリ等の外部記憶装置が
割り付けられる。図31に示す如く、この例では、変数
「a」はレジスタWAに割り付けられ、変数「b」はレ
ジスタBCに割り付けられる。このコンピュータシステ
ムではこれ以上割り付けを行うレジスタが存在しないの
で、変数「c」はメモリに割り付けられている。このよ
うにして、従来からコンパイラにおけるレジスタ割付処
理が行われていた。
【0004】
【発明が解決しようとする課題】一般的に、レジスタに
割り付けられる変数をCPUへロードする時間は、メモ
リ等の外部記憶装置からロードする時間より短いといえ
る。従って、変数は、出来る限りレジスタに割り当てた
方が実行速度が早くなるため、オブジェクト効率は高く
なる。
【0005】しかしながら、従来のレジスタ割付処理で
は、変数が生存区間中に使用するレジスタの生存区間は
チェックできなかった。実際には、変数の生存区間中に
常にレジスタを使用していることは希で、例えば図31
の変数「a」の如く再び変数を定義してある場合には、
その間の区間においても変数「a」を割り付けあるとす
るため、レジスタの使用効率が悪かった。
【0006】このように、変数の生存区間とレジスタの
生存区間は一致しないことから、グラフカラーリングで
レジスタ割付した場合、実際にはレジスタが使用されて
いないにもかかわらず、外部記憶装置等に変数が割り当
てられることになるため、レジスタ使用率が低くなり、
特に、レジスタの少ない処理系ではオブジェクト効率が
悪くなってしまい、オブジェクトコードを実行した場合
の処理スピードの低下やオブジェクトサイズの増大とい
う問題があった。
【0007】本発明は、上記事情に鑑みてなされてもの
であり、その目的とするところは、レジスタの使用効率
を向上させて、オブジェクト効率を向上させることがで
きるオブジェクトコード最適化装置、オブジェクトコー
ド最適化方法、オブジェクトコード最適化プログラムを
記録した機械読み取り可能な記録媒体、及び、コンパイ
ラを提供することにある。
【0008】
【課題を解決するための手段】上記目的を達成するた
め、請求項1の発明は、オブジェクトコードの最適化を
行う装置において、レジスタに格納された内容の情報を
オブジェクトテーブルに登録し、そのオブジェクトテー
ブルに登録された内容と同じ内容を前記レジスタに格納
する命令が存在する場合に、その命令を削除してオブジ
ェクトコードの最適化を図ることを特徴とする。
【0009】上記発明の構成では、オブジェクトテーブ
ルなるレジスタの保持する内容の情報を登録するための
テーブルを用いるようにしてある。このオブジェクトテ
ーブルを用いてレジスタの保持する内容を把握すること
で、同じ内容をそのレジスタに格納する命令が存在する
場合に、その命令を削除してオブジェクトコードの最適
化を図るようにしてある。上記発明の構成によれば、不
要な命令を削除することができるので、オブジェクトサ
イズを減少させることが出来る。従って、オブジェクト
効率を向上させることが出来るのである。
【0010】請求項2の発明は、オブジェクトコードの
最適化を行う装置において、レジスタ若しくはスタック
メモリに格納された内容の情報をオブジェクトテーブル
に登録し、そのオブジェクトテーブルに登録された内容
と同じ内容を前記レジスタ若しくはスタックメモリに格
納する命令が存在する場合に、その命令を削除してオブ
ジェクトコードの最適化を図ることを特徴とする。
【0011】上記発明の構成では、レジスタのみならず
スタックメモリをも対象としている。一般に、レジスタ
割り付けが出来ない変数は、スタックメモリに割り付け
られることが多い。この場合であっても不要な命令を削
除することができるので、オブジェクトサイズを減少さ
せることが出来る。従って、オブジェクト効率を向上さ
せることが出来るのである。
【0012】請求項3の発明は、複数のレジスタを1つ
のレジスタとしてデータを書き込む特性を有する処理装
置に用いられるオブジェクトコードの最適化を行う装置
において、レジスタ及びスタックメモリに格納された内
容の情報をオブジェクトテーブルに各レジスタ若しくは
各スタックメモリ毎に登録し、そのオブジェクトテーブ
ルに登録された内容と同じ内容を前記各レジスタ若しく
は各スタックメモリに格納する命令が存在する場合に、
その命令を削除してオブジェクトコードの最適化を図る
ことを特徴とする。
【0013】上記発明の構成は、複数のレジスタを1つ
のレジスタとしてデータを書き込む特性を有する処理装
置を対象としたものである。このような処理系の処理装
置においても、レジスタ毎に命令が不要か否かの判断を
行うことが出来るので、更にオブジェクト効率の向上を
図ることができる。
【0014】請求項4の発明は、オブジェクトコードの
最適化を行う装置において、スタックメモリから第1の
レジスタに格納された内容の情報をオブジェクトテーブ
ルに登録し、そのオブジェクトテーブルに登録された内
容と同じ内容を前記スタックメモリから第2のレジスタ
に格納する命令が存在する場合に、前記第1のレジスタ
から前記第2のレジスタに格納する命令に変更してオブ
ジェクトコードの最適化を図ることを特徴とする。
【0015】上記発明の構成は、レジスタにある内容と
同一の内容がスタックメモリにある場合に、スタックメ
モリからレジスタに格納する命令をレジスタから格納す
る命令に変更するようにしたものである。上記発明の構
成によれば、スタックメモリから読み込む命令をレジス
タから読み込む命令に変更することが出来る。従って、
オブジェクトの実行速度の向上を図ることができるの
で、オブジェクト効率を向上させることが出来る。
【0016】請求項5の発明は、請求項1乃至4におけ
る前記オブジェクトテーブルは、前記オブジェクトコー
ドが複数のブロックを有する場合には、先行ブロックの
オブジェクトテーブルの最終値を初期値とすることを特
徴とする。
【0017】上記発明の構成のように先行ブロックのオ
ブジェクトテーブルの最終値を初期値とすることで、ブ
ロックにまたがった最適化を図ることが出来るのであ
る。
【0018】上記目的を達成するため、請求項6の発明
は、オブジェクトコードの最適化を行う方法において、
レジスタに格納された内容の情報をオブジェクトテーブ
ルに登録するステップと、そのオブジェクトテーブルに
登録された内容と同じ内容を前記レジスタに格納する命
令が存在する場合に、その命令を削除してオブジェクト
コードの最適化を図るステップと、を含むことを特徴と
する。
【0019】上記目的を達成するため、請求項7の発明
は、オブジェクトコードの最適化を行うプログラムを記
録した機械読み取り可能な記録媒体において、レジスタ
に格納された内容の情報をオブジェクトテーブルに登録
するステップと、そのオブジェクトテーブルに登録され
た内容と同じ内容を前記レジスタに格納する命令が存在
する場合に、その命令を削除してオブジェクトコードの
最適化を図るステップと、を含むことを特徴とする。
【0020】請求項8の発明は、オブジェクトコードの
最適化を行うプログラムを記録した機械読み取り可能な
記録媒体において、レジスタ若しくはスタックメモリに
格納された内容の情報をオブジェクトテーブルに登録す
るステップと、そのオブジェクトテーブルに登録された
内容と同じ内容を前記レジスタ若しくはスタックメモリ
に格納する命令が存在する場合に、その命令を削除して
オブジェクトコードの最適化を図るステップと、を含む
ことを特徴とする。
【0021】請求項9の発明は、複数のレジスタを1つ
のレジスタとしてデータを書き込む特性を有する処理装
置に用いられるオブジェクトコードの最適化を行うプロ
グラムを記録した機械読み取り可能な記録媒体におい
て、レジスタ及びスタックメモリに格納された内容の情
報をオブジェクトテーブルに各レジスタ若しくは各スタ
ックメモリ毎に登録するステップと、そのオブジェクト
テーブルに登録された内容と同じ内容を前記各レジスタ
若しくは各スタックメモリに格納する命令が存在する場
合に、その命令を削除してオブジェクトコードの最適化
を図るステップと、を含むことを特徴とする。
【0022】請求項10の発明は、オブジェクトコード
の最適化を行うプログラムを記録した機械読み取り可能
な記録媒体において、スタックメモリから第1のレジス
タに格納された内容の情報をオブジェクトテーブルに登
録するステップと、そのオブジェクトテーブルに登録さ
れた内容と同じ内容を前記スタックメモリから第2のレ
ジスタに格納する命令が存在する場合に、前記第1のレ
ジスタから前記第2のレジスタに格納する命令に変更し
てオブジェクトコードの最適化を図るステップと、を含
むことを特徴とする。
【0023】請求項11の発明は、前記請求項7乃至1
0における請求項前記オブジェクトテーブルは、前記オ
ブジェクトコードが複数のブロックを有する場合には、
先行ブロックのオブジェクトテーブルの最終値を初期値
とすることを特徴とする。
【0024】上記目的を達成するため、請求項12の発
明は、ソースコードを翻訳して機械読みとり可能な言語
を生成するコンパイラにおいて、構文解析処理を行い、
その中間コードに含まれる変数をレジスタを割り付ける
レジスタ割り付け手段と、このレジスタ割り付け手段で
割り付けられた中間コードの各命令について、レジスタ
に格納された内容の情報をオブジェクトテーブルに登録
する手段と、そのオブジェクトテーブルに登録された内
容と同じ内容を前記レジスタに格納する命令が存在する
場合に、その命令を削除してオブジェクトコードの最適
化を図る手段と、最適化を図ったオブジェクトコードか
ら機械読み取り可能な言語を生成するコード生成手段
と、を具備することを特徴とする。
【0025】上記発明の構成によれば、コンパイラが機
械読み取り可能な言語を生成する時、オブジェクトテー
ブルを参照することにより、同じ動作を行う命令や、同
じ値を使用する命令を削除したり、より短い命令に変換
することで、アプリケーションプログラムのオブジェク
トコードを短くし、実行スピードの向上を図ることで、
オブジェクト効率の向上を図ることができるのである。
【0026】
【発明の実施の形態】以下、本発明に係るオブジェクト
コード最適化装置、オブジェクトコード最適化方法、オ
ブジェクトコード最適化プログラムを記録した機械読み
取り可能な記録媒体、コンパイラの実施形態について、
図面を参照しながら詳細に説明する。
【0027】本実施形態で用いるハードウエア構成は、
各種処理を行うためのCPUと、キーボード、マウス、
ライトペン、又はフレキシブルディスク装置等の入力装
置と、メモリ装置やディスク装置等の外部記憶装置と、
ディスプレイ装置、プリンタ装置等の出力装置等とを備
えた通常のコンピュータシステムである。なお、前記C
PUは、言語における処理等を行う演算部と、前記処理
の命令を記憶する主記憶部とを具備する。
【0028】次に、本発明に係るコンパイラが具備する
ソフトウエア構成は、図1にそのブロック図を示した通
り、プログラム開発者が作成したソースコード(図示せ
ず)を入力し、その構文を解析して中間コード3を出力
する構文解析部1と、構文解析されて出力された中間コ
ード3内の冗長な命令等を削除等することで、プログラ
ムの効率を向上させ、効率を向上させた中間コード7を
出力する最適化部5と、その中間コード7で使用される
変数等に対してレジスタを割り付けるレジスタ割付部9
と、オブジェクトテーブルを作成し、そのオブジェクト
テーブルを用いて最適化を行う最適化部11と、このレ
ジスタ割付部9の結果を元にコードの生成を行い、アセ
ンブラ言語プログラム15を出力するコード生成部13
と、を備える。
【0029】第1の実施の形態 以下、本実施形態の処理動作を説明する。まず、プログ
ラム開発者がハードディスク等の補助記憶装置に格納さ
れ、Cやfortran等の高水準言語や、アセンブラ
等の機械向き言語を作成するための高水準言語等で記述
された所定のソースコード(以下、単にソースコードと
記す)を、コンピュータシステムに対しコンパイル処理
を行わせるための命令を行う。続いて、命令を受けたコ
ンピュータシステムはソースコード及びコンパイル処理
の命令群をCPU内の主記憶部等に複写してコンパイル
のための準備を行う。
【0030】次に、プログラム言語処理の命令群内の構
文解析部1にて、複写されたソースコードの構文につい
ての解析を行い、中間コード3を出力する。続いて、最
適化部5にて、前記解析に基づいて、不要な命令の削
除、最適な命令の追加、命令順序の最適化等を行い、そ
の最適化された中間コード7を出力する。
【0031】続いて、レジスタ割付部9では、グラフカ
ラーリングを使用した場合は、変数の生存区間をもとに
レジスタが割り付けられる。このグラフカラーリング
は、上で説明を行ったので、ここでの説明は、省略す
る。なお、このグラフカラーリングを用いなくとも独自
の手法によりレジスタ割付を行っても良い。
【0032】続いて、オブジェクトテーブル作成とそれ
による最適化部11の処理を説明する。図2は、この処
理を説明するためのフローチャートである。まず、本ブ
ロックのオブジェクトテーブル作成を行う(ステップS
1)。本実施形態では、レジスタ割り付けを行ったコー
ドのブロック毎に適用する。
【0033】図3にオブジェクトテーブルの例を示す。
このオブジェクトテーブルは、レジスタであるW,A,
B,C,(中略),H,L、及び、メモリ内のスタック
1、2、3、・・・における情報を登録するためのテー
ブルである。各レジスタ等には種別、インデックス、及
び内容が保持できるようにしてある。これらの情報は、
その内容が変化する度に更新される。図4は、オブジェ
クトテーブルに登録される内容を示す図である。レジス
タ等にアドレスが書き込まれた場合には、種別の欄には
「アドレス」が登録され、インデックスには「シンボル
テーブルのインデックスの番号」が登録される。なお、
内容の欄には登録はされない。また、レジスタ等に直値
が書き込まれた場合には、種別の欄には「直値」が登録
され、インデックスにはその「値」が登録される。な
お、内容の欄には登録はされない。また、レジスタ等に
レジスタの値が書き込まれた場合には、種別の欄には
「レジスタ」が登録され、インデックスにはその「レジ
スタ番号」が登録され、内容の欄にはその「値」が登録
される。また、レジスタ等にスタックの値が書き込まれ
た場合には、種別の欄には「スタック」が登録され、イ
ンデックスには「スタックポインタからのオフセット」
が登録され、内容の欄にはその「値」が登録される。レ
ジスタ若しくはスタック以外でもコンパイラが変数を記
憶装置に割り付けた場合には、その記憶装置についても
オブジェクトテーブルを作成するようにしてもよい。ま
た、登録する事項についても同様である。また、このオ
ブジェクトテーブルは前に他のブロックの処理を行った
場合には、その前のブロックで作成したオブオブジェク
トテーブルを使用して作成するようにしてもよい。この
ようにすることにより、ブロックを越えてオブジェクト
コードの最適化を行うことができる。
【0034】続いて、最初の1行について参照する(ス
テップS2)。その参照した命令によって、そのコード
の内容の情報をオブジェクトテーブルに反映する(ステ
ップS3)。続いて、参照した命令がロード命令(LD
命令)か否かを判定し(ステップS4)、LD命令の場
合には、ステップS5へ進む。ステップS5、ステップ
S7、ステップS9、及びステップS11にてそのLD
命令がどのような種類のLD命令かを判定する。その種
類により行う処理を実施例(1)乃至(6)で説明す
る。
【0035】実施例(1) 本実施例は、図2のステップS5にてアドレスに関する
処理と判定された場合に実施されるものであり、ここで
は、連続する同変数が複数のレジスタに存在する場合
に、その変数に代入するアドレスが同じ場合には、後に
記述された命令の削除を行う。図5は本実施例を説明す
るためのソースコードを示す図である。このソースコー
ドについて、本実施例における処理動作を説明する。図
7は本実施例の処理を示すフローチャートである。
【0036】まず、命令100の参照時、図6に示す如
く、オブジェクトテーブルのWA内に、種別:アドレス
(103)、index:No.n(シンボルテーブル
の番号)(104)をそれぞれ登録する(S101)。な
お、レジスタに書き込む値によっては、上述のように、
レジスタW、及びレジスタAの2つのレジスタを1つの
レジスタとして書き込む特性を持つ処理系(レジスタペ
ア)の場合には、オブジェクトテーブルの表記は、その
レジスタの名前を連続して表すことにする(例えば、オ
ブジェクトテーブルのWA等)。
【0037】続いて、命令101では、WAは参照され
るだけなので、WAに関するオブジェクトテーブルは変
化しない(S102)。続いて、命令102参照時、オ
ブジェクトテーブルWAの内容を検索する(S10
3)。
【0038】この場合に、図6に示す如く、その内容
(種別:この場合はアドレス、index:この場合は
シンボルテーブルのインデックス番号)が、_Gと一致
するので、WAは既に_Gが入っていると判断する(S
104)。よって、102の命令を削除する(S10
5)。なお、種別がアドレスの場合は、テーブルの検索
等はアドレスのサイズ単位で行う。
【0039】このように、本実施例の処理によれば、不
要な命令を削除することが出来る。従って、オブジェク
トサイズを減少させることが出来るので、オブジェクト
効率を向上させることが出来る。
【0040】実施例(2) 本実施例は、図2のステップS5にてアドレスに関する
処理と判定された場合に実施されるものであり、ここで
は、連続する同変数がレジスタとスタックに存在する場
合に、その変数に代入するアドレスが同じ場合には、後
に記述された命令の削除を行う。図8は本実施例を説明
するためのソースコードを示す図である。このソースコ
ードについて、本実施例における処理動作を説明する。
図10は本実施例の処理を示すフローチャートである。
【0041】まず、命令200参照時、図9に示す如
く、オブジェクトテーブルの(SP+1,2)内に、S
P+1,2 種別:アドレス(203)、index:
No.n(シンボルテーブルの番号)(204)をそれぞ
れ登録する(S201)。
【0042】続いて、命令201では、(SP+1,
2)は参照されるだけなので、(SP+1,2)に関す
るオブジェクトテーブルは変化しない(S202)。命
令202参照時、コンパイラは、オブジェクトテーブル
(SP+1,2)の内容を検索する(S203)。
【0043】この場合に、図9に示す如く、その内容
(種別:この場合はアドレス、index:この場合は
シンボルテーブルのインデックス番号)が、_Gと一致
するので、(SP+1,2)には既に_Gが入っている
と判断する(S204)。よって、202の命令は削除
される(S205)。
【0044】このように、本実施例の処理によれば、不
要な命令を削除することが出来る。従って、オブジェク
トサイズを減少させることが出来るので、オブジェクト
効率を向上させることが出来る。
【0045】実施例(3) 本実施例は、図2のステップS7にて直値に関する処理
と判定された場合に実施されるものであり、ここでは、
連続する同直値が複数のレジスタに存在する場合に、そ
の変数に代入する直値が同じ場合には、後に記述された
命令の削除を行う。
【0046】図11は本実施例を説明するためのソース
コードを示す図である。このソースコードについて、本
実施例における処理動作を説明する。図13は本実施例
の処理を示すフローチャートである。
【0047】まず、命令300の参照時に、図12に示
す如く、オブジェクトテーブルのWに、種別:直値(3
03)、index:0x12(304)を、また、オブ
ジェクトテーブルのAに、種別:直値(305)、in
dex:0x34(306)をそれぞれ登録する(S30
1)。
【0048】続いて、命令301では、WAは参照され
るだけなので、WAに関するオブジェクトテーブルは変
化しない(S302)。続いて、命令302参照時、オ
ブジェクトテーブルAの内容を検索する(S303)。
【0049】この場合に、図12に示す如く、その内容
が(種別:直値、index:0x34)が0x34と一致
するので、Aには既に0x34が入っていると判断する
(S304)。よって、302の命令を削除する(S3
05)。
【0050】実施例(1)との相違は、第1実施例がア
ドレスのサイズ単位で検索したのに対し、実施例(2)
では1バイト単位で検索している点である。つまり、オ
ブジェクトテーブル書き込み時と検索時のサイズが異な
るということである。
【0051】このように、本実施例の処理によれば、不
要な命令を削除することが出来る。従って、オブジェク
トサイズを減少させることが出来るので、オブジェクト
効率を向上させることが出来る。さらに、本実施例で
は、特に、レジスタペアの特性を持つ処理系の場合に、
レジスタ毎に命令が不要か否かの判断を行うことが出来
るので、更にオブジェクト効率の向上を図ることができ
る。
【0052】実施例(4) 本実施例は、図2のステップS9にてレジスタに関する
処理と判定された場合に実施されるものであり、ここで
は、複数のレジスタに等しい直値が代入されている場合
には、後に記述された命令の削除を行う。図14は本実
施例を説明するためのソースコードを示す図である。こ
のソースコードについて、本実施例における処理動作を
説明する。図16は本実施例の処理を示すフローチャー
トである。
【0053】まず、命令400,401参照時に、図1
5に示す如く、オブジェクトテーブルのW,A,B,C
を更新する(403〜410)(S401,S402)。
命令402参照時、コンパイラは、オブジェクトテーブ
ルWAとBCの内容を検索する(S403)。図15に
示す如く、WAとBCの内容が一致するので(S40
4)、402の命令は削除される(S405)。
【0054】このように、本実施例の処理によれば、不
要な命令を削除することが出来る。従って、オブジェク
トサイズを減少させることが出来るので、オブジェクト
効率を向上させることが出来る。
【0055】実施例(5) 本実施例は、図2のステップS9にてレジスタに関する
処理と判定された場合に実施されるものであり、ここで
は、あるレジスタに書き込まれた内容が、別のレジスタ
に等しい直値が代入されている場合には、後に記述され
た命令の削除を行う。図17は、本実施例を説明するた
めのソースコードを示す図である。このソースコードに
ついて、本実施例における処理動作を説明する。図19
は本実施例の処理を示すフローチャートである。
【0056】まず、命令500参照時、図18に示す如
く、オブジェクトテーブルのD,Eを更新する(516
〜519)(S501)。命令501,502参照時に、
図18に示す如く、オブジェクトテーブルのW,A,
B,Cを更新する(504〜515)(S502,S50
3)。命令503参照時、オブジェクトテーブルWAと
BCの内容を検索する(S504)。図18に示す如
く、WAとBCの内容が一致するので(S505)、5
03の命令は削除される(S506)。
【0057】このように、本実施例の処理によれば、不
要な命令を削除することが出来る。従って、オブジェク
トサイズを減少させることが出来るので、オブジェクト
効率を向上させることが出来る。 実施例(6) 本実施例は、図2のステップS11にてスタックに関す
る処理と判定された場合に実施されるものであり、ここ
では、スタックに書き込まれた命令が変化していない場
合に、再びそのスタックから値をレジスタへ書き込む命
令があるときには、その命令の削除を行う。
【0058】まず、命令600参照時、図21に示す如
くオブジェクトテーブルのstack+1,stack
+2を更新する(610〜613)(S601)。命令6
01参照時、オブジェクトテーブルのWに、種別:st
ack(604)、index:+1(605)、内
容:0x12(606)を登録し、オブジェクトテーブル
Aに、種別:stack(607)、index:+2
(608)、内容:0x34(609)を登録する(S6
02)。命令602では、WAは参照されるだけなの
で、WAに関するオブジェクトテーブルは変化しない
(S603)。命令603参照時、コンパイラは、オブ
ジェクトテーブルW,Aそれぞれの内容を検索する(S
604)。
【0059】図21に示す如く、その内容が(SP+
1),(SP+2)と一致するので、WAには既に(S
P+1),(SP+2)が入っていると判断する(S6
05,S606)よって、603の命令の削除を行う
(S607)。
【0060】このように、本実施例の処理によれば、不
要な命令を削除することが出来る。従って、オブジェク
トサイズを減少させることが出来るので、オブジェクト
効率を向上させることが出来る。 実施例(7) 本実施例は、図2のステップS12にてレジスタに関す
る処理と判定された場合に実施されるものであり、ここ
では、レジスタとスタックに同じ値が書き込まれている
場合に、スタックから読み込む命令があった場合には、
その命令をレジスタから読み込むように変更する。
【0061】まず、命令700参照時、図24に示す如
く、オブジェクトテーブルのstack+1,stac
k+2を更新する(716〜719)(S701)。命令
701参照時、オブジェクトテーブルのWに、種別:s
tack(704)、index:+1(705)、内
容0x12(706)を登録し、オブジェクトテーブルA
に、種別:stack(707)、index:+2
(708)、内容0x34(709)を登録する(S70
2)。命令702参照時、コンパイラは、オブジェクト
テーブルのBに、種別:レジスタ(710)、inde
x:W(711)、内容0x12(712)を登録し、オ
ブジェクトテーブルCに、種別:レジスタ(713)、
index:A(714)、内容0x34(715)を登
録する(S703)。
【0062】命令703参照時、種別がスタックのレジ
スタがないか検索する(S704)。種別がスタックの
レジスタについて、indexと内容がstack+
1,2と一致するものがないか検索する(S705)。
図24のオブジェクトテーブルの検索の結果、WとA
が、その条件に合致することがわかるので、(SP+
1)をWAに置き換える(S706)。
【0063】以上のような各実施例の処理を行った後
に、オブジェクトテーブルを更新する(ステップS1
5)。続いて、まだ、処理すべき行があるか否かを判定
し(ステップS16)、まだある場合には、ステップS
2に進む。また、処理すべき行がない場合には、そのブ
ロックでの処理を終了する。
【0064】このように、本実施形態の処理によれば、
スタックから読み込む命令をレジスタから読み込む命令
に変更することが出来る。従って、オブジェクトの実行
速度の向上を図ることができるので、オブジェクト効率
を向上させることが出来る。
【0065】第2の実施の形態 次に、本実施形態の処理動作について図面を参照しなが
ら詳細に説明する。本実施形態では、ブロックにまたが
って変数が存在する場合にオブジェクトコードの最適化
を図るためのものである。本実施形態の処理動作を図2
に示す。本実施形態と第1の実施形態との相違は、ステ
ップS1にて先行ブロックのオブジェクトテーブルを使
用することである。その他の処理は、第1の実施形態と
同様であるので、1つの実施例のみ説明を行う。
【0066】図26は、本実施例の処理動作を説明する
ためのソースコードを示した図である。このソースコー
ドについて、本実施例における処理動作を説明する。図
29は本実施例の処理を示すフローチャートである。
【0067】まず、命令800参照時に、図27に示す
如く、ブロック1のオブジェクトテーブルのBに、種
別:メモリ、index:(HL+0x5)を登録し、オ
ブジェクトテーブルCに、種別:メモリ、index:
(HL+0x6)を登録する(S801)。第1の実施形
態では、ブロックごとにオブジェクトテーブルを作成す
るが、本実施形態では、先行ブロックの最終値を初期値
として使用してオブジェクトテーブルを作成する。先行
ブロックが複数存在する場合は、すべての先行ブロック
の最終値が等しい要素のみを初期値として使用する(S
802)。
【0068】図26に示したブロック2のオブジェクト
テーブルを作成する時、ブロック1の最終値を、ブロッ
ク2の初期値として使用する。ブロック1がブロック2
の先行ブロックだからである。命令801参照時、ブロ
ック2のオブジェクトテーブルを検索し、種別がメモリ
のレジスタがないか検索する(S803)。種別がメモ
リのレジスタについて、indexが(HL+5)およ
び(HL+6)のものがないか検索する(S804,S
805)。
【0069】検索の結果、BとCが、図28に示す如
く、その条件に合致することがわかるので、(HL+
5)をBCに置き換える(S806)。
【0070】このように、本実施例の処理によれば、ス
タックから読み込む命令をレジスタから読み込む命令に
変更することが出来る。従って、オブジェクトの実行速
度の向上を図ることができるので、オブジェクト効率を
向上させることが出来る。更に、本実施形態では、ブロ
ックにまたがる最適化を図ることが出来る。
【0071】以上の各実施形態を用いて、コンパイル処
理を行った場合には、従来技術と比較して、オブジェク
トコードサイズを約10%削減を実現することができ
た。このオブジェクトサイズの削減により、アプリケー
ションプログラムのメモリの節約によるコストダウン、
実行スピードの向上が可能となる。
【0072】なお、上述したオブジェクトコード最適化
処理を実現するためのプログラムは記録媒体に保存する
ことができる。この記録媒体をコンピュータシステムに
よって読み込ませ、前記プログラムを実行してコンピュ
ータを制御しながら上述したオブジェクトコードの最適
化処理を実現することができる。ここで、前記記録媒体
とは、メモリ装置、磁気ディスク装置、光ディスク装置
等、プログラムを記録することができるような装置が含
まれる。
【0073】
【発明の効果】以上説明してきたように、本発明に係る
オブジェクトコード最適化装置、オブジェクトコード最
適化方法、オブジェクトコード最適化プログラムを記録
した機械読み取り可能な記録媒体、及び、コンパイラに
よれば、レジスタの使用効率を向上させて、オブジェク
ト効率を向上させることができる。
【図面の簡単な説明】
【図1】本実施形態のコンパイラを示すブロック図であ
る。
【図2】本実施形態のオブジェクトコード最適化方法を
示すフローチャートである。
【図3】オブジェクトテーブルを示す図である。
【図4】オブジェクトテーブルの内容を示す図である。
【図5】第1実施例のソースコードを示す図である。
【図6】第1実施例のオブジェクトテーブルを示す図で
ある。
【図7】第1実施例のフローチャートを示す図である。
【図8】第2実施例のソースコードを示す図である。
【図9】第2実施例のオブジェクトテーブルを示す図で
ある。
【図10】第2実施例のフローチャートを示す図であ
る。
【図11】第3実施例のソースコードを示す図である。
【図12】第3実施例のオブジェクトテーブルを示す図
である。
【図13】第3実施例のフローチャートを示す図であ
る。
【図14】第4実施例のソースコードを示す図である。
【図15】第4実施例のオブジェクトテーブルを示す図
である。
【図16】第4実施例のフローチャートを示す図であ
る。
【図17】第5実施例のソースコードを示す図である。
【図18】第5実施例のオブジェクトテーブルを示す図
である。
【図19】第5実施例のフローチャートを示す図であ
る。
【図20】第6実施例のソースコードを示す図である。
【図21】第6実施例のオブジェクトテーブルを示す図
である。
【図22】第6実施例のフローチャートを示す図であ
る。
【図23】第7実施例のソースコードを示す図である。
【図24】第7実施例のオブジェクトテーブルを示す図
である。
【図25】第7実施例のフローチャートを示す図であ
る。
【図26】第2の実施形態を説明するためのソースコー
ドを示す図である。
【図27】図26に示したブロック1のオブジェクトテ
ーブルを示す図である。
【図28】図26に示したブロック2のオブジェクトテ
ーブルを示す図である。
【図29】第2の実施形態のフローチャートを示す図で
ある。
【図30】従来の処理のフローチャートを示す図であ
る。
【図31】従来のレジスタ割り付けを説明するための図
である。
【符号の説明】
1 構文解析部 3 中間コード(その1) 5 最適化部 7 中間コード(その2) 9 レジスタ割り付け 11 オブジェクトテーブル作成とそれによる最適化部 13 コード生成部 15 アセンブリ言語プログラム

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクトコードの最適化を行う装置
    において、 レジスタに格納された内容の情報をオブジェクトテーブ
    ルに登録し、そのオブジェクトテーブルに登録された内
    容と同じ内容を前記レジスタに格納する命令が存在する
    場合に、その命令を削除してオブジェクトコードの最適
    化を図ることを特徴とするオブジェクトコード最適化装
    置。
  2. 【請求項2】 オブジェクトコードの最適化を行う装置
    において、 レジスタ若しくはスタックメモリに格納された内容の情
    報をオブジェクトテーブルに登録し、そのオブジェクト
    テーブルに登録された内容と同じ内容を前記レジスタ若
    しくはスタックメモリに格納する命令が存在する場合
    に、その命令を削除してオブジェクトコードの最適化を
    図ることを特徴とするオブジェクトコード最適化装置。
  3. 【請求項3】 複数のレジスタを1つのレジスタとして
    データを書き込む特性を有する処理装置に用いられるオ
    ブジェクトコードの最適化を行う装置において、 レジスタ及びスタックメモリに格納された内容の情報を
    オブジェクトテーブルに各レジスタ若しくは各スタック
    メモリ毎に登録し、そのオブジェクトテーブルに登録さ
    れた内容と同じ内容を前記各レジスタ若しくは各スタッ
    クメモリに格納する命令が存在する場合に、その命令を
    削除してオブジェクトコードの最適化を図ることを特徴
    とするオブジェクトコード最適化装置。
  4. 【請求項4】 オブジェクトコードの最適化を行う装置
    において、 スタックメモリから第1のレジスタに格納された内容の
    情報をオブジェクトテーブルに登録し、そのオブジェク
    トテーブルに登録された内容と同じ内容を前記スタック
    メモリから第2のレジスタに格納する命令が存在する場
    合に、前記第1のレジスタから前記第2のレジスタに格
    納する命令に変更してオブジェクトコードの最適化を図
    ることを特徴とするオブジェクトコード最適化装置。
  5. 【請求項5】 前記オブジェクトテーブルは、 前記オブジェクトコードが複数のブロックを有する場合
    には、先行ブロックのオブジェクトテーブルの最終値を
    初期値とすることを特徴とする請求項1乃至4記載のオ
    ブジェクトコード最適化装置。
  6. 【請求項6】 オブジェクトコードの最適化を行う方法
    において、 レジスタに格納された内容の情報をオブジェクトテーブ
    ルに登録するステップと、 そのオブジェクトテーブルに登録された内容と同じ内容
    を前記レジスタに格納する命令が存在する場合に、その
    命令を削除してオブジェクトコードの最適化を図るステ
    ップと、 を含むことを特徴とするオブジェクトコード最適化方
    法。
  7. 【請求項7】 オブジェクトコードの最適化を行うプロ
    グラムを記録した機械読み取り可能な記録媒体におい
    て、 レジスタに格納された内容の情報をオブジェクトテーブ
    ルに登録するステップと、 そのオブジェクトテーブルに登録された内容と同じ内容
    を前記レジスタに格納する命令が存在する場合に、その
    命令を削除してオブジェクトコードの最適化を図るステ
    ップと、 を含むことを特徴とするオブジェクトコード最適化プロ
    グラムを記録した機械読み取り可能な記録媒体。
  8. 【請求項8】 オブジェクトコードの最適化を行うプロ
    グラムを記録した機械読み取り可能な記録媒体におい
    て、 レジスタ若しくはスタックメモリに格納された内容の情
    報をオブジェクトテーブルに登録するステップと、 そのオブジェクトテーブルに登録された内容と同じ内容
    を前記レジスタ若しくはスタックメモリに格納する命令
    が存在する場合に、その命令を削除してオブジェクトコ
    ードの最適化を図るステップと、 を含むことを特徴とするオブジェクトコード最適化プロ
    グラムを記録した機械読み取り可能な記録媒体。
  9. 【請求項9】 複数のレジスタを1つのレジスタとして
    データを書き込む特性を有する処理装置に用いられるオ
    ブジェクトコードの最適化を行うプログラムを記録した
    機械読み取り可能な記録媒体において、 レジスタ及びスタックメモリに格納された内容の情報を
    オブジェクトテーブルに各レジスタ若しくは各スタック
    メモリ毎に登録するステップと、 そのオブジェクトテーブルに登録された内容と同じ内容
    を前記各レジスタ若しくは各スタックメモリに格納する
    命令が存在する場合に、その命令を削除してオブジェク
    トコードの最適化を図るステップと、 を含むことを特徴とするオブジェクトコード最適化プロ
    グラムを記録した機械読み取り可能な記録媒体。
  10. 【請求項10】 オブジェクトコードの最適化を行うプ
    ログラムを記録した機械読み取り可能な記録媒体におい
    て、 スタックメモリから第1のレジスタに格納された内容の
    情報をオブジェクトテーブルに登録するステップと、 そのオブジェクトテーブルに登録された内容と同じ内容
    を前記スタックメモリから第2のレジスタに格納する命
    令が存在する場合に、前記第1のレジスタから前記第2
    のレジスタに格納する命令に変更してオブジェクトコー
    ドの最適化を図るステップと、 を含むことを特徴とするオブジェクトコード最適化プロ
    グラムを記録した機械読み取り可能な記録媒体。
  11. 【請求項11】 前記オブジェクトテーブルは、 前記オブジェクトコードが複数のブロックを有する場合
    には、先行ブロックのオブジェクトテーブルの最終値を
    初期値とすることを特徴とする請求項8乃至10記載の
    オブジェクトコード最適化プログラムを記録した機械読
    み取り可能な記録媒体。
  12. 【請求項12】 ソースコードを翻訳して機械読みとり
    可能な言語を生成するコンパイラにおいて、 構文解析処理を行い、その中間コードに含まれる変数を
    レジスタを割り付けるレジスタ割り付け手段と、 このレジスタ割り付け手段で割り付けられた中間コード
    の各命令について、レジスタに格納された内容の情報を
    オブジェクトテーブルに登録する手段と、 そのオブジェクトテーブルに登録された内容と同じ内容
    を前記レジスタに格納する命令が存在する場合に、その
    命令を削除してオブジェクトコードの最適化を図る手段
    と、 最適化を図ったオブジェクトコードから機械読み取り可
    能な言語を生成するコード生成手段と、 を具備することを特徴とするコンパイラ。
JP11278897A 1997-04-30 1997-04-30 オブジェクトコード最適化装置、オブジェクトコード最適化方法、オブジェクトコード最適化プログラムを記録した機械読み取り可能な記録媒体、及び、コンパイラ Pending JPH10301791A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11278897A JPH10301791A (ja) 1997-04-30 1997-04-30 オブジェクトコード最適化装置、オブジェクトコード最適化方法、オブジェクトコード最適化プログラムを記録した機械読み取り可能な記録媒体、及び、コンパイラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11278897A JPH10301791A (ja) 1997-04-30 1997-04-30 オブジェクトコード最適化装置、オブジェクトコード最適化方法、オブジェクトコード最適化プログラムを記録した機械読み取り可能な記録媒体、及び、コンパイラ

Publications (1)

Publication Number Publication Date
JPH10301791A true JPH10301791A (ja) 1998-11-13

Family

ID=14595537

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11278897A Pending JPH10301791A (ja) 1997-04-30 1997-04-30 オブジェクトコード最適化装置、オブジェクトコード最適化方法、オブジェクトコード最適化プログラムを記録した機械読み取り可能な記録媒体、及び、コンパイラ

Country Status (1)

Country Link
JP (1) JPH10301791A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007141246A (ja) * 2005-11-22 2007-06-07 Intel Corp ベクトルマスク設定技術

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007141246A (ja) * 2005-11-22 2007-06-07 Intel Corp ベクトルマスク設定技術
JP2012142021A (ja) * 2005-11-22 2012-07-26 Intel Corp ベクトルマスク設定技術
US9436468B2 (en) 2005-11-22 2016-09-06 Intel Corporation Technique for setting a vector mask

Similar Documents

Publication Publication Date Title
US8037461B2 (en) Program code conversion
US8832672B2 (en) Ensuring register availability for dynamic binary optimization
US6023583A (en) Optimized variable allocation method, optimized variable allocation system and computer-readable memory containing an optimized variable allocation program
JP2838855B2 (ja) コンパイラの最適化方法
JP5118745B2 (ja) メモリアクセス命令のベクトル化
US6925639B2 (en) Method and system for register allocation
JP3606561B2 (ja) 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造
JP2000347876A (ja) スタック・スロット割当て方法および装置
US6684394B1 (en) Relocation format for linking with relocation instructions containing operations for combining section data
JPS63132338A (ja) コード生成方法
US7979853B2 (en) Compiler device, method, program and recording medium
US8869109B2 (en) Disassembling an executable binary
US6704928B1 (en) Relocation format for linking
JP2013214832A (ja) 圧縮及び伸長システム、圧縮装置、伸長装置、圧縮及び伸長方法、圧縮プログラム及び伸長プログラム
US7356812B2 (en) Passing parameters by implicit reference
US7032215B2 (en) Method and system for type demotion of expressions and variables by bitwise constant propagation
US8645758B2 (en) Determining page faulting behavior of a memory operation
JPH10301791A (ja) オブジェクトコード最適化装置、オブジェクトコード最適化方法、オブジェクトコード最適化プログラムを記録した機械読み取り可能な記録媒体、及び、コンパイラ
US20040172624A1 (en) Compiler apparatus and method for determining locations for data in memory area
JP3264901B2 (ja) コンパイル装置及びコンパイル方法
JP2004139369A (ja) 定数アドレス領域を指示するポインタ解析方法
JP2005228047A (ja) 言語処理装置及び言語処理プログラム
JP2000155689A (ja) ループ展開方法及び装置
JPH0689187A (ja) インライン展開最適化方法
JPH05197565A (ja) 定数領域割り付け処理方法

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040406