JPH11232118A - 一括関数呼出化方法 - Google Patents

一括関数呼出化方法

Info

Publication number
JPH11232118A
JPH11232118A JP3441798A JP3441798A JPH11232118A JP H11232118 A JPH11232118 A JP H11232118A JP 3441798 A JP3441798 A JP 3441798A JP 3441798 A JP3441798 A JP 3441798A JP H11232118 A JPH11232118 A JP H11232118A
Authority
JP
Japan
Prior art keywords
function
call
batch
collective
information
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
JP3441798A
Other languages
English (en)
Other versions
JP3726992B2 (ja
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
Real World Computing Partnership
Original Assignee
Hitachi Ltd
Real World Computing Partnership
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, Real World Computing Partnership filed Critical Hitachi Ltd
Priority to JP03441798A priority Critical patent/JP3726992B2/ja
Publication of JPH11232118A publication Critical patent/JPH11232118A/ja
Application granted granted Critical
Publication of JP3726992B2 publication Critical patent/JP3726992B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 コンパイラの関数呼出オーバヘッド削減手段
としてインライン展開がある。しかし、インライン展開
の適用により関数呼出をなくすことができても、キャッ
シュミスの機会が増える等の理由により、適用できない
場合がある。インライン展開処理が適用できないとき、
関数呼出オーバヘッドを削減する手段がなく処理性能の
向上の妨げとなっている。インライン展開が適用できな
い場合にも、呼出オーバヘッドの削減を行い、オブジェ
クトプログラムの処理性能の向上を図ることが可能な一
括関数呼出化方法を提供することを目的としている。 【解決手段】 複数回の同一関数の処理を一度に実行す
る一括関数を生成し、複数回の同一関数の呼出を、1回
の一括関数の呼出に置き換える一括化呼出生成手段を設
けたことを特徴としている。これにより、インライン展
開によらない呼出オーバヘッドの削減手段を設けること
ができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコンパイラなどのプ
ログラム変換技術に係わり、特に、関数呼出機構を持つ
言語に対して、関数および関数呼出の関係を解析して関
数情報および呼出情報として生成するプログラム変換の
際の一括関数呼出化方法に関する。
【0002】
【従来の技術】高級言語によるプログラミングでは、関
数(手続きとも呼ばれるが、以降では関数で統一する)
による構造化を行うのが一般的である。関数は、一連の
処理をまとめてパラメータ化して記述したもの(以下、
これを関数定義と呼ぶ)で、それを呼出す(以下単に呼
出と呼ぶ)ことにより関数定義内の処理を実現できる。
関数定義側のパラメータには、仮引数、返却変数(以
下、仮返数と呼ぶ)があり、関数定義内の記述では、仮
引数・仮返数(以下、仮パラメータと呼ぶ)を使って処
理を記述する。呼出側のパラメータには、実引数、返却
変数(以下、実返数と呼ぶ)があり、呼出側の変数/式
を使ってパラメータの指定を行う(この呼出インタフェ
ースとなる変数/式を実パラメータと呼ぶ)。尚、以下
では、仮パラメータと実パラメータを総称して、インタ
フェース変数/式と呼ぶ。実パラメータには様々な値を
指定することが可能で、これにより同様の処理(=関数
定義)を繰り返し実行することができる。
【0003】このように、関数はプログラミング上便利
な機構である一方で、呼出時にオーバヘッドがかかると
いう問題点を抱えている。即ち、引数の受け渡しや、呼
出時のスタックポインタの更新/退避回復、命令ジャン
プに伴うキャッシュミスの可能性の増大といったことに
より、処理性能の低下を招く。特に、処理内容が簡単な
関数を反復呼出する場合には、呼出オーバヘッドは性能
上無視できないものとなる。
【0004】このような状況に対処するため、高級言語
では、インライン展開の機能を備えている場合が多い。
インライン展開は、関数呼出を関数の定義本体の内容で
置き換え、呼出を抑止するものである。具体的には、各
呼出点で、関数定義の内容を展開し、仮パラメータを実
パラメータで置き換えることにより実現する。インライ
ン展開に関しては、佐々 政孝著岩波講座ソフトウェア
科学5「プログラミング言語処理系」( 岩波書店、1
989)のpp.450―451に詳しい。
【0005】
【発明が解決しようとする課題】インライン展開は、高
級言語における呼出オーバヘッド削減のほとんど唯一の
手段である。しかし、インライン展開の適用によりコー
ドサイズが大きくなり過ぎると、キャッシュミスの機会
が増え、かえって性能が低下する場合もある。そのた
め、大きな関数の呼出や、呼出個所が多い場合には、イ
ンライン展開を制限するのが普通である。即ち、コード
量の極端な増加を伴う場合には、インライン展開による
呼出オーバヘッドの削減は行うことができない。すなわ
ち、従来技術においては、インライン展開が適用できな
い場合に、呼出オーバヘッドの削減を行う手段がないと
いう課題があった。本発明の目的は、インライン展開に
よらない呼出オーバヘッドの削減手段を設けることによ
り、インライン展開が適用できない場合にも、呼出オー
バヘッドの削減を行い、オブジェクトプログラムの処理
性能の向上を図ることが可能な一括関数呼出化方法を提
供することにある。
【0006】
【課題を解決するための手段】インライン展開は、各呼
出点で関数定義の処理内容を展開し、(その呼出点で
の)呼出を除去する。従って、インライン展開の適用の
有無は、各呼出点の呼出回数を0とするか否かを判断す
ることになる。複数回の同一関数の呼出の場合、インラ
イン展開が適用できない場合でも、関数定義側に複数呼
出分の処理を展開すれば、コードサイズを極端に増大さ
せることなく、呼出回数を削減することが可能である。
即ち、複数回の同一関数の処理を一度に実行する一括関
数を生成し、複数回の同一関数の呼出を、1回の一括関
数の呼出に置き換える一括化呼出生成手段を設けること
で、インライン展開によらない呼出オーバヘッドの削減
手段を設けることができる。これにより、インライン展
開が適用できない場合にも、呼出オーバヘッドの削減を
行うことが可能となり、オブジェクトプログラムの処理
性能の向上に寄与する。
【0007】
【発明の実施の形態】本発明は、同一関数の複数呼び出
しを、一括処理する一括関数の呼び出しに変換する方式
に関するものである。以下では、本発明の1実施例を図
面を用いて説明する。尚、本発明は、ソースプログラム
から変換後のソースプログラムを生成する場合にも、コ
ンパイラが中間語から変換後の中間語に変換する場合に
も、同様に適用可能であるが、実施例としてコンパイラ
に適用した場合(但し、中間語は同等なソースプログラ
ムの形式で示す)を説明することにする。
【0008】図1は、本発明のコンパイル方法を実施す
るコンパイラが動作する計算機システムの構成図であ
る。計算機システムは、CPU101、ディスプレイ装
置102、キーボード103、主記憶装置104、外部
記憶装置105より構成されている。キーボード103
より、ユーザからのコンパイラ起動命令を受け付ける。
コンパイラ終了メッセージや、エラーメッセージは、デ
ィスプレイ装置102に表示される。外部記憶装置10
5には、ソースプログラム106とオブジェクトプログ
ラム107が格納される。主記憶装置104には、コン
パイラ108があり、コンパイル過程で必要となる中間
語3、関数情報テーブル4、呼出情報テーブル5、一括
呼出情報テーブル6、一括関数情報テーブル7が格納さ
れる。コンパイル処理は、CPU101によって、制御
される。
【0009】図2に本実施例のコンパイラの処理手順を
示す。構文解析201では、ソースプログラム106を
入力として字句構文解析を行ない、中間語3を出力す
る。ループ展開処理202は中間後3を入力とし、反復
処理を展開して反復回数を低減するループ展開を行い、
中間語3を出力する。一括関数化処理2は、中間語3を
入力とし、複数の関数呼び出しを一括命令関数呼び出し
に変換する一括関数化処理を行ない、中間語3を出力す
る。コード生成処理203は、中間語を最終的なオブジ
ェクトプログラム107の形式に変換する。尚、ループ
展開202は、本発明の適用機会を増やすため望ましい
処理であるが、必須の処理ではない。
【0010】図3は、本発明における関数呼出一括化方
法の1実施例を示すフローチャート図であり、図2の関
数呼出一括化処理2の手順を表している。先ず、関数情
報テーブル生成処理21により、ソースプログラム中の
関数定義の各種情報を抽出し、関数情報テーブル4を作
成する。同様に、呼出情報テーブル生成処理22によ
り、関数呼出に関する情報を抽出し、呼出情報テーブル
5を生成する。
【0011】次に、一括呼出情報テーブル生成処理23
により、呼出情報テーブル5から複数の同一関数呼出を
一括処理する一括関数に関する情報を抽出し、一括関数
情報テーブル6を生成する。この一括呼出情報テーブル
生成処理23は、同一関数呼出に関する情報を抽出する
同型呼出抽出処理230と、同型呼出集合から一括呼出
化可能な呼出を抽出する一括呼出抽出処理231、抽出
した一括呼出を一括呼出情報テーブルに登録する一括呼
出情報テーブル登録処理232からなる。各処理に関し
ては図17から図23で詳しく述べる。
【0012】次に、一括関数生成処理24により、一括
関数情報テーブル7に基づき、中間後3に一括関数を生
成する。最後に、一括呼出化変換処理25により、一括
呼出情報テーブル6に基づき、中間語3中の関数呼出を
一括関数呼出に変換する。
【0013】図4は、図3で示した関数呼出一括化関連
処理と、入出力となる中間語やテーブル類の関係を示し
た処理構成図である。但し、中間語3は全般的に参照す
るため入出力関係は、主要なもののみを示した。関数情
報テーブル生成処理21は、一括関数呼出化前中間語3
1を入力とし、関数定義の情報を格納した関数情報テー
ブル4を生成する。関数情報テーブル4は、関数の一覧
を格納する関数テーブル41と、関数のインタフェース
となる仮引数および仮返数の情報を格納する仮パラメー
タテーブル42から成る。呼出情報テーブル生成処理2
2は、一括呼出化前中間語31を入力とし、関数呼出の
情報を格納した呼出情報テーブル5を生成する。呼出情
報テーブル5は、関数呼出の一覧を格納する呼出テーブ
ル51と、関数呼出のインタフェースとなる実引数およ
び実返数の情報を格納する実パラメータテーブル52か
ら成る。
【0014】一括呼出化情報テーブル生成処理23は、
呼出情報テーブル5を入力とし、一括呼出化可能な関数
呼出の情報を格納した一括呼出情報テーブル6と、一括
呼出される関数定義の情報を格納した一括関数情報テー
ブル7を生成する。一括呼出情報テーブル6は、一括呼
出化可能な呼出の一覧を格納する一括呼出テーブル61
と、一括呼出のインタフェースとなる実引数および実返
数の情報を格納する実パラメータテーブル62から成
る。同様に、一括関数情報テーブル7は、一括呼出化さ
れる関数定義の一覧を格納する一括関数テーブル71
と、一括関数のインタフェースとなる仮引数および仮返
数の情報を格納する仮パラメータテーブル72から成
る。
【0015】一括関数生成処理24は、一括呼出化前中
間語31と一括関数情報テーブル7を入力とし、一括呼
出化後中間語32に一括関数を生成する。一括呼出化変
換処理25は、一括呼出化前中間語31と一括呼出情報
テーブル6を入力とし、一括呼出化前中間語31の関数
呼出を一括関数呼出に変換し、一括呼出化後中間語32
に生成する。
【0016】次に、具体的な適用例の説明のため、処理
対象たるソースプログラムの例を挙げておく。図5は、
本発明の一実施例の説明のためのソースプログラム例
(C言語で書かれたプログラム例)である。本実施例に
おいて、中間語3はソースプログラムと同等の情報を有
しており特別に中間語の形式である必要はない。そこ
で、中間語3の例示に当たっては、ソースプログラムの
形式で記述するものとする。従って、図5はソースプロ
グラム例であるとともに、(一括呼出化前の)中間語3
1の例ともなっている。また、図2の説明でも述べたと
おり、本実施例では(本質的には不要な)ループ展開を
行っている。図5では、ループ展開は適用されていない
が、ループ展開後に同一関数の呼出が生成される場合に
も、一般性を失うことなく適用できる。図5のプログラ
ム例では、関数f、g、mainの3関数があり、関数
mainが関数gを1回、関数gが関数fを2回呼び出
している。17行と20行の関数fの呼出が、一括呼出
可能な関数である。
【0017】図6は、図5のソースプログラム例に対す
る一括関数呼出化後のソースプログラム例であり、一括
関数呼出化後中間語32に対応している。図6では、図
5にはなかった一括関数Fが新たに生成されている(3
0行から36行)。また、図5では関数gは関数fを2
回呼び出していたが、図6では一括関数Fの呼出1回
(16行)となっている。即ち、関数fの2回の呼出を
一括関数Fの一回の呼出に変換しており、一括呼出化変
換を行った結果の例である。
【0018】以降では、一括関数呼出化処理2の細部の
説明を行なう。説明にあたっては、図5の中間語を入力
例とし、各種テーブルの出力例を逐次示していく。そこ
で、先ず、各種テーブルの構成例を説明してから、処理
手順の説明を行なう。以下、関数情報テーブル4、呼出
情報テーブル5、一括呼出情報テーブル6、一括関数情
報テーブル7の順にその構成例を述べる。
【0019】図7は、図5の例に対して求めた関数テー
ブル41の構成例である。関数テーブルは、プログラム
中に出現する関数定義毎に、エントリが作成される。各
関数には、一意な関数番号が付与されており、その関数
番号により各エントリがアクセス可能となっている。各
エントリは、関数番号欄411、関数名称欄412、定
義行番号欄413、仮返数欄414、仮引数集合欄41
5、呼出集合欄416で構成される。
【0020】関数番号欄411には、関数テーブルのエ
ントリ番号、関数名称欄412には、対応する関数の名
称が格納される。定義行番号欄413には、当該関数の
中間語3での関数定義情報が格納される。この定義行番
号欄により、対応する関数定義の全ての情報を得ること
ができる。例えば、関数の各種インタフェース情報の取
得や、関数定義本体の読み出し/複写等も可能である。
本実施例では、図7で示したように、ソースプログラム
の行番号の形式で示してある。仮返数欄414および仮
引数集合欄415は、当該関数の仮返数および仮引数の
情報が、仮パラメータテーブル42のエントリ番号の形
式で格納される。呼出集合欄416は、当該関数中に存
在する関数呼出の情報が、呼出テーブル51のエントリ
番号の形式で格納される。
【0021】図8は、図5の例に対して求めた仮パラメ
ータテーブル42の構成例である。仮パラメータテーブ
ルは、関数テーブル41の関数インタフェース情報を格
納するための補助テーブルである。仮返数や仮引数毎
に、エントリが作成され、そのエントリ番号が関数テー
ブル41の仮返数欄や仮引数集合欄に格納される。各エ
ントリは、仮パラメータ番号欄421、仮パラメータ位
置番号欄422、仮パラメータ型欄423、仮パラメー
タ変数欄424で構成される。
【0022】仮パラメータ番号欄421には、仮パラメ
ータテーブルのエントリ番号が格納される。仮パラメー
タ位置番号欄422には、当該仮パラメータの出現位置
が番号で示してある。仮返数の位置番号は0、i番めの
仮引数は位置番号iとなる。仮パラメータ型欄423に
は、仮パラメータの型情報が格納される。仮パラメータ
変数欄424には、対応する仮パラメータの名称が格納
される。
【0023】図9は、図5の例に対して求めた呼出テー
ブル51の構成例である。呼出テーブルは、プログラム
中に出現する関数呼出毎に、エントリが作成される。各
エントリは、呼出番号欄511、呼出行番号欄512、
呼出関数番号欄513、実返数欄514、実引数集合欄
515で構成される。
【0024】呼出番号欄511には、呼出テーブルのエ
ントリ番号、呼出行番号欄512には、対応する関数呼
出の行番号が格納される。呼出関数番号欄513には、
当該呼出が呼び出す関数が、関数テーブル41の関数番
号が格納される。実返数欄514および実引数集合欄5
15は、当該呼出の実返数および実引数の情報が、実パ
ラメータテーブル52のエントリ番号の形式で格納され
る。
【0025】図10は、図5の例に対して求めた実パラ
メータテーブル52の構成例である。実パラメータテー
ブルは、呼出テーブル51の呼出インタフェース情報を
格納するための補助テーブルである。実返数や実引数毎
に、エントリが作成され、そのエントリ番号が呼出テー
ブル51の実返数欄や実引数集合欄に格納される。各エ
ントリは、実パラメータ番号欄521、実パラメータ位
置番号欄522、実パラメータ式欄522で構成され
る。
【0026】実パラメータ番号欄521には、実パラメ
ータテーブルのエントリ番号が格納される。実パラメー
タ位置番号欄522には、当該実パラメータの出現位置
が番号で示してある。実返数の位置番号は、(仮パラメ
ータテーブル42の仮パラメータ位置番号欄422と同
様に)0、i番めの実引数は位置番号iとなっている。
実パラメータ式欄523には、対応する実パラメータの
名称が格納される。
【0027】図11は、図5の例に対して求めた一括呼
出テーブル61の構成例である。一括呼出テーブルは、
一括関数の(一括)呼出毎に、エントリが作成される。
各エントリは、一括呼出番号欄611、生成元呼出集合
欄612、一括関数番号欄613、実返数名称欄61
4、実返数型欄615、実返数集合欄616、実引数集
合欄617で構成される。
【0028】一括呼出番号欄611には、一括呼出テー
ブルのエントリ番号が格納される。生成元呼出集合欄6
12には、一括呼出化する呼出の集合が、呼出テーブル
51のエントリ番号の形式で格納される。一括関数番号
欄613には、当該一括呼出が呼び出す一括関数が、一
括関数テーブル71のエントリ番号(一括関数関数番
号)で格納される。実返数名称欄614および実返数型
欄615には、返数の名称および返数の型が格納され
る。実返数集合欄616および実引数集合欄617は、
当該一括呼出の実返数および実引数の情報が、一括実パ
ラメータテーブル62のエントリ番号の形式で格納され
る。
【0029】図12は、図5の例に対して求めた一括実
パラメータテーブル62の構成例である。一括実パラメ
ータテーブルは、一括呼出テーブル61の呼出インタフ
ェース情報を格納するための補助テーブルである。実返
数や実引数毎に、エントリが作成され、そのエントリ番
号が一括呼出テーブル61の実返数欄や実引数集合欄に
格納される。各エントリは、一括実パラメータ番号欄6
21、一括実パラメータ位置番号欄622、生成元実パ
ラメータ番号欄623、変換前名称欄624、変換後名
称欄625で構成される。
【0030】一括実パラメータ番号欄621には、一括
呼出実パラメータテーブルのエントリ番号が格納され
る。一括実パラメータ位置番号欄622には、当該実パ
ラメータの出現位置が番号で示してある。生成元呼出集
合欄623には、一括化する呼出が、呼出テーブル51
のエントリ番号の集合形式で格納される。変換前名称欄
724には、生成元呼出における実パラメータ名称、変
換後名称欄725には、一括呼出化後の(一括)実パラ
メータ名称がそれぞれ格納される。尚、変換前名称欄7
24と変換後名称欄725は、実返数に対してのみ有効
な欄である(実引数に関しては、常に空白となる)。
【0031】図13は、図5の例に対して求めた一括関
数テーブル71の構成例である。一括関数テーブルは、
一括化関数生成を行う関数毎に、エントリが作成され
る。各関数には、一意な一括関数番号が付与されてお
り、その一括関数番号により各エントリがアクセス可能
となっている。各エントリは、一括関数番号欄711、
一括関数名称欄712、一括化係数欄713、生成元関
数番号欄714、仮返数型欄715、仮返数名称欄71
6、仮返数集合欄717、仮引数数集合欄718で構成
される。
【0032】一括関数番号欄711には、一括関数テー
ブルのエントリ番号、一括関数名称欄712には、生成
する一括関数の名称が格納される。一括化係数欄713
には、何回の呼出を一括化するかの個数が格納される。
生成元関数番号欄714には、一括化する関数が関数テ
ーブル41の関数番号の形式で格納される。仮返数型欄
715および仮返数名称欄716には、返数の型および
返数の名称が格納される。仮返数集合欄717および仮
引数集合欄718は、当該一括関数の仮返数および仮引
数の情報が、一括仮パラメータテーブル72のエントリ
番号の形式で格納される。
【0033】図14は、図5の例に対して求めた一括仮
パラメータテーブル72の構成例である。一括仮パラメ
ータテーブルは、一括関数テーブル71の関数インタフ
ェース情報を格納するための補助テーブルである。仮返
数や仮引数毎に、エントリが作成され、そのエントリ番
号が一括関数テーブル71の仮返数集合欄や仮引数集合
欄に格納される。各エントリは、一括仮パラメータ番号
欄721、生成元仮パラメータ番号欄722、一括仮パ
ラメータ位置番号欄723、反復番号欄724、変換前
名称欄725、変換後名称欄726で構成される。
【0034】一括仮パラメータ番号欄721には、一括
仮パラメータテーブルのエントリ番号が格納される。生
成元仮パラメータ番号欄722には、生成元関数の対応
する仮パラメータが、仮パラメータテーブル42の仮パ
ラメータ番号の形式で格納される。一括仮パラメータ位
置番号欄723には、当該仮パラメータの出現位置が番
号で示してある。一括仮パラメータ位置番号は、仮返数
と仮引数は独立に数えられ、i番めの仮返数/仮引数は
位置番号iとなる。
【0035】反復番号欄724には、一括化の際に何番
めの関数の仮パラメータであったかが格納される。この
反復番号は0から数え始め、一括化係数がnのときn−
1までの番号が付与されることになる。変換前名称欄7
25には、生成元関数における仮パラメータ名称、変換
後名称欄726には、一括関数化後の(一括)仮パラメ
ータ名称がそれぞれ格納される。以上で、本実施例で用
いる各種テーブル構成の説明を終る。
【0036】以下、これらのテーブルを生成/参照する
各種処理の説明を順に行なう。図15は、関数情報テー
ブル生成処理21のフローチャート図である。関数情報
テーブル生成処理は、中間語3を逐次走査し、関数定義
を検出したらその関数定義情報を収集・登録した関数情
報テーブル4を生成する。以下、その手順を説明する。
【0037】先ず、関数番号fi、仮パラメータ番号f
piを0で初期化する(ステップ1501)。次に、未
処理関数があるか否かを判定(ステップ1502)し、
未処理関数がなくなるまで、ステップ1503以下の処
理を行なう。未処理関数fがある場合には、先ず、関数
エントリFを生成し、関数番号fiをインクリメントす
る(ステップ1503)。以下、ステップ1504以降
でこの関数エントリFに関数fの関数情報を格納する。
【0038】先ず、fの定義行番号をfl、関数名をf
nとする(ステップ1504)。次に、仮パラメータ集
合FPSを求めるため、FPSを空集合で初期化する
(ステップ1505)。そして、未処理仮パラメータが
あるか否かを判定(ステップ1506)し、未処理仮パ
ラメータがなくなるまで、ステップ1507以下の処理
を行なう。未処理仮パラメータfpがある場合には、仮
パラメータエントリFPを生成し、仮パラメータ番号f
piをインクリメントする(ステップ1507)。
【0039】次に、fpの仮パラメータ情報を仮パラメ
ータテーブル42に格納(ステップ1508)し、その
エントリ番号fpiを仮パラメータ集合FPSに加える
(ステップ1509)。以下、未処理仮パラメータがな
くなるまで、ステップ1506からステップ1509を
反復実行する。尚、ステップ1508は仮パラメータ情
報である、仮パラメータ番号、仮パラメータ位置、仮パ
ラメータ種別、仮パラメータ型、仮パラメータ名称をエ
ントリFPに格納するが、詳細は略す(図8の仮パラメ
ータテーブル42の説明を参照)。
【0040】ステップ1506の判定がnoとなった時
点で、仮パラメータ集合FPSの収集が終わるので、F
に全ての関数情報を格納(ステップ1510)して、次
の未処理関数判定(ステップ1502)を行う。全ての
関数を処理し終わった時点で処理を終了する。
【0041】図7および図8は、図5で示されたソース
プログラムに対し、上記の処理を行なった結果を示す関
数情報テーブルの例となっている。例えば、エントリ4
17は、図5の003行から008行までで定義されて
いる関数fの情報が格納されている。また、仮返数欄に
より、名称rで仮パラメータ位置0(=仮返数)、仮パ
ラメータ型がintである仮返数があることが分かる。
【0042】図16は、呼出情報テーブル生成処理22
のフローチャート図である。呼出情報テーブル生成処理
は、中間語3を逐次走査し、関数呼出を検出したらその
呼出情報を収集・登録した呼出情報テーブル5を生成す
る。以下、その手順を説明する。
【0043】先ず、呼出番号ci、実パラメータ番号a
piを0で初期化する(ステップ1601)。次に、未
処理関数があるか否かを判定(ステップ1602)し、
未処理関数がなくなるまで、ステップ1603以下の処
理を行なう。未処理関数fがある場合には、先ず、その
関数エントリをFとし(ステップ1603)、呼出集合
CSを空集合で初期化する(ステップ1604)。次
に、fに未処理の関数呼出があるか否かを判定(ステッ
プ1605)し、存在する場合には、ステップ1606
以降で呼出情報の登録を行う。呼出情報の登録に当たっ
ては、先ず、呼出エントリCを生成し、呼出番号ciを
インクリメントする(ステップ1606)。次に、呼出
行番号cl、呼出関数番号fiを求める(ステップ16
07)。尚、呼出関数番号fiの取得は、関数情報テー
ブル41を検索することで容易に実現できる(関数情報
テーブルに存在しない場合には空欄としておき、一括化
対象から外す)。
【0044】次に、実パラメータ集合APSを求めるた
め、APSを空集合で初期化する(ステップ160
8)。そして、未処理実パラメータがあるか否かを判定
(ステップ1609)し、未処理実パラメータがなくな
るまで、ステップ1610以下の処理を行なう。即ち、
未処理実パラメータapがある場合には、実パラメータ
エントリAPを生成し、実パラメータ番号apiをイン
クリメント(ステップ1610)後、apの実パラメー
タ情報を実パラメータテーブル52に格納(ステップ1
611)し、そのエントリ番号apiを実パラメータ集
合APSに加える(ステップ1612)。尚、ステップ
1611は、実パラメータ情報である、実パラメータ番
号、実パラメータ位置番号、実パラメータ式をエントリ
APに格納するが、詳細は略す(図14の実パラメータ
テーブル52の説明を参照)。
【0045】ステップ1609の判定がnoとなった時
点で、実パラメータ集合APSの収集が終わるので、C
に全ての呼出情報を格納(ステップ1613)する
(実パラメータ集合APSは、実返数と実引数を合わせ
たもので、呼出情報テーブルの実返数欄と実引数欄に格
納する)。その後、 CSにciを加え(ステップ16
14)、次の未処理呼出判定(ステップ1605)を行
う。ステップ1605の判定がnoとなった段階で、関
数fにおける全ての呼出を処理し終わるので、Fの呼出
集合欄にCSを格納(ステップ1615)し、次の未処
理関数の判定(ステップ1602)に進む。全ての関数
を処理し終わった時点で処理を終了する。
【0046】図9および図10は、図5のソースプログ
ラムの例に対し、上記の処理を行なった結果を示す呼出
情報テーブル5の例となっている。例えば、図9のエン
トリ516は、17行目の関数fの呼出情報を格納した
ものである。この呼出では、実引数として(p*p,q
*q)を渡し、実返数r1に返却値が格納されることが
分かる。
【0047】図17は、一括呼出化情報テーブル生成処
理23のフローチャート図である。一括呼出化情報テー
ブル生成処理は、呼出情報テーブル51を逐次走査し、
一括呼出化可能な呼出を検出したら、その一括呼出情報
を収集・登録した一括呼出情報テーブル6および一括関
数情報テーブル7を生成する。以下、その手順を説明す
る。
【0048】先ず、一括呼出番号aci、一括実パラメ
ータ番号aapi、一括関数番号afi、一括実パラメ
ータ番号afpiを0で初期化する(ステップ170
1)。次に、未処理関数エントリがあるか否かを判定
(ステップ1702)し、未処理関数エントリがなくな
るまで、ステップ1703以下の処理を行なう。未処理
関数エントリFがある場合には、先ず、その呼出集合を
CSとする(ステップ1703)。
【0049】次に、CSから同一関数の呼出の集合であ
る同型呼出集合SCSの抽出処理(ステップ1704か
らステップ1711)に移る。この同型呼出集合SCS
の抽出処理は、図3のステップ230に相当する。先
ず、CSをワーク集合WCSに格納し、SCSを空集合
で初期化する(ステップ1704)。次に、CSに未処
理の呼出エントリCがあるか否かを判定(ステップ17
05)し、存在する場合には、Cの呼出番号ciと呼出
関数番号fiを取得(ステップ1706)し、WCSか
らciを除く(ステップ1707) 。次に、WCSに
未処理エントリWCがあるかどうかを判定(ステップ1
708)し、存在する場合には、WCの呼出番号wci
と呼出関数番号wfiを取得(ステップ1709)す
る。そして、fiとwfiの一致判定(ステップ171
0)により、同一関数の呼出であるかを調べる。同一関
数である場合には、SCSにwciを加えて(ステップ
1711)からステップ1708に進む。
【0050】ステップ1708で全てのワーク呼出集合
の要素を判定した時点で、同型呼出集合SCSの抽出が
完了する。ここで、SCSが複数要素を持つか否かを判
定(ステップ1712)し、複数存在する場合にのみ、
一括呼出化情報抽出処理(ステップ231。詳細は図1
8を参照)を実行し、ステップ1705以降で次の同型
呼出集合SCSの処理に進む。ステップ1705で全エ
ントリを処理したら、ステップ1702に進み、次の関
数エントリを処理する。全ての関数エントリを処理しお
わった時点で、一括呼出化情報テーブル生成処理を終了
する。
【0051】図18は、一括呼出化情報抽出処理231
のフローチャート図である。一括呼出化情報抽出処理
は、与えられた同型呼出集合SCSから、一括呼出化可
能な呼出を集めた一括呼出集合ASCSを抽出し、一括
呼出情報テーブル6および一括関数情報テーブル7を生
成する。以下、その手順を説明する。先ず、SCSに未
処理の呼出エントリSCがあるか否かを判定(ステップ
1801)し、存在する場合には、Cの呼出番号sci
を取得(ステップ1802)する。次に、SCSをワー
ク集合WSCSに格納し、ASCSを空集合で初期化
(ステップ1803)後、WSCSからsciを除く
(ステップ1804) 。次に、WSCSに未処理エン
トリWSCがあるかどうかを判定(ステップ1805)
し、存在する場合には、WSCの呼出番号wsciを取
得(ステップ1806)する。
【0052】そして、sciとwsciが一括呼出化可
能であるかを判定(ステップ1807)し、可能である
場合には、ASCSにwsciを加える(ステップ18
08)。尚、この一括呼出化の可能性判定は、wsci
の呼出が、sciの呼出行番号の位置に移動可能か等に
より判定するが、本発明には直接関係しないので詳細は
略す。その後、ステップ1805に進み、次のWSCの
要素を調べる。ステップ1805で全てのワーク呼出集
合WSCSの要素を判定した時点で、一括化呼出集合A
SCSの抽出が完了する。ここで、ASCSが複数要素
を持つか否かを判定(ステップ1809)し、複数存在
する場合にのみ、一括呼出化情報登録処理(ステップ2
32。詳細は図19を参照)を実行する。次に、SCS
からASCSを除き(ステップ1810)、ステップ1
801以降で次の同型呼出集合SCSの要素の処理に進
む。ステップ1801で全エントリを処理しおわった時
点で、一括呼出化情報抽出処理を終了する。
【0053】図19は、一括呼出化情報登録処理232
のフローチャート図である。一括呼出化情報登録処理
は、与えられた一括呼出集合ASCSから、一括呼出情
報テーブル6および一括関数情報テーブル7を生成す
る。以下、その手順を説明する。先ず、一括呼出エント
リACを作成して、aciをインクリメント(ステップ
1901)後、ASCSをACの生成元呼出集合欄に格
納する(ステップ1902)。次に、ASCSの(任意
の要素の)呼出関数番号をci、要素数をafkとする
(ステップ1903)。そして、 ASCSから変数と
なる型artを生成(ステップ1904)し、ACの返
数型欄に格納(ステップ1905)する。尚、 art
は、本実施例では配列型としたが、生成元呼出集合の全
ての返数が表現できる型であれば何でもよい。 その生
成方法は、本発明にとって本質的ではないので詳細は略
す。
【0054】次に、一意な名称acnを生成し、ACの
実返数名称欄に格納(ステップ1906)後、一括呼出
実引数登録処理(ステップ233。詳細は図20)、一
括呼出実返数登録処理(ステップ234。詳細は図2
1)を行って、一括呼出情報テーブルへの登録を完了す
る。
【0055】次に、一括関数情報テーブルへの登録を行
う。先ず、一括関数エントリAFを作成して、afiを
インクリメントする(ステップ1911)。次に、ar
tをAFの返数型欄に格納(ステップ1912)する。
次に、一意な名称afnを生成し、AFの仮返数名称欄
に格納(ステップ1913)後、一括化係数欄にafk
を格納する(ステップ1914)。最後に、一括関数仮
引数登録処理(ステップ235。詳細は図22)、一括
関数仮返数登録処理(ステップ236。詳細は図23)
を行って、一括関数情報テーブルへの登録を完了する。
以上で、一括呼出情報テーブルと一括関数情報テーブル
への登録が完了するので、一括化呼出情報登録処理を終
了する。
【0056】図20は、一括呼出実返数登録処理233
のフローチャート図である。一括呼出実返数登録処理
は、一括呼出テーブルの各エントリにある生成元呼出集
合から一括実パラメータテーブル62を生成し、一括呼
出テーブル61の一括呼出実返数集合欄616に登録す
る。以下、その手順を説明する。先ず、一括呼出実返数
集合AARSを空集合で初期化する(ステップ200
1)。また、一括呼出実返数位置番号aaprも0で初
期化する(ステップ2002)。
【0057】そして、ACの生成呼出元集合をACS
(ステップ2003)として、ACSに未処理の呼出C
が存在かを判定(ステップ2004)し、存在するとき
は、ステップ2005からステップ2013を反復実行
する。この反復処理では、Cの実返数集合をARS(ス
テップ2005)とし、ARSに未処理の実返数ARが
存在かを判定(ステップ2006)し、存在するとき
は、ステップ2007からステップ2012を反復実行
する。この反復処理では、先ず、aaprをインクリメ
ントする(ステップ2007)。次に、ARの実パラメ
ータ番号と名称を、それぞれari、arnとする(ス
テップ2008)。次に、一括呼出実返数名称aarn
を生成(ステップ2009)する。次に、一括呼出実パ
ラメータエントリAAPを生成し、aapiをインクリ
メント(ステップ2010)する。
【0058】次に、AAPに一括呼出実返数情報を登録
(ステップ2011)後、AARSにaariを加える
(ステップ2012)。ステップ2006の判定でno
となったとき、全ての実返数の処理が終了するので、A
ARSをACの一括呼出実返数集合欄に格納(ステップ
2013)後、次のACSの処理を行う。ACSの全て
の呼出エントリを処理し終えた時点で、一括呼出実返数
登録処理233が終了する。
【0059】図21は、一括呼出実引数登録処理234
のフローチャート図である。一括呼出実引数登録処理
は、一括呼出テーブルの各エントリにある生成元呼出集
合から一括実パラメータテーブル62を生成し、一括呼
出テーブル61の一括呼出実引数集合欄617に登録す
る。以下、その手順を説明する。
【0060】先ず、一括呼出実引数集合AAASを空集
合で初期化する(ステップ2101)。また、一括呼出
実引数位置番号aapaも0で初期化する(ステップ2
102)。そして、ACの生成呼出元集合をACS(ス
テップ2103)として、ACSに未処理の呼出Cが存
在かを判定(ステップ2104)し、存在するときは、
ステップ2105からステップ2113を反復実行す
る。この反復処理では、Cの実引数集合をAPS(ステ
ップ2105)とし、APSに未処理の実引数APが存
在かを判定(ステップ2106)し、存在するするとき
は、ステップ2107からステップ2112を反復実行
する。この反復処理では、先ず、aapaをインクリメ
ントする(ステップ2107)。
【0061】次に、APの実パラメータ番号と名称を、
それぞれapi、apnとする(ステップ2108)。
次に、一括呼出実引数名称aapnを生成(ステップ2
109)する。次に、一括呼出実パラメータエントリA
APを生成し、aapiをインクリメント(ステップ2
110)する。次に、AAPに一括呼出実引数情報を登
録(ステップ2111)後、AAASにaapiを加え
る(ステップ2112)。ステップ2106の判定でn
oとなったとき、全ての実引数の処理が終了するので、
AAASをACの一括呼出実返数集合欄に格納(ステッ
プ2013)後、次のACSの処理を行う。ACSの全
ての呼出エントリを処理し終えた時点で、一括呼出実引
数登録処理234が終了する。
【0062】図11および図12は、図9および図10
で示された呼出情報テーブル5を入力とし、図20およ
び図21の処理を行なった結果を示す一括呼出情報テー
ブル6の例となっている。例えば、図11のエントリ6
18は、図9に示された呼出テーブル51のエントリ5
16とエントリ517の呼出が一括呼出化可能であるこ
とを示している。この一括呼出は、実引数として(p*
p,q*q,p*q ,q*p )を渡し、型がintの
配列である実返数arfに返却値を格納すればよいこと
が分かる。
【0063】図22は、一括関数仮返数登録処理235
のフローチャート図である。一括関数仮返数登録処理
は、一括関数テーブルの各エントリにある生成元関数番
号と一括化係数から、一括仮パラメータテーブル72を
生成し、一括関数テーブル71の一括関数仮返数集合欄
717に登録する。以下、その手順を説明する。先ず、
一括関数仮返数集合AFRSを空集合で初期化する(ス
テップ2201)。また、一括関数仮返数位置番号af
prも0で初期化する(ステップ2202)。次に、A
Fの一括化係数をafk、AFの生成元関数エントリを
Fとする(ステップ2203。両者は、既に一括呼出化
常用登録処理で算出済み)。さらに、反復回数iを0で
初期化(ステップ2204)後、 iがafkと等しい
かどうかを判定(ステップ2205)することで、iが
afkと等しくなるまで、 ステップ2206からステ
ップ2212を反復実行する。この反復処理では、先
ず、iをインクリメントする(ステップ2206)。次
に、afprをインクリメントする(ステップ220
7)。
【0064】次に、AFの仮パラメータ番号と名称を、
それぞれfpi、fpnとする(ステップ2208)。
次に、一括関数仮返数名称afpnを生成(ステップ2
209)する。次に、一括関数仮パラメータエントリA
FPを生成し、afpiをインクリメント(ステップ2
210)する。次に、AFPに一括関数仮返数情報を登
録(ステップ2211)後、AFRSにafpiを加え
る(ステップ2212)。ステップ2205の判定でn
oとなったとき、AFRSをAFの一括関数仮返数集合
欄に格納(ステップ2213)し、一括関数仮返数登録
処理235が終了する。
【0065】図23は、一括関数仮引数登録処理236
のフローチャート図である。一括関数仮引数登録処理
は、一括関数テーブルの各エントリにある生成元関数番
号と一括化係数から、一括仮パラメータテーブル72を
生成し、一括関数テーブル71の一括関数仮引数集合欄
718に登録する。以下、その手順を説明する。先ず、
一括関数仮引数集合AFASを空集合で初期化する(ス
テップ2301)。また、一括関数仮引数位置番号af
paも0で初期化する(ステップ2302)。次に、A
Fの一括化係数をafk、AFの生成元関数エントリを
Fとする(ステップ2303。両者は、既に一括呼出化
常用登録処理で算出済み)。
【0066】さらに、反復回数iを0で初期化(ステッ
プ2304)後、 iがafkと等しいかどうかを判定
(ステップ2305)することで、iがafkと等しく
なるまで、 ステップ2306からステップ2315を
反復実行する。この反復処理では、先ず、 iをインク
リメントする(ステップ2206)。次に、Fの仮引数
集合をFAS(ステップ2307)とし、FASに未処
理の仮引数FAが存在かを判定(ステップ2308)
し、存在するするときは、ステップ2309からステッ
プ2314を反復実行する。この反復処理では、先ず、
afpaをインクリメントする(ステップ2309)。
次に、AFの仮パラメータ番号と名称を、それぞれfp
i、fpnとする(ステップ2310)。
【0067】次に、一括関数仮引数名称afpnを生成
(ステップ2311)する。次に、一括関数仮パラメー
タエントリAFPを生成し、afpiをインクリメント
(ステップ2312)する。次に、AFPに一括関数仮
引数情報を登録(ステップ2313)後、AFASにa
fpiを加える(ステップ2314)。ステップ230
8の判定でnoとなったとき、全ての仮引数の処理が終
了するので、AFASをAFの一括関数仮引数集合欄に
格納(ステップ2315)後、次の反復処理を行う。i
とafkが一致するまで、一括化係数分反復実行した時
点で、一括関数仮引数登録処理236が終了する。
【0068】図13および図14は、図7から図10に
示された関数情報テーブル4および呼出情報テーブル5
を入力とし、図17から図23の処理を行なった結果を
示す一括関数情報テーブル7の例となっている。例え
ば、図13のエントリ719は、図7に示された関数テ
ーブル41のエントリ417を、一括化係数2で一括関
数化したものであることを示している。この一括関数
は、仮引数として(x0,y0,x1,y1 )を渡さ
れ、型がintの配列である仮返数frfを返却する。
以上で、一括呼出化情報テーブル生成処理23の説明を
終える。一括呼出化情報テーブル生成処理23の後、一
括化関数生成処理24、一括呼出化変換処理25を行
う。以下順に説明する。
【0069】図24は、一括関数生成処理24のフロー
チャート図である。一括関数生成処理は、一括関数情報
テーブル7の各エントリから、中間語3中に一括関数を
生成する。以下、その手順を説明する。未処理の一括関
数エントリAFがあるかどうかを調べ(ステップ240
1)、存在する全ての一括関数エントリに対し、ステッ
プ2402以下の処理を行う。先ず、AFの生成元関数
番号をfi、AFの一括化係数をafkとする(ステッ
プ2402)。次に、AFの仮返数集合AFRSから、
一括関数仮返数定義を生成する(ステップ2403)。
次に、AFの仮引数集合AFASから、一括関数仮引数
定義を生成する(ステップ2404)。以上で、一括関
数の呼出インタフェースの生成が完了するので、次に、
ステップ2406からステップ2413で一括関数本体
を生成する。
【0070】先ず、定義部反復回数mを0で初期化(ス
テップ2405)後、fiの定義部FBをコピーする
(ステップ2406)。次に、このコピーされた領域F
B中の仮パラメータの変換を行う。先ず、AFの仮返数
集合AFRSと仮引数集合AFASの和集合を一括関数
仮パラメータ集合AFPSとする(ステップ240
7)。AFPSに未処理の仮パラメータエントリAFP
があるか否かを判定(ステップ2408)し、存在する
場合はステップ2409以降で仮パラメータの変換を行
う。
【0071】先ず、AFPの変換前名称をbcn、変換
後名称をacnとする(ステップ2409)。次に、F
Bに出現する名称bcnをacnに変換する(ステップ
2410)後、さらに次の仮パラメータの変換のため、
ステップ2408に進む。AFPSの全要素の処理が終
わったら、mをインクリメント(ステップ2411)
し、一括化係数afkと一致するか否かを判定する(ス
テップ2412)。一致しない間は、ステップ2406
に進み反復実行し、mがafkと一致したら、AFの仮
返数名称を用いて一括関数仮返数返却を生成(ステップ
2413)し、ステップ2401に進んで次の一括関数
エントリの処理を行う。全ての一括関数エントリの処理
が終わった時点で、一括関数生成処理が終了する。
【0072】図6は、図13および図14に示された一
括関数情報テーブル7を入力とし、図24の処理を行な
った結果を示す(ソースプログラム形式による)中間語
の例となっている。図6の30行から36行に、図13
のエントリ719で示された一括関数が生成されてい
る。32行には、一括関数仮返数定義が、35行には一
括関数仮返数返却分が、それぞれ生成されている。
【0073】図25は、一括呼出化変換処理25のフロ
ーチャート図である。一括呼出化変換処理は、一括呼出
情報テーブル6を使って、中間語3中の一括化可能同型
呼出を、一括呼出に変換する。以下、その手順を説明す
る。未処理の一括呼出エントリACがあるかどうかを調
べ(ステップ2501)、存在する全ての一括呼出エン
トリに対し、ステップ2502以下の処理を行う。先
ず、ACの実返数名称から、一括呼出実返数定義を生成
する(ステップ2502)。次に、ACの生成元呼出集
合をCS、ACの実返数集合をAAPSとする(ステッ
プ2503)。次に、CSの任意の要素Cを取り出し、
呼出関数番号fiを取得する(ステップ2504)。
【0074】次に、Cの呼出行番号から一括呼出生成位
置acpを決定する(ステップ2505)。この一括呼
出生成位置は、一括呼出化の可能性の判定により保証さ
れた場所ならば、何処でもよいが、本実施例では、便宜
上、最初の呼出位置の直前とする。次に、ACから一括
呼出を作成し、acpに生成する(ステップ250
6)。尚、一括呼出の作成は、一括呼出実返数名称、一
括関数番号、一括呼出実引数集合により容易に作成でき
るので、詳細は略す。次に、CSに未処理の呼出エント
リCがあるかどうかを判定(ステップ2507)し、存
在する場合は、Cの呼出行番号を見て呼出を削除する
(ステップ2508)。
【0075】CSの全ての呼出を削除したら、AARS
に未処理の一括呼出実引数エントリAARがあるかどう
かを判定(ステップ2509)し、存在する場合には、
ステップ2510からステップ2511で、実返数の変
換を行う。AARの変換前名称をbcn、変換後名称を
acn(ステップ2510)とし、fiの関数本体領域
に出現するbcnをacnに変換する(ステップ251
1)。ステップ2509の判定のnoとなったとき、全
ての一括呼出実返数の変換が終わり、ACに関する変換
処理が終了する。その後、ステップ2501に進み、次
の一括呼出エントリの一括呼出化変換処理を行う。全て
の一括呼出エントリの処理が終わった時点で、一括呼出
化変換処理が終了する。
【0076】図6は、図13および図14に示された一
括呼出情報テーブル6を入力とし、図25の処理を行な
った結果を示す(ソースプログラム形式による)中間語
の例となっている。図5の17行と21行の2つの関数
呼出が、図6では16行の一括呼出へと変換されてい
る。また、14行には、一括呼出実返数定義生成されて
いる。本実施例によれば、関数呼出の回数を低減するに
より、呼出オーバヘッドの削減を行うことが可能とな
り、オブジェクトプログラムの処理性能の向上に寄与す
る。
【0077】図26に本発明の他の本実施例のコンパイ
ラの処理手順を示す。図26は、ループ展開時に一括関
数呼出化する第2の実施例と、ループ並列化時に一括関
数呼出化する第3の実施例に共通のコンパイラの処理手
順である。構文解析201とコード生成処理203は図
のそれと同様なので説明は省略する。ループ展開ないし
ループ並列化と一括関数呼出化処理205は中間後3を
入力とし、反復処理を直列/並列展開するループ展開/
ループ並列化を行い、一括関数呼出化変換を行った中間
語3を出力する。ループ展開の場合が第2実施例、ルー
プ並列化の場合が第3実施例となる。尚、処理の大部分
とテーブル構成等は、第1の実施例と同様であるため、
以下では、概略のみを説明する。
【0078】図27は、本発明の第2の実施例であるル
ープ展開時に一括関数呼出化する場合の図26のステッ
プ205の処理手順を示すフローチャート図である。以
下順に説明する。先ず、関数情報テーブル生成処理27
01により、ソースプログラム中の関数定義の各種情報
を抽出し、関数情報テーブル4を作成する。次に、未処
理のループLが存在するか否かを判定(ステップ270
2)し、存在する場合にはステップ2703からステッ
プ2710までを反復実行する。この反復処理では、先
ずLがループ展開可能であるかどうかを判定(ステップ
2704)し、存在する場合にはステップ2705から
ステップ2710までを反復実行する。
【0079】この反復処理では、先ずLをn回ループ展
開を行う(ステップ2704)。次に、呼出情報テーブ
ル生成処理(ステップ2705)を行い、関数呼出に関
する情報を抽出し、呼出情報テーブル5を生成する。次
に、Lからループ展開によって生成されたn個の同一関
数の呼出を同型呼出集合SCSとする(ステップ270
6)。次に、同型呼出集合SCSから一括呼出化可能な
呼出を抽出する一括呼出抽出処理(ステップ2707)
を行い、抽出した一括呼出を一括呼出情報テーブルに登
録する(ステップ2708)。ステップ2702でno
となった時、全てのループに対して処理を終え、一括関
数生成処理(ステップ2709)、一括呼出化変換処理
(ステップ2710)を行い、処理を終了する。
【0080】尚、以下に図27のステップと図3のステ
ップの対応関係を示す。以下の各ステップの処理内容
は、括弧内で示した図3のステップと同様の処理であ
る。 ステップ2701(図3のステップ21) ステップ2705(図3のステップ22) ステップ2709(図3のステップ231) ステップ2710(図3のステップ232) ステップ2711(図3のステップ24) ステップ2712(図3のステップ25)
【0081】図28は、本発明の第2および第3実施例
の説明のためのソースプログラム例である。本実施例に
おいても、中間語3ソースプログラムの形式で記述する
ものとする。従って、図28はソースプログラム例であ
るとともに、(一括呼出化前の)中間語31の例ともな
っている。図28のプログラム例では、関数gの16行
から22行に、関数fを呼び出すループが存在する。
【0082】図29は、図27のステップ2704でル
ープ展開した段階の中間語3を、ソースプログラム形式
で表現したものである。図28の16行から22行に関
数呼出を含むループが、図29の16行から22行へと
ループ展開されている。
【0083】図30は、図27ソースプログラムを入力
とし、図26の処理を行った結果の中間語3を、ソース
プログラム形式で表現したものである。図29の16行
から22行のループ展開中の関数fの呼出が一括関数呼
出化されている。本実施例によれば、ループ展開時に一
括関数呼出化を行うため、ループ展開数に応じた効率的
な一括関数呼出化を行うことができる。
【0084】図31は、本発明の第3の実施例であるル
ープ並列化時に一括関数呼出化する場合の図26のステ
ップ205の処理手順を示すフローチャート図である。
本処理手順は、図27とほとんど同じなので説明は省略
する(ステップ3104とステップ3106が若干異な
る)。
【0085】図32は、図30のステップ2704でル
ープ並列化した段階の中間語3を、ソースプログラム形
式で表現したものである。図32の18行および19行
にある「x||y;」の記法は、xとyが並列に実行さ
れることを示している。図28の16行から22行に関
数呼出を含むループが、図32の16行から21行へと
ループ並列化されていることが分かる。
【0086】図33は、図27のソースプログラムを入
力とし、図30の処理を行った結果の中間語3を、ソー
スプログラム形式で表現したものである。図31の16
行から22行のループ並列化中の関数fの呼出が一括関
数呼出化されていることがわかる。本実施例によれば、
ループ並列化時に一括関数呼出化を行うため、ループの
並列度に応じた効率的な一括関数呼出化を行うことがで
きる。
【0087】
【発明の効果】本発明によれば、コンパイラないしソー
ス変換プログラムは、同一関数の呼出を一括関数の呼出
に変換することができる。即ち、インライン展開によら
ない呼出オーバヘッドの削減手段を提供している。、こ
れにより、インライン展開が適用できない場合にも、呼
出オーバヘッドの削減を行うことが可能となり、オブジ
ェクトプログラムの処理性能の向上に寄与する。
【図面の簡単な説明】
【図1】本発明を実施するコンパイラが稼働する計算機
システムの構成図である。
【図2】本発明を実施するコンパイラの処理手順を示す
フローチャート図である。
【図3】コンパイラの一括関数呼出化処理2のフローチ
ャート図である。
【図4】本発明におけるコンパイラの一括関数呼出化処
理2の処理構成図である。
【図5】ソースプログラムの例(一括関数呼出化前の中
間語31のソースプログラム形式による構成例)であ
る。
【図6】一括関数呼出化後の中間語32のソースプログ
ラム形式による構成例である。
【図7】関数テーブル41の構成例である。
【図8】仮パラメータテーブル42の構成例である。
【図9】呼出テーブル51の構成例である。
【図10】実パラメータテーブル52の構成例である。
【図11】一括呼出テーブル61の構成例である。
【図12】一括実パラメータテーブル62の構成例であ
る。
【図13】一括関数テーブル71の構成例である。
【図14】一括仮パラメータテーブル72の構成例であ
る。
【図15】関数情報テーブル生成処理21のフローチャ
ート図である。
【図16】呼出情報テーブル生成処理22のフローチャ
ート図である。
【図17】一括呼出化情報テーブル生成処理23のフロ
ーチャート図である。
【図18】一括呼出化情報抽出処理231のフローチャ
ート図である。
【図19】一括呼出化情報登録処理232のフローチャ
ート図である。
【図20】一括呼出実返数登録処理233のフローチャ
ート図である。
【図21】一括呼出実引数登録処理234のフローチャ
ート図である。
【図22】一括関数仮返数登録処理235のフローチャ
ート図である。
【図23】一括関数仮引数登録処理234のフローチャ
ート図である。
【図24】一括関数生成処理24のフローチャート図で
ある。
【図25】一括呼出化変換処理25のフローチャート図
である。
【図26】第2および第3実施例のコンパイラの処理手
順である。
【図27】ループ展開用一括関数呼出化処理のフローチ
ャート図である。
【図28】第2および第3実施例の説明のためのソース
プログラムの例である。
【図29】ループ展開後の中間語のソースプログラム形
式による構成例である。
【図30】ループ展開用一括関数呼出化変換後の中間語
のソースプログラム形式による構成例である。
【図31】ループ並列化用一括関数呼出化処理のフロー
チャート図である。
【図32】ループ展開後の中間語3のソースプログラム
形式による構成例である。
【図33】ループ並列化用一括関数呼出化変換後の中間
語のソースプログラム形式による構成例である。

Claims (14)

    【特許請求の範囲】
  1. 【請求項1】 関数および関数呼出の関係を解析して関
    数情報および呼出情報として生成するプログラム変換の
    際の一括関数呼出化方法であって、 同一関数の複数回の呼出を1回の呼出に変換する一括呼
    出化情報を格納する一括呼出化情報生成ステップと、 上記一括呼出化情報から、同一関数の複数回実行処理を
    一度に行う一括関数を生成する一括関数生成ステップ
    と、 上記一括呼出化情報から、同一関数の複数回の呼出を1
    回の一括関数の呼出に変換する一括呼出化変換ステップ
    を有することを特徴とする一括関数呼出化方法。
  2. 【請求項2】 請求項1に記載の一括関数呼出化方法に
    おいて、 上記一括呼出化情報生成ステップが、上記関数呼出情報
    を用いて同一関数の呼出である同型関数呼出を認識して
    同型呼出情報を生成する同型呼出認識ステップと、同型
    呼出認識ステップが生成する同型呼出呼出から一括呼出
    化可能な呼出を選択する一括呼出選択ステップを有する
    ことを特徴とする一括関数呼出化方法。
  3. 【請求項3】 請求項2に記載の一括関数呼出化方法に
    おいて、 上記一括呼出選択ステップが、上記複数の同型呼出が一
    個所の呼出点での呼出に置き換えることが可能か否かを
    判定する一括呼出化判定ステップと、上記一括呼出化判
    定ステップにより一括呼出化可能であると判定された関
    数群の一括呼出化の情報を格納する一括呼出化情報登録
    ステップを有することを特徴とする一括関数呼出化方
    法。
  4. 【請求項4】 請求項1から3のいずれか一つに記載の
    一括関数呼出化方法において、 上記一括呼出化情報が、同一関数の複数回実行処理を一
    度に行う一括関数の生成に必要な一括関数情報と、同一
    関数の複数回の呼出を1回の一括関数の呼出に変換する
    一括呼出変換に必要な一括呼出情報を備えることを特徴
    とする一括関数呼出化方法。
  5. 【請求項5】 請求項4に記載の一括関数呼出化方法に
    おいて、 上記一括呼出情報が、上記同一関数の複数回の呼出にお
    ける実引数や実返数等の生成元呼出インタフェース情報
    を備えることを特徴とする一括関数呼出化方法。
  6. 【請求項6】 請求項5に記載の一括関数呼出化方法に
    おいて、 上記一括呼出情報が、一括呼出化に生成する実引数や実
    返数等の変換後呼出インタフェース情報を備え、 上記一括呼出化変換ステップが、上記生成元呼出インタ
    フェース情報から上記変換後呼出インタフェース情報に
    に合致するような一括呼出に変換することを特徴とする
    一括関数呼出化方法。
  7. 【請求項7】 請求項4に記載の一括関数呼出化方法に
    おいて、 上記一括関数情報が、上記一括関数化される関数の仮引
    数や仮返数等の生成元関数インタフェース情報を備える
    ことを特徴とする一括関数呼出化方法。
  8. 【請求項8】 請求項7に記載の一括関数呼出化方法に
    おいて、 上記一括関数情報が、一括関数生成時に生成する仮引数
    や仮返数等の変換後関数インタフェース情報を備え、 上記一括関数生成ステップが、上記生成元関数インタフ
    ェース情報から上記変換後関数インタフェース情報に合
    致するような一括関数に変換することを特徴とする一括
    関数呼出化方法。
  9. 【請求項9】 請求項4に記載の一括関数呼出化方法に
    おいて、 上記一括呼出化情報が、一括呼出が処理する同一関数の
    呼出回数である一括化係数を備え、 上記一括呼出化情報生成ステップが一括化係数を決定
    し、上記一括関数生成ステップが生成する一括関数が実
    行する同一関数の実行回数と、上記一括呼出化変換ステ
    ップが生成する一括呼出が実行する同一関数の呼出回数
    を、共に一括化係数とすることを特徴とする一括関数呼
    出化方法。
  10. 【請求項10】 請求項9に記載の一括関数呼出化方法
    において、 上記一括呼出化情報生成ステップが決定する一括化係数
    を 一括呼出化可能な同型呼出の最大数とすることを特
    徴とする一括関数呼出化方法。
  11. 【請求項11】 請求項2に記載の一括関数呼出化方法
    において、 上記同型呼出認識ステップが、ループ展開時に生成する
    同一関数の呼出を認識してループ展開時同型呼出情報を
    生成するループ展開時同型呼出認識ステップであり、 上記一括呼選択ステップが、上記ループ展開時同型呼出
    認識ステップが生成するループ展開時同型呼出情報から
    一括呼出化可能な呼出を選択した一括呼出化情報を生成
    することを特徴とする一括関数呼出化方法。
  12. 【請求項12】 請求項9または請求項11に記載の一
    括関数呼出化方法において、 上記一括呼出化情報生成ステップが決定する一括化係数
    をループ展開数とすることを特徴とする一括関数呼出化
    方法。
  13. 【請求項13】 請求項2に記載の一括関数呼出化方法
    において、 上記同型呼出認識ステップが、ループ並列化時に生成す
    る同一関数の呼出を認識してループ並列化時同型呼出情
    報を生成するループ並列化時同型呼出認識ステップであ
    り、 上記一括呼選択ステップが、上記ループ並列化時同型呼
    出認識ステップが生成するループ展開時同型呼出情報か
    ら一括呼出化可能な呼出を選択した一括呼出化情報を生
    成することを特徴とする一括関数呼出化方法。
  14. 【請求項14】 請求項9または請求項13に記載の一
    括関数呼出化方法において、 上記一括呼出化情報生成ステップが決定する一括化係数
    をループ並列化の展開数とすることを特徴とする一括関
    数呼出化方法。
JP03441798A 1998-02-17 1998-02-17 一括関数呼出化方法 Expired - Lifetime JP3726992B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP03441798A JP3726992B2 (ja) 1998-02-17 1998-02-17 一括関数呼出化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP03441798A JP3726992B2 (ja) 1998-02-17 1998-02-17 一括関数呼出化方法

Publications (2)

Publication Number Publication Date
JPH11232118A true JPH11232118A (ja) 1999-08-27
JP3726992B2 JP3726992B2 (ja) 2005-12-14

Family

ID=12413633

Family Applications (1)

Application Number Title Priority Date Filing Date
JP03441798A Expired - Lifetime JP3726992B2 (ja) 1998-02-17 1998-02-17 一括関数呼出化方法

Country Status (1)

Country Link
JP (1) JP3726992B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111095196A (zh) * 2018-03-07 2020-05-01 欧姆龙株式会社 支持装置以及支持程序

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111095196A (zh) * 2018-03-07 2020-05-01 欧姆龙株式会社 支持装置以及支持程序
EP3764219A4 (en) * 2018-03-07 2021-12-01 Omron Corporation SUPPORT SYSTEM AND SUPPORT PROGRAM
US11221828B2 (en) 2018-03-07 2022-01-11 Omron Corporation Support device and support program
CN111095196B (zh) * 2018-03-07 2024-03-01 欧姆龙株式会社 支持装置以及记录介质

Also Published As

Publication number Publication date
JP3726992B2 (ja) 2005-12-14

Similar Documents

Publication Publication Date Title
Kalnins et al. Model transformation language MOLA
US8453126B1 (en) System and method for converting base SAS runtime macro language scripts to JAVA target language
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
JPH02109127A (ja) 仕様処理方法
US8943472B1 (en) System and method for directly accessing SAS datasets from a JAVA program
Kalnins et al. Basics of model transformation language MOLA
JP4724387B2 (ja) プログラム変換プログラム、プログラム変換装置およびプログラム変換方法
US20040010780A1 (en) Method and apparatus for approximate generation of source code cross-reference information
Castro et al. Automatically deriving cost models for structured parallel processes using hylomorphisms
JPH11232118A (ja) 一括関数呼出化方法
JP2002342078A (ja) プログラム開発システム及び方法
JPH0969041A (ja) ソフトウェア部品の作成支援方法
JP2609820B2 (ja) プログラム管理方法
JPH11272524A (ja) データ変換装置および記憶媒体
KR100353452B1 (ko) 교환시스템의 데이타 베이스 생성방법
JP3208300B2 (ja) プログラム中の物理実体の使用形式抽出方法および関連抽出方法
Hřivnáčová et al. Analysis Tools in Geant4
JPH06214777A (ja) プログラム開発方法及び装置
JP3019874B2 (ja) プログラム生成/合成装置および方法
JPH11149368A (ja) 図式編集プログラム開発方法および方式
JPH07334399A (ja) 固定長レコード向けコード変換方式
CN115373689A (zh) 基于llvm的编译优化方法、装置、设备及介质
CN117931151A (zh) 一种基于JsonPath和Spring容器数据处理的方法
JPH03141427A (ja) 標準レコード仕様情報作成方法
JPH01191233A (ja) プログラム自動生成方式

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040909

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041015

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20041213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050302

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050510

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050627

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050909

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050922

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081007

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

EXPY Cancellation because of completion of term