JPH10133885A - 一括命令生成コンパイル方法 - Google Patents

一括命令生成コンパイル方法

Info

Publication number
JPH10133885A
JPH10133885A JP28491996A JP28491996A JPH10133885A JP H10133885 A JPH10133885 A JP H10133885A JP 28491996 A JP28491996 A JP 28491996A JP 28491996 A JP28491996 A JP 28491996A JP H10133885 A JPH10133885 A JP H10133885A
Authority
JP
Japan
Prior art keywords
instruction
batch
variable
collective
processing
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
JP28491996A
Other languages
English (en)
Inventor
Noriyasu Mori
教安 森
Sumio Kikuchi
純男 菊池
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP28491996A priority Critical patent/JPH10133885A/ja
Publication of JPH10133885A publication Critical patent/JPH10133885A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 コンパイラの一括命令化処理において、一括
命令のオペランドである一括変数が連続領域にないと
き、一括変数生成コードが生成され、処理性能が低下す
る。 【解決手段】 上記課題を解決するために、一括変数に
対し優先的に連続メモリを割り当てる一括変数シンボル
メモリ割り当て処理をコンパイラのメモリ割り当て処理
に設ける。これにより、コンパイラの一括命令化処理
は、連続領域に割り当てられた一括変数に対して、一括
変数を生成する命令コードを生成する必要がなくなる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコンパイラのコンパ
イル方法に係わり、特に、複数のデータに対する同種命
令を一括処理する一括命令(SIMD命令)を持つアー
キテクチャに対するコンパイル方法に関する。
【0002】
【従来の技術】コンパイラは、高級言語で記述されたプ
ログラムを、対象アーキテクチャが備える命令語へと変
換する。コンパイラが扱う対象アーキテクチャには、複
数のデータに対する同種命令を一括処理する一括命令
(SIMD命令とも呼ばれる)を持つものがある。一般
の命令は、ある処理を一組のオペランドに対して処理を
行なっている。例えば、 c=a+b の場合、処理+(加算)のオペランドa、bに対して、
処理結果cが得られる。
【0003】これに対し、一括命令では、 (z1,z2) = (x1,x2) + (y1,y2) のように、複数データの演算を一度に行なうことが出来
る。
【0004】上記の例では、 z1 = x1 + y1 z2 = x2 + y2 を一度に行なっている。
【0005】このような命令を実行するには、上記の
(x1、x2)のような一括データ生成する必要があ
る。以降では、このように複数データが配置された変数
を一括変数と呼ぶことにする。
【0006】一括変数に複数データを配置するために、
一括変数と通常の変数や定数との間のデータ転送を行な
う命令や、一括変数をメモリとレジスタ間で転送する命
令があるとよい。このような命令を一括変数アクセス命
令と呼ぶことにする。一括命令を備えるアーキテクチャ
においては、一括変数アクセス命令を備えているのが、
一般的である。以降では、このようなアーキテクチャを
前提として話を進める。
【0007】通常、一括命令は、必ずしもアーキテクチ
ャ上不可欠の機能ではない。即ち、非一括命令で等価な
処理を行なうことができるのが普通である。例えば、図
22は一括命令を用いているが、図29は一括命令を用
いないで等価な処理を行なっている。両者は、等価な処
理を行なっているが、一括命令を用いた図22の方が高
速な処理が可能である。即ち、一括命令は、通常、一括
データに対する処理の高速化のために設けられている。
このように、一括命令は、処理性能向上のためのアーキ
テクチャ上の有力な機能である。
【0008】一括命令の例としては、Intel社の拡
張命令セットMMXが挙げられる。MMXに関して
は、"Linley Gwennap: Intel's MMX Speeds Multimedi
a,MICROPROCESSOR REPORT, vol.10, No.3, Mar. 1996,
pp.9-10"に詳しい。
【0009】一括命令を有するアーキテクチャに対する
コンパイラは、独立した同機能の命令を集めて、一括命
令とする(これを一括命令化と呼ぶ)ことが出来る。こ
れは、オブジェクトプログラムの処理性能向上を目的と
した、最適化の一つとなりえる。しかしながら、一括命
令化が処理性能の向上をもたらすとは、一概にはいえな
い。以下にその理由を述べる。
【0010】一括命令を用いるためには、データを一括
変数に配置する必要がある。一括変数は、複数の変数を
一つにまとめたものであるが、その構成要素である要素
変数は本来独立した個別変数である。従って、そのメモ
リ領域も本来独立して割り当てられる。よって、一括変
数の要素変数が連続領域に割り当てられる保証はない。
一方で、一括変数の要素変数が連続領域にないときは、
要素変数を一括化する等の命令コード(これを一括変数
アクセス命令コードと呼ぶ)をコンパイラが付加する必
要がある。一括変数アクセス命令コードは、一括変数の
要素変数が連続領域にある場合には不要である。即ち、
一括変数が連続領域に配置されていないと、一括命令化
に伴う一括変数生成時に、一括変数アクセスコードの付
加が必要となる。そのため、場合によっては、一括命令
化が処理性能を低下させてしまうこともある得る。
【0011】上記文献の9ページに記載されている通
り、従来技術において、一括命令化を行なっているコン
パイラの例はない。その理由の一つが、この一括変数ア
クセス命令コードが必要になることである。この一括変
数アクセス命令を生成する要因の一つに、メモリ配置の
問題がある。そこで、コンパイラのメモリ割り当てに関
して述べる。
【0012】一般に、プログラム中に現れる変数の記憶
域は、プログラム全体、ファイル、関数といった単位で
割り当てられる。例えば、C言語では、各々、exte
rn、statc、autoと表記される。これらの記
憶域(メモリ)割り当て単位を記憶域クラスと呼ぶ。コ
ンパイラは、記憶域クラス毎に、変数や定数をメモリに
割り当てる必要がある。この処理を行なっているのが、
コンパイラのメモリ割り当て処理である。ある記憶域ク
ラスでの割り当ては、その先頭位置からのオフセット値
を割り当て対象に与えることで行なう。従って、割り当
て順序がそのままメモリ配置の順となるのが普通であ
る。
【0013】変数のメモリ配置順序は、制約のため変更
出来ないものもあるが、基本的には、コンパイラが決定
する。即ち、コンパイラは、その記憶域クラス内の任意
の位置に配置してよい。しかしながら、メモリ配置順序
による処理性能の差異等はないのが普通であるため、コ
ンパイラは、通常、メモリ配置に関して特別な配慮はお
こなっていない。即ち、コンパイラはソースプログラム
の順にコンパイル処理を行なうため、メモリへの割り当
て順序もソースプログラムでの出現順となるのが普通で
ある。
【0014】以上述べてきたように、従来技術において
は、コンパイラは対象アーキテクチャが一括命令を持つ
かどうかに関係なくメモリ割り当て処理を行なってい
た。
【0015】
【発明が解決しようとする課題】従来技術の項で述べた
通り、一括命令化は、必ずしも性能向上につながらない
場合がある。この一括命令化による処理性能向上を妨げ
る1要因として、メモリ配置の問題がある。即ち、一括
変数の要素となる変数が連続領域に割り当てられない時
は、コンパイラの一括命令化による性能向上を妨げると
いう問題があった。 本発明の目的は、一括命令化に伴
う命令コ−ドの増加を防止できるコンパイル方法を提供
することにある。また、一括命令化に伴って一括変数を
メモリの連続領域に配置するための情報を生成する方法
を提供することにある。
【0016】
【課題を解決するための手段】上記従来技術の問題は、
コンパイラのメモリ割り当て処理が、一括命令化処理と
は無関係に行なわれることに原因がある。
【0017】そこで、この問題を解決するために、同型
命令を認識し、その同型命令情報を用いてメモリ割り当
てを行なう手段を、コンパイラに設ける。コンパイラの
メモリ割り当て処理は、上記同型命令情報を参照し、一
括変数の要素となる変数を、出来る限り連続領域に割り
付ける。これにより、一括命令化に伴う一括変数アクセ
ス命令コードの生成を抑止することができ、オブジェク
トプログラムの処理性能の向上に寄与する。
【0018】
【発明の実施の形態】本発明は、同種処理を複数データ
に対し一括処理する一括命令(SIMD命令)を備える
アーキテクチャに対するコンパイラのコンパイル方式に
関するものである。以下では、本発明の1実施例を図面
を用いて説明する。
【0019】図1は、本発明のコンパイル方法を実施す
るコンパイラが動作する計算機システムの構成図であ
る。計算機システムは、CPU101、ディスプレイ装
置102、キーボード103、主記憶装置104、外部
記憶装置105より構成されている。キーボード103
より、ユーザからのコンパイラ起動命令を受け付ける。
コンパイラ終了メッセージや、エラーメッセージは、デ
ィスプレイ装置102に表示される。外部記憶装置10
5には、ソースプログラム106とオブジェクトプログ
ラム107が格納される。主記憶装置104には、コン
パイラ108があり、コンパイル過程で必要となる中間
語3、シンボルテーブル4、同型命令情報テーブル5、
一括化情報テーブル6が格納される。コンパイル処理
は、CPU101によって制御される。
【0020】図2に本実施例のコンパイラの処理手順を
示す。構文解析201では、ソースプログラム106を
入力として字句構文解析を行ない、中間語3及びシンボ
ルテーブル4を出力する。メモリ割り当てと一括命令化
2は、中間語3及びシンボルテーブル4を入力とし、個
々のシンボルに対しメモリを割り当てるメモリ割り当て
処理と複数命令を一括命令に変換する一括命令化処理を
行ない、中間語3及びメモリ配置テーブル8を出力す
る。レジスタ割り当て処理202は、中間語上に現れる
変数(一括変数も含む)や定数に対してレジスタを割り
当てる。コード生成処理203は、中間語を最終的なオ
ブジェクトプログラム107の形式に変換する。
【0021】図3は、本発明におけるメモリ割り当て方
法の1実施例を示すフローチャート図であり、図2のメ
モリ割り当てと一括命令化処理2の手順を表している。
【0022】先ず、同型命令認識処理21により、同型
命令を認識して、同型命令情報テーブル5を作成する。
次に、一括情報テーブル生成処理22により、一括情報
テーブル6を生成する。尚、一括情報テーブル生成処理
22は、同型命令を一括命令化する一括命令テーブル生
成処理221と、同型命令のオペランドや演算結果を一
括変数化する一括変数テーブル生成処理222で構成さ
れ、この順に処理される。
【0023】次に、メモリ割り当て処理9により、シン
ボルテーブル4の各シンボルにメモリを割り当てたメモ
リ配置テーブル8を生成する。メモリ割り当て処理9
は、最初に一括変数シンボル割り当て処理91を行なっ
た後に、非一括変数のメモリ割り当てである一般シンボ
ルのメモリ割り当て処理92を行う。
【0024】一括変数シンボル割り当て処理91は、以
下の手順で行なう。先ず、未処理一括変数があるかどう
かを判定(ステップ911)し、存在する場合は、その
要素シンボル集合をavsとして(ステップ912)、
avsを連続メモリ領域に割り当て可能かどうかを判定
する(ステップ913)。可能な場合は、連続領域に割
り当てる(ステップ914)。そうでない場合は、av
sのメモリ割り当てを行なわないで、ステップ911へ
進む。尚、ステップ913でNoと判定された要素シン
ボル及び、要素シンボルでない(一括変数化されない)
シンボルは、一般シンボルメモリ割り当て処理92に
て、メモリが割り当てられる。
【0025】一般シンボルメモリ割り当て処理92は、
シンボルテーブル4を参照して、未割り当ての変数や定
数(シンボル)を逐次走査し、割り当てる度にオフセッ
ト値を進めていくことで容易に実現できるので、詳しく
は述べない。従来技術におけるメモリ割り当て処理と同
等なものである。
【0026】メモリ割り当て処理後には、一括化コード
変換処理23により中間語3を一括命令化する。一括化
コード変換処理23は、一括化に必要な変換コードの一
覧を生成する一括化変換テーブル生成処理231、一括
化変換コードテーブルに従って中間語を変換する一括化
中間語変換処理232で構成され、この順に処理され
る。
【0027】図4は、図3で示したメモリ割り当て関連
処理と、入出力となる中間語やテーブル類の関係を示し
た処理構成図である。但し、中間語3とシンボルテーブ
ル4は、全般的に参照するため、入出力関係は主要なも
ののみを示した。
【0028】同型命令認識処理21は、一括命令化前中
間語31及びシンボルテーブル4を入力とし、同型命令
の情報を格納した同型命令情報テーブル5を生成する。
同型命令情報テーブル5は、同型命令の一覧を格納する
同型命令テーブル51と、同型命令の中間語情報を格納
する命令ノードテーブル52から成る。
【0029】一括情報テーブル生成処理22は、同型命
令情報テーブル5を入力とし、同型命令を一括命令にす
る情報を格納した一括情報テーブル6を生成する。
【0030】一括情報テーブルは、同型情報テーブル5
の同型命令から一括命令を抽出した一括命令テーブル6
1と、同型情報テーブル5の同型命令から一括変数を抽
出した一括変数テーブル62から成る。一括情報テーブ
ル生成処理22のうち、一括命令テーブル61を生成す
るのが一括命令テーブル生成処理221、一括変数テー
ブル62を生成するのが一括変数テーブル生成処理22
2である。
【0031】メモリ割り当て処理9は、シンボルテーブ
ル4と一括変数テーブル62を入力とし、各シンボルの
記憶域を決定し、メモリ配置テーブル8を生成する。一
括変数シンボル割り当て処理91は、一括変数テーブル
62を参照しながら、一般シンボルメモリ割り当て処理
92は、シンボルテーブル4のみを参照して、メモリ配
置テーブルのエントリにメモリ位置を格納する。
【0032】一括化変換テーブル生成処理231は、一
括情報テーブル6とメモリ配置テーブル8を入力とし
て、一括命令化に伴う中間語変換の情報を格納した一括
化変換テーブル7を生成する。一括化変換テーブル7
は、個々の一括命令化の中間語変換の情報を格納する一
括化命令変換テーブル71と、命令ノード単位の中間語
コードの情報を格納する変換コードテーブル72からな
る。一括化中間語処理232は、一括化変換テーブル7
を参照して、一括命令化前中間語31を一括命令化中間
語32に変換する。
【0033】次に、具体的な適用例の説明のため、処理
対象たるソースプログラムの例を挙げておく。
【0034】図5は、本発明の一実施例の説明のための
ソースプログラム例である。従来技術の項で述べた通
り、記憶域クラスとしては、プログラム全体、ファイル
内、関数内等の配置単位がある。記憶域の割り当てが行
なわれるのが、それぞれリンク時、ファイルコンパイル
時、関数コンパイル時といった違いがあるが、本発明に
おいて本質的な違いはない。例えば、リンク時に割り当
てを行なう場合は、一括化情報をオブジェクトファイル
に格納する等の方法で、容易に実現できる。
【0035】本発明は、どの記憶域に関しても適用可能
であるが、説明の簡略化のため、ファイル単位の記憶域
の割り当てに絞って説明するものとする。従って、本実
施例では、static変数に対するメモリ割り当ての
みを考える。
【0036】図5は、C言語で書かれたプログラムであ
り、メモリ割り当て対象となるのは、1行から4行にあ
るxn,an,bn(n=0から1)の計6個のsta
tic変数である。従って、コンパイラはこれらの変数
に対し、ファイル単位でメモリを割り当てる。
【0037】次に、中間語3の構成例を示すが、ここで
中間語の例示に関して説明する。図5のプログラム例で
は、関数f、mainの2関数があるが、本発明と密接
に係わるのは、関数fであるので、以降では、中間語の
例は、関数fに関するものだけを例示する。
【0038】また、本実施例の説明においては、中間語
は1行に1命令ノードを配した命令語レベルの疑似アセ
ンブラソースの形式で示す。このレベルの中間語では、
オブジェクトプログラムの命令列と1対1に対応してい
るので、本実施例における中間語の構成例は、そのまま
オブジェクトプログラム107の例となっている。以降
では、命令語レベルの中間語単位を命令ノードと呼ぶこ
とにする。
【0039】命令ノードは、以下の形式で記述する。 opn.n ln1,ln2,ln3 ここに、「opn」はloadやsub(減算)といっ
た命令の主コード、「.n」は、演算のデータサイズで
ある。本実施例においては、命令語が演算のデータサイ
ズや符合といった情報をもつものとするが、簡単のた
め、符合の有無は考えない。以降では、データサイズつ
きの命令主コード「opn.n」を命令種別と呼ぶ。
【0040】「ln1,ln2,ln3」の部分は、命
令ノードの演算結果やオペランドを格納する変数や定数
でありリーフノード集合と呼ぶ(個々のln1等はリー
フノードと呼ぶ)。尚、リーフノードの個数は、命令種
別に応じて予め決まっている。命令ノードは、中間語の
特定のノードを指し示しており、リーフノードの個数や
シンボル番号等を取得することが出来る。
【0041】ここで、本発明に関連する命令に関して説
明する。本発明は、一括化命令に関するものであり、そ
のリーフノードとして、一括変数を生成する必要がある
(詳細は後述)。一括変数を生成するためには、場合に
よっては通常の変数を一括変数に埋め込んだり、逆に一
括変数からその要素変数を取り出すことが必要となる。
本実施例では、前者を圧縮命令、後者を展開命令と呼ぶ
ことにする。
【0042】命令ノードの形式は、 op asym<eof>,esym であり、opが命令種別、asymが一括変数、eof
が一括変数中の要素変数のオフセット、esymが一般
の変数を表す。命令の主コードは、圧縮命令はcmp
s、展開命令はexpnとする。例えば、 「cmps.2 a<2>,b」 は、変数b(データサイズは2)を一括変数aのオフセ
ット2の位置に格納する命令である。
【0043】図6は、図5のソースプログラム例に対す
る(一括命令化前の)中間語31の例である。図6にお
いて、各行にあるのが命令ノードである。例えば、10
6行にある命令ノードは、命令種別が「sub.2」
で、リーフノード集合{t02,t00,t01}を持
つなどという。
【0044】中間語3においては、ソースプログラムを
命令語レベルに翻訳しているため、コンパイラが生成し
た一時変数を使った形式となっている。例えば、t00
からt04、t10からt14が、それにあたる。尚、
図5の6行は、図6の102行から112行に対応して
いる。
【0045】以下簡単に説明すると、102行でa0、
104行でx0、108行でb0をメモリからロード
し、106行でa0からx0の減算、110行で106
行の演算結果t02とb0との乗算、112行で106
行の演算結果t04のメモリへのストアを各々行なって
いる。
【0046】図7は、図5の例に対して求めたシンボル
テーブル4の構成例である。シンボルテーブルは、プロ
グラム中に出現する変数や定数(これらをシンボルと呼
ぶ)毎に、エントリが作成される。各シンボルには、一
意なシンボル番号が付与されており、そのシンボル番号
により各エントリがアクセス可能となっている。各エン
トリは、シンボル番号欄41、シンボル名称欄42、シ
ンボル属性欄43、記憶域クラス欄44で構成される。
【0047】シンボル番号欄41には、シンボルテーブ
ルのエントリ番号、シンボル名称欄42には、対応する
シンボルの名称が格納される。シンボル属性欄43に
は、当該変数/定数の型情報等が格納される。シンボル
属性には、データのサイズや、符合の有無、データ形式
(整数型や浮動小数点型等の区別)等が設定されるが、
本実施例においては例としてデータサイズのみが格納さ
れているものとする。記憶域クラス欄44には、メモリ
割り当ての配置単位となる記憶域クラスが格納される。
本実施例では、記憶域クラスは、extern、sta
tc、autoといったC言語の記憶域クラス名称によ
り示す。
【0048】例えば、図7のエントリ45は、図5のプ
ログラム例の1行目の変数x0に対応しており、データ
サイズが2で、記憶域クラスはstatic(ファイル
単位配置)あることを示している。
【0049】以降では、メモリ割り当てと一括命令化処
理2の細部の説明を行なう。説明にあたっては、図6の
中間語と図7のシンボルテーブルを入力例とし、各種テ
ーブルの出力例を逐次示していく。そこで、先ず、各種
テーブルの構成例を説明してから、処理手順の説明を行
なう。以下、同型命令情報テーブル5、一括情報テーブ
ル6、メモリ配置テーブル8、一括化変換テーブル7の
順にその構成例を述べる。同型命令情報テーブル5は、
同型命令テーブル51と命令ノードテーブル52で構成
されており、後者は前者の補助テーブルとなっている。
【0050】図8は、同型命令テーブル51の構成例で
ある。同型命令テーブルは、一括命令化が可能な命令の
命令種別毎にエントリが作成される。各エントリは、同
型命令番号欄511、命令種別欄512、一括命令個数
欄513、同型命令ノード集合欄514で構成される。
【0051】同型命令番号欄511には、同型命令のエ
ントリ番号が格納される。命令種別欄512には、同型
命令の命令種別が格納される。一括命令個数欄513に
は、一括命令とするのに必要な同型命令ノードの個数
(これを一括命令個数と呼ぶことにする)が格納され
る。尚、この一括命令個数は、命令種別に応じて予め決
まっている。本欄が設けられているのは、説明のためで
ある。同型命令ノード集合欄514は、演算種別に属す
る命令ノードの一覧を格納するもので、中間語上に未登
録の同型命令ノードが出現する度に、追加格納される。
この集合の要素は命令ノードテーブル52のエントリ番
号であり、個々の命令ノードの詳細は、命令ノードテー
ブルに格納されている。
【0052】例えば、図8のエントリ515の例では、
命令種別sub.2(2バイトの減算)の命令ノードの
一覧が、命令ノード集合欄514に命令ノード番号で示
されている。即ち、命令ノードエントリ526と527
が同型命令であることを示している。
【0053】図9は、命令ノードテーブル52の構成例
である。命令ノードテーブルは、中間語3の同型命令に
関連する情報を、説明のためテーブル形式で表したもの
である。命令ノードテーブルには、一括命令化が可能な
同型命令の命令ノード毎にエントリが作成される。各エ
ントリは、命令ノード番号欄521、命令種別欄52
2、リーフノード個数欄523、リーフノード集合欄5
24、命令ノード位置欄525で構成される。
【0054】命令ノード番号欄521にはエントリ番
号、命令種別欄522には命令種別が、各々格納され
る。リーフノード個数欄523には、該命令のリーフノ
ードにある変数や定数の個数が格納される。リーフノー
ド集合欄524には、該命令のリーフノードにある変数
や定数の集合が、シンボルテーブル4のエントリ番号
(シンボル番号)の集合の形式で格納される。ノード位
置欄525には、該命令ノードの中間語3での位置が、
(本実施例では)行番号で示されている。
【0055】例えば、図9のエントリ526は、命令種
別がsub.2、リーフノードが3個で、そのシンボル
番号が{9,7,8}即ち、t02、t01、t02で
ある命令ノードが、ノード位置106にあることを示し
ている。これは、図6の106行目の命令ノードを示し
ている。
【0056】次に、一括情報テーブル6の説明を行な
う。一括情報テーブル6は、一括命令テーブル61と一
括変数テーブル62で構成されている。以下、順に説明
する。
【0057】図10は、一括命令テーブル61の構成例
である。
【0058】一括命令テーブルは、同型命令テーブルを
入力として一括命令毎にエントリが作成される。各エン
トリは、一括命令番号欄611、一括命令種別欄61
2、一括命令ノード個数欄613、一括命令ノード集合
欄614、リーフ一括変数個数欄615、リーフ一括変
数集合欄616で構成される。
【0059】一括命令番号欄611にはエントリ番号、
一括命令種別欄612には命令種別が、各々格納され
る。一括命令ノード個数欄613には、一括命令化する
命令ノードの個数が格納される。一括命令ノード集合欄
614には、一括命令化する命令ノードの集合が、命令
ノードテーブルのエントリ番号の形式で格納される。リ
ーフ一括変数個数欄615には、該一括命令のリーフノ
ードである一括変数の集合の個数が格納される。リーフ
一括変数集合欄616には、該一括命令のリーフノード
である一括変数の集合が、一括変数テーブルのエントリ
番号の形式で格納される。
【0060】例えば、図10のエントリ617は、命令
ノード番号{3,9}のsub.2が一括命令化される
場合の例である。一括化された命令は、リーフノードが
一括変数番号{6,4,5}である一括減算命令(ms
ub)、即ち、 「msub.4 mt2,mt0,mt1」 を示している。
【0061】図11は、一括変数テーブル62の構成例
である。一括変数テーブルは、同型命令情報テーブル5
を入力として一括変数毎にエントリが作成される。各エ
ントリは、一括変数番号欄621、一括変数シンボル欄
622、要素シンボル集合欄623で構成される。
【0062】一括変数番号欄621には、一括変数番号
を示すエントリ番号が格納される。一括変数シンボル欄
622は、一括変数化した時の変数名称を格納する欄で
あり、やはりシンボルテーブル4のシンボル番号で格納
される。要素シンボル集合欄623は、一括変数の要素
である変数の集合が、シンボルテーブルのエントリ番号
の形式で登録されている。
【0063】例えば、図11のエントリ624は、一括
変数シンボルがmx(シンボル番号17)で、その要素
変数集合が{x0、x1}(シンボル番号{1,4})
であることを示している(シンボルテーブルは、図18
の一括変数化後のシンボルテーブルを参照)。
【0064】図12は、メモリ配置テーブル8の構成例
である。メモリ配置テーブルは、各シンボル毎にエント
リが生成され、そのエントリ番号は、シンボルテーブル
4と同じである。本テーブルは、シンボルテーブル4の
フィールド(欄)と共通にするのが普通であるが、説明
の簡略化のため、別テーブルに分離してある。各エント
リは、シンボル番号欄81、シンボル名称欄82、シン
ボル属性欄83、記憶域クラス欄84、記憶域オフセッ
ト欄85で構成される。
【0065】シンボル番号欄81、シンボル名称欄8
2、シンボル属性欄83、記憶域クラス欄84は、シン
ボルテーブル4のそれと全く同じなので、説明は省略す
る。これらの欄は、説明のため設けたものである。記憶
域オフセット欄85には、当該シンボルの記憶域クラス
欄84で示された単位領域での先頭からの相対オフセッ
トが格納される。尚、本実施例では、ファイル単位の割
り当て例のみを示すので、記憶域クラス84がstat
ic以外のシンボルに関しては、簡単のためエントリを
省略する。図7においてシンボル番号7から16はコン
パイラが生成した一時変数であり、記憶域クラスはau
toとなるので、エントリを省略した。
【0066】例えば、図12のエントリ86は、図4の
プログラム例の1行目の変数x0、図6のシンボル番号
1のエントリに対応しており、オフセットは0となって
いる。
【0067】次に、一括化変換テーブル7の説明を行な
う。一括化変換テーブル7は、一括化命令変換テーブル
71と変換コードテーブル72で構成されており、後者
は前者の補助テーブルとなっている。以下、順に説明す
る。
【0068】図13は、一括化命令変換テーブル71の
構成例である。一括化命令変換テーブルは、一括命令単
位でエントリが生成され、そのエントリ番号は、一括命
令テーブル61と同じである。即ち、本テーブルは、一
括命令テーブル61にフィールド(欄)を拡張したもの
であり、一括命令テーブルの各欄も参照可能である。各
エントリは、一括命令番号欄711、変換コード個数欄
712、変換コード集合欄713、一括命令フラグ欄7
14、ノード位置欄715で構成される。
【0069】一括命令番号欄711には、一括命令テー
ブル61と同じエントリ番号が格納される。変換コード
個数欄712には、一括命令化に伴って必要となる新規
作成命令ノード(これを変換コードと呼ぶ)の個数が格
納される。変換コード集合欄713には、上記の変換コ
ードの集合が、変換コードテーブルのエントリ番号の形
式で格納される。一括命令フラグ欄714には、一括命
令化が可能かどうかを示すフラグが格納される(このフ
ラグの値は、可能なときT、不能なときFとする)。ノ
ード位置欄715には、一括命令を生成するノード位置
が格納される。
【0070】例えば、図13のエントリ716は、変換
コード生成の必要がなく、ノード位置105で一括命令
化が可能であることを示している。
【0071】図14は、変換コードテーブル72の構成
例である。変換コードテーブルは、変数を一括変数化す
る際の変換コードの生成に必要な情報を格納したもので
ある。一括変数化変換コードは、一括変数の要素変数が
連続領域になかったり、異なる一括変数が同一の要素変
数を持っていたりする場合に必要となる。変換コードテ
ーブルは、一括化命令変換エントリの生成にあたり、変
換コードが必要とされる度にエントリが作成される。
【0072】各エントリは、変換番号欄721、一括変
数シンボル番号欄722、要素変数シンボル番号欄72
3、一括化オフセット欄724、変換命令欄725、ノ
ード位置欄726で構成される。変換番号欄721に
は、変換コード番号を示すエントリ番号が格納される。
一括変数シンボル番号欄722には、変換コードの一括
変数のシンボル番号が格納される。要素変数シンボル番
号欄723には、変換コードの要素変数のシンボル番号
が格納される。一括化オフセット欄724には、変換コ
ードの一括化オフセットが格納される。変換命令欄72
5には、変換コードの命令種別が格納される。ノード位
置欄726には、変換コードを挿入すべきノード位置が
格納される。
【0073】722から725の各欄の値を用いて、生
成すべき一変換コードを構成することができる。即ち、
変換コードは、 「変換命令 一括変数<要素オフセット>,要素変数」 とすればよい。
【0074】図14の例は、変換コードの必要がない場
合の例となっている。そこで、従来技術における変換コ
ードテーブルの例で説明する。図28は、従来技術にお
ける変換コードテーブルの例である。エントリ728
は、図29行の115行目の命令ノード生成の指示であ
る(詳細は略す)。
【0075】以上で、本実施例で用いる各種テーブル構
成の説明を終る。
【0076】以下、これらのテーブルを生成/参照する
各種処理の説明を順に行なう。図15は、同型命令認識
処理21のフローチャート図である。同型命令認識処理
は、中間語3を逐次走査し、同型命令を検出したら同型
命令テーブルに登録することで、同型命令情報テーブル
5を生成する。中間語の走査は、命令語に相当する中間
語の単位ノードである命令ノードで行なう。以下、その
手順を説明する。
【0077】先ず、未処理命令ノードopがあるか否か
を判定(ステップ1501)し、未処理命令ノードがな
くなるまで、ステップ1502以下の処理を行なう。未
処理命令ノードopがある場合には、先ず、opの命令
種別をopnとする(ステップ1502)。そして、o
pnが一括命令化が可能な命令種別であるか否かを判定
する(ステップ1503)。
【0078】一括命令化が可能な種別でないときは、ス
テップ1501に進み、次の未処理命令ノードの処理を
行なう。ステップ1503でyesのときは、命令種別
がopnであるエントリ(これをopneとする)が既
に登録されているかどうかを調べ(ステップ150
4)、未登録ならば、opneを新規に作成、登録する
(ステップ1505)。
【0079】次に、命令ノードテーブル52に新規エン
トリopeを作成し、opを登録する(ステップ150
6)。具体的には、opの命令種別opn、リーフノー
ド個数、リーフノード集合、命令ノード位置を、それぞ
れ、命令種別欄522、リーフノード個数欄523、リ
ーフノード集合欄524、命令ノード位置欄525に格
納する。尚、リーフノード集合は、演算結果やオペラン
ドを順に並べたもので、命令ノードopの末端にあるノ
ードであるリーフノード(変数や定数を示すノード)を
調べることで、容易に得られる。リーフノード集合に
は、命令種別に応じた必要な数だけのシンボル番号が格
納される。最後に、ステップ1506で作成した命令ノ
ードエントリを同型命令テーブルのエントリopeの同
型命令集合に加える(ステップ1507)。
【0080】図8は、図6で示された一括命令化前中間
語31を入力とし、上記の処理を行なった結果を示す同
型命令テーブルの例となっている。例えば、エントリ5
15は、図6の106行と118行を同型命令として認
識した結果を示している。また、図9は、図6で示され
た一括命令化前中間語31を入力とし、上記の処理を行
なった結果を示す命令ノードテーブル52の例となって
いる。例えば、エントリ526は、図6の106行に対
応している。
【0081】図16は、一括命令テーブル生成処理22
1のフローチャート図である。一括命令テーブル生成処
理は、一括化命令ノード集合aonsを求め、それを一
括化情報命令テーブル6に登録することで達成される。
一括化命令ノード集合aonsは、一括命令化する命令
ノードの集合であり、命令ノードテーブル52のエント
リ番号の形式で表現される。同型命令テーブル51の各
エントリが、一括命令化の候補集合を表しているのに対
し、一括命令テーブルは、実際に一括命令化を行なう命
令ノード集合を保持している。
【0082】尚、以下では、aonsに属する命令ノー
ドの数をnm、aonsに属する命令ノードのリーフノ
ード数をnkとする。また、aonsのm番目の命令ノ
ードをaons[m]、aons[m]のk番目のリー
フノードをaons[m][k]と表記する。また、a
onsのリーフノード集合を、aons<k>と表記す
る。リーフノード集合は、aonsの各命令ノードのk
番目のリーフノードを集めたもので、 aons<k>={aons[m][k]|mはaon
sの全ての命令ノード番号} である。従って、リーフノード集合は、nk個存在す
る。
【0083】例えば、nj=nk=2のときは、 aons<0>={aons[0][0],aons
[1][0]} aons<1>={aons[0][1],aons
[1][1]} のように、2つのリーフノード集合が構成できる。
【0084】以上の表記を用いて、一括命令テーブル生
成処理の説明をする。先ず、一括命令エントリ番号iを
0で初期化する(ステップ1601)。次に、同型命令
テーブルの未処理エントリを検索し、これをeとする
(ステップ1602)。そして、同型命令ノード集合i
onsを、eの命令ノード集合欄の値で初期化する(ス
テップ1603)。また、eの一括命令個数欄から、e
の一括化命令個数nmを取得する(ステップ160
4)。ここで、一括化同型命令個数mを0で、一括化同
型命令集合aonsを空で初期化(ステップ1605)
する。そして、ionsに未処理命令ノードonがある
かどうかを判定(ステップ1606)する。未処理命令
ノードonがあるときは、onが一括命令化可能である
かどうかを判定する(ステップ1607)。この一括命
令化の可能性判定は、ionsの全ノードが、onのノ
ード位置ndpに移動可能か等により判定するが、本発
明には直接関係しないので詳細は略す。
【0085】ステップ1607で一括命令化が不可能と
判断されたときは、ステップ1606に進み、次の未処
理命令ノードonの一括命令化を試みる。一括命令化可
能なときは、aonsにonを加え(ステップ160
8)、mをインクリメント(ステップ1609)する。
【0086】そして、一括化命令数nmとmを比較(ス
テップ1610)し、まだ一括命令化の余地があるかど
うかを判定する。mがnmと等しくないときは、ステッ
プ1606以下により、さらに一括命令化を進める。そ
れ以外の場合は、一括命令エントリの登録を行なう。即
ち、iをインクリメントして新規一括命令エントリを作
成(ステップ1611)し、aonsを一括化命令ノー
ド集合欄へ格納する(ステップ1612)。その後、ス
テップ1605に進み、ionsの未処理命令ノードの
一括命令化処理を反復実行する。mが、一括化命令数n
mに達しなかった場合は、ステップ1611の登録が行
なわれず、一括命令化は行なわれない。同型命令テーブ
ルの全てのエントリに対し、ステップ1603以下の処
理を実行すれば、一括命令テーブル生成処理は完了す
る。
【0087】図10は、図8及び図9で示された同型情
報テーブル5を入力とし、上記の処理を行なった結果を
示す一括命令テーブル61の例となっている。例えば、
エントリ617は、図8のエントリ515を一括命令と
したものである。
【0088】図17は、一括変数テーブル生成処理22
2のフローチャート図である。一括変数テーブル生成処
理は、一括命令テーブルの各エントリにある一括命令ノ
ード集合から一括変数テーブルを生成する。
【0089】最初に、一括変数エントリ番号jを0で初
期化する(ステップ1701)。次に、未処理一括命令
エントリaoeがあるかどうかを判定(ステップ170
2)し、存在する間はステップ以下を反復実行する。先
ず、aoeのリーフノード個数をnk(ステップ170
3)、一括命令ノード個数をnm(ステップ170
4)、一括命令ノード集合をaons(ステップ170
5)とする。そして、リーフノード番号kを0で初期化
(ステップ1706)後、kを制御変数とする反復処理
を行なう。
【0090】先ず、aonsのk番リーフノード集合a
ons<k>を求める(ステップ1707)。そして、
k番リーフノード集合aons<k>が、一括変数テー
ブルに未登録か否かを判定する(ステップ1708)。
この判定は、一括変数要素集合欄がaons<k>と一
致する一括変数エントリがあるかどうかで容易に判定で
きる。既登録の場合は、その登録エントリ番号をjkと
し(ステップ1712)て、ステップ1713に進む。
未登録の場合は、新規シンボルテーブルエントリasy
mを作成登録する(ステップ1709)。そして、新規
一括変数エントリjeを作成し、jをインクリメントし
てjk=jとする(ステップ1710)。そこで、je
の一括変数要素集合欄にaons<k>を格納する(ス
テップ1711)。
【0091】一括変数の登録エントリ番号jkが定まっ
たところで、aoeのリーフノード集合欄にjkを追加
する(ステップ1713)。そして、kをインクリメン
ト(ステップ1714)後、kとリーフノード個数nk
が等しいかどうかを判定(ステップ1715)する。等
しくない場合は、ステップ1707以下を反復実行す
る。ステップ1715の判定でyesとなったとき、a
oeに関する一括変数の登録が完了する。
【0092】図11は、図8及び図9で示された同型情
報テーブル5を入力とし、上記の処理を行なった結果を
示す一括変数テーブル62の例となっている。例えば、
エントリ624は、x0とx1を要素シンボルとする一
括変数mxを示している。(mxに関しては、図18を
参照。) 図18は、一括変数生成後のシンボルテーブル4の例で
ある。エントリ番号17から24が、図17のステップ
1709により作成した一括変数シンボルである。例え
ば、エントリ47は、エントリ45とエントリ46を一
括変数化したものである。
【0093】以上で、一括情報テーブル生成処理22の
説明を終える。一括情報テーブル生成処理22が終る
と、メモリ割り当て処理9を行なう。メモリ割り当て処
理9に関しては、図3の説明で述べたので、ここでは述
べない。
【0094】図12は、図4のプログラム例に対し、図
3の方法でメモリ割り当てを行なった結果を示すメモリ
配置テーブル8の例となっている。オフセット欄を見る
と、メモリの割り当ては、一括変数テーブルのエントリ
順となっており、一括変数化されたシンボルが先にメモ
リを割り当てられていることが分かる。実際、メモリ割
り当ては、エントリ86、エントリ87の順に割り当て
られている。
【0095】図19は、図12のメモリ割り当て結果を
説明のために図式化したメモリ配置図である。メモリ配
置図は、シンボルテーブルの記憶域欄に示されているメ
モリ位置を、アドレス順に並べて図示したものである。
図に示されているように、一括変数のメモリ位置は、全
て連続領域となっている。例えば、一括変数mxの構成
要素である要素シンボルx0、x1は、符合191、1
92で示された領域に割り当てられている。この例で
は、全ての一括変数の要素シンボルが、連続領域に割り
当てられていることが分かる。
【0096】次に、一括化コード変換処理23について
説明する。図20は、一括化変換テーブル生成処理23
1のフローチャート図である。一括化コード変換テーブ
ル生成処理は、一括命令テーブル61の各エントリにあ
る命令ノード集合から、一括化変換テーブル7を生成す
る。
【0097】先ず、未処理一括命令エントリaoeがあ
るかどうかを判定(ステップ2001)し、存在する間
はステップ2002以下を反復実行する。aoeに対す
る処理では、先ず、一括命令ノード集合をaons(ス
テップ2003)、一括命令ノード個数をnm(ステッ
プ2004)、リーフ一括変数個数をnk(ステップ2
005)とする。
【0098】ここで、新規一括化命令変換エントリac
eを作成(ステップ2005)し、ステップ2006以
下で各欄に値を設定する。そのため、命令ノード番号m
を制御変数とした反復処理により、全ての命令ノードに
対するステップ2007以下の処理を行なう。即ち、命
令ノード番号mを0で初期化(ステップ2006)後、
mをインクリメント(ステップ2015)してmとnm
の一致判定を行ない(ステップ2016)、一致しない
時はステップ2007以下の反復処理、一致した時はス
テップ2001に進む。
【0099】個々の命令ノードに対する処理では、全て
のリーフノードに対する反復処理を行なう。即ち、リー
フノード番号kを0で初期化(ステップ2007)後、
kをインクリメント(ステップ2013)してkとnk
の一致判定を行ない(ステップ2014)、一致しない
時はステップ2008以下の反復処理、一致した時はス
テップ2015に進む。
【0100】リーフノードに対する処理では、k番目の
リーフ一括変数をavkとして(ステップ2008)、
avkの要素(シンボル)変数が連続配置かどうかを判
定する(ステップ2009)。連続配置の場合は、ac
eの一括命令化フラグをTとして(ステップ201
2)、ステップ2013に進む。
【0101】連続配置でない場合は、aceの一括命令
化フラグをFとして(ステップ2010)、変換コード
テーブルエントリを作成する。即ち、一括変数の変換に
必要な変換コードエントリ集合ateを作成し、それを
aceの変換コード集合欄に加える(ステップ201
1)。尚、変換コードエントリ集合ateの生成方法の
詳細については、本発明と直接関係がないので詳しくは
述べない。図28にその例を挙げるにとどめる。
【0102】以上の処理により、図12で示したのメモ
リ配置テーブル8を入力として生成した一括情報テーブ
ル7の例が、図13及び図14である。尚、一括命令ノ
ードの生成位置は、一括変数生成が終った位置から、一
括変数が最初に参照される位置の間なら何処でも良い。
そこで、簡単のため、個別命令の内、最後の個別命令の
直後の位置とした。
【0103】図21は、一括化中間語変換処理232の
フローチャート図である。一括化中間語変換処理は、一
括命令化命令変換テーブル71を使って、中間語中の同
型命令を、一括命令に変換する。処理手順としては、一
括命令化変換テーブルを順に参照しながら行なう。先
ず、未処理一括命令化変換エントリaceがあるかどう
かを判定(ステップ2101)し、存在する間はステッ
プ2102以下を反復実行する。aceに対する処理
は、一括変数変換処理(ステップ2102からステップ
2105)、一括命令変換処理(ステップ2106から
ステップ2114)、に大別される。以下順に説明す
る。
【0104】先ず、aceの変換コード集合cts(ス
テップ2102)とする。ここで、全ての変換コードエ
ントリに対するステップ2103以下の処理を行なう。
即ち、ctsに未処理変換コードエントリctがあるか
どうかを判定(ステップ)し、存在する間は、ctから
変換コードcctを作成(ステップ2104)し、ct
のノード一覧で指定された位置にcctを挿入する(ス
テップ2105)。ステップ2103で、未処理変換コ
ードエントリがなくなったら、一括変数変換処理を終了
し、一括命令変換処理に移る。先ず、aceの一括命令
化フラグをfとする(ステップ2106)。次に、fが
Tと等しいか(即ち、一括命令化可能であるかどうか)
を判定(ステップ2107)し、等しくない場合は、ス
テップ2101に進む。等しい場合は、一括命令変換処
理を行なう。
【0105】一括命令変換処理では、先ず、aceと同
じエントリ番号の一括命令エントリaoeを求める(ス
テップ2108)。次に、aoeの一括命令ノード個数
をnm(ステップ2109)、aoeの一括命令ノード
集合をaons(ステップ2110)とする。そして、
命令ノード番号mを制御変数として反復処理により、一
括化される命令ノードの削除を行なう。即ち、mを0で
初期化(ステップ2111)後、aonsのm番目の命
令ノードを削除(ステップ2112)する。その後、m
をインクリメント(ステップ2113)して、mとnm
の一致判定(ステップ2114)を行なう。一致しない
場合は、ステップ2112へ進んで反復処理を行なう。
一致した場合は、全ての一括化する命令ノードを削除し
たことになるので、aoeから一括命令を作成して、中
間語に挿入する(ステップ1215)。この一括命令ノ
ードの生成も容易なので、詳細は略する。
【0106】図22は、図13及び図14で示された一
括化変換テーブルを用いて、図21の手順により、図6
で示した一括命令化前の中間語31を変換した、一括命
令化後の中間語32の例である。一括命令化の例として
は、例えば、図6の102行と114行は、図22の1
03行へと変換されている。図6から図22への変換に
おいては、全ての同型命令が一括変数化されていること
が分かる。また、一括変数変換は行なわれず、一括命令
変換のみが行なわれている。
【0107】以上で、本実施例の説明を終える。次に、
本発明の効果を示すため、従来技術におけるメモリ割り
当て方法について述べる。
【0108】図23は、従来技術におけるメモリ割り当
てと一括命令化の処理手順を示すフローチャート図であ
る。
【0109】従来技術においては、メモリ割り当て処理
93を行なった後に、同型命令認識処理21以下の一括
命令化処理を行なっている。また、メモリ割り当て処理
は、一般シンボルメモリ割り当て92のみで行なってお
り、シンボルテーブルに登録された順にメモリを割り当
てることになる。尚、同型命令認識処理21以下の一括
命令化処理は、本発明の場合と同じである。
【0110】図24は、従来技術におけるメモリ割り当
てと一括命令化処理の処理構成図である。図4と比べる
と、メモリ割り当て処理9の入力がシンボルテーブルの
みになっていることが分かる。このように、従来技術に
おいては、一括命令化の情報がメモリ割り当てを決定す
ることはない。
【0111】図25は、従来技術におけるメモリ割り当
て処理の結果を示すメモリ配置テーブル8の例である。
即ち、図18で示したシンボルテーブル4を入力とし
て、図23で示したメモリ割り当て処理93が生成した
メモリ配置テーブル8の例である。メモリ割り当て処理
は、一般シンボルメモリ割り当て92のみで行なってお
り、シンボルテーブルに登録された順にメモリを割り当
てていることがわかる。
【0112】図26は、従来技術の方法によるメモリ割
り当て結果を説明するためのメモリ配置図である。即
ち、図25で示されたメモリ配置テーブルの割り当て結
果を図式化したものとなっている。一括変数mxの要素
シンボルであるx0(261)とx1(262)は連続
領域にないことが分かる。
【0113】図27及び図28は、従来技術の方法によ
り生成された一括化変換テーブル7の例である。即ち、
図25で示したメモリ配置テーブル8を入力として、図
20で示した一括化変換テーブル生成処理が生成した一
括化命令変換テーブル71及び変換コードテーブル72
の例である。
【0114】図13と比べると、変換コード集合が増え
ていることがわかる。一括命令番号1、2、3、6のメ
モリアクセス命令(ロード命令とストア命令)に対し、
一括変数変換を行なうための変換コードが必要となって
いるわけである。また、これらのエントリに関しては、
一括命令化フラグもFとなっており、命令ノードを一括
化することも出来ないことが分かる。例えば、図27の
エントリ717では、変換コード番号1と2の2つの変
換コードが必要なことがわかる。これらの変換コード
は、図28のエントリ728、729で示されている。
図14では、エントリが存在しなかったが、多くの変換
コードが必要となっていることが分かる。
【0115】図29は、従来技術の方法により生成され
た一括命令化後中間語32の例である。即ち、図27及
び図28で示した一括化変換テーブル7を入力として、
図21で示した一括化中間語変換処理が生成した一括化
後中間語32の例である。図22と比べて、命令ノード
の数が多いことが分かる。例えば、図28の符合728
で示したエントリに対応するコードが、115行に挿入
されている。
【0116】本実施例の中間語は、オブジェクトプログ
ラムの命令語と直接1対1に対応する形式で記述してい
る。従って、一括命令化後中間語32の命令数は、その
ままオブジェクトプログラムの処理性能に対応する。即
ち、図22は、図29に比べて、高速な処理となってい
る。このように、従来技術において生成される中間語の
命令ノードを本発明の方法により削減することができ
る。
【0117】
【発明の効果】本発明によれば、コンパイラは、メモリ
割り当て処理に先だって、同型命令と変数の関係を登録
したテ−ブルから一括命令化に必要な一括化情報テーブ
ルを生成している。メモリ割り当て処理は、この一括化
情報テーブルを参照することで、一括変数に対して、連
続領域への割り当てが可能となる。これにより、一括命
令化を行なう際に、一括変数変換コードの生成を抑制す
ることが可能である。即ち、中間語上での命令コード数
を削減することができ、オブジェクトプログラムの処理
性能の向上に寄与する。
【図面の簡単な説明】
【図1】本発明を実施するコンパイラが稼働する計算機
システムの構成図である。
【図2】本発明を実施するコンパイラの処理手順を示す
フローチャート図である。
【図3】コンパイラのメモリ割り当てと一括命令化処理
2のフローチャート図である。
【図4】本発明におけるコンパイラのメモリ割り当てと
一括命令化処理2の処理構成図である。
【図5】ソースプログラムの例である。
【図6】一括命令化前の中間語31の構成例である。
【図7】一括命令化前のシンボルテーブル4の例であ
る。
【図8】同型命令テーブル51の例である。
【図9】命令ノードテーブル52の例である。
【図10】一括命令テーブル61の例である。
【図11】一括変数テーブル62の例である。
【図12】本発明によるメモリ配置テーブル8の例であ
る。
【図13】本発明による一括化命令変換テーブル71の
例である。
【図14】本発明による変換コードテーブル72の例で
ある。
【図15】同型命令認識処理21のフローチャート図で
ある。
【図16】一括命令テーブル生成処理221のフローチ
ャート図である。
【図17】一括変数テーブル生成処理222のフローチ
ャート図である。
【図18】一括変数生成後のシンボルテーブル4の例で
ある。
【図19】本発明によるメモリ割り当て結果を示すメモ
リ配置図である。
【図20】一括化変換テーブル生成処理231のフロー
チャート図である。
【図21】一括化中間語変換処理232のフローチャー
ト図である。
【図22】本発明による一括命令化後の中間語32の例
である。
【図23】従来技術によるメモリ割り当てと一括命令化
処理のフローチャート図である。
【図24】従来技術によるメモリ割り当てと一括命令化
処理の処理構成図である。
【図25】従来技術によるメモリ配置テーブル8の例で
ある。
【図26】従来技術によるメモリ配置図である。
【図27】従来技術による一括化命令変換テーブル71
の例である。
【図28】従来技術による変換コードテーブル72の例
である。
【図29】従来技術による一括命令化後の中間語32の
例である。

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】複数のデータに対する同種命令を一括処理
    する一括命令を備えたアーキテクチャに対する目的プロ
    グラムを生成する際に、 a)複数の命令から一括命令情報を生成し、 b)前記一括命令情報を利用して各種変数のメモリ配置
    を決定することを特徴とする一括命令生成コンパイル方
    法。
  2. 【請求項2】前記ステップa)は、 a1)複数の命令から同型命令を認識して同型命令情報
    を生成し、 a2)前記同型命令情報に基づいて、一括命令として実
    行可能な単位に分けた一括命令情報を生成することを特
    徴とする請求項1記載の一括命令生成コンパイル方法。
  3. 【請求項3】前記ステップa2)は、さらに、 前記一括命令情報から一括命令のオペランドや演算結果
    となる一括変数情報を生成することを特徴とする請求項
    2記載の一括命令生成コンパイル方法。
  4. 【請求項4】前記一括変数情報は、一括変数と一括変数
    化される一括化要素変数の対応情報を含むことを特徴と
    する請求項3記載の一括命令生成コンパイル方法。
  5. 【請求項5】前記ステップb)において、 一括変数化される一括化要素変数を連続メモリ領域に割
    り当てることを特徴とする請求項3記載の一括命令生成
    コンパイル方法。
  6. 【請求項6】前記ステップb)において、 前記一括変数と一括変数化される要素変数の対応情報を
    用いて、一括化要素変数を連続メモリ領域への割り当て
    ることを特徴とする請求項4及び5記載の一括命令生成
    コンパイル方法。
  7. 【請求項7】前記ステップa2)は、さらに、 前記一括命令情報に従って命令から一括命令を生成する
    際に、一括変数化される一括化要素変数の記憶域の連続
    性を判断することを特徴とする請求項3記載の一括命令
    生成コンパイル方法。
  8. 【請求項8】前記連続領域判定の結果に従ってメモリの
    連続領域から複数データをロードする一括ロード命令を
    生成することを特徴とする請求項7記載の一括命令生成
    コンパイル方法。
  9. 【請求項9】前記連続領域判定の結果に従ってメモリの
    連続領域に複数データをストアする一括ストア命令を生
    成することを特徴とする請求項7記載の一括命令生成コ
    ンパイル方法。
  10. 【請求項10】複数のデータに対する同種命令を一括処
    理する一括命令を備えたアーキテクチャに対する目的プ
    ログラムを生成する際に、 a)複数の命令から同型命令を認識して同型命令情報を
    生成し、 b)前記同型命令情報に基づいて、一括命令として実行
    可能な単位に分けた一括命令情報を生成し、 c)前記同型命令情報を持つ割り当て対象を連続メモリ
    に割り当てた後、前記同型命令情報を持たない割り当て
    対象を一般メモリに割り当てることを特徴とする一括命
    令生成コンパイル方法。
JP28491996A 1996-10-28 1996-10-28 一括命令生成コンパイル方法 Pending JPH10133885A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP28491996A JPH10133885A (ja) 1996-10-28 1996-10-28 一括命令生成コンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP28491996A JPH10133885A (ja) 1996-10-28 1996-10-28 一括命令生成コンパイル方法

Publications (1)

Publication Number Publication Date
JPH10133885A true JPH10133885A (ja) 1998-05-22

Family

ID=17684763

Family Applications (1)

Application Number Title Priority Date Filing Date
JP28491996A Pending JPH10133885A (ja) 1996-10-28 1996-10-28 一括命令生成コンパイル方法

Country Status (1)

Country Link
JP (1) JPH10133885A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009223572A (ja) * 2008-03-14 2009-10-01 Internatl Business Mach Corp <Ibm> 変換装置、サーバシステム、変換方法およびプログラム
JP2011165216A (ja) * 2004-06-24 2011-08-25 Intel Corp 複数の入力命令をベクトル化する方法及び装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011165216A (ja) * 2004-06-24 2011-08-25 Intel Corp 複数の入力命令をベクトル化する方法及び装置
JP2009223572A (ja) * 2008-03-14 2009-10-01 Internatl Business Mach Corp <Ibm> 変換装置、サーバシステム、変換方法およびプログラム
US8645382B2 (en) 2008-03-14 2014-02-04 International Business Machines Corporation Converter, server system, conversion method and program

Similar Documents

Publication Publication Date Title
Agerwala Microprogram optimization: A survey
US9081626B2 (en) Method and apparatus for converting software
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
JPH07234790A (ja) プログラム変換処理装置およびプログラム変換処理方法
US6636884B2 (en) Method and system for controlling parallel execution of jobs
JP2898105B2 (ja) コンパイル中にソフトウェア・スケジューリング技術を用いてハードウェアのパイプライン処理の中断を最小化する方法
JP3318051B2 (ja) 翻訳処理方法
JPH10133885A (ja) 一括命令生成コンパイル方法
US11635947B2 (en) Instruction translation support method and information processing apparatus
JPH11345127A (ja) コンパイラ
JP3726992B2 (ja) 一括関数呼出化方法
JPH07105013A (ja) レジスタ割り付け方式
JPS6365530A (ja) コ−ド最適化方式
Bloom Structure of a direct high-level language processor
JPH02140825A (ja) プログラムの再配置処理方法
CN115373689A (zh) 基于llvm的编译优化方法、装置、设备及介质
JPH07105014A (ja) 言語処理システムのシンボル処理方式
JPH0689187A (ja) インライン展開最適化方法
JP2001159983A (ja) 共通式認識型命令スケジューリング方法
JP2754866B2 (ja) データ駆動形計算機用オブジエクトコード生成装置
JPH05197565A (ja) 定数領域割り付け処理方法
JP2848609B2 (ja) 論理回路変換方法及び装置
JPH03109642A (ja) コンパイル装置
JP2003337707A (ja) コンパイラおよびリスト構造データを処理するループの高速化方法
JPS63142411A (ja) コマンド文脈理解装置