首页 / 专利库 / 电脑图像 / 着色器 / 顶点着色器 / Device and method for generating object

Device and method for generating object

阅读:884发布:2021-02-20

专利汇可以提供Device and method for generating object专利检索,专利查询,专利分析的服务。并且PROBLEM TO BE SOLVED: To provide a device and a method for generating object with which a parameter can be efficiently allocated to a register in optimum manner by coloring.
SOLUTION: When one register can be accessed as plural registers of small size, an interference graph and a stack for storing the apex of an interference graph based on this interference graph are generated and from this stack, the interference graph is reconstituted based on a coloring algorithm. Then, it is judged whether each apex can be piled on the stack or not while referring to information showing the correspondence of each apex and the usable register.
COPYRIGHT: (C)2000,JPO,下面是Device and method for generating object专利的具体信息内容。

【特許請求の範囲】
  • 【請求項1】 1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできるようなターゲット機械のためのオブジェクト生成装置であって、高級言語のソースコードに含まれる自動変数及び引数の集合と、前記高級言語を機械命令に翻訳する際に一時的に使用する一時変数とから、干渉グラフを生成する手段と、この干渉グラフに基づいて干渉グラフの頂点を格納するスタックを生成する手段と、前記スタックからカラーリングアルゴリズムに基づいて前記干渉グラフを再構成する手段と、
    夫々の頂点とその使用可能レジスタとの対応を示す情報を生成する手段とからなり、夫々の頂点がスタックに積めるかどうかの判断をその頂点の使用可能レジスタの情報を参照することにより行うことを特徴とするオブジェクト生成装置。
  • 【請求項2】 1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできるようなターゲット機械のためのオブジェクト生成方法であって、高級言語のソースコードに含まれる自動変数及び引数の集合と、前記高級言語を機械命令に翻訳する際に一時的に使用する一時変数とから、干渉グラフを生成する段階と、この干渉グラフに基づいて干渉グラフの頂点を格納するスタックを生成する段階と、前記スタックからカラーリングアルゴリズムに基づいて前記干渉グラフを再構成する段階と、
    夫々の頂点とその使用可能レジスタとの対応を示す情報を生成する段階とからなり、夫々の頂点がスタックに積めるかどうかの判断をその頂点の使用可能レジスタの情報を参照することにより行うことを特徴とするオブジェクト生成方法。
  • 说明书全文

    【発明の詳細な説明】

    【0001】

    【発明の属する技術分野】本発明は、オブジェクト生成装置及びオブジェクト生成方法に関し、特に、カラーリングによる変数のレジスタ割付を最適かつ効率的に行うことの可能なオブジェクト生成装置及びオブジェクト生成方法に関するものである。

    【0002】

    【従来の技術】レジスタ割付の代表的なアルゴリズムとしてカラーリング(彩色法)がある。 カラーリングの主なアルゴリズムは、まずすべての変数に対して干渉グラフを作成する。 次に干渉グラフから度数(その変数が干渉しているすべての変数の数)がk未満の頂点(変数)
    を順次取り除いていき、スタックに積む(スタックプッシュ)。 ここで、kとはターゲット機械(即ち,マイクロプロセッサなど)の使用可能なレジスタ総数である。
    すべての変数をスタックに積み、グラフが空になったならば、次にスタックから変数を順次取り出して(スタックポップ)干渉グラフを再作成していく。 このとき各頂点(変数)には、他のすべての干渉する頂点(変数)とは異なる色を塗るようにする。 これは、その変数を、レジスタを割り当てることである。 すべての頂点をスタックから取り出して、もとの干渉グラフが再現できたならばレジスタ割り当ては完了する。

    【0003】ここで先ず問題となるのは、まず非決定的な点がある点である。 即ち、干渉グラフからどのような順序で頂点を選ぶのか、また、スタックから取り出した頂点にどのように色を塗るのか、といった点である。 これらについては、様々な規則を用いることにより、ある程度望ましい色を塗る(レジスタを割り当てる)ことができるのだが、本発明とは直接関係しないので、ここでは省略する。

    【0004】次に問題となるのは、カラーリング途中でアルゴリズムの続行が不可能になる場合である。 実際のターゲット機械では、使用可能なレジスタ数kは有限であるため、干渉グラフのすべての頂点の度数がkより大になった場合には、もはやカラーリングを続行できない。 このような場合にはスピルアウト処理を行う。

    【0005】その次に問題となるのは、実際のレジスタ割付では、kの値が確定しないことである。 当然kの上限はターゲット機械の総レジスタ数であるが、各変数に対しては、コード生成上、さまざまな制約が課せられ、
    各変数に対して割り当て可能なレジスタの数や種類はばらばらとなる。 このような場合には、各変数に対して、
    使用可能なレジスタ数(最大度数)を設けることにより処理を行う。

    【0006】カラーリングの詳細なアルゴリズムについては、様々な文献があり、詳細はよく知られている。 例えば、コンパイラの本(Aho,Sethi,Ullman共著、原田訳、「コンパイラ」サイエンス社、ISBN4-7819-0586-
    2、または、佐々著、「プログラミング言語処理系」岩波書店、ISBN4-00-010345-8)を参照されたい。

    【0007】スタックに積む処理の途中で、すべての頂点の度数がkより大になった場合は、どの頂点を選ぶこともできないため、処理を続行できない。 このような場合は、残ったグラフの中から1つの頂点を取り除く。 この頂点についてはレジスタに割り当てることを断念し、
    メモリに割り当てることにする。 これにより、干渉グラフに対して再び処理を続行できる。 これがスピルアウトである。 この結果、再び頂点を選ぶことができなくなったときには、随時スピルアウトを行うことにより、処理を続けることができる。

    【0008】ここでも、残った干渉グラフの中からどの変数を選ぶか、という点が非決定的であるが、これも本発明とは直接関係しないので省略する。

    【0009】また、スピルアウトによりメモリ割付された変数に対するコードが不正となる場合があり、完全なコード生成ができない場合が生じるという問題点がある。

    【0010】このような場合、レジスタ割付を行った後、不正なコードに対する補正のコード(スピルコード)を挿入し、再びレジスタ割付を行うなどして対処する必要がある。

    【0011】通常のコンパイラでは、レジスタの使い方の制約、各コードに対してのコード生成上の制約が生じるため、各変数に対して割り当て可能なレジスタ数はばらばらとなる。 したがって、干渉グラフから各頂点を取り出す場合に、kとその頂点の度数との比較では、現実的ではない。

    【0012】しかしながら、各頂点に対して、その頂点が割り当て可能なレジスタ数を最大度数としてあらかじめ設定しておき、干渉グラフから頂点を取り除いていく段階で、その度数が最大度数未満の頂点を選ぶことにより処理を続けることが出来る。 これは、再びその頂点をスタックから取り出し干渉グラフに加えていく時に、必ず空いたレジスタを見つけることができるためである。

    【0013】以上のアルゴリズムは、RICSプロセッサのように1つの変数に1つのレジスタを割り当てることを前提としている。 しかしながらターゲット機械によっては、CISCプロセッサのように、1つのレジスタを小さいサイズのレジスタとしてアクセスできるという特徴を持つものがある。 即ち、1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできる場合がある。

    【0014】このような場合、小さいサイズの変数に割り当て可能なレジスタの総数(最大度数)は、見かけ上増加する。 しかしながら、その変数(頂点)と干渉する変数のサイズは一般にはばらばらであり、それよりも大きなサイズの変数との干渉による度数は、見かけ上増加する。

    【0015】ひとつの方法として、従来の度数と最大度数を利用し、最大度数はその頂点のサイズで数えられた割り当て可能なレジスタ総数とし、度数はその頂点と干渉する変数のサイズをその頂点のサイズで割った値の総数として代用する方法が挙げられる。

    【0016】しかしながら、その頂点に割り当て可能なレジスタは、その頂点をオペランドに持つ命令の種類によって制限がある。 この制限の為に、従来の度数と最大度数を利用する方法は、この方法は完全ではない。 途中で割り当て不可能となったり、必要以上のスピルアウトが起こる恐れがある。

    【0017】

    【発明が解決しようとする課題】以下、上記従来の方法に伴う問題点を生成オブジェクト効率とコンパイル時間の2点から説明する。 先ず、生成オブジェクト効率である。 従来の方法では、スタックに積めるかどうかの判断が不完全であるため、スタックを作成していく段階で不必要なスピルアウトを生じたり、スタックが空にできたにもかかわらず干渉グラフを再現できないといった問題を生じる。

    【0018】不必要なスピルアウトを発生した場合は、
    メモリアクセスが増えたりスピルコードが挿入されるためコード効率は悪化する。 また、スタックから頂点を取り出して干渉グラフを再現していく途中でカラーリングできなくなった場合は、さらにスピルアウトを行うか、
    最初からカラーリングをやり直すといった方法で回避する必要が生じる。 スピルアウトが増えれば当然コード効率は悪化する。

    【0019】次にコンパイル時間という点での問題点を説明する。 従来の方法では上記のように、スピルアウトが必要以上に行われた場合に、生成オブジェクトコードの効率が悪化する。 同時に、コンパイル処理においてもスピルコードを挿入するなどの追加処理が必要なため、
    コンパイル速度も低下する。

    【0020】一般にコンパイラの処理におけるレジスタ割付に費やす時間は大きいため、スピルアウトによりさらにコンパイル速度が低下すれば、使い勝手を大きく損なうことになる。

    【0021】従って、本発明の目的は、カラーリングによる変数のレジスタ割付を最適かつ効率的に行うことの可能なオブジェクト生成装置及び方法を提供することである。

    【0022】本発明の他の目的は、コードサイズや実行時間を短縮するオブジェクト(機械命令)を高速に生成することが可能なオブジェクト生成装置及び方法を提供することである。

    【0023】

    【課題を解決するための手段】本発明によれば、1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできる場合に、カラーリングアルゴリズムにおいて、
    スタックに積む頂点を選択する条件として、割り当て可能なレジスタマップを使用する。 これにより、1つのレジスタに1つの変数を割り当てる場合と同様の生成オブジェクト効率を実現する。

    【0024】従来のカラーリングにおいて、ある頂点を干渉グラフから取り除くときに度数が最大度数未満かどうかという比較は、あとから干渉グラフを再作成するときに必ず空きがあることを保証するためである。

    【0025】このアルゴリズムを1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできる場合にあてはめる場合、かならず空きがあることを保証するためには、その頂点に対して干渉しているすべての頂点のサイズと、その頂点が使用可能なレジスタマップを用いて考えることができる。

    【0026】その頂点を後でスタックから取り出して干渉グラフに加えていく段階で空きを確保するために、その時点で干渉するすべての頂点により使用可能なレジスタマップをふさがれた最悪の場合を考慮すればよい。

    【0027】現在の干渉グラフが後からどのような順序で再作成されるかは不明であるため、その時点での干渉する頂点によりもっとも速くレジスタマップが塗られていく場合を考慮する。

    【0028】この結果、使用可能レジスタマップに空きが残った場合、その頂点を選択することができる。

    【0029】即ち、本発明(請求項1)は、1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできるようなターゲット機械のためのオブジェクト生成装置であって、高級言語のソースコードに含まれる自動変数及び引数の集合と、前記高級言語を機械命令に翻訳する際に一時的に使用する一時変数とから、干渉グラフを生成する手段と、この干渉グラフに基づいて干渉グラフの頂点を格納するスタックを生成する手段と、前記スタックからカラーリングアルゴリズムに基づいて前記干渉グラフを再構成する手段と、夫々の頂点とその使用可能レジスタとの対応を示す情報を生成する手段とからなり、夫々の頂点がスタックに積めるかどうかの判断をその頂点の使用可能レジスタの情報を参照することにより行うことを特徴とするオブジェクト生成装置を提供する。

    【0030】従って、そのような構成によって、本発明によるオブジェクト生成装置では、ある頂点がスタックに積めるかどうかの判断を高速かつ効率的に行うことが出来る。

    【0031】本発明(請求項2)は、レジスタ割付処理でのカラーリングアルゴリズムにて、ある頂点がスタックに積めるかどうかの判断を、干渉する頂点の度数と使用可能なレジスタマップを用いて行う請求項1のオブジェクト生成装置を提供する。

    【0032】従って、そのような構成によって、本発明によるオブジェクト生成装置では、ある頂点がスタックに積めるかどうかの判断を、干渉する頂点の度数と使用可能なレジスタマップを用いて行う請求項5のオブジェクト生成方法を提供する。

    【0033】本発明(請求項3)は、上記請求項2において、レジスタ割付処理でのカラーリングアルゴリズムにて、ある頂点がスタックに積めるかどうかの判断を行う為の前記度数は、使用可能なレジスタの構成を分類し、夫々の干渉する頂点がどの分類に属するかという情報を含んでいることを特徴とする提供する。

    【0034】従って、そのような構成によって、本発明によるオブジェクト生成装置では、レジスタ割付処理に対象とするプロセッサのレジスタの構成を反映することができる。

    【0035】本発明(請求項4)は、レジスタ割付処理でのカラーリングアルゴリズムにて、ある頂点がスタックに積めるかどうかの判断を、干渉する他の頂点の使用可能レジスタマップと、その頂点の使用可能レジスタマップを用いて行う請求項2のオブジェクト生成装置を提供する。

    【0036】従って、そのような構成によって、本発明によるオブジェクト生成装置では、ある頂点がスタックに積めるかどうかの判断をより効果的に行うことが出来る。

    【0037】本発明(請求項5)は、1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできるようなターゲット機械のためのオブジェクト生成方法であって、高級言語のソースコードに含まれる自動変数及び引数の集合と、前記高級言語を機械命令に翻訳する際に一時的に使用する一時変数とから、干渉グラフを生成する段階と、この干渉グラフに基づいて干渉グラフの頂点を格納するスタックを生成する段階と、前記スタックからカラーリングアルゴリズムに基づいて前記干渉グラフを再構成する段階と、夫々の頂点とその使用可能レジスタとの対応を示す情報を生成する段階とからなり、夫々の頂点がスタックに積めるかどうかの判断をその頂点の使用可能レジスタの情報を参照することにより行うことを特徴とするオブジェクト生成方法を提供する。

    【0038】従って、そのような構成によって、本発明によるオブジェクト生成方法では、ある頂点がスタックに積めるかどうかの判断を高速かつ効率的に行うことが出来る。

    【0039】本発明(請求項6)は、レジスタ割付処理でのカラーリングアルゴリズムにて、ある頂点がスタックに積めるかどうかの判断を、干渉する頂点の度数と使用可能なレジスタマップを用いて行う請求項5のオブジェクト生成方法を提供する。

    【0040】従って、そのような構成によって、本発明によるオブジェクト生成方法では、干渉する頂点の度数を考慮することによって、ある頂点がスタックに積めるかどうかの判断をより効果的に行うことが出来る。

    【0041】本発明(請求項7)は、上記請求項6において、レジスタ割付処理でのカラーリングアルゴリズムにて、ある頂点がスタックに積めるかどうかの判断を行う為の前記度数は、使用可能なレジスタの構成を分類し、夫々の干渉する頂点がどの分類に属するかという情報を含んでいることを特徴とする提供する。

    【0042】従って、そのような構成によって、本発明によるオブジェクト生成方法では、レジスタ割付処理に対象とするプロセッサのレジスタの構成を反映することができる。

    【0043】本発明(請求項8)は、レジスタ割付処理でのカラーリングアルゴリズムにて、ある頂点がスタックに積めるかどうかの判断を、干渉する他の頂点の使用可能レジスタマップと、その頂点の使用可能レジスタマップを用いて行う請求項6のオブジェクト生成方法を提供する。

    【0044】従って、そのような構成によって、本発明によるオブジェクト生成方法では、ある頂点がスタックに積めるかどうかの判断をより効果的に行うことが出来る。

    【0045】

    【発明の実施の形態】以下、本発明の第1の実施形態によるオブジェクト生成装置を図を参照して説明する。

    【0046】本発明に係るオブジェクト生成装置のハードウエア構成を図1に示す。 即ち,以下で説明する各処理を行うためのMPUを含むコンピュータ1、ハードディスク装置などの内部記憶手段(図不示)、マウス5やキーボード6などの入手段、モニタ7やプリンタ9などの出力手段、及びCDーROM11やフレキシブルディスク13等の外部記憶媒体及びその駆動ドライブ15
    からなっている。 これらは通常の汎用コンピュータシステムを用いてもよい。 なお、前記MPUは、以下に説明する各処理等を行う演算部と、前記処理の命令を記憶する主記憶部とを具備する。

    【0047】コンパイラの処理の流れを元にした構成を図2に示す。 コンパイラは、高級言語で記述されたソースプログラムを入力とし、オブジェクトコードを生成するソフトウェアプログラムである。 C言語などのソースプログラムは、パーサ(字句解析、構文解析)をへて、
    中間コードに変換される。 その中間コードは最適化を経て、レジスタ割り付けを行うことによって機械語のコードに変換され、再度最適化を経てオブジェクトコードとして出力される。 図2は、ソースプログラムを中間コードに変換して、コード生成を行うコンパイラの構成であるが、コード生成を行うコンパイラもある。 ここで、中間コードからレジスタ割り付けを行う部分に本発明の特徴がある。 その処理は、図3に要約されている。 以下、
    順を追ってその内容を説明する。

    【0048】本発明の特徴は、スタック作成部に関するものである。 図3の干渉グラフが作成されるまでを以下に簡単に説明する。 ここでコンパイラとしてTLCS‐900
    をターゲットとしたコンパイラを例に取る。 図5にTLCS
    ‐900のレジスタ構成を示す。 本発明ではスタックポインタは直接関係ないので省略してある。

    【0049】一般に、コンパイラは図6のようなC言語プログラムを図7のような中間コードに変換し処理する。 図7では中間コードそのものは最適化されていないが、本発明は中間コードの最適化とは関係ないので説明上問題はない。

    【0050】図7の中間コードをもとに各変数(自動変数I、引数P、一時変数T)に対して、生存区間が重なっているかどうかを調べたものが図8であり、これを干渉グラフと呼ぶ。 図8の各変数に対して括弧中の数値はその変数に割り当てられるべきレジスタのサイズ(1、
    2、4バイト)である。 図9は、各変数に対して割り当て可能なレジスタの集合であり、以下割付可能レジスタマップと呼ぶ。

    【0051】尚、ここで、自動変数Iとは、高級言語のソースコードに元々含まれる変数であり、一時変数Tとは、コンパイラがコンパイルの際に一時的に生成する変数である。 勿論、自動変数Iとは、狭い意味での変数に限らず、一般的なメモリのデータ領域の場所(オブジェクト)を示すものであることは言うまでもない。 例えば、C++言語のクラスのインスタンスといったものも変数と考える。

    【0052】次に、本発明の実装方法について説明する。 現在の干渉グラフをGとする。 ある頂点xに対して、その頂点をスタックに積むことができるかどうかの判断を以下のように行う。 ここで、頂点xに対して干渉するすべての頂点の集合をAとする。 すべての頂点についてサイズが既知であるものとし、また、すべての頂点に対して使用可能なレジスタマップが既知であるものとする。 つまり、前処理として、それらを求めておく。

    【0053】xに対する使用可能レジスタマップmap
    を、すべてのAの要素に対し、相当するサイズのレジスタマップで塗っていく。 この塗り方をもっとも高速に塗りつぶすために、AをさらにサイズごとにA1、A
    2、. . . 、Anのようにグループ分けする。 ただし、
    A1から順にサイズが大きくなるものとする。 従って、
    TLCS‐900では、A1、A2、A3、A4の4つのグループ毎に処理を行う(ただしTLCS−900では、仕様上3バイトの変数の集合ABは存在しない)。

    【0054】まず、最もサイズの大きいAnの各要素(頂点)に対し、相当するサイズのレジスタマップで、
    mapを塗っていく。 もっとも高速にmapを塗るために、mapの空きをふさぐ割合が大きいように塗っていく。 つまり、最悪の状況を考える。

    【0055】Anのすべての要素について終了したら、
    順次An−1、. . . 、A2、A1の各要素についてm
    apを塗っていく。 途中でmapに空きがなくなった時点で、xはもはやスタックに積むことはできないと判断し、終了する。 すべての要素(頂点)について塗り終わった時点で、mapに空きがあれば、その頂点xをスタックに積むことが出来ることになる。

    【0056】以下、本発明の第2の実施形態によるオブジェクト生成装置を図を参照して説明する。 上記(1)
    のアルゴリズムにおいて、割り当て可能なレジスタマップを、それを特微づける何種類かの最大度数で表現することにより、(1)のアルゴリズムを高速に動作させることが可能になる。 これにより、1つのレジスタに1つの変数を割り当てる場合と同様の高遠なコンパイル速度を実現する。

    【0057】レジスタマップは一般的にビットマップで表現されるが、ビットマップを塗ったりビットマップの空きを検索するには時間がかかる。 従来の最大度数と度数の比較のような単純な算術演算を使用すれば非常に高速な処理が可能となるため、レジスタマップの情報を表現する何種類かの最大度数を導入し、この最大度数と度数の値からある頂点をスタックに積めるかどうかの判断を判断関数fにより決定する。 これにより高速な処理が可能となる。

    【0058】次に、本実施形態の実装方法について説明する。 ある頂点xに干渉する頂点の集合Aがあり、その集合Aの情報はサイズごとの要素数、即ち集合A1、A
    2、A3、. . . 、Anの要素数であり、度数d1、d
    2、. . . 、dnとして表現できる。 この度数の値は、
    スタックを作成するために干渉グラフから頂点を取り除く時点で、適切に更新されていくものとする。

    【0059】また、頂点xの使用可能レジスタマップm
    apを何種類かの最大度数(m1、m2、....mi)で表現する。 このとき、サイズjの頂点xがスタックに積めるかどうかの判断を、算術的関数fj(d1,d2,...,dn,m1,m
    2,...,mi)の値により判断する。 以下に説明するように、TLCS‐900の場合、N=4であり(ただし、d3は使用しない)最大でi=5となる。

    【0060】最大度数の数え方、関数fの決定方法については、ターゲット機械のレジスタ構成に依存する。 それぞれ非決定的ではあるが、TLCS‐900の場合については、以下のように定式化できる。

    【0061】TLCS―900の場合には、サイズが1、2、
    4バイトの3種類がある。 これらに対する添字を、それぞれ1、2、4で表す。 まず、サイズj(j=1,2,4)の頂点xについての度数を、d1,d2,d4とする。 次に頂点のサイズごとの最大度数を以下のように設定する。

    【0062】j=4の場合の使用可能レジスタマップは、XWA(またはXBCなど)が使用できるかできないかだけであり、空きがあるか、空きがないかだけで表現できる。 従って、最大度数は、m1(=msingle)の1種類で表現できる。

    【0063】j=2の場合の使用可能レジスタマップは、WAとQWA(またはBCとQBCなど)の両方が使用できる場合、それと、QWAが使用できないが、WAが使用できる場合などの2種類が考えられる。 前者のようなパターンを、m2(=mdouble)とし、後者のようなバターンをm1(=ms
    ingle)として表現する。

    【0064】j=1の場合の使用可能レジスタマップは、QW,QA,W,A(またはQB,QC,B,Cなど)の4つが使用できる場合、QA,W,Aの3つが使用できるがQWのみが使用できないような場合、QW,Wの2つが使用できてQ
    A,Aが使用できないような場合、W,Aの2つが使用できてQW,QAが使用できないような場合、Aだけが使用できる場合、の合計5つのパターンが考えられる。 それぞれのパターンについての最大度数を m5(=mquad),m4(=mtriple),m3(=mseparate),m2(=mdou
    ble),m1(=msingle) として表現する。

    【0065】以上で述べたレジスタマップと最大度数に関連する、single(シングル)、double(ダブル)、separa
    te(セパレート)、triple(トリプル)、quad(クワツド)の概念図を図16に示す。

    【0066】以上の設定方法により、図8、7の干渉する頂点と使用可能レジスタマップの情報を度数と最大度数に置き換えたものを図10に示す。

    【0067】次に判断関数fについて定式化する。 サイズj(j=1,2,4)の頂点xに干渉する他の頂点を考えた場合、そのサイズよりも小さいサイズの頂点はすべて頂点xの使用可能レジスタマップのサイズjの空きを1つずつ埋めていくことができるために、同じ度数として考えることが出来ることを考慮して、関数fを定式化する。

    【0068】j=4の場合、サイズに関係なくすべての頂点は等しくj=4のサイズで使用可能レジスタマップを塗ることが出来る。 したがって、f4(d1,d2,d4,msi
    ngle)の値は、d1+d2+d4<msingleならば真、そうでないならば偽である。

    【0069】j=2の場合、レジスタマップを早く塗るためにj=4サイズの干渉する頂点から塗る。 このとき、ダブルの空きがある箇所から塗るべきである。 j=
    4サイ_ズの頂点をすべて塗り終わった後で、ダブルが残った場合はそれらはシングル2つの空きと置き換えられる。 j=1のサイズの頂点はj=2のサイズの頂点として干渉すると考えることができる。 以上を定式化すると、f2(d1,d2,d4,mdouble,msingle)の値は、d4<mdo
    ubleのとき、d1+d2<msingle+(mdouble-d4)*2 ならば真、そうでないならば偽である。 d4>=mdoubleのとき、d
    1+d2+d4<msingle+mdoubleならば真、そうでないならば偽である。

    【0070】j=1の場合、もっとも小さいサイズであるため、3種類のサイズそれぞれの干渉する頂点について考慮する必要がある。 まず、もっとも大きなサイズj
    =4の干渉する頂点について塗っていく。 このとき、クワツド、トリプル、セパレート、ダブル、シングルの優先順位で空きを塗りつぶす。 セパレートとダブル以外については、この順で空きのマップが包含関係を持つているため、優先順位の正しさは直感的にわかるが、セパレートの優先順位がダブルよりも高い理由は以下のようになる。 サイズj=4の頂点に対してはどちらも同じ割合でレジスタマップを塗るために優劣はない。 サイズj=
    2の頂点に対してセパレートとダブルどちらを残すべきかという問題に帰着するが、サイズj=2の頂点に対して早く塗れるのはダブルであり、ダブルは後に残しておくべきである。 したがってサイズj=4については、セパレートから先に塗らなければならない。 サイズj=4
    の頂点で塗っていく途中でまったく空きがなくなった場合は偽である。 ここまでは、数式としては定義できないので、図11に処理フローとして定義する。 j=4についての処理が終わった後は、干渉する頂点のサイズはj
    =1、2だけであり、上述の関数f2に帰着できる。

    【0071】f1(d1,d2,d4,mquad,mtriple,msepara
    te,mdouble,msingle)の値は、上記の処理を行った後は、d4==0であり、mquad,mtriple,mseparate,mdoubl
    e,msingleは更新されているものとする。 この段階で偽が確定していない場合、関数の値は、f2(0,d1,d2,mquad*
    2+mtriple+mdouble,mtriple+mseparate*2+msingle)の値と一致する。 この判断関数を用いて図10からスタックを作成し、グラフ再現部によりレジスタ割付を行った結果と会わせて図12に示す。

    【0072】以下、本発明の第3の実施形態によるオブジェクト生成装置を図を参照して説明する。 第2の実施形態の方法でスタックを高速に作成している途中にスピルアウトの必要が生じた場合、別の方法で頂点をスタックに積むことができるかの判新を行い、スピルアウトを可能な限り回避するのが望ましい。

    【0073】第2の実施形態による判断処理はレジスタ割付処理における主要処理であり、処理時間は割り当て変数の総数の2乗以上で効いてくる。 従って高速性が要求されるが、比較的まれに発生するスピルアウトについては、できるだけスピルアウトを回避するために、スタックに積めるかどうかの再判断を行う。 本実施形態により、回避可能なスピルアウトを回避し、生成オブジェクト効率の向上を実現する。 本発明が適用されるのは、第2の実施形態とは異なり、比較的まれに動作する場合であり、低速でも間題にならないことを前提とする。

    【0074】以下、本実施形態の実装方法について説明する。 ここでは、判断関数fと同様、あらたな判断関数gを定式化する。

    【0075】ある頂点xの使用可能レジスタマップma
    pを、他の全ての干渉する頂点の使用可能レジスタマップで塗りつぶしていく。 すべての干渉する頂点について塗り終わった後、使用可能レジスタマップmapに頂点xのサイズでの空きがあれば関数gは真を返す。 即ち、
    頂点xはスタックに積める。

    【0076】残った空きは干渉するどの頂点でも使用可能ではないため、後から干渉グラフを再現したときに必ずその空きだけは塗られずに残つていることが保証される。 判断関数gについての処理フローを図15に示す。

    【0077】例として図13に示すような干渉グラフと使用可能レジスタマップが与えられている場合を想定する。 この場合に判断関数fを使用しても、どの頂点もスタックに積むことが出来ず、スピルアウトを起こさざるをえない。 しかしながら本発明の判断関数gを用いると、図14に示すように頂点I0を最初にスタックに積むことが出来る。

    【0078】この結果、スピルアウトを発生せずに図1
    4に示すようなレジスタ割付を行うことができる。 以上、説明した本発明の処理は、図4の処理フローのようにまとめられる。 これは、図3のように要約することができる。

    【0079】即ち、本発明によるスタック作成部は、ステップ401で、度数を計算する。 ステップ403で、
    最大度数を計算する。 ステップ405で、最初の候補x
    を取り出す。 ステップ407で、候補xがスタックに積めるかを判断関数fを使って判断する。 積める場合は、
    ステップ409で、スタックにPushして、干渉グラフを更新する。 ステップ411で、干渉グラフが空かどうかを判断し、空でなければ、ステップ405に戻る。 空なら、干渉グラフを再構成する。

    【0080】又、ステップ407で、候補xがスタックに積めない場合には、ステップ413で、更に候補が残っているかを判断する。 残っていれば、ステップ405
    に戻る。 残っていなければ、ステップ415で、再び最初の候補xに戻って、今度は候補xがスタックに積めるかをステップ417で判断関数gを使って判断する。 積める場合は、ステップ409で、スタックにPushして、
    干渉グラフを更新する。

    【0081】ステップ417で、候補xがスタックに積めない場合には、ステップ419で、更に候補が残っているかを判断する。 残っていれば、ステップ415に戻る。 残っていなければ、スピルアウトの処理に移行する。

    【0082】

    【発明の効果】以上説明したように、この発明によれば、高級言語を機械命令に翻訳するオブジェクト生成装置において、1つのレジスタを小さいサイズの複数のレジスタとしてアクセスできるようなターゲット機械のためのレジスタ割付をカラーリングあるアルゴリズムにて行う場合に、効率的なレジスタ割付を行うことにより生成したコードのコードサイズ、実行時間などのオブジェクト効率を向上できる。

    【0083】また、カラーリングアルゴリズムにおけるスタックプツシュにおいて、選択する頂点を選ぶ判断を高速に行うことにより、高速なレジスタ割付を行うことができる。

    【0084】本発明の効果を図17に示す。 ベンチマークプログラムStanford(C言語)を用いて、従来の方法と本発明の方法とによるレジスタ割付をそれぞれ行つた場合の生成オブジェクトの性能と、コンパイル時間を示す。 図17の結果から以上で述べた本発明の効果を認めることができる。

    【図面の簡単な説明】

    【図1】本発明に係るオブジェクト生成装置の構成図を示す図である。

    【図2】本発明が適用されるコンパイラの処理フローを示す。

    【図3】本発明によって、中間コードからレジスタ割り付けを行うまでの処理を示す。

    【図4】本発明の処理フローを示す。

    【図5】TLCS‐900のレジスタ構成を示す。

    【図6】簡単なC言語プログラムの例を示す。

    【図7】図6のプログラムを言語非依存の中間コードで表現した例を示す。

    【図8】図7の中間コード上の各変数に対してカラーリングでレジスタを割り付けを行った場合に作成すべき干渉グラフ

    【図9】図8の干渉グラフの各頂点に対しての使用可能レジスタマップを示す。

    【図10】図8、7の情報を本発明に必要な情報に置き換えた情報を示す。

    【図11】本発明の判断関数f式を示す。

    【図12】本発明の判断関数f式を用いて、図10の情報からスタックを作成した例とスタックをもとにグラフを再現した例(レジスタ割付の結果)を示す。

    【図13】本発明の判断関数gが動作する例を示す。

    【図14】図13の例に対して判断関数gを試した結果とスタックからグラフを再現した例を示す。

    【図15】本発明の判断関数gについての処理フローである。

    【図16】本発明による使用可能なレジスタの構成を示す度数の種類の例としてのシングル、ダブル、セパレート、トリプル、クワッドの概念図である。

    【図17】Stanfordベンチマークによる本発明の評価結果を示す。

    【符号の説明】

    1 コンピュータ 5 マウス 6 キーボード 7 モニタ 9 プリンタ 13 フレキシブルディスク 15 駆動ドライブ

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈