JP3650649B2 - 最適化装置 - Google Patents

最適化装置 Download PDF

Info

Publication number
JP3650649B2
JP3650649B2 JP15026195A JP15026195A JP3650649B2 JP 3650649 B2 JP3650649 B2 JP 3650649B2 JP 15026195 A JP15026195 A JP 15026195A JP 15026195 A JP15026195 A JP 15026195A JP 3650649 B2 JP3650649 B2 JP 3650649B2
Authority
JP
Japan
Prior art keywords
constant
variable
expression
rewriting
constant holding
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
JP15026195A
Other languages
English (en)
Other versions
JPH096627A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP15026195A priority Critical patent/JP3650649B2/ja
Priority to US08/657,489 priority patent/US5842021A/en
Priority to TW085106680A priority patent/TW434512B/zh
Priority to DE69620057T priority patent/DE69620057T2/de
Priority to EP96304374A priority patent/EP0749067B1/en
Priority to KR1019960021648A priority patent/KR100215502B1/ko
Priority to CN96108810A priority patent/CN1122216C/zh
Publication of JPH096627A publication Critical patent/JPH096627A/ja
Application granted granted Critical
Publication of JP3650649B2 publication Critical patent/JP3650649B2/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
    • 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

Description

【0001】
【産業上の利用分野】
本発明は、高級言語で書かれたソースプログラムを機械語プログラムに翻訳するコンパイラに備えられ、高効率の機械語プログラムを生成できるように、ソースプログラムあるいは中間言語プログラムを最適化する最適化装置に関する。
【0002】
【従来の技術】
近年高級言語を用いてソースプログラムを記述することで、機械語プログラムの開発効率を向上させることが盛んに行われている。高級言語を用いて記述されたソースプログラムはコンパイラによって機械語プログラムに翻訳される。このコンパイラは最適化装置を備えており、プログラミング言語で記述されたプログラムはこの最適化装置によってターゲットマシンのMPU上で効率良く実行できるように書き換えられる
一方、機械語プログラムは、より高効率なものが求められるので、上記の最適化装置は、最終的に作成される機械語プログラムの総実行時間をより短く、総プログラムサイズをより小さくするためにも、プログラムに対して様々な書き換えを行う(尚、最終的に作成される機械語プログラムの実行時間、あるいは、機械語プログラムのメモリサイズはコストと総称される。)。
【0003】
最適化装置によって行われる処理のうち、プログラムの書き換えによって機械語プログラムの実行時間、メモリサイズの向上を図る処理の一つに定数の伝播処理及び畳み込み処理がある。これらの処理を交互に繰り返せば、最適化装置はプログラムの中の式の数を大きく減らすことができる。この様子を図13(a)〜(f)の説明図を参照しながら説明する。
【0004】
図13(a)は、中間言語状態のプログラムを示している。本図において左端に付された記号s1、s2、s3・・・で、プログラム中の各位置を指示している。本図において”a+x”、”20000+a”のように、定数または変数である被演算子、および演算子から構成されるプログラムのコードは、演算式と称される。また”a”、”20000”のように定数または変数のみからなる式も演算式とする。
【0005】
また、図13(b)中の”a1=a+x”のように、等号の左辺に変数、右辺に演算式を持つプログラムのコード、あるいは、”a=b”のように、右辺が変数または定数である一連のコードは代入式と呼ばれる。更に、図13(b)の位置s4にある全ての被演算子が定数である代入式”20000+10000”は、特に定数式と呼ばれる。
【0006】
加えて、代入式により、等号の左辺に記述される変数に、右辺の値を代入することを変数の定義という。演算式の被演算子として変数を用いることを変数の使用という。また、”a=b”のように、変数が代入式の右辺に現れることも使用という。
本図13(a)において、位置s1の代入式では、変数aに定数10000を代入している。このように、定数が代入される変数は定数保持変数と称される。この変数aからは4本の矢印が伸び、それらの矢先にも変数aがあるが、これは変数aが被演算子として使用されている演算式を指示している。最適化装置は、定数保持変数を全て検出し、更にその定数保持変数が被演算子として使用されている演算式を検出する。検出後、最適化装置は、これらの演算式において被演算子として使用されている定数保持変数をその保持値に書き換える。この書き換えによって、図13(a)のプログラム中の各演算式は、定数保持変数aを被演算子とした演算式からその保持値”10000”を被演算子にした演算式に書き換えられる。
【0007】
この書き換えの結果を図13(b)に示す。尚、本図において、変数x、yが書き換えられずに残っているが、これは、変数x、yが定数保持変数ではない変数、例えば、関数の戻り値を保持する変数だからである。
またこのような書き換えを行えば、位置s1の代入式”a=10000”は冗長になることがわかる。最適化装置は、この代入式を冗長な代入式として削除し、式のコードサイズを低減する。以上の被演算子の書き換え処理と、この書き換え処理によって冗長となった代入式を削除する処理とが定数の伝播と称される。
【0008】
上記の書き換えによって位置s4の代入式は、『b=20000+10000』になり、代入式『b=30000』と等価になったことがわかる。最適化装置は、プログラム中に『b=20000+10000』のような定数式が表れると、それと等価の代入式『b=30000』に書き換える。このように、定数式を等価な定数に書き換えることを定数の畳み込みという。最適化装置によって定数の畳み込みが行われると、プログラム中に代入式『b=30000』が表れ、この位置s4の代入式の変数bが新たに定数保持変数になる。
【0009】
伝播及び畳み込みによって新たな定数保持変数が表れると、定数保持変数a同様、最適化装置は定数保持変数bが被演算子になっている演算式を探し出す。この変数bからは3本の矢印が伸び、その矢先にも変数bがあるが、これは変数bが被演算子として使用されている演算式を指示している。最適化装置は位置s9、s10、s11の演算式を探し出し、これらの演算式において被演算子になっている定数保持変数bを、その保持値”30000”に書き換える。この書き換えによって位置s9、s10、s11の演算式は図13(d)に示すように、『u=10000+30000』、『z=30000+45000』『v=30000+z』と書き換えられる。この書き換え後、最適化装置は定数の畳み込みを行い、位置s9、s10の代入式を『u=40000』、『z=75000』に書き換える。この書き換えによって変数u、zが定数保持変数になるので、これらの変数についての伝播、畳み込みを最適化装置は更に繰り返す。以上のように伝播、畳み込みを繰り返すと、図13(e)に示すように定数保持変数uについて値の伝播が行われ、位置s4、s9、s10の代入式が削除されて、図13(f)に示すように、プログラムは至って簡素になる。
【0010】
以上のように定数の伝播および定数の畳み込みが行われた後、最適化装置は、資源割付処理を行い、プログラム中に残った変数をレジスタあるいはメモリに割り付ける。この資源割付を行うにあたって、最適化装置は、生存区間が重なり合う変数同士をそれぞれ、異なるレジスタに割り付ける。何故なら、生存区間とは変数が代入されてから、最後に使用されるまでのプログラム上の区間のことであり、これが重複し合うもの同士を同一のレジスタに割り付けると、レジスタの保持値の退避−復元処理が機械語プログラム中に多数必要となるからである。尚、ターゲットマシンのレジスタが少数であり、生存区間が重複し合う変数が多い場合、最適化装置は、それらの変数の何れかをメモリに割り付ける。このように、割り付け処理が行われた後、コンパイラは、この割り付け結果に基づいてコード生成を行い、機械語プログラムを生成する。
【0011】
このように、定数の伝播処理、畳み込み処理を行い、定数保持変数を削除してから資源割付処理を行えば、その削除分だけ生存区間の重複数が低減するので、レジスタを有効に活用することができる。
【0012】
【発明が解決しようとする課題】
しかしながら上記従来技術では、定数の伝播および定数の畳み込みによって代入式の被演算子がその保持値に書き換えられることで、バイト長が長い即値データをオペランドとした機械語コードが生成されてしまい、結果として機械語プログラムの実行時間が長く、メモリサイズが大きくなってしまうことが有り得るといった問題点があった。
【0013】
定数の伝播および定数の畳み込みによって図13(d)のように書き換えられたプログラム中の、変数a1、a2がそれぞれ、レジスタD1、D2に割り付けられ、また、その結果、図14に示す機械語コードが生成されたとする。
図14中の機械語コード『add #10000,D1』、『add #10000,D2』の中の記号#が付された数値『#10000』は2バイト長の即値であり、これらの機械語コードは2バイト長の即値が組み込まれたため、図12に示すレジスタを被演算子にした機械語命令に比べれば、機械語プログラムの実行時間が長く、メモリサイズが大きくなっていることがわかる。
【0014】
尚即値が組み込まれることを回避するには、変数aの伝播を行わないことも考えられるが、この場合、『b=20000+a』が、『b=30000』に畳み込めず、代入式『z=b+45000』、『v=b+z』に、変数bの保持値”30000”を伝播することができなくなってしまう。変数bの伝播が行えなければ、変数z、uをプログラムから削除することは不可能となり、プログラムの簡素化は望めなくなる。
【0015】
本発明は、上記問題点に鑑み、定数の伝播、定数の畳み込みを有効に行いつつも、定数の伝播に伴うコスト増加を防止することができる最適化装置を提供することを目的とする。
【0016】
【課題を解決するための手段】
上記目的を達成するために、請求項1の最適化装置は、
プログラム言語で書かれたプログラムを機械語プログラムに翻訳するコンパイラに備えられ、プログラム言語で書かれたプログラムの最適化を行って最適化後のプログラムを出力する最適化装置であって、
プログラム中の定数が代入される変数である各定数保持変数について、その定数保持変数に定数を代入している式と、その定数保持変数を被演算子にしている式とを対応づけて定数保持変数の関連式集合として管理する管理手段と、
関連式集合中の定数保持変数を被演算子としている式のうち他の被演算子が全て定数である式、及び、定数保持変数を被演算子とした単項演算である式を、定数保持変数が保持する定数を被演算子とした式に書き換える第1の書換手段と、第1の書換手段による書き換えの後、定数に書き換えられなかった定数保持変数を、その保持する定数即値データに置き換えて機械語演算の被演算子にした場合に、その定数保持変数の関連式集合の内、定数保持変数を被演算子としている式から生ずる機械語命令列の実行サイクルおよび/又はコードサイズを、その定数のバイト長に基づいて推定する第1の推定手段と、
第1の書換手段による書き換えの後、定数に書き換えられなかった定数保持変数が保持する定数を格納したレジスタを機械語演算の被演算子にした場合に、その定数保持変数の関連式集合の内、定数保持変数に定数を代入している式及び定数保持変数を被演算子としている式から生ずる機械語命令列の実行サイクルおよび/又はコードサイズを推定する第2の推定手段と、
第1の推定手段の推定結果と第2の推定手段の推定結果とを各関連式集合毎に比較する比較手段と、
比較手段による比較の結果、第1の推定手段の推定結果が第2の推定手段の推定結果以下の関連式集合はその中で被演算子になっている定数保持変数を全てその定数に書き換える第2の書換手段と、
定数保持変数を被演算子として用いる式が全て定数保持変数が保持する定数値を被演算子として用いる式に書き換えられた場合に、当該定数保持変数に定数を代入している式をプログラムから削除する第3の書換手段
を備えることを特徴としている。
【0017】
請求項2の最適化装置は更に、
第1及び第2の書換手段による書き換えによって全ての被演算子が定数になった式をそれらの被演算子による演算結果を代入する式に書き換える第4の書換手段と、
第4の書換手段による書き換えによって生じた式で演算結果が代入されることになる新たな定数保持変数と、その定数保持変数に定数を代入している式と、その定数保持変数を被演算子にしている全ての式とを各定数保持変数の関連式集合として管理手段に管理させる制御手段と、
管理手段に新たに管理された関連式集合に対して、第1の書換手段を起動する起動手段と
を備えることを特徴としている。
【0018】
請求項3の最適化装置は更に、
第2の書換手段による書き換え及び削除後、各変数間の生存区間の重なり具合や各変数の使用頻度に基づいて、プログラム中の各変数をレジスタ又はメモリに割り付ける資源割付手段と、
資源割付手段によってメモリに割り付けられた変数のうち、定数保持変数であるものを判定し、判定された定数保持変数の関連式集合において被演算子になっている定数保持変数を全てその定数に書き換える第5の書換手段と、
を備えることを特徴としている。
【0019】
請求項4の最適化装置は、
複数個の機械語命令と、各機械語命令の実行サイクルおよび/又はコードサイズを示すコストとを対応づけて記憶するコスト記憶手段を備え、
第1の推定手段は、
第1の書換手段による書き換え後、関連式集合において定数保持変数を被演算子にしている各式を、定数保持変数の保持する定数を表す即値データを被演算子とした機械語命令に置き換える第1の置き換え手段と、
置き換えられた各機械語命令に対応するコストをコスト記憶手段から読み出し、読み出したコストを集計し、集計結果を推定結果とする第1の集計手段
を備え
第2の推定手段は、
第1の書換手段による書き換え後、関連式集合において定数保持変数に定数を代入する式及び定数保持変数を被演算子にしている各式を、その定数を格納したレジスタを被演算子とした機械語命令に置き換える第2の置き換え手段と、
置き換えられた各機械語命令に対応するコストをコスト記憶手段から読み出し、読み出したコストを集計し、集計結果を推定結果とする第2の集計手段
を備えることを特徴としている。
【0020】
【作用】
上記請求項1の最適化装置によれば、
管理手段は、プログラム中の定数が代入される変数である各定数保持変数について、その定数保持変数に定数を代入している式と、その定数保持変数を被演算子にしている式とを対応づけて定数保持変数の関連式集合として管理している。関連式集合中の定数保持変数を被演算子としている式のうち他の被演算子が全て定数である式、及び、定数保持変数を被演算子とした単項演算である式は第1の書換手段によって定数保持変数が保持する定数を被演算子とした式に書き換えられる。
【0021】
第1の書換手段による書き換えの後、定数に書き換えられなかった定数保持変数の関連式集合の内、定数保持変数を被演算子としている式から生ずる機械語命令列の実行サイクルおよび/又はコードサイズが第1の推定手段によって推定される。
当該機械語命令列は、定数保持変数が保持する定数を表す即値データが機械語演算の被演算子になるものである。例えば、関連式集合中のその定数保持変数を被演算子にしている式からは、一方の被演算子がレジスタあるいはメモリであり他方の被演算子が即値である機械語演算の機械語命令が生じる。この機械語命令の実行サイクルおよび/又はコードサイズを、第1の推定手段は関連式集合単位でその定数のバイト長に基づいて推定する。
【0022】
一方、第1の書換手段による書き換えの後、定数に書き換えられなかった定数保持変数の関連式集合の内、定数保持変数に定数を代入している式、及び、定数保持変数を被演算子としている式から生ずる機械語命令列の実行サイクルおよび/又はコードサイズが第2の推定手段によって推定される。当該機械語命令列は、定数保持変数が保持する定数を格納したレジスタを機械語演算の被演算子にしたものである。例えば、関連式集合中の定数保持変数に定数を代入している式からはレジスタあるいはメモリへの定数即値の代入といった機械語命令が生じる。また、関連式集合中のその定数保持変数を被演算子にしている式からは、一方の被演算子がレジスタあるいはメモリであり、他方の被演算子が定数を格納したレジスタである機械語命令が生じる。これらの機械語命令の実行サイクルおよび/又はコードサイズを第2の推定手段は関連式集合単位で、その定数のバイト長に基づいて推定する。
【0023】
第1の推定手段の推定結果と第2の推定手段の推定結果とが比較手段によって各関連式集合毎に比較され、比較手段による比較の結果、第1の推定手段の推定結果が第2の推定手段の推定結果以下の関連式集合は、第2の書換手段によってその中で被演算子になっている定数保持変数が全てその定数に書き換えられる。このように被演算子になっている定数保持変数が全て定数に書き換えられると、その定数保持変数に全ての定数を代入する式が冗長となるので、第3の書換手段によって定数保持変数に定数を代入している式がプログラムから削除される。
【0024】
以上のように、一方の被演算子が定数保持変数である演算式に対しての定数の伝播は第1の推定手段による実行サイクル及びメモリサイズの推定結果が第2の推定手段による推定結果以下である場合にのみ行われるので、定数の伝播に伴うコスト増加を防止することができる。
請求項2の最適化装置によれば、
第1及び第2の書換手段による書き換えによって全ての被演算子が定数になった式が第4の書換手段によってそれらの被演算子による演算結果を代入する式に書き換えられる。全ての被演算子が定数になった式とは、例えば、『d=100+200』、『s=30+10*4』等のように、等号の右辺側に変数が無い式であり、被演算子による演算結果とは、例えば、『100+200』なら『300』、『30+10*4』なら『70』のように、定数式と等価である式である。第1の書換手段による書き換えによって、関連式集合において他の被演算子が全て定数である式、及び、定数保持変数を被演算子とした単項演算である式は畳み込める状態になっている。この式が畳み込まれると、この式で代入されている変数が定数保持変数になり、この定数保持変数に対して定数の伝播を行うことで、プログラムの簡素化を従来技術並みに行うことができる。
【0025】
第4の書換手段による書き換えが行われると、その書き換えによって生じた式で演算結果が代入されることになる新たな定数保持変数と、その定数保持変数に定数を代入している式と、その定数保持変数を被演算子にしている全ての式とが制御手段によって各定数保持変数の関連式集合として管理手段に管理させられる。更に管理手段に新たに管理された関連式集合に対して、第1の書換手段が起動される。第1の書換手段が起動されると、第1の、第2の推定手段が起動され、第2の書換手段が起動されるので、その新たな定数保持変数の関連式集合についても、実行サイクルおよび/又はコードサイズの推定と、この推定結果に基づいた関連式集合中の各式の書き換えが行われる。
【0026】
請求項3の最適化装置によれば、第2の書換手段による書き換え及び削除が全て行われた後、各変数間の生存区間の重なり具合や各変数の使用頻度に基づいて、資源割付手段によって、プログラム中の各変数がレジスタ又はメモリに割り付けられる。資源割付手段によってメモリに割り付けられた変数のうち、定数保持変数であるものが判定され、判定された定数保持変数の関連式集合において被演算子になっている定数保持変数が第5の書換手段によって全てその定数に書き換えられ、定数保持変数を被演算子として用いる式が全て定数保持変数が保持する定数値を被演算子として用いる式に書き換えられた場合に第3の書換手段によってその定数保持変数に定数を代入している式が削除される。
【0027】
請求項4の最適化装置によれば、コスト記憶手段には、複数個の機械語命令と、各機械語命令の実行サイクルおよび/又はコードサイズを示すコストとが対応づけて記憶されている。
第1の書換手段による書き換えの後、関連式集合において定数保持変数を被演算子にしている各式は、第1の置き換え手段によって、定数保持変数を、その保持する定数即値データに置き換えて被演算子とした機械語命令に置き換えられる。置き換えられた各機械語命令に対応するコストがコスト記憶手段から読み出され、第1の集計手段によって、読み出されたコストが集計され、集計結果が推定結果とされる。
【0028】
また第1の書換手段による書き換えの後、関連式集合において定数保持変数に定数を代入する式及び定数保持変数を被演算子にしている各式が第2の置き換え手段によって、その定数を格納したレジスタを被演算子とした機械語命令に置き換えられる。置き換えられた各機械語命令に対応するコストがコスト記憶手段から読み出され、読み出されたコストが集計され、第2の集計手段によって集計結果が推定結果とされる。
【0029】
【実施例】
以下、本発明の最適化装置の一実施例を図面を用いて説明する。この最適化装置はC言語などの高級言語のコンパイラに備えられ、コンパイラが、ソースプログラムの字句解析、構文解析および意味解析をおこなった後に起動される。処理対象となるプログラムは、コンパイラが字句解析、構文解析および意味解析を行なった後に解析結果として出力する中間言語プログラムである。
【0030】
<コンパイラの構成>
図1(a)は本発明の一実施例におけるコンパイラの構成図である。コンパイラは、構文解析装置100と、最適化装置200と、コード生成装置300で構成される。
構文解析装置100はファイルとして記憶されているソースプログラムの字句解析、構文解析、および意味解析をおこなう。解析結果は中間言語プログラムとして出力される。
【0031】
最適化装置200は最終的に生成される機械語プログラムのプログラムサイズを削減し、実行時間を短縮するように中間言語プログラムを最適化する。
コード生成装置300は、最適化された中間言語プログラムを、ターゲットマシンの機械語命令に変換し、機械語プログラムとして出力する。
<最適化装置200の構成>
図1(b)は、図1(a)に示す最適化装置200の構成図である。最適化装置200は、最適化時使用情報検出装置40、一般コード最適化装置50、及び定数最適化装置60で構成される。
【0032】
最適化時使用情報検出装置40は、プログラム内の変数についてのデータフロー解析および制御フロー解析を行ない、最適化処理に要する情報を検出する。ここでデータフロー解析とは、それぞれの変数がどこで定義され、どこに参照されているかについて解析することであり、制御フロー解析とは、プログラム中の制御の流れを解析することである。
【0033】
一般コード最適化装置50は、定数最適化を除く、不要コードの削除やインライン展開、ループ不変式のコード移動などの最適化を行う。不要コードの削除やインライン展開、ループ不変式のコード移動等の最適化は、本発明の主眼でないので説明を省略する。
<定数最適化装置60の内部構成>
図2は定数最適化装置60の構成図である。定数最適化装置60は、定数保持変数情報保持部6、定数保持変数定義検出部7、使用式検出部8、部分定数式書き換え部9、コスト判定書き換え部10、資源割り付け部11、メモリ変数書き換え部12、及び定数保持変数定義除去部13で構成される。
【0034】
定数保持変数情報保持部6には、プログラムで定義されている複数個の定数保持変数が保持する定数保持変数情報のデータベースが構築されてゆく。図中の定数保持変数情報保持部6を示す枠内に定数保持変数情報の一例を示す。定数保持変数情報は、定数保持変数の変数名と、プログラム内における位置情報で表された定数保持変数の定義位置と、定数保持変数に保持されている値と、その定数保持変数がどの資源に割り付けられているかを示す資源欄と、プログラム内における位置情報で表された定数保持変数の使用位置と、使用位置に保持値を伝播するかどうかを示す各使用位置の使用属性とで構成される。本図において、変数『a』から見て横方向には、『s1』『200』、『レジスタ』『s2』『伝播』が順に並べられているが、これは、変数『a』の定義位置が『s1』であり、また変数『a』の保持値が『200』であり、変数『a』がレジスタに割り付けられ、位置『s2』で使用され、その使用属性が『伝播』に代入されていることを示す。
【0035】
また『b』から見て横方向には、『s3』『10200』、『メモリ』『s4』『非伝播』が順に並べられ、その下の欄には『s5』『非伝播』並べられているが、これは、変数『b』の定義位置が『s3』であり、また変数『b』の保持値が『10200』であり、変数『b』がメモリに割り付けられ、位置s4での使用属性が『非伝播』に代入されていることを示す。その下欄の『s5』『非伝播』は、変数『b』がプログラムにおいて位置s4の他に位置s5で使用され、位置s5は非伝播であることを示している。
【0036】
尚、上記位置情報は、図13の一例に示したような、演算式毎に与えられた情報であり、図のs1、s2、s3、s4・・・がこれに該当する。
定数保持変数定義検出部7は、プログラムから変数に定数あるいは定数式を代入する代入式を検出し、検出した代入式において定義された定数保持変数の変数名、定数保持変数定義位置、定数保持変数に保持されている値を調べ、これらの情報を1つにまとめて、1つの定数保持変数情報にして定数保持変数情報保持部14のデータベースに登録する。尚、定数保持変数については既に述べているが、定数保持変数でない変数とは、保持値が代入式によって一義的に定まらない変数をいう。例えば、従来例で述べたような関数の戻り値を格納する変数や、プログラム実行中に値が変化する変数等がこれに相当する。
【0037】
使用式検出部8は、プログラムから定数保持変数情報保持部6に保持されている全ての定数保持変数について、その定数保持変数が被演算子の位置にある全ての演算式を検出し、検出した演算式の位置を定数保持変数情報保持部6のデータベースに登録し、その使用位置の使用属性を非伝播に設定する。
部分定数式書き換え部9は、プログラムにおいて被演算子になっている定数保持変数をその保持値に置き換えればその被演算子を含む演算式が定数又は定数式となるかを予測し、またデータフロー解析結果を鑑みて、その置き換えを行っても変数間の依存関係が保障できるかを検証する。このような一連の処理によって保持値に置き換えればその演算式が定数又は定数式になると予測され、変数間の依存関係が保障できると検証された場合、置き換えを実行する。置き換えの実行の後、定数保持変数情報保持部6に保持されている定数保持変数情報の使用属性に伝播を代入することで上記置き換えの形跡を残す。
【0038】
コスト判定書き換え部10は、定数保持変数情報保持部6に定義位置が保持されている各変数に対して、その変数の使用を定数の使用に置き換えた場合と、レジスタ変数(変数のうち、レジスタに割り付けられているものをいう。)として用いた場合とではどちらがコストが小さくなるかを予測し、かつ、データフロー解析結果によりその置き換えを行っても変数間の依存関係が保障できるかを検証する。以上の一連の処理によって定数に置き換えた方がコストが小さくなると予測され、変数間の依存関係が保障できると検証された場合、上記置き換えを実行し、定数保持変数情報保持部6に保持されている定数保持変数情報の使用属性に伝播を代入して置き換えの形跡を残す。
【0039】
資源割り付け部11は、プログラム中の変数をターゲットマシンのMPUが有しているレジスタまたはメモリに割り付ける。この資源割り付けにあたって、資源割り付け部11は、値の伝播及び畳み込みを終えたプログラムにおいて、各変数の生存区間がどう重複し合っているかを調べ、その重複し合う変数にそれぞれ異なるレジスタを割り付ける。また、資源割り付け部11は、各変数のネストレベルがどれだけであるか、あるいは、各変数の使用頻度がどれだけであるかを調べ、調べた結果に基づいて、各変数に優先度を与える。そしてこの優先度が高い順にレジスタを割り付けてゆく。その結果、レジスタに割り付けられなかった変数はメモリに割り付ける。資源割り付け部11は、このような資源割付を終えた後、特に定数保持変数に関しては、定数保持変数がレジスタまたはメモリのどちらに割り付けられたかを定数保持変数情報保持部6の定数保持変数情報のデータベースに反映させる。
【0040】
メモリ変数書き換え部12は、レジスタに割り付けた方がコストが小さくなると予測され、また、保持値への書き換えを行っても変数間の依存関係が保障できると検証された定数保持変数であって、資源割り付け部11でレジスタに割り付けられなかったものをその保持値である定数へと書き換える。またその書き換えの形跡を、定数保持変数情報保持部6に保持されている定数保持変数情報の使用属性に伝播を代入することで残す。
【0041】
定数保持変数定義除去部13は、定数保持変数情報保持部6に保持されている定数保持変数について、その定数保持変数に属する全ての定数保持変数の使用位置の使用属性が伝播となっている場合に、定数保持変数の定義をしている代入式を除去する。
図3は図2に示す部分定数式書き換え部9の処理過程を示すフローチャートである。
【0042】
ステップa1は、ステップa10と対になり、定数保持変数情報保持部6に保持されている全ての定数保持変数を1つ1つ処理対象にして以下の処理(ステップa2〜ステップa9)を繰り返す。
ステップa2は、ステップa9と対になり、ステップa1で現在処理対象になっている定数保持変数が被演算子として含まれている演算式の全てについて、以下の処理(ステップa3〜ステップa8)を繰り返す。
【0043】
ステップa3では、現在処理対象になっている定数保持変数をその保持値に置き換えた場合、その定数保持変数を含む演算式が定数式になるかを調べる。具体的には、ステップa3では、当該定数保持変数が単項演算子の被演算子であるか、当該定数保持変数が二項演算子の被演算子でもう一方の被演算子が定数もしくは定数保持変数であるかを調べる。ここで単項演算子とは、『a=−b』等、演算子及び被演算子が唯一つである代入式を言う。
【0044】
ステップa4では、プログラム中において被演算子の位置にある定数保持変数をその保持値に置き換える(定数の伝播の実行)。また定数保持変数情報保持部6に保持されている定数保持変数情報の使用位置の使用属性を伝播に設定する。
ステップa5では、ステップa4での置き換えの結果、プログラム中に定数式が新たに表れたかを調べ、新たにプログラム中に表れた定数式を定数に畳み込む。
【0045】
ステップa6では、ステップa4、a5で書き換えられた式(代入式)が、定数保持変数を定義する代入式と合致するか否かを判定する。
ステップa7では、ステップa6で合致すると判定された定数保持変数を定義している代入式についての定数保持変数名、定数保持変数定義位置、定数保持変数値をひとまとめにして定数保持変数情報保持部6のデータベースに登録する。
【0046】
ステップa8では、ステップa7で定数保持変数情報保持部6のデータベースに登録された定数保持変数について、その定数保持変数が被演算子の位置にある全ての演算式をプログラム中から検出し、検出した演算式の位置を定数保持変数情報保持部6に登録し、その定数保持変数情報の使用属性を非伝播に設定する。
以上ステップa1からステップa10までの処理により、プログラムにおいて被演算子になっていた定数保持変数はその保持値に置き換えられ、更に畳み込まれた状態となる。
【0047】
<コスト判定書き換え部10の内部構成>
図4(a)はコスト判定書き換え部10の内部構成図である。
コスト判定書き換え部10は、図4(a)に示すように、制御部14と、コスト計算の手掛かりになる情報を保持するコスト保持部15と、レジスタ変数定義コスト計算部16と、レジスタ変数使用コスト計算部17と、定数使用コスト計算部18と、これらの3つの計算部の計算結果に基づいて定数保持変数の書き換えを行うべきかを判定する書き換え判定部19と、当該判定部の判定結果で書き換えを行う書き換え部20とで構成される。
【0048】
制御部14は、図6(a)のフロ−チャ−トに基づいて処理を行う。
図6(a)は制御部14の処理過程を示すフロ−チャ−トである。
ステップb1は、ステップb7と対になり、定数保持変数情報保持部6に情報が登録されている定数保持変数を1つ1つ処理対象にして以下の処理(ステップb2〜ステップb6)を繰り返す。
【0049】
ステップb2は、現在処理対象になっている定数保持変数について、定数保持変数情報保持部6よりその定数保持変数定義位置を取り出し、この定数保持変数定義位置に含まれる代入式を取り出して、当該定数保持変数をレジスタ変数として定義した場合に当該代入式で費やされるコスト(以下レジスタ変数定義コストと呼ぶ)を推測する。
【0050】
ステップb3では、現在処理対象になっている定数保持変数について、その定数保持変数の使用位置の内、使用属性が非伝播であるものの全てを定数保持変数情報保持部6より取り出し、取り出した使用位置で定数保持変数を被演算子として含んでいる演算式を取り出して、定数保持変数をレジスタ変数として使用した場合に当該演算式で費やされるコスト(以下レジスタ変数使用コストと呼ぶ。)を推測する。
【0051】
ステップb4では、現在処理対象になっている定数保持変数について、その定数保持変数の使用位置の内、使用属性が非伝播であるものの全てを定数保持変数情報保持部6より取り出し、この使用位置において定数保持変数を被演算子として含んでいる演算式を取り出して、定数保持変数を定数に置き換えて使用した場合この演算式で費やされるコスト(以下定数使用コストと呼ぶ。)を推測する。
【0052】
ステップb5では、ステップb2〜b4で計算した各コストを用い、レジスタ変数定義コストとレジスタ変数使用コストとの和を計算し、この和と定数使用コストとの大きさを比較する。
ステップb6では、ステップb5において定数使用コストの方が小さいか、若しくは、等しかった場合に起動される。この場合には、定数保持変数を定数で書き換えた方が全体としてコストが小さくなるため、現在処理対象になっている定数保持変数の使用位置を定数保持変数情報保持部6より取り出し、この定数保持変数使用位置で定数保持変数を被演算子として含んでいる演算式を取り出して、演算式の被演算子になっている定数保持変数の使用を保持値である定数の使用に置き換え、その使用位置の使用属性を伝播に設定する。
【0053】
以上ステップb1からステップb7までの処理により、プログラム中の定数保持変数は、レジスタとして使い回した方がコストが小さいものはレジスタ変数に、それ以外のものは定数保持変数の値である定数に置き換えられた状態となる。コスト保持部15は、畳み込みにおいて定義、使用を行う機械語コードの典型例を表したパタンの全てと、各パタンで費やされるコストとを対応付けて保持している。コスト保持部15の保持内容の一連を図5に示す。図5において、コスト保持部15を示す枠内に『命令』、『Size』、『Cycle』が横方法に並べられ、その『命令』から下に向けて『定数保持変数定義』『8bit定数』『16bit定数』『24bit定数』が並んでいる。これらのうち、『8bit定数』から横方向に『2』『1』が並んでいるが、これらは、8bit長の定数保持変数の定義を行えば、その定数保持変数を含む代入式においてメモリサイズが『2』費やされ、実行サイクルが『1』費やされることを示す。また『24bit定数』から横方向に『5』『3』が並んでいるが、これらは、24bit長の定数保持変数の定義を行えば、その定数保持変数を含む代入式において、メモリサイズが『5』費やされ、実行サイクルが『3』費やされることを示す。
【0054】
『レジスタ変数--定数加算 8bit』から横方向に『2』『1』が並んでいるが、これらは、8bit長の定数を保持する定数保持変数を定数として加算に使用すれば、その使用を行う演算式において、メモリサイズが『2』費やされ、実行サイクルが『1』費やされることを示す。『レジスタ−定数加算 16bit』から横方向に『4』『2』が並んでいるが、これらは、16bit長の定数を保持する定数保持変数を定数として加算に使用すれば、その使用を行う演算式において、メモリサイズが『4』費やされ、実行サイクルが『2』費やされることを示す。
【0055】
『定数保持変数定義』、『レジスタ−定数式加算 8bit』の他に、本図には『レジスタ変数同士の加算』、『メモリからのロード』、『メモリへのストア』等が存在するが、コスト保持部15はこれらの命令で費やされるコストをも保持し、プログラムに含まれるあらゆる式について、コストが計算されるようにしている。
【0056】
レジスタ変数定義コスト計算部16は、ステップb2での推測を行う。具体的には、定数保持変数の定義を行う代入式でコスト保持部15を検索し、代入式とマッチングするコストを取り出し、これを推測結果とする。
レジスタ変数使用コスト計算部17は、ステップb3での推測を行う。具体的には、定数保持変数使用位置の内、使用属性が非伝播であるものにおいて定数保持変数を被演算子として含んでいる演算式を検索項目としてコスト保持部15を検索し、検索項目とマッチングするコストを取り出して、取り出したコストの集計をとり、これを推測結果とする。
【0057】
定数使用コスト計算部18は、ステップb4で起動され、定数保持変数使用位置の内、使用属性が非伝播であるもので定数保持変数を被演算子として含んでいる演算式について定数保持変数をその保持している定数値で置き換えた演算式を検索項目としてコスト保持部15を検索し、検索項目とマッチングするコストを取り出して、取り出したコストの集計をとり、これを推測結果とする。
【0058】
書き換え判定部19は、ステップb5で起動され、レジスタ変数定義コスト計算部16からレジスタ変数定義コストを受け取り、レジスタ変数使用コスト計算部17からレジスタ変数使用コストを受け取り、定数使用コスト計算部18から定数使用コストを受け取って、レジスタ変数定義コストとレジスタ変数使用コストとの和を計算し、この和と定数使用コストとの大きさを比較する。定数使用コストの方が小さいか、もしくは、等しい場合には、定数保持変数を保持値で書き換えた方が全体としてコストが小さくなるため書き換え部20を呼び出し、定数保持変数を定数に書き換える。定数使用コストの方が大きかった場合には、定数保持変数をレジスタ変数とした方が全体としてコストが小さくなるため、書き換えを行なわない。
【0059】
書き換え部20は、現在処理対象になっている定数保持変数の使用位置を定数保持変数情報保持部6より取り出し、この定数保持変数使用位置において定数保持変数を被演算子として含んでいる演算式を取り出して、プログラム中の定数保持変数の使用を保持値の使用に置き換え、その使用位置の使用属性を伝播に設定する。
【0060】
<メモリ変数書き換え部12の内部構成>
図4(b)はメモリ変数書き換え部12の内部構成図である。
メモリ変数書き換え部12は、制御部22と、レジスタ変数判定部23と、書き換え部24から構成される。
制御部22は、定数保持変数情報保持部6に保持されているそれぞれの定数保持変数について、レジスタ変数判定部23を呼び出す。
【0061】
図6(b)は図4(b)に示す制御部22の処理過程を示すフロ−チャ−トである。
ステップc1はステップc7と対になり、定数保持変数情報保持部6に登録されている全ての定数保持変数の1つ1つについて以下の処理(ステップc2〜ステップc6)を繰り返す。
【0062】
ステップc2は、現在処理対象になっている定数保持変数について、変数が割り付けられている資源を定数保持変数情報保持部6から取り出し、変数がメモリに割り付けられているかどうかを判定する。
ステップc3はステップc6と対になり、ステップc2でメモリに割り付けられていると判定された定数保持変数について、定数保持変数情報保持部からその使用を取り出し、定数保持変数の使用1つ1つについて以下の処理(ステップc4〜ステップc5)を繰り返す。
【0063】
ステップc4では、現在処理対象になっている定数保持変数の使用について、変数の使用属性を定数保持変数情報保持部6から取り出し、使用属性が非伝播かどうかを判定する。
ステップc5では、ステップc2によりメモリに割り付けられていると判定された定数保持変数の内、ステップc4で使用属性が非伝播であると判定された定数保持変数の使用について、その使用位置を定数保持変数情報保持部6から取り出し、これらの使用位置で被演算子となっている定数保持変数をその保持値である定数値で置き換え、使用属性を伝播に設定する。
【0064】
ステップc1からステップc7までの処理により、プログラム中の定数保持変数のうち、資源割り付け後に、メモリに割り付けられてしまったものが保持値に置き換えられた状態となる。
レジスタ変数判定部23は、現在処理対象になっている定数保持変数について、定数保持変数の使用属性を定数保持変数情報保持部6から取り出し、その変数がレジスタに割り付けられたかメモリに割り付けられたかを定数保持変数情報保持部6の資源の欄より判定し、メモリに割り付けられたと判定された場合に、その変数の使用属性が非伝播が否かを判定して、非伝播の場合に、書き換え部24を起動する。
【0065】
書き換え部24は、レジスタ変数判定部23によって起動され、現在処理対象になっている定数保持変数の全ての使用位置を定数保持変数情報保持部6から取り出し、取り出した位置で被演算子の位置にある定数保持変数をその保持値に書き換え、定数保持変数の使用位置の使用属性を伝播に設定する。
<図7(a)〜(f)の中間言語プログラムを処理対象とした動作例>
以上のように構成された最適化装置に、図7(a)に示されたプログラムを入力として与えた場合の動作を、動作例として説明する。
【0066】
(1)定数保持変数定義検出部7は、図7(a)のプログラムにおいて位置s1の定義式(定数保持変数に定数を設定する代入式)を検出し、定数保持変数名a、定義位置s1、定数保持変数値200を1つにまとめて1つの定数保持変数情報として、定数保持変数情報保持部6のデータベースに登録する。
(2)使用式検出部8は、プログラム中から定数保持変数情報保持部6に登録されている定数保持変数aの使用式を探査し、位置s2での定数保持変数aの使用式を検出して、使用位置s2、使用属性「非伝播」を1つにまとめて1つの定数保持変数情報として、定数保持変数情報保持部6のデータベースに登録する。同様に定数保持変数aの使用を探査し、位置s3の演算式を検出して、使用位置s3及び使用位置s3での使用属性として「非伝播」を定数保持変数情報保持部6の定数保持変数aの欄に書き込む。この段階で定数保持変数情報保持部6に保持されている情報は図8(a)のようになる。
(3)部分定数式書き換え部9では、ステップa1〜a10のループが、定数保持変数情報保持部6の各定数保持変数について繰り返される。現段階での定数保持変数は定数保持変数aのみであるので、ステップa1〜a10のループは定数保持変数aについて実行される。
【0067】
ステップa2〜a9のループが、定数保持変数情報保持部6の定数保持変数aのそれぞれの使用式(定数保持変数が被演算子になっている代入式)について繰り返し実行される。この例では、定数保持変数aの定数保持変数情報には位置s2、s3の2つの位置情報が格納されているので、ループは2回実行される。
ステップa3では、定数保持変数情報保持部6に保持された定数保持変数の使用が定数に畳み込めるかを判定する。定数保持変数aの使用式の定数200での置き換え後の式は、位置s2「a1={200}+x」、位置s3「b=10000+{200}」(※、{,}内の数値は、書き換えによって生じた定数を示す。)となり、結果が定数に畳み込めるのは位置s3の演算式のみである。従って以下ステップa4〜a8の処理は定数保持変数の位置s3の演算式についてのみ実行される。
【0068】
ステップa4では、プログラム中の位置s3が「b=10000+{200}」と書き換えられ(定数の伝播)、定数保持変数情報保持部6中、定数保持変数aの位置s3を含む欄の使用属性が「伝播」に設定される。
ステップa5では、プログラム中の位置s3が、更に「b={10200}」に畳み込まれる。
【0069】
ステップa6では、ステップa5で書き換えによって、定数保持変数の定義式が新たに生成したかを判定する。この場合、代入式「b={10200}」により定数保持変数bが新たに生成されたのでので、以下ステップa7、a8が実行される。
ステップa7では、ステップa6で新たに生成したと判定された定義式についての定数保持変数情報として、定数保持変数情報保持部6のデータベースに、定数保持変数名b、定数保持変数定義位置s3を1つにまとめて1つの定数保持変数情報として定数保持変数値10200を登録する。
【0070】
ステップa8では、ステップa7で新たに格納された定数保持変数bについて、その使用位置がプログラム中から探査される。処理は上記(2)の場合と同様なので説明は省略する。
ステップa9では、ステップa2と対になりループ処理を行なう。
ステップa10では、ステップa1と対になりループ処理を行なう。この段階では、定数保持変数情報保持部6には、定数保持変数bの定義式も登録されているため、再びステップa1に戻り、ループを行なうこととなる。つまり、途中で追加されたものを含む全ての定数保持変数bの定義式についてステップa1〜a10の処理が繰り返される。
【0071】
部分定数式書き換え部9による書き換えの結果、中間プログラムは図7(b)、定数保持変数情報保持部6に保持されている定数保持変数情報は図8(b)のようになる。
(4)コスト判定書き換え部10は、定数保持変数情報保持部6に保持されている定数保持変数a、bについて以下の処理を実行する。MPUの命令セットとして図9を仮定する。この場合、コスト保持部15に格納されている情報は図10になる。
【0072】
{定数保持変数aの使用のコスト比較及び書き換え}
レジスタ変数定義コスト計算部16は、定数保持変数情報保持部6から定数保持変数aの定義位置をとりだし、プログラム中から定数保持変数aの定義式を取り出して、コスト保持部15に格納されているパターンとマッチングを行ない、定数保持変数aの定義コストを取り出す。この場合200は8bit以内の定数であるため、コストとしてサイズ2、サイクル1が取り出される(ステップb2、図10の矢符c1)。
【0073】
レジスタ変数使用コスト計算部17は、定数保持変数情報保持部6から定数保持変数aの使用の内、その使用属性が非伝播であるものの使用位置をとりだし、その使用位置での定数保持変数aの使用式を取り出して、コスト保持部15に格納されているパターンとマッチングを行ない、定数保持変数aの使用コストを取り出す。この場合は定数保持変数aの使用式は、どちらもレジスタ変数同士の加算とマッチングし、コストとしてサイズ1、サイクル1が取り出される(ステップb3、図10の矢符c2)。
【0074】
定数使用コスト計算部18は、定数保持変数情報保持部6から定数保持変数aの使用の内、その使用属性が非伝播であるものの使用位置をとりだし、プログラム中から使用式を取り出して、使用式中の定数保持変数をその保持値に置き換えた場合の定数式と、コスト保持部15に格納されているパターンとのマッチングを行ない、定数保持変数aを定数に置き換えた場合の使用コストを取り出す。この例ではレジスタ変数--8bit定数の加算とマッチングし、コストとしてサイズ2、サイクル1が取り出される(ステップb4、図10の矢符c3)。
【0075】
書き換え判定部19は、上記レジスタ変数定義コスト計算部16で計算されたコストと上記レジスタ変数使用コスト計算部17で計算されたコストとの和をとり、これと、定数使用コスト計算部18で計算されたコストとを比較する(ステップb5)。定数保持変数aの例では、レジスタ変数として用いた場合には、
サイズ=2+1=3
サイクル=1+1=2
定数に置き換えた場合には、
サイズ=2
サイクル=1
となり、定数使用のコストの方が小さいので、書き換え部20を起動し、位置s2の演算式で被演算子になっている定数保持変数aの使用式を定数保持変数値200に書き換える(ステップb5)。この結果使用位置s2の代入式は「a1=200+x」となる。
【0076】
{定数保持変数bについてのコスト比較及び書き換え}
定数保持変数aと同様の処理をおこなうが、定数保持変数bの場合には定数使用コストの方が大きくなる。従って書き換え部20は起動されない。
以上、コスト判定書き換え部10の処理により、プログラムは図7(c)、定数保持変数情報保持部6に保持されている情報は図8(c)になる。
【0077】
(5)資源割り付け部5は各変数a、a1、x、b、b1、b2、yをレジスタまたはメモリに割り付ける。また定数保持変数であるa、bについては定数保持変数情報保持部6の資源欄に割り付けられた資源(レジスタもしくはメモリ)を設定する。
(6)メモリ変数書き換え部12は、定数保持変数情報保持部6に保持されている定数保持変数についてこの定数保持変数がレジスタに割り付けられているかどうかを調べる(ステップc2)。
【0078】
(7−1 定数保持変数bがレジスタに割り付けられた場合)
定数保持変数がレジスタに割り付けられている場合にはここで処理を終了する。例において定数保持変数bがレジスタに割り付けられていたのでプログラムは図7(c)に示すようになる。
(8)定数保持変数定義除去部7は、定数保持変数情報保持部6に保持されている定数保持変数について、その全ての定数保持変数使用属性が伝播となっている場合に、定数保持変数情報保持部6に登録されている定数保持変数定義位置の項の内容に基づいて、プログラムから定数保持変数の定義式を除去する。
【0079】
例において定数保持変数bがレジスタに割り付けられた場合には、定数保持変数情報格納部内の情報は図8(d)の様になっており、定義式が除去できる定数保持変数は定数保持変数aのみである。従ってこの場合には定数保持変数aの定義式(プログラム中の位置s1)を除去する。結果、最終的にプログラムは図7(e)に示すように書き換えられる。
【0080】
(7−2 定数保持変数bがレジスタに割り付けられなかった場合)
定数保持変数bがレジスタに割り付けられていなかった場合には、更に定数保持変数情報の属性項を調べ、使用属性が非伝播となっているかどうかを調べる(ステップc4)。この例では図8(c)に示されている通り、使用位置s4、s5で使用属性項が非伝播となっている。従って、書き換え部24が起動され、定数保持変数の使用がその保持値の使用に書き換えられる(ステップc5)。例では、定数保持変数bがレジスタに割り付けられていないので、プログラムは図7(d)に示すように書き換えられる。定数保持変数bがレジスタに割り付けられなかった場合には、定数保持変数情報格納部内の情報は図8(e)の様になっており、定義式が除去できる定数保持変数はa、bとなる。従ってこの場合には定数保持変数aの定義式(プログラム中の位置s1)および定数保持変数bの定義式(プログラム中の位置s3)を除去する。結果、最終的にプログラムは図7(f)に示すように書き換えられる。
【0081】
<図11(a)〜(f)の中間言語プログラムを処理対象とした動作例>
最適化装置に図11(a)〜(f)に示されたプログラムが入力として与えられた場合の動作を以下に説明する。
(1)定数保持変数定義検出部7は、位置s1においてプログラム中31の定数保持変数の代入式を検出し、定数保持変数名a、定義位置s1、定数保持変数値10000を定数保持変数情報保持部6のデータベースに登録する(ステップa7)。
(2)使用式検出部8は、プログラム中から定数保持変数情報保持部6に保持されている定数保持変数aの使用位置を探査し、位置s2の使用式を検出して、使用位置s2、使用属性「非伝播」を定数保持変数情報保持部6の定数保持変数aの欄に登録する。また同様に定数保持変数aの使用式、s3、s4を検出し、使用位置としてs3、s4を使用属性として「非伝播」に設定する(ステップa8)。
(3)部分定数式書き換え部9では、定数保持変数aの使用s4が書き換え条件に該当するので、図11(b)に示すように、使用s4が「b=20000+10000」更に「b=30000」と書き換えられ、定数保持変数情報保持部6中、定数保持変数aの使用位置s3の使用属性が「伝播」に設定される(ステップa5)。またこの段階で変数bも新たな定数保持変数となりここで登録されるが、この例では変数bの使用式についての説明は省略し、以下変数aについてのみ説明を行う。
(4)コスト判定書き換え部10は、定数保持変数情報保持部6に保持されている定数保持変数aについて以下の処理を実行する。MPUの命令セットとして図9を仮定する。この場合、コスト保持部15に格納されている情報は図10になる。
【0082】
レジスタ変数定義コスト計算部16は、定数保持変数情報保持部6から定数保持変数aの定義位置を取り出し、プログラム中から定義式を取り出して、コスト保持部15に格納されているパタンとのマッチングをとり、定数保持変数aの定義コストを取り出す。この場合10000は16bit以内の定数であるため、コストとしてサイズ3、サイクル1が取り出される(ステップb2)。
【0083】
レジスタ使用コスト計算部17は、定数保持変数情報保持部6から定数保持変数aの使用位置の内、使用属性が非伝播であるものを取り出し、プログラム中から使用式を取り出して、コスト保持部15に格納されているパタンとのマッチングをとり、定数保持変数aの使用コストを取り出す。この場合は定数保持変数aの使用式は、どちらも(s2、s3)レジスタ変数同士の加算とマッチングするので、コストとしてサイズ1、サイクル1が取り出される(ステップb3)。
【0084】
定数使用コスト計算部18は、定数保持変数情報保持部6から定数保持変数aの使用位置を取り出し、その使用位置の使用式の内、使用属性が非伝播であるものを取り出して、使用式中の定数保持変数をその保持値で置き換えた場合の定数式と、コスト保持部15に格納されているパタンとマッチングをとり、定数保持変数aを保持値に置き換えた場合の使用コストを取り出す、この例ではどちらもレジスタ変数−−16bitit定数の加算とマッチングするので、コストとしてサイズ4、サイクル2が取り出される(ステップb4)。
【0085】
書き換え判定部19は、上記レジスタ変数定義コスト計算部16で計算されたコストとレジスタ変数使用コスト計算部17で計算されたコストの和をとり、これと、定数使用コスト計算部18で計算されたコストとを変換する(ステップb5)。定数保持変数aの例ではレジスタ変数として用いた場合には、
サイズ=3+1+1=5
サイクル=1+1+1=3
定数で置き換えた場合には、
サイズ=4+4=8
サイクル=2+2=4
となり、レジスタ変数として使用した場合のコストの方が小さいので、書き換え部20は起動されず位置s2、s3はこのまま変化しない。
【0086】
従って、図11(a)の中間言語プログラムは図11(b)の形となる。図11(b)において、位置s4では、代入式が『b=30000』となり、プログラム中に代入式『b=30000』が表れ、この位置s4の代入式の変数bが新たに定数保持変数になる。
伝播及び畳み込みによって新たな定数保持変数が表れると、定数保持変数a同様、定数保持変数bが被演算子になっている代入式を探し出される。この変数bからは3本の矢印が伸び、その矢先にも変数bがあるが、これは変数bが被演算子として使用されている代入式を指示している。最適化装置は位置s9、s10の代入式が探し出され、これらの代入式において被演算子になっている定数保持変数bが、その保持値”30000”に書き換えられる。この書き換えによって位置s9、s10の代入式は図に示すように、『u=10000+{30000}』、『z={30000}+45000』と書き換えられる。この書き換え後、最適化装置は、定数の畳み込みを行い、位置s9、s10の代入式を『u=40000』、『z=75000』に書き換える。この書き換えによって変数u、zが定数保持変数になるので、これらの変数についての伝播、畳み込みを最適化装置は更に繰り返す。以上のように伝播、畳み込みを繰り返すと、プログラムのように、位置s4、s9、s10の代入式が削除され、プログラムは至って簡素になる。
【0087】
以上のように、書き換えが行われると、最適化装置は、定数の伝播および定数の畳み込み後、プログラム中に残った変数をレジスタあるいはメモリに割り付ける。この資源割付を行うにあたって、最適化装置は、生存区間が重なり合う変数同士をそれぞれ、異なるレジスタに割り付ける。
定数の伝播および定数の畳み込みによって図11(d)のように書き換えられたプログラム中の、変数a、x、yがそれぞれ、レジスタD0、D1、D2に割り付けられたとする。変数a、x、yがレジスタに割り付けられたので、図11(d)に示すプログラム中の各代入式はオペランドをレジスタにした機械語コードに変換される。
【0088】
図11(d)で位置s1〜s3の中間言語プログラムから生成された機械語コードを図12に示す。図中の『movi #10000,D0』、『add D0,D1』、『add D0,D2』は、伝播後の中間言語プログラムの代入式に対応している。これらの機械語コードの右隣に、メモリサイズ、実行サイクルが書かれているが、これらの機械語コードはレジスタを被演算子にしているから、『add D0,D1』は、メモリサイズが”1”、実行サイクルが”1”となり、『add D0,D2』は、メモリサイズが”1”、実行サイクルが”1”となる。これが従来例のようにこの機械語コードが即値『#10000』を含んだものであれば、図14に示したようにメモリサイズが”4”、実行サイクルが”4”となる。そのため、本発明の伝播では、より低コストの機械語プログラムに書き換えられることがわかる。
【0089】
以上説明したように本発明によれば、定数の伝播、定数の畳み込みを有効に行いつつも、定数の伝播に伴うコスト増加を防止することができる。
なお、上記実施例においてコストとして命令のサイズと実行時間(サイクル数)を並列に用いたが、これらを単独で用いてもよい。またこれらに演算を施した値をコストとして用いても良いことは言うまでもない。
【0090】
【発明の効果】
以上説明してきたように請求項1に係る最適化装置においては、
第1の書換手段による書き換えでプログラムの簡素化を行うことができ、残りの式の書き換えは第1の推定手段の推定結果が第2の推定手段による推定結果以下である場合にのみ行うので、定数の伝播に伴うコスト増加を防止することができる。このようにコスト増加を伴わずに定数の伝播が行えれば、プログラムの冗長部が無くなるので、このプログラムに基づいて生成される機械語プログラムが至って高効率になる。
【0091】
また、請求項2に係る最適化装置においては、請求項1の効果に加えて、
全ての被演算子が定数になった式はそれらの被演算子による演算結果を代入する式に書き換えられ、書き換えた式が管理手段に管理されるので、第1の及び第2の書換手段の書き換えによって定数保持変数を新たに生成することができ、定数保持変数が保持する定数を伝播することが可能となる。以上の処理が繰り返され、伝播及び畳み込みが順々に行われると、多くの式が削除されてプログラムが至って簡素になる。そのため、最終的に生成される機械語プログラムの実行時間及びメモリサイズを大きく低減することができる。
【0092】
また、請求項3に係る最適化装置においては、請求項1の効果に加えて、
第1、第2及び第4の書換手段によって式が削除されたプログラム中の変数に対して資源割り付けが行われ、また、この資源割り付けの結果、メモリに割り付けらた変数のうち定数保持変数は、メモリが割り付けられる代わりに定数に書き換えられるので、定数保持変数が被演算子になっている式及び定数を代入している式についてはメモリアクセスが不要になる。そのため、そのメモリアクセスの分だけ、実行時間を短くすることができる。
【0093】
また、請求項4に係る最適化装置においては、請求項1の効果に加えて、
関連式集合中の各式が機械語命令に置き換えられ、各機械語命令のコストが関連式集合単位に推定されることで推定が行われるので、より正確なコストを推定することができる。そのため、被演算子の書き換えを行うか否かの判断がより正確になる。
【図面の簡単な説明】
【図1】本発明の一実施例におけるコンパイラ及び最適化装置200の構成図である。
(a)コンパイラの構成図である。
(b)(a)に示したコンパイラの内部構成における最適化装置200の構成図である。
【図2】本発明の一実施例における定数最適化装置60の内部構成図である。
【図3】部分定数式書き換え部9の処理内容を示すフローチャートである。
【図4】定数最適化装置60の内部構成におけるコスト判定書き換え部10及びメモリ変数書き換え部12の構成図である。
(a)コスト判定書き換え部10の構成図である。
(b)メモリ変数書き換え部12の構成図である。
【図5】コスト保持部15の保持内容の一例を示す図である。
【図6】定数最適化装置60の内部構成におけるコスト判定書き換え部10及びメモリ変数書き換え部12の処理内容を示すフロ−チャ−トである。
(a)コスト判定書き換え部10の処理内容を示すフロ−チャ−トである。
(b)メモリ変数書き換え部12の処理内容を示すフロ−チャ−トである。
【図7】ソースプログラム及び中間言語プログラムの一例と、その一例が如何に書き換えられるかを示した説明図である。
(a)ソースプログラムの一例である。
(b)部分定数式書き換え部を経た後の中間言語プログラムの一例である。
(c)コスト判定書き換え部を経た後の中間言語プログラムの一例である。
(d)メモリ変数書き換え部を経た後の中間言語プログラムの一例である。
(e)定数保持変数定義除去部を経た後の中間言語プログラムの一例である。
(f)定数保持変数定義除去部を経た後の中間言語プログラムの一例である。
【図8】定数変数情報の内容が遷移してゆく様子を示した図である。
(a)使用式検出部8の処理を経た後の定数変数情報の一例である。
(b)部分定数式書き換え部9の処理を経た後の定数変数情報の一例である。
(c)コスト判定書き換え部10の処理を経た後の定数変数情報の一例である。
(d)メモリ変数書き換え部12の処理を経た後の定数変数情報の一例である。
(e)メモリ変数書き換え部12の処理を経た後の定数変数情報の一例である。
【図9】 MPUの命令セットの一例である。
【図10】コスト保持部15において登録されている情報の一例である。
【図11】ソースプログラム及び中間言語プログラムの一例と、その一例が如何に書き換えられるかを示した説明図である。
(a)ソースプログラムの一例である。
(b)部分定数式書き換え部を経た後の中間言語プログラムの一例である。
(c)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
(d)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
(e)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
(f)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
【図12】本発明の最適化装置を経た後の機械語プログラムの一例である。
【図13】ソースプログラム及び中間言語プログラムの一例と、その一例が、従来の最適化装置によって如何に書き換えられるかを示した説明図である。
(a)中間言語プログラムの一例である。
(b)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
(c)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
(d)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
(e)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
(f)定数の伝播及び畳み込みが行われた中間言語プログラムの一例である
【図14】定数の伝播及び畳み込みが行われた後に、生成される機械語プログラムを示す図である。
【符号の説明】
100 構文解析装置
200 最適化装置
300 コード生成装置
400 最適化時使用情報検出装置
40 最適化時使用情報検出装置
50 一般コード最適化装置
60 定数最適化装置
6 定数保持変数情報保持部
7 定数保持変数定義検出部
8 使用式検出部
9 部分定数式書き換え部
10 コスト判定書き換え部
11 資源割り付け部
12 メモリ変数書き換え部
13 定数保持変数定義除去部
14 制御部
15 コスト保持部
16 レジスタ変数定義コスト計算部
17 レジスタ変数使用コスト計算部
18 定数使用コスト計算部
19 書き換え判定部
20 書き換え部
22 制御部
23 レジスタ変数判定部
24 書き換え部

Claims (4)

  1. プログラム言語で書かれたプログラムを機械語プログラムに翻訳するコンパイラに備えられ、プログラム言語で書かれたプログラムの最適化を行って最適化後のプログラムを出力する最適化装置であって、
    プログラム中の定数が代入される変数である各定数保持変数について、その定数保持変数に定数を代入している式と、その定数保持変数を被演算子にしている式とを対応づけて定数保持変数の関連式集合として管理する管理手段と、
    関連式集合中の定数保持変数を被演算子としている式のうち他の被演算子が全て定数である式、及び、定数保持変数を被演算子とした単項演算である式を、定数保持変数が保持する定数を被演算子とした式に書き換える第1の書換手段と、
    第1の書換手段による書き換えの後、定数に書き換えられなかった定数保持変数を、その保持する定数即値データに置き換えて機械語演算の被演算子にした場合に、その定数保持変数の関連式集合の内、定数保持変数を被演算子としている式から生ずる機械語命令列の実行サイクルおよび/又はコードサイズを、その定数のバイト長に基づいて推定する第1の推定手段と、
    第1の書換手段による書き換えの後、定数に書き換えられなかった定数保持変数が保持する定数を格納したレジスタを機械語演算の被演算子にした場合に、その定数保持変数の関連式集合の内、定数保持変数に定数を代入している式及び定数保持変数を被演算子としている式から生ずる機械語命令列の実行サイクルおよび/又はコードサイズを推定する第2の推定手段と、
    第1の推定手段の推定結果と第2の推定手段の推定結果とを各関連式集合毎に比較する比較手段と、
    比較手段による比較の結果、第1の推定手段の推定結果が第2の推定手段の推定結果以下の関連式集合はその中で被演算子になっている定数保持変数を全てその定数に書き換える第2の書換手段と
    定数保持変数を被演算子として用いる式が全て定数保持変数が保持する定数値を被演算子として用いる式に書き換えられた場合に、当該定数保持変数に定数を代入している式を削除する第3の書換手段と
    を備えることを特徴とする最適化装置。
  2. 最適化装置は更に、
    第1及び第2の書換手段による書き換えによって全ての被演算子が定数になった式をそれらの被演算子による演算結果を代入する式に書き換える第4の書換手段と、
    第4の書換手段による書き換えによって生じた式で演算結果が代入されることになる新たな定数保持変数と、その定数保持変数に定数を代入している式と、その定数保持変数を被演算子にしている全ての式とを各定数保持変数の関連式集合として管理手段に管理させる制御手段と、
    管理手段に新たに管理された関連式集合に対して、第1の書換手段を起動する起動手段と
    を備えることを特徴とする請求項1記載の最適化装置。
  3. 最適化装置は更に、
    第2の書換手段による書き換え及び削除の後、各変数間の生存区間の重なり具合や各変数の使用頻度に基づいて、プログラム中の各変数をレジスタ又はメモリに割り付ける資源割付手段と、
    資源割付手段によってメモリに割り付けられた変数のうち、定数保持変数であるものを判定し、判定された定数保持変数の関連式集合において被演算子になっている定数保持変数を全てその定数に書き換える第5の書換手段と、
    を備えることを特徴とする請求項1又は2記載の最適化装置。
  4. 最適化装置は、
    複数個の機械語命令と、各機械語命令の実行サイクルおよび/又はコードサイズを示すコストとを対応づけて記憶するコスト記憶手段を備え、
    第1の推定手段は、
    第1の書換手段による書き換え後、関連式集合において定数保持変数を被演算子にしている各式を、定数保持変数を、その保持する値である定数を表す即値データとして被演算子とした機械語命令に置き換える第1の置き換え手段と、
    置き換えられた各機械語命令に対応するコストをコスト記憶手段から読み出し、読み出したコストを集計し、集計結果を推定結果とする第1の集計手段
    を備え
    第2の推定手段は、
    第1の書換手段による書き換え後、関連式集合において定数保持変数に定数を代入する式及び定数保持変数を被演算子にしている各式を、その定数を格納したレジスタを被演算子とした機械語命令に置き換える第2の置き換え手段と、
    置き換えられた各機械語命令に対応するコストをコスト記憶手段から読み出し、読み出したコストを集計し、集計結果を推定結果とする第2の集計手段
    を備えることを特徴とする請求項1〜3記載の何れかの最適化装置。
JP15026195A 1995-06-16 1995-06-16 最適化装置 Expired - Fee Related JP3650649B2 (ja)

Priority Applications (7)

Application Number Priority Date Filing Date Title
JP15026195A JP3650649B2 (ja) 1995-06-16 1995-06-16 最適化装置
TW085106680A TW434512B (en) 1995-06-16 1996-06-04 Optimizer
US08/657,489 US5842021A (en) 1995-06-16 1996-06-04 Optimizer
EP96304374A EP0749067B1 (en) 1995-06-16 1996-06-12 Optimizer
DE69620057T DE69620057T2 (de) 1995-06-16 1996-06-12 Optimierer
KR1019960021648A KR100215502B1 (ko) 1995-06-16 1996-06-15 최적화장치
CN96108810A CN1122216C (zh) 1995-06-16 1996-06-17 优化器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP15026195A JP3650649B2 (ja) 1995-06-16 1995-06-16 最適化装置

Publications (2)

Publication Number Publication Date
JPH096627A JPH096627A (ja) 1997-01-10
JP3650649B2 true JP3650649B2 (ja) 2005-05-25

Family

ID=15493080

Family Applications (1)

Application Number Title Priority Date Filing Date
JP15026195A Expired - Fee Related JP3650649B2 (ja) 1995-06-16 1995-06-16 最適化装置

Country Status (7)

Country Link
US (1) US5842021A (ja)
EP (1) EP0749067B1 (ja)
JP (1) JP3650649B2 (ja)
KR (1) KR100215502B1 (ja)
CN (1) CN1122216C (ja)
DE (1) DE69620057T2 (ja)
TW (1) TW434512B (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6223337B1 (en) * 1997-12-12 2001-04-24 Hewlett-Packard Company Random test generation for compiler optimization
KR100492131B1 (ko) * 1998-04-08 2005-08-01 한국항공우주산업 주식회사 웹 프로그램의 변수 전달 방법
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP2002073333A (ja) * 2000-08-25 2002-03-12 Hitachi Ltd 手続き呼び出し先のデータ依存の解析表示方法
US20040003383A1 (en) * 2002-06-28 2004-01-01 Microsoft Corporation Stripping of unnecessary information from source code
US20040095348A1 (en) * 2002-11-19 2004-05-20 Bleiweiss Avi I. Shading language interface and method
KR20050118177A (ko) * 2003-03-10 2005-12-15 카테나 가부시키가이샤 Lyee지향 소프트웨어에 관한 정적(靜的)분석방법
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
JP4377369B2 (ja) * 2005-11-09 2009-12-02 株式会社日立製作所 リソース割当調停装置およびリソース割当調停方法
US20070233745A1 (en) * 2006-03-29 2007-10-04 Ori Pomerantz Data Flow Optimization in Meta-Directories
US7870544B2 (en) * 2006-04-05 2011-01-11 International Business Machines Corporation Insuring maximum code motion of accesses to DMA buffers
FR2902543A1 (fr) 2006-06-20 2007-12-21 Alcatel Sa Procede de creation de contenus multimedia pour terminaux mobiles, produit programme d'ordinateur pour la mise en oeuvre d'un tel procede
US20080250032A1 (en) * 2007-04-04 2008-10-09 International Business Machines Corporation Method and system for efficiently saving and retrieving values of a large number of resource variables using a small repository
US8087012B2 (en) * 2007-08-21 2011-12-27 International Business Machines Corporation Eliminating maximum/minimum operations in loop bounds
JP5165969B2 (ja) * 2007-08-29 2013-03-21 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムのコンパイルのために変数にレジスタを割り付ける技術
US7505963B1 (en) * 2008-01-07 2009-03-17 International Business Machines Corporation Method and system for efficiently saving and retrieving values of a large number of resource variables using a small repository
JPWO2009098739A1 (ja) * 2008-02-05 2011-05-26 パナソニック株式会社 プログラム最適化装置およびプログラム最適化方法
US9176845B2 (en) * 2010-03-19 2015-11-03 Red Hat, Inc. Use of compiler-introduced identifiers to improve debug information pertaining to user variables
CN102184090B (zh) * 2011-05-27 2013-12-04 清华大学 一种动态可重构处理器及其固定数的调用方法
JP6481515B2 (ja) 2015-05-29 2019-03-13 富士通株式会社 情報処理装置、コンパイル方法、及びコンパイラプログラム
US11334469B2 (en) * 2018-04-13 2022-05-17 Microsoft Technology Licensing, Llc Compound conditional reordering for faster short-circuiting
CN109145013A (zh) * 2018-08-10 2019-01-04 上海达梦数据库有限公司 一种表达式转换方法、装置、设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4802091A (en) * 1986-10-31 1989-01-31 International Business Machines Corporation Method for improving the efficiency of arithmetic code generation in an optimizing compiler using the technique of reassociation
JPH01108638A (ja) * 1987-10-21 1989-04-25 Hitachi Ltd 並列化コンパイル方式
JPH0417031A (ja) * 1990-05-10 1992-01-21 Nec Corp 定数値伝播最適化方式
JP3280449B2 (ja) * 1993-03-01 2002-05-13 富士通株式会社 コンパイル装置
US5659754A (en) * 1995-03-31 1997-08-19 Sun Microsystems, Inc. Method and apparatus for an improved optimizing compiler

Also Published As

Publication number Publication date
EP0749067A2 (en) 1996-12-18
JPH096627A (ja) 1997-01-10
KR970002621A (ko) 1997-01-28
DE69620057D1 (de) 2002-05-02
DE69620057T2 (de) 2002-09-05
US5842021A (en) 1998-11-24
KR100215502B1 (ko) 1999-08-16
EP0749067A3 (en) 1997-05-14
CN1143774A (zh) 1997-02-26
TW434512B (en) 2001-05-16
CN1122216C (zh) 2003-09-24
EP0749067B1 (en) 2002-03-27

Similar Documents

Publication Publication Date Title
JP3650649B2 (ja) 最適化装置
Chow et al. Effective representation of aliases and indirect memory operations in SSA form
US6427234B1 (en) System and method for performing selective dynamic compilation using run-time information
US6662354B1 (en) Determining destinations of a dynamic branch
Chambers et al. An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes
CN107608677B (zh) 一种编译处理方法、装置及电子设备
US6131189A (en) System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
US7120898B2 (en) Intermediate representation for multiple exception handling models
JP3602857B2 (ja) 多機種対応型情報処理システム、および、方法
US6286135B1 (en) Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
JP3311462B2 (ja) コンパイル処理装置
Heydon et al. Caching function calls using precise dependencies
JP4844971B2 (ja) インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
Bik et al. Compilation techniques for sparse matrix computations
US7036118B1 (en) System for executing computer programs on a limited-memory computing machine
US11526433B2 (en) Data structure allocation into storage class memory during compilation
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
Ittah et al. Enabling dataflow optimization for quantum programs
Wolf et al. Hybrid cache analysis in running time verification of embedded software
Böckle Exploitation of fine-grain parallelism
Krall Implementation techniques for Prolog.
Wendt Fast code generation using automatically-generated decision trees
Nielsen et al. Optimizing dynamic class composition in a statically typed language
Heitzinger Macros
Nejadfard Context-aware automated refactoring for unified memory allocation in NVIDIA CUDA programs

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041109

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050221

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20090225

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20100225

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100225

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110225

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120225

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees