JP3900485B2 - 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 - Google Patents

最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 Download PDF

Info

Publication number
JP3900485B2
JP3900485B2 JP2002219853A JP2002219853A JP3900485B2 JP 3900485 B2 JP3900485 B2 JP 3900485B2 JP 2002219853 A JP2002219853 A JP 2002219853A JP 2002219853 A JP2002219853 A JP 2002219853A JP 3900485 B2 JP3900485 B2 JP 3900485B2
Authority
JP
Japan
Prior art keywords
instruction
exception
cpu
optimization
target program
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.)
Expired - Fee Related
Application number
JP2002219853A
Other languages
English (en)
Other versions
JP2004062520A (ja
Inventor
基弘 川人
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2002219853A priority Critical patent/JP3900485B2/ja
Priority to US10/446,841 priority patent/US7103882B2/en
Publication of JP2004062520A publication Critical patent/JP2004062520A/ja
Application granted granted Critical
Publication of JP3900485B2 publication Critical patent/JP3900485B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

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

Landscapes

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

Description

【0001】
【発明の属する技術分野】
本発明は、最適化装置、コンパイラプログラム、最適化方法、及び記録媒体に関する。特に本発明は、命令の実行順序を変更する最適化装置、コンパイラプログラム、最適化方法、及び記録媒体に関する。
【0002】
【従来の技術】
「Motohiro Kawahito,Hideaki Komatsu,Toshio Nakatani著、TRL Research ReportRT0350 2000掲載、Eliminating ExceptionChecks and Partial Redundancies forJava(登録商標) Just−in−Time Compilers」において、条件分岐命令等を越えて命令の実行順序を変更する投機的なコード移動の方法が提案されている。
【0003】
【発明が解決しようとする課題】
しかしながら、上記方法においては、例外を発生しうる命令であるメモリアクセス命令を、投機的に実行させるように実行順序を変更することができなかった。したがって、メモリアクセス命令の実行順序の変更に伴い可能となる各種の最適化を行うことができなかった。
そこで本発明は、上記の課題を解決することのできる最適化装置、コンパイラプログラム、最適化方法、及び記録媒体を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【0004】
【課題を解決するための手段】
即ち、本発明の第1の形態によると、コンピュータ上でコンパイラプログラムを実行することにより実現され、記憶装置に格納された最適化対象プログラムにおける、命令の実行順序を変更する最適化装置であって、コンピュータのCPUの動作により、最適化対象プログラムの中から例外を発生し得る第1命令を検出する例外発生命令検出部と、最適化対象プログラムの中から、第1命令より先に実行され、第1命令の例外を発生させないことを保証する第2命令を、CPUの動作により検出する保証命令検出部と、第1命令を選択的に実行させる条件分岐命令より先、かつ第2命令より後に実行させるように、最適化対象プログラムの実行コードにおける第1命令の実行順序を、CPUの動作により変更する実行順序制御部とを備えることを特徴とする最適化装置、当該最適化装置を実現するコンパイラプログラム、コンパイラプログラムを記録した記録媒体、最適化方法を提供する。
【0005】
なお上記発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションも又発明となりうる。
【0006】
【発明の実施の形態】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、又実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0007】
図1は、コンパイラ10の機能ブロック図を示す。コンパイラ10は、外部からソースプログラムを受け取り、当該ソースプログラムをコンピュータにより実行可能な実行コードに変換する。実行コードの変換において、コンパイラ10は、コンピュータの資源を有効に活用する最適化を行い、実行コードの実行速度を高速化したり、実行コードのサイズを低減させることを目的とする。
【0008】
コンパイラ10は、フロントエンド処理装置20と、最適化装置30と、コード生成部90とを備える。フロントエンド処理装置20は、外部からソースプログラムを受け取ると、最適化処理に適した中間表現(例えば、Intermediate Representation)等に変換し、最適化対象プログラムとして最適化装置30に送る。最適化装置30は、受け取った最適化対象プログラムに対して、各種の最適化を行い、最適化済プログラムとしてコード生成部90に送る。コード生成部90は、受け取った最適化済プログラムを、コンピュータ及びオペレーティングシステムにより実行可能な状態に変換し、外部に出力する。
【0009】
本実施形態において、最適化対象プログラムとは、例えば、ソースプログラムに所定の変換を行った、Java(登録商標)バイトコードや、RTL(Register Transfer Languageの略)等の中間表現(例えば、Intermediate Representation)である。また、他の例として、Java(登録商標)やC言語等の表層言語で記述されたプログラムそのものであってもよい。なお、Java(登録商標)は、サン・マイクロシステムズ・インコーポレーテッドの登録商標である。また、最適化対象プログラムとは、これらの表現により記述されたプログラムの全体であってもよいし、当該プログラムの一部であって、特定の処理のみを行うモジュールやオブジェクトであってもよい。
【0010】
最適化装置30は、命令除去部300と、ダミー命令生成部320と、実行順序制御部330と、冗長性除去部340とを有する。命令除去部300は、例外発生命令検出部310と、保証命令検出部315とを有する。例外発生命令検出部310は、フロントエンド処理装置20から受け取った最適化対象プログラム中において、命令処理の障害等を示す例外を発生し得る第1命令と、第1命令の直前に実行され、第1命令による例外が発生するか否かを判断する例外チェック命令とを検出する。そして、保証命令検出部315は、第1命令及び例外チェック命令より先に実行され、第1命令の例外を発生させないことを保証する第2命令を検出する。第1命令による例外が発生しないことが第2命令により保証された場合に、例外チェック命令は不要であるので、命令除去部300は、例外チェック命令を除去する。
【0011】
本実施形態のように、最適化対象プログラムが、Java(登録商標)言語のような型安全性を持つ言語により記述された場合においては、ソフトウェアにより型安全性のチェックが行われるので、例外チェック命令が明示的に記述される。従って、例外発生命令検出部310は、例外チェック命令等の動的な型チェックを行う命令を検出する。
一方、他の例として、最適化対象プログラムが、C言語のような型安全性を持たない言語により記述された場合においては、ハードウェアにより型安全性のチェックの一部が行われるので、例外チェック命令は明示的に記述されない。この場合、例外発生命令検出部310は、第1命令のみを検出してもよい。
【0012】
また、命令除去部300は、例外チェック命令の他に、他の冗長な命令の削除を行う。例えば、最適化対象プログラムが、例外チェック命令と、当該例外チェック命令より後に実行され、当該例外チェック命令と冗長な判定を行う条件分岐命令とを含む場合、命令除去部300は、条件分岐命令を除去し、条件分岐命令の分岐先のうち、条件が成立しない場合に実行される部分を除去する。
そして、命令除去部300は、上記の除去処理を終えた最適化対象プログラムを、ダミー命令生成部320に送る。
【0013】
ダミー命令生成部320は、除去処理を終えた最適化対象プログラムを命令除去部300から受け取る。そして、ダミー命令生成部320は、最適化対象プログラム中の条件分岐命令(例えば、IF文や、WHILE文)のうち、条件分岐命令によって選択的に実行される命令の例外を発生させないことを保証しうる分岐条件を含む命令を検出する。
例えば、第1命令の種類がメモリアクセス命令である場合に、ダミー命令生成部320は、条件分岐命令が、アクセスするメモリのアドレスを示す変数が有効なアドレス値を保持するか否かの条件により分岐する命令であるか否かを判断する。
そして、ダミー命令生成部320は、条件分岐命令から例外を発生しうる命令に至る制御フロー上における、条件分岐命令の直後に実行される位置に、実質的な処理を行わない命令であるダミー命令を生成する。そして、ダミー命令生成部320は、ダミー命令を挿入した最適化対象プログラムを実行順序制御部330に送る。
なお、ダミー命令を生成する他の例として、ダミー命令生成部320は、分岐先に例外を発生しうる命令を含む条件分岐命令のみに対して、条件分岐命令から例外を発生しうる命令に至る制御フロー上における、条件分岐命令の直後に実行される位置に、ダミー命令を生成してもよい。
【0014】
実行順序制御部330は、ダミー命令生成部320から最適化対象プログラムを受け取ると、第1命令をダミー命令より先に配置させないように、実行順序の変更を制限しつつ、実行コードにおける命令の位置を変える等により、命令の実行順序を変更する。例えば、実行順序制御部330は、第2命令より後に実行され、かつ第1命令を選択的に実行させる条件分岐命令のうち、ダミー命令を伴わない条件分岐命令より先に実行されるように第1命令の実行順序を変更してもよい。そして、実行順序制御部330は、命令の実行順序を変更した最適化対象プログラムを冗長性除去部340に送る。
なお、ダミー命令は、命令の実行の依存関係を保たせるためにのみ用いられ、実際には実行コードとして生成されなくてもよい。すなわち、実行順序制御部330は、ダミー命令が存在するものと仮定して、第1命令の実行順序を変更するが、コード生成部90は、ダミー命令に対して何らの実行コードを生成しなくてもよいし、実質的な処理を行わない命令(例えば、NOP命令)を生成してもよい。
【0015】
冗長性除去部340は、部分冗長性除去部350と、ループ内不変値最適化部360とを備え、実行順序制御部330から受け取った最適化対象プログラムに対して、処理の内容が他の命令と冗長である冗長命令の除去を行い、最適化済プログラムとしてコード生成部90に送る。
例えば、部分冗長性除去部350は、制御の流れの合流点において、複数の合流元の一部のみにおいて実行される命令と、合流先において実行される命令の内容が同一である場合に、合流先における命令を除去し、複数の合流元全てにおいて当該命令を実行させることにより、部分冗長性を除去する。
また、ループ内不変値最適化部360は、最適化対象プログラムを解析することにより、ループ内において不変の値を読み出すメモリアクセス命令をループ外に移動する処理を行う。
【0016】
このように、最適化装置30は、第2命令により例外が発生しないことが保証された第1命令に対して、第1命令の例外の発生を検出する例外チェック命令を除去する。更に、最適化装置30は、最適化対象プログラム中の、第1命令により例外が発生しないことを保証する条件分岐命令から第1命令に至る制御フロー上における、条件分岐命令の直後に実行される位置にダミー命令を生成する。そして、最適化装置30は、ダミー命令と第1命令との実行の依存関係を保ちつつ、第1命令の実行順序を変更する。したがって、最適化装置30は、最適化対象プログラムの意味及び動作を忠実に反映しつつ、例外を発生しうる第1命令の実行順序を変更することができるので、最適化対象プログラムの実行を高速化することができる。
【0017】
図2は、コンパイラ10の動作フローを示す。フロントエンド処理装置20は、フロントエンド処理として、外部から受け取ったソースプログラムを最適化処理に適した中間表現等に変換する(S100)。そして、最適化装置30は、命令除去部300による例外チェック命令の除去より先に、最適化対象プログラムに事前に各種の最適化を施してもよい(S110)。例えば、最適化装置30は、メソッドや関数のインライニングや、共通部分式削除等の最適化を施してもよい。そして、命令除去部300は、最適化対象プログラムから冗長な例外チェック命令を除去する(S120)。命令除去部300は、例外チェック命令の他に、他の冗長な命令を削除してもよい。例えば、最適化対象プログラムが、例外チェック命令と、当該例外チェック命令より後に実行され、当該例外チェック命令と冗長な条件に基づく条件分岐命令とを含む場合、命令除去部300は、条件分岐命令を除去する。
【0018】
コンパイラ10は、最適化対象プログラムに対して以下の処理を繰り返し行う。ダミー命令生成部320は、最適化対象プログラム中の、条件分岐命令を検出する(S130)。そして、ダミー命令生成部320は、条件分岐命令が、第1命令による例外が発生しないことを保証しうると判断した場合に(S140:YES)、条件分岐命令から第1命令に至る制御フロー上における、条件分岐命令の直後に実行される位置にダミー命令を生成する(S150)。例えば、第1命令がメモリアクセス命令である場合に、ダミー命令生成部320は、アクセスするメモリのアドレスを示す変数の値が有効か否かを分岐条件とする条件分岐命令を検出する。最適化装置30は、ダミー命令を生成する候補となる条件分岐命令が他に存在すると判断した場合に(S160:YES)、S130に戻り処理を継続する。
【0019】
続いて、実行順序制御部330は、第1命令をダミー命令より先に配置させないように、実行順序の変更を制限しつつ、命令の実行順序を変更する最適化を行う(S165)。そして、冗長性除去部340は、命令の実行順序を変更した最適化対象プログラムに対して、冗長性の除去を行う(S160)。そして、コード生成部90は、最適化済プログラムに基づき、実行コードを生成する。この際、コード生成部90は、ダミー命令に対しては、何らの実行コードを生成しない。
【0020】
このように、最適化装置30は、第1命令をダミー命令より先に配置させないように、実行順序の変更を制限することにより、最適化対象プログラムの本来の動作や意味を保ちつつ、命令の実行順序を変更することができる。例えば、最適化対象プログラムが、Java(登録商標)等により記述された型安全性の保障されているプログラムであれば、最適化装置30は、この型安全性を保ちつつ、最適化対象プログラムを高速化する等の最適化を行うことができる。
【0021】
図3は、メモリアクセス命令の投機的な移動の一例を示す。図3の(A)及び(B)は、それぞれ最適化装置30が入力とする最適化対象プログラムを示す。
本実施形態において、最適化装置30は、最適化に適した形態である中間表現を、最適化対象プログラムとして入力とするが、図3〜5、及び図7〜9においては、簡潔に説明するために、最適化対象プログラムの処理の意味を示す擬似言語により表現した図を用いる。
【0022】
図3(A)は、第1命令であるメモリアクセス命令の実行順序が変更できない例を示す。本図は、変数a及び変数bの値が異なる場合にのみ(2行目)、変数aが示すアドレスに所定値を加えたアドレスのメモリを、変数tに読み出す旨(3行目)のプログラムである。
【0023】
コンパイラ10が生成する実行コードを実行するコンピュータにおいて、メモリから値を読み出す処理は、読み出した値を用いて演算する処理等に比べ、多くの時間を要する。したがって、最適化装置30は、3行目に示すようなメモリアクセス命令をできるだけ先に実行させるように実行順序を変更すれば、最適化対象プログラム全体を高速化することができる。
【0024】
しかし、最適化装置30は、3行目に示すメモリアクセス命令を、2行目に示す条件分岐命令を越えて1行目に移動してしまうと、プログラムを正しく実行させることができない。なぜなら、変数aと変数bが等しく、かつ変数aが無効な値である場合に、最適化装置30は、変数aの値が無効である旨を示す例外を発生する。元のプログラムにおいては、変数aと変数bが等しい場合には、3行目のメモリアクセス命令が実行されないので、この様な例外は発生しないはずである。したがって、最適化装置30は、このようなメモリアクセス命令の移動を行うと、元のプログラムの動作を最適化済プログラムに忠実に反映させることができない。
【0025】
図3(B)は、第1命令としてのメモリアクセス命令の実行順序が変更できる例を示す。最適化装置30は、本図に示すように、変数aが有効な値か否かを検出するnullcheck命令(以降の本図の説明で(1)と略す)と、変数aが示すアドレスに所定値を加えたアドレスのメモリの内容を変数uに読み出す命令(以降の本図の説明で(2)と略す)と、変数a及び変数bの値が異なるか否かを判断する命令(以降の本図の説明で(3)と略す)と、変数aへのnullcheck命令(以降の本図の説明で(4)と略す)と、変数aが示すアドレスに所定値を加えたアドレスのメモリを、変数tに読み出す命令(以降の本図の説明で(5)と略す)とを含む最適化対象プログラムを入力とする。
【0026】
例外発生命令検出部310は、第1命令として(5)を検出する。そして、保証命令検出部315は、(5)により例外が発生しないことを保証する第2命令として、(1)を検出する。したがって、命令除去部300は、例外が発生しないと保証された(5)に対応する(4)を、冗長命令であるとして除去することができる。
【0027】
したがって、最適化装置30は、(1)、(4)、及び(5)の実行順序を保ちつつ、(5)を、(3)より先、かつ(1)より後に投機的に実行させるように命令の実行順序を変更することができる。例えば、(5)を、(2)と(3)の間に実行させるように実行順序を変更することができる。
【0028】
このように、例外が発生しないことを保証する第2命令(例えば(1))を検出した場合に、最適化装置30は、メモリアクセス命令等の例外を発生しうる第1命令(例えば(5))を、第1命令を選択的に実行する条件分岐命令(例えば(3))より先に投機的に実行させるように、第1命令の実行順序を変更することができる。
【0029】
図4は、ダミー命令が命令の実行順序の変更を制限する一例を示す。最適化装置30は、図4(A)に示すように、最適化対象プログラムとして、変数aの値が無効なアドレス値であるヌル値か否かの条件に基づく分岐命令(以降の本図の説明で(1)と略す)と、変数aに対するnullcheck命令(以降の本図の説明で(2)と略す)と、変数aが示すアドレスに所定値を加えたアドレスのメモリの内容を変数tに読み出すメモリアクセス命令(以降の本図の説明で(3)と略す)とを入力とする。
【0030】
例外発生命令検出部310は、(2)を検出し、保証命令検出部315は、(2)による例外が発生しないことを保証する第2命令として、(1)を検出する。この結果、命令除去部300は、(2)を除去する。
【0031】
そして、ダミー命令生成部320は、(1)の条件分岐命令の分岐条件が第1命令の例外を発生させないことを保証すると判断し、ダミー命令であるdummy_nullcheck命令を、(3)より先、かつ(1)の後に実行される位置に生成する(図4(B))。
【0032】
以上で示したように、最適化装置30は、例外チェック命令を除去する。また、最適化装置30は、条件分岐命令から第1命令に至る制御フロー上における、条件分岐命令の直後に実行される位置にダミー命令を生成する。従って、最適化装置30は、(3)等のメモリアクセス命令をダミー命令より先に配置させないように、実行順序の変更を制限できるので、命令の実行順序を適切に変更する最適化を行うことができる。
【0033】
なお、本図において、保証命令検出部315は、条件分岐命令として、変数aの値が無効なアドレス値であるヌル値か否かの条件に基づく分岐命令を検出する。例えば、保証命令検出部315は、最適化対象プログラムがJava(登録商標)のバイトコードである場合には、条件分岐命令としてifnull命令や、ifnonnull命令や、isinstanceof命令を検出する。
【0034】
図5は、ダミー命令が命令の実行順序の変更を制限する他の例を示す。最適化装置30は、図5(A)に示すように、最適化対象プログラムとして、配列変数aに対するnullcheck命令(以降の本図の説明で(1)と略す)と、配列変数aに対する添字0が、配列変数の大きさの範囲内であるか否かに応じて例外を発生させるboundcheck命令(以降の本図の説明で(2)と略す)と、配列変数aの0番目の要素に0を代入する命令(以降の本図の説明で(3)と略す)と、変数iが配列変数aの大きさの範囲内であるか否かの判断に基づく条件分岐命令(以降の本図の説明で(4)と略す)と、配列変数aに対するnullcheck命令(以降の本図の説明で(5)と略す)と、配列変数a及び添字iに対するboundcheck命令(以降の本図の説明で(6)と略す)と、配列変数aの添字iが示すメモリ中のアドレスから値を変数tに読み出す命令(以降の本図の説明で(7)と略す)とを入力とする。
【0035】
例外発生命令検出部310は、第1命令である(7)と、(7)に対応付けられた例外チェック命令である(5)及び(6)を検出する。そして、保証命令検出部315は、(5)による例外が発生しないことを保証する命令として(1)を検出し、(6)による例外が発生しないことを保証する命令として(4)を検出する。従って、命令除去部300は、(5)及び(6)の双方を削除する。
なお、本図の例において、保証命令検出部315は、(6)による例外が発生しないことを保証する命令として(4)を検出するが、他の例として、(6)による例外が発生する条件より限定された条件が成立した場合にのみ、(6)を実行させる条件分岐命令を検出してもよい。例えば、保証命令検出部315は、(6)による例外が発生する条件より限定された条件として、変数iの値が0以上かつ配列変数の長さの半分以下(例えば、if(0<=&&i<a.arraylength/2))である場合にのみ(6)を実行する命令を第2命令として検出してもよい。
【0036】
続いて、図5(A)において、条件分岐命令である(4)が、(7)の例外が発生しないことが保証するので、ダミー命令生成部320は、ダミー命令であるdummy_boundcheck命令を、(4)から(7)に至る制御フロー上の、(4)の直後に実行される部分に生成する(図5(B))。この結果、実行順序制御部330は、(7)を(4)より先に配置させないように、実行順序の変更を制限しつつ、命令の実行順序を変更する最適化を行うことができる。
【0037】
以上で示したように、最適化装置30は、例外チェック命令の除去を行うと伴に、例外が発生しないことを保証する条件分岐命令を検出した場合に、条件分岐命令の直後に実行される位置にダミー命令を生成する。従って、最適化装置30は、ダミー命令を用いて、実行の依存関係を適切に保ちつつ、命令の実行順序を変更する最適化を行うことができる。
【0038】
図6は、ダミー命令が実行順序の変更を制限する概念図を示す。本図において、図4に示したdummy_nullcheck命令が命令の実行順序の変更を制限する。基本ブロック500は、図4で示した(1)に相当し、変数aがヌル値であるかの判断に基づき条件分岐する命令である。基本ブロック500へ入力する矢印と、基本ブロック500から出力する矢印は、図4で示した最適化対象プログラムの制御フローを示す。
【0039】
図6(A)に示すように、最適化を行う前の最適化対象プログラムにおいて、変数aがヌル値でない場合に、図4(A)に示すnullcheck aの処理を行う。そして、最適化装置30による最適化において、命令除去部300は、図4(A)におけるnullcheck aを除去し、ダミー命令生成部320が、dummy_nullcheck aを生成することにより、図6(B)に示す制御フローを生成する。すなわち、ダミー命令生成部320は、dummy_nullcheck a命令を、図6(B)で示すように、次に実行される命令である「t=a.f1」への制御フローのエッジの途中に生成する。
【0040】
このように、最適化装置30は、ダミー命令を、条件分岐から出力する制御フローのエッジの途中に生成することにより、「t=a.f1」等の命令を、この条件分岐命令より先に実行させないように、実行順序の変更を制限することができる。したがって、最適化装置30は、最適化対象プログラムが正しく実行されることを保証しつつ、メモリアクセス命令等の実行順序を変更し、高速な実行を実現することができる。
【0041】
図7は、ダミー命令が実行順序の変更を制限する制御フローの一例を示す。本図において、最適化対象プログラムの制御の流れは、矩形領域で示した基本ブロックと、矩形領域を結ぶ実線の矢印で示した制御フローとで模式的に表されている。
具体的には、最適化対象プログラムは、最初に実行される基本ブロック600と、基本ブロック600に続いて実行され変数aがヌル値でない場合に基本ブロック620に分岐する基本ブロック610と、基本ブロック610による条件が成立した場合に実行される基本ブロック620と、基本ブロック620に続いて実行され条件分岐命令を含む基本ブロック630と、基本ブロック630による条件が成立した場合に実行される基本ブロック640と、基本ブロック640に続いて実行され条件分岐命令を含む基本ブロック650と、基本ブロック650に続いて実行され条件分岐命令を含む基本ブロック660とを有する。また、基本ブロック650及び基本ブロック660の条件分岐命令は、それぞれ基本ブロック630及び基本ブロック610に戻る処理を行うことによりループを形成している。
【0042】
基本ブロック640は、変数aに対するnullcheck命令と、変数aをアドレス値とするメモリアクセス命令「F=a.f」と、変数Fの値を変数tに累積する命令「t+=F」とを有する。最適化装置30は、メモリアクセス命令「F=a.f」により例外が発生しないことを保証する命令を基本ブロック610内に検出し、変数aに対するnullcheck命令を除去する。
ここで、最適化装置30は、メモリアクセス命令「F=a.f」を、基本ブロック600に移動してしまうと、プログラムを正しく実行させることができない。なぜなら、変数aがヌル値である場合に、最適化対象プログラムは、アクセスされるメモリのアドレスが無効である旨の例外を発生させる可能性がある。一方、元の最適化対象プログラムでは、変数aがヌル値である場合には、基本ブロック640のメモリアクセス命令「F=a.f」が実行されないので、この様な例外は発生しない。従って、最適化装置30は、このようなメモリアクセス命令の移動を行うと、最適化対象プログラムの動作を最適化済プログラムに忠実に反映させることができない。例えば、最適化対象プログラムにおいて保障されている型安全性が保証されなくなる。
【0043】
そこで、図7(B)に示したように、ダミー命令生成部320は、選択的に実行される命令の例外を発生させないことを保証しうる基本ブロック610の条件分岐命令より後、かつメモリアクセス命令「F=a.f」の前に実行される位置に、dummy_nullcheckを含む基本ブロック615を生成する。そして、実行順序制御部330は、メモリアクセス命令「F=a.f」の移動を基本ブロック615より前に移動させないように、実行順序の変更を制限する。
一方、実行順序制御部330は、基本ブロック615より後、かつ条件分岐命令を含む基本ブロック630より先に、メモリアクセス命令「F=a.f」を実行させるような実行順序の変更を行うことができる。例えば、実行順序制御部330は、メモリアクセス命令「F=a.f」を、基本ブロック620に移動しても、最適化対象プログラムの意味及び動作を最適化済プログラムに正しく反映させることができ、型安全性を保障することができる。
【0044】
図8は、最適化対象プログラムの一例を示す。本プログラムは、4行目から16行目までの処理を16行目の判断結果に応じて繰り返す。また、この繰り返し(ループ)のそれぞれにおいて、7行目の判断結果に応じて、8行目の処理又は10〜14行目の処理を行う。
【0045】
図8の16行目において「this.maxPosition」は、thisオブジェクトの先頭のアドレスに、maxPositionのフィールド名により定まる所定値を加えたアドレスのメモリ中の値を示している。また、本図の6行目、7行目、及び10行目において「this.str」は、thisオブジェクトの先頭のアドレスに、strのフィールド名により定まる所定値を加えたアドレスのメモリ中の値を示している。
「this.maxPosition」又は「this.str」によりアクセスされるメモリ中のアドレスが無効である場合に、最適化対象プログラムは例外を発生する。本図において、「this.maxPosition」及び「this.str」によるメモリアクセスと、アクセスされるアドレスが有効か否かを判断する例外チェックとは、4〜16行目の繰り返し毎に実行されるので効率が悪い。
【0046】
図9は、最適化対象プログラムに、実行順序の投機的でない変更を行った結果を示す。図8の16行目で示した「this.maxPosition」は、本図の18行目において、「T_maxPosition」の変数に置き換えられ、「T_maxPosition」の変数には、3行目において、「this.maxPosition」の値が代入されている。また、図7の6行目、7行目、及び10行目で示した「this.str」は、それぞれ本図の6行目、9行目、及び12行目において、「T_str」の変数に置き換えられ、「T_str」の変数には、5行目において、「this.str」の値が代入されている。
したがって、コンパイラ10は、「this.maxPosition」及び「this.str」によるメモリアクセスを、7行目から18行目までのループの外部において行わせることができるので、最適化対象プログラムを高速化することができる。
【0047】
しかしながら、本図においては、コンパイラ10は、9行目に示す「T_str.count」、12行目に示す「T_str.value」、「T_str.offset」、13行目に示す「this.maxDelimChar」、及び14行目に示す「this.delimiters」のそれぞれによるメモリアクセスを、9行目に示した条件分岐を越えて先に実行させるような実行順序の変更することができない。
したがって、これらのメモリアクセスによりメモリから読み出される値がループ内で不変な値であるにも関わらず、最適化対象プログラムは、ループによる繰り返し毎にメモリをアクセスしなければならないので、依然として効率が悪い部分を含む。
【0048】
図10は、最適化対象プログラムに、本実施形態で示す実行順序の投機的な変更を行った結果を示す。命令除去部300は、図9で示した効率的でないメモリアクセスに対する例外チェック命令を除去し、実行順序制御部330は、これらのメモリアクセスを14行目の条件分岐命令より先に実行させるように実行順序を変更する。
すなわち、実行順序制御部330及びループ内不変値最適化部360は、図9で示したメモリアクセスを、本図の7〜11行目に移動することにより、ループ内でのメモリアクセスを低減し、最適化対象プログラムを高速化することができる。
【0049】
図11は、コンパイラ10のハードウェア構成の一例を示す。本実施形態に係るコンパイラ10は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、グラフィックコントローラ1075、及び表示装置1080を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
【0050】
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたコンパイラプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【0051】
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して他の装置と通信する。ハードディスクドライブ1040は、コンパイラ10が使用するコンパイラプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。
【0052】
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、コンパイラ10の起動時にCPU1000が実行するブートプログラムや、パーソナルコンピュータ本体110のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【0053】
コンパイラ10を実現するコンパイラプログラムは、命令除去モジュールと、例外発生命令検出モジュールと、保証命令検出モジュールと、ダミー命令生成モジュールと、実行順序制御モジュールと、冗長性除去モジュールと、部分冗長性除去モジュールと、ループ内不変値最適化モジュールとを備える。これらのモジュールは、コンパイラ10を、命令除去部300、例外発生命令検出部310、保証命令検出部315、ダミー命令生成部320、実行順序制御部330、冗長性除去部340、部分冗長性除去部350、及びループ内不変値最適化部360として動作させるプログラムである。
【0054】
コンパイラ10に提供されるコンパイラプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。このコンパイラプログラムは、記録媒体から読み出され、入出力チップ1070を介して記憶システム200及びバックアップ装置300にインストールされ、記憶システム200及びバックアップ装置300において実行される。これに代えて、記憶システム200及びバックアップ装置300のそれぞれは、更にフレキシブルディスクドライブ、CD−ROMドライブ、又はICカードリーダ等を備え、当該コンパイラプログラムを記録媒体から直接読み出して実行してもよい。
【0055】
以上に示したプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してコンパイラプログラムをコンパイラ10に提供してもよい。
【0056】
以上の説明から明らかなように、コンパイラ10は、例外を発生しうるメモリアクセス命令等を、当該メモリアクセス命令を選択的に実行させる条件分岐命令より先に実行させるように命令の実行順序を変更することができる。したがって、コンパイラ10は、処理に多くの時間を要するメモリアクセス等の実行開始を早めることができ、結果として、最適化対象プログラムを高速化することができる。更に、コンパイラ10は、これらの最適化に伴い可能となる多様な最適化を行うことにより、最適化対象プログラムを更に高速化することができる。
【0057】
以上に説明した実施形態によれば、以下の各項目に示す最適化装置、コンパイラプログラム、最適化方法、及び記録媒体が実現される。
【0058】
(項目1) 最適化対象プログラムにおける、命令の実行順序を変更する最適化装置であって、例外を発生し得る第1命令を検出する例外発生命令検出部と、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を検出する保証命令検出部と、前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記第1命令の実行順序を変更する実行順序制御部とを備えることを特徴とする最適化装置。(項目2) 前記条件分岐命令の分岐条件が、前記条件分岐命令によって選択的に実行される命令の例外を発生させないことを保証しうる場合に、前記条件分岐命令より後、かつ前記第1命令の前に実行される位置に、実質的な処理を行わない命令であるダミー命令を生成するダミー命令生成部を更に備え、前記実行順序制御部は、前記第1命令を前記ダミー命令より先に配置させないように、実行順序の変更を制限することを特徴とする項目1記載の最適化装置。
【0059】
(項目3) 前記例外発生命令検出部は、前記第1命令として、メモリアクセス命令を検出し、前記例外は、前記メモリアクセス命令によりアクセスされるメモリ中のアドレスが無効である場合に発生し、前記保証命令検出部は、前記第2命令として、前記メモリアクセス命令によりアクセスされるメモリのアドレスが有効なアドレスであるか否かを判断する命令を検出することを特徴とする項目1記載の最適化装置。
(項目4) 前記例外発生命令検出部は、前記第1命令として、変数に基づき指定されたメモリ内のアドレスを参照する命令を検出し、前記保証命令検出部は、前記第2命令として、前記変数の値が無効である事を示すヌル値であるか否かを判断する命令を検出することを特徴とする項目3記載の最適化装置。
(項目5) 前記例外発生命令検出部は、前記第1命令として、メモリに格納された配列変数にアクセスする前記メモリアクセス命令を検出し、前記保証命令検出部は、前記第2命令として、前記メモリアクセス命令によりアクセスされる配列変数の添字が、配列変数の大きさの範囲内であるか否かを判断する命令を検出することを特徴とする項目3記載の最適化装置。
【0060】
(項目6) 前記最適化対象プログラムは、前記第1命令により例外が発生するか否かを検出する例外チェック命令を、前記第1命令の実行より先かつ前記条件分岐命令の実行より後に含み、前記例外発生命令検出部は、前記例外チェック命令を検出し、前記保証命令検出部は、前記第2命令として、前記例外チェック命令による例外が発生しないことを保証する命令を検出し、前記第2命令が検出された場合に、前記例外チェック命令を除去する命令除去部を更に備え、前記実行順序制御部は、前記例外チェック命令が除去されない場合における、前記第2命令、前記例外チェック命令、及び前記第1命令の実行順序を保ちつつ、前記第1命令を、前記条件分岐命令より先に実行させるように実行順序を変更することを特徴とする項目1記載の最適化装置。
(項目7) 前記実行順序制御部により命令の実行順序を変更した前記最適化対象プログラムに対して、処理の内容が他の命令と冗長である冗長命令の除去を行う冗長性除去部を更に備えることを特徴とする項目1記載の最適化装置。
【0061】
(項目8) 前記実行順序制御部により命令の実行順序を変更した前記最適化対象プログラムに対して、更に部分冗長性除去を行う部分冗長性除去部を更に備えることを特徴とする項目1記載の最適化装置。
(項目9) 前記実行順序制御部により命令の実行順序を変更した前記最適化対象プログラムに対して、更にループ内において不変の値を読み出すメモリアクセス命令をループ外に移動する処理を行うループ内不変値最適化部を更に備えることを特徴とする項目1記載の最適化装置。
(項目10) 命令の実行順序の変更により最適化対象プログラムを最適化する最適化装置であって、命令の実行順序の変更を制限する場合に用いられ、実質的な処理を行わないダミー命令を生成するダミー命令生成部と、前記ダミー命令を越えた命令の実行順序の変更を制限しつつ、命令の実行順序の変更による最適化を行う実行順序制御部とを備えることを特徴とする最適化装置。
【0062】
(項目11) 前記最適化対象プログラム中の条件分岐命令の分岐条件が、前記条件分岐命令によって選択的に実行される第1命令による例外が発生しないことを保証するか否かを判断する保証命令検出部を更に備え、前記分岐条件が、前記第1命令による例外が発生しないことを保証すると判断された場合に、前記ダミー命令生成部は、前記条件分岐命令より後、かつ前記第1命令より先に実行される位置に、前記ダミー命令を生成することを特徴とする項目10記載の最適化装置。
(項目12) コンピュータによって、最適化対象プログラムにおける命令の実行順序を変更させるコンパイラプログラムであって、前記コンピュータを、例外を発生し得る第1命令を検出する例外発生命令検出部と、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を検出する保証命令検出部と、前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記第1命令の実行順序を変更する実行順序制御部として機能させることを特徴とするコンパイラプログラム。
(項目13) 前記例外発生命令検出部は、前記第1命令として、メモリアクセス命令を検出し、前記例外は、前記メモリアクセス命令によりアクセスされるメモリ中のアドレスが無効である場合に発生し、前記保証命令検出部は、前記第2命令として、前記メモリアクセス命令によりアクセスされるメモリのアドレスが有効なアドレスであるか否かを判断する命令を検出することを特徴とする項目12記載のコンパイラプログラム。
【0063】
(項目14) 前記最適化対象プログラムは、前記第1命令により例外が発生するか否かを検出する例外チェック命令を前記第1命令の実行より先かつ前記条件分岐命令の実行より後に含み、前記例外発生命令検出部は、前記例外チェック命令を検出し、前記保証命令検出部は、前記第2命令として、前記例外チェック命令による例外が発生しないことを保証する命令を検出し、前記第2命令が検出された場合に、前記例外チェック命令を除去する命令除去部を更に備え、前記実行順序制御部は、前記例外チェック命令が除去されない場合における、前記第2命令、前記例外チェック命令、及び前記第1命令の実行順序を保ちつつ、前記第1命令を、前記条件分岐命令より先に実行させるように実行順序を変更することを特徴とする項目12記載のコンパイラプログラム。
(項目15) 前記実行順序制御部により命令の実行順序を変更された前記最適化対象プログラムに対して、処理の内容が他の命令と冗長である冗長命令の除去を行う冗長性除去部を更に備えることを特徴とする項目12記載のコンパイラプログラム。
【0064】
(項目16) コンピュータによって、命令の実行順序の変更により最適化対象プログラムを最適化させるコンパイラプログラムであって、前記コンピュータを、命令の実行順序の変更を制限する場合に用いられ、実質的な処理を行わないダミー命令を生成するダミー命令生成部と、前記ダミー命令を越えた命令の実行順序の変更を制限しつつ、命令の実行順序の変更による最適化を行う実行順序制御部として機能させることを特徴とするコンパイラプログラム。
(項目17) 最適化対象プログラムにおける、命令の実行順序を変更する最適化方法であって、例外を発生し得る第1命令を検出する段階と、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を検出する段階と、前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記第1命令の実行順序を変更する段階とを備えることを特徴とする最適化方法。
(項目18) 命令の実行順序の変更により最適化対象プログラムを最適化する最適化方法であって、命令の実行順序の変更を制限する場合に用いられ、実質的な処理を行わないダミー命令を生成する段階と、前記ダミー命令を越えた命令の実行順序の変更を制限しつつ、命令の実行順序の変更による最適化を行う段階とを備えることを特徴とする最適化方法。
【0065】
(項目19) コンピュータによって、最適化対象プログラムにおける、命令の実行順序を変更させるコンパイラプログラムを記録した記録媒体であって、前記コンパイラプログラムは、前記コンピュータを、例外を発生し得る第1命令を検出する例外発生命令検出部と、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を検出する保証命令検出部と、前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記第1命令の実行順序を変更する実行順序制御部と
して機能させることを特徴とする記録媒体。
(項目20) コンピュータによって、命令の実行順序の変更により最適化対象プログラムを最適化させるコンパイラプログラムを記録した記録媒体であって、前記コンパイラプログラムは、前記コンピュータを、命令の実行順序の変更を制限する場合に用いられ、実質的な処理を行わないダミー命令を生成するダミー命令生成部と、前記ダミー命令を越えた命令の実行順序の変更を制限しつつ、命令の実行順序の変更による最適化を行う実行順序制御部として機能させることを特徴とする記録媒体。
【0066】
以上、本発明を実施形態を用いて説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。上記実施形態に、多様な変更または改良を加えることができる。そのような変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【0067】
【発明の効果】
上記説明から明らかなように、本発明によれば例外を発生しうる命令の実行順序を変更することによりプログラムを最適化することができる。
【図面の簡単な説明】
【図1】図1は、コンパイラ10の機能ブロック図。
【図2】図2は、コンパイラ10の動作フローを示す図。
【図3】図3は、メモリアクセス命令の投機的な移動を示す図。
【図4】図4は、ダミー命令が命令の実行順序の変更を制限する一例を示す図。
【図5】図5は、ダミー命令が命令の実行順序の変更を制限する他の例を示す図。
【図6】図6は、ダミー命令が実行順序の変更を制限する概念図。
【図7】図7は、ダミー命令が実行順序の変更を制限する制御フローの一例を示す図。
【図8】図8は、最適化対象プログラムの例を示す図。
【図9】図9は、最適化対象プログラムに、実行順序の投機的でない変更を行った結果を示す図。
【図10】図10は、最適化対象プログラムに、実行順序の投機的な変更を行った結果を示す図。
【図11】図11は、コンパイラ10のハードウェア構成の一例を示す図。
【符号の説明】
10 コンパイラ
20 フロントエンド処理装置
30 最適化装置
90 コード生成部
300 命令除去部
310 例外発生命令検出部
315 保証命令検出部
320 ダミー命令生成部
330 実行順序制御部
340 冗長性除去部
350 部分冗長性除去部
360 ループ内不変値最適化部
600 基本ブロック
610 基本ブロック
615 基本ブロック
620 基本ブロック
630 基本ブロック
640 基本ブロック
650 基本ブロック
660 基本ブロック

Claims (15)

  1. コンピュータ上でコンパイラプログラムを実行することにより実現され、記憶装置に格納された最適化対象プログラムにおける、命令の実行順序を変更する最適化装置であって、
    前記コンピュータのCPUの動作により、前記最適化対象プログラムの中から例外を発生し得る第1命令を検出する例外発生命令検出部と、
    前記最適化対象プログラムの中から、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を、前記CPUの動作により検出する保証命令検出部と、
    前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記最適化対象プログラムの実行コードにおける前記第1命令の実行順序を、前記CPUの動作により変更する実行順序制御部と
    を備えることを特徴とする最適化装置。
  2. 前記条件分岐命令の分岐条件が、前記条件分岐命令によって選択的に実行される命令の例外を発生させないことを保証しうる場合に、前記最適化対象プログラムの実行コードにおける、前記条件分岐命令より後、かつ前記第1命令の前に実行される位置に、実質的な処理を行わない命令であるダミー命令を前記CPUの動作により生成するダミー命令生成部を更に備え、
    前記実行順序制御部は、前記第1命令を前記ダミー命令より先に配置させないように、前記最適化対象プログラムの実行コードにおける実行順序の変更を前記CPUの動作により制限することを特徴とする請求項1記載の最適化装置。
  3. 前記例外発生命令検出部は、前記第1命令として、前記最適化対象プログラムの中からメモリアクセス命令を前記CPUの動作により検出し、
    前記例外は、前記メモリアクセス命令によりアクセスされるメモリ中のアドレスが無効である場合に発生し、
    前記保証命令検出部は、前記第2命令として、前記最適化対象プログラムの中から前記メモリアクセス命令によりアクセスされるメモリのアドレスが有効なアドレスであるか否かを判断する命令を前記CPUの動作により検出することを特徴とする請求項1記載の最適化装置。
  4. 前記例外発生命令検出部は、前記第1命令として、前記最適化対象プログラムの中から変数に基づき指定されたメモリ内のアドレスを参照する命令を前記CPUの動作により検出し、
    前記保証命令検出部は、前記第2命令として、前記最適化対象プログラムの中から前記変数の値が無効である事を示すヌル値であるか否かを判断する命令を前記CPUの動作により検出することを特徴とする請求項3記載の最適化装置。
  5. 前記例外発生命令検出部は、前記第1命令として、前記最適化対象プログラムの中からメモリに格納された配列変数にアクセスする前記メモリアクセス命令を前記CPUの動作により検出し、
    前記保証命令検出部は、前記第2命令として、前記最適化対象プログラムの中から、前記メモリアクセス命令によりアクセスされる配列変数の添字が、配列変数の大きさの範囲内であるか否かを判断する命令を前記CPUの動作により検出することを特徴とする請求項3記載の最適化装置。
  6. 前記最適化対象プログラムは、前記第1命令により例外が発生するか否かを検出する例外チェック命令を、前記第1命令の実行より先かつ前記条件分岐命令の実行より後に含み、
    前記例外発生命令検出部は、前記最適化対象プログラムの中から前記例外チェック命令を前記CPUの動作により検出し、
    前記保証命令検出部は、前記第2命令として、前記最適化対象プログラムの中から前記例外チェック命令による例外が発生しないことを保証する命令を前記CPUの動作により検出し、
    前記第2命令が検出された場合に、前記最適化対象プログラムの実行コードにおける前記例外チェック命令を前記CPUの動作により除去する命令除去部を更に備え、
    前記実行順序制御部は、前記例外チェック命令が除去されない場合における、前記第2命令、前記例外チェック命令、及び前記第1命令の実行順序を保ちつつ、前記第1命令を、前記条件分岐命令より先に実行させるように、前記最適化対象プログラムの実行コードにおける実行順序を前記CPUの動作により変更することを特徴とする請求項1記載の最適化装置。
  7. 前記実行順序制御部により命令の実行順序を変更した前記最適化対象プログラムの実行コードに対して、処理の内容が他の命令と冗長である冗長命令の除去を前記CPUの動作により行う冗長性除去部を更に備えることを特徴とする請求項1記載の最適化装置。
  8. 前記実行順序制御部により命令の実行順序を変更した前記最適化対象プログラムの実行コードに対して、前記CPUの動作により、更に、制御の流れの合流点において、複数の合流元の一部のみにおいて実行される命令と、合流先において実行される命令の内容が同一である部分冗長性を、合流先における命令を除去し、複数の合流元全てにおいて当該命令を実行させることにより除去する部分冗長性除去部を更に備えることを特徴とする請求項1記載の最適化装置。
  9. 前記実行順序制御部により命令の実行順序を変更した前記最適化対象プログラムの実行コードに対して、更にループ内において不変の値を読み出すメモリアクセス命令をループ外に移動する処理を前記CPUの動作により行うループ内不変値最適化部を更に備えることを特徴とする請求項1記載の最適化装置。
  10. コンピュータによって実行されることにより、当該コンピュータを、記憶装置に格納された最適化対象プログラムにおける命令の実行順序を変更する最適化装置として動作させるコンパイラプログラムであって、
    前記コンピュータを、
    当該コンピュータのCPUの動作により、前記最適化対象プログラムの中から例外を発生し得る第1命令を検出する例外発生命令検出部と、
    前記最適化対象プログラムの中から、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を前記CPUの動作により検出する保証命令検出部と、
    前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記最適化対象プログラムの実行コードにおける前記第1命令の実行順序を、前記CPUの動作により変更する実行順序制御部と
    して機能させることを特徴とするコンパイラプログラム。
  11. 前記例外発生命令検出部は、前記第1命令として、前記最適化対象プログラムの中からメモリアクセス命令を前記CPUの動作により検出し、
    前記例外は、前記メモリアクセス命令によりアクセスされるメモリ中のアドレスが無効である場合に発生し、
    前記保証命令検出部は、前記第2命令として、前記最適化対象プログラムの中から前記メモリアクセス命令によりアクセスされるメモリのアドレスが有効なアドレスであるか否かを判断する命令を前記CPUの動作により検出することを特徴とする請求項10記載のコンパイラプログラム。
  12. 前記最適化対象プログラムは、前記第1命令により例外が発生するか否かを検出する例外チェック命令を前記第1命令の実行より先かつ前記条件分岐命令の実行より後に含み、
    前記例外発生命令検出部は、前記最適化対象プログラムの中から前記例外チェック命令を前記CPUの動作により検出し、
    前記保証命令検出部は、前記第2命令として、前記最適化対象プログラムの中から前記例外チェック命令による例外が発生しないことを保証する命令を前記CPUの動作により検出し、
    前記第2命令が検出された場合に、前記最適化対象プログラムの実行コードにおける前記例外チェック命令を前記CPUの動作により除去する命令除去部を更に備え、
    前記実行順序制御部は、前記例外チェック命令が除去されない場合における、前記第2命令、前記例外チェック命令、及び前記第1命令の実行順序を保ちつつ、前記第1命令を、前記条件分岐命令より先に実行させるように、前記最適化対象プログラムの実行コードにおける実行順序を前記CPUの動作により変更することを特徴とする請求項10記載のコンパイラプログラム。
  13. 前記実行順序制御部により命令の実行順序を変更された前記最適化対象プログラムの実行コードに対して、処理の内容が他の命令と冗長である冗長命令の除去を前記CPUの動作により行う冗長性除去部を更に備えることを特徴とする請求項10記載のコンパイラプログラム。
  14. コンピュータ上でコンパイラプログラムを実行することにより実現され、記憶装置に格納された最適化対象プログラムにおける、命令の実行順序を変更する最適化方法であって、
    前記コンピュータのCPUの動作により、前記最適化対象プログラムの中から例外を発生し得る第1命令を検出する段階と、
    前記最適化対象プログラムの中から、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を前記CPUの動作により検出する検出する段階と、
    前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記最適化対象プログラムの実行コードにおける前記第1命令の実行順序を、前記CPUの動作により変更する段階と
    を備えることを特徴とする最適化方法。
  15. コンピュータによって実行されることにより、当該コンピュータを、記憶装置に格納された最適化対象プログラムにおける、命令の実行順序を変更する最適化装置として動作させるコンパイラプログラムを記録した記録媒体であって、
    前記コンパイラプログラムは、前記コンピュータを、
    当該コンピュータのCPUの動作により、前記最適化対象プログラムの中から例外を発生し得る第1命令を検出する例外発生命令検出部と、
    前記最適化対象プログラムの中から、前記第1命令より先に実行され、前記第1命令の例外を発生させないことを保証する第2命令を前記CPUの動作により検出する保証命令検出部と、
    前記第1命令を選択的に実行させる条件分岐命令より先、かつ前記第2命令より後に実行させるように、前記最適化対象プログラムの実行コードにおける前記第1命令の実行順序を、前記CPUの動作により変更する実行順序制御部と
    して機能させることを特徴とする記録媒体。
JP2002219853A 2002-07-29 2002-07-29 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 Expired - Fee Related JP3900485B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2002219853A JP3900485B2 (ja) 2002-07-29 2002-07-29 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
US10/446,841 US7103882B2 (en) 2002-07-29 2003-05-29 Optimization apparatus, complier program, optimization method and recording medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002219853A JP3900485B2 (ja) 2002-07-29 2002-07-29 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体

Publications (2)

Publication Number Publication Date
JP2004062520A JP2004062520A (ja) 2004-02-26
JP3900485B2 true JP3900485B2 (ja) 2007-04-04

Family

ID=30768004

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002219853A Expired - Fee Related JP3900485B2 (ja) 2002-07-29 2002-07-29 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体

Country Status (2)

Country Link
US (1) US7103882B2 (ja)
JP (1) JP3900485B2 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3956131B2 (ja) * 2002-12-26 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム変換装置、プログラム変換方法及びプログラム
JP3919680B2 (ja) * 2003-02-26 2007-05-30 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイラプログラム、及び記録媒体
JP3902147B2 (ja) * 2003-03-04 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
US7313790B2 (en) 2003-06-23 2007-12-25 Intel Corporation Methods and apparatus for preserving precise exceptions in code reordering by using control speculation
US7836448B1 (en) * 2004-06-30 2010-11-16 Emc Corporation System and methods for task management
KR100668326B1 (ko) * 2005-02-01 2007-01-12 삼성전자주식회사 3차원 그래픽스 데이터를 랜더링하는 방법 및 장치
US7210024B2 (en) * 2005-02-10 2007-04-24 Qualcomm Incorporated Conditional instruction execution via emissary instruction for condition evaluation
US7797690B2 (en) * 2005-03-15 2010-09-14 International Business Machines Corporation System, method and program product to optimize code during run time
US7574700B2 (en) * 2005-03-31 2009-08-11 Sun Microsystems, Inc. Supporting dynamically-typed languages in typed assembly languages
JP4806402B2 (ja) * 2005-04-21 2011-11-02 パナソニック株式会社 プログラム難読化装置及び難読化方法
US7810086B2 (en) * 2005-06-30 2010-10-05 Intel Corporation Safe code-motion of dangerous instructions during compiler optimization
US20070006197A1 (en) * 2005-06-30 2007-01-04 Murphy Brian R Safety verification of computer program
US20070094639A1 (en) * 2005-10-26 2007-04-26 Arm Limited Preparing assembly languague source code
US7870544B2 (en) * 2006-04-05 2011-01-11 International Business Machines Corporation Insuring maximum code motion of accesses to DMA buffers
US7937695B2 (en) * 2007-04-27 2011-05-03 International Business Machines Corporation Reducing number of exception checks
US8495606B2 (en) * 2008-11-14 2013-07-23 Oracle America, Inc. Redundant exception handling code removal
US9052984B2 (en) * 2009-02-26 2015-06-09 International Business Machines Corporation Exception declaration refactoring to reduce memory footprint
US9134977B2 (en) * 2010-02-26 2015-09-15 Red Hat, Inc. Compiler operation for handling conditional statements
JP5536593B2 (ja) 2010-09-01 2014-07-02 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、最適化方法およびコンパイラ・プログラム
US20150199228A1 (en) * 2012-09-06 2015-07-16 Google Inc. Conditional branch programming technique
WO2014123552A1 (en) * 2013-02-08 2014-08-14 Mellmo Inc. Executing database queries using multiple processors
US9858058B2 (en) 2014-03-31 2018-01-02 International Business Machines Corporation Partition mobility for partitions with extended code
US10055209B2 (en) * 2015-01-12 2018-08-21 Red Hat, Inc. Resource closing
US10180829B2 (en) * 2015-12-15 2019-01-15 Nxp Usa, Inc. System and method for modulo addressing vectorization with invariant code motion
US10025690B2 (en) 2016-02-23 2018-07-17 International Business Machines Corporation Method of reordering condition checks
JP7414466B2 (ja) * 2019-10-23 2024-01-16 ファナック株式会社 最適化処理装置

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4656583A (en) * 1984-08-13 1987-04-07 International Business Machines Corporation Method for improving global common subexpression elimination and code motion in an optimizing compiler
DE69132675T2 (de) * 1990-04-06 2002-06-13 Nec Corp Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter
TW197505B (ja) * 1991-03-07 1993-01-01 Digital Equipment Corp
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
DE4434895C2 (de) * 1993-12-23 1998-12-24 Hewlett Packard Co Verfahren und Vorrichtung zur Behandlung von Ausnahmebedingungen
US5799179A (en) * 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US5958061A (en) * 1996-07-24 1999-09-28 Transmeta Corporation Host microprocessor with apparatus for temporarily holding target processor state
US5966537A (en) * 1997-05-28 1999-10-12 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing an executable computer program using input data
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
JPH11194957A (ja) * 1998-01-07 1999-07-21 Matsushita Electric Ind Co Ltd デバッグ支援装置、並列実行情報生成装置、及びこれらに適用されるプログラムを記録した記録媒体
JP3320358B2 (ja) * 1998-06-18 2002-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、例外処理方法、及びコンピュータ
US6247172B1 (en) * 1998-07-02 2001-06-12 Hewlett-Packard Company Method for a translation system that aggressively optimizes and preserves full synchronous exception state
JP3280332B2 (ja) * 1998-07-10 2002-05-13 インターナショナル・ビジネス・マシーンズ・コーポレーション ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法
JP3437932B2 (ja) * 1999-01-05 2003-08-18 インターナショナル・ビジネス・マシーンズ・コーポレーション 配列レンジ・チェックのためのコード生成方法及び装置、並びにバージョニング方法及び装置
US6412109B1 (en) * 1999-01-29 2002-06-25 Sun Microsystems, Inc. Method for optimizing java bytecodes in the presence of try-catch blocks
US6513109B1 (en) * 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6324643B1 (en) * 1999-10-01 2001-11-27 Hitachi, Ltd. Branch prediction and target instruction control for processor
US6578133B1 (en) * 2000-02-24 2003-06-10 Stanley M. Hyduke MIMD array of single bit processors for processing logic equations in strict sequential order
SE0003446L (sv) * 2000-09-27 2002-03-28 Ericsson Telefon Ab L M En pipelinemikroprocessor och ett förfarnade relaterande därtill
JP3707727B2 (ja) * 2000-10-30 2005-10-19 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ

Also Published As

Publication number Publication date
US20040019770A1 (en) 2004-01-29
US7103882B2 (en) 2006-09-05
JP2004062520A (ja) 2004-02-26

Similar Documents

Publication Publication Date Title
JP3900485B2 (ja) 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
US9875173B2 (en) Time travel debugging in managed runtime
US7406684B2 (en) Compiler, dynamic compiler, and replay compiler
JP2002149416A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
KR101081090B1 (ko) 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화
JP4563829B2 (ja) ダイレクトメモリアクセス制御方法、ダイレクトメモリアクセス制御装置、情報処理システム、プログラム
JP2000347872A (ja) 例外を正規制御フローとして処理する方法及び装置
JP2008059279A (ja) 文字列出力処理を最適化する技術
US9256437B2 (en) Code generation method, and information processing apparatus
JP4129981B2 (ja) コンパイラ、コンパイラプログラム、記録媒体、制御方法、及び中央処理装置
JP3992102B2 (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
JP4178278B2 (ja) コンパイラ装置、最適化方法、コンパイラプログラム、及び記録媒体
US20090254893A1 (en) Compiler optimized function variants for use when return codes are ignored
US20100153936A1 (en) Deferred constant pool generation
US7979853B2 (en) Compiler device, method, program and recording medium
JP3919680B2 (ja) コンパイラ装置、コンパイラプログラム、及び記録媒体
JP2007532990A (ja) ヘルパーサブスレッドを含むスレッドの実行の明示的ソフトウェア制御のための方法及び構造
JP5536593B2 (ja) 最適化装置、最適化方法およびコンパイラ・プログラム
JP6103541B2 (ja) バイナリコードの実行を制御する装置及び方法
JP4093484B2 (ja) コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体
JP2004287844A (ja) コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法
JP2010140233A (ja) エミュレーションシステム及びエミュレーション方法
US20040187101A1 (en) Compiler, compiler program, recording medium, and compiling method
JP4788902B2 (ja) コンパイル最適化方法およびコンパイラ
CN117950836A (zh) 一种基于risc-v架构中断控制系统和方法

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

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061023

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20061206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20061222

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110112

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees