JPH06324882A - コンパイラ装置 - Google Patents

コンパイラ装置

Info

Publication number
JPH06324882A
JPH06324882A JP11350093A JP11350093A JPH06324882A JP H06324882 A JPH06324882 A JP H06324882A JP 11350093 A JP11350093 A JP 11350093A JP 11350093 A JP11350093 A JP 11350093A JP H06324882 A JPH06324882 A JP H06324882A
Authority
JP
Japan
Prior art keywords
register
program
intermediate language
information
sequence
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.)
Withdrawn
Application number
JP11350093A
Other languages
English (en)
Inventor
Yaeko Ikuma
八重子 伊熊
Masahiro Takeda
昌弘 竹田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP11350093A priority Critical patent/JPH06324882A/ja
Publication of JPH06324882A publication Critical patent/JPH06324882A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 計算機のコンパイラの処理に関し、目的プロ
グラムにおける所要レジスタ数を減少できるようにした
コンパイラ装置を目的とする。 【構成】 解析部1は原始プログラムを解析して中間言
語の列4に変換し、中間言語間のアクセス関係情報5を
生成し、レジスタ管理部2は、各該中間言語ごとに、原
型プログラム6上で使用されるレジスタについて、当該
原型プログラムの最初から所定のステップまでの間に不
使用になる該レジスタを複数用途可能レジスタとして示
すレジスタ使用状態情報7を有し、順次各該中間言語に
ついて、割り当てたレジスタが該複数用途可能レジスタ
であって、他の中間言語との関係を有しない場合には、
当該レジスタがレジスタ使用状態情報7により不使用と
なる期間に、該レジスタを優先して他の用途に再割当し
てレジスタ割当情報8を生成し、オブジェクト生成部3
はそれに従って、該原型プログラムのレジスタを決定す
るように構成する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は計算機の原始プログラム
を目的プログラムに翻訳する処理において、実行効率等
の良い目的プログラムとなるように、レジスタ割当を改
善したコンパイラ装置に関する。
【0002】
【従来の技術と発明が解決しようとする課題】原始プロ
グラムを、いわゆるオブジェクト即ち目的プログラムに
翻訳する処理において、原始プログラムを解析して、先
ず解析結果に従い中間言語の列に変換し、各種中間言語
ごとに定まる目的プログラムの原型プログラムに従っ
て、その中間言語の列を目的プログラムに展開する方法
はよく知られている。
【0003】一般に、原始プログラムの1命令文は1又
は複数の中間言語からなる中間言語の列に変換され、各
中間言語は更に1又は複数の機械語命令からなるプログ
ラムに展開される。
【0004】公知のように、機械語命令は一般に、処理
装置に備わるレジスタ又はメモリ上のデータをオペラン
ドとして各種の演算や制御を行うようにされ、目的プロ
グラムへの展開においては、前記原型プログラムの各機
械語命令ごとに、オペランドアドレスとするためのレジ
スタ名やメモリアドレスを、各命令に設定することが必
要である。
【0005】そこで、中間言語を展開する前に原型プロ
グラムを参照して、各中間言語ごとにレジスタの割当を
行う。即ち、原型プログラムを概念的に示すと、図2
(a)に例示するように各命令を示すと共に、そのオペラ
ンドの異同関係を示している。又オペランドと中間言語
に表されるデータとの対応等の情報が必要であるが、こ
こでは省略する。
【0006】なお、ここでレジスタは中間言語間のデー
タの受渡しにも使用されるから、そのような用途のレジ
スタについては、前の中間言語に割り当てたレジスタを
受け継ぐ必要があり、そのために原始プログラムを中間
言語の列に変換するときに、中間言語間における同じデ
ータに対するアクセスの関係を調べて、アクセス関係情
報として準備する。
【0007】各中間言語のレジスタの割当では、それま
での中間言語のレジスタ割当結果とアクセス関係情報を
参照して、必要なレジスタを受け継ぐと共に、その他の
レジスタについては原型プログラムを参照して、異なる
用途ごとにそれぞれ必要な種類の空きレジスタを割り当
てる。
【0008】割り当てたレジスタについては、後の中間
言語にその内容を渡すものと、当中間言語内のみで使用
を終わってよいものがあり、そのようなレジスタ割当結
果を次の中間言語のレジスタ割当処理に渡す。
【0009】例えば、図2(a)の原型プログラムについ
て、「インデクスレジスタ1」にはレジスタ「DI」を
割り当て、「レジスタ2」にはアクセス関係情報を参照
して、必要なインデクス値を既に保持しているレジスタ
「AX」を割り当て、「レジスタ3」には別の空きレジ
スタ「DX」を割り当て、この割当に従って中間言語を
図2(b)のように展開することになる。なお、オペラン
ドメモリアドレスの部分の処理については説明を省略す
る。
【0010】以上のようにして、レジスタ割当を行おう
とした場合に、必要な空きレジスタが得られなかった場
合には、他の中間言語で割当済のレジスタから選び、そ
のレジスタを使用する前に、その内容を一旦メモリに退
避し、中間言語の終わりで元の内容に復元するようなプ
ログラムを追加することが必要になる。
【0011】従って、レジスタの割当を適切に行わない
と、目的プログラムの多数の個所に前記のようなレジス
タの退避、復元処理が挿入され、その結果当然目的プロ
グラムの大きさも実行時間も増大させて、いわゆる目的
プログラムの効率を悪化させる。
【0012】本発明は、中間言語内で再割当の可能性の
あるレジスタを識別する情報を各中間言語に設け、可能
な場合には再割当を行って、所要レジスタ数を減少でき
るようにしたコンパイラ装置を目的とする。
【0013】
【課題を解決するための手段】図1は、本発明の構成を
示すブロック図である。図はコンパイラ装置の構成であ
って、所定のプログラミング言語で記述された原始プロ
グラムを、中間言語の列に変換し、各該中間言語に対応
して定まる機械語命令の列を示す原型プログラムに従っ
て、該中間言語の列を目的プログラムに翻訳する装置
で、解析部1と、レジスタ管理部2と、オブジェクト生
成部3とを有する。
【0014】解析部1は該原始プログラムを解析して、
該中間言語の列4に変換し、中間言語の列4の該中間言
語間のデータへのアクセス関係を示すアクセス関係情報
5を生成する。
【0015】レジスタ管理部2は、各該中間言語ごと
に、該原型プログラム6上で使用されるレジスタについ
て、当該原型プログラムの最初から所定のステップまで
の間に不使用になる該レジスタを複数用途可能レジスタ
として示すレジスタ使用状態情報7を有し、順次各該中
間言語について、アクセス関係情報5と原型プログラム
6を参照して該レジスタの割当を行い、割り当てたレジ
スタがレジスタ使用状態情報7により該複数用途可能レ
ジスタであって、アクセス関係情報5によって他の中間
言語との関係を有しない場合には、当該レジスタがレジ
スタ使用状態情報7により不使用となる期間に、該レジ
スタを優先して他の用途に再割当して、該中間言語ごと
のレジスタ割当情報8を生成する。
【0016】オブジェクト生成部3はレジスタ割当情報
8に従って、該原型プログラムのレジスタを決定するこ
とにより、該中間言語の列を目的プログラムに展開す
る。
【0017】
【作用】本発明のコンパイラ装置により、中間言語内で
レジスタを複数の用途に再割当することにより、同時に
必要となるレジスタ数を減少することができるようにな
るので、レジスタ数の不足のためにレジスタの内容の退
避/復元を必要とする場合が少なくなり、目的プログラ
ムの効率を改善することができる。
【0018】
【実施例】前記の図2(a)の例の原型プログラムにおい
て、少なくともこの3命令の列の中においては、「レジ
スタ2」は最初の命令で使用されるだけである。
【0019】従って、もし「レジスタ2」の内容を後の
中間言語で再度使用することが無ければ、即ち例えば前
記のとおり「レジスタ2」の内容は「メモリアドレス
1」のインデクス値であるから、この「メモリアドレス
1」で定まるデータに再度アクセスすることが無けれ
ば、「レジスタ2」として割り当てたレジスタは最初の
命令の後は空きとしてもよく、その場合は「レジスタ
3」に「レジスタ2」と同じレジスタを割り当てること
ができる。
【0020】このような場合に、本発明のレジスタ使用
状態情報7により、「レジスタ2」を「複数用途可能レ
ジスタ」として記録しておく。レジスタ管理部2は従来
の情報の他にこのレジスタ使用状態情報7を参照してレ
ジスタの割当を処理することにり、必要な条件が満たさ
れる場合には、「レジスタ2」と「レジスタ3」とに優
先的に同じレジスタを割り当てるようにし、その割当に
基づいてオブジェクト生成部3は図2(c)のようなプロ
グラム展開を行い、この例では必要なレジスタ個数を従
来より1個少なくすることができる。
【0021】図3及び図4は本発明の処理の流れの一例
を示す図である。図は中間言語の列4に対して、レジス
タ管理部2及びオブジェクト生成部3により各中間言語
ごとについて実行される処理を示す。
【0022】レジスタ管理部2は各中間言語ごとのレジ
スタ割当処理において、図3のシステム10で当該中間言
語の原型プログラムについて全レジスタを処理したか識
別し、未処理があれば処理ステップ11で未処理の1レジ
スタを割当対象として取り出す。
【0023】処理ステップ12でアクセス関係情報5から
そのレジスタが決まるか識別し、決まる場合には、処理
ステップ13でそのレジスタを割り当て、決まらない場合
には、処理ステップ14で所要の種類の空きレジスタから
レジスタを割り当てる処理を行い、処理ステップ15で割
当をレジスタ割当情報8に記録し、又後の処理のために
当レジスタをその中間言語内で使用中にする。
【0024】処理ステップ16で、今割り当てたレジスタ
が複数用途可能レジスタか否かを、レジスタ使用状態情
報7で識別し、複数用途可能レジスタの場合には処理ス
テップ17で複数用途レジスタにできるかを、アクセス関
係情報5から識別する。
【0025】以上で複数用途レジスタにできない場合は
処理ステップ10に戻って次のレジスタ割当の処理に進む
が、複数用途レジスタになる場合には処理ステップ18で
レジスタ割当情報に複数用途レジスタである旨の指定を
追加し、処理ステップ19で割り当てたレジスタを、残る
レジスタ割当のために仮に空きレジスタとした後、処理
ステップ10に戻る。
【0026】以上を原型プログラムの全レジスタについ
て処理すると、処理ステップ20でレジスタ割当情報8を
オブジェクト生成部3に渡す。オブジェクト生成部3は
図4の処理ステップ21で、処理対象の中間言語について
展開を終わったか識別し、未処理があれば処理ステップ
22で原型プログラムの次の命令を処理対象として取り出
し、処理ステップ23でレジスタ割当情報8その他に従っ
て展開プログラムの命令のオペランドを設定する、その
際レジスタについては、レジスタ割当情報8に指定され
ているレジスタで、未だ使用していないレジスタから必
要な種類のレジスタを選んで使用する。
【0027】次いで処理ステップ24で、そこで設定した
レジスタがレジスタ割当情報8で複数用途レジスタにな
っているか識別して、複数用途レジスタの指定であれ
ば、処理ステップ25でその指定を解除し、複数用途レジ
スタでなければ処理ステップ26でそのレジスタを使用済
とする。
【0028】その後、処理ステップ21に戻り、以上の処
理を原型プログラムの全命令について順次実行して処理
を終わる。
【0029】
【発明の効果】以上の説明から明らかなように本発明に
よれば、計算機のコンパイラの処理において、中間言語
内でレジスタを複数の用途に再割当することにより、同
時に必要となるレジスタ数を減少することができるの
で、レジスタ数の不足のためにレジスタの内容の退避/
復元を必要とする場合が減少し、目的プログラムの効率
を改善することができるという著しい工業的効果があ
る。
【図面の簡単な説明】
【図1】 本発明の構成を示すブロック図
【図2】 レジスタの割当例を説明する図
【図3】 本発明の処理の流れ図(その1)
【図4】 本発明の処理の流れ図(その2)
【符号の説明】
1 解析部 2 レジスタ管理部 3 オブジェクト生成部 4 中間言語の列 5 アクセス関係情報 6 原型プログラム 7 レジスタ使用状態情報 8 レジスタ割当情報 10〜26 処理ステップ

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 所定のプログラミング言語で記述された
    原始プログラムを、中間言語の列に変換し、各該中間言
    語に対応して定まる機械語命令の列を示す原型プログラ
    ムに従って、該中間言語の列を目的プログラムに翻訳す
    る装置であって、 解析部(1)と、レジスタ管理部(2)と、オブジェクト生成
    部(3)とを有し、 該解析部(1)は該原始プログラムを解析して、該中間言
    語の列(4)に変換し、該中間言語の列の該中間言語間の
    データへのアクセス関係を示すアクセス関係情報(5)を
    生成し、 該レジスタ管理部(2)は、各該中間言語ごとに、該原型
    プログラム(6)上で使用されるレジスタについて、当該
    原型プログラムの最初から所定のステップまでの間に不
    使用になる該レジスタを複数用途可能レジスタとして示
    すレジスタ使用状態情報(7)を有し、 順次各該中間言語について、該アクセス関係情報と該原
    型プログラムを参照して該レジスタの割当を行い、割り
    当てたレジスタが該レジスタ使用状態情報(7)により該
    複数用途可能レジスタであって、該アクセス関係情報
    (5)によって他の中間言語との関係を有しない場合に
    は、当該レジスタが該レジスタ使用状態情報により不使
    用となる期間に、該レジスタを優先して他の用途に再割
    当して、該中間言語ごとのレジスタ割当情報(8)を生成
    し、 該オブジェクト生成部(3)は、該レジスタ割当情報(8)に
    従って、該原型プログラムのレジスタを決定することに
    より、該中間言語の列を目的プログラムに展開するよう
    に構成されていることを特徴とするコンパイラ装置。
JP11350093A 1993-05-17 1993-05-17 コンパイラ装置 Withdrawn JPH06324882A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11350093A JPH06324882A (ja) 1993-05-17 1993-05-17 コンパイラ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11350093A JPH06324882A (ja) 1993-05-17 1993-05-17 コンパイラ装置

Publications (1)

Publication Number Publication Date
JPH06324882A true JPH06324882A (ja) 1994-11-25

Family

ID=14613904

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11350093A Withdrawn JPH06324882A (ja) 1993-05-17 1993-05-17 コンパイラ装置

Country Status (1)

Country Link
JP (1) JPH06324882A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008269569A (ja) * 2007-03-27 2008-11-06 Matsushita Electric Ind Co Ltd コード変換装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008269569A (ja) * 2007-03-27 2008-11-06 Matsushita Electric Ind Co Ltd コード変換装置

Similar Documents

Publication Publication Date Title
US6408433B1 (en) Method and apparatus for building calling convention prolog and epilog code using a register allocator
JP4026940B2 (ja) プログラム変換装置
JP4319082B2 (ja) プログラミングシステム
US7240341B2 (en) Global constant pool to allow deletion of constant pool entries
KR20060035077A (ko) 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
JP2000353097A (ja) 低密回の干渉グラフを生成する方法および装置
JPH09223023A (ja) コンパイル装置およびコンパイラ
JPH06324882A (ja) コンパイラ装置
CN110333870B (zh) Simulink模型变量分配的处理方法、装置及设备
JP2003256215A (ja) プログラム変換方法、これを用いたデータ処理装置及びプログラム
JPH07105013A (ja) レジスタ割り付け方式
JPH11345127A (ja) コンパイラ
JP2556148B2 (ja) ベクトルレジスタ割付け方式
JPH08272621A (ja) 動的メモリ領域を確保する関数呼出しの処理方法
JPH03135630A (ja) 命令スケジューリング方式
JP2932812B2 (ja) 言語処理プログラム実行装置
JP3004340B2 (ja) プログラム最適化装置
JPH05189245A (ja) 資源割付け装置
JP3237591B2 (ja) コンパイル装置、コンパイル方法およびコンパイラを記録した記録媒体
JPH02105224A (ja) コンパイラにおけるデータ割付け方式
JPH0373026A (ja) コンパイル方式
JPH0991151A (ja) コンパイル装置及びプロセッサ装置
JPH02194439A (ja) プログラム実行方式
JPH11175351A (ja) プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体
JPS63163636A (ja) 並列処理実行方式

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20000801