JP3956131B2 - プログラム変換装置、プログラム変換方法及びプログラム - Google Patents
プログラム変換装置、プログラム変換方法及びプログラム Download PDFInfo
- Publication number
- JP3956131B2 JP3956131B2 JP2002377992A JP2002377992A JP3956131B2 JP 3956131 B2 JP3956131 B2 JP 3956131B2 JP 2002377992 A JP2002377992 A JP 2002377992A JP 2002377992 A JP2002377992 A JP 2002377992A JP 3956131 B2 JP3956131 B2 JP 3956131B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- argument
- procedure
- condition
- computer
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
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)
Description
【発明の属する技術分野】
本発明は、コンピュータプログラムのコンパイルにおいて実行される最適化処理に関する。
【0002】
【従来の技術】
コンピュータによるデータ処理を制御するプログラムを記述するプログラミング言語のうち、引数を値渡しする言語、すなわち殆どの手続き型言語では、手続き呼び出しにおける呼び側の手続き(以下、単に呼び側と称す)が、手続き呼び出しに先立ち全ての引数を評価する(これを先行評価(eager evaluation)という)。
【0003】
引数の先行評価には、引数評価を呼び側本体の計算と並列に実行することで、当該引数評価を行うことによる遅延時間を、手続き呼び出しの遅延時間と重複させて隠せる(実質的に遅延を低減させられる)という利点がある。その反面、手続き呼び出しの呼ばれ側の手続き(以下、単に呼ばれ側と称す)で実際に参照されない引数まで評価されてしまう無駄がある。
【0004】
そこで、プログラムの開発においては、引数の先行評価を行いながら、その無駄を省くための方策が求められる。
Schemeという言語では、引数の評価は通常、先行評価で行うが、約束(promise)と呼ばれる閉包(closure)として呼ばれ側に渡し、遅延評価(lazy evaluation)に切り替えることができる仕様となっている(例えば、非特許文献1参照)。
【0005】
また、プログラマがプログラムの作成時に、引数が呼ばれ側で実際に参照されるための条件(以下、参照条件と称す)から導かれる適切な条件(以下、評価条件と称す)を呼び側に挿入することにより、呼ばれ側で引数を参照するか否かに応じて適切に先行評価を行うことができる。そして自ら呼び側のソースコードに評価条件を挿入し、手続き呼び出しそのものを保護することができる。
【0006】
さらに、従来から用いられているプログラムの最適化の手法として、部分不用コード除去(partial dead code elimination)がある。この最適化は、後続制御フローの一部分でのみ値が参照される命令を、値を参照する命令の直前に移動し、その部分不用性を除く(例えば、非特許文献2参照)。
【0007】
【非特許文献1】
R. Kelsey, W. Clinger, J. Rees (eds.), "Revised5 Report on the Algorithmic Language Scheme", Higher-Order and Symbolic Computation, Vol. 11, No. 1, September, 1998, and ACM SIGPLAN Notices, Vol. 33, No. 9, October, 1998.
【非特許文献2】
J. Knoop, O. Ruthing and B. Steffen, "Partial Dead Code Elimination", In PLDI '94, pp. 147-158, June 1994.
【非特許文献3】
Steven S. Muchnick, "Advanced Compiler Design and Implementation", Morgan Kaufmann Publishers, Inc., 1997, pp. 465 - 470.
【非特許文献4】
Steven S. Muchnick, "Advanced Compiler Design and Implementation", Morgan Kaufmann Publishers, Inc., 1997, pp. 592 - 597.
【0008】
【発明が解決しようとする課題】
しかしながら、上述した従来の各手法では、それぞれ次のような問題がある。Schemeにおける約束(promise)は、呼び側にdelay、呼ばれ側にforceをつけることによって、引数の評価を先行評価から遅延評価に切り替える方式である。このため、呼び側、呼ばれ側双方のソースコードの変更を伴い煩雑である。また当然ながら、遅延評価に切り替えると、並列実行により引数評価の遅延時間を隠し実質的に遅延を低減できるという先行評価の利点は失われる。
【0009】
また、プログラミングにおいて評価条件を呼び側のソースコードへ挿入する手法は、本来呼ばれ側に集約されていた参照条件を多数の呼び側に分散させることである。すなわち、参照条件に基づく評価条件を、その呼ばれ側の手続きを呼び出す全ての呼び側に挿入しなくてはならない。そのため、プログラムの変更や保守を行う場合の容易さを損なう。また、呼ばれ側の詳細は必ずしも公開されているとは限らず、仮に公開されていたとしても、参照条件が呼び側から呼び出せるパブリック関数やパブリックメンバであるとは限らない。そのため、呼び側のソースコードに評価条件を挿入することが、原理上不可能な場合もあり得る。
【0010】
さらに、部分不用コード除去は、任意の不用コードを除去できる強力な最適化であるが、計算量が命令数の3から5乗と非常に大きい。したがって、Java(米国サン・マイクロシステムズ社の商標)におけるJIT(Just In Time)コンパイラのようにプログラムの実行時に動的にコンパイルを行うコンパイラに用いるには適当ではない。
【0011】
そこで、本発明は、引数の先行評価を、呼ばれ側で必要とするか否かに応じて実行する効率的なプログラムを生成することを可能とすることを目的とする。
また本発明は、プログラムのコンパイルの際に、そのような効率的なプログラムに最適化するコンパイラを提供することを目的とする。
【0012】
【課題を解決するための手段】
上記の目的を達成する本発明は、実行プログラムのソースコードを読み込み、機械語コードに変換する、次のように構成されたプログラム変換装置として実現される。すなわち、このプログラム変換装置は、ソースコードの字句解析及び構文解析を行うコード解析部と、この実行プログラムを変形する最適化部と、この最適化部により変形された実行プログラムを機械語コードに変換するコード生成部とを備える。そして、この最適化部は、コード解析部により解析された実行プログラムに対し、この実行プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出し、呼び側の手続きに記述されている引数の評価を、所定の評価条件で保護し、この引数を参照する場合に評価を行うように実行プログラムを変形することを特徴とする。
この評価条件としては、呼ばれ側の手続きが単純な条件で保護されている場合における、かかる条件または当該条件を包含する条件とすることができる。あるいはこの条件は、呼ばれ側の手続きにて前記引数が参照されるための参照条件または当該条件を包含する条件とすることができる。
【0013】
また、本発明の他のプログラム変換装置は、コード解析部と、最適化部と、コード生成部とを備え、最適化部は、コード解析部により解析された実行プログラムに対し、この実行プログラム中で引数の値渡しでの手続き呼び出しが行われる箇所を検出し、この手続き呼び出しが行われる箇所における引数評価と参照条件の評価との順序を入れ替えるように実行プログラムを変形することを特徴とする。
【0014】
本発明のさらに他のプログラム変換装置は、コード解析部と、最適化部と、コード生成部とを備え、最適化部は、実行プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出し、呼ばれ側の手続きを呼び側の手続きにインライン化する第1の変形手段と、インライン化された呼ばれ側の手続きの先頭から制御フローを遡って所定の命令列を得、呼ばれ側の手続きにて引数が参照されるための参照条件を、この命令列の前に移動すると共に、この命令列を複製して参照条件から分岐する各ルートに挿入する第2の変形手段と、参照条件から分岐する各ルートに挿入された命令列のうち、引数が参照されないルートの不用な命令列を除去する第3の変形手段とを備えることを特徴とする。
【0015】
また、上記の目的を達成する他の本発明は、コンピュータを制御して、処理対象であるプログラムの変形を行うプログラム変換方法であって、所定の記憶装置から処理対象であるプログラムを読み出し、このプログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出する第1のステップと、呼び側の手続きに記述されている引数の評価を、所定の評価条件で保護し、この引数を参照する場合に評価を行うようにプログラムを変形し、変形したプログラムを所定の記憶装置に格納する第2のステップとを含むことを特徴とする。
【0016】
さらに、本発明の他のプログラム変換方法は、所定の記憶装置から処理対象であるプログラムを読み出し、このプログラム中で引数の値渡しでの手続き呼び出しが行われる箇所を検出する第1のステップと、このプログラムの手続き呼び出しが行われる箇所における引数評価と参照条件の評価との順序を入れ替えるように、プログラムを変形し、変形したプログラムを所定の記憶装置に格納するステップとを含むことを特徴とする。
【0017】
また、本発明のさらに他のプログラム変換方法は、所定の記憶装置から処理対象であるプログラムを読み出し、このプログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出する第1のステップと、呼ばれ側の手続きを呼び側の手続きにインライン化する第2のステップと、インライン化された呼ばれ側の手続きの先頭から制御フローを遡って所定の命令列を得、呼ばれ側の手続きにて引数が参照されるための参照条件を、この命令列の前に移動すると共に、この命令列を複製して参照条件から分岐する各ルートに挿入する第3のステップと、参照条件から分岐する各ルートに挿入された命令列のうち、この引数が参照されないルートの不用な命令列を除去する第4のステップと、不用な命令列が除去されたプログラムを所定の記憶装置に格納する第5のステップを含むことを特徴とする。
【0018】
さらにまた、本発明は、コンピュータを制御して上述したプログラム変換装置としての各機能を実現するプログラム、あるいはコンピュータに上記のプログラム変換方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
【0019】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
図1は、本実施の形態によるデータ処理方法を実現するコンピュータシステムのシステム構成を示す図である。
図1を参照すると、本実施の形態におけるコンピュータシステムは、ソースプログラム(入力コード)をコンパイルするコンパイラ100と、コンパイラ100にてコンパイルされたオブジェクトプログラム(出力コード)を実行して種々の処理を行うプログラム実行部200と、メモリ300とを備える。コンパイラ100及びプログラム実行部200は、パーソナルコンピュータやワークステーションなどのコンピュータシステムにおけるプログラム制御されたCPUにて実現される。メモリ300は、コンピュータ装置のメインメモリであり、RAM等で実現される。メモリ300には、CPUを制御してコンパイラ100として動作させるためのプログラムやコンパイルの対象のプログラムが格納されると共に、コンパイラ100のコンパイル処理において、レジスタから退避される変数が一時的に格納される。なお、メモリ300に格納されるプログラムは、必要に応じて、適宜磁気ディスクその他の外部記録装置に保存されることは言うまでもない。
【0020】
図1において、コンパイラ100は、所定のプログラミング言語で記述された入力コードを入力して処理し、機械語で記述された出力コードを生成して出力する。この入力コードの入力は、コード生成装置400にて生成された入力コードを直接入力したり、コード生成装置400にて生成された入力コードを記憶した記憶装置500から入力したり、ネットワーク600上に存在するコード生成装置400や記憶装置500からネットワーク600を介して入力したりすることにより行われる。コンパイラ100により生成された出力コードは、プログラム実行部200により実行される。
【0021】
図2は、本実施の形態におけるコンパイラ100の構成を説明する図である。図2を参照すると、コンパイラ100は、入力コードの字句解析や構文解析を行うコード解析部110と、各種の最適化によるプログラムの変形を行う最適化部120と、最適化されたプログラムを出力コードに変換(生成)して出力する出力コード生成部130とを備える。
また、最適化部120の機能として、所定の手続き呼び出し部分をインライン化するインライン化実行部10と、プログラム中の引数の評価を行う部分を条件分岐(参照条件)の後ろへ移動させる引数評価移動部20と、引数評価移動部20の処理で生じた不用なコードを除去するための不用コード除去部30とを備える。
図2に示したコンパイラ100の各構成要素は、コンピュータプログラムにより制御されたCPUにて実現される仮想的なソフトウェアブロックである。CPUを制御する当該コンピュータプログラムは、磁気ディスクや光ディスク、半導体メモリ等の記録媒体に格納して配布したり、ネットワークを介して伝送したりすることにより提供される。
なお、図2に示した最適化部120の各機能は、本実施の形態における特徴的な機能に関するものである。特に図示しないが、プログラムの最適化の手段としては、実際には、本実施の形態で説明する以外の種々の手法があり、本実施の形態による手法と併用することも可能であることは言うまでもない。
【0022】
本実施の形態は、値渡しの行われる箇所である手続き呼び出しにおいて、呼び側での引数評価を適切な条件(評価条件)で保護することで、呼び側での無駄な引数評価を抑制する。ここで、評価条件は通常、呼ばれ側で引数が実際に参照されるための条件(参照条件)と同一である。すなわち、本実施の形態による最適化の本質は、引数と参照条件とに対する評価順序の入れ替えである。
一般に、呼び側での引数評価と評価後の引数を用いた手続き呼び出しとの間には任意の計算を挿入することができる。しかし、本実施の形態における最適化の主要な対象であるデバッグやログにメッセージを出力するための手続き呼び出しでは、評価後の引数を一時変数に受けずに、手続き呼び出しの実引数部に直接記述する(すなわち引数評価は手続き呼び出しの直前にある)傾向が顕著である。また、その際の呼ばれ側は(デバッグやチューニング時に機能を有効化し、実際の稼動時は無駄なオーバヘッドを避けるため無効化するなどの要求から)手続き全体が唯一の単純な条件(参照条件)で保護されている傾向がある。そのため、条件分岐(参照条件)の直前の命令列を、当該条件分岐の後ろで引数を参照する部分の前へ移動することにより、無駄な引数評価を削減する最適化が可能となる。
【0023】
引数と参照条件の評価順が逆になったことにより、起きるはずの副作用が起きなかったり、起きないはずの副作用が起きたりすることを避けるため、(参照条件から合成される)評価条件が副作用を起こす場合、引数評価は副作用を起こしてはならない。ここで、副作用とは、例外や値の逃避(escape)などである。副作用の除去、計算量の削減などの理由で評価条件を変更(単純化)することもできるが、その場合は変更後の評価条件が本来の評価条件を包含するように決める。
さらに、呼ばれ側のコードである参照条件から評価条件を合成する都合上、その呼出し点における呼ばれ側の集合は、呼び側のコンパイル時に決まっている必要がある。呼ばれ側が一意に決まる静的呼び出しやテストコードで静的束縛された動的呼び出し、C++の仮想関数のようにメソッドの実行時オーバロードを伴わない動的呼び出しは、この条件を満たす。Javaの仮想関数のようにメソッドの実行時オーバロードを伴う動的呼び出しは、実行時に呼ばれ側の集合が変わったことを検出し、コードを安全側にパッチするランタイムと併用し、呼び側のコンパイル時に既知の呼ばれ側に限り、本実施の形態による最適化を実行する。また、呼び側のコンパイル時に既知の呼ばれ側の集合が複数の要素からなるときは、テストコードを用いて一意に静的束縛した後、本実施の形態による最適化を実行する。
【0024】
図2に示した構成において、インライン化実行部10は、プログラム中の手続き呼び出しにおいて、上記の副作用や呼ばれ側の一意性等の条件を満足するかどうかを調べた上で、呼ばれ側の手続きを呼び側に埋め込み、インライン化する。インライン化自体は、従来から最適化の手法の1つとして周知の技術である(例えば、非特許文献3参照)。本実施の形態でも、従来のインライン化の手法を適用することができる。
【0025】
引数評価移動部20は、呼び側にある引数評価の部分を参照条件(評価条件)の後ろへ移動する。具体的には、まず、インライン化実行部10によりインライン化された呼ばれ側(インライン化により呼び側、呼ばれ側という区別はなくなっているが、便宜上、元の呼び側、呼ばれ側に則ってこの称呼を用いる)の手続きの先頭から逆向きに、制御フロー解析を行って制御フローを、制御が合流する基本ブロックの最初の命令まで(評価条件が副作用を起こす場合は、制御が合流する基本ブロックの最初の命令を上限として最下の副作用を起こす命令の直後の命令まで)遡る。そして、得られた命令列の前に参照条件を移動して評価条件とすると共に、当該命令列を複製して評価条件の直後の各ルートへ挿入する。これにより、プログラムの命令列において、引数の評価順と参照条件(評価条件)の評価順とが入れ替わったことになる。なお、参照条件を移動して評価条件とした際、必要があれば上述したように評価条件を単純化することができる。
【0026】
ここで、本実施の形態では、元の呼び側にあった命令列を、呼ばれ側の直前の基本ブロックほぼ1個分にわたって、呼ばれ側へ移動することとした。
図3は、制御フローを遡る範囲を説明する図である。
図3に示すように、制御の合流点を上限として複製され、参照条件(評価条件)の後ろへ移動する。
しかしながら、これは理論上複製し移動可能な上限という意味ではない。原理的には制御フロー解析によって際限なく遡り、参照条件(評価条件)の後ろへ移動することが可能である。したがって、制御の合流点を越えて制御フローを遡り、参照条件(評価条件)の後ろへ移動しても良い。
図4は、制御の合流点を越える範囲の命令列を参照条件(評価条件)の後ろへ移動した様子を示す図である。
【0027】
ただし、本実施の形態における最適化の主要な対象であるデバッグやログにメッセージを出力するための手続き呼び出しでは、評価後の引数を一時変数に受けずに、手続き呼び出しの実引数部に直接記述する(すなわち引数評価は手続き呼び出しの直前にある)傾向が顕著である。このため、合流点を越えて命令列を移動しても最適化の効果は概ね変わらないと言える。したがって、実用的には、上記のように、制御が合流する基本ブロックの最初の命令まで(もしくは当該基本ブロックの最初の命令を上限として最下の副作用を起こす命令の直後の命令まで)制御フローを遡り、参照条件(評価条件)の後ろへ移動するとすれば十分である。
なお、上記の命令列の複製は、引数を評価する命令を選択して行うのではなく、制御フローで得られた範囲の命令列全体に対して行う。これにより、個々の命令を解析するといった煩雑な作業を避けることができる。
【0028】
不用コード除去部30は、引数評価移動部20により評価条件の直後の各ルートへ移った引数評価を含む命令列のうち、不用なものを除去する。すなわち、引数評価移動部20は、単純に命令列を条件分岐の後ろへ移動し、かつ複製するのみであるので、評価条件の真偽に関わらず、各ルートに引数評価を含む命令列が挿入されている。そこで、不用コード除去部30が、評価条件の真偽を調べ、 評価条件が偽(false)となる側のルートに複製された引数評価を、不用コード除去(dead code elimination)により除去する。なお、この不用コード除去については、最適化の手法の1つとして周知の従来手法(例えば、非特許文献4参照)を適用することができる。
【0029】
次に、本実施の形態による最適化の作用について具体的に説明する。
図5は、本実施の形態による最適化の処理の全体的な流れを説明するフローチャートである。図6乃至図9は、本実施の形態の最適化によるプログラムの制御フローの変化を説明する図である。
初期動作として、コンパイラ100は、処理対象であるプログラムを入力し、これに対して字句解析や構文解析等の処理を既に行っているものとする。これらの解析の済んだプログラム(中間コード)は、メモリ300に一時的に格納されている。
図5に示すように、コンパイラ100において、制御フロー解析等の手段により、処理対象であるプログラム中の手続き呼び出しにおける呼び側と呼ばれ側とが検出される(ステップ501)。図6は、検出された呼び側及び呼ばれ側の制御フローの例を示す図である。図6において、呼び側の「手続呼出」によって呼ばれ側の手続きが呼ばれ、実行される。
【0030】
次に、コンパイラ100のインライン化実行部10が、ステップ501で検出された手続き呼び出しの呼ばれ側全体が、唯一の単純な条件(参照条件)で保護されているかを調べる(ステップ502)。図6に示した手続き呼び出しにおける呼ばれ側はこの条件を満たす。そこで、次にインライン化実行部10は、この呼ばれ側を呼び側へインライン化する(ステップ503)。インライン化の施された処理対象のプログラムは、メモリ300に保持される。
図7は、図6に示した制御フローをインライン化した様子を示す図である。この状態では、「引数評価」が「参照条件」の前に存在している。
【0031】
次に、引数評価移動部20が、メモリ300からプログラムを読み出し、インライン化された手続き(元の呼ばれ側)の先頭から逆向きに制御フローを遡り、制御が合流する基本ブロックの最初の命令まで(もしくは当該基本ブロックの最初の命令を上限として、最下の副作用命令の直後まで)の命令列を得る。そして、参照条件を当該命令列の前に移動して評価条件とすると共に、当該命令列を複製して評価条件の直後の各ルートに挿入する(ステップ504)。引数評価移動部20による変形の済んだプログラムは、メモリ300に保持される。
図8は、図7の状態から「引数評価」を条件分岐の後ろに移動した状態を示す図である。図8において、「参照条件」に代わって「評価条件」という条件分岐が置かれ、その真偽いずれのルートにも「引数評価」が挿入されている。
【0032】
最後に、不用コード除去部30が、メモリ300からプログラムを読み出し、引数評価移動部20によって評価条件の後ろの各ルートに挿入された引数評価のうち、不必要な引数評価の命令列を取り除く(ステップ505)。不必要な命令列が除去されたプログラムは、メモリ300に保持される。
図9は、図8の状態から不用な「引数評価」を除去した状態を示す図である。図9において、「引数参照」が行われないルート(「評価条件」が偽のルート)にあった「引数評価」が削除されている。
この後、最適化の施されたプログラムがオブジェクトコードに変換され、当該オブジェクトコードが図1に示したプログラム実行部200により実行される。
【0033】
以上のようにして、本実施の形態では、プログラムをコンパイルする際に、引数が呼ばれ側で参照される条件(参照条件)から導かれる条件(評価条件)を、コンパイラ100が呼び側に自動的に挿入することが実現される。これは、Schemeで設定可能な遅延評価(lazy evaluation)への切り替えとは異なり、ソースコードの書き換えという繁雑な作業を必要としない。また、評価条件を満たす場合における引数の評価は先行評価されるため、実質的な遅延時間の短縮という利点は失われない。
【0034】
また、本実施の形態では、プログラムをコンパイルする際にコンパイラ100が評価条件を呼び側に自動挿入する事が実現される。これは、プログラムの開発者が評価条件を呼び側のソースコードへ手作業で挿入する場合とは異なり、ソースコード上で参照条件は呼ばれ側に集約されたままであるため、プログラムの変更や保守を行う場合の容易さを損なうことはない。また、評価条件の呼び側への挿入の際に実装の詳細を知る必要もなければ、アクセス権の制限を受けることもない。
【0035】
さらに、本実施の形態では、引数の評価と参照条件(評価条件)の評価の順序を入れ替えた後、不用コードの除去を行うが、その計算量は基本ブロック数(評価条件が副作用を起こす場合は命令数)の1乗に過ぎない。したがって、命令数の3から5乗と非常に大きい計算量を要する従来の部分不用コード除去と異なり、プログラムの実行時に動的にコンパイルを行うコンパイラに用いるのに好適である。
【0036】
【発明の効果】
以上説明したように、本発明によれば、引数の先行評価を、呼ばれ側で必要とするか否かに応じて行う効率的なプログラムを生成することができる。
また、本発明によれば、プログラムのコンパイルの際に、そのような効率的なプログラムに最適化するコンパイラを提供することができる。
【図面の簡単な説明】
【図1】 本実施の形態によるデータ処理方法を実現するコンピュータシステムのシステム構成を示す図である。
【図2】 本実施の形態におけるコンパイラの構成を説明する図である。
【図3】 本実施の形態において、制御フローを遡る範囲を説明する図である。
【図4】 本実施の形態において制御の合流点を越える範囲の命令列を参照条件(評価条件)の後ろへ移動した様子を示す図である。
【図5】 本実施の形態による最適化の処理の全体的な流れを説明するフローチャートである。
【図6】 本実施の形態の最適化によるプログラムの制御フローの変化を説明する図であり、検出された呼び側及び呼ばれ側の制御フローの例を示す図である。
【図7】 本実施の形態の最適化によるプログラムの制御フローの変化を説明する図であり、図6に示した制御フローをインライン化した様子を示す図である。
【図8】 本実施の形態の最適化によるプログラムの制御フローの変化を説明する図であり、図7の状態から「引数評価」を条件分岐の後ろに移動した状態を示す図である。
【図9】 本実施の形態の最適化によるプログラムの制御フローの変化を説明する図であり、図8の状態から不用な「引数評価」を除去した状態を示す図である。
【符号の説明】
10…インライン化実行部、20…引数評価移動部、30…不用コード除去部、100…コンパイラ、110…コード解析部、120…最適化部、130…出力コード生成部、200…プログラム実行部、300…メモリ
Claims (10)
- 実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換装置において、
コンピュータのプログラム制御されたCPUにて実現され、前記ソースコードの字句解析及び構文解析を行うコード解析部と、
コンピュータのプログラム制御されたCPUにて実現され、前記コード解析部により解析された前記実行プログラムに対し、当該実行プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出し、当該呼ばれ側の手続きにおいて引数の参照が実行される条件である参照条件または当該参照条件を包含する所定の条件を評価条件とし、当該評価条件が成立する場合に当該呼び側の手続きに記述されている当該引数の評価を実行するように前記実行プログラムを変形する最適化部と、
コンピュータのプログラム制御されたCPUにて実現され、前記最適化部により変形された前記実行プログラムを前記機械語コードに変換するコード生成部と
を備えることを特徴とするプログラム変換装置。 - 実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換装置において、
コンピュータのプログラム制御されたCPUにて実現され、前記ソースコードの字句解析及び構文解析を行うコード解析部と、
コンピュータのプログラム制御されたCPUにて実現され、前記コード解析部により解析された前記実行プログラムに対し、当該実行プログラム中で引数の値渡しでの手続き呼び出しが行われる箇所を検出し、当該手続き呼び出しが行われる箇所における引数の評価と当該引数の参照が実行される条件である参照条件の評価の順序を入れ替え、当該参照条件により分岐したパスのうち引数の参照を行わないパスにおける引数評価を削除する最適化部と、
コンピュータのプログラム制御されたCPUにて実現され、前記最適化部により変形された前記実行プログラムを前記機械語コードに変換するコード生成部と
を備えることを特徴とするプログラム変換装置。 - 実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換装置において、
コンピュータのプログラム制御されたCPUにて実現され、前記ソースコードの字句解析及び構文解析を行うコード解析部と、
コンピュータのプログラム制御されたCPUにて実現され、前記コード解析部により解析された前記実行プログラムに対し、所定の変形を施す最適化部と、
コンピュータのプログラム制御されたCPUにて実現され、前記最適化部により変形された前記実行プログラムを前記機械語コードに変換するコード生成部とを備え、
前記最適化部は、
前記実行プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出し、当該呼ばれ側の手続きを前記呼び側の手続きにインライン化する第1の変形手段と、
インライン化された前記呼ばれ側の手続きの先頭から制御フローを遡って引数の評価を行う命令列を得、当該呼ばれ側の手続きにおいて引数の参照が実行される条件である参照条件を当該命令列の前に移動すると共に、当該命令列を複製して当該参照条件から分岐する各ルートに挿入する第2の変形手段と、
前記参照条件から分岐する各ルートに挿入された前記命令列のうち、前記引数が参照されないルートの不用な前記命令列を除去する第3の変形手段と
を備えることを特徴とするプログラム変換装置。 - コンピュータを制御して、処理対象であるプログラムの変形を行うプログラム変換方法であって、
コンピュータのプログラム制御されたCPUにて実現される検出手段が、所定の記憶装置から前記処理対象であるプログラムを読み出し、当該プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出する第1のステップと、
コンピュータのプログラム制御されたCPUにて実現される変形手段が、前記呼ばれ側の手続きにおいて引数の参照が実行される条件である参照条件または当該参照条件を包含する所定の条件を評価条件とし、当該評価条件が成立する場合に当該呼び側の手続きに記述されている当該引数の評価を実行するように前記プログラムを変形し、変形したプログラムを所定の記憶装置に格納する第2のステップと
を含むことを特徴とするプログラム変換方法。 - コンピュータを制御して、処理対象であるプログラムの変形を行うプログラム変換方法であって、
前記コンピュータのプログラム制御されたCPUにて実現される検出手段が、所定の記憶装置から前記処理対象であるプログラムを読み出し、当該プログラム中で引数の値渡しでの手続き呼び出しが行われる箇所を検出するステップと、
前記コンピュータのプログラム制御されたCPUにて実現される変形手段が、前記プログラムの前記手続き呼び出しが行われる箇所における引数の評価と当該引数の参照が実行される条件である参照条件の評価の順序を入れ替えるステップと、
前記変形手段が前記参照条件により分岐したパスのうち引数の参照を行わないパスにおける引数評価を削除し、かかる変形がなされたプログラムを所定の記憶装置に格納するステップと
を含むことを特徴とするプログラム変換方法。 - コンピュータを制御して、処理対象であるプログラムの変形を行うプログラム変換方法であって、
前記コンピュータのプログラム制御されたCPUにて実現される検出手段が、所定の記憶装置から前記処理対象であるプログラムを読み出し、当該プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出する第1のステップと、
前記コンピュータのプログラム制御されたCPUにて実現されるインライン化手段が、前記呼ばれ側の手続きを前記呼び側の手続きにインライン化する第2のステップと、
前記コンピュータのプログラム制御されたCPUにて実現される変形手段が、インライン化された前記呼ばれ側の手続きの先頭から制御フローを遡って引数の評価を行う命令列を得、当該呼ばれ側の手続きにおいて引数の参照が実行される条件である参照条件を当該命令列の前に移動すると共に、当該命令列を複製して当該参照条件から分岐する各ルートに挿入する第3のステップと、
前記変形手段が、前記参照条件から分岐する各ルートに挿入された前記命令列のうち、前記引数が参照されないルートの不用な前記命令列を除去する第4のステップと、
前記不用な命令列が除去されたプログラムを所定の記憶装置に格納する第5のステップと
を含むことを特徴とするプログラム変換方法。 - コンピュータを制御して、実行プログラムのソースコードを機械語コードに変換するプログラムであって、
所定の記憶装置から処理対象である前記実行プログラムのソースコードを読み出し、当該実行プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出する第1の処理を前記コンピュータのプログラム制御されたCPUにて実現される検出手段に実行させ、
前記呼ばれ側の手続きにおいて引数の参照が実行される条件である参照条件または当該参照条件を包含する所定の条件を評価条件とし、当該評価条件が成立する場合に当該呼び側の手続きに記述されている当該引数の評価を実行するように前記実行プログラムを変形する第2の処理を前記コンピュータのプログラム制御されたCPUにて実現される変形手段に実行させ、
変形された前記実行プログラムを前記機械語コードに変換し、所定の記憶装置に格納する第3の処理を前記変形手段に実行させることを特徴とするプログラム。 - コンピュータを制御して、実行プログラムのソースコードを機械語コードに変換するプログラムであって、
所定の記憶装置から処理対象である前記実行プログラムのソースコードを読み出し、当該実行プログラム中で引数の値渡しでの手続き呼び出しが行われる箇所を検出する処理を前記コンピュータのプログラム制御されたCPUにて実現される検出手段に実行させ、
前記手続き呼び出しが行われる箇所における引数の評価と当該引数の参照が実行される条件である参照条件の評価の順序を入れ替える処理を前記コンピュータのプログラム制御されたCPUにて実現される変形手段に実行させ、
前記参照条件により分岐したパスのうち引数の参照を行わないパスにおける引数評価を削除し、かかる変形がなされた前記実行プログラムを変形する処理を前記変形手段に実行させ、
変形された前記実行プログラムを前記機械語コードに変換し、所定の記憶装置に格納する処理を前記変形手段に実行させることを特徴とするプログラム。 - コンピュータを制御して、実行プログラムのソースコードを機械語コードに変換するプログラムであって、
所定の記憶装置から処理対象である前記実行プログラムのソースコードを読み出し、当該実行プログラム中の手続き呼び出しにおける呼び側の手続きと呼ばれ側の手続きとを検出する第1の処理を前記コンピュータのプログラム制御されたCPUにて実現される検出手段に実行させ、
前記呼ばれ側の手続きを前記呼び側の手続きにインライン化する第2処理を前記コンピュータのプログラム制御されたCPUにて実現されるインライン化手段に実行させ、
インライン化された前記呼ばれ側の手続きの先頭から制御フローを遡って引数の評価を行う命令列を得、当該呼ばれ側の手続きにおいて引数の参照が実行される条件である参照条件を当該命令列の前に移動すると共に、当該命令列を複製して当該参照条件から分岐する各ルートに挿入する第3の処理を前記コンピュータのプログラム制御されたCPUにて実現される変形手段に実行させ、
前記参照条件から分岐する各ルートに挿入された前記命令列のうち、前記引数が参照されないルートの不用な前記命令列を除去する第4の処理を前記コンピュータのプログラム制御されたCPUにて実現される変形手段に実行させ、
前記不用な命令列が除去された前記実行プログラムを前記機械語コードに変換し、所定の記憶装置に格納する第5の処理を前記コンピュータのプログラム制御されたCPUにて実現される検出手段に実行させることを特徴とするプログラム。 - 前記第3の処理では、前記参照条件を、当該参照条件を包含する他の条件に置き換える処理を前記変形手段にさらに実行させることを特徴とする請求項9に記載のプログラム。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002377992A JP3956131B2 (ja) | 2002-12-26 | 2002-12-26 | プログラム変換装置、プログラム変換方法及びプログラム |
CNB2003101202178A CN1243306C (zh) | 2002-12-26 | 2003-12-09 | 程序变换装置和程序变换方法 |
US10/739,730 US7363621B2 (en) | 2002-12-26 | 2003-12-18 | Program converting apparatus, method, and program |
US11/945,087 US8225299B2 (en) | 2002-12-26 | 2007-11-26 | Program converting apparatus, method, and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002377992A JP3956131B2 (ja) | 2002-12-26 | 2002-12-26 | プログラム変換装置、プログラム変換方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004206625A JP2004206625A (ja) | 2004-07-22 |
JP3956131B2 true JP3956131B2 (ja) | 2007-08-08 |
Family
ID=32814996
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002377992A Expired - Fee Related JP3956131B2 (ja) | 2002-12-26 | 2002-12-26 | プログラム変換装置、プログラム変換方法及びプログラム |
Country Status (3)
Country | Link |
---|---|
US (2) | US7363621B2 (ja) |
JP (1) | JP3956131B2 (ja) |
CN (1) | CN1243306C (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2443049A1 (en) * | 2003-09-26 | 2005-03-26 | Ali I. Sheikh | Method for computer program optimization in a dynamic compiling environment |
US20050198624A1 (en) * | 2004-03-02 | 2005-09-08 | Chipman Timothy W. | Method and system for program transformation |
JP4638250B2 (ja) * | 2005-02-03 | 2011-02-23 | 三菱電機株式会社 | プログラムコード生成支援装置及び方法並びにプログラムコード生成支援方法のプログラム |
KR100902461B1 (ko) | 2005-02-03 | 2009-06-11 | 미쓰비시덴키 가부시키가이샤 | 프로그램 코드 생성 지원 장치 및 방법, 프로그램실행장치와 방법, 프로그램 코드 압축 처리 장치 및 방법과그들의 프로그램 |
US8448158B2 (en) | 2005-02-03 | 2013-05-21 | Mitsubishi Electric Corporation | Program code generation support device and method, program execution device and method, and program code compression processing device and method and program thereof |
US7797690B2 (en) * | 2005-03-15 | 2010-09-14 | International Business Machines Corporation | System, method and program product to optimize code during run time |
US8341613B2 (en) * | 2007-12-04 | 2012-12-25 | International Business Machines Corporation | Reducing stack space consumption via head-call optimization |
US8261240B2 (en) * | 2008-01-15 | 2012-09-04 | Microsoft Corporation | Debugging lazily evaluated program components |
US9043774B2 (en) * | 2008-02-12 | 2015-05-26 | William G. Bently | Systems and methods for information flow analysis |
US8302078B2 (en) * | 2008-03-10 | 2012-10-30 | The Boeing Company | Lazy evaluation of geometric definitions of objects within procedural programming environments |
JP2011520805A (ja) * | 2008-05-09 | 2011-07-21 | キューエルティー プラグ デリバリー,インク. | 緑内障および高眼圧症治療のための活性剤の持続送達 |
US9489366B2 (en) * | 2010-02-19 | 2016-11-08 | Microsoft Technology Licensing, Llc | Interactive synchronization of web data and spreadsheets |
US8683451B1 (en) | 2010-04-30 | 2014-03-25 | The United States Of America As Represented By The Secretary Of The Navy | System and method for translating software code |
US8966463B2 (en) * | 2011-11-29 | 2015-02-24 | Microsoft Technology Licensing, Llc | Eliminating redundant function calls |
JP5936118B2 (ja) * | 2012-04-16 | 2016-06-15 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コード変換方法、プログラム及びシステム |
JP2013235386A (ja) * | 2012-05-08 | 2013-11-21 | Internatl Business Mach Corp <Ibm> | 最適化装置、最適化方法、及び最適化プログラム |
JP6418696B2 (ja) * | 2015-07-23 | 2018-11-07 | 国立大学法人東京工業大学 | 命令セットシミュレータおよびそのシミュレータ生成方法 |
US10558458B2 (en) * | 2016-06-06 | 2020-02-11 | Microsoft Technology Licensing, Llc | Query optimizer for CPU utilization and code refactoring |
US11144840B2 (en) | 2018-07-26 | 2021-10-12 | International Business Machines Corporation | Completing decision logic to avoid a side effect |
CN110488738B (zh) * | 2019-07-23 | 2021-04-09 | 中车青岛四方机车车辆股份有限公司 | 一种代码生成方法及装置 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63163636A (ja) | 1986-12-26 | 1988-07-07 | Hitachi Ltd | 並列処理実行方式 |
US5701489A (en) * | 1995-06-06 | 1997-12-23 | International Business Machines Corporation | System for partial in-line expansion of procedure calls during program compilation |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
JPH1040106A (ja) | 1996-07-19 | 1998-02-13 | Nec Corp | 関数型言語処理装置 |
JP3284956B2 (ja) * | 1998-01-26 | 2002-05-27 | 日本電気株式会社 | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 |
US6151706A (en) * | 1998-06-16 | 2000-11-21 | Silicon Graphics, Inc. | Method, system, and computer program product for extending sparse partial redundancy elimination to support speculative code motion within an optimizing compiler |
US6481007B1 (en) * | 1999-06-03 | 2002-11-12 | Oracle Corporation | Optimizing parameter passing |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
JP3640081B2 (ja) * | 1999-12-27 | 2005-04-20 | 日本電気株式会社 | Mpiプログラムのコンパイルにおける最適化方法 |
US7577834B1 (en) * | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
US6810519B1 (en) * | 2000-09-29 | 2004-10-26 | International Business Machines Corporation | Achieving tight binding for dynamically loaded software modules via intermodule copying |
US6993754B2 (en) * | 2001-11-13 | 2006-01-31 | Hewlett-Packard Development Company, L.P. | Annotations to executable images for improved dynamic optimization functions |
US7086044B2 (en) * | 2001-03-22 | 2006-08-01 | International Business Machines Corporation | Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization |
US6817014B2 (en) * | 2001-04-11 | 2004-11-09 | Hewlett-Packard Development Company, L.P. | Analysis of executable program code using compiler-generated function entry points and endpoints with other sources of function entry points and endpoints |
US7065757B2 (en) * | 2001-09-28 | 2006-06-20 | Hewlett-Packard Development Company, L.P. | Efficient compilation of family of related functions |
JP3813087B2 (ja) * | 2001-12-20 | 2006-08-23 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム変換方法、コンピュータ装置及びプログラム |
US20030237079A1 (en) * | 2002-06-17 | 2003-12-25 | Aneesh Aggarwal | System and method for identifying related fields |
JP3900485B2 (ja) * | 2002-07-29 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 |
US7356813B2 (en) * | 2002-09-26 | 2008-04-08 | Hewlett-Packard Development Company, L.P. | System and method for optimizing a program |
US7299458B2 (en) * | 2002-10-31 | 2007-11-20 | Src Computers, Inc. | System and method for converting control flow graph representations to control-dataflow graph representations |
US6983456B2 (en) * | 2002-10-31 | 2006-01-03 | Src Computers, Inc. | Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms |
US7996825B2 (en) * | 2003-10-31 | 2011-08-09 | Hewlett-Packard Development Company, L.P. | Cross-file inlining by using summaries and global worklist |
US7302679B2 (en) * | 2003-10-31 | 2007-11-27 | Hewlett-Packard Development Company, L.P. | Scalable cross-file inlining through locality-based transformation ordering |
US20050097533A1 (en) * | 2003-10-31 | 2005-05-05 | Chakrabarti Dhruva R. | Run-time performance with call site inline specialization |
US7340732B2 (en) * | 2003-11-26 | 2008-03-04 | Sun Microsystems, Inc. | Updating profile frequency for procedure inlining |
-
2002
- 2002-12-26 JP JP2002377992A patent/JP3956131B2/ja not_active Expired - Fee Related
-
2003
- 2003-12-09 CN CNB2003101202178A patent/CN1243306C/zh not_active Expired - Fee Related
- 2003-12-18 US US10/739,730 patent/US7363621B2/en not_active Expired - Fee Related
-
2007
- 2007-11-26 US US11/945,087 patent/US8225299B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004206625A (ja) | 2004-07-22 |
US20040210882A1 (en) | 2004-10-21 |
US20080098372A1 (en) | 2008-04-24 |
US8225299B2 (en) | 2012-07-17 |
CN1512334A (zh) | 2004-07-14 |
US7363621B2 (en) | 2008-04-22 |
CN1243306C (zh) | 2006-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3956131B2 (ja) | プログラム変換装置、プログラム変換方法及びプログラム | |
US6292939B1 (en) | Method of reducing unnecessary barrier instructions | |
US6314560B1 (en) | Method and apparatus for a translation system that aggressively optimizes and preserves full synchronous exception state | |
US7873948B2 (en) | Method and system for split-compiling a hybrid language program | |
EP0646864B1 (en) | Optimising compiler | |
JPH07129412A (ja) | コンパイル方法及び装置 | |
JPH05257709A (ja) | 並列化判別方法およびそれを用いた並列化支援方法 | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
US7624381B1 (en) | Portable detection of start and completion of object construction | |
US20060107258A1 (en) | Program, program code optimization method, program code compile method, program code, and information processing system | |
Sathyanathan et al. | Incremental whole program optimization and compilation | |
US20080307177A1 (en) | Program conversion device | |
US6983459B1 (en) | Incorporating register pressure into an inlining compiler | |
Karkowski et al. | Overcoming the limitations of the traditional loop parallelization | |
US20050125783A1 (en) | Program optimization with intermediate code | |
WO2022054206A1 (ja) | 難読化装置、難読化方法および難読化プログラム | |
US8104029B2 (en) | Method for computation-communication overlap in MPI applications | |
GB2525435A (en) | Augmenting profile data with information gathered from a JIT complier | |
KR20130077673A (ko) | 메소드 특수화를 이용한 확장된 널 포인터 검사 제거 방법 | |
JP3956113B2 (ja) | データ処理装置及びプログラム | |
JP5016288B2 (ja) | 最適化処理方法、及びその言語処理系 | |
JPH11212807A (ja) | プログラム実行方法 | |
JP3424596B2 (ja) | シンボル参照情報のキャッシュ方法ならびに装置 | |
JP2017151903A (ja) | コンパイル装置、コンパイル方法およびコンパイルプログラム | |
Ren et al. | Detect Stack Overflow Bugs in Rust via Improved Fuzzing Technique. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060801 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061031 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20061212 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070308 |
|
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: 20070410 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20070412 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070424 |
|
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: 20110518 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |