JPH11212797A - プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 - Google Patents

プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Info

Publication number
JPH11212797A
JPH11212797A JP10012581A JP1258198A JPH11212797A JP H11212797 A JPH11212797 A JP H11212797A JP 10012581 A JP10012581 A JP 10012581A JP 1258198 A JP1258198 A JP 1258198A JP H11212797 A JPH11212797 A JP H11212797A
Authority
JP
Japan
Prior art keywords
procedure
program
code
subroutine
function
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
JP10012581A
Other languages
English (en)
Other versions
JP3284956B2 (ja
Inventor
Saori Satou
さおり 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP01258198A priority Critical patent/JP3284956B2/ja
Priority to US09/236,639 priority patent/US6292940B1/en
Priority to EP99101409A priority patent/EP0932100A3/en
Publication of JPH11212797A publication Critical patent/JPH11212797A/ja
Application granted granted Critical
Publication of JP3284956B2 publication Critical patent/JP3284956B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 手続の間接呼出を含む原始プログラムでも、
効率的な目的プログラムにコンパイルできるようにす
る。 【解決手段】 開示されるプログラム変換方法は、原始
プログラムを一時的な目的プログラムにコンパイルして
実行することにより間接呼出において実際に呼び出され
る手続の手続呼出回数が所定の条件を満たす場合には、
その手続の間接呼出のコードを直接呼出のコードに変更
して、目的プログラムを生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、プログラム変換
方法、プログラム変換装置及びプログラム変換プログラ
ムを記憶した記憶媒体に関し、詳しくは、プログラミン
グ言語で記述された原始プログラムを計算機やプロセッ
サが実行可能な言語(機械語、アセンブリ言語など)で
記述された目的プログラムに変換(コンパイル)するプ
ログラム変換方法、プログラム変換装置及びプログラム
変換プログラムを記憶した記憶媒体に関する。
【0002】
【従来の技術】図15は、特開平1-118931号公
報に開示されている従来のプログラム変換装置の電気的
構成例を示すブロック図である。この例のプログラム変
換装置は、第1プログラム記憶部1と、コンパイラ2
と、第2プログラム記憶部3と、第3プログラム記憶部
4と、入力データ記憶部5と、プログラム実行部6と、
第4プログラム記憶部7と、解析結果記憶部8とから概
略構成されている。まず、コンパイラ2は、第1プログ
ラム記憶部1から、例えば、図16(a)に示すような
C言語(商標名)等のプログラミング言語で記述された
原始プログラムを読み込み、手続や関数、あるいはサブ
ルーチン(以下、単に手続という)のインライン展開に
よる最適化を行わない一時的な目的プログラムを作成
し、第2プログラム記憶部3に記憶する。ここで、イン
ライン展開とは、原始プログラム上の手続の呼出コード
を、目的プログラム上において当該手続を直接処理する
実行コード列に変換することをいい、このインライン展
開を最適に行うことにより、手続の呼出時に起こるレジ
スタ退避やスタックフレーム生成等のオーバーヘッドが
なくなり、計算機が目的プログラムを実行した際の実行
速度が速くなるのである。
【0003】次に、プログラム実行部6は、第4プログ
ラム記憶部7から、手続呼出頻度解析プログラムを読み
込み、それを実行する。すなわち、プログラム実行部6
は、第2プログラム記憶部3から一時的な目的プログラ
ムを読み込むと共に、操作者が入力し入力データ記憶部
5に記憶した入力データを入力データ記憶部5から読み
込み、一時的な目的プログラムの実行をシミュレートし
つつ、一時的な目的プログラムの中の各手続が呼び出さ
れた回数を積算し、その結果を当該手続のコード量(コ
ードサイズ)と合わせて手続呼出頻度解析結果として解
析結果記憶部8に記憶する。これにより、コンパイラ2
は、解析結果記憶部8から手続呼出頻度解析結果を読み
込み、各手続が呼び出される頻度が予め定めた基準値を
越えているか否か及び当該手続のサイズが予め定めた基
準値を越えているか否かを判断して、当該手続をインラ
イン展開するか否かを決定し、その決定に基づいてイン
ライン展開が必要ならばインライン展開処理(インライ
ン展開の最適化)を行い、最終的な目的プログラムを作
成し、第3プログラム記憶部4に記憶する。図16
(b)は、同図(a)に示す原始プログラムをコンパイ
ルし、インライン展開の最適化処理を施した後の最終的
な目的プログラムをC言語で表現した場合を示してい
る。
【0004】
【発明が解決しようとする課題】ところで、近年では、
システムを、あるデータ(群)とそれを使用するための
手続群を一体化したオブジェクトの集合で表現しようと
する考え方(オブジェクト指向;object oriented)に
基づいたプログラミング言語(オブジェクト指向言語)
が、広く普及しつつある。このオブジェクト指向言語の
代表的なものとして、スモールトーク(smalltalk)
(商標名)があるが、C++(商標名)、ターボ・パス
カル(TURBO PASCAL)(商標名)など既存の手続宣言型
のプログラミング言語に、オブジェクト指向を付加した
プログラミング言語も数多く現れている。このようなオ
ブジェクト指向言語においては、図16(a)に示すよ
うな、原始プログラム上のある箇所に手続の呼出コード
が記述されており、その箇所で当該手続が直接呼び出さ
れる形式の直接呼出だけでなく、図17に示すような、
原始プログラム上のある箇所で手続のアドレスが特定の
変数(ポインタ)(図17の場合、変数fp)に代入さ
れ、他の箇所(図17の場合、300行目)でその変数
を用いて当該手続が間接的に呼び出される形式の間接呼
出が用いられる場合が処理の都合上多くなる傾向にあ
る。したがって、計算機が目的プログラムを実行した際
の実行速度を速くして効率的な目的プログラムを作成す
るためには、上記間接呼出についても何らかの最適化処
理を行う必要がある。
【0005】ところが、上記した従来のプログラム変換
装置におけるインライン展開の最適化処理は、手続の直
接呼出に対してのみ適用され、手続の間接呼出に対して
は適用できない。何故なら、例えば、図17に示す原始
プログラムでは、1行目〜6行目に示す条件分岐におい
て、「式」が成立した場合には変数fpに手続fのアド
レスが代入され、「式」が成立しなかった場合には変数
fpに手続hのアドレスが代入され、300行目におい
て、変数fpにより手続を間接呼出しているが、コンパ
イラ2が原始プログラムを一時的な目的プログラムにコ
ンパイルした時点では、300行目で実際に呼び出され
る手続が手続gなのか手続hなのか決定できないからで
ある。なお、図17において、手続の間接呼出コードを
300行目として変数fpへの手続g又は手続hのアド
レス代入コードから離して示しているのは、これらのコ
ードが互いに近い行に記述されている場合には、一時的
な目的プログラムを実行せずに解析する静的解析の際に
手続の間接呼出で呼び出される手続が手続gか手続hか
のどちらかを決めることができるが、図17に示すよう
に離れている場合には、静的解析ができないということ
を示すためである。したがって、上記した従来のプログ
ラム変換装置によっては、手続の間接呼出を含む原始プ
ログラムを目的プログラムに効率的にコンパイルできな
いという欠点があった。
【0006】この発明は、上述の事情に鑑みてなされた
もので、手続の間接呼出を含む原始プログラムでも、効
率的な目的プログラムにコンパイルできるプログラム変
換方法、プログラム変換装置及びプログラム変換プログ
ラムを記憶した記憶媒体を提供することを目的としてい
る。
【0007】
【課題を解決するための手段】上記課題を解決するため
に、請求項1記載の発明は、プログラミング言語で記述
された原始プログラムを計算機やプロセッサが実行可能
な言語で記述された目的プログラムに変換するプログラ
ム変換方法に係り、原始プログラムを目的プログラムに
変換する過程で得られる手続、関数、あるいはサブルー
チンに関する情報に基づいて、プログラム上のある箇所
で上記手続、関数、あるいはサブルーチンの識別情報が
特定の変数に代入され、他の箇所でその変数を用いて当
該手続、関数、あるいはサブルーチンが間接的に呼び出
される間接呼出のコードを、プログラム上のある箇所で
上記手続、関数、あるいはサブルーチンが直接呼び出さ
れる直接呼出のコードに変更して、目的プログラムを生
成することを特徴としている。
【0008】請求項2記載の発明は、請求項1記載のプ
ログラム変換方法に係り、上記情報は、上記原始プログ
ラムから変換された一時的な目的プログラムを所定の入
力パターンに基づいて実行することにより、上記間接呼
出のコードの各箇所において上記手続、関数、あるいは
サブルーチンが実際に呼び出される呼出回数であり、上
記呼出回数が所定の条件を満たす場合には、対応する手
続、関数、あるいはサブルーチンの間接呼出のコードを
直接呼出のコードに変更することを特徴としている。
【0009】請求項3記載の発明は、請求項2記載のプ
ログラム変換方法に係り、上記手続、関数、あるいはサ
ブルーチンの呼出回数及びコード・サイズが所定の条件
を満たす場合には、当該手続、関数、あるいはサブルー
チンの直接呼出のコードを、当該手続、関数、あるいは
サブルーチンを直接処理する実行コード列にインライン
展開することを特徴としている。
【0010】請求項4記載の発明は、プログラミング言
語で記述された原始プログラムを計算機やプロセッサが
実行可能な言語で記述された目的プログラムに変換する
プログラム変換方法に係り、上記原始プログラムを一時
的な目的プログラムに変換した後、上記一時的な目的プ
ログラムを所定の入力パターンに基づいて実行しつつ、
上記原始プログラム上のある箇所で手続、関数、あるい
はサブルーチンの識別情報が特定の変数に代入され、他
の箇所でその変数を用いて当該手続、関数、あるいはサ
ブルーチンが間接的に呼び出される間接呼出のコードの
各箇所毎に、実際に呼び出された手続、関数、あるいは
サブルーチンの識別情報の個数をそれぞれ積算する第1
の処理と、上記原始プログラムを目的プログラムに変換
すると共に、上記間接呼出のコードの各箇所において、
複数の手続、関数、あるいはサブルーチンのうち、上記
識別情報の個数の積算結果が所定の条件を満たすものに
ついて、当該間接呼出のコードで用いられる変数に代入
されている値が当該手続、関数、あるいはサブルーチン
の識別情報か否かを判断する条件分岐のコードと、その
条件が成立する場合に当該手続、関数、あるいはサブル
ーチンを直接呼び出す直接呼出のコードを挿入する第2
の処理と、上記第2の処理を経た目的プログラムについ
て、上記複数の手続、関数、あるいはサブルーチンのう
ち、上記識別情報の個数の積算結果及びコード・サイズ
が所定の条件を満たすものについて、当該手続、関数、
あるいはサブルーチンの直接呼出のコードを、当該手
続、関数、あるいはサブルーチンを直接処理する実行コ
ード列にインライン展開する第3の処理と、上記第3の
処理を経た目的プログラムについて、ある手続、関数、
あるいはサブルーチン手続について当該手続、関数、あ
るいはサブルーチンに関する情報のみを利用して最適化
したり、ある手続、関数、あるいはサブルーチンが他の
手続、関数、あるいはサブルーチンを呼び出している場
合に呼び出される側を解析して情報を収集すると共に、
可能ならば呼び出される側の最適化を行い、呼び出す側
に関する情報と呼び出される側に関する情報とを利用し
て呼び出す側について最適化した後、最終的な目的プロ
グラムを作成する第4の処理とからなることを特徴とし
ている。
【0011】請求項5記載の発明は、請求項4記載のプ
ログラム変換方法に係り、上記第1の処理では、上記間
接呼出のコードの各箇所に、上記一時的な目的プログラ
ムを実行した際に当該箇所で実際に呼び出される手続、
関数、あるいはサブルーチンの識別情報を出力するため
のコードを挿入し、上記一時的な目的プログラムの実行
時に出力された各手続、関数、あるいはサブルーチンの
識別情報を積算することを特徴としている。
【0012】請求項6記載の発明は、プログラミング言
語で記述された原始プログラムを計算機やプロセッサが
実行可能な言語で記述された目的プログラムに変換する
プログラム変換装置に係り、原始プログラムを一時的な
目的プログラムに変換するプログラム変換手段と、上記
一時的な目的プログラムを所定の入力パターンに基づい
て実行して手続、関数、あるいはサブルーチンに関する
情報を収集する情報収集手段と、上記情報に基づいて、
プログラム上のある箇所で上記手続、関数、あるいはサ
ブルーチンの識別情報が特定の変数に代入され、他の箇
所でその変数を用いて当該手続、関数、あるいはサブル
ーチンが間接的に呼び出される間接呼出のコードを、プ
ログラム上のある箇所で上記手続、関数、あるいはサブ
ルーチンが直接呼び出される直接呼出のコードに変更し
て、目的プログラムを生成する最適化手段とを備えてな
ることを特徴としている。
【0013】請求項7記載の発明は、請求項6記載のプ
ログラム変換装置に係り、上記情報は、上記原始プログ
ラムから変換された一時的な目的プログラムを所定の入
力パターンに基づいて実行することにより、上記間接呼
出のコードの各箇所において上記手続、関数、あるいは
サブルーチンが実際に呼び出される呼出回数であり、上
記最適化手段は、上記呼出回数が所定の条件を満たす場
合には、対応する手続、関数、あるいはサブルーチンの
間接呼出のコードを直接呼出のコードに変更することを
特徴としている。
【0014】請求項8記載の発明は、請求項7記載のプ
ログラム変換装置に係り、上記最適化手段は、上記手
続、関数、あるいはサブルーチンの呼出回数及びコード
・サイズが所定の条件を満たす場合には、当該手続、関
数、あるいはサブルーチンの直接呼出のコードを、当該
手続、関数、あるいはサブルーチンを直接処理する実行
コード列にインライン展開することを特徴としている。
【0015】請求項9記載の発明は、プログラミング言
語で記述された原始プログラムを計算機やプロセッサが
実行可能な言語で記述された目的プログラムに変換する
プログラム変換装置に係り、上記原始プログラムを一時
的な目的プログラムに変換すると共に、上記原始プログ
ラム上のある箇所で手続、関数、あるいはサブルーチン
の識別情報が特定の変数に代入され、他の箇所でその変
数を用いて当該手続、関数、あるいはサブルーチンが間
接的に呼び出される間接呼出のコードの各箇所に、上記
一時的な目的プログラムを実行した際に当該箇所で実際
に呼び出される手続、関数、あるいはサブルーチンの識
別情報を出力するためのコードを挿入するコード挿入手
段と、上記一時的な目的プログラムを所定の入力パター
ンに基づいて実行しつつ、上記間接呼出のコードの各箇
所毎に、実際に呼び出され、出力された手続、関数、あ
るいはサブルーチンの識別情報の個数をそれぞれ積算す
るプログラム実行手段と、原始プログラムを目的プログ
ラムに変換すると共に、上記間接呼出のコードの各箇所
において、複数の手続、関数、あるいはサブルーチンの
うち、上記識別情報の個数の積算結果が所定の条件を満
たすものについて、当該間接呼出のコードで用いられる
変数に代入されている値が当該手続、関数、あるいはサ
ブルーチンの識別情報か否かを判断する条件分岐のコー
ドと、その条件が成立する場合に当該手続、関数、ある
いはサブルーチンを直接呼び出す直接呼出のコードを挿
入する第1の最適化手段と、上記第1の最適化手段によ
る処理を経た目的プログラムについて、上記複数の手
続、関数、あるいはサブルーチンのうち、上記識別情報
の個数の積算結果及びコード・サイズが所定の条件を満
たすものについて、当該手続、関数、あるいはサブルー
チンの直接呼出のコードを、当該手続、関数、あるいは
サブルーチンを直接処理する実行コード列にインライン
展開するインライン展開手段と、上記インライン展開手
段の処理を経た目的プログラムについて、ある手続、関
数、あるいはサブルーチン手続について当該手続、関
数、あるいはサブルーチンに関する情報のみを利用して
最適化したり、ある手続、関数、あるいはサブルーチン
が他の手続、関数、あるいはサブルーチンを呼び出して
いる場合に呼び出される側を解析して情報を収集すると
共に、可能ならば呼び出される側の最適化を行い、呼び
出す側に関する情報と呼び出される側に関する情報とを
利用して呼び出す側について最適化した後、最終的な目
的プログラムを作成する第2の最適化手段とからなるこ
とを特徴としている。
【0016】請求項10記載の発明に係る記憶媒体は、
コンピュータに請求項1乃至9のいずれか1に記載の機
能を実現させるためのプログラム変換プログラムが記憶
されていることを特徴としている。
【0017】
【作用】この発明の構成によれば、手続の間接呼出を含
む原始プログラムでも、効率的な目的プログラムにコン
パイルできる。これにより、計算機やプロセッサが目的
プログラムを実行した際の実行速度が速くなる。
【0018】
【発明の実施の形態】以下、図面を参照して、この発明
の実施の形態について説明する。説明は、実施例を用い
て具体的に行う。図1は、この発明の一実施例であるプ
ログラム変換装置の電気的構成を示すブロック図であ
る。この例のプログラム変換装置は、第1プログラム記
憶部11と、第1情報記憶部12と、第2プログラム記
憶部13と、コンパイラ14と、第3プログラム記憶部
15と、第4プログラム記憶部16と、第5プログラム
記憶部17と、プログラム実行部18と、第2情報記憶
部19とから概略構成されている。第1プログラム記憶
部11は、ROMやRAM等の半導体メモリ、FD(フ
ロッピーディスク)、HD(ハードディスク)やCD−
ROM等の記憶媒体からなり、例えば、図2に示すよう
なC言語等のプログラミング言語で記述された原始プロ
グラムが予め記憶されている。図2において、各変数f
p,p,q,s及びtは、原始プログラム全体、すなわ
ち、手続fの外部でも使用されるグローバル変数であ
る。また、この原始プログラムにおいては、その6行目
で変数fpを用いて手続の間接呼出が行われるが、変数
fpへの手続のアドレスの代入は手続fの実行前のいず
れかの行で行われるものとする。なお、この実施例にお
いて、手続とは、本来の意味の手続の他、関数及びサブ
ルーチンを含めた総称である。
【0019】第1情報記憶部12は、ROMやRAM等
の半導体メモリ、FD、HDやCD−ROM等の記憶媒
体からなり、原始プログラムで用いられる各手続のコー
ド・サイズが予め求められて記憶される。すなわち、原
始プログラムを記述するために使用されるプログラミン
グ言語においてコンパイラなどの処理系で予め用意され
ており、プログラマが定義せずに使用できる組み込み関
数(built-in function)については、それぞれのコー
ド・サイズが第1情報記憶部12に予め記憶されてい
る。これに対し、原始プログラムの作成にあたってプロ
グラマが定義した手続については、例えば、コンパイラ
14が原始プログラムをコンパイルした一時的な目的プ
ログラムにおける各手続のコード・サイズを求めて第1
情報記憶部12に記憶するようにしても良い。この場
合、一時的な目的プログラムには、後述するコード挿入
手段14aによりコードが挿入されるので、各手続のコ
ード・サイズは、厳密にはその挿入されたコードの分だ
け異なるが、影響は少ない。また、コンパイラ14が原
始プログラムを一旦中間言語によるプログラムにコンパ
イルし、その中間言語によるプログラムにおいて手続の
インライン展開処理や各種最適化処理が行われる場合に
は、そのプログラムにおける手続のコード・サイズを求
めて第1情報記憶部12に記憶するようにしても良い。
第2プログラム記憶部13は、ROMやRAM等の半導
体メモリ、FD、HDやCD−ROM等の記憶媒体から
なり、コンパイラ14で用いられる、原始プログラムを
実行可能な最終的なプログラムにコンパイルするための
コンパイル・プログラムが予め記憶されている。
【0020】コンパイラ14は、図3に示すように、コ
ード挿入手段14aと、第1最適化手段14bと、展開
手段14cと、第2最適化手段14dとから概略構成さ
れており、第2プログラム記憶部13からコンパイル・
プログラムを読み込んで、それに基づいて、各手段が以
下に示す処理を行う。コード挿入手段14aは、原始プ
ログラムを実行可能な一時的な目的プログラムにコンパ
イルして第3プログラム記憶部15に記憶する。この
際、コード挿入手段14aは、手続の間接呼出コードの
各箇所に、プログラム実行部18が一時的な目的プログ
ラムを実行した際に当該箇所で実際に呼び出された手続
の識別情報(例えば、当該手続のアドレス等)を外部の
ファイルへ出力するためのコードを挿入する。
【0021】第1最適化手段14bは、原始プログラム
を実行可能な目的プログラムにコンパイルする。この
際、第1最適化手段14bは、目的プログラムが実行さ
れた際に各手続が呼び出される回数である手続呼出回数
を手続の間接呼出コードの各箇所毎に読み込み、手続の
間接呼出コードの各箇所においてある特定の手続の呼出
が予め定めた条件を満たす場合には、当該手続が頻繁に
呼び出されていると判断して、当該間接呼出コードで用
いられる変数に代入されているアドレスが当該手続のア
ドレスか否かを判断する条件分岐コードと、当該手続を
直接呼び出すコードとを挿入する。すなわち、当該手続
を間接呼出から直接呼出に変更する。上記条件は、当該
間接呼出コードにおける全ての手続の呼出回数に対し
て、ある特定の手続の呼出回数が占める割合(手続呼出
頻度)を意味し、例えば、予め一定値(例えば、8割な
いし9割)を設定しておいたり、コンパイラ14におい
て操作者が設定できるようにしても良い。展開手段14
cは、第1情報記憶部12に記憶されている各手続のコ
ード・サイズと、第2情報記憶部20に記憶されている
各手続の手続呼出回数とを読み込み、第1最適化手段1
4bによってコンパイルされた目的プログラムについ
て、各手続が予め定めた条件を満たす場合には、当該手
続をインライン展開した方が有利であると判断して、当
該手続のインライン展開処理を行う。上記条件は、最終
的な目的プログラムが記憶される記憶媒体(例えば、R
OM)の記憶容量、当該手続のコード・サイズ、あるい
は手続呼出頻度等により決定されるものであり、例え
ば、各種のプログラムについて調査した結果に基づいて
予め設定しておいたり、コンパイラ14において操作者
が設定できるようにしても良い。また、第2最適化手段
14dは、展開手段14cによって処理された目的プロ
グラムについて、ある手続について当該手続に関する情
報のみを利用して最適化する手続内最適化や、ある手続
(呼出側手続)が他の手続(被呼出側手続)を呼び出し
ている場合に被呼出側手続を解析して情報を収集すると
共に、可能ならば被呼出側手続の最適化を行い、呼出側
手続に関する情報と被呼出側手続に関する情報とを利用
して呼出側手続について最適化する手続間最適化等の各
種最適化処理を行い、最終的な目的プログラムを作成し
て第4プログラム記憶部16に記憶する。
【0022】第3プログラム記憶部15は、RAM等の
半導体メモリ、FDやHD等の記憶媒体からなり、一時
的な目的プログラムが記憶される。第4プログラム記憶
部16は、RAM等の半導体メモリ、FDやHD等の記
憶媒体からなり、最終的な目的プログラムが記憶され
る。第5プログラム記憶部17は、ROMやRAM等の
半導体メモリ、FD、HDやCD−ROM等の記憶媒体
からなり、プログラム実行部18が一時的な目的プログ
ラムを実行しつつ、各手続毎の識別情報及び手続呼出回
数からなる動的情報(プロファイル情報)を収集するた
めの動的情報収集プログラムが予め記憶されている。こ
の動的情報収集プログラムは、一時的な目的プログラム
を実行する際に最も典型的な入力データの入力パターン
を想定して作成されている。プログラム実行部18は、
ハードウェア・エミュレータやソフトウェア・シミュレ
ータ等からなり、第5プログラム記憶部17から動的情
報収集プログラムを読み込み、それに基づいて、第3プ
ログラム記憶部15から一時的な目的プログラム読み込
むと共に、操作者が入力し入力データ記憶部19に記憶
した入力データを入力データ記憶部19から読み込み、
一時的な目的プログラムを実行しつつ動的情報を収集
し、得られた動的情報を第2情報記憶部20に記憶す
る。入力データ記憶部19は、RAM等の半導体メモ
リ、FDやHD等の記憶媒体からなり、操作者が入力し
た、一時的な目的プログラムを実行する際に入力すべき
最も典型的な入力パターンを構成する入力データが予め
記憶されている。第2情報記憶部20は、RAM等の半
導体メモリ、FDやHD等の記憶媒体からなり、動的情
報が記憶される。
【0023】次に、上記構成を有するプログラム変換装
置の動作について、図4〜図14を参照して説明する。
まず、コンパイラ14は、第2プログラム記憶部13か
らコンパイル・プログラムを読み込んだ後、それに基づ
いて、コード挿入手段14a、第1最適化手段14b、
展開手段14c及び第2最適化手段14dが後述する処
理を行う。コード挿入手段14aは、第1プログラム記
憶部11から読み込まれた原始プログラム(図2参照)
を実行可能な一時的な目的プログラムにコンパイルし
て、第3プログラム記憶部15に記憶する(コンパイル
処理)。この際、コード挿入手段14aは、図5に示す
ように、手続の間接呼出コードの各箇所に、プログラム
実行部18が一時的な目的プログラムを実行した際に当
該箇所で実際に呼び出された手続のアドレスを外部のフ
ァイルに出力するコード、今の場合、プログラム実行部
18を構成するRAM等の記憶媒体(図示略)に記憶す
るためのコードを挿入する(コード挿入処理)。図5
は、図2に示す原始プログラムをコンパイルし、コード
挿入処理を施した後の一時的な目的プログラムをC言語
で表現した場合であり、6行目には呼び出された手続の
アドレスを出力するための「printf」文が挿入さ
れている。また、この場合、コード挿入手段14aは、
必要に応じて、原始プログラムの作成にあたってプログ
ラマが定義した各手続について、一時的な目的プログラ
ムにおけるそれぞれのコード・サイズを求めて第1情報
記憶部12に記憶する。
【0024】次に、プログラム実行部18は、第5プロ
グラム記憶部17から動的情報収集プログラムを読み込
み、それを実行する。すなわち、プログラム実行部18
は、第3プログラム記憶部15から一時的な目的プログ
ラムを読み込むと共に、入力データ記憶部19から入力
データを読み込み、最も典型的な入力データの入力パタ
ーンにより一時的な目的プログラムを実行する(実行処
理)。これにより、一時的な目的プログラムの実行時に
おいて、手続の間接呼出コードの各箇所で実際に呼び出
された手続のアドレスが、図6に示すように順次出力さ
れ、プログラム実行部18を構成するRAM等の記憶媒
体(図示略)に記憶される。したがって、プログラム実
行部18は、一時的な目的プログラムの実行終了後、手
続の間接呼出コードの各箇所毎に、実際に呼び出された
各手続の手続呼出回数をそれぞれ積算し、その結果を手
続のアドレスと共に動的情報として第2情報記憶部20
に記憶する(動的情報収集処理)。図6の例では、アド
レス「1048784」の手続の手続呼出回数が最も多
い。この実施例においては、動的情報収集処理の結果、
図5に示す一時的な目的プログラムの6行目ではアドレ
ス「1048784」の手続gの手続呼出回数が最も多
いものとする。
【0025】次に、コンパイラ14の第1最適化手段1
4bは、原始プログラムを実行可能な目的プログラムに
コンパイルする(再コンパイル処理)。この際、第1最
適化手段14bは、第2情報記憶部20に記憶されてい
る手続の間接呼出コードの各箇所毎の各手続の手続呼出
回数を読み込み、手続の間接呼出コードの各箇所におい
てある特定の手続の呼出が予め定めた条件を満たす場合
には、当該手続が頻繁に呼び出されていると判断して、
当該間接呼出コードで用いられる変数に代入されている
アドレスが当該手続のアドレスか否かを判断する条件分
岐コードと、当該手続を直接呼び出すコードとを挿入す
る(間接呼出最適化処理)。すなわち、当該手続を間接
呼出から直接呼出に変更する。この実施例においては、
上記のように、図5に示す一時的な目的プログラムの6
行目では手続gの手続呼出回数が最も多く、予め定めた
条件を満たすとする。したがって、この箇所では手続g
が頻繁に呼び出されていると判断され、図7に示すよう
に、目的プログラムが生成される。図7において、6行
目及び9行目が条件分岐コード、7行目が手続gを直接
呼び出すコードであり、手続g以外の手続については1
0行目に示すように間接呼出コードのままである。
【0026】次に、展開手段14cは、第1情報記憶部
12に記憶されている各手続のコード・サイズと、第2
情報記憶部20に記憶されている各手続の手続呼出回数
とを読み込み、第1最適化手段14bによってコンパイ
ルされた目的プログラムについて、各手続が予め定めた
条件を満たす場合には、当該手続をインライン展開した
方が有利であると判断して、当該手続のインライン展開
処理を行う。例えば、手続gが、図8に示すように、簡
単な関数であり、コード・サイズが小さく、予め定めた
条件を満たす場合には、手続gをインライン展開した方
が有利であると判断され、図9の7行目に示すように、
インライン展開される。次に、第2最適化手段14d
は、展開手段14cによって処理された目的プログラム
について、手続内最適化や手続間最適化等の各種最適化
処理を行い(最終最適化処理)、最終的な目的プログラ
ムを作成して第4プログラム記憶部16に記憶する。
【0027】ここで、手続gについて、図9に示すよう
にインライン展開された場合と、インライン展開されな
かった場合の最終最適化処理について、図10〜図14
を参照して説明する。 (1)手続gがインライン展開された場合 まず、図9の状態では、インライン展開された手続gの
変数t及びpは、3行目及び4行目で代入されている値
0及び10と、それぞれ、置き換えが可能である。ま
た、さらに最適化するために、13行目及び14行目の
各コードを複製して、「if」文のブロック(6行目〜
8行目)と「else」文のブロック(9行目〜11行
目)に移動する。その結果を図10に示す。なお、コー
ドを複製して「if」文のブロックと「else」文の
ブロックに移動する処理の詳細については、"Useing Pr
ofile Information to Assist Classic Compiler Code
Optimizations" (P.Chang, S.Mahlke, W.Hwu, Software
Practice and Experience,Dec. 1991, Vol. 21, No.1
2)を参照されたい。次に、図10の状態において、「i
f」文のブロック(6行目〜10行目)の手続gがイン
ライン展開された変数sへの代入文(7行目)は、直後
の8行目に変数sへの代入文が存在するため、不要とな
り、削除が可能である。また、この「if」文のブロッ
ク(6行目〜10行目)においては、8行目及び9行目
の変数t及びpは、それぞれの値が変更されないことが
明かであるから、3行目及び4行目で各変数t及びpに
代入されている値0及び10とそれぞれ置き換えが可能
である。これに対して、「else」文のブロック(1
1行目〜15行目)においては、12行目が手続の間接
呼出コードのままであるので、実際に呼び出される手続
が手続g以外のどの手続であるかは目的プログラムが実
行されるまで不明であり、13行目及び14行目の変数
t及びpは、3行目及び4行目で代入されている値0及
び10とそれぞれ置き換えることができない。以上の最
終最適化処理を施すことにより得られた最終的な目的プ
ログラムを図11に示す。図11に示すように、目的プ
ログラム実行時にあまり起こらないケース、すなわち、
変数fpの値が手続g以外のアドレスの場合には、変数
fpの値をチェックする処理が増えるので、その分目的
プログラムの実行速度が遅くなる。しかし、頻繁に起こ
るケース、すなわち、変数fpの値が手続gのアドレス
の場合には、変数fpの値をチェックする処理は増えた
ものの、手続gの直接呼出処理及び呼び出された手続g
における処理自体が削除されるだけでなく、その後の変
数s及びpに代入される値もコンパイル処理時に決定さ
れている。したがって、目的プログラム全体の実行速度
は従来に比べてかなり速くなっている。
【0028】(2)手続gがインライン展開されなかっ
た場合 手続gが図8に示すようなコード・サイズの小さい手続
ではないため、インライン展開されなかった場合でも、
以下に示す手続間最適化処理を施すことにより、目的プ
ログラムを効率化できる。まず、図7に示す目的プログ
ラムについて、手続間最適化処理の効果をより顕著にさ
せるために、13行目及び14行目の各コードを複製し
て、「if」文のブロック(6行目〜8行目)と「el
se」文のブロック(9行目〜11行目)に移動する。
その結果を図12に示す。次に、図12の状態におい
て、手続間最適化処理を、この処理により複製され、増
加するコードのコード・サイズが予め設定されたコード
・サイズより増加しないという条件が満たされる場合に
行う。上記条件は、例えば、各種のプログラムについて
調査した結果に基づいて予め設定しておいたり、コンパ
イラ14において操作者が設定できるようにしても良
い。
【0029】以下、手続間最適化処理について説明す
る。なお、以下の説明では、図12の7行目に示す手続
(被呼出側手続)gは、便宜的に、図8に示すものとす
る。すなわち、被呼出側手続gが図8に示すような簡単
な構成の場合には、既に説明したようにインライン展開
できるが、ここでは仮にインライン展開できなかったも
のとする。まず、図8に示す被呼出側手続gを解析し
て、代入される変数が変数sであり、読み出される変数
が、変数t及びpである、という情報(副作用情報)を
収集する。この場合、可能ならば被呼出側手続gの最適
化(関数内最適化)を行う。今の場合、被呼出側手続g
の関数内最適化を行う必要はない。次に、呼出側手続で
ある手続fの最適化を行うが、被呼出側手続gを呼び出
している箇所の解析を行うにあたって、先に収集した被
呼出側手続gの副作用情報を利用する。今の場合、被呼
出側手続gにおいては、代入される変数が変数sであ
り、読み出される変数が変数t及びpであって、変数t
及びpの値が変更されないことが明かである。したがっ
て、図12に示す「if」文のブロック(6行目〜10
行目)の8行目及び9行目では、変数t及びpは、3行
目及び4行目で各変数t及びpに代入されている値0及
び10とそれぞれ置き換えが可能である。これに対し
て、「else」文のブロック(11行目〜15行目)
においては、12行目が手続の間接呼出コードのままで
あるので、実際に呼び出される手続が手続g以外のどの
手続であるかは目的プログラムが実行されるまで不明で
あり、13行目及び14行目の変数t及びpは、3行目
及び4行目で代入されている値0及び10とそれぞれ置
き換えることができない。以上の処理の結果を図13に
示す。
【0030】そして、図13の状態において、8行目及
び9行目について整理することにより、図14に示す最
終的な目的プログラムが得られる。図14に示すよう
に、目的プログラム実行時にあまり起こらないケース、
すなわち、変数fpの値が手続g以外のアドレスの場合
には、変数fpの値をチェックする処理が増えるので、
その分目的プログラムの実行速度が遅くなる。しかし、
頻繁に起こるケース、すなわち、変数fpの値が手続g
のアドレスの場合には、変数fpの値をチェックする処
理は増えたものの、8行目及び9行目において変数s及
びpに代入される値がコンパイル処理時に決定されてい
る。目的プログラムを実行する計算機やプロセッサの種
類によっては、乗算の実行時間が他の演算の実行時間に
比べてかなり長いものもあるので、そのような計算機や
プロセッサにおいては、図14の8行目において、「s
= t*2」の乗算を行わずに、直ちに「s = 0」の
処理を行うことにより、目的プログラム全体の実行速度
は従来に比べてかなり速くなる。なお、以上の説明にお
いては、原始プログラム上における手続の間接呼出の最
適化処理についてのみ説明したが、原始プログラム上に
おける手続の直接呼出についても、コード・サイズ等の
条件が満たされる場合には、インライン展開処理される
他、関数内最適化処理等の各種の最適化処理が施される
ことはいうまでもない。
【0031】以上、この発明の実施例を図面を参照して
詳述してきたが、具体的な構成はこの実施例に限られる
ものではなく、この発明の要旨を逸脱しない範囲の設計
の変更等があってもこの発明に含まれる。例えば、上述
の実施例においては、各プログラム記憶部11,13,
15,16,17、各情報記憶部12,20及び入力デ
ータ記憶部19は、それぞれ別々の記憶媒体で構成する
例を示したが、これに限定されず、例えば、同一の記憶
媒体の異なる記憶領域で構成するようにしても良い。そ
の場合、各プログラム記憶部11,13,15,16,
17は、記憶対象が多くの記憶容量を要するプログラム
であるので、FDやHD、あるいはCD−ROMで構成
し、各情報記憶部12,20及び入力データ記憶部19
は、記憶対象が比較的少ない記憶容量で済むデータであ
るので、ROMやRAM等の半導体メモリで構成するよ
うにしても良い。
【0032】また、上述の実施例においては、コンパイ
ラ14にコード挿入手段14aを設け、手続の間接呼出
コードの各箇所に、プログラム実行部18が一時的な目
的プログラムを実行した際に当該箇所で実際に呼び出さ
れた手続の識別情報を外部のファイルへ出力するための
コードを挿入したが、これに限定されない。例えば、コ
ード挿入手段14aに代えて、プログラム実行部18に
プログラムの実行情報を収集する手段を設け、一時的な
目的プログラムを実行する際に、上記手続の識別情報を
収集するように構成しても良い。一例として、プログラ
ム実行部18を、計算機やプロセッサの動作をソフトウ
ェア的にシミュレートするソフトウェア・シミュレータ
で構成した場合、操作者が、目的プログラム実行時に、
目的プログラムにおける手続の間接呼出コードの各箇所
のアドレスを指定し、各箇所において手続を間接呼び出
しする変数(この実施例では、変数fp)の値を外部に
出力せよと指示できる機能をソフトウェア・シミュレー
タに付与し、その機能により、手続のアドレスを外部の
ファイルに出力させるように構成する。
【0033】さらに、上述の実施例においては、各手段
をハードウェアで構成した例を示したが、これに限定さ
れない。すなわち、上記プログラム変換装置を、CPU
(中央処理装置)と、ROMやRAM等の内部記憶装置
と、FDD(フロッピー・ディスク・ドライバ)、HD
D(ハード・ディスク・ドライバ)、CD−ROMドラ
イバ等の外部記憶装置と、出力手段と、入力手段とを有
するコンピュータによって構成し、上記コンパイラ14
及びプログラム実行部18がCPUによって構成され、
コンパイル・プログラム及び動的情報収集プログラムと
を合わせてプログラム変換プログラムとして、ROM等
の半導体メモリや、FD(フロッピー・ディスク)、H
D(ハード・ディスク)やCD−ROM等の記憶媒体に
記憶されていると構成しても良い。この場合、上記内部
記憶装置、あるいは外部記憶装置が各プログラム記憶部
11,13,15,16,17、各情報記憶部12,2
0及び入力データ記憶部19部分状況情報記憶手段1や
全体状況情報記憶手段3となり、プログラム変換プログ
ラムは、記憶媒体からCPUに読み込まれ、CPUの動
作を制御する。CPUは、プログラム変換プログラムが
起動されると、コンパイラ14及びプログラム実行部1
8として機能し、プログラム変換プログラムの制御によ
り、上記した処理を実行するのである。
【0034】
【発明の効果】以上説明したように、この発明の構成に
よれば、手続の間接呼出を含む原始プログラムでも、効
率的な目的プログラムにコンパイルできる。これによ
り、計算機やプロセッサが目的プログラムを実行した際
の実行速度が速くなる。特に、手続の間接呼出が用いら
れる場合が処理の都合上多くなる傾向にあるオブジェク
ト指向言語による原始プログラムのコンパイルにおいて
は、その効果がより顕著である。
【図面の簡単な説明】
【図1】この発明の一実施例であるプログラム変換装置
の電気的構成を示すブロック図である。
【図2】同実施例で用いられる原始プログラムの一例を
示す図である。
【図3】図1に示すコンパイラの電気的構成を示すブロ
ック図である。
【図4】同実施例におけるプログラム変換装置の動作を
表す処理図である。
【図5】図2に示す原始プログラムをコンパイルした一
時的な目的プログラムをC言語で表現した図である。
【図6】図5に示す一時的な目的プログラムの実行によ
り出力された手続のアドレスの一例を示す図である。
【図7】図2に示す原始プログラムをコンパイルし、頻
繁に呼び出される手続gを直接呼出に変更した目的プロ
グラムをC言語で表現した図である。
【図8】手続gの一例を示す図である。
【図9】図7に示す目的プログラムの手続gがインライ
ン展開された場合を示す図である。
【図10】図9に示す目的プログラムに対して最終最適
化処理を施した場合の第1段階を示す図である。
【図11】図9に示す目的プログラムに対して最終最適
化処理を施すことにより得られた最終的な目的プログラ
ムを示す図である。
【図12】図7に示す目的プログラムに対して最終最適
化処理を施した場合の第1段階を示す図である。
【図13】図7に示す目的プログラムに対して最終最適
化処理を施した場合の第2段階を示す図である。
【図14】図7に示す目的プログラムに対して最終最適
化処理を施すことにより得られた最終的な目的プログラ
ムを示す図である。
【図15】従来のプログラム変換装置の電気的構成例を
示すブロック図である。
【図16】従来例で用いられる原始プログラム及び最適
化された目的プログラムをC言語で表現した場合の一例
を示す図である。
【図17】手続の間接呼出コードを含む原始プログラム
の一例を示す図である。
【符号の説明】
13 第2プログラム記憶部 14 コンパイラ 14a コード挿入手段(プログラム変換手段) 14b 第1最適化手段(第1の最適化手段、最適化手
段) 14c 展開手段(インライン展開手段、最適化手段) 14d 第2最適化手段(第2の最適化手段、最適化手
段) 17 第5プログラム記憶部 18 プログラム実行部(プログラム実行手段、情報
収集手段)

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング言語で記述された原始プ
    ログラムを計算機やプロセッサが実行可能な言語で記述
    された目的プログラムに変換するプログラム変換方法に
    おいて、 原始プログラムを目的プログラムに変換する過程で得ら
    れる手続、関数、あるいはサブルーチンに関する情報に
    基づいて、プログラム上のある箇所で前記手続、関数、
    あるいはサブルーチンの識別情報が特定の変数に代入さ
    れ、他の箇所でその変数を用いて当該手続、関数、ある
    いはサブルーチンが間接的に呼び出される間接呼出のコ
    ードを、プログラム上のある箇所で前記手続、関数、あ
    るいはサブルーチンが直接呼び出される直接呼出のコー
    ドに変更して、目的プログラムを生成することを特徴と
    するプログラム変換方法。
  2. 【請求項2】 前記情報は、前記原始プログラムから変
    換された一時的な目的プログラムを所定の入力パターン
    に基づいて実行することにより、前記間接呼出のコード
    の各箇所において前記手続、関数、あるいはサブルーチ
    ンが実際に呼び出される呼出回数であり、前記呼出回数
    が所定の条件を満たす場合には、対応する手続、関数、
    あるいはサブルーチンの間接呼出のコードを直接呼出の
    コードに変更することを特徴とする請求項1記載のプロ
    グラム変換方法。
  3. 【請求項3】 前記手続、関数、あるいはサブルーチン
    の呼出回数及びコード・サイズが所定の条件を満たす場
    合には、当該手続、関数、あるいはサブルーチンの直接
    呼出のコードを、当該手続、関数、あるいはサブルーチ
    ンを直接処理する実行コード列にインライン展開するこ
    とを特徴とする請求項2記載のプログラム変換方法。
  4. 【請求項4】 プログラミング言語で記述された原始プ
    ログラムを計算機やプロセッサが実行可能な言語で記述
    された目的プログラムに変換するプログラム変換方法に
    おいて、 前記原始プログラムを一時的な目的プログラムに変換し
    た後、前記一時的な目的プログラムを所定の入力パター
    ンに基づいて実行しつつ、前記原始プログラム上のある
    箇所で手続、関数、あるいはサブルーチンの識別情報が
    特定の変数に代入され、他の箇所でその変数を用いて当
    該手続、関数、あるいはサブルーチンが間接的に呼び出
    される間接呼出のコードの各箇所毎に、実際に呼び出さ
    れた手続、関数、あるいはサブルーチンの識別情報の個
    数をそれぞれ積算する第1の処理と、 前記原始プログラムを目的プログラムに変換すると共
    に、前記間接呼出のコードの各箇所において、複数の手
    続、関数、あるいはサブルーチンのうち、前記識別情報
    の個数の積算結果が所定の条件を満たすものについて、
    当該間接呼出のコードで用いられる変数に代入されてい
    る値が当該手続、関数、あるいはサブルーチンの識別情
    報か否かを判断する条件分岐のコードと、その条件が成
    立する場合に当該手続、関数、あるいはサブルーチンを
    直接呼び出す直接呼出のコードを挿入する第2の処理
    と、 前記第2の処理を経た目的プログラムについて、前記複
    数の手続、関数、あるいはサブルーチンのうち、前記識
    別情報の個数の積算結果及びコード・サイズが所定の条
    件を満たすものについて、当該手続、関数、あるいはサ
    ブルーチンの直接呼出のコードを、当該手続、関数、あ
    るいはサブルーチンを直接処理する実行コード列にイン
    ライン展開する第3の処理と、 前記第3の処理を経た目的プログラムについて、ある手
    続、関数、あるいはサブルーチン手続について当該手
    続、関数、あるいはサブルーチンに関する情報のみを利
    用して最適化したり、ある手続、関数、あるいはサブル
    ーチンが他の手続、関数、あるいはサブルーチンを呼び
    出している場合に呼び出される側を解析して情報を収集
    すると共に、可能ならば呼び出される側の最適化を行
    い、呼び出す側に関する情報と呼び出される側に関する
    情報とを利用して呼び出す側について最適化した後、最
    終的な目的プログラムを作成する第4の処理とからなる
    ことを特徴とするプログラム変換方法。
  5. 【請求項5】 前記第1の処理では、前記間接呼出のコ
    ードの各箇所に、前記一時的な目的プログラムを実行し
    た際に当該箇所で実際に呼び出される手続、関数、ある
    いはサブルーチンの識別情報を出力するためのコードを
    挿入し、 前記一時的な目的プログラムの実行時に出力された各手
    続、関数、あるいはサブルーチンの識別情報を積算する
    ことを特徴とする請求項4記載のプログラム変換方法。
  6. 【請求項6】 プログラミング言語で記述された原始プ
    ログラムを計算機やプロセッサが実行可能な言語で記述
    された目的プログラムに変換するプログラム変換装置に
    おいて、 前記原始プログラムを一時的な目的プログラムに変換す
    るプログラム変換手段と、 前記一時的な目的プログラムを所定の入力パターンに基
    づいて実行して手続、関数、あるいはサブルーチンに関
    する情報を収集する情報収集手段と、 前記情報に基づいて、プログラム上のある箇所で前記手
    続、関数、あるいはサブルーチンの識別情報が特定の変
    数に代入され、他の箇所でその変数を用いて当該手続、
    関数、あるいはサブルーチンが間接的に呼び出される間
    接呼出のコードを、プログラム上のある箇所で前記手
    続、関数、あるいはサブルーチンが直接呼び出される直
    接呼出のコードに変更して、目的プログラムを生成する
    最適化手段とを備えてなることを特徴とするプログラム
    変換装置。
  7. 【請求項7】 前記情報は、前記原始プログラムから変
    換された一時的な目的プログラムを所定の入力パターン
    に基づいて実行することにより、前記間接呼出のコード
    の各箇所において前記手続、関数、あるいはサブルーチ
    ンが実際に呼び出される呼出回数であり、前記最適化手
    段は、前記呼出回数が所定の条件を満たす場合には、対
    応する手続、関数、あるいはサブルーチンの間接呼出の
    コードを直接呼出のコードに変更することを特徴とする
    請求項6記載のプログラム変換装置。
  8. 【請求項8】 前記最適化手段は、前記手続、関数、あ
    るいはサブルーチンの呼出回数及びコード・サイズが所
    定の条件を満たす場合には、当該手続、関数、あるいは
    サブルーチンの直接呼出のコードを、当該手続、関数、
    あるいはサブルーチンを直接処理する実行コード列にイ
    ンライン展開することを特徴とする請求項7記載のプロ
    グラム変換装置。
  9. 【請求項9】 プログラミング言語で記述された原始プ
    ログラムを計算機やプロセッサが実行可能な言語で記述
    された目的プログラムに変換するプログラム変換装置に
    おいて、 前記原始プログラムを一時的な目的プログラムに変換す
    ると共に、前記原始プログラム上のある箇所で手続、関
    数、あるいはサブルーチンの識別情報が特定の変数に代
    入され、他の箇所でその変数を用いて当該手続、関数あ
    るいはサブルーチンが間接的に呼び出される間接呼出の
    コードの各箇所に、前記一時的な目的プログラムを実行
    した際に当該箇所で実際に呼び出される手続、関数ある
    いはサブルーチンの識別情報を出力するためのコードを
    挿入するコード挿入手段と、 前記一時的な目的プログラムを所定の入力パターンに基
    づいて実行しつつ、前記間接呼出のコードの各箇所毎
    に、実際に呼び出され、出力された手続、関数、あるい
    はサブルーチンの識別情報の個数をそれぞれ積算するプ
    ログラム実行手段と、 前記原始プログラムを目的プログラムに変換すると共
    に、前記間接呼出のコードの各箇所において、複数の手
    続、関数、あるいはサブルーチンのうち、前記識別情報
    の個数の積算結果が所定の条件を満たすものについて、
    当該間接呼出のコードで用いられる変数に代入されてい
    る値が当該手続、関数、あるいはサブルーチンの識別情
    報か否かを判断する条件分岐のコードと、その条件が成
    立する場合に当該手続、関数、あるいはサブルーチンを
    直接呼び出す直接呼出のコードを挿入する第1の最適化
    手段と、 前記第1の最適化手段による処理を経た目的プログラム
    について、前記複数の手続、関数、あるいはサブルーチ
    ンのうち、前記識別情報の個数の積算結果及びコード・
    サイズが所定の条件を満たすものについて、当該手続、
    関数、あるいはサブルーチンの直接呼出のコードを、当
    該手続、関数、あるいはサブルーチンを直接処理する実
    行コード列にインライン展開するインライン展開手段
    と、 前記インライン展開手段の処理を経た目的プログラムに
    ついて、ある手続、関数、あるいはサブルーチン手続に
    ついて当該手続、関数、あるいはサブルーチンに関する
    情報のみを利用して最適化したり、ある手続、関数、あ
    るいはサブルーチンが他の手続、関数、あるいはサブル
    ーチンを呼び出している場合に呼び出される側を解析し
    て情報を収集すると共に、可能ならば呼び出される側の
    最適化を行い、呼び出す側に関する情報と呼び出される
    側に関する情報とを利用して呼び出す側について最適化
    した後、最終的な目的プログラムを作成する第2の最適
    化手段とからなることを特徴とするプログラム変換装
    置。
  10. 【請求項10】 コンピュータに請求項1乃至9のいず
    れか1に記載の機能を実現させるためのプログラム変換
    プログラムを記憶した記憶媒体。
JP01258198A 1998-01-26 1998-01-26 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 Expired - Lifetime JP3284956B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP01258198A JP3284956B2 (ja) 1998-01-26 1998-01-26 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US09/236,639 US6292940B1 (en) 1998-01-26 1999-01-26 Program complete system and its compile method for efficiently compiling a source program including an indirect call for a procedure
EP99101409A EP0932100A3 (en) 1998-01-26 1999-01-26 Program compile system and its compile method for efficiently compiling a source program including an indirect call for a procedure

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP01258198A JP3284956B2 (ja) 1998-01-26 1998-01-26 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Publications (2)

Publication Number Publication Date
JPH11212797A true JPH11212797A (ja) 1999-08-06
JP3284956B2 JP3284956B2 (ja) 2002-05-27

Family

ID=11809333

Family Applications (1)

Application Number Title Priority Date Filing Date
JP01258198A Expired - Lifetime JP3284956B2 (ja) 1998-01-26 1998-01-26 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Country Status (3)

Country Link
US (1) US6292940B1 (ja)
EP (1) EP0932100A3 (ja)
JP (1) JP3284956B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005301415A (ja) * 2004-04-07 2005-10-27 Ricoh Co Ltd コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム
JP2007233805A (ja) * 2006-03-02 2007-09-13 Oki Electric Ind Co Ltd プログラム変換システム
US9244666B2 (en) 2014-03-20 2016-01-26 International Business Machines Corporation Globally inline a callee with high cost-effectiveness on the basis only of profile information in a call graph

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3762867B2 (ja) * 1999-01-29 2006-04-05 富士通株式会社 コンパイラ装置、コンパイル方法、およびそのためのプログラムを格納した記憶媒体
US6983459B1 (en) * 1999-04-06 2006-01-03 International Business Machines Corporation Incorporating register pressure into an inlining compiler
US6748589B1 (en) 1999-10-20 2004-06-08 Transmeta Corporation Method for increasing the speed of speculative execution
JP3605327B2 (ja) * 1999-11-18 2004-12-22 富士通株式会社 プログラム実行装置
US8458754B2 (en) 2001-01-22 2013-06-04 Sony Computer Entertainment Inc. Method and system for providing instant start multimedia content
US7131119B2 (en) * 2001-05-30 2006-10-31 International Business Machines Corporation Code optimization
US6851110B2 (en) * 2001-06-07 2005-02-01 Hewlett-Packard Development Company, L.P. Optimizing an executable computer program having address-bridging code segments
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US6934940B2 (en) * 2002-01-30 2005-08-23 International Business Machines Corporation Source code transformation-temporary object reduction
JP2004164554A (ja) * 2002-09-24 2004-06-10 Hitachi Ltd プログラム実行監視装置および方法
JP3956131B2 (ja) * 2002-12-26 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム変換装置、プログラム変換方法及びプログラム
US7302679B2 (en) * 2003-10-31 2007-11-27 Hewlett-Packard Development Company, L.P. Scalable cross-file inlining through locality-based transformation ordering
US7814467B2 (en) * 2004-01-15 2010-10-12 Hewlett-Packard Development Company, L.P. Program optimization using object file summary information
JP2006243838A (ja) * 2005-02-28 2006-09-14 Toshiba Corp プログラム開発装置
US7661097B2 (en) * 2005-04-05 2010-02-09 Cisco Technology, Inc. Method and system for analyzing source code
US20060277541A1 (en) * 2005-06-07 2006-12-07 Sony Computer Entertainment America Inc. Relocatable component file format
JP2007148469A (ja) * 2005-11-24 2007-06-14 Hitachi Ltd ビジネスプロセス定義を用いた事前リソース割り当て方法
US7937692B2 (en) * 2005-11-30 2011-05-03 Red Hat, Inc. Methods and systems for complete static analysis of software for building a system
US9483405B2 (en) 2007-09-20 2016-11-01 Sony Interactive Entertainment Inc. Simplified run-time program translation for emulating complex processor pipelines
US8402585B2 (en) * 2009-10-19 2013-03-26 Poolvergnuegen Convertible pressure/suction swimming pool cleaner
US8875100B2 (en) 2011-06-17 2014-10-28 Microsoft Corporation Pattern analysis and performance accounting
US8892951B2 (en) * 2011-09-28 2014-11-18 International Business Machines Corporation Fault localization for data-centric programs
US9501383B2 (en) 2013-02-26 2016-11-22 Dominique Bolignano Method for securing a program
US9275236B2 (en) 2013-06-28 2016-03-01 Dominique Bolignano Method for securing a program
JP6572610B2 (ja) * 2015-04-28 2019-09-11 富士通株式会社 情報処理装置、コンパイル方法およびコンパイルプログラム
KR102063966B1 (ko) * 2015-10-21 2020-01-09 엘에스산전 주식회사 Plc 명령어 컴파일 최적화 방법
KR20210095508A (ko) 2020-01-23 2021-08-02 삼성전자주식회사 전자 장치 및 이의 제어 방법

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01118931A (ja) 1987-11-02 1989-05-11 Hitachi Ltd プログラム変換方式
US5280613A (en) * 1990-06-25 1994-01-18 Hewlett-Packard Company ANDF installer using the HPcode-Plus compiler intermediate language
JPH04273533A (ja) 1991-02-28 1992-09-29 Hokkaido Nippon Denki Software Kk 翻訳プログラムの手続きインライン展開方式
US5469572A (en) * 1992-12-01 1995-11-21 Taylor; James M. Post compile optimizer for linkable object code
US5615400A (en) * 1993-06-30 1997-03-25 Apple Computer, Inc. System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US5999737A (en) * 1994-03-01 1999-12-07 Digital Equipment Corporation Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis
CA2171898C (en) * 1996-03-15 2000-02-01 Brian Ward Thomson Linker optimization for compiled object oriented programs
US5815720A (en) 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
JPH09319587A (ja) 1996-05-30 1997-12-12 Nec Corp 計測情報を使ったポストオプティマイズによるプログラムの生成方式
US6041179A (en) * 1996-10-03 2000-03-21 International Business Machines Corporation Object oriented dispatch optimization
US5857105A (en) * 1997-02-05 1999-01-05 Hewlett-Packard Company Compiler for reducing number of indirect calls in an executable code
US6026234A (en) * 1997-03-19 2000-02-15 International Business Machines Corporation Method and apparatus for profiling indirect procedure calls in a computer program
DE19725593A1 (de) * 1997-06-17 1999-01-07 Siemens Nixdorf Inf Syst Verfahren zum Steuern einer Datenverarbeitungsanlage

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005301415A (ja) * 2004-04-07 2005-10-27 Ricoh Co Ltd コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム
JP2007233805A (ja) * 2006-03-02 2007-09-13 Oki Electric Ind Co Ltd プログラム変換システム
US9244666B2 (en) 2014-03-20 2016-01-26 International Business Machines Corporation Globally inline a callee with high cost-effectiveness on the basis only of profile information in a call graph

Also Published As

Publication number Publication date
EP0932100A3 (en) 2003-05-21
EP0932100A2 (en) 1999-07-28
US6292940B1 (en) 2001-09-18
JP3284956B2 (ja) 2002-05-27

Similar Documents

Publication Publication Date Title
JP3284956B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US5920723A (en) Compiler with inter-modular procedure optimization
US7784039B2 (en) Compiler, compilation method, and compilation program
US20090113404A1 (en) Optimum code generation method and compiler device for multiprocessor
WO2002010909A2 (en) Methods and apparatus for compiling computer programs using partial function inlining
JPH10240543A (ja) オブジェクト・コード最適化装置
JP3802058B2 (ja) ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ
CN112882718A (zh) 编译处理方法、装置、设备及存储介质
US20010039653A1 (en) Program conversion method, program conversion apparatus, storage medium for storing program conversion program and program conversion program
US7689975B2 (en) Processing of a compileable computer program
US20040205736A1 (en) Compile method and program recording medium
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP3790707B2 (ja) プログラム変換方法、これを用いたコンピュータ装置及びプログラム
JPH01118931A (ja) プログラム変換方式
JPH10320212A (ja) キャッシュ向け最適化方法
JP2007226589A (ja) プログラム変換システム
JP2956591B2 (ja) ループ外への条件付き飛び出しがあるループの並列化方法及び装置
JP3018783B2 (ja) コンパイル方式
JP3152194B2 (ja) コンパイル装置、コンパイル方法およびコンパイラを記録した記録媒体
JP2009515243A (ja) ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する方法
JPH09319587A (ja) 計測情報を使ったポストオプティマイズによるプログラムの生成方式
JPH0689187A (ja) インライン展開最適化方法
JPH09274570A (ja) コンパイル方法及びコンパイラシステム
JP2003067195A (ja) 最適化コンパイル方法及び最適化コンパイル装置
JPH10326193A (ja) インライン展開関数の最適化のためのコンパイル方法

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080308

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20090308

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20100308

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20100308

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20110308

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20110308

Year of fee payment: 9

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

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

Free format text: PAYMENT UNTIL: 20110308

Year of fee payment: 9

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20110308

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20120308

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20130308

Year of fee payment: 11