JP4105264B2 - コンパイラ - Google Patents

コンパイラ Download PDF

Info

Publication number
JP4105264B2
JP4105264B2 JP32082397A JP32082397A JP4105264B2 JP 4105264 B2 JP4105264 B2 JP 4105264B2 JP 32082397 A JP32082397 A JP 32082397A JP 32082397 A JP32082397 A JP 32082397A JP 4105264 B2 JP4105264 B2 JP 4105264B2
Authority
JP
Japan
Prior art keywords
predicate
code
relationship
data flow
type code
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
JP32082397A
Other languages
English (en)
Other versions
JPH10187463A (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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of JPH10187463A publication Critical patent/JPH10187463A/ja
Application granted granted Critical
Publication of JP4105264B2 publication Critical patent/JP4105264B2/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/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space

Landscapes

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

Description

【0001】
【発明の属する技術分野】
本発明は、コンピュータ・システムにおけるプログラミング言語コンパイラに関するもので、特に、述語型コードの直接分析を含む述語型コード・コンパイラに関するものである。
【0002】
【従来の技術】
周知の通り、コンピュータ・システムは典型的には、中央処理装置(CPU)またはマイクロプロセッサとして知られているプロセッサを1つまたは複数含む。プロセッサは、典型的には、コンピュータ・システムにおける種々のタスクを実行するためソフトウェア・プログラムの命令を実行する。プロセッサは機械語だけしか理解し解釈することができないので、ソフトウェア・プログラムの命令は機械語形式(すなわちバイナリ形式)をしている。機械語命令は、本明細書において、以下、機械コードまたは目的コードと呼ぶ。
【0003】
機械語は書いたり理解するのが非常に困難であるので、ソフトウェア・プログラムの命令を人間が読める形式でコード化または定義する(Cおよびフォートランのような)高水準原始プログラミング言語が開発された。そような原始プログラミング言語ソフトウェア・プログラムを原始コードと呼ぶ。原始コードは、プロセッサによって実行される前にコンパイラ・プログラムによって機械コードに変換または翻訳される必要がある。
【0004】
初期の先行技術プロセッサは、典型的には、単一命令単一データ(すなわちsingle instruction single dataであって以下頭文字をとってSISDと略称する)プロセッサである。典型的SISDプロセッサは、単一の命令ストリームおよび単一のデータ・ストリームを受け取る。SISDプロセッサは、各命令を順次実行し、単一の記憶域にあるデータを処理する。しかしながら、このようなSISDプロセッサのアアーキテクチャは、高い処理スループットを達成する上で障害を持つ。
【0005】
プロセッサの処理スループットを増加させるため、多くの並列処理アーキテクチャが開発されてきた。そのような並列処理モデルの1つのタイプは、命令レベルの平行プロセッサとして知られている。このようなプロセッサは、instruction-level parallelの頭文字をとってILPプロセッサと呼ばれる。ILPプロセッサにおいては、(スケジューリングおよび同期決定を行う)計算処理の基本単位は、個々のadd(加算)、multiply(乗算)、load(ロード)またはstore(記憶)のようなプロセッサ命令である。相互に依存関係のない命令が並列的にロードされ実行される。ILPプロセッサを使用すれば、プログラム実行の間、命令のスケジューリングまたは同期決定を行う必要はない。決定の一部は、プログラムのコンパイルの間に行うことができる。例えば、コンパイラが2つの動作が独立している(すなわちどちらも入力として他方の結果を必要としない)ということを証明することができれば、それら動作は並列に実行することができる。
【0006】
しかしながら、プログラム・コードの中には頻繁にかつ予測できない分岐命令があって、大量の命令レベルの並列化の開拓にとって主要な障壁となる場合がある。これは、分岐命令の中には、典型的には、分岐遅延または予測エラー負荷を伴うものがあり、そのため実行時に処理が停止することがあるからである。加えて、分岐命令は、典型的には、命令レベルの平行に関する限りコードのスケジューリング範囲を制限する。分岐動作は、分岐と呼ばれる。
【0007】
分岐を除去し、命令レベル並列化を向上させるため、新しいアーキテクチャ・モデルが提案されている。そのようなモデルにおいては、各プロセッサ演算は、ブール値を持つソース・オペレンドによってガードされる。オペランドの値は、演算が実行されるかまたは無効にされるかを決定する。このようなアーキテクチャ・モデルは述語型実行と呼ばれ、ブール値を持つソース・オペランドは、述語と呼ばれる。命令セット・アーキテクチャの観点から見れば、述語型実行の主要機構は、各演算をガードする述語および述語を計算処理するために使用される一組のcompare-to-predicate演算である。述語型実行は、典型的には、多くの分岐を完全に除去し、基本ブロックの中でコードを移動させる規則を一般化させている。多くの場合、全非周期的な制御フロー・サブグラフが単一で分岐のないコード・ブロックに変換される。
【0008】
分岐を適切な述語計算およびガードと置き換えるプロセスは、if変換または述語変換と呼ばれる。if変換の結果として生ずるコードは、述語型コードと呼ばれる。図1のAは、図1のBに表されるプログラムに関する伝統的コードを示す。図1のCは、図1のAの伝統的コードから変換された述語型コードを示す。図1のCから観察されるように、実行を制御する明示的分岐は、演算に関するガード述語、および、適切な述語値を計算するcompare-to-predicate演算と置き換えられている。すべての非分岐命令は、if変換の間に述語化されている。結果は、単一で分岐のない述語型コードとなっている。
【0009】
【発明が解決しようとする課題】
しかしながら、述語型コードが従来型コンパイラによってコンパイルされる時問題が発生する。これは、従来型コンパイラのデータ・フロー分析ツールが、典型的には、述語型コードをコンパイルする時述語の間の関係を分析しないためである。図2は、述語型コードをコンパイルするための従来技術のコンパイラ50を示す。図2からわかるように、コンパイラ50は、if変換システム51、スケジューラ/レジスタ割当機構52およびデータ・フロー分析システム53を含む。しかしながら、データ・フロー分析システム53は、オリジナル・コードのデータ依存性を分析するだけで、述語型コードの述語間の関係に関する情報をそのデータ・フロー分析へ組み入れない。このため、典型的には、データ・フロー分析システムは、述語型コードの実行時動作について不正確な仮定を行うか、あるいは、何ら仮定を行わずそのためスケジューリングやレジスタ割り当てのような重大な分野で過度に保守的結果を招くこととなる。図3は、図2のコンパイラによって生成される図1のCのコードの保守的スケジューリングを示す。図3は、述語型コードをコンパイルするため従来技術のアプローチを使用する場合の欠点を示している。従って、述語型コードにおける述語間の関係を分析して述語コードの実行時性能を最適化するコンパイラが必要とされている。
【0010】
【課題を解決するための手段】
本発明の1つの特徴は、述語型コードのコンパイルを最適化することである。本発明の別の特徴は、述語型コードの実行時性能を向上させることである。本発明の更に別の特徴は、述語型コードをコンパイルする時述語型コードの述語関係を開拓するコンパイラを提供することである。更にまた、本発明の1つの特徴は、述語型コードの述語関係を記憶する述語型コード・コンパイラに関する述語照会システムを提供し、それによってコンパイラが述語関係を使用して、スケジューリング、割り当ておよび最適化などのデータ・フロー分析を実施することを可能にする点である。
【0011】
本発明の述語型コード・コンパイラは述語型コードの述語表現を取り扱いそして照会を行うことによって述語型コードのデータ・フロー特性を分析するデータ・フロー分析システムを含む。本発明は、更に、述語型コードをコンパイルするコンパイラのための述語反応分析機構を提供する。該述語反応分析機構は、述語型コードの局所的/大域的述語関係を記憶しその局所的/大域的述語関係に関する照会に回答する述語照会システムを含む。
【0012】
【発明の実施の形態】
本発明のいくつかの実施形態を説明する以下の詳細な記述は、記述を明解にするため特定の用語を使用する。しかしながら、本発明は使用されるそれら特定の用語に限定されるものではなく、むしろ、実質的に同等の成果を達成するように実質的に同等の形態で動作する技術的に等価なものすべてを含む。
【0013】
図4は、述語型実行をサポートするプロセッサ102を含むコンピュータ・システム100を示す。述語型実行の主な特徴は、付加的ブール・オペランドおよび述語を計算処理する一組のcompare-to-predicate(対述語比較)演算命令である。述語型実行をサポートするため、プロセッサ102は、述語を記憶する一組の述語レジスタ(図示されていない)を含む。述語レジスタ・ファイルは、命令形式拡張としてプロセッサ102のALU(すなわち算術論理ユニット)(これもまた図示されていない)に接続している。述語レジスタ・ファイルの各レジスタは、演算または命令の実行をガードするために使用される述語入力(すなわち述語)を記憶する。そのような演算は述語型演算と呼ばれる。演算に関する述語が1(すなわち真)の値を持つ時、演算は通常通り実行する。述語がゼロ(すなわち偽)の値を持つ時、演算の実行は無効にされる。これは、機械状態の変化が起こらないことを意味する。
【0014】
加えて、プロセッサ102の命令セットは、compare-to-predicate演算を含む。compare-to-predicate演算は述語を計算処理して、その結果を述語レジスタ・ファイルの述語レジスタに書き込む。compare-to-predicate演算の各々は、2つの述語レジスタに書き込むことができる。
【0015】
本発明の1つの実施形態において、プロセッサ102によって実行されるcompare-to-predicate演算の各々は、以下の形式を持つ。
P1, P2=cmpp <d1> <d2> (r1 <cond> r2) if q
上記形式において、
・ p1およびp2は、宛先述語レジスタ・オペランド(すなわち述語)である。
・ cmppは、比較命令コードの総称である。
・ <d1>および<d2>は、比較演算に関するアクションおよびモードを指定する2字記述子である。例えば、アクションは、記述子の最初の文字によって指定される無条件(u)、条件つき(c)、並列OR(o)および並列AND(a)のアクションを含む。各アクションは、記述子の2番目の文字によって指定される通常モード(n)および補完モード(c)を持つ。
・ "r1 <cond> r2"は、実際の比較を指定する。例えば、<cond>は、"<"(より小)、">"(より大)、"="(等しい)、"≦"(以下)または"≧"(以上)である。
・ qは、比較演算に関する述語レジスタ・オペランドである。qはガード述語として出現するが、それは比較演算データ入力としてのみ認識されるだけである。プロセッサ102はcompare-to-predicate演算に関して上記以外の実行形式をサポートすることもできるであろう。
【0016】
述語型実行は、プロセッサ102上で動く従来型コードが述語型コード(例えば図1のCの述語型コード)へif変換されることを必要とする。このことは、コードの各命令が1つの述語を持つ述語型とされ、述語を計算処理するため1組のcompare-to-predicate演算が追加されることを意味する。if変換プロセスが述語を計算処理するため無条件および並列ORアクションのみを必要とするので、以下においては、主としてこれら2つのアクションに関して記述を行う。無条件アクションによって計算処理される述語は、単一条件に基づいて実行する命令に関して有用である。並列ORアクションによって計算処理される述語は、1つのブロックの実行を複数の条件によって可能とすることができる場合に有用である。図5は、通常(normal)および補完(complement)の両モードにおける無条件および並列ORアクションの実行動作を示すテーブルである。各エントリは、宛先述語に関する結果を記述する。注意すべき点ではあるが、宛先には値を割り当てられるか、不変("-"として示されている)のままとする場合もある。図5からわかるように、無条件比較演算は、常に、その宛先レジスタに1つの値を書き込む。このように、入力述語が比較演算に関するガード述語として出現するが、それは、比較演算への入力オペランドとして認識されなければならない。
【0017】
図4に示される本発明の1つの実施形態において、コンピュータ・システム100は、パーソナル・コンピュータ、ノート・パソコン、パームトップ・コンピュータ、ワークステーション、メインフレーム・コンピュータまたはスーパー・コンピュータである。代替実施形態において、コンピュータ・システム100は、その他のタイプのコンピュータ・システムであることもできる。例えば、コンピュータ・システム100は、ネットワーク・サーバまたはビデオ会議システムでもあり得る。
【0018】
プロセッサ102はバス101に接続する。メモリ104がまたコンピュータ・システム100に備わる。メモリ104はバス101に接続し、典型的には、プロセッサ102によって実行されるべき情報および命令を記憶する。メモリ104は、種々のタイプのメモリの形態で実施することができる。例えば、メモリ104は、RAMや不揮発性メモリによって実施される。更に、メモリ104の実施は、RAM、ROM、電子的に消去可能な不揮発性メモリのいずれかまたはそれらの組み合わせも可能である。
【0019】
コンピュータ・システム100は、また、プログラム、データおよびその他の情報を記憶する大容量記憶装置107を含む。プログラムは、プロセッサ102によって実行され、プロセッサ102によって実行される前にメモリ104にダウンロードされる必要がある。
【0020】
ディスプレイ121は、コンピュータ・システム100のユーザに情報を表示するためバス101に接続される。キーボードまたはキーパッド入力装置122がバス101に接続される。コンピュータ・システム100の付加的入力装置は、マウス、トラックボール、トラックパッドまたはカーソル方向キーのようなカーソル制御装置123である。コンピュータ・システム100に含められる可能性のあるもう1つの装置は、ハード・コピー装置124である。ハード・コピー装置124は、テキストや画像情報を紙、フィルムまたは同様のタイプの媒体に印刷するためコンピュータ・システム100で使用される。
【0021】
コンピュータ・システム100は、また、他の周辺装置126を含む。そのような他の装置126は、フロッピー・ディスク・ドライブ、デジタル信号プロセッサ、スキャナ、LANまたはWAN(ワイド・エリア・ネットワーク)コントローラ、モデム、CD−ROMドライブなどを含む。コンピュータ・システム100は、上述されたコンポーネントのいくつかを含むことなく動作する場合もある。図4は、コンピュータ・システム100の基本コンポーネントのいくつかを示してはいるが、コンピュータ・システム100におけるその他のコンポーネントまたはコンポーネントの組合せを排除することを意図してはいない。
【0022】
コンピュータ・システム100は、また、(図6に示される)プログラミング言語コンパイラ200を含む。コンパイラ200は、プロセッサ102上で実行され、原始コード202を述語型機械コード202にコンパイルする。コンパイルされた述語型機械コード202は、次に、大容量記憶装置107に記憶される。述語型機械コード202がプロセッサ102によって実行されるべき時、述語型機械コード202は、プロセッサ102によってメモリ104に持ち込まれる。
【0023】
コンパイラ200は、どのような種類のコンパイル・プログラムでもよい。例えば、原始コード201がフォートラン・プログラミング言語で書かれていれば、コンパイラ200はフォートラン・コンパイラである。原始コード201がCプログラミング言語で書かれていれば、コンパイラ200はCプログラミング言語コンパイラである。
【0024】
コンパイラ200は、先ず、原始コード201(例えば図1Aの原始コード)を述語型コード(例えば図1Cの述語型コード)に変換する。術語型実行をサポートするプロセッサ102に対する高品質術語型機械コードを生成するため、コンパイラ200は、述語型コードのスケジューリングおよび割当てに先立ち、述語型コードの述語間の関係に関する情報をそのデータ・フロー分析に取り入れなければならない。
【0025】
本発明の1つの実施形態に従って、コンパイラ200は、コンパイルされつつある述語型コードに対して述語反応データ・フロー分析を実行する。コンパイラ200によって実行される述語反応データ・フロー分析は、(1)述語型コードのデータ・フロー特性を分析し、(2)述語型コードの述語表現を取り扱いそして照会を行うことによって分析されたデータ・フロー特性を術語型コードに注釈として付加する。述語反応分析は述語型コードに対して直接実行されるので、オリジナルの制御フローへの対応関係は必要とされない(すなわち分析はオリジナルの原始コードに依存しない)。分析は、本発明の1つの実施形態に従うコンパイラ200の分析機構によって実行される。
【0026】
データ・フロー特性は、演算の間の値のフローに付随する特性である。演算は、制御フローおよび術語型実行に従って条件付きで実行される。1つの例は、フロー依存分析であって、これは、1つの演算によって作成される値が後続の演算によって使用されるか否かを判断する。代替的形態としては、述語型コードは、述語型コード・ブロックの間の分岐命令をなおも含むこともできる。この場合、術語反応データ・フロー分析は、分岐による条件つき実行の存在に適応することができる。
【0027】
より具体的に述べれば、コンパイラ200は、述語型コードにおけるcompare-to-predicate演算または命令を分析して、述語の間の関係を決定する。上述のように、これらの演算または命令は述語を計算処理するために使用される。関係は、2つの述語の互いに素のような概念、または、または述語pが別の述語qの部分集合である(すなわちpが真であれば必ずqが真である)という関係を含む。次に、これらの関係は、ユニークなデータ構造(すなわちパーティション・グラフ)として把握される。次に、このユニークなデータ構造を使用して、各データ・フロー特性が保持する実行を表現する述語表現(すなわち記号的ブール表現)が表現され取り扱われる。コンパイラ200の構造は、図7乃至図27を参照して、以下詳細に記述する。
【0028】
図7は、図6のコンパイラ200の詳細を示すブロック図である。図7に示されるように、コンパイラ200は、コンパイラ200のフロントエンド209に接続したif変換システム210を含む。コンパイラ200は、また、if変換システム210に接続した述語型コード分析システム220、および、述語型コード分析システム220に接続したスケジューラおよびレジスタ割り当て機構230を含む。フロントエンド209は、既知の機能を実行するもので、いかなる既知のコンパイラ・フロントエンドによってでも実施されることができる。if変換システム210もまた、図4のプロセッサ102の実行形式をサポートするコンパイラのいかなる既知のif変換システムによってでも実施することができる。スケジューラおよびレジスタ割り当て機構230は、ILPスケジューリングを実行することができるコンパイラのいかなる既知のスケジューラおよびレジスタ割り当て機構によってでも実施することができる。
【0029】
フロントエンド209は、原始コード201(図5)を受け取り、その原始コード201を中間コードに変換する。中間コードはif変換システム210に渡される。if変換システム210は、既知の方法で中間コードを述語型中間コード(すなわち述語型コード)に変換する。次に、中間述語型コードは、述語型コード分析システム220によって処理される。述語型コード分析システム220は、述語型中間コードを処理してそのコードから述語関係を抽出する。これは、原始コードを述語型コードに変換する際if変換システム210が述語関係を採用するからである。述語型コード分析システム220は、次に、抽出した述語関係を使用して、コードのデータ依存性(すなわちスケジューリング制約または先行制約)を分析し、分析したデータ依存性をコードに注釈として付加する。言い換えると、述語型コード分析システム220は、ILPスケジューリングにとって臨界的な先行エッジ(すなわちスケジューリング)を正確に生成するため述語の間の関係を開拓する。そこで、コードは、注釈をつけられた先行エッジを含む注釈付き述語型中間コードになる。注釈付き述語型中間コードは、次に、ILPスケジューリングおよびレジスター割当てを行うためスケジューラおよびレジスタ割り当て機構230へ送られる。スケジューラおよびレジスタ割当て機構230は、既知の方法でILPスケジューリングおよび割当て機能を実行する。
【0030】
代替的方法として、述語型コード分析システム220は、逆アセンブラ(図示されていない)を経由して述語型機械コードに直接適用されることができる。そのようなシステムを使用して、例えば、異なるプロセッサを持つ異なるコンピュータ・システムに関して述語型機械コードを再スケジュールすることができる。このプロセスは目的コード変換として知られている。
【0031】
本発明の1つの実施形態に従って、述語型コード分析システム220は、if変換システム210に直接接続して述語型中間コードを受け取る。述語型コード分析システム220が述語型中間コードに対して直接分析を行うので、オリジナルの制御フローに対する対応関係は必要とされない。このようにして、(1)述語型コードのスケジュージュリング制約(すなわちデータ依存性)が、スケジューリングおよびレジスタ割り当てに先行してコードに注釈として付加され、(2)分析がオリジナル原始コードの制御フローに依存しないことが可能となる。言い換えると、分析はオリジナル原始コードおよび述語型コードが生成される方法を知っている必要がない。図8は、図7の述語型コード分析システム220をより詳細に示す。
【0032】
図8の説明の前に用語を若干定義する。
1. 述語ブロック:直線的シーケンスの述語型演算である。述語ブロックは、一般的には、単一入口単位出口の制御フロー領域によって形成される。
2. 実行集合:Pと表記される述語pに関する実行集合は、述語pが真を割り当てられるトレースの集合である。実行トレースは、述語ブロックの実行の間、述語変数に割り当てられるブール値のレコードである。本明細書において、すべての可能な実行トレースの集合を表記するため"1"を使用する。述語pの場合、Pは、いかなる述語pに関しても1の部分集合(すなわちP⊆1)である。
3. パーティション・グラフ:パーティション・グラフは、そのノードが実行集合を表し、そのラベルをつけられたエッジがノード間のパーティション関係を表す有向非巡回グラフである。具体的には、共有ラベルrがそれらエッジのすべてが同じパーティションに属することを示すとすれば、パーティションU=M|Nは、ラベルをつけられたエッジU→rMおよびU→rNによって表される。パーティション・グラフがすべてのノードがそこから到達できる先行ノードを持たないユニークなノードを含むとすれば、そのパーティション・グラフは完成品である。余計なものを減らすため、エッジは(単一パーティションを表す)同一ラベルを用いて線引きされ、従って、エッジ・ラベルが省略される。
4. 述語表現:述語表現は、実行集合を表現する記号的表現である。述語表現の基本的記号は、個々の述語に関する実行集合の名前、例えばP、Q、1などである。基本表現は、演算子和(+)、差(−)および積(・)を使用して結合される。対応する集合演算子を基本実行集合に適用することによって形成される実行集合として述語表現は解釈される。
【0033】
図8に示されるように、述語型コード分析システム220は、走査機構301、構築機構303、述語照会システム304およびデータ・フロー分析サブシステム302を含む。走査機構301は、if変換システム210(図7)から述語型中間コードを受け取るように接続される。走査機構301は、スケジューラおよびレジスタ割り当て機構230に接続するデータ・フロー分析システム302に接続される。構築機構303はまた走査機構301に接続している。述語照会システム304は、構築機構303およびデータ・フロー分析サブシステム302に接続している。
【0034】
1つの実施形態において、述語型コード分析システム220の構成要素301から304の各々は、ソフトウェア手段によって実施される。代替的には、述語型コード分析システム220の構成要素301から304の各々またはいくつかは、ハードウェアまたはファームウェア手段によって実施することもできる。
【0035】
走査機構301は、コードにおける述語間の局所的関係を抽出するために使用される。述語型コードの述語関係は、局所的関係および大域的関係を含む。局所的関係は、1つのcompare-to-predicate演算によって読み取られるかまたは書き込まれる述語の間の関係を指す。言い換えると、局所的関係は"cmpp"演算から来る。大域的関係はその他すべての関係を指す。一般的には、局所的関係の各々は、述語の実行集合の間のパーティション関係として記号を用いて表現される。例えば、図1のCから観察されるように、述語pおよびqの間の関係(例えばpはqと互いに素であるという関係)は、局所的関係と見なされる。同様に、述語q、rおよびsの間の関係(例えばrとsは互いに素で、q=r+sという関係)は局所的関係と考えられる。
【0036】
局所的関係を抽出するため、走査機構301は、先ず、述語型コードを連続した静的な単一の割り当て形式に変換する。これによって後続の処理が簡単になる。次に、走査機構301はこの形式を処理して、述語の局所的関係を検出する。図9は、走査機構301のプロセスの詳細を示す。
【0037】
図9において、プロセスはステップ330から始まる。ステップ331において、図8の走査機構301は述語型中間コードを受け取る。ステップ332において、走査機構301はコードを単一の目標順次形式に変換する。この変換は、コードにおける無条件および並列or演算をread-modify-write順次演算に置き換える。図10は、単一目標順次形式を例示するテーブルである。図10からわかるように、宛先述語値は、述語入力値および比較条件のブール関数である。走査機構301は、既知の記述を使用してこの変換機能を実行することができる。
【0038】
ステップ333において、走査機構301はコードを静的単一割り当て形式(この形式をstatic single assignmentの頭文字をとって以下SSA形式と呼称する)に変換する。このステップにおいて、各変数が異なるフェーズで個別に確認されることができるようにするため、走査機構301はコードにおける変数の名前を変更する。例えば、変数tが何度もコードの中で定義されるとすれば、走査機構301は、各定義毎に変数tの名前を変える(例えばt1、t2、t3などに変える)。この技法は値の番号付けと呼ばれる。値の番号付けを実行するため、各変数に関連づけられるカウンタが使用される。カウンタは各変数の定義毎に増分され、変数の連続的使用において添え字として使用される。ステップ334において、走査機構301は、順次SSA形式の述語型コードの比較条件を正規化し、入力オペランドは辞書の順に並べられる。例えば、(a≧b)の正規化比較条件は、!(a<b)である。この場合、!は否定を意味する。正規化および値番号付けによって、補集合および合同のようなその他の関係および意味合いを単一ハッシュ関数を用いて検出することが可能となる。次に、走査機構301は、順次SSA形式の正規化述語型コードをデータ・フロー分析サブシステム302(図8)に送る。図11は、図1のCの述語型コードの変換され正規化された順次SSA形式を示す。図11からわかるように、t1およびpは同等述語である。述語型コードの初期分析の間、そのような同等関係が検出され、単一記号述語に対応付けされる。
【0039】
順次SSA形式におけるコードの述語型演算のシーケンスを所与として、走査機構301は演算を順次走査する。比較演算が処理される場合、比較オペランドの述語記号に関連するパーティション関係が提供される。これはステップ335において走査機構301によって行われる。
【0040】
ハッシュ・テーブルは、このフェーズの間に割り当てられるソースおよび述語記号における述語名の間の対応関係を記録する。1から始まる整数がノード名として使用される。初期的には、ハッシュ・テーブルは、1にマップされる真の述語を含む。比較演算は順次処理され、ハッシュ・テーブルは、比較表現から記号名への対応付けおよび記号名から述語レジスタへの対応付けを追跡するように更新される。各比較演算毎に、右辺は、比較条件を正規化し述語オペランドを記号名と置き換えることによって、短縮される。
【0041】
走査機構301は、lookup_AND_stringルーチン、scan_opsルーチンおよびlookup_OR_stringルーチンを実行することによってSSA形式のコードを走査する。図12および図13は、局所関係を抽出するため述語ブロックを走査する上記ルーチンを示す。これらルーチンをその他の形態でプログラムすることも可能である。
【0042】
メイン・ルーチンはscan_opsであって、述語ブロックにおけるcompare-to-predicate演算に対して繰り返し動作する。遭遇するcompare-to-predicate演算毎に、比較演算右辺およびガード述語が、ハッシュ・キーの役目を果たすストリングに正規化される。lookup_AND_stringおよびlookup_OR_stringルーチンは、無条件およびor型compare-to-predicate演算からのキーをそれぞれ処理する。両方のルーチンは、比較演算によって計算処理される述語変数に対応する記号名を返す。両方のケースにおいて、計算処理のための名前がすでにハッシュ・テーブルに存在しなければ、テーブルにエントリ(すなわち項目)が作成される。ハッシュ・テーブルにエントリを追加することの結果として、新しいパーティション関係が生成される場合がある。
【0043】
図12および図13のルーチンを使用して、図11に示されるコードからどのように局所的関係が抽出されるか1例を以下に示す。正規化される比較演算および削除される非比較演算を持つ図11のコードを以下に再掲する。以下の表記で"true"は真を意味する。
p = !(a < b)・true
q = (a < b)・true
t1 = !(a < b)・true
t2 = t1 + !(c=d)・q
s = !(c=d)・q
r = !(c=d)・q
演算は順次処理され、次のような効果を発生する。
・ 初期ハッシュ・テーブルは、真を1にマップして実行集合の記号名を作成する。
・ p = !(a < b)・true。これはp= !(a < b)・1に短縮される。ルックアップの間、右辺およびその補語が初期テーブルに追加され(図14のA参照)、パーティション関係1=2|3が作成される。
・ q =(a < b)・true。これは、q=(a < b)・1に短縮され、更にq=3に短縮される。
アクション:記号3に関してソース名リストにqを追加する。
・ t1 = !(a<b)・true。これはt1 =2に短縮される。アクション:記号2に関してソース名リストにt1を追加する。
・ t2 = t1 + !(c=d)・q。これはt2=2+!(c=d)・3に短縮される。
ルックアップの間、"!(c =d)・3"およびその補完関係式は、ハッシュ・テーブルに追加され(図14のB参照)、パーティション関係3=4|5が出力される。外部表現は更にt2 =2+4に短縮され、それはハッシュ・テーブルに追加され(図14のB参照)、パーティション関係6=2|4が出力される。これはS=5に短縮することができる。
アクション:記号5に関してソース名リストにsを追加する。
・ r= !(c=d)・q。これはr=4に短縮することができる。
アクション:記号4に関してソース名リストにrを追加する。
・ 最終的ハッシュ・テーブルおよび出力された最終的パーティション関係が図15に示されている。これらの関係は、1=2|3、3=4|5および6=2|4である。
【0044】
図8に戻ると、走査機構301は、述語型コードから局所的関係を抽出した後、抽出した局所的関係を構築機構303へ送る。構築機構303は局所的関係を結合することによってコードの大域的関係を決定する。例えば、1= P|QおよびQ=R|Sという関係がわかれば、pはrおよびsの両方と互いに素であることを導出することができる。コードから抽出された局所的関係を用いてパーティション・グラフを構築し、次にパーティション・グラフを完成させることによって、構築機構303は大域的関係を決定する。図16は、構築機構303がパーティション・グラフを構築し完成するプロセスを示す。
【0045】
図16において、プロセスはステップ370から始まる。ステップ371において、構築機構303はパーティションのリストという形式で局所的関係を受け取る。ステップ372において、構築機構303は、受け取った局所的関係をノードおよびエッジとして単に表現することによって初期的パーティション・グラフ400を構築する。図18のAは、1=P|Q、Q=R|SおよびT2=P+Rという局所的関係を持つ図11の述語型コードから構築機構303が構築した初期パーティション・グラフ400を示す。図18のAから観察できるように、すべてのノードにはルートから到達することができないので、この初期パーティション・グラフ400は完全なグラフではない。例えばノードT2はルートから到達できない。この原因は、構築されてない制御地域に対応しそのパーティションがor型比較から作成されるノードは、初期的に到達可能ではないためである。
【0046】
ステップ373において、構築機構303は初期パーティション・グラフを完成させる。初期パーティション・グラフを完成させるため、すべてのノードがルートから到達可能となるように、既存のパーティションと整合する追加パーティションを組み入れる必要がある。構築機構303は、下記のようなルーチンを実行することによってパーティション・グラフを完成させる。
1. Lをパーティション・グラフのルート・ノードから到達できないパーティションのリストとする。更に、リストLにおけるパーティションはそれらが走査の間に出現した順序で発生させる。
2. Lの各パーティションをp=m|nとして、各パーティション毎に、以下を実行する。
・ lcaをmおよびnの最小共通先祖とすれば、lcaはルートから到達できる。
・ lcaは今やpおよびrに細分化できる。ここで、rはlcaに対してpの相対的補完集合である。
・ rがパーティション・グラフの中にノードとして存在しなければ(すなわちrel_compが複数のエレメントを持つノード集合を返せば)、相対的補集合を表すためノードrをルートとするパーティション・サブツリーを作成する(図17参照)。このツリーは単純連鎖とすることができる。
【0047】
図17のルーチンを別の形態で表すことも可能である。完成されたパーティション・グラフは、局所的関係を大域的関係に組み合わせるデータ構造であって、述語関係に関する一般的照会に応答できる形式をしている。
【0048】
上記プロセスを実行することによって、構築機構303は、図18のAの初期パーティション・グラフ400を図18のBの完成パーティション・グラフ410に完成させる。ここで、図18のAの初期パーティション・グラフ400を検証することによって、構築機構303は、ノードT2はノード1から到達することはできないが、その後続ノードPおよびRは(Qを経由して)ノード1から到達できると判断することができる。また、構築機構303はそのノード1自体がPおよびRの最小共通先祖であると判断することができる。かくして、1に関するT2の相対的補集合(すなわち1-T2)は、(1-R)-Pとして計算される(先祖Mに関するノードNの相対補集合は、MからNへのいかなる経路に沿っても、ノードの兄弟の和集合を集めることによって検出される。例えば、PおよびSは、1からRへの経路上のノードの兄弟であるので、1-R=P+Sである)。従って、1-T2=(1-R)-P=(P+S)-P=(P-P)+S=Sである。従って、1=T2|Sである。このパーティション(すなわち1=T2|S)が次にグラフに追加され、パーティション・グラフ410(図18B)が完成する。ステップ374において、完成したパーティション・グラフが述語照会システム304(図8)に記憶される。プロセスはステップ375で終了する。図18のBのパーティション・グラフ410から観察できるように、述語pおよびsは互いに素である。
【0049】
図8に戻れば、述語照会システム304はデータ・フロー分析サブシステム302にインターフェースする。述語照会システム304は、構築機構303から受け取る完成パーティション・グラフを記憶し、そのパーティション・グラフを使用して、データ・フロー分析サブシステム302からの照会に回答する。データ・フロー分析サブシステム302は、SSA形式の述語型コードを分析してコードのデータ・フロー特性を決定する。言い換えれば、データ・フロー分析サブシステム302は、(1)コードのデータ依存性、(2)上下に明確になった定義および使用、および(3)レジスタ割当ての間の有効な範囲および干渉情報を計算する。コードのデータ・フローを分析する時、データ・フロー分析サブシステム302は、対応する照会コマンドを述語照会システム304に送ることによって,コードの述語関係に関する照会を生成する。次に、述語照会システム304は、述語関係照会の各々が真であるか偽であるかを決定するため対応する照会ルーチンを実行させる。図19乃至図23は、述語照会システム304に関する種々の照会ルーチンを示す。これらの照会ルーチンは別の形式で実施するこもできる。照会ルーチンを実行した後、述語照会システム304は、照会の各々が真であるか偽であるか、データ・フロー分析サブシステム302に通知する。
【0050】
例えば、データ・フロー分析サブシステム302がコードの述語pおよびqに出会う時、サブシステム302は、述語pが述語qの部分集合であるか否かを知る必要がある。この場合、サブシステム302は、is_disjoint(p, q)およびis_subset(p, q)照会コマンドを述語照会システム304に対して出す。次に、述語照会システム304は照会の各々が真であるか偽であるかを決定するため対応する照会ルーチンを実行させる。
【0051】
データ・フロー分析サブシステム302から出される照会コマンドは以下のものを含む。
・ true_expr():実行の全体集合を表す述語表現。
・ false_expr():実行の空集合を表すヌル述語表現。
これらの2つのコマンドは、(後述の)データ・フロー・ベクトルの述語表現を適切なデフォルト値に初期化するために使用される。例えば、生存性分析において、あらゆるベクトルは、存在しないことを表す偽の表現に初期化される。
・ lub_sum(p,ε):P∪ε⊆ε'であるような最小ε'。
・ glb_sum(p,ε):P∪ε⊇ε'であるような最大ε'。
これらの2つのコマンドは、ガード述語の下のポイントにおける特性を生成するために使用される。最小上限と最大下限の間の選択は、解決されるデータ・フロー問題によって定まる。例えば、生存性分析において、xがガード述語pの下で使用される演算の直後、表現εによって表される実行に変数xが存在すれば、演算の直前に、表現ε+pによって表される実行の中にxは存在する。生存性は「いかなる経路の」問題であるので、実行集合の過剰近似は保守的であり、従って、本発明はlub_sum(p,ε)を使用してε+pを計算する。「すべての経路」問題に関しては、実行集合は、過小近似化されなければならない。このように、述語表現は、glb_sum(p,ε)を使用して計算されることができる。
・ lub_diff(p,ε):ε-p⊆ε'であるような最小ε'。
・ glb_diff(p,ε):ε-p⊇ε'であるような最大ε'。
これらのコマンドは、ガード述語の下のポイントにおける特性を無効にするために使用される。例えば、生存性分析において、xがガード述語pの下で使用される演算の直後、表現εによって表される実行に変数xが存在すれば、演算の直前に、表現ε-pによって表される実行の中にxは存在する。生存性は「いかなる経路の」問題であるので、実行集合の過剰近似は保守的であり、従って、本発明はlub_diff(p,ε)を使用してε-pを計算する。
・ is_disjoint(p,ε):P∩ε=0であれば真である。このコマンドは、ガード述語の下のポイントにおいて特性がなんらかの実行に含まれているかを調べるために使用される。例えば、2つの変数について、一方が他方の定義ポイントに存在すれば、それらは干渉している(すなわち異なる物理レジスタに割り当てられなければならない)。変数xが述語pの下で定義されるポイントにおいてεで表される実行に変数yが存在すれば、εがPと互いに素でなければ、それら変数は干渉している。これはis_disjoint(p,ε)を使用して検査される。
・ is_subset(p,ε):Pがεによって表される実行集合の部分集合であれば真である。このコマンドは、ガード述語の下のポイントにおけるすべての実行に特性が含まれているかを調べるために使用される。
【0052】
述語表現の変数は、個々の述語に関する実行集合を示す記号であり、それらはパーティション・グラフのノードによって明示的に表される。述語関係に関する照会に効率的にかつ正確に応答し述語表現を取り扱うため、照会ルーチンは、述語表現を1の論理和形式(1-dnf)として知られている個々の記号の論理和に制限する。そのような表現は、記号のリストとして、または記号当たり1ビットを持つ(すなわちパーティション・グラフの中のノード当たり1ビット)を持つビットベクトルとして記憶されることができる。
【0053】
図19のAは、記号ペアの間の論理和を検査する照会ルーチンを示し、図19のBは、記号の間の論理和および述語表現(短縮された1-dnf形式)を検査する照会ルーチンを示す。偽表現εfalseは、単に述語記号の空らのリストである点注意する必要がある。真表現εtrueは、1を含むリストであり、パーティション・グラフのルートである。ルーチンは、PおよびQが論理和部分に含まれているようなパーティションを検出することによって、2つの記号PおよびQの間の論理和を示すことを試みる。そのようなパーティションが存在しなければ、PおよびQは相互に交わると仮定される。
【0054】
図20は部分集合関係を検査する照会ルーチンを示す。パーティション・グラフにおいてノードPからノードQへの逆経路が存在すれば、実行集合PはQの部分集合である。部分集合関係は、支配および事後支配に対して同様であるが、述語計算の一時的順序には反応しない。
【0055】
図21は、単一記号を述語表現に総和するルーチンを示す。表現に加えられるべき新しい記号が、表現に既に含まれている記号の部分集合である時、sum_reduceルーチンが実行される。この場合、新しい記号が追加され、結果として生ずる表現は再帰的に短縮される。
【0056】
図22および図23は、記号Pを述語表現から減ずるルーチンを示す。ここでは近似が必要である。記号Pが表現において記号Qの部分集合である時、Qに対するPの相対補集合でQを置き換えることによって、Q-Pが計算される。これは図23のAのapprox_diffルーチンによって実行される。表現においてPがQと共通部分を持ち、部分集合でも上位集合でもなければ、集合の差を表すため近似計算が必要とされ、これは、図22のBのrel_cmplルーチンによって行われる。集合差のいかなる上位集合も有効な近似である。このケースでは、PおよびQの最小共通先祖に関するPの相対補集合は、図23のBのfind_lcaルーチンによって近似される。
【0057】
図8に戻って、データ・フロー分析サブシステム302が、述語反応ビットベクトル分析を実行して、制御フロー・グラフのあらゆるポイントにおいて実行集合に関する特性があるか否かを計算する。各変数は、すべてのビットベクトル内の特定の位置に対応する。各ベクトル位置は、単一のビットではなく、述語表現を持つように拡張される。演算が述語pの下の特性を生成する時、そのポイントにおけるPのすべての実行について特性が存在し、従って、集合Pがそのポイントにおいて実行集合に加えられる。演算が述語qの下の特性を無効にすれば、Qはそのポイントにおいて実行集合から差し引かれる。このケースでは、実行の何らかの部分集合に特性が存在するか否かを検査するように、制御フロー・グラフの1つのポイントにおける特性を検査する概念が拡張される。これらの表現の取り扱いは、述語照会システム304に対する上述の照会コマンドを使用して実行される。
【0058】
述語反応ビットベクトル分析は、フロー分析および生存性分析を含む。フロー分析はスケジューリングのために使用され、生存性分析はレジスタ割当てのために使用される。図24は、2つの命令の間の種々のタイプのフロー依存性を示す。既知の通り、1つのポイントからxの使用点までxの定義を含まない経路が存在すれば、変数xは制御スロー・グラフのそのポイントにおいて生存している。フロー分析と生存性分析の相違は、フロー分析が制御フロー・グラフを前方に進むのに対して、生存性分析は制御フロー・グラフを後方に伝播する。
【0059】
述語反応生存性分析において、コードにおける変数各々毎に1つの位置を持つ述語表現のベクトルが使用される。各述語表現は対応する変数がそのポイントで生存している実行集合を表現する。各演算が逆順に取り扱われるにつれ、述語表現は更新される。
【0060】
演算において、E-は演算の直前の表現を示すために使用され、E+は演算の直後の表現を示すために使用される。例えば述語pによってガードされる変数xの使用を考察する。xの使用は、例えば(lub_sumを使用する)演算E- x=E+ x+Pにおいて、演算の直前に集合Pにおけるすべての実行においてxの生存性を生成する。述語qによってガードされるxの定義は、例えば(lub_diffを使用する)演算E- x=E+ x-Qにおいて、集合Qにおけるすべての実行においてxの生存性を抹消する。述語rによってガードされる変数yの定義において、xが述語rの下で生存していれば、すなわちE+ x∩R≠0ならば、yはxを干渉する。干渉は、is_disjointルーチンを使用して検査される。!disjはis_disjointルーチンの補完を表す。
【0061】
図25は、図11のコードの一部に関して図8のデータ・フロー分析サブシステム302によって実行される述語反応ビットベクトル分析のプロセスを示す1例である。図25は、簡略化と明示のため、図11のコードの変数xに関する分析プロセスだけを示している。
【0062】
各演算に対応するGEN、KILLおよびTEST関数がある。これらの関数は、プログラムにおけるそのポイントにおけるデータ・フロー情報を扱う。これらの関数は、データ・フロー値に対する演算の影響を表す。各演算は、また、プログラムのそのポイントにおけるデータ・フロー値のサンプリングを行う関連TEST関数を持つ。依存分析において、TEST関数が真を返す時データ依存エッジが作成される。
【0063】
図25からわかるように、データ・ベクトルおよび使用ベクトルが変数xに対して用意される。分析が前向きの順に実行されるので、2つのベクトルは初期的に偽に設定される。代替的に、ベクトルを初期的に真に設定することも可能である。次に、通常の定義および使用に関しGEN、KILLおよびTEST処理関数(S4、S5、S9およびS11という)演算に適用される。各演算において、定義は使用の前に処理される。
【0064】
演算S4において、GEN、KILLおよびTESTが適用される。ここでは、すべての定義ベクトル位置についてデータベクトルが偽(すなわちD[S4, S5, S9]=false)であるので、TESTはスキップされる。KILL処理は、データ・ベクトルの中のすべての定義ベクトル位置が偽(false)のままであると判断する。この時点で、S4ベクトル(すなわちD[S4])に関するデータ・ベクトル位置がPに等しいとGEN処理は判断する。次に、新しい結果がS4に関するデータ・ベクトル位置に書き込まれる。
【0065】
S5演算においては、GEN、KILLおよびTEST規則はデータ・ベクトルのそれぞれのベクトル位置だけに適用される。KILL処理はS4に関するデータ・ベクトル位置(すなわちD[S4])がPであり、S5およびS9の各々に関するデータ・ベクトル位置が偽のままであると判断する。GEN処理は、S5に関するデータ・ベクトル位置がQになると判断する。TEST処理は、S4およびS5演算の間に依存性がないと判断する。次に、データおよび使用ベクトルが更新される。
【0066】
演算S9において、KILL処理はD[S4]がPであり、[S5]はRであり、D[S9]は偽のままであると判断する。GEN処理は、S9に関するデータ・ベクトル位置がSになると判断する。TEST処理は、S4およびS9演算の間に依存性がないと判断する。TEST処理は、また、S5およびS9の間に出力依存性が存在すると判断する。データおよび使用ベクトルが更新される。
【0067】
演算S11は変数xに関する使用演算であるので、KILL処理は存在しない。GEN処理は、S11に関する使用ベクトル位置がT2であると判断する。TEST処理は、S4とS11演算の間およびS5とS11の間にフロー依存性があると判断する。TEST処理は、また、S9およびS11演算の間に依存性がないと判断する。
【0068】
次に、データ依存性の注釈がコードに加えられ、変数xに関する(図26の)注釈付き制御フロー・グラフが取得される。次に、注釈付きコードは(図8の)スケジューラ230によってスケジュールされかつレジスタ割り当てされる。図27は図11のコードがスケジュールされたコードを示す。
【0069】
図26および図27からわかるように、S4およびS5演算は、依存性を持たないので、同じサイクルにスケジュールされる。同様に、S9およびS11演算は、依存性を持たないので、同じサイクルにスケジュールされる。結果として、同じコードに関して、従来技術では(図3のように)5サイクルを要するのに対して、本発明ではわずか3サイクルでコードは実行される。
【0070】
以上、本発明を特定の実施形態を参照して記述したが、本発明の理念および範囲を逸脱することなく種々の修正および変更を上記実施形態に加えることが可能である点は当業者に明白であろう。従って、本明細書の仕様および図面は、例示の目的のもので、本発明をそれらに限定するためのものであると見なされるべきではない。
【0071】
本発明には、例として次のような実施様態が含まれる。
(1)述語型コードをコンパイルするコンパイラであって、述語型コードの述語表現を取り扱い照会を行うことにより述語型コードのデータ・フロー特性を分析するデータ・フロー分析システム、を備えるコンパイラ。
(2)述語型コードの述語関係を記憶する述語照会システムを更に備え、それによって上記データ・フロー分析システムがこの述語照会システムに照会して述語型コードの述語表現を取り扱うことが可能となる、上記(1)に記載のコンパイラ。
(3)上記データ・フロー分析システムが、述語表現を正確でかつ効率的に取り扱いながら、述語型コードの述語表現の結果を近似化させる、上記(1)に記載のコンパイラ。
(4)上記データ・フロー分析システムが、該コンパイラの述語変換システムと該コンパイラのスケジューラ/レジスタ割当機構の間に接続され、上記データ・フロー分析システムが分析されたデータ・フロー特性を述語型コードに注釈として付加する、上記(1)に記載のコンパイラ。
(5)上記スケジューラ/レジスタ割当機構が上記データ・フロー分析システムに直接接続され、原始コードを述語型コードに変換する述語変換システムから、述語型コードではなく上記注釈付き述語型コードを受け取る、上記(4)に記載のコンパイラ。
【0072】
(6)述語型コードをコンパイルするコンパイラにおいて使用される述語反応分析機構であって、局所的および大域的述語関係を記憶して局所的および大域的述語関係に関する照会に回答する述語照会システムを備える述語反応分析機構。(7)述語型コードの局所的述語関係を決定する走査機構と、述語型コードの大域的述語関係を決定する構築機構と、を更に備える上記(6)に記載の述語反応分析機構。
(8)上記走査機構が、述語型コードの述語を連続した静的単一割り当て形式に変換する変換機構と、述語型コードの比較条件を正規化し、正規化した述語型コードを走査して局所的述語関係を決定する正規化機構とを含む、上記(7)に記載の述語反応分析機構。
(9)上記正規化機構が、述語型コードにおける合同および補完述語を検出する、上記(8)に記載の述語反応分析機構。
(10)上記構築機構が、述語型コードの大域的述語関係を決定するため、上記局所的述語関係からパーティション・グラフを構築し、更に該パーティション・グラフに関するユニークなルート・ノードを形成する単一の共通先祖を作成することによって該パーティション・グラフを完成させる、上記(7)に記載の述語反応分析機構。
【0073】
(11)上記述語照会システムが、述語型コードの第1の述語が述語型コードの第2の述語と互いに素であるか否かを決定するため上記完成パーティション・グラフを検査する第1の命令セットと、述語型コードの第1の述語が述語型コードの第2の述語の部分集合あるか否かを決定するため上記完成パーティション・グラフを検査する第2の命令セットと、を含む、上記(7)に記載の述語反応分析機構。
(12)上記述語照会システムが、述語型コードの第1の述語を述語型コードの述語表現に追加するため上記完成パーティション・グラフを検査する第3の命令セットと、述語型コードの第1の述語を述語型コードの述語表現から差し引くため上記完成パーティション・グラフを検査する第4の命令セットと、を含む、上記(11)に記載の述語反応分析機構。
(13)上記データ・フロー分析システムが、述語型コードを受取り述語型コードのデータ・フロー特性を分析するため上記述語照会システムに接続され、述語型コードのデータ・フロー特性を分析する際に述語型コードの述語関係に関して上記述語照会システムに照会を行う、上記(6)に記載の述語反応分析機構。
(14)上記データ・フロー分析システムが、述語表現を正確でかつ効率的に取り扱いながら、述語型コードの述語表現の結果を近似化させる、上記(13)に記載の述語反応分析機構。
【0074】
(15)述語型コードをコンパイルするコンパイラ・システムにおいて、述語反応データ・フロー分析を行う方法であって、述語型コードの述語および述語表現を取り扱って該述語型コードのデータ・フロー特性を分析するステップと、述語型コードの述語および述語表現を取り扱う際に述語型コードの述語関係を記憶する述語照会システムに対して述語型コードの述語および述語表現に関する照会を送付するステップと、上記述語照会システムから述語型コードの述語および述語表現に関する照会結果を受け取るステップと、を含む述語反応データ・フロー分析方法。
(16)近似化の結果が正確でかつ効率的であるようにしながら、上記取り扱われる述語型コードの述語表現の結果を近似化させるステップを更に含む、上記(15)に記載の述語反応データ・フロー分析方法。
(17)上記述語型コードに上記分析されたデータ・フロー特性を注釈として付加するステップを更に含む、上記(15)に記載の述語反応データ・フロー分析方法。
(18)上記述語型コードのコンパイルが最適化されるように、上記注釈をつけられた述語コードをスケジュールしレジスタ割り当てするステップを更に含む、上記(17)に記載の述語反応データ・フロー分析方法。
【0075】
(19)述語型コードをコンパイルするコンパイラにおいて、述語型コードを分析する方法であって、述語型コードの局所的関係を決定するステップと、述語型コードの大域的関係を決定するステップと、述語型コードの局所的関係および大域的関係を述語照会システムに記憶して、述語コードのデータ・フロー分析の間にそれら関係に関する照会が行われるようにするステップと、を含む述語型コード分析方法。
(20)上記局所的関係を決定するステップが、上記述語型コードの述語を順次静的単一割当て形式に変換するステップと、上記述語型コードの述語を正規化し正規化した述語コードを走査することにより上記局所的関係を決定するステップとを更に含む、上記(19)に記載の述語型コード分析方法。
(21)上記大域的関係を決定するステップが、上記局所的述語関係に基づいてパーティション・グラフを構築するステップと、該パーティション・グラフに関するユニークなルート・ノードを形成する単一の共通先祖ノードを作成することによって上記パーティション・グラフを完成させるステップと、を更に含む上記(19)に記載の述語型コード分析方法。
(22)上記照会を可能にするステップが、述語型コードの第1の述語が述語型コードの第2の述語と互いに素であるか否かを決定するため上記完成パーティション・グラフを検査するステップと、述語型コードの第1の述語が述語型コードの第2の述語の部分集合あるか否かを決定するため上記完成パーティション・グラフを検査するステップと、述語型コードの第1の述語を述語型コードの述語表現に追加するため上記完成パーティション・グラフを検査するステップと、述語型コードの第1の述語を述語型コードの述語表現から差し引くため上記完成パーティション・グラフを検査するステップと、を更に含む上記(19)に記載の述語型コード分析方法。
【0076】
【発明の効果】
本発明のコンパイラによって、述語型コードにおける述語間の関係の分析を通して最適化された目的コードが生成され、従って、述語型コードの実行時性能が最適化される。
【図面の簡単な説明】
【図1】Aは従来型のプログラム・コードを示し、Bはその制御フローを示し、Cはそのif変換された述語型コードを示すブロック図である。
【図2】従来技術の述語型コード・コンパイラを示すブロック図である。
【図3】図2のコンパイラによってコンパイルされた後の図1Cの述語型コードを示す図表である。
【図4】述語型実行をサポートするプロセッサを含むコンピュータ・システムを示すブロック図である。
【図5】図4のプロセッサの比較演算の実行動作を示す図表である。
【図6】本発明の1つの実施形態に従って原始コードを述語型機械コードに変換する図4のコンピュータ・システムのためのコンパイラを示すブロック図である。
【図7】述語型コード分析システムおよび原始コードを述語型コードに変換するif変換システムを含む図6の述語型コード・コンパイラの構造を示すブロック図である。
【図8】述語型コード分析システムの構造を示すブロック図である。
【図9】図8の述語型コード分析システムの走査機構の動作の流れ図である。
【図10】述語型コードのcompare-to-predicate演算に関する単一目標順次形式を示す図表である。
【図11】図8の走査機構によって変換された図1Cの述語型コードの順次静的単一割当て形式を示すプログラム図である。
【図12】AおよびBそれぞれが、述語型コードから局所的述語関係を抽出する図8の走査機構の1つのルーチンを示すプログラム図である。
【図13】図12と同様に、述語型コードから局所的述語関係を抽出する図8の走査機構の1つのルーチンを示すプログラム図である。
【図14】AおよびBがそれぞれ、図11の述語型コードに関する種々の異なる段階でのハッシュ・テーブルの1つを示す図表である。
【図15】図14と同様に、図11の述語型コードに関する種々の異なる段階でのハッシュ・テーブルの1つを示す図表である。
【図16】図8の述語型コード分析システムの構築機構の動作の流れ図である。
【図17】相対的補集合パーティション・サブグラフを示す図表である。
【図18】Aが図11の述語型コードの初期パーティション・グラフを、Bが完了パーティション・グラフを、それぞれ示す図表である。
【図19】AおよびBはそれぞれ、述語型コードの述語関係を照会する図8の述語照会システムの照会ルーチンの1つを示すプログラム図である。
【図20】AおよびBはそれぞれ、図19と同様に、述語型コードの述語関係を照会する図8の述語照会システムの照会ルーチンの1つを示すプログラム図である。
【図21】AおよびBはそれぞれ、述語型コードの述語表現を取り扱う図8の述語照会システムのルーチンの1つを示すプログラム図である。
【図22】AおよびBはそれぞれ、図21と同様に、述語型コードの述語表現を取り扱う図8の述語照会システムのルーチンの1つを示すプログラム図である。
【図23】AおよびBはそれぞれ、図21および図22と同様に、述語型コードの述語表現を取り扱う図8の述語照会システムのルーチンの1つを示すプログラム図である。
【図24】2つの命令の間の種々のタイプのフロー依存性を示すブロック図である。
【図25】図8のデータ・フロー分析サブシステムによって図11の述語型コードの変数xのフロー依存性を決定するプロセスを示す流れ図である。
【図26】図11の述語型コードの変数xに関する制御フロー・グラフを示すブロック図である。
【図27】本発明のコンパイラによってコンパイルされた後の図11のコードのスケジュールされたコードを示す図表である。
【符号の説明】
50、200 述語型コード・コンパイラ
51、210 if変換システム
52、230 スケジューラ/レジスタ割当機構
53 データ・フロー分析システム
100 コンピュータ・システム
101 バス
102 プロセッサ
104 メモリ
107 大容量記憶装置
201 原始コード
202 述語型機械コード
209 フロントエンド
220 述語型コード分析システム
301 走査機構
302 データ・フロー分析サブシステム
303 構築機構
304 述語照会システム
400 初期的パーティション・グラフ
410 完成パーティション・グラフ

Claims (5)

  1. プログラムの中間コードである述語型コードを解析するためのシステムであって、該述語型コードは、ブール値で表される述語が付加された演算文を含み、該ブール値が真の時には該演算文による演算が実行され、該ブール値が偽の時には該演算文による演算は無効にされ、
    前記述語型コードを処理して、該述語型コードから述語間の関係を抽出し、該述語間の関係を表すグラフを生成する手段と、
    前記グラフを記憶する記憶手段と、
    前記記憶手段に記憶された前記グラフを使用して、前記述語型コードのデータフロー特性を分析する手段であって、該データフロー特性は、前記述語型コードにおける演算間のデータ依存性を含んでおり、該データ依存性は、該演算をスケジューリングするのに用いられる、手段と、を備え、
    前記述語間の関係の抽出は、さらに、
    述語を生成する比較演算を含む演算文を、前記述語型コードから順次読み出し、該演算文の比較演算に記号を対応づけると共に、該記号に、該比較演算により生成される該述語を対応づけてテーブルに登録することを含み、該演算文に述語が付加されている場合には、該述語が、該述語に対応する前記記号で表されるように前記テーブルへの登録が行われ、さらに、該演算文が、2つの比較演算をOR演算する場合には、該2つの比較演算のそれぞれが、該比較演算に対応する前記記号を用いて表されるように、前記テーブルへの登録が行われ、該テーブルにおける前記記号に基づいて、前記述語間の関係が抽出される、
    システム。
  2. さらに、前記分析する手段は、述語照会システムおよびデータフロー分析システムを備えており、該データフロー分析システムからの前記述語間の関係を照会するための照会コマンドに応じて、該述語照会システムは、前記記憶手段に記憶されたグラフを使用して、該照会コマンドに対する回答を該データフロー分析システムに与え、該データフロー分析システムは、該回答を用いて前記データフロー特性を分析する、
    請求項1に記載のシステム。
  3. さらに、前記分析する手段は、前記述語型コードに、前記データフロー特性を示す注釈をつけて、注釈付きの述語コードを求め、前記スケジューリングには、該注釈付きの述語コードが使用される、
    請求項1または2に記載のシステム。
  4. 前記抽出された述語間の関係は局所的述語関係を表しており、前記生成する手段は、該局所的述語関係から前記グラフを生成することにより、局所的述語関係の組み合わせである大域的関係を求める、
    請求項1に記載のシステム。
  5. 前記生成する手段は、該グラフについて唯一のルートノードを形成する単一の共通の先祖を設けるよう、該グラフを生成する
    請求項4に記載のシステム。
JP32082397A 1996-11-26 1997-11-21 コンパイラ Expired - Fee Related JP4105264B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US756,423 1996-11-26
US08/756,423 US5920716A (en) 1996-11-26 1996-11-26 Compiling a predicated code with direct analysis of the predicated code

Publications (2)

Publication Number Publication Date
JPH10187463A JPH10187463A (ja) 1998-07-21
JP4105264B2 true JP4105264B2 (ja) 2008-06-25

Family

ID=25043410

Family Applications (1)

Application Number Title Priority Date Filing Date
JP32082397A Expired - Fee Related JP4105264B2 (ja) 1996-11-26 1997-11-21 コンパイラ

Country Status (4)

Country Link
US (1) US5920716A (ja)
EP (1) EP0844557B1 (ja)
JP (1) JP4105264B2 (ja)
DE (1) DE69727453T2 (ja)

Families Citing this family (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3234552B2 (ja) * 1997-09-30 2001-12-04 松下電器産業株式会社 最適化装置及びコンピュータ読取可能な記録媒体
US6128774A (en) * 1997-10-28 2000-10-03 Necula; George C. Safe to execute verification of software
US6249910B1 (en) * 1998-05-04 2001-06-19 Hewlett-Packard Company Apparatus and method for incrementally update static single assignment form for cloned variable name definitions
JP2000222218A (ja) * 1999-02-01 2000-08-11 Fujitsu Ltd コンパイル装置および記録媒体
US6505345B1 (en) * 2000-01-18 2003-01-07 Intel Corporation Optimization of initialization of parallel compare predicates in a computer system
US6637026B1 (en) * 2000-03-01 2003-10-21 Intel Corporation Instruction reducing predicate copy
JP3651774B2 (ja) * 2000-09-12 2005-05-25 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ及びそのレジスタ割付方法
US20030023959A1 (en) * 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
JP3612294B2 (ja) * 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
US6983275B2 (en) * 2002-04-16 2006-01-03 International Business Machines Corporation Optimizing database query by generating, determining the type of derived predicate based on monotonicity of the column generating expression for each remaining inequality predicate in the list of unexamined predicates
US7089542B2 (en) * 2002-12-13 2006-08-08 International Business Machines Corporation Method and apparatus for finding errors in software programs using satisfiability of constraints
US7275149B1 (en) * 2003-03-25 2007-09-25 Verisilicon Holdings (Cayman Islands) Co. Ltd. System and method for evaluating and efficiently executing conditional instructions
US7308682B2 (en) 2003-04-25 2007-12-11 Intel Corporation Method and apparatus for recovering data values in dynamic runtime systems
US7802076B2 (en) * 2004-06-24 2010-09-21 Intel Corporation Method and apparatus to vectorize multiple input instructions
US7673296B2 (en) * 2004-07-28 2010-03-02 Hewlett-Packard Development Company, L.P. Method and system for optional code scheduling
US20060247907A1 (en) * 2005-04-29 2006-11-02 Microsoft Corporation Deciding assertions in programs with references
US20070025420A1 (en) * 2005-05-16 2007-02-01 University Of Victoria Innovation And Development Corporation Transmission and detection in ultrawide band communications
US20060277456A1 (en) * 2005-06-07 2006-12-07 International Business Machines Corporation Method for handling annotations
CN1908895B (zh) * 2005-08-02 2010-05-05 国际商业机器公司 验证应用程序全球化问题的系统和方法
US8091079B2 (en) * 2007-08-29 2012-01-03 International Business Machines Corporation Implementing shadow versioning to improve data dependence analysis for instruction scheduling
US20100050132A1 (en) * 2007-09-11 2010-02-25 Daniel Shia System and GUI for specifying composite predicates and dynamic systems
US8181167B2 (en) * 2008-01-09 2012-05-15 Kan Zhao Method and system for presenting and analyzing software source code through intermediate representation
US9262140B2 (en) * 2008-05-19 2016-02-16 International Business Machines Corporation Predication supporting code generation by indicating path associations of symmetrically placed write instructions
US8327339B2 (en) * 2008-06-30 2012-12-04 Oracle America, Inc. Method and system for fast static taint analysis
US8589436B2 (en) 2008-08-29 2013-11-19 Oracle International Corporation Techniques for performing regular expression-based pattern matching in data streams
US20100153928A1 (en) * 2008-12-16 2010-06-17 Microsoft Corporation Developing and Maintaining High Performance Network Services
US8935293B2 (en) 2009-03-02 2015-01-13 Oracle International Corporation Framework for dynamically generating tuple and page classes
CA2675680C (en) * 2009-08-27 2013-05-14 Ibm Canada Limited - Ibm Canada Limitee Generating object code that uses calculated contents for a variable determined from a predicate
US8959106B2 (en) * 2009-12-28 2015-02-17 Oracle International Corporation Class loading using java data cartridges
US9430494B2 (en) 2009-12-28 2016-08-30 Oracle International Corporation Spatial data cartridge for event processing systems
US9305057B2 (en) 2009-12-28 2016-04-05 Oracle International Corporation Extensible indexing framework using data cartridges
CA2691851A1 (en) * 2010-02-04 2011-08-04 Ibm Canada Limited - Ibm Canada Limitee Control flow analysis using deductive reaching definitions
US8516229B2 (en) * 2010-02-05 2013-08-20 International Business Machines Corporation Two pass test case generation using self-modifying instruction replacement
US8713049B2 (en) 2010-09-17 2014-04-29 Oracle International Corporation Support for a parameterized query/view in complex event processing
US9177017B2 (en) * 2010-09-27 2015-11-03 Microsoft Technology Licensing, Llc Query constraint encoding with type-based state machine
US20120084537A1 (en) * 2010-09-30 2012-04-05 International Business Machines Corporation System and method for execution based filtering of instructions of a processor to manage dynamic code optimization
US9189280B2 (en) 2010-11-18 2015-11-17 Oracle International Corporation Tracking large numbers of moving objects in an event processing system
US8990416B2 (en) 2011-05-06 2015-03-24 Oracle International Corporation Support for a new insert stream (ISTREAM) operation in complex event processing (CEP)
US9329975B2 (en) 2011-07-07 2016-05-03 Oracle International Corporation Continuous query language (CQL) debugger in complex event processing (CEP)
US9262479B2 (en) 2012-09-28 2016-02-16 Oracle International Corporation Join operations for continuous queries over archived views
US9563663B2 (en) 2012-09-28 2017-02-07 Oracle International Corporation Fast path evaluation of Boolean predicates
US8732674B1 (en) * 2012-11-14 2014-05-20 Microsoft Corporation Revertable managed execution image instrumentation
US10956422B2 (en) 2012-12-05 2021-03-23 Oracle International Corporation Integrating event processing with map-reduce
US10298444B2 (en) 2013-01-15 2019-05-21 Oracle International Corporation Variable duration windows on continuous data streams
US9098587B2 (en) 2013-01-15 2015-08-04 Oracle International Corporation Variable duration non-event pattern matching
US9390135B2 (en) 2013-02-19 2016-07-12 Oracle International Corporation Executing continuous event processing (CEP) queries in parallel
US9047249B2 (en) 2013-02-19 2015-06-02 Oracle International Corporation Handling faults in a continuous event processing (CEP) system
US9418113B2 (en) 2013-05-30 2016-08-16 Oracle International Corporation Value based windows on relations in continuous data streams
US9507594B2 (en) * 2013-07-02 2016-11-29 Intel Corporation Method and system of compiling program code into predicated instructions for execution on a processor without a program counter
US9934279B2 (en) 2013-12-05 2018-04-03 Oracle International Corporation Pattern matching across multiple input data streams
US9182955B1 (en) 2014-06-06 2015-11-10 Microsoft Technology Licensing, Llc Data-dependent control flow reduction
US9244978B2 (en) 2014-06-11 2016-01-26 Oracle International Corporation Custom partitioning of a data stream
US9712645B2 (en) 2014-06-26 2017-07-18 Oracle International Corporation Embedded event processing
US9886486B2 (en) 2014-09-24 2018-02-06 Oracle International Corporation Enriching events with dynamically typed big data for event processing
US10120907B2 (en) 2014-09-24 2018-11-06 Oracle International Corporation Scaling event processing using distributed flows and map-reduce operations
WO2016183211A1 (en) * 2015-05-12 2016-11-17 Phase Change Software Llc Machine-based normalization of machine instructions
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
WO2017018901A1 (en) 2015-07-24 2017-02-02 Oracle International Corporation Visually exploring and analyzing event streams

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06507990A (ja) * 1991-05-24 1994-09-08 ブリティッシュ・テクノロジー・グループ・ユーエスエイ・インコーポレーテッド コンピュータのための最適化コンパイラ
US5293631A (en) * 1991-08-06 1994-03-08 Hewlett-Packard Company Analysis and optimization of array variables in compiler for instruction level parallel processor
EP0582738A1 (en) * 1992-08-12 1994-02-16 International Business Machines Corporation Language compiler
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
JPH06324881A (ja) * 1993-05-18 1994-11-25 Fujitsu Ltd メモリデータの重なり判定機能を備えたコンパイラ装置
US5627981A (en) * 1994-07-01 1997-05-06 Digital Equipment Corporation Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination
US5694539A (en) * 1994-08-10 1997-12-02 Intrinsa Corporation Computer process resource modelling method and apparatus
US5768592A (en) * 1994-09-27 1998-06-16 Intel Corporation Method and apparatus for managing profile data
US5664135A (en) * 1994-09-28 1997-09-02 Hewlett-Packard Company Apparatus and method for reducing delays due to branches
US5802373A (en) * 1996-01-29 1998-09-01 Digital Equipment Corporation Method for providing a pipeline interpreter for a variable length instruction set
US5748936A (en) * 1996-05-30 1998-05-05 Hewlett-Packard Company Method and system for supporting speculative execution using a speculative look-aside table

Also Published As

Publication number Publication date
DE69727453D1 (de) 2004-03-11
JPH10187463A (ja) 1998-07-21
EP0844557B1 (en) 2004-02-04
US5920716A (en) 1999-07-06
EP0844557A1 (en) 1998-05-27
DE69727453T2 (de) 2005-01-13

Similar Documents

Publication Publication Date Title
JP4105264B2 (ja) コンパイラ
Healy et al. Supporting timing analysis by automatic bounding of loop iterations
US6662354B1 (en) Determining destinations of a dynamic branch
Colin et al. Worst case execution time analysis for a processor with branch prediction
Pop et al. GRAPHITE: Polyhedral analyses and optimizations for GCC
US6286135B1 (en) Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
Johnson et al. Analysis techniques for predicated code
US8131768B2 (en) Symbolic program analysis using term rewriting and generalization
US9454350B2 (en) Extracting stream graph structure in a computer language by pre-executing a deterministic subset
US6588009B1 (en) Method and apparatus for compiling source code using symbolic execution
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
Kirner et al. Transformation of path information for WCET analysis during compilation
Singer Static program analysis based on virtual register renaming
De Carvalho et al. KernelFaRer: replacing native-code idioms with high-performance library calls
EP1107115A2 (en) Method and apparatus for compiling source code by flattening hierarchies
Arenaz et al. Xark: An extensible framework for automatic recognition of computational kernels
Horváth et al. Generic search plans for matching advanced graph patterns
Chen et al. Interprocedural probabilistic pointer analysis
Lee et al. Raive: Runtime assessment of floating-point instability by vectorization
US7673293B2 (en) Method and apparatus for generating code for scheduling the execution of binary code
Fahringer et al. A unified symbolic evaluation framework for parallelizing compilers
Way Procedure restructuring for ambitious optimization
Kurhe Debugging Optimized Programs using Black-Box Equivalence Checker
Jones Optimising Compilers
Gupta Predicting execution behavior for codesign systhesis using static analysis

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20041112

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20041112

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071009

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20071220

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20071226

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080204

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080327

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

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees