JP2003005982A - コール命令並び替え方法と装置並びにプログラム - Google Patents

コール命令並び替え方法と装置並びにプログラム

Info

Publication number
JP2003005982A
JP2003005982A JP2001191181A JP2001191181A JP2003005982A JP 2003005982 A JP2003005982 A JP 2003005982A JP 2001191181 A JP2001191181 A JP 2001191181A JP 2001191181 A JP2001191181 A JP 2001191181A JP 2003005982 A JP2003005982 A JP 2003005982A
Authority
JP
Japan
Prior art keywords
instruction
call
instructions
call instruction
argument
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
JP2001191181A
Other languages
English (en)
Other versions
JP3714201B2 (ja
Inventor
Hideki Yamamoto
秀喜 山本
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 JP2001191181A priority Critical patent/JP3714201B2/ja
Publication of JP2003005982A publication Critical patent/JP2003005982A/ja
Application granted granted Critical
Publication of JP3714201B2 publication Critical patent/JP3714201B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】コール命令を移動することにより、コール命令
を挟んで保証しなければならない値を極力少なくするこ
とにより、メモリへのスピル、およびリストアの生成を
少なくし、高速に実行可能とする装置及び方法を提供。 【解決手段】中間語からなりコール命令を含む命令列を
記憶する第1の命令列テーブル111に含まれるコール命
令の引数を処理する式をコール命令並び替えの対象から
削除し引数補正済み命令列テーブル112へ残りの命令を
保存するコール命令引数補正手段101と、引数補正済み
命令列テーブル112より、ロード命令及びストア命令
を、コール命令並び替えの対象から削除し、ロード/ス
トア命令補正済み命令テーブル113へ残りの命令を保存
するロード/ストア命令補正手段102と、ロード/スト
ア命令補正済み命令テーブル113に保存されている命令
列から、各命令間において各命令をまたいで生存してい
る変数の数を決定し、変数の生存する数の最も少ない区
間にコール命令を移動し、第2の命令列テーブル114に
格納コール命令並び替え手段103を備える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンパイラ技術に
関し、特に、コール命令の並び替え方法と装置に関す
る。
【0002】
【従来の技術】プログラムのサブルーチン、ファンクシ
ョン等の手続きは、ある一定の処理をまとめたものであ
り、その手続きを呼出すことで、まとめた処理が実行さ
れ、その際、該処理に入力として渡す値、処理からの戻
り値の受け渡しが行われる。引数の受け渡しについて説
明すると、手続きの呼び出し側と、呼び出された側で、
引数と戻り値の受け渡しに使用する記憶域の取り決めを
行っておき、呼び出し側で、引数の値を対応する記憶域
に格納し、呼び出された側では、対応する記憶域から値
を参照することで、受け渡しが行われる。
【0003】プログラミング言語で記述されたソースプ
ログラムからオブジェクトコード(機械語)を生成する
コンパイラでは、ソースプログラムを入力して字句解析
(lexical analysis)、構文解析(syntax analysi
s,parsing)等が行われ、さらに、必要な最適化が行わ
れ、オブジェクトコードが生成される。
【0004】従来のコンパイラにおいても、オブジェク
トコードの最適化のために、命令の並び替えを行うコン
パイラ・システムが知られている。例えば特許2501
394号公報には、手続き呼出しにおける引数領域の使
用と定義を解析した上で、引数評価列の評価順序を決定
し、決定された評価順序に引数評価列の入れ替えを行う
ことにより、手続き呼出し時の引数に評価における退
避、復元のコードを削減する手続き呼び出し翻訳装置が
開示されている。
【0005】また中間語の命令並び替えを行い実行速度
の速い命令列を生成するコンパイル装置として、例えば
特開2000−276356号公報には、中間語の命令
列を調査し、選ばれなかった命令と依存関係がない命令
を選んで命令並び替え範囲を設定し第1の命令列を生成
し、第1の命令列の命令並び替え範囲内の命令を中間語
より速く実行できるように並び替えて第2の命令列を生
成するコンパイル装置が開示されている。さらに、例え
ば特開平8−83185号公報には、変数の生存区間
(変数に格納されている値が有効となる期間)を検出
し、生存区間の範囲によって、対応する生存変数集合保
持部に変数を格納し、生存区間の範囲によって生存区間
の重複検査を必要な割付対象間に対してのみ行うこと
で、変数の生存区間の重複検査を高速に行うことでコン
パイル速度を向上させるコンパイラが開示されている。
【0006】しかしながら、従来のコンパイラにおい
て、手続き呼び出し命令(コール命令)を跨いでの命令
の並び替えは行なわれていない、というのが実情であ
る。その理由として、コール命令を並び替えの対象とし
ても、得られる効果が少ないためと思料される。また、
コールを含む命令列に、大量の命令が含まれる場合、メ
モリへの退避、メモリからの復帰命令が大量に生成さ
れ、性能が著しく劣ることも、その理由であるものと思
料される。
【0007】
【発明が解決しようとする課題】上記した通り、従来の
コンパイラにおける、命令の並び替えでは、手続き呼び
出し命令の並び替えは行われていず、上位フェーズで出
力した中間言語にそのまま依存しており、コール命令の
前後を跨いでレジスタの値が破壊されないように、レジ
スタの保存命令と復帰命令を生成している。すなわち、
従来のコンパイラでは、コール命令を並び替えの対象命
令としていないため、コール命令を挟んで保証しなけれ
ばならないレジスタ上の値が存在する場合、メモリへの
スピル、および、メモリからレジスタへのリストア命令
を挿入し、レジスタの値の保証を行っており、その結
果、処理性能の低下を招くことになる。
【0008】したがって、本発明が解決しようとする課
題は、コール命令を移動することにより、コール命令を
挟んで保証しなければならない値を極力少なくすること
により、メモリへのスピル、およびリストアの生成を少
なくし、高速に実行可能とする装置及び方法並びにプロ
グラムを提供することにある。
【0009】
【課題を解決するための手段】課題を解決するための手
段を提供する本発明は、ソースプログラムをコンパイル
処理して出力される中間語の命令列よりなり、手続き呼
び出し命令(「コール命令」という)を含む命令列を記
憶保持する第1の記憶手段に記憶されている中間語の命
令列から、前記コール命令の引数の値を設定する命令を
除外した命令列を、第2の記憶手段へ保存し、前記第2
の記憶手段に保存されている中間語の命令列から、ロー
ド命令、及び、ストア命令を除外したものを第3の記憶
手段へ保存し、前記第3の記憶手段に保存されている中
間語の命令列から、各命令間において各命令を跨いで生
存している変数の数を決定し、前記生存する変数の数の
最も少ない区間へ、前記コール命令を移動し、第4の記
憶手段へ保存する構成としたものである。
【0010】
【発明の実施の形態】発明の実施の形態について説明す
る。本発明は、手続き呼び出し命令(コール命令)を、
上位フェーズ(コンパイラの構文解析、最適化処理等の
上位フェーズ)の出力した中間言語に依存せずに、並び
替えることにより、レジスタの保存/復帰命令を最小に
抑えるように構成したものである。すなわち、アーキテ
クチャに応じた並び替えを行なう前に、コール命令の適
切な位置を求め、並び替える。より詳細には、本発明
は、その一実施の形態において、中間語からなり、コー
ル命令を含む命令列を記憶する第1の命令列テーブル
(111)に含まれるコール命令の引数を処理する式
を、コール命令並び替えの対象から削除し、引数補正済
み命令列テーブル(112)へ残りの命令を保存するコ
ール命令引数補正手段(101)と、引数補正済み命令
列テーブル(112)より、ロード命令及びストア命令
を、コール命令並び替えの対象から削除し、ロード/ス
トア命令補正済み命令テーブル(113)へ残りの命令
を保存するロード/ストア命令補正手段(102)と、
ロード/ストア命令補正済み命令テーブル(113)に
保存されている命令列から、各命令間において各命令を
跨いで生存している変数の数を決定し、変数の生存する
数の最も少ない区間の命令の前へ、前記コール命令を移
動し、第2の命令列テーブル(114)に保存するコー
ル命令並び替え手段(103)と、を備える。
【0011】本発明は、ソースプログラムを入力するコ
ンパイル処理で生成される中間言語に対して、コール命
令並び替えをコンピュータで行う方法であって、以下の
ステップよりなる。
【0012】ステップ1:中間語からなり、コール命令
を含む命令列を記憶する第1の命令列テーブル(11
1)に含まれるコール命令の引数を処理する式をなす命
令列をコール命令並び替えの対象から削除し、引数補正
済み命令列テーブル(112)へ命令を保存する。
【0013】ステップ2:引数補正済み命令列テーブル
(112)より、ロード命令及びストア命令を、コール
命令並び替えの対象から削除し、ロード/ストア命令補
正済み命令テーブル(113)へ命令を保存する。その
際、並び替え対象のコール命令の引数又は戻り値を処理
する式に関連する変数を定義するか、該変数を参照す
る、ロード命令とストア命令を削除すればよい。
【0014】ステップ3:ロード/ストア命令補正済み
命令テーブル(113)に保存されている命令列から、
各命令間において各命令を跨いで生存している変数の数
を決定し、変数の生存する数の最も少ない区間へ、コー
ル命令を移動し、第2の命令列テーブル(114)に保
存する。
【0015】
【実施例】上記した発明の実施の形態についてさらに詳
細に説明すべく、本発明の実施例について図面を参照し
て説明する。図1は、一般的なコンパイル処理の工程を
示している。第1のコンパイル処理をなすフロントエン
ド11では、各プログラミング言語で記述されているソ
ースファイル20を読み込み、字句解析、構文解析を行
い、言語に依存しない中間語(中間コード)を生成し、
第1の中間語ファイル21へ出力する。
【0016】また、第2のコンパイル処理をなす最適化
では、第1の中間語ファイル21から中間語を入力し、
中間語に対して各種最適化を施し、第2の中間語ファイ
ル22を出力する。なお、第2のコンパイル処理をなす
最適化については、文献1(A.V.エイホ、R.セシィ、
J.D. ウルマン、「コンパイラ I」、株式会社サイエ
ンス社)等が参照される。
【0017】第3のコンパイル処理をなす命令並び替え
では、第2の中間語ファイル22を入力し、命令の並び
替えを行う。そして、命令の並び替えが行われた中間語
から、ターゲット装置のオブジェクトコードをオブジェ
クトファイル23に出力する。
【0018】本発明は、第1、第2のコンパイル処理が
行われた後の、中間語の命令列におけるコール命令の並
び替えを行うものであり、第1、第2のコンパイル処理
は、公知の任意のものが用いられる、またソースプログ
ラムの言語は、C、Fortran等任意であってよい。
【0019】図2は、本発明の一実施例の命令並び替え
装置の構成を示す図である。図2を参照すると、この実
施例の命令並び替え装置は、コール命令引数補正手段1
01と、ロード/ストア命令補正手段102と、コール
命令並び替え手段103と、第1の命令列テーブル11
1と、引数補正済み命令列テーブル112と、ロード/
ストア命令補正済み命令テーブル113と、第2の命令
列テーブル114と、を備えている。コール命令引数補
正手段101と、ロード/ストア命令補正手段102、
コール命令並び替え手段103は、コンピュータで実行
されるプログラムによりその機能が実現され、第1の命
令列テーブル111、引数補正済み命令列テーブル11
2と、ロード/ストア命令補正済み命令テーブル113
と、第2の命令列テーブル114は記憶手段に格納され
る。
【0020】これらの各手段は、それぞれ概略つぎのよ
うに動作する。コール命令引数補正手段101は、第1
の命令列テーブル111に含まれる各コール命令の引数
を処理する式を、命令の並び替え対象から削除し、引数
補正済み命令列テーブル112へ命令を保存する。な
お、並び替え対象外とする設定は、引数補正済み命令列
テーブル112において、各命令に対応して設けられた
フラグ(削除フラグ)をオンとすることで行ってもよ
い。
【0021】ロード/ストア命令補正手段102は、引
数補正済み命令列テーブル112より、ロード命令及び
ストア命令を、命令の並び替え対象から削除し、ロード
/ストア命令補正済み命令テーブル113へ命令を保存
する。なお、並び替え対象外とする設定は、ロード/ス
トア命令補正済み命令テーブル113において命令に対
応して設けられたフラグ(削除フラグ)をオンとするこ
とで行ってもよい。ロード/ストア命令補正手段102
は、引数補正済み命令列テーブル112において、対象
となるコール命令の引数又は戻り値に関連する式の変数
を定義、参照するロード命令、ストア命令を並び替え対
象外とする。並び替え対象のコール命令に関連しないプ
ログラムブロック(中間語)のロード命令とストア命令
は削除する必要はないことは勿論である。
【0022】コール命令並び替え手段103は、コール
命令引数補正手段101およびロード/ストア命令補正
手段102によって、コール命令並び替え対象から削除
された残りの命令列から、各命令間において、各命令を
跨いで生存している変数の数を決定し、最も変数の生存
していない区間へ、コール命令を移動する。なお、変数
の生存する生存区間とは、変数に保持されている値が有
効となる区間であり、変数に値を設定(定義)する中間
語の命令から、その定義された値を最後に参照する中間
語命令までのプログラムの区間に対応し、変数に値を定
義する中間語命令は生存区間の開始点、生存区間中で定
義された値を参照している中間語命令のうち最後に参照
する中間語命令は、生存区間の終了点に相当する。
【0023】次に、図3を参照して、この実施例の動作
について詳細に説明する。第1の命令テーブル111に
あるように、コール命令(CALL)を含む8命令での並び
替えを行うものとする。t1〜t4は中間言語で割り付
けられる変数(資源)であり、レジスタ等に対応する。
【0024】(1)の命令 LD t1 = a は、aの値をt1
にロードする。 (2)の命令 LD t2 = b は、bの値をt2にロードす
る。 (3)の命令 LD t3 = c は、cの値をt3にロードす
る。a、b、cはメモリのアドレス又はイミーディエッ
ト値である。 (4)の命令 CALL t4 = sub(t1,t2) は、手続きsub
を引数t1、t2の値を受け渡して呼び出し、手続きs
ubの処理の戻り値をt4に設定する。 (5)の命令 ADD t5= t1,t2 は、t1とt2の加算結果
をt5にセットする。 (6)の命令 ADD t6= t3,t5 は、t3とt5の加算結果
をt6にセットする。 (7)の命令 ADD t7= t6,t4 は、t6とt4の加算結果
をt7にセットする。 (8)の命令 st [d] = t7 は、t7を、メモリアドレス
[d]にストアする。
【0025】命令の右端の欄(生存する変数の欄)のt
1等は、該命令区間で生存する変数の一覧である。(1)
の命令では、変数t1が定義されており、t1の生存区
間の開始点となる。(2)の命令では、変数t2が定義さ
れており、t2の生存区間の開始点となり、t1、t2
が生存している。(3)の命令では、変数t3が定義され
ており、t3の生存区間の開始点となり、t1、t2、
t3が生存している。(4)の命令では、変数t4が定義
されており、t4の生存区間の開始点となり、t1〜t
4が生存している。(5)の命令では、変数t5が定義さ
れており、t5の生存区間の開始点となり、t1〜t5
が生存しており、t1、t2の生存区間の終了点とな
る。(6)の命令では、変数t6が定義されており、t6
の生存区間の開始点となり、t3〜t6が生存してお
り、t3、t5の生存区間の終了点となる。(7)の命令
では、変数t7が定義されており、t7の生存区間の開
始点となり、t4、t6、t7が生存しており、t6、
t4の生存区間の終了点となる。(8)の命令では、変数
t7の生存区間の終了点となる。
【0026】まず、コール命令引数補正手段101にお
いて、第1の命令列テーブル111の命令列から、(4)
のコール命令の引数であるt1、およびt2の生成命令
(t1、t2に値を設定する命令)である(1)の命令(L
D t1 =a)および(2)の命令(LD t2 =b)を、並び替え対
象外の命令とし、引数補正済み命令列テーブル112へ
命令を保存する。引数補正済み命令列テーブル112に
おいて、該当する命令のフラグをオンに設定する。
【0027】次に、ロード/ストア命令補正手段102
において、引数補正済み命令列テーブル112より、ロ
ード命令(LD t3 =c)である(3)の命令と、ストア命令
である(8)の命令(st [d]=t7)を、並び替え対象外の
命令として、ロード/ストア命令補正済み命令テーブル
113へ保存する。このロード/ストア命令補正手段1
02は、コール命令とその前後の命令について、命令間
の依存関係の元となる変数の値を定義あるいはその変数
を参照するロード命令とストア命令を、並び替え対象外
として削除する。
【0028】コール命令並び替え手段103において、
ロード/ストア命令補正済み命令テーブル113に保存
されている命令列の命令(4)から命令(7)の間で、最も変
数の生存していない命令を探し出す。
【0029】命令(4)から命令(5)に跨がって生存する変
数は、t1、t2、t3、t4(ただし、t1、t2の
生存区間は命令(4)の区間まで)、命令(5)から命令(6)
に跨がって生存する変数は、t3、t4、t5、命令
(6)から命令(7)に跨がって生存する変数は、t4、t
6、となり、各命令区間に跨がって生存する変数の最も
少ない区間は、命令(6)から命令(7)となる。
【0030】よって、命令(7)の直前、すなわち命令(6)
と(7)の間が、最も適当な位置と判断し、そこへ、コー
ル命令CALL t4=sub(t1,t2)を移動する。
【0031】コール命令を移動した結果が、第2の命令
列テーブル114に格納され、この中間言語から、ター
ゲットマシンのオブジェクトコードが生成される。
【0032】命令並び替え前の第1の命令列テーブル1
11の場合、コール命令(CALL)を跨いで生存している
変数は、t1、t2、t3である。これに対して、第2
の命令列テーブル114に示されるように、コール命令
(CALL)の前後を跨いで生存している変数はt6のみと
なり、コール命令を挟んで保証しなければならない変数
の個数を減少させている。
【0033】
【発明の効果】以上説明したように、本発明によれば、
コール命令を移動することにより、コール命令を挟んで
保証しなければならない変数の個数を減少させることに
より、メモリへのスピルおよびリストアの生成を少なく
し、高速に実行できるという効果を奏する。
【図面の簡単な説明】
【図1】本発明の一実施例が適用されるコンパイラの処
理を説明するための図である。
【図2】本発明の一実施例の構成を示す図である。
【図3】本発明の一実施例を具体的に説明するための図
である。
【符号の説明】
11 フロントエンド(コンパイラ処理1) 12 最適化(コンパイラ処理2) 13 命令列並び替え(コンパイラ処理3) 20 ソースファイル 21 中間語ファイル 22 中間語ファイル 23 オブジェクトファイル 101 コール命令引数補正手段 102 ロード/ストア命令補正手段 103 コール命令並び替え手段 111 第1の命令列テーブル 112 引数補正済み命令列テーブル 113 ロード/ストア命令補正済み命令テーブル 114 第2の命令列テーブル

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】手続きの呼び出し時に呼び出し側と呼び出
    された側で引数又は引数と戻り値の受け渡しが行われる
    手続き呼び出し命令(「コール命令」という)を含むソ
    ースプログラムからオブジェクトコードを生成する言語
    翻訳装置のコール命令並び替え装置において、 前記コール命令を含む命令列を記憶保持する第1の記憶
    手段と、 前記第1の記憶手段に記憶される命令列から、前記コー
    ル命令の引数の値を生成する命令を除外し、さらに、ロ
    ード命令とストア命令を並び替え対象外として、除外
    し、第2の記憶手段に記憶する手段と、 前記第2の記憶手段に記憶された命令列について、各命
    令を跨いで生存している変数の数を決定し、前記生存す
    る変数の数の最も少ない区間へ、前記コール命令を移動
    する手段と、 を備えている、ことを特徴とするコール命令並び替え装
    置。
  2. 【請求項2】ソースプログラムをコンパイル処理して出
    力される中間語の命令列よりなり、手続き呼び出し命令
    (「コール命令」という)を含む命令列を記憶保持する
    第1の記憶手段と、 前記第1の記憶手段に記憶されている中間語の命令列か
    ら、前記コール命令の引数の値を設定する命令を除外し
    た命令列を、第2の記憶手段へ保存する手段と、 前記第2の記憶手段に保存されている中間語の命令列か
    ら、ロード命令とストア命令を、並び替え対象外とし
    て、除外したものを第3の記憶手段へ保存する手段と、 前記第3の記憶手段に保存されている中間語の命令列か
    ら、各命令間において各命令を跨いで生存している変数
    の数を決定し、前記生存する変数の数の最も少ない区間
    へ、前記コール命令を移動し、第4の記憶手段へ保存す
    る手段と、 を備えている、ことを特徴とするコール命令並び替え装
    置。
  3. 【請求項3】前記並び替え対象外とされるロード命令と
    ストア命令が、前記コール命令の引数又は戻り値を処理
    する式に関連する変数を定義するか、該変数を参照す
    る、ロード命令とストア命令である、ことを特徴とする
    請求項1又は2記載のコール命令並び替え装置。
  4. 【請求項4】中間語からなり、手続き呼び出し命令
    (「コール命令」という)を含む命令列を記憶保持する
    第1の命令列テーブルと、 前記第1の命令列テーブルに記憶されている、前記コー
    ル命令の引数を処理する式に対応する命令を、並び替え
    の対象から削除し、引数補正済み命令列テーブルへ残り
    の命令を保存するコール命令引数補正手段と、 前記引数補正済み命令列テーブルより、ロード命令及び
    ストア命令を、並び替えの対象から削除し、ロード/ス
    トア命令補正済み命令テーブルへ、残りの命令を保存す
    るロード/ストア命令補正手段と、 前記ロード/ストア命令補正済み命令テーブルに保存さ
    れている命令列から、各命令間において各命令を跨いで
    生存している変数の数を決定し、前記生存する変数の数
    の最も少ない区間へ、前記コール命令を移動し、第2の
    命令列テーブルに保存するコール命令並び替え手段と、 を備えたことを特徴とするコール命令並び替え装置。
  5. 【請求項5】前記ロード/ストア命令補正手段は、前記
    コール命令の引数又は戻り値を処理する式に関連する変
    数を定義するか、前記変数を参照するロード命令とスト
    ア命令を、並び替え対象外とする、ことを特徴とする請
    求項4記載のコール命令並び替え装置。
  6. 【請求項6】前記コール命令並び替え手段は、前記生存
    する変数の数の最も少ない命令の直前に、前記コール命
    令を移動する、ことを特徴とする請求項4記載のコール
    命令並び替え装置。
  7. 【請求項7】ソースプログラムを入力するコンパイル処
    理によって生成される中間言語の命令列における手続き
    呼び出し命令(「コール命令」という)の並び替えをコ
    ンピュータで行う方法であって、 前記コンパイル処理によって生成される中間語の命令列
    よりなり、手続き呼び出し命令(「コール命令」とい
    う)を含む命令列を記憶保持する第1の記憶手段に記憶
    されている中間語の命令列から、前記コール命令の引数
    の値を設定する命令を除外した命令列を、第2の記憶手
    段へ保存するステップと、 前記第2の記憶手段に保存されている中間語の命令列か
    ら、ロード命令、及び、ストア命令を除外したものを第
    3の記憶手段へ保存するステップと、 前記第3の記憶手段に保存されている中間語の命令列か
    ら、各命令間において各命令を跨いで生存している変数
    の数を決定するステップと、 前記生存する変数の数の最も少ない区間へ、前記コール
    命令を移動し、第4の記憶手段へ保存するステップと、 を含む、ことを特徴とするコール命令並び替え方法。
  8. 【請求項8】前記コール命令の引数又は戻り値を処理す
    る式に関連する変数を定義するか、前記変数を参照する
    ロード命令とストア命令を、並び替え対象外として、除
    外する、ことを特徴とする請求項7記載のコール命令並
    び替え方法。
  9. 【請求項9】前記生存する変数の数の最も少ない命令の
    直前に、前記コール命令を移動する、ことを特徴とする
    請求項7記載のコール命令並び替え方法。
  10. 【請求項10】ソースプログラムを入力するコンパイル
    処理によって生成される中間言語の命令列における手続
    き呼び出し命令(「コール命令」という)の並び替えを
    コンピュータで行うためのプログラムであって、 (a)前記コンパイル処理して出力される中間語の命令
    列よりなり、手続き呼び出し命令(「コール命令」とい
    う)を含む命令列を記憶保持する第1の記憶手段に記憶
    されている中間語の命令列から、前記コール命令の引数
    の値を設定する命令を除外した命令列を、第2の記憶手
    段へ保存する処理と、 (b)前記第2の記憶手段に保存されている中間語の命
    令列から、ロード命令、及び、ストア命令を除外したも
    のを第3の記憶手段へ保存する処理と、 (c)前記第3の記憶手段に保存されている中間語の命
    令列から、各命令間において各命令を跨いで生存してい
    る変数の数を決定する処理と、 (d)前記生存する変数の数の最も少ない区間へ、前記
    コール命令を移動し、第4の記憶手段へ保存する処理
    と、 の前記(a)乃至(d)の各処理を、前記コンピュータ
    に実行させるためのプログラム。
  11. 【請求項11】請求項10記載のプログラムにおいて、 前記生存する変数の数の最も少ない命令の直前に、前記
    コール命令を移動する処理を、前記コンピュータに実行
    させるためのプログラム。
  12. 【請求項12】請求項10記載のプログラムにおいて、 前記コール命令の引数又は戻り値を処理する式に関連す
    る変数を定義するか、該変数を参照する、ロード命令と
    ストア命令を、並び替え対象外として、除外する処理
    を、前記コンピュータに実行させるためのプログラム。
JP2001191181A 2001-06-25 2001-06-25 コール命令並び替え方法と装置並びにプログラム Expired - Fee Related JP3714201B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001191181A JP3714201B2 (ja) 2001-06-25 2001-06-25 コール命令並び替え方法と装置並びにプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001191181A JP3714201B2 (ja) 2001-06-25 2001-06-25 コール命令並び替え方法と装置並びにプログラム

Publications (2)

Publication Number Publication Date
JP2003005982A true JP2003005982A (ja) 2003-01-10
JP3714201B2 JP3714201B2 (ja) 2005-11-09

Family

ID=19029846

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001191181A Expired - Fee Related JP3714201B2 (ja) 2001-06-25 2001-06-25 コール命令並び替え方法と装置並びにプログラム

Country Status (1)

Country Link
JP (1) JP3714201B2 (ja)

Also Published As

Publication number Publication date
JP3714201B2 (ja) 2005-11-09

Similar Documents

Publication Publication Date Title
US5999737A (en) 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
US6813705B2 (en) Memory disambiguation scheme for partially redundant load removal
US6427234B1 (en) System and method for performing selective dynamic compilation using run-time information
US6973644B2 (en) Program interpreter
US20020013938A1 (en) Fast runtime scheme for removing dead code across linked fragments
US6966055B2 (en) Optimizing post-link code
JPH0519173B2 (ja)
JP2001147819A (ja) 最適化装置および記録媒体
JP2010198629A (ja) プログラムコード変換方法
JPH10124325A (ja) 変数の最適配置方法、変数の最適配置装置及び変数の最適配置プログラムを格納したコンピュータ読み取り可能な記録媒体
US7386843B2 (en) Method and system for register allocation
JPH07129412A (ja) コンパイル方法及び装置
JPH04225431A (ja) 命令キャッシュ効率を増大するコンピュータ命令をコンパイルする方法
JPH04330527A (ja) プログラムの最適化方法及びコンパイラ・システム
US7036116B2 (en) Percolating hot function store/restores to colder calling functions
US7143404B2 (en) Profile-guided data layout
US7017154B2 (en) Eliminating store/restores within hot function prolog/epilogs using volatile registers
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JPH10133884A (ja) 推測的なコードを含むプログラミング・コードを実行する方法
US7698534B2 (en) Reordering application code to improve processing performance
JP3871312B2 (ja) プログラム変換方法、これを用いたデータ処理装置及びプログラム
JP3714201B2 (ja) コール命令並び替え方法と装置並びにプログラム
US7676799B1 (en) Address simplification by binary transformation
JP2585793B2 (ja) コンパイラシステム
JPH10275088A (ja) リンク最適化方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050725

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: 20050802

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050815

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20080902

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20090902

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090902

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20100902

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110902

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120902

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees