JPH09274570A - コンパイル方法及びコンパイラシステム - Google Patents

コンパイル方法及びコンパイラシステム

Info

Publication number
JPH09274570A
JPH09274570A JP8085543A JP8554396A JPH09274570A JP H09274570 A JPH09274570 A JP H09274570A JP 8085543 A JP8085543 A JP 8085543A JP 8554396 A JP8554396 A JP 8554396A JP H09274570 A JPH09274570 A JP H09274570A
Authority
JP
Japan
Prior art keywords
procedure
information
source program
called
procedures
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
JP8085543A
Other languages
English (en)
Inventor
Hirokazu Takada
浩和 高田
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP8085543A priority Critical patent/JPH09274570A/ja
Publication of JPH09274570A publication Critical patent/JPH09274570A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 分割コンパイル時の手続き間に係る最適化の
実効があがるコンパイラシステム及びコンパイル方法の
提供。 【解決手段】 個別にコンパイル可能なソースモジュー
ル111,112,…11n のいずれか1つをコンパイラ120 にお
いてコンパイルするとき、手続き間の呼出し関係を表す
手続き情報ファイル130 に基づきコードの最適化を当該
ソースモジュールの手続きが呼出す他のソースモジュー
ルに定義された手続きまで及ぼす。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は高級言語を用いて記
述されたソースプログラムからオブジェクトコードを生
成するコンパイラシステムに関し、特にオブジェクトコ
ードの最適化を伴う分割コンパイルを行うコンパイル方
法及びコンパイラシステムに関する。
【0002】
【従来の技術】高級言語を用いてプログラムを開発する
際に、そのプログラムを複数のソースプログラムモジュ
ール(以下ソースモジュールという)に分割して作成し
ておき、この夫々のソースモジュールをコンパイラによ
り個別にコンパイルして夫々のオブジェクトコードを生
成する分割コンパイルを行い、生成した複数のオブジェ
クトコードをリンカにより結合(リンク)してコンピュ
ータ上で実行可能なロードモジュールを作成する手法が
ある。
【0003】この分割コンパイルによって生成したオブ
ジェクトコードの機能は、同様に分割コンパイルを採用
して開発する他のプログラムに容易に転用できることか
ら、その機能内容が類似すること等を基準にまとめた複
数の手続きのオブジェクトコードを生成し、これらを記
録したオブジェクトモジュールを作成しておき、これを
使用してプログラムを開発することにより、ソフトウェ
ア資源の有効利用,開発効率の向上及び開発したプログ
ラムの信頼性の向上を図ることができる。この様な使用
目的で作成されたオブジェクトモジュールを特にライブ
ラリと呼ぶ。
【0004】図15は分割コンパイルの概念を表す説明図
である。図において110 はソースプログラムであって、
これはそれぞれ個別にコンパイル可能なソースモジュー
ル111,112,…,11nに分割してある。このソースモジュー
ル111,112,…,11nをそれぞれコンパイラ920 によって個
別にコンパイルすることによりオブジェクトモジュール
941,942,…,94nが生成される。このオブジェクトモジュ
ール941,942,…,94n及び予め用意してあるライブラリ15
1,152,…,15mの所要のライブラリをリンカ160 によって
結合してロードモジュール970 が生成される。
【0005】なお、この分割コンパイルを採用すると、
一度コンパイルしたソースプログラムを部分的に変更し
て再コンパイルを行う場合に、通常のコンパイル時の如
くソースプログラムの全ての範囲を再コンパイルする必
要はなく、ソースプログラムの変更部分を含むソースモ
ジュールのみを再コンパイルすることで所要のコンパイ
ル処理が完了するので開発効率の向上に寄与する。
【0006】さて、プログラムを開発するとは最終的に
ロードモジュールを作成することであるが、前述の如く
高級言語を用いてプログラムを開発した場合、コンパイ
ルによって定型的に生成されたオブジェクトコードには
その時間効率及び空間効率において改良の余地が存在す
る。ここで時間効率が良いとは、そのオブジェクトコー
ドを含むロードモジュールを実行した時に、実行開始か
ら所望の結果を得るまでの処理時間が短いことを意味
し、また空間効率が良いとは、そのロードモジュールの
メモリ上のサイズが小さいことを意味する。コンパイル
の過程において生成するオブジェクトコードの実行結果
は担保したままそのオブジェクトコードに前記時間効率
及び空間効率の改良に関する変更を施すことを最適化と
いう。
【0007】以下に最適化を行うコンパイル処理を説明
する。図16はコンパイラ920 の機能ブロック図である。
図において92a はコンパイラ920 に与えられる高級言語
で記述されたソースプログラム110 から、その言語水準
が高級言語とオブジェクトコードとの中間に位置する中
間言語による中間コードを生成する中間コード生成部で
あって、生成した中間コードを最適化器92b へ与える。
最適化器92b はこれに与えられた中間コードに対し、こ
の中間コードから生成するオブジェクトコードの時間効
率及び空間効率が改良される様な変更、即ち最適化を施
し、この結果をコード生成部92c へ与える。コード生成
部92c は与えられた中間コードからターゲットマシンの
オブジェクトコードを生成し、これをのぞき穴最適化器
92d へ与える。のぞき穴最適化器92d は冗長なオブジェ
クトコードの除去及びターゲットマシン固有の性質を利
用する最適化を施す。のぞき穴最適化器92d の結果がコ
ンパイル処理の結果、即ちオブジェクトモジュールであ
る。
【0008】以下に最適化器92b における代表的な最適
化処理の例を示す。ソースプログラム中に記述された演
算処理の中にはコンパイル時に値が確定しているものが
ある。このような演算処理に対して、コンパイル時に演
算結果を求めておき、この演算結果をその演算処理の命
令文に換えて直接オブジェクトコードに記述することに
よって、実行時の演算処理を削減し、実行時の時間効率
を向上させることができる。また、べき演算を乗算に展
開すること及び乗算を加算に展開することは演算処理の
軽減に有効である。さらに数値を2進数で扱うコンピュ
ータにおいては2n 倍の演算をn回のシフト演算に置き
換えることも有効である。これらの置き換えを行うこと
を代数的性質の利用という。
【0009】また、デバッグのための文及び既に行った
最適化の結果、実行されないコード及び以後使用されな
い値を計算するコードが現れることがあり、これを不要
コードと呼ぶ。この不要コードを除去することによって
空間効率を向上させることができる。
【0010】さらに、一連の命令文の集まりである手続
きに仕事を行わせるための手続き呼出しの実行時にあっ
てはパラメータの受渡し、レジスタの退避及び回復、並
びにスタックの割当てなど多くの処理を必要とする。こ
の手続き呼出しの命令文をこれによって呼出される手続
きの内容を規定する手続き定義部、即ち呼出される手続
き自身の命令文に置き換えることによって、手続き呼出
しに係る処理を削減し、時間効率を向上させることがで
きる。これをインライン展開という。
【0011】図17は手続き呼出し命令のインライン展開
を示す説明図である。図において51は手続きAの定義部
であって、手続きAは手続きを呼出す命令文CALLB, CA
LLC, CALLDによってそれぞれ手続きB, C, Dを呼出
す。52は手続きBの定義部であって、手続きBは手続き
E, Fを呼出す。53は手続きCの定義部であって、手続
きCは手続きGを呼出す。54は手続きDの定義部であっ
て、手続きDは手続きGを呼出す。55は手続きFの定義
部であって、手続きFは手続きH, Iを呼出す。56,57,
58,59 はそれぞれ手続きE, G, H, Iの定義部であっ
て、これらは手続きを呼出さない。手続きE, G, H,
Iの如く手続きを呼出さない手続きをリーフという。
【0012】通常インンライン展開はある手続きから呼
出される手続きがリーフである場合にその手続きから呼
出し元へ向かって実行される。この時に呼出し元を辿る
回数をインライン展開の深さと呼ぶ。インライン展開の
深さが2である場合、手続きAへは手続きEをインライ
ン展開してある手続きB並びに手続きGをそれぞれイン
ライン展開してある手続きC及び手続きDがインライン
展開される。また手続きBへは手続きEと手続きH及び
手続きIをインライン展開してある手続きFとがインラ
イン展開される。
【0013】
【発明が解決しようとする課題】さて、大規模なプログ
ラムを開発するときは、その開発効率から分割コンパイ
ルを採用するのが一般的である。しかし、従来のコンパ
イラシステムはコンパイルの対象となっているソースモ
ジュールに定義された手続きが異なるソースモジュール
に定義された手続きを呼出す部分において、その呼出さ
れる手続きがどのソースモジュールに定義されているの
かを特定する手段を持っていなかった。従って異なるソ
ースモジュールに定義された手続きを呼出す手続き呼出
し命令のインライン展開が行えず最適化の実効が妨げら
れていた。本発明は斯かる事情に鑑みてなされたもので
あって、分割コンパイル時の手続き間に係る最適化の実
効があがるコンパイル方法及びコンパイラシステムの提
供を目的とする。
【0014】
【課題を解決するための手段】第1発明に係るコンパイ
ル方法は、複数の手続きを定義してあるソースプログラ
ムをコンパイルする場合、前記手続きの手続き呼出しに
係る情報及び前記手続きが呼出す手続きの情報を取得し
てこれを保持しておき、前記ソースプログラムを改変し
て再コンパイルを行う場合、保持しておいた情報に基づ
き前記ソースプログラムに定義された手続きが呼出す手
続きに係る最適化を施したオブジェクトコードを生成す
ることを特徴とする。
【0015】第2発明に係るコンパイル方法は、手続き
を定義してあるソースプログラムモジュールを複数集め
てなるソースプログラムをコンパイルする場合、前記手
続きの手続き呼出しに係る情報及び前記手続きが呼出す
手続きの情報を取得してこれを保持しておき、前記ソー
スプログラムモジュールを改変して再コンパイルを行う
場合、前記保持しておいた情報に基づき前記ソースプロ
グラムモジュールに定義された手続きが呼出す手続きに
係る最適化を施したオブジェクトコードを生成すること
を特徴とする。
【0016】第3発明に係るコンパイル方法は、複数の
手続きを定義してあるソースプログラムをコンパイルす
る場合、前記手続きが呼出す手続きの情報を取得してこ
れに基づき手続き同士の呼出し関係を表すグラフを作成
し、該グラフに基づき手続き呼出しに係る最適化を施し
たオブジェクトコードを生成することを特徴とする。
【0017】第4発明に係るコンパイル方法は、最適化
に先立って手続き同士の呼出し関係を表すグラフに基づ
き他の手続きから呼出されない手続きに相当するオブジ
ェクトコードを除去することを特徴とする。
【0018】第5発明に係るコンパイル方法は、最適化
に先立って手続き同士の呼出し関係を表すグラフに基づ
き他の手続きから呼出される手続きをインライン展開
し、このインライン展開によって他の手続きから呼出さ
れなくなった手続きの手続き定義部に相当するオブジェ
クトコードを除去することを特徴とする。
【0019】第6発明に係るコンパイル方法は、複数の
手続きを定義してある複数のソースプログラムモジュー
ルを集めてなるソースプログラムをコンパイルする場
合、ソースプログラムモジュール毎に前記手続きの手続
き呼出しに係る情報及び前記手続きが呼出す手続きの情
報を取得してこれを保持しておき、前記ソースプログラ
ムモジュールの再コンパイルを行う場合は前記ソースプ
ログラムモジュール及びこれに対応して保持してある情
報夫々の記録時点を比較し、ソースプログラムモジュー
ルの記録時点が新しいとき、該ソースプログラムモジュ
ールを再コンパイルすることを特徴とする。
【0020】第7発明に係るコンパイラシステムは、複
数の手続きを定義してあるソースプログラムをコンパイ
ルしてオブジェクトコードを生成する手段と、前記ソー
スプログラムから前記手続きの手続き呼出しに係る情報
及び前記手続きが呼出す手続きの情報を取得する手段
と、該手段により取得した情報に基づきソースプログラ
ムから生成するオブジェクトコードに手続き呼出しに係
る最適化を施す手段とを備えることを特徴とする。
【0021】第8発明に係るコンパイラシステムは、手
続きを定義してあるソースプログラムモジュールを複数
集めてなるソースプログラムの前記ソースプログラムモ
ジュールをコンパイルしてオブジェクトコードを生成す
る手段と、前記ソースプログラムから前記手続きの手続
き呼出しに係る情報及び前記手続きが呼出す手続きの情
報を取得する手段と、該手段により取得した情報に基づ
きソースプログラムモジュールから生成するオブジェク
トコードに手続き呼出しに係る最適化を施す手段とを備
えることを特徴とする。
【0022】第9発明に係るコンパイラシステムは、情
報を記憶する記憶手段と、情報を取得する手段により取
得した情報を前記記憶手段に保持する手段とを備えるこ
とを特徴とする。
【0023】第10発明に係るコンパイラシステムは、生
成したオブジェクトコード及び取得した情報をオブジェ
クトモジュールとして記憶手段に保持する手段を備える
ことを特徴とする。
【0024】第11発明に係るコンパイラシステムは、複
数の手続きを定義してあるソースプログラムから前記手
続きが呼出す手続きの情報を取得する手段と、該手段に
より取得した情報に基づき手続き同士の呼出し関係を表
すグラフを作成する手段と、該手段により作成したグラ
フに基づき他の手続きから呼出されない手続きに相当す
るオブジェクトコードを除去する手段とを備えることを
特徴とする。
【0025】第12発明に係るコンパイラシステムは、複
数の手続きを定義してあるソースプログラムから前記手
続きが呼出す手続きの情報を取得する手段と、該手段に
より取得した情報に基づき手続き同士の呼出し関係を表
すグラフを作成する手段と、該グラフに基づき他の手続
きから呼出される手続きをインライン展開する手段と、
該グラフに基づきインライン展開をすることによって他
の手続きから呼出されなくなった手続きの手続き定義部
に相当するオブジェクトコードを除去する手段とを備え
ることを特徴とする。
【0026】第1発明のコンパイル方法及び第7発明の
コンパイラシステムは、ソースプログラムに定義された
全ての手続きの手続き呼出しに係る情報及び前記手続き
が呼出す手続きの情報を取得し、これらの情報に基づき
ソースプログラムに定義された手続き毎にその手続きが
呼出す手続きの手続き呼出しに係る最適化を行うか否か
を判別し、また前記最適化に必要な情報を得て、生成す
るオブジェクトコードの最適化を為す。
【0027】第2発明のコンパイル方法及び第8発明の
コンパイラシステムは、複数のソースプログラムモジュ
ールの集合体であるソースプログラムをコンパイルする
場合、ソースプログラムに定義された全ての手続きの手
続き呼出しに係る情報及び前記手続きが呼出す手続きの
情報を取得し、これを保持しておき前記ソースプログラ
ムモジュールの再コンパイル時に保持しておいた情報に
基づき、コンパイル対象のソースプログラムモジュール
に定義された手続きが呼出す他のソースプログラムモジ
ュールに定義された手続きの手続き呼出しに係る最適化
を行うか否かを判別し、また前記最適化に必要な情報を
得て、生成するオブジェクトコードの最適化を為す。
【0028】第3発明のコンパイル方法は、ソースプロ
グラムに定義された手続き同士の呼出し関係を表すグラ
フに基づき、手続き呼出しに係る最適化を行うか否かを
判別して生成するオブジェクトコードの最適化を為す。
【0029】第4発明のコンパイル方法及び第11発明の
コンパイラシステムは、公知の方法を用いる最適化に先
立ち手続き同士の呼出し関係を表すグラフに基づき他の
手続きから呼出されない手続きを判別し、この手続きに
相当するオブジェクトコードを除去することにより生成
するオブジェクトコードの最適化を為すと共に、引き続
き行う公知の方法を用いる最適化処理を軽減する。
【0030】第5発明のコンパイル方法及び第12発明の
コンパイラシステムは、公知の方法を用いる最適化に先
立ち手続き同士の呼出し関係を表すグラフに基づき他の
手続きから呼出される手続きを判別してインライン展開
し、またこのインライン展開によって呼出されなくなっ
た手続きを判別し、この手続きの手続き定義部に相当す
るオブジェクトコードを除去することにより生成するオ
ブジェクトコードの最適化を為すと共に、引き続き行う
公知の方法を用いる最適化処理を軽減する。
【0031】第6発明のコンパイル方法は、保持してお
いた情報に基づき再コンパイルの対象のソースプログラ
ムモジュールを決定し、これを再コンパイルすることに
より最適化の対象をコンパイル対象ではないソースプロ
グラムモジュールに拡大する。
【0032】第9, 第10発明のコンパイラシステムは、
取得した情報を次回のコンパイル時に参照するためにこ
れを記憶手段に保持しておき、再コンパイル時にソース
プログラムに定義された手続き毎にその手続きが呼出す
手続きの手続き呼出しに係る最適化を行うか否かを判別
し、また前記最適化に必要な情報を得て生成するオブジ
ェクトコードの最適化を為す。
【0033】
【発明の実施の形態】
実施の形態1.以下にソースプログラムの一例を示し、
このソースプログラムに基づき本発明に係る手続き呼出
しに係る情報及び呼出す手続きの情報を説明する。図3
は本発明に係るコンパイラシステムの処理対象であるソ
ースプログラムの一例を示す説明図である。図3(a) に
おいてソースプログラムはソースモジュールModule1及
びModule2に分割して記述してあり、Module1には手続
きproc1,proc2及びproc4が定義されている。またMod
ule2には手続きproc3が定義されている。
【0034】図3(b) は図3(a) のソースプログラムの
手続き同士の呼出し関係を表す相互参照グラフであっ
て、呼出す手続きを矢印の先端に対応させてある。proc
1はその処理過程においてproc2及びproc3を呼出し、
proc2は他の手続きを呼出さない。proc3はproc4及び
proc1を呼出し、proc4もproc3と同様にproc4及びpr
oc1を呼出す。proc4の様に自分自身を呼出すことを再
帰呼出しという。
【0035】図4及び図5は図3のソースプログラムに
定義された手続きの手続き呼出しに係る情報及び呼出す
手続きの情報を表す手続き情報テーブルを示す説明図で
ある。図4において定義モジュール名は当該手続きを定
義しているソースモジュールを表す。被参照属性は当該
手続きが他のソースモジュールに定義してある手続きか
ら呼出されるか否かを表す。手続き1のproc1は異なる
ソースモジュールに記述されたproc3から呼出されるの
で外部参照になる。一方手続き2のproc2はこれを定義
するソースモジュールに定義されたproc1から呼出され
るのみであるので内部参照になる。
【0036】参照手続きのリストは当該手続きが呼出す
手続きを表すものであって、これは図5に示すリンクリ
スト40で構成されている。即ちリストの先頭の要素42は
手続き名43、次の要素へのポインタ44及び他の参照手続
きのリストの先頭へのポインタ45を持つ。リンクリスト
の2番目以降の要素45,48 はそれぞれ手続き名を有する
リストの先頭の要素51,52 へのポインタ46,49 及び次の
要素へのポインタ47,50 を持つ。次の要素が存在しない
とき、例えば要素48の次の要素へのポインタ50はnil を
指す。
【0037】図4の手続き情報テーブルの参照手続きリ
ストの項目には夫々当該手続きとその手続き名が一致す
るリンクリストの先頭の要素のアドレス、即ち手続き1
の参照手続きリストの項目には手続き名がproc1である
要素42のアドレスを格納してある。このリンクリストを
辿ることにより当該手続きが呼出す手続きの情報が得ら
れる。また手続き情報テーブルには当該手続きの呼出し
に必要なパラメータの型等の情報を表すパラメータリス
ト及びこのパラメータ数を格納してある。さらに、手続
き情報テーブルはインンライン展開を行うことの許可/
不許可を表すインライン展開フラグ、当該手続きが再帰
呼出しを行うか否かを表すリカーシブ属性フラグ、当該
手続きのオブジェクトコードをコンパイル時に削除する
削除可能属性フラグ及びリターン値の有無を表すフラグ
等を有する。また、当該手続きのメモリ上のサイズを計
るためのソース行情報及び当該手続きをコンパイルした
時刻等を格納してある。
【0038】図1は本発明に係る分割コンパイルの概念
を表す説明図である。図において110 はソースプログラ
ムであって、これはそれぞれ個別にコンパイル可能なソ
ースモジュール111,112,…,11nからなる。このソースプ
ログラム110 からオブジェクトコードを生成するのがコ
ンパイラ120 である。コンパイラ120 はソースプログラ
ム110 の手続き毎にこの手続きを呼出す側が必要とする
情報、即ち手続き呼出しに係る情報及びこの手続きが呼
出す手続きが定義されているソースモジュールを表す情
報、即ち呼出す手続きの情報を抽出する手段を有する。
また、前記抽出した情報から手続き間の呼出し関係を解
析する手段、この解析結果を受けて図4及び図5に基づ
き前述したところと同様の手続き情報テーブルを作成す
る手段及びこの手続き情報テーブルを図示しない記憶手
段上の手続き情報ファイルへ書込む手段並びにこの手続
き情報ファイルから手続き情報テーブルを作業領域へ読
出す手段を有する。さらに作成した手続き情報テーブル
から得られる情報に基づき生成するオブジェクトコード
に対して後述する手続き呼出しに係る最適化を施す手段
を有する。
【0039】コンパイラ120 はソースプログラム110 か
らオブジェクトコードを生成するとき、ソースプログラ
ム110 のソースモジュール111,112,…,11nのそれぞれに
対応するオブジェクトモジュール141,142,…,14n及び手
続き情報ファイル131,132,…,13nを生成する。この時、
ソースモジュール111,112,…,11nのいずれかに対応させ
て作成された手続き情報ファイルが既に存在する場合
は、それがコンパイル対象のソースモジュールに対応す
るか否かに関係なく、それらを全て読込み、ソースプロ
グラム110 全体の手続きに係る手続き情報テーブルを作
成する。そして、コンパイル対象のソースモジュールに
定義された手続きの手続き呼出しに係る情報及び呼出す
手続きの情報を抽出してこれらを前記手続き情報テーブ
ルに反映させる。その後手続き情報テーブルの各ソース
モジュールに係る情報はそのソースモジュールに対応す
る手続き情報ファイルに書込まれる。即ち、一度作成さ
れた手続き情報ファイル131,132,…,13nはそれ以降に行
われるコンパイルの都度読込まれ、その情報はそれぞれ
適宜更新され書込まれるのである。
【0040】生成したオブジェクトモジュール141,142,
…,14nを結合してロードモジュールを生成するのがリン
カ160 である。リンカ160 はオブジェクトモジュール14
1,142,…,14nに定義された手続きがライブラリ151,152,
…,15mのいずれかに定義された手続きを呼出す場合に、
該当するライブラリをオブジェクトモジュール141,142,
…,14nと結合し、ロードモジュール170 を生成する。
【0041】図2は前述したコンパイラ120 の機能ブロ
ック図である。図において12a はコンパイラ120 に与え
られる高級言語で記述されたソースプログラム110 か
ら、その言語水準が高級言語とオブジェクトコードとの
中間に位置する中間言語による中間コードを生成する中
間コード生成部であって、生成した中間コードを手続き
間最適化部12e へ与える。
【0042】手続き間最適化部12e は手続き情報ファイ
ル131,132,…,13nから手続き呼出しに係る情報及び呼出
す手続きの情報を得て、これとコンパイル対象のソース
モジュールから抽出した前述したところと同様の情報と
から手続き情報テーブルを作成する。そしてこの手続き
情報テーブルから得られる情報に基づき中間コードに対
し、後述するインライン展開等の手続き呼出しに係る最
適化を施し、この結果を最適化器12b へ与える。
【0043】最適化器12b はこれに与えられた中間コー
ドに対し、公知の方法を用いてこの中間コードから生成
するオブジェクトコードの時間効率及び空間効率が改良
される様な変更、即ち最適化を施し、この結果をコード
生成部12c へ与える。
【0044】コード生成部12c は与えられた中間コード
からターゲットマシンのオブジェクトコードを生成し、
これをのぞき穴最適化器12d へ与える。のぞき穴最適化
器12d は冗長なオブジェクトコードの除去及びターゲッ
トマシン固有の性質を利用する最適化を施す。のぞき穴
最適化器12d の結果がコンパイル処理の結果、即ちオブ
ジェクトモジュールである。
【0045】図6及び図7は本発明に係るコンパイラ12
0 のコンパイル処理手順を示すフローチャートである。
コンパイルの開始に先立ち、手続き呼出しに係る最適化
を行うか否かをユーザが予め指定しておく。図6におい
てコンパイルを開始すると中間コード生成部12a におい
て与えられたソースプログラムを中間コードに変換する
(S1)。手続き間最適化部12e において手続き呼出しに係
る最適化を行う指定がある場合(S2)、変換結果の中間コ
ードにおいて当該ソースモジュール内の手続き呼出し関
係を調べる(S3)。当該ソースプログラムの前回コンパイ
ル時に生成した手続き情報ファイル131,132,…,13nが存
在する場合、これを読込み(S4)、S3において調べた呼出
し関係及び手続き情報ファイル131,132,…,13nの内容か
ら手続き呼出し関係を更新し、手続き情報テーブル及び
相互参照グラフを作成する(S5)。前記手続き情報テーブ
ル及び相互参照グラフにより当該ソースモジュール内に
記述された手続きが呼出す手続きの定義モジュールが全
て明らかである場合(S6)、手続き呼出しに係る最適化の
対象を他のソースモジュールにおいて定義された手続き
にまで及ぼして最適化処理を行う(S7)。
【0046】S6において当該ソースモジュール内に記述
された手続きが呼出す手続きの定義モジュールが全て明
らかになっていない場合、手続き呼出しに係る最適化の
範囲を当該ソースモジュール内に留める(S8)。手続き情
報テーブルを手続き情報ファイルに書込み(S9)、手続き
呼出しに係る最適化の結果を最適化器12b へ与える。最
適化器12b においてこれに与えられた中間コードに手続
き呼出しに係る最適化を除く最適化を施し、この結果を
コード生成部12c へ与える(S10) 。コード生成部12c に
おいて、これに与えられた中間コードからオブジェクト
コードを生成し、これをのぞき穴最適化器12d へ与える
(S11) 。のぞき穴最適化器12d において冗長なオブジェ
クトコードの除去等を行って(S12) 、この結果をオブジ
ェクトモジュールへ書込む(S13) 。
【0047】図8及び図9は図6のフローチャートのS7
における最適化処理の1つであるインライン展開の処理
手順を示すフローチャートである。インライン展開に先
立ってユーザは予めインライン展開の深さの上限d ma
x を定めておく。図8においてインライン展開を開始す
ると、インライン展開の深さを表す変数dをクリアし(S
21) 、当該ソースモジュールにおいて定義される手続き
を検索する(S22) 。手続き情報テーブルに基づき検索し
た手続きにインライン展開を行う指定があるか否かを判
別し(S23) 、指定がある場合は当該手続きの中間コード
をワークメモリ等の作業領域にコピーする(S24) 。当該
手続き内の手続きを呼出す部分を検索し(S25) 、呼出さ
れる手続きにインライン展開の指定があるか否かを判別
する(S26) 。インライン展開の指定がある場合、インラ
イン展開の深さを表す変数dをインクリメントし(S27)
、呼出す手続きのインライン展開を行った後(S28) 、
深さを表す変数dをデクリメントする(S29) 。当該手続
きに未処理の手続き呼出し部が存在するか否かを判別し
(S30) 、存在する場合はS25 に処理を戻し、当該手続き
の他の手続き呼出し部のインライン展開を行う。前記S2
6 において呼出す手続きにインライン展開の指定がない
場合も同様に未処理の手続き呼出し部が存在するか否か
を判別し(S30) 、存在しない場合は当該ソースモジュー
ルに未処理の手続きが存在するか否かを判別し(S31) 、
存在する場合はS22 に処理を戻し、当該ソースモジュー
ルの他の手続きの手続き呼出し部のインライン展開を行
う。前記S23 において当該手続きにインライン展開を行
う指定がない場合も同様に未処理の手続きが存在するか
否かを判別し(S31) 、存在しない場合は処理を終了す
る。
【0048】図10及び図11は図9のフローチャートのS2
8 における呼出す手続きのインライン展開の処理手順を
示すフローチャートである。深さを表す変数dの値をパ
ラメータとして受取り、この値が深さの上限d max よ
り大きいか否かを判別し(S41) 、等しいか又は小さい場
合、当該手続きがその処理において自分自身を呼出す再
帰 (リカーシブ) 手続きでないことを確認し(S42) 、イ
ンライン展開の前処理としてローカル変数, パラメータ
等を管理するためのID変換テーブルを作成する(S43) 。
呼出される手続きのコードの埋込み (展開) 及びパラメ
ータの引渡しに係るコード生成等のインライン展開の主
処理を行い(S44) 、展開部の手続き呼出し部を検索し(S
45) 、呼出される手続きにインライン展開の指定がある
か否かを判別する(S46) 。インライン展開の指定がある
場合、インライン展開の深さを表す変数dをインクリメ
ントし(S47) 、この呼出される手続きのインライン展開
処理自身を再帰呼出しして当該手続きが呼出す手続きの
インライン展開を行う(S48) 。再帰呼出しから処理が戻
ると深さを表す変数dをデクリメントした後(S49)、当
該手続きに未処理の手続き呼出し部が存在するか否かを
判別し(S50) 、存在する場合はS45 に処理を戻し、当該
手続きの他の手続き呼出し部のインライン展開を行う。
前記S46 において当該手続きから呼出される手続きにイ
ンライン展開の指定がない場合も同様に未処理の手続き
呼出し部が存在するか否かを判別し(S50) 、存在しない
場合は当該手続きがリターン値を持つか否かを判別し(S
51) 、リターン値を持つ場合はリターン値の引渡しのた
めのテンポラリ変数を定義し、このテンポラリ変数を介
してリターン値を引渡すコードを生成、これを挿入し(S
52) 、処理を終了する。前記S41 において深さを表す変
数dの値が深さの上限d max より大きい場合及び前記S4
2 において当該手続きが再帰手続きである場合並びに前
記S51 において当該手続きがリターン値を持たない場合
は処理を終了する。
【0049】図12は図6のフローチャートのS7における
最適化処理の1つである不要コード除去の処理手順を示
すフローチャートである。不要コード除去に先立ってイ
ンライン展開が完了しているものとする。不要コード除
去を開始すると、当該ソースモジュールにおいて定義さ
れる手続きを検索し(S61) 、手続き情報テーブルに基づ
き検索した手続きに、デバッグのための手続き等の実行
時には不要となる手続きを表す削除可能の指定があるか
否かを判別する(S62) 。削除可能の指定がない場合、手
続き情報テーブル及び相互参照グラフに基づき他の手続
きから呼出されない手続き又はインライン展開の結果、
他の手続きから呼出されなくなった手続きであるか否か
を判別する(S63) 。他の手続きから呼出されない手続き
であるか又はS62 において削除可能の指定がある場合
は、当該手続きの定義部に相当する中間コードを削除す
る(S64) 。S63において他の手続きから呼出される手続
きであると判別した場合は変更を加えない。以下、当該
ソースモジュールにおいて定義される他の手続きについ
て前述した処理手順を繰返し(S65) 、全ての手続きを処
理した時点で終了する。
【0050】ところで、サイズが比較的小さい手続き等
はインライン展開の対象に適している。しかし、リーフ
からの呼出しの深さに基づきインライン展開を行うか否
かを判別する従来のインライン展開においては、このよ
うな手続きがインライン展開の対象とならない場合があ
る。即ち、従来のインライン展開では図17に基づき前述
したところの手続きFがインライン展開に適した手続き
であったとしても、インライン展開の深さが2であるの
で、リーフではない手続きFはその呼出す手続きのリー
フがインライン展開の深さの範囲で手続きAへ到達する
ことができないので手続きAへはインライン展開されな
い。
【0051】しかし、前述したところの実施の形態1に
よれば、手続き定義部毎にその手続きが呼出す手続きを
インライン展開するか否かを判別するため、全ての手続
き呼出し部において、リーフからの呼出しの深さに関係
なくインライン展開の機会が平等に与えられる。即ち、
前記手続きFを前記手続きAへインライン展開すること
が可能になっているのである。
【0052】実施の形態2.図13は本発明に係る分割コ
ンパイルの概念を表す説明図である。図において110 は
ソースプログラムであって、これはそれぞれ個別にコン
パイル可能なソースモジュール111,112,…,11nからな
る。このソースプログラム110 からオブジェクトコード
を生成するのがコンパイラ220 である。コンパイラ220
はソースプログラム110 の手続き毎にこの手続きを呼出
す側が必要とする情報、即ち手続き呼出しに係る情報及
びこの手続きが呼出す手続きが定義されているソースモ
ジュールを表す情報、即ち呼出す手続きの情報を抽出す
る手段を有する。
【0053】また、前記抽出した情報から手続き間の呼
出し関係を解析する手段、この解析結果を受けて図4に
基づき前述したところと同様の手続き情報テーブルを作
成する手段及びこの手続き情報テーブルを図示しない記
憶手段上の唯一の手続き情報ファイルへ書込む手段並び
にこの手続き情報ファイルから手続き情報テーブルを作
業領域へ読出す手段を有する。さらに作成した手続き情
報テーブルから得られる情報に基づき生成するオブジェ
クトコードに対して後述する手続き呼出しに係る最適化
を施す手段を有する。
【0054】コンパイラ220 は、ソースプログラム110
からオブジェクトコードを生成するとき、ソースプログ
ラム110 のソースモジュール111,112,…,11nのそれぞれ
に対応するオブジェクトモジュール141,142,…,14n及び
唯一の手続き情報ファイル130 を生成する。即ち、一度
作成された手続き情報ファイル130 はそれ以降に行われ
るコンパイルの都度読込まれ、その情報は適宜更新され
書込まれるのである。他の図1と同一の構成要素には同
符号を付して説明を省略する。
【0055】前述したところの実施の形態1によると、
ソースモジュール毎に手続き情報ファイルを用意する。
従って、コンパイルの都度行われる全ての手続き情報フ
ァイルからの読出し処理及び手続き情報ファイルへの書
込み処理のために費やす時間はソースモジュールが多い
程増加するという問題がある。実施の形態2は1つのソ
ースプログラムにつき手続き情報ファイルを1つに限定
することによってファイルアクセスのオーバーヘッドを
低減し、コンパイル処理を軽減することができる。
【0056】実施の形態3.図14は本発明に係る分割コ
ンパイルの概念を表す説明図である。図において110 は
ソースプログラムであって、これはそれぞれ個別にコン
パイル可能なソースモジュール111,112,…,11nからな
る。このソースプログラムからオブジェクトコードを生
成するのがコンパイラ320 である。コンパイラ320 はソ
ースプログラム110 の手続き毎にこの手続きを呼出す側
が必要とする情報、即ち手続き呼出しに係る情報及びこ
の手続きが呼出す手続きが定義されているソースモジュ
ールを表す情報、即ち呼出す手続きの情報を抽出する手
段を有する。
【0057】また、前記抽出した情報から手続き間の呼
出し関係を解析する手段、この解析結果を受けて図4に
基づき前述したところと同様の手続き情報テーブルを作
成する手段及び作成した手続き情報テーブルをコンパイ
ル過程において生成する中間コードと共に図示しない記
憶手段上の中間モジュールへ書込む手段並びにこの中間
モジュールから手続き情報テーブルを作業領域へ読出す
手段を有する。さらに作成した手続き情報テーブルから
得られる情報に基づき生成するオブジェクトコードに対
して後述する手続き呼出しに係る最適化を施す手段を有
する。
【0058】コンパイラ320 はソースプログラム110 か
らオブジェクトコードを生成するとき、ソースプログラ
ム110 のソースモジュール111,112,…,11nを所定の順序
に従いソースモジュール111 に対しオブジェクトコード
を生成する一歩手前の段階である中間コードに対する最
適化処理まで行って、この中間コード及び手続き情報テ
ーブルを図示しない記憶手段上の中間モジュール181 に
書込む (ステップ1)。次に中間モジュール181 及びソ
ースモジュール112 を作業領域に読出し、ソースモジュ
ール111 及び112 の中間コードに対する最適化処理まで
行って、この中間コード及び手続き情報テーブルを記憶
手段上の中間モジュール182 に書込む (ステップ2) 。
以上の処理をソースモジュールを順次選択しながらステ
ップn−1まで繰返す。
【0059】次に中間モジュール18n-1 及びソースモジ
ュール11n を作業領域に読出し、ソースモジュール111,
112,…,11n-1及び11n の中間コードに対する最適化処理
を行い、この中間コードからオブジェクトコードを生成
し、これを記憶手段上のオブジェクトモジュール190 へ
書込む。他の図1と同一の構成要素には同一符号を付し
て説明を省略する。
【0060】実施の形態3は全ソースモジュールのコン
パイルを一括して行う場合、そのソースモジュール毎の
手続き呼出しに係る情報及び呼出す手続きの情報を順次
保持しつつ全てのソースモジュールのコンパイルを為す
ので、一括コンパイルと比較してファイルアクセスのオ
ーバーヘッドを低減し、コンパイル処理を軽減すること
ができる。また、その処理過程において最適化に必要な
情報が与えられていれば、他のソースモジュールに定義
された手続きの手続き呼出しに係る最適化を行うので、
一度にコンパイルする場合と比較して最適化の実効をあ
げることができる。
【0061】なお、本発明の実施の形態において中間コ
ードを使用するコンパイラシステムについて述べたが、
本発明はコンパイル処理過程において中間コードを生成
せずに、ソースプログラムから直接オブジェクトモジュ
ールを生成するコンパイラシステムについて同様に実施
することが可能である。
【0062】
【発明の効果】以上のように本発明によればソースプロ
グラムに定義された全ての手続きの手続き呼出しに係る
情報及び前記手続きが呼出す手続きの情報に基づきソー
スプログラムに定義された手続きが呼出す手続きのイン
ライン展開を行うか否かを判別し、またインライン展開
に必要な情報を得てインライン展開を行うことにより最
適化の実効をあげることができる。
【0063】また、複数のソースモジュールからなるソ
ースプログラムをコンパイルするとき、ソースプログラ
ムに定義された全ての手続きの手続き呼出しに係る情報
及び前記手続きが呼出す手続きの情報を取得し、これを
保持しておき再コンパイル時に保持しておいた情報に基
づきコンパイル対象ではないソースモジュールに定義さ
れた手続きのインライン展開を行うか否かを判別し、ま
たインライン展開に必要な情報を得てインライン展開を
行うことにより最適化の実効をあげることができる。
【0064】また、ソースプログラムに定義された手続
き同士の呼出し関係を表すグラフに基づき、インライン
展開を行うか否かを判別し、また不要コードであるか否
かを判別して不要コードを除去することにより最適化の
実効をあげることができる。
【0065】また、公知の方法を用いる最適化に先立ち
手続き同士の呼出し関係を表すグラフに基づき他の手続
きから呼出されない手続きを判別し、この手続きに相当
するオブジェクトコードを除去することにより最適化を
行うと共に、引き続き行う公知の方法を用いる最適化処
理を軽減することができる。
【0066】また、公知の方法を用いる最適化に先立ち
手続き同士の呼出し関係を表すグラフに基づき他の手続
きから呼出される手続きをインライン展開し、またこの
インライン展開によって呼出されなくなった手続きの手
続き定義部に相当するオブジェクトコードを除去するこ
とにより最適化を行うと共に、引き続き行う公知の方法
を用いる最適化処理を軽減することができる。
【0067】また、保持しておいた情報に基づき再コン
パイル対象のソースプログラムモジュールを決定し、こ
れを再コンパイルすることにより最適化の有効範囲をコ
ンパイル対象ではないソースプログラムモジュールに拡
大することかできる。
【図面の簡単な説明】
【図1】 本発明に係る分割コンパイルの概念を表す説
明図である。
【図2】 本発明に係るコンパイラの機能ブロック図で
ある。
【図3】 ソースプログラムの一例を示す説明図であ
る。
【図4】 手続き情報テーブルを示す説明図である。
【図5】 手続き情報テーブルを示す説明図である。
【図6】 コンパイル処理手順を示すフローチャートで
ある。
【図7】 コンパイル処理手順を示すフローチャートで
ある。
【図8】 インライン展開の処理手順を示すフローチャ
ートである。
【図9】 インライン展開の処理手順を示すフローチャ
ートである。
【図10】 呼出す手続きのインライン展開の処理手順
を示すフローチャートである。
【図11】 呼出す手続きのインライン展開の処理手順
を示すフローチャートである。
【図12】 不要コード除去の処理手順を示すフローチ
ャートである。
【図13】 本発明に係る分割コンパイルの概念を表す
説明図である。
【図14】 本発明に係る分割コンパイルの概念を表す
説明図である。
【図15】 従来の分割コンパイルの概念を表す説明図
である。
【図16】 従来のコンパイラの機能ブロック図であ
る。
【図17】 インライン展開の説明図である。
【符号の説明】
110 ソースプログラム、111,112,…,11n ソースモジ
ュール、130 手続き情報ファイル、131,132,…,13n
手続き情報ファイル、141,142,…,14n オブジェクトモ
ジュール、170 ロードモジュール、181,182,…,18n-1
中間モジュール。

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】 複数の手続きを定義してあるソースプロ
    グラムをコンパイルする場合、前記手続きの手続き呼出
    しに係る情報及び前記手続きが呼出す手続きの情報を取
    得してこれを保持しておき、前記ソースプログラムを改
    変して再コンパイルを行う場合、保持しておいた情報に
    基づき前記ソースプログラムに定義された手続きが呼出
    す手続きに係る最適化を施したオブジェクトコードを生
    成することを特徴とするコンパイル方法。
  2. 【請求項2】 手続きを定義してあるソースプログラム
    モジュールを複数集めてなるソースプログラムをコンパ
    イルする場合、前記手続きの手続き呼出しに係る情報及
    び前記手続きが呼出す手続きの情報を取得してこれを保
    持しておき、前記ソースプログラムモジュールを改変し
    て再コンパイルを行う場合、前記保持しておいた情報に
    基づき前記ソースプログラムモジュールに定義された手
    続きが呼出す手続きに係る最適化を施したオブジェクト
    コードを生成することを特徴とするコンパイル方法。
  3. 【請求項3】 複数の手続きを定義してあるソースプロ
    グラムをコンパイルする場合、前記手続きが呼出す手続
    きの情報を取得してこれに基づき手続き同士の呼出し関
    係を表すグラフを作成し、該グラフに基づき手続き呼出
    しに係る最適化を施したオブジェクトコードを生成する
    ことを特徴とするコンパイル方法。
  4. 【請求項4】 最適化に先立って手続き同士の呼出し関
    係を表すグラフに基づき他の手続きから呼出されない手
    続きに相当するオブジェクトコードを除去することを特
    徴とする請求項3記載のコンパイル方法。
  5. 【請求項5】 最適化に先立って手続き同士の呼出し関
    係を表すグラフに基づき他の手続きから呼出される手続
    きをインライン展開し、このインライン展開によって他
    の手続きから呼出されなくなった手続きの手続き定義部
    に相当するオブジェクトコードを除去することを特徴と
    する請求項3記載のコンパイル方法。
  6. 【請求項6】 複数の手続きを定義してある複数のソー
    スプログラムモジュールを集めてなるソースプログラム
    をコンパイルする場合、ソースプログラムモジュール毎
    に前記手続きの手続き呼出しに係る情報及び前記手続き
    が呼出す手続きの情報を取得してこれを保持しておき、
    前記ソースプログラムモジュールの再コンパイルを行う
    場合は前記ソースプログラムモジュール及びこれに対応
    して保持してある情報夫々の記録時点を比較し、ソース
    プログラムモジュールの記録時点が新しいとき、該ソー
    スプログラムモジュールを再コンパイルすることを特徴
    とするコンパイル方法。
  7. 【請求項7】 複数の手続きを定義してあるソースプロ
    グラムをコンパイルしてオブジェクトコードを生成する
    手段と、 前記ソースプログラムから前記手続きの手続き呼出しに
    係る情報及び前記手続きが呼出す手続きの情報を取得す
    る手段と、 該手段により取得した情報に基づきソースプログラムか
    ら生成するオブジェクトコードに手続き呼出しに係る最
    適化を施す手段とを備えることを特徴とするコンパイラ
    システム。
  8. 【請求項8】 手続きを定義してあるソースプログラム
    モジュールを複数集めてなるソースプログラムの前記ソ
    ースプログラムモジュールをコンパイルしてオブジェク
    トコードを生成する手段と、 前記ソースプログラムから前記手続きの手続き呼出しに
    係る情報及び前記手続きが呼出す手続きの情報を取得す
    る手段と、 該手段により取得した情報に基づきソースプログラムモ
    ジュールから生成するオブジェクトコードに手続き呼出
    しに係る最適化を施す手段とを備えることを特徴とする
    コンパイラシステム。
  9. 【請求項9】 情報を記憶する記憶手段と、情報を取得
    する手段により取得した情報を前記記憶手段に保持する
    手段とを備えることを特徴とする請求項7又は8記載の
    コンパイラシステム。
  10. 【請求項10】 生成したオブジェクトコード及び取得
    した情報をオブジェクトモジュールとして記憶手段に保
    持する手段を備えることを特徴とする請求項9記載のコ
    ンパイラシステム。
  11. 【請求項11】 複数の手続きを定義してあるソースプ
    ログラムから前記手続きが呼出す手続きの情報を取得す
    る手段と、 該手段により取得した情報に基づき手続き同士の呼出し
    関係を表すグラフを作成する手段と、 該手段により作成したグラフに基づき他の手続きから呼
    出されない手続きに相当するオブジェクトコードを除去
    する手段とを備えることを特徴とするコンパイラシステ
    ム。
  12. 【請求項12】 複数の手続きを定義してあるソースプ
    ログラムから前記手続きが呼出す手続きの情報を取得す
    る手段と、 該手段により取得した情報に基づき手続き同士の呼出し
    関係を表すグラフを作成する手段と、 該グラフに基づき他の手続きから呼出される手続きをイ
    ンライン展開する手段と、 該グラフに基づきインライン展開をすることによって他
    の手続きから呼出されなくなった手続きの手続き定義部
    に相当するオブジェクトコードを除去する手段とを備え
    ることを特徴とするコンパイラシステム。
JP8085543A 1996-04-08 1996-04-08 コンパイル方法及びコンパイラシステム Pending JPH09274570A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8085543A JPH09274570A (ja) 1996-04-08 1996-04-08 コンパイル方法及びコンパイラシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8085543A JPH09274570A (ja) 1996-04-08 1996-04-08 コンパイル方法及びコンパイラシステム

Publications (1)

Publication Number Publication Date
JPH09274570A true JPH09274570A (ja) 1997-10-21

Family

ID=13861785

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8085543A Pending JPH09274570A (ja) 1996-04-08 1996-04-08 コンパイル方法及びコンパイラシステム

Country Status (1)

Country Link
JP (1) JPH09274570A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030077759A (ko) * 2002-03-27 2003-10-04 학교법인 인하학원 에필로그 테일러된 프로시저를 위한 프롤로그 테일러링 기법
JP2008505422A (ja) * 2004-07-02 2008-02-21 エヌヴィディア コーポレイション 頂点及びフラグメントプログラムの最適化されたチェイニング
US10481883B2 (en) 2016-08-22 2019-11-19 Fujitsu Limited Inter-file optimization program generation method, and program generator

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01240934A (ja) * 1988-03-23 1989-09-26 Hitachi Ltd 自動再コンパイル方法
JPH02257224A (ja) * 1989-03-29 1990-10-18 Nec Corp 連係編集処理装置
JPH07129412A (ja) * 1993-10-29 1995-05-19 Internatl Business Mach Corp <Ibm> コンパイル方法及び装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01240934A (ja) * 1988-03-23 1989-09-26 Hitachi Ltd 自動再コンパイル方法
JPH02257224A (ja) * 1989-03-29 1990-10-18 Nec Corp 連係編集処理装置
JPH07129412A (ja) * 1993-10-29 1995-05-19 Internatl Business Mach Corp <Ibm> コンパイル方法及び装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030077759A (ko) * 2002-03-27 2003-10-04 학교법인 인하학원 에필로그 테일러된 프로시저를 위한 프롤로그 테일러링 기법
JP2008505422A (ja) * 2004-07-02 2008-02-21 エヌヴィディア コーポレイション 頂点及びフラグメントプログラムの最適化されたチェイニング
US10481883B2 (en) 2016-08-22 2019-11-19 Fujitsu Limited Inter-file optimization program generation method, and program generator

Similar Documents

Publication Publication Date Title
US6922827B2 (en) Iterative software development environment with prioritized build rules
EP0646864B1 (en) Optimising compiler
JP3762867B2 (ja) コンパイラ装置、コンパイル方法、およびそのためのプログラムを格納した記憶媒体
JPWO2000045260A1 (ja) コンパイラ装置、コンパイル方法、およびそのためのプログラムを格納した記憶媒体
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
US6961931B2 (en) Dependency specification using target patterns
JPH0695311B2 (ja) コード最適化方法
US6117185A (en) Skip list data storage during compilation
US6106574A (en) Computer-implemented object-oriented method for relating objects in a compiler to locations in the source program and to inlined call histories
JP3199013B2 (ja) 言語処理方法及び言語処理装置並びに言語処理プログラムを記録した記憶媒体
US5978587A (en) Method for propagating source code locations into objects in a compiler
US5978586A (en) Method for tracking changes in source locations in a compiler
US7624381B1 (en) Portable detection of start and completion of object construction
JPH10507016A (ja) ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ
JP2009104252A (ja) デバッグ支援装置およびデバッグ支援方法
US6922830B1 (en) Skip list data storage during compilation
EP1164477A2 (en) A loop optimization method and a compiler
JPH09274570A (ja) コンパイル方法及びコンパイラシステム
WO2023155863A1 (en) Methods and devices for compiler function fusion
GB2420638A (en) Method of substituting code fragments in Internal Representation
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
JPH09218789A (ja) 分割コンパイル方式
JP3166699B2 (ja) オブジェクト指向プログラム設計支援装置、方法および記録媒体
JP2002082811A (ja) コンパイル方法および記録媒体
JPH05274126A (ja) プログラム合成システム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060731

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060808

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20061205