JPH11203144A - コンパイラ及びその最適化方法 - Google Patents

コンパイラ及びその最適化方法

Info

Publication number
JPH11203144A
JPH11203144A JP10003760A JP376098A JPH11203144A JP H11203144 A JPH11203144 A JP H11203144A JP 10003760 A JP10003760 A JP 10003760A JP 376098 A JP376098 A JP 376098A JP H11203144 A JPH11203144 A JP H11203144A
Authority
JP
Japan
Prior art keywords
function
register
name
management table
call
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
JP10003760A
Other languages
English (en)
Other versions
JP3278603B2 (ja
Inventor
Hideji Nimata
秀治 二俣
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 IC Microcomputer Systems Co Ltd
Original Assignee
NEC IC Microcomputer Systems 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 NEC IC Microcomputer Systems Co Ltd filed Critical NEC IC Microcomputer Systems Co Ltd
Priority to JP00376098A priority Critical patent/JP3278603B2/ja
Priority to KR1019990000383A priority patent/KR100305097B1/ko
Priority to EP99100449A priority patent/EP0929034A3/en
Priority to US09/229,033 priority patent/US6282705B1/en
Publication of JPH11203144A publication Critical patent/JPH11203144A/ja
Application granted granted Critical
Publication of JP3278603B2 publication Critical patent/JP3278603B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

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)【要約】 【課題】割込関数のコード出力時に不要レジスタの退避
・復帰処理を削減することにより処理の効率化を図る。 【解決手段】呼出関数情報と使用レジスタ情報を登録す
る関数毎使用レジスタ管理テーブル5Aと、中間コード
10を解析し関数毎の呼出関数名とその使用レジスタを
関数毎使用レジスタ管理テーブル5Aに登録する関数毎
使用レジスタ抽出部6と、関数毎使用レジスタ管理テー
ブル5Aを参照して割込関数から呼び出す関数で使用す
るレジスタを集計して割込関数の使用レジスタとして関
数毎使用レジスタ管理テーブル5Aに登録し直す関数毎
使用レジスタ集計部7と、中間コード10及び前記関数
毎使用レジスタ管理テーブル5Aを参照して割込関数の
使用レジスタの退避・復帰コードをアセンブラプログラ
ムファイル9に出力する出力部8Aとを備える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコンパイラ及びその
最適化方法に関し、特に割込処理を軽減するコンパイラ
及びその最適化方法に関する。
【0002】
【従来の技術】アーキテクチャに割込処理機能を有する
デバイスを対象としたコンパイラにおいては、コンパイ
ル時に上記割込処理機能に対する対応が必須である。こ
のため、一般に、デバイスの割込発生時に分岐するルー
チンすなわち割込関数をソースプログラムに記述可能と
することにより上記割込処理機能に対する対応を実現し
ている。
【0003】割込関数は、ソースプログラムの実行中に
不定期に分岐するため、分岐前に使用していたレジスタ
の内容の保護のため、割込関数の開始時に使用可能性の
あるレジスタの内容を全て退避し、割込関数の終了時に
は、退避したレジスタの内容を復帰する必要がある。
【0004】特開平2−257224号公報(文献1)
記載の連携編集処理装置は、関数の再帰呼出しがない場
合に限り、関数呼出し元で使用しているレジスタ(呼び
出し元レジスタ)と関数呼び出し先で使用するレジスタ
(呼び出し先レジスタ)が一致しない場合に、このよう
なレジスタの冗長な退避・復帰命令を削除することによ
り、コードサイズの削減及びソースプログラムの実行時
間を短縮する編集処理の最適化方法を用いている。
【0005】この編集処理の最適化方法は、通常の関数
呼び出しにおいて、呼び出し元レジスタの内容を呼び出
し先で破壊しないために、関数呼出し命令の前に呼び出
し元レジスタの退避命令を出力し、関数呼出し命令の後
に退避したレジスタの復帰命令を出力するコードを入力
する連係編集処理装置において、呼出関数情報と、使用
レジスタ情報を登録するテーブルと、このテーブルに情
報を出力する手段と、これらのテーブルを参照して、呼
び出し元の関数で退避・復帰しているレジスタのうち、
呼び出し先で使用していないレジスタの退避・復帰コー
ドを削除する手段を追加することにより、不要なレジス
タの退避・復帰コードを削減するものである。
【0006】文献1記載の編集処理の最適化方法と同様
の手法により不要なレジスタの退避・復帰コードを削減
する従来のコンパイラをブロックで示す図7を参照する
と、この従来のコンパイラは、ソースプログラム11を
読み込み字句解析を行う入力部1と、字句配列から構文
を解析し構文木を作成する構文解析部2と、構文木を最
適化する最適化部3と、最適化した構文木より中間コー
ド10を生成するコード生成部4と、呼出関数情報と使
用レジスタ情報を登録する関数毎使用レジスタ管理テー
ブル5と、中間コード10を解析し関数毎の呼出関数名
と使用レジスタを関数毎使用レジスタ管理テーブル5に
登録する関数毎使用レジスタ抽出部6と、呼び出し先で
不使用のレジスタの退避・復帰コードを削除してアセン
ブラプログラムファイル9に出力する出力部8とを備え
る。
【0007】図7を参照すると、コンパイラにおいて、
文献1記載の編集処理の最適化方法と同様の手法により
不要なレジスタの退避・復帰コードを削減する従来のコ
ンパイラ最適化方法を実施するには、一般的なコンパイ
ラのコード生成部4の後に、関数毎使用レジスタ管理テ
ーブル5と、このテーブルに情報を出力する関数毎使用
レジスタ抽出部6と、関数毎使用レジスタ管理テーブル
5を参照して呼び出し元の関数で退避・復帰しているレ
ジスタのうち、呼び出し先で不使用のレジスタの退避・
復帰コードを削除する出力部8を追加すれば良いこと
は、容易に連想できる。
【0008】次に、図7及びソースプログラム11の一
例を示す図5を参照して従来のコンパイラの動作である
従来のコンパイラの最適化方法について説明すると、ソ
ースプログラム11において、コード生成部4が出力す
る中間コード10に対応する部分に、関数f6中の関数
f5の呼出しコードの前に関数f6の使用レジスタg,
hの退避コードがあり、関数f5の呼出しコードの後に
関数f6の使用レジスタg,hの復帰コードがある。
【0009】関数毎使用レジスタ抽出部6は、中間コー
ド10を入力し、関数f6の定義を認識し、関数f6か
ら呼出される関数名f5と、関数f6の使用レジスタ名
g,hを関数毎使用レジスタ管理テーブル5に登録し、
次に、関数f5の定義を認識し、関数f5の使用レジス
タ名fを関数毎使用レジスタ管理テーブル5に登録す
る。
【0010】次に、出力部8は、関数毎使用レジスタ管
理テーブル5を参照し、関数f6の使用レジスタg,h
と関数f5の使用レジスタfでは、重複するレジスタ名
がないため、関数f5の呼び出し命令の前のレジスタ
g,hを退避するコード、及び関数f5の呼び出し命令
の後のレジスタg,hを復帰するコードを削除してアセ
ンブラプログラムファイル9を出力する。しかし、この
従来のコンパイラの最適化方法には、割込関数のよう
に、プログラムの任意のアドレスから分岐する関数で
は、レジスタの退避・復帰コードは削減できないという
問題点があった。
【0011】その理由は、呼び出し元の関数が存在しな
い割込関数では、デバイスの割込発生時に使用している
レジスタの内容を破壊しないために、呼び出し先関数に
相当する割込関数の先頭でレジスタの退避命令を出力
し、割込関数の最後でレジスタの復帰命令を出力する必
要があり、これらの退避・復帰コードの削減について
は、関数の呼び出し元の使用レジスタ情報が必要である
ため、不要に退避・復帰しているレジスタを検出するこ
とができないためである。
【0012】図5及び図7を再度参照すると、関数f6
は割込関数であるため、レジスタの退避及び復帰は関数
f6の先頭及び最後で行い、かつ、不定期な割込発生時
に使用中のレジスタは不明であるため、関数f6の先頭
では全てのレジスタを退避し、最後では全てのレジスタ
を復帰する。
【0013】従来の出力部8は、呼び出し元レジスタ退
避・復帰コードのうち、関数毎使用レジスタ管理テーブ
ル5において、呼び出し先で使用していないレジスタの
退避・復帰コードを削除する手段であるため、関数f6
の先頭の全てのレジスタを退避するコード、及び関数f
6の最後の全てのレジスタを復帰するコードは、削減で
きない。
【0014】
【発明が解決しようとする課題】上述した従来のコンパ
イラ及びその最適化方法は、割込関数のようにプログラ
ムの任意のアドレスから分岐する関数では、呼び出し元
の関数が存在しないので、デバイスの割込発生時に使用
中のレジスタの内容を破壊しないために、呼び出し先の
関数に相当する割込関数の先頭及び最後の各々でレジス
タの退避命令及び復帰命令をそれぞれ出力する必要があ
り、これらの退避・復帰コードの削減のためには、存在
しない呼び出し元の関数の使用レジスタ情報を必要とす
ることから、不要に退避・復帰しているレジスタを検出
できないため、レジスタの退避・復帰コードは削減でき
ないという欠点があった。
【0015】本発明の目的は、以上の欠点を解決し、割
込関数のコード出力時に不要レジスタの退避・復帰を削
減することにより処理の効率化を図ったコンパイラ及び
その最適化方法を提供することにある。
【0016】
【課題を解決するための手段】本発明のコンパイラは、
アーキテクチャに割込処理機能を有するデバイスを対象
とするコンパイラにおいて、ソースプログラムを読み込
み字句解析を行う入力部と、字句配列から構文を解析し
構文木を作成する構文解析部と、前記構文木を最適化す
る最適化部と、最適化した前記構文木より中間コードを
生成するコード生成部と、呼出関数情報と使用レジスタ
情報を登録する関数毎使用レジスタ管理テーブルと、前
記中間コードを解析し関数毎の呼出関数名とその使用レ
ジスタを前記関数毎使用レジスタ管理テーブルに登録す
る関数毎使用レジスタ抽出部と、前記関数毎使用レジス
タ管理テーブルを参照して割込関数から呼び出す関数で
使用するレジスタを集計して前記割込関数の使用レジス
タとして前記関数毎使用レジスタ管理テーブルに登録し
直す関数毎使用レジスタ集計部と、前記中間コード及び
前記関数毎使用レジスタ管理テーブルを参照して前記割
込関数の使用レジスタの退避・復帰コードをアセンブラ
プログラムファイルに出力する出力部とを備えて構成さ
れている。
【0017】本発明のコンパイラの最適化方法は、アー
キテクチャに割込処理機能を有するデバイスを対象とす
るコンパイラの最適化方法において、ソースプログラム
を読み込み字句解析を行う入力ステップと、字句配列か
ら構文を解析し構文木を作成する構文解析ステップと、
前記構文木を最適化する最適化ステップと、最適化した
前記構文木より中間コードを生成するコード生成ステッ
プと、前記中間コードを解析し関数毎の呼出関数名とそ
の使用レジスタを抽出し呼出関数情報と使用レジスタ情
報とを登録する関数毎使用レジスタ管理テーブルに登録
処理する関数毎使用レジスタ抽出ステップと、前記関数
毎使用レジスタ管理テーブルを参照して割込関数から呼
び出す関数で使用するレジスタを集計して前記割込関数
の使用レジスタとして前記関数毎使用レジスタ管理テー
ブルに登録し直す関数毎使用レジスタ集計ステップと、
前記中間コード及び前記関数毎使用レジスタ管理テーブ
ルを参照して前記割込関数の使用レジスタの退避・復帰
コードをアセンブラプログラムファイルに出力する出力
ステップとを有することを特徴とするものである。
【0018】
【発明の実施の形態】次に、本発明の実施の形態を図7
と共通の構成要素には共通の参照文字/数字を付して同
様にブロックで示す図1を参照すると、この図に示す本
実施の形態のコンパイラは、従来と共通のソースプログ
ラム11を読み込み字句解析を行う入力部1と、字句配
列から構文を解析し構文木を作成する構文解析部2と、
構文木を最適化する最適化部3と、最適化した構文木よ
り中間コード10を生成するコード生成部4と、中間コ
ード10を解析し関数毎の呼出関数名とその使用レジス
タを関数毎使用レジスタ管理テーブル5に登録する関数
毎使用レジスタ抽出部6とに加えて、関数毎使用レジス
タ管理テーブル5の代わりに呼出関数情報と使用レジス
タ情報を登録する関数毎使用レジスタ管理テーブル5A
と、関数毎使用レジスタ管理テーブル5Aを参照して割
込関数から呼び出す関数で使用するレジスタを集計して
割込関数の使用レジスタとして関数毎使用レジスタ管理
テーブル5Aに登録し直す関数毎使用レジスタ集計部7
と、出力部8の代わりに中間コード10及び関数毎使用
レジスタ管理テーブル5Aを参照して割込関数の使用レ
ジスタの退避・復帰コードをアセンブラプログラムファ
イル9に出力する出力部8Aを備える。
【0019】関数毎使用レジスタ管理テーブル5Aは、
関数名を登録する関数名欄51と、使用レジスタ名を登
録する使用レジスタ欄52と、呼出関数名を登録する呼
出関数欄53を備えている。
【0020】次に、図1及び本実施の形態の処理をフロ
ーチャートで示す図2を参照して本実施の形態の動作に
ついて説明すると、まず、ステップS1で、ソースプロ
グラム11を入力した入力部1は、入力したソースプロ
グラム11の字句を解析し、字句配列を作成し、構文解
析部2に供給する。
【0021】次に、ステップS2で、構文解析部2は、
入力部1で作成した字句配列から構文を解析し、構文木
を作成し、最適化部3に供給する。
【0022】次に、ステップS3で、最適化部3は、構
文解析部2で作成した構文木を最適化し、コード生成部
4に供給する。
【0023】次に、ステップS4で、コード生成部4
は、最適化部3で最適化した構文木より、中間コード1
0を生成する。
【0024】次に、ステップS6で、関数毎使用レジス
タ抽出部6は、中間コード10を解析し、関数名とその
使用レジスタ名と呼出関数名を関数毎使用レジスタ管理
テーブル5Aに登録する。
【0025】ステップS6,S7の詳細をフローチャー
トで示す図3及びソースプログラム11の一例を示す図
5を併せて参照すると、関数毎使用レジスタ抽出部6
は、このソースプログラム11において、関数f1の定
義を関数定義認識ステップS61によって認識すると、
この関数名f1を関数毎使用レジスタ管理テーブル5A
の関数名欄51に登録し、使用レジスタ抽出ステップS
62によってレジスタ名a,bを関数毎使用レジスタ管
理テーブル5Aの使用レジスタ欄52に登録し、呼出関
数抽出ステップS63によって関数名f2,f3を呼出
関数欄53に登録する。
【0026】次に、ファイル終端判定ステップS64に
よってファイルの終端ではないと判定すると、関数定義
認識ステップS61に戻り関数f2の定義を認識し、関
数名f2を関数毎使用レジスタ管理テーブル5Aの関数
名欄51に登録し、使用レジスタ抽出ステップS62に
よってレジスタ名cを関数毎使用レジスタ管理テーブル
5Aの使用レジスタ欄52に登録し、呼出関数抽出ステ
ップS63によって関数名f4を呼出関数欄53に登録
する。
【0027】さらに、ファイルの終端ではないと判定す
ると(ステップS64)、関数定義認識ステップS61
に戻り、関数f3の定義の認識、関数名f3の関数毎使
用レジスタ管理テーブル5Aの関数名欄51への登録を
行い、レジスタ名dを関数毎使用レジスタ管理テーブル
5Aの使用レジスタ欄52に登録し(ステップS6
2)、関数名f5,f2を呼出関数欄53に登録する
(ステップS63)。
【0028】さらに、再再度ファイルの終端ではないと
判定すると、関数定義認識ステップS61に戻り、関数
f4の定義を認識すると、同様の各ステップの処理に
て、関数名f4を関数毎使用レジスタ管理テーブル5A
の関数名欄51に登録し、レジスタ名eを関数毎使用レ
ジスタ管理テーブル5Aの使用レジスタ欄52に登録
し、関数名f3を呼出関数欄53に登録する。
【0029】さらに、再々再度ファイルの終端ではない
と判定すると、関数定義認識ステップS61に戻り、関
数f5の定義を認識すると、同様の各ステップの処理に
て、関数名f5を関数毎使用レジスタ管理テーブル5A
の関数名欄51に登録し、レジスタ名fを関数毎使用レ
ジスタ管理テーブル5Aの使用レジスタ欄52に登録す
る。関数f5は関数呼び出しをしていないので、呼出関
数抽出ステップS63においては何も行わず、呼出関数
欄53には何も登録しない。
【0030】さらに、ファイルの終端ではないと判定す
ると、関数定義認識ステップS61に戻り、関数f6の
定義を認識すると、同様の各ステップの処理にて、関数
名f6を関数毎使用レジスタ管理テーブル5Aの関数名
欄51に登録し、レジスタ名g,hを関数毎使用レジス
タ管理テーブル5Aの使用レジスタ欄52に登録し、関
数名f5を呼出関数欄53に登録する。
【0031】最後に、ステップS64によってファイル
の終端であると判定すると、関数毎使用レジスタ抽出部
6の処理を終了する。以上の処理結果作成された関数毎
使用レジスタ管理テーブル5Aを図6(A)に示す。
【0032】次に、ステップS7で、関数毎使用レジス
タ集計部7は、割込関数の関数毎使用レジスタ管理テー
ブル5Aの使用レジスタ欄52に、割込関数から呼び出
している全ての関数及びそれらの関数が呼び出している
全ての関数の関数毎使用レジスタ管理テーブル5Aの使
用レジスタ欄52のレジスタ名を併合して登録する。
【0033】図3を再度参照すると、テーブルの情報登
録判定ステップS71により、関数毎使用レジスタ管理
テーブル5Aの一列目に情報を登録していると判定する
と、一列読込ステップS72で関数毎使用レジスタ管理
テーブル5Aの関数名f1の一列を読み込み、次いで呼
出関数認識ステップS73により呼出関数欄53に登録
した関数名f2を認識すると、呼出関数削除ステップS
74によりその呼出関数欄53から関数名f2を削除
し、次いで関数毎使用レジスタ集計手続きステップS7
5を呼び出す。
【0034】関数毎使用レジスタ集計手続きステップS
75において、まず、一列読込ステップS76で関数毎
使用レジスタ管理テーブル5Aの関数名f2の一列を読
み込み、次いで呼出関数認識ステップS77により呼出
関数欄53に登録した関数名f4を認識すると、呼出関
数削除ステップS78によりその呼出関数欄53から関
数名f4を削除し、関数毎使用レジスタ集計手続きステ
ップS75に戻る。
【0035】再び、関数毎使用レジスタ管理テーブル5
Aの関数名f4の一列を読み込み(ステップS76)、
次いで呼出関数欄53に登録した関数名f3を認識する
と(ステップS77)、その呼出関数欄53から関数名
f3を削除し(ステップS78)、関数毎使用レジスタ
集計手続きステップS75に再度戻る。
【0036】同様に、一列読込ステップS76で関数毎
使用レジスタ管理テーブル5Aの関数名f3の一列を読
み込み、次いで呼出関数欄53に登録した関数名f5を
認識すると、その呼出関数欄53から関数名f5を削除
し、ステップS75に再度戻る。
【0037】同様に、関数毎使用レジスタ管理テーブル
5Aの関数名f5の一列を読み込み、呼出関数欄53に
関数名の登録がないことを認識すると(ステップS7
7)、使用レジスタマージステップS79により、関数
f5の使用レジスタfを、関数f3の使用レジスタ欄5
2に併合し、関数f5の関数毎使用レジスタ集計手続き
ステップS75を終了する。
【0038】次に、関数f3のステップS75に戻り、
呼出関数欄53に登録した次の関数名f2を認識すると
(ステップS77)、その呼出関数欄53から関数名f
2を削除し(ステップS78)、関数毎使用レジスタ集
計手続きステップS75に再入する。
【0039】再び、関数毎使用レジスタ管理テーブル5
Aの関数名f2の一列を読み込み(ステップS76)、
呼出関数欄53に関数名の登録がないことを認識すると
(ステップS77)、使用レジスタマージステップS7
9により、関数f2の使用レジスタcを、関数f3の使
用レジスタ欄52に併合し、関数f2の関数毎使用レジ
スタ集計手続きステップS75を終了する。
【0040】次の関数f3のステップS75に戻り、同
様の各ステップの処理で、呼出関数欄53に次の関数名
の登録がないことを認識すると、関数f3の使用レジス
タd,f,cを、関数f4の使用レジスタ欄52に併合
し(ステップS79)、関数f3の関数毎使用レジスタ
集計手続きステップS75を終了する。
【0041】次の関数f4のステップS75に戻り、同
様の各ステップの処理で、呼出関数欄53に次の関数名
の登録がないことを認識すると、関数f4の使用レジス
タe,d,f,c を、関数f2の使用レジスタ欄52
に併合し(ステップS79)、関数f4のステップS7
5を終了する。
【0042】次の関数f2のステップS75に戻り、同
様の各ステップの処理で、呼出関数欄53に次の関数名
の登録がないことを認識すると、関数f2の使用レジス
タc,e,d,fを、関数f1の使用レジスタ欄52に
併合し、関数f2のステップS75を終了する。
【0043】次に、呼出関数認識ステップS73によ
り、呼出関数欄53に登録した次の関数名f3を認識す
ると、その呼出関数欄53から関数名f3を削除し(ス
テップS74)、次いでステップS75を呼び出す。
【0044】次の関数f3の関数毎使用レジスタ集計手
続きステップS75において、同様の各ステップの処理
で、まず、関数毎使用レジスタ管理テーブル5Aの関数
名f3の一列を読み込み(ステップS76)、次いで呼
出関数欄53に関数名の登録がないことを認識すると
(ステップS77)、関数f3の使用レジスタd,f,
cを、関数f1の使用レジスタ欄52に併合し、関数f
3のステップS75を終了する。
【0045】次に、呼出関数認識ステップS73に戻
り、このステップS73により呼出関数欄53に次の関
数名の登録がないことを認識すると、テーブルの情報登
録判定ステップS71に戻る。このステップS71で、
関数毎使用レジスタ管理テーブル5Aの次の列に情報を
登録していることを判定すると、一列読込ステップS7
2により関数毎使用レジスタ管理テーブル5Aの次の関
数名f2の一列を読み込み、次いでステップS73によ
り呼出関数欄53に関数名の登録がないことを認識する
と、再びテーブルの情報登録判定ステップS71に戻
る。
【0046】ステップS71により、関数毎使用レジス
タ管理テーブル5Aの次の列に情報を登録していること
を判定すると、同様に関数毎使用レジスタ管理テーブル
5Aの次の関数名f3の一列を読み込み(ステップS7
2)、呼出関数欄53に関数名の登録がないことを認識
すると(ステップS73)、再びステップS71に戻
る。
【0047】ステップS71により、関数毎使用レジス
タ管理テーブル5Aの次の列に情報を登録していること
を判定すると、関数毎使用レジスタ管理テーブル5Aの
次の関数名f4の一列を読み込み(ステップS72)、
呼出関数欄53に関数名の登録がないことを認識すると
(ステップS73)、再びステップS71に戻る。
【0048】ステップS71により、関数毎使用レジス
タ管理テーブル5Aの次の列に情報を登録していること
を判定すると、関数毎使用レジスタ管理テーブル5Aの
次の関数名f5の一列を読み込み(ステップS72)、
呼出関数欄53に関数名の登録がないことを認識すると
(ステップS73)、再びステップS71に戻る。
【0049】ステップS71により、関数毎使用レジス
タ管理テーブル5Aの次の列に情報を登録していること
を判定すると、関数毎使用レジスタ管理テーブル5Aの
次の関数名f6の一列を読み込み(ステップS72)、
呼出関数欄53に登録した関数名f5を認識すると(ス
テップS73)、その呼出関数欄53から関数名f5を
削除し、次の関数対応のステップS75を呼び出す。
【0050】ステップS75において、まず、関数毎使
用レジスタ管理テーブル5Aの関数名f5の一列を読み
込み(ステップS76)、次いで呼出関数欄53に関数
名の登録がないことを認識すると(ステップS77)、
関数f5の使用レジスタfを、関数f6の使用レジスタ
欄52に併合し(ステップS79)、この関数f5の関
数毎使用レジスタ集計手続きステップS75を終了す
る。
【0051】次に関数f6の関数毎使用レジスタ集計処
理に戻り、呼出関数認識ステップS73により呼出関数
欄53に次の関数名の登録がないことを認識し、関数毎
使用レジスタ管理テーブル5Aの次の列がないと判定す
ると(ステップS71)、関数毎使用レジスタ集計部7
の処理を終了する。以上の処理結果作成された関数毎使
用レジスタ管理テーブル5Aを図6(B)に示す。
【0052】次に、ステップS8で、出力部8におい
て、割込関数でのレジスタの退避・復帰コードを出力す
る際、関数毎使用レジスタ管理テーブル5Aの使用レジ
スタ欄52に登録したレジスタのみ退避・復帰するコー
ドを出力する。
【0053】ステップS8の詳細をフローチャートで示
す図4及び図5を併せて参照すると、ソースプログラム
11において、まず、割込関数判定ステップS81によ
り関数f1を割込関数であると判定すると、レジスタ退
避コード出力ステップS82において関数毎使用レジス
タ管理テーブル5Aの関数名f1の列を参照し、使用レ
ジスタ欄52のレジスタa,b,c,e,d,fを退避
するコードを出力する。
【0054】次いで関数本体出力ステップS83により
関数本体のコードを出力する。
【0055】レジスタ復帰コード出力ステップS84に
おいて関数毎使用レジスタ管理テーブル5Aの関数名f
1の列を参照し、使用レジスタ欄52のレジスタa,
b,c,e,d,fの復帰コードを出力する。
【0056】さらにファイルの終端判定ステップS85
により、ファイルの終端でないと判定すると、ファイル
の終端まで割込関数判定ステップS81からの処理を繰
り返す。
【0057】関数f6を割込関数であると判定すると、
レジスタ退避コード出力ステップS82において関数毎
使用レジスタ管理テーブル5Aの関数名f6の列を参照
し、使用レジスタ欄52のレジスタg,h,fの退避コ
ードを出力し、関数本体出力ステップS83により関数
本体のコードを出力し、レジスタ復帰コード出力ステッ
プS84において関数毎使用レジスタ管理テーブル5A
の関数名f6の列を参照し、使用レジスタ欄52のレジ
スタg,h,fの復帰コードを出力し、ファイルの終端
判定ステップS85により、ファイルの終端と判定し、
出力部8を終了する。
【0058】
【発明の効果】以上説明したように、本発明のコンパイ
ラ及びその最適化方法は、中間コードを解析し関数毎の
呼出関数名とその使用レジスタを関数毎使用レジスタ管
理テーブルに登録する関数毎使用レジスタ抽出部と、関
数毎使用レジスタ管理テーブルを参照して割込関数から
呼び出す関数で使用するレジスタを集計して割込関数の
使用レジスタとして上記関数毎使用レジスタ管理テーブ
ルに登録し直す関数毎使用レジスタ集計部と、上記中間
コード及び上記関数毎使用レジスタ管理テーブルを参照
して割込関数の使用レジスタの退避・復帰コードをアセ
ンブラプログラムファイルに出力する出力部とを備え、
割込関数から呼出される関数で使用するレジスタを調べ
ることにより、使用レジスタのみを退避・復帰させるこ
とが可能なため、割込関数で退避・復帰するレジスタを
必要最小限にすることにより、割込関数のコード・サイ
ズの削減及び実行時間を短縮することができるという効
果がある。
【図面の簡単な説明】
【図1】本発明のコンパイラの一実施の形態を示すブロ
ック図である。
【図2】本実施の形態のコンパイラの最適化方法におけ
る動作の一例を示すフローチャートである。
【図3】本実施の形態のコンパイラの最適化方法におけ
る動作の詳細を示すフローチャートである。
【図4】本実施の形態のコンパイラの最適化方法におけ
る動作の詳細を示すフローチャートである。
【図5】ソースプログラム11の一例を示す説明図であ
る。
【図6】関数毎使用レジスタ管理テーブルの内容の一例
を示す図である。
【図7】従来のコンパイラの最適化方法の一例を示すブ
ロック図である。
【符号の説明】
1 入力部 2 構文解析部 3 最適化部 4 コード生成部 5,5A 関数毎使用レジスタ管理テーブル 6 関数毎使用レジスタ抽出部 7 関数毎使用レジスタ集計部 8,8A 出力部 9 アセンブラプログラムファイル 10 中間コード 11 ソースプログラム

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 アーキテクチャに割込処理機能を有する
    デバイスを対象とするコンパイラにおいて、 ソースプログラムを読み込み字句解析を行う入力部と、 字句配列から構文を解析し構文木を作成する構文解析部
    と、 前記構文木を最適化する最適化部と、 最適化した前記構文木より中間コードを生成するコード
    生成部と、 呼出関数情報と使用レジスタ情報を登録する関数毎使用
    レジスタ管理テーブルと、 前記中間コードを解析し関数毎の呼出関数名とその使用
    レジスタを前記関数毎使用レジスタ管理テーブルに登録
    する関数毎使用レジスタ抽出部と、 前記関数毎使用レジスタ管理テーブルを参照して割込関
    数から呼び出す関数で使用するレジスタを集計して前記
    割込関数の使用レジスタとして前記関数毎使用レジスタ
    管理テーブルに登録し直す関数毎使用レジスタ集計部
    と、 前記中間コード及び前記関数毎使用レジスタ管理テーブ
    ルを参照して前記割込関数の使用レジスタの退避・復帰
    コードをアセンブラプログラムファイルに出力する出力
    部とを備えることを特徴とするコンパイラ。
  2. 【請求項2】 前記関数毎使用レジスタ管理テーブル
    が、関数名を登録する関数名欄と、使用レジスタ名を登
    録する使用レジスタ欄と、呼出関数名を登録する呼出関
    数欄とを備えることを特徴とする請求項1記載のコンパ
    イラ。
  3. 【請求項3】 アーキテクチャに割込処理機能を有する
    デバイスを対象とするコンパイラの最適化方法におい
    て、 ソースプログラムを読み込み字句解析を行う入力ステッ
    プと、 字句配列から構文を解析し構文木を作成する構文解析ス
    テップと、 前記構文木を最適化する最適化ステップと、 最適化した前記構文木より中間コードを生成するコード
    生成ステップと、 前記中間コードを解析し関数毎の呼出関数名とその使用
    レジスタを抽出し呼出関数情報と使用レジスタ情報とを
    登録する関数毎使用レジスタ管理テーブルに登録処理す
    る関数毎使用レジスタ抽出ステップと、 前記関数毎使用レジスタ管理テーブルを参照して割込関
    数から呼び出す関数で使用するレジスタを集計して前記
    割込関数の使用レジスタとして前記関数毎使用レジスタ
    管理テーブルに登録し直す関数毎使用レジスタ集計ステ
    ップと、 前記中間コード及び前記関数毎使用レジスタ管理テーブ
    ルを参照して前記割込関数の使用レジスタの退避・復帰
    コードをアセンブラプログラムファイルに出力する出力
    ステップとを有することを特徴とするコンパイラの最適
    化方法。
  4. 【請求項4】 前記関数毎使用レジスタ管理テーブル
    が、関数名を登録する関数名欄と、使用レジスタ名を登
    録する使用レジスタ欄と、呼出関数名を登録する呼出関
    数欄とを備えることを特徴とする請求項3記載のコンパ
    イラの最適化方法。
  5. 【請求項5】 前記関数毎使用レジスタ抽出ステップ
    が、与えられた関数の定義を認識しこの関数名を前記関
    数毎使用レジスタ管理テーブルの関数名欄に登録する関
    数定義認識ステップと、 前記関数の使用レジスタ名を前記関数毎使用レジスタ管
    理テーブルの使用レジスタ欄に登録する使用レジスタ抽
    出ステップと、 呼出関数名を前記関数毎使用レジスタ管理テーブルの呼
    出関数欄に登録する呼出関数抽出ステップとを有するこ
    とを特徴とする請求項3記載のコンパイラの最適化方
    法。
  6. 【請求項6】 前記関数毎使用レジスタ集計ステップ
    が、前記関数毎使用レジスタ管理テーブルの所定列目に
    情報の登録の有無を判定する情報登録判定ステップと、 前記所定列目の第1の関数名の一列分を読込む一列読込
    ステップと、 前記関数毎使用レジスタ管理テーブルの呼出関数欄に登
    録した第2の関数名を認識する呼出関数認識ステップ
    と、 前記呼出関数認識ステップで前記第2の関数名を認識し
    たとき前記呼出関数欄から前記この第2の関数名を削除
    する呼出関数削除ステップと、 関数毎の使用レジスタを集計する関数毎使用レジスタ集
    計手続きステップと、 前記呼出関数認識ステップで前記第2の関数名を認識し
    ないとき前記第2の関数名の使用レジスタを第3の関数
    名の使用レジスタと併合して前記関数毎使用レジスタ管
    理テーブルの使用レジスタ欄に登録する使用レジスタマ
    ージステップとを有することを特徴とする請求項3記載
    のコンパイラの最適化方法。
  7. 【請求項7】 前記出力ステップが、入力関数が割込関
    数であるか否かの判定をする割込関数判定ステップと、 前記入力関数が割込関数であるとき前記関数毎使用レジ
    スタ管理テーブルの前記入力関数の関数名の列を参照し
    前記関数毎使用レジスタ管理テーブルの使用レジスタ欄
    の前記入力関数の関数名のレジスタを退避するコードを
    出力するレジスタ退避コード出力ステップと、 前記入力関数の本体のコードを出力する関数本体出力ス
    テップと、 前記関数毎使用レジスタ管理テーブルの前記入力関数の
    関数名の列を参照し前記使用レジスタ欄の前記入力関数
    の関数名のレジスタの復帰コードを出力するレジスタ復
    帰コード出力ステップとを有することを特徴とする請求
    項3記載のコンパイラの最適化方法。
JP00376098A 1998-01-12 1998-01-12 コンパイル装置、コンパイラの最適化方法及びコンパイラの最適化手順を記録した記録媒体 Expired - Fee Related JP3278603B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP00376098A JP3278603B2 (ja) 1998-01-12 1998-01-12 コンパイル装置、コンパイラの最適化方法及びコンパイラの最適化手順を記録した記録媒体
KR1019990000383A KR100305097B1 (ko) 1998-01-12 1999-01-11 최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법
EP99100449A EP0929034A3 (en) 1998-01-12 1999-01-11 Compiler capable of reducing interrupt handling in optimization and its optimization method
US09/229,033 US6282705B1 (en) 1998-01-12 1999-01-12 Compiler capable of reducing interrupt handling in optimization and its optimization method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP00376098A JP3278603B2 (ja) 1998-01-12 1998-01-12 コンパイル装置、コンパイラの最適化方法及びコンパイラの最適化手順を記録した記録媒体

Publications (2)

Publication Number Publication Date
JPH11203144A true JPH11203144A (ja) 1999-07-30
JP3278603B2 JP3278603B2 (ja) 2002-04-30

Family

ID=11566144

Family Applications (1)

Application Number Title Priority Date Filing Date
JP00376098A Expired - Fee Related JP3278603B2 (ja) 1998-01-12 1998-01-12 コンパイル装置、コンパイラの最適化方法及びコンパイラの最適化手順を記録した記録媒体

Country Status (4)

Country Link
US (1) US6282705B1 (ja)
EP (1) EP0929034A3 (ja)
JP (1) JP3278603B2 (ja)
KR (1) KR100305097B1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007304926A (ja) * 2006-05-12 2007-11-22 Matsushita Electric Ind Co Ltd 情報処理方法および命令生成方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE522988C2 (sv) * 2000-05-16 2004-03-23 Eurocity Software Ab Förfarande, datorprogramprodukt och datorprogramelement för realtidsöversättning av användargränssnitt i en godtycklig applikation
JP2002024029A (ja) * 2000-07-11 2002-01-25 Toshiba Corp コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
US6966055B2 (en) * 2001-03-02 2005-11-15 International Business Machines Corporation Optimizing post-link code
US20070067756A1 (en) * 2005-09-20 2007-03-22 Trinity Millennium Group, Inc. System and method for enterprise software portfolio modernization
US8615736B2 (en) * 2006-12-08 2013-12-24 Oracle America, Inc. Module facility for JAVASCRIPT language
US8832672B2 (en) 2011-01-28 2014-09-09 International Business Machines Corporation Ensuring register availability for dynamic binary optimization
US9767004B2 (en) * 2014-06-16 2017-09-19 Symantec Corporation Dynamic call tracking method based on CPU interrupt instructions to improve disassembly quality of indirect calls

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5182811A (en) * 1987-10-02 1993-01-26 Mitsubishi Denki Kabushiki Kaisha Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt
JPH02257224A (ja) 1989-03-29 1990-10-18 Nec Corp 連係編集処理装置
JP2591212B2 (ja) 1990-01-24 1997-03-19 松下電器産業株式会社 高速割込み処理装置
EP0621535B1 (en) * 1993-04-23 2000-03-15 Advanced Micro Devices, Inc. Interrupt handling
JPH0877021A (ja) * 1994-09-01 1996-03-22 Fujitsu Ltd 割込処理装置および方法
JPH0962512A (ja) 1995-08-23 1997-03-07 Toshiba Corp 低級言語から高級言語への記述言語変換機能を有するプログラム変換装置及び方法
JPH09134292A (ja) 1995-11-10 1997-05-20 Hitachi Ltd 割り込み制御方法
US6061710A (en) * 1997-10-29 2000-05-09 International Business Machines Corporation Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US6085278A (en) * 1998-06-02 2000-07-04 Adaptec, Inc. Communications interface adapter for a computer system including posting of system interrupt status
US6205508B1 (en) * 1999-02-16 2001-03-20 Advanced Micro Devices, Inc. Method for distributing interrupts in a multi-processor system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007304926A (ja) * 2006-05-12 2007-11-22 Matsushita Electric Ind Co Ltd 情報処理方法および命令生成方法

Also Published As

Publication number Publication date
EP0929034A3 (en) 2003-04-23
JP3278603B2 (ja) 2002-04-30
EP0929034A2 (en) 1999-07-14
US6282705B1 (en) 2001-08-28
KR100305097B1 (ko) 2001-09-26
KR19990067823A (ko) 1999-08-25

Similar Documents

Publication Publication Date Title
US20040049768A1 (en) Method and program for compiling processing, and computer-readable medium recoding the program thereof
CN108549535B (zh) 一种基于文件依赖关系的高效程序解析方法和系统
JP2004164163A (ja) Simd命令シーケンス生成方法および装置ならびにsimd命令シーケンス生成用プログラム
JPH11203144A (ja) コンパイラ及びその最適化方法
JPH10301790A (ja) アセンブル処理方式
CN111596970B (zh) 动态库延迟加载方法、装置、设备和存储介质
CN107315599B (zh) 图形库提取方法及装置
JP3606654B2 (ja) コンパイラ装置
CN101256532A (zh) 一种嵌入式系统中变量实时查看的方法
CN113050948A (zh) 动态库优化方法、装置、设备及存储介质
CN116541280B (zh) 一种基于神经网络的模糊测试用例生成方法
CN112860262B (zh) 一种代码解析的方法、装置、电子设备及存储介质
US20110022501A1 (en) Service change component generation system, method and recording medium
JP3003459B2 (ja) プログラム作成支援装置
JPH08263300A (ja) インライン展開方式
KR100290623B1 (ko) 데이터베이스의 데이터 제어방법
JP2001125793A (ja) コンパイラシステム及びコンパイル方法並びに記録媒体
JP2007265095A (ja) ソースプログラム検証プログラム
JP2002073347A (ja) 例外処理方法及びコンパイラ
JP3714201B2 (ja) コール命令並び替え方法と装置並びにプログラム
JPH11272473A (ja) プログラム言語処理装置のコード最適化方式
JPH07334399A (ja) 固定長レコード向けコード変換方式
JP2679685B2 (ja) コアファイル生成方式
JP2005285055A (ja) オブジェクト指向言語におけるプログラム生成方法
JPH08249193A (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: 20020122

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees