(57)【特許請求の範囲】
【請求項１】
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定する特定部と、
前記特定部により特定された前記第１のＳＩＭＤレジスタの空き領域を、前記第１のデータに割り付ける割付部と、
を有する情報処理装置。
【請求項２】
前記割付部は、
前記第１のデータがＳＩＭＤデータである場合、前記第１のデータを複数のデータブロックに分割し、
前記特定部により特定された複数の前記第１のＳＩＭＤレジスタの各々の空き領域を、前記複数のデータブロックのいずれかに割り付ける、
請求項１記載の情報処理装置。
【請求項３】
前記割付部は、
前記第１のデータがスカラデータである場合、前記第１のＳＩＭＤレジスタにおいて前記スカラデータが格納されている領域の直後の空き領域を、前記第１のデータに割り付ける、
請求項１又は２記載の情報処理装置。
【請求項４】
プロセッサに、
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定し、
特定された前記第１のＳＩＭＤレジスタの空き領域を、前記第１のデータに割り付ける、
処理を実行させるコンパイルプログラム。
【請求項５】
プロセッサが、
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定し、
特定された前記第１のＳＩＭＤレジスタの空き領域を、前記第１のデータに割り付ける、
処理を実行するコンパイル方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイル技術に関する。
【背景技術】
【０００２】
ソースコードからオブジェクトコードへの翻訳においては、レジスタ割り付けと呼ばれる最適化が行われる。普通プロセッサのレジスタ資源は有限であるため、レジスタ割り付けにおいてレジスタを割り付けることができないデータ（例えば変数のデータ）が発生することがある。この現象はレジスタ溢れと呼ばれる。レジスタ溢れが発生すると、データはメモリ等に一時的に退避される。退避されたデータは、レジスタを使用可能になった場合にレジスタに復元される。
【０００３】
退避および復元の際にはロード命令およびストア命令が発行されるため、ソースコードの実行性能が低下する。プロセッサのレジスタ資源を増やせばレジスタ溢れの発生を抑制することができるが、レジスタ資源を増やすと命令セットアーキテクチャを大幅に変更することになるので、実際にはレジスタ資源を増やすことは難しい。
【０００４】
レジスタ溢れの発生の抑制に関する従来技術は存在するが、従来技術によっては十分に抑制することができない場合がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−９９５７号公報
【特許文献２】特開平１０−２９３６９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、１つの側面では、レジスタ溢れの発生を抑制するための技術を提供することである。
【課題を解決するための手段】
【０００７】
本発明に係る情報処理装置は、スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定する特定部と、特定部により特定された第１のＳＩＭＤレジスタの空き領域を、第１のデータに割り付ける割付部とを有する。
【発明の効果】
【０００８】
１つの側面では、レジスタ溢れの発生を抑制することができるようになる。
【図面の簡単な説明】
【０００９】
【図１】図１は、情報処理装置のハードウエア構成図である。
【図２】図２は、情報処理装置の機能ブロック図である。
【図３】図３は、第２レジスタ割付部の機能ブロック図である。
【図４Ａ】図４Ａは、第１データ格納部に格納されるデータの一例を示す図である。
【図４Ｂ】図４Ｂは、第２データ格納部に格納されるデータの一例を示す図である。
【図５】図５は、メインの処理フローを示す図である。
【図６】図６は、第１の最適化処理の処理フローを示す図である。
【図７】図７は、ＳＩＭＤデータの分割について説明するための図である。
【図８】図８は、ＳＩＭＤデータの前半部をＳＩＭＤレジスタの空き領域に格納する方法を説明するための図である。
【図９】図９は、ＳＩＭＤデータの前半部をＳＩＭＤレジスタの空き領域に格納する方法を説明するための図である。
【図１０】図１０は、ＳＩＭＤデータの後半部の格納について説明するための図である。
【図１１】図１１は、ＳＩＭＤデータの前半部および後半部に対するＳＩＭＤレジスタの割り付けを示す図である。
【図１２Ａ】図１２Ａは、第１データ格納部に格納されるデータの一例を示す図である。
【図１２Ｂ】図１２Ｂは、第２データ格納部に格納されるデータの一例を示す図である。
【図１３】図１３は、第２の最適化処理の処理フローを示す図である。
【図１４】図１４は、スカラデータをＳＩＭＤレジスタの空き領域に格納する方法を説明するための図である。
【図１５】図１５は、スカラデータに対するＳＩＭＤレジスタの割り付けを示す図である。
【図１６Ａ】図１６Ａは、第１データ格納部に格納されるデータの一例を示す図である。
【図１６Ｂ】図１６Ｂは、第２データ格納部に格納されるデータの一例を示す図である。
【図１７】図１７は、ＳＩＭＤデータの前半部および後半部から元のＳＩＭＤデータを復元する方法を説明するための図である。
【図１８】図１８は、ＳＩＭＤデータの前半部および後半部から元のＳＩＭＤデータを復元する方法を説明するための図である。
【図１９】図１９は、ＳＩＭＤデータの前半部および後半部から元のＳＩＭＤデータを復元する方法を説明するための図である。
【発明を実施するための形態】
【００１０】
図１に、本実施の形態の情報処理装置１のハードウエア構成図を示す。情報処理装置１は、プロセッサ１０と、メモリ１１と、記憶装置１２と、バス１３とを有する。プロセッサ１０、メモリ１１および記憶装置１２はバス１３によって接続される。プロセッサ１０は例えばＣＰＵ（Central Processing Unit）である。メモリ１１は例えばＤＲＡＭ（Dynamic Random Access Memory）である。記憶装置１２は例えばＨＤＤ（Hard Disk Drive）である。
【００１１】
プロセッサ１０は、コア１０１及び１０２と、Ｌ（Level）１キャッシュ１０３及び１０４と、Ｌ２キャッシュ１０５とを有する。コア１０１は、１又は複数の汎用レジスタ１０１１と、１又は複数のＳＩＭＤレジスタ１０１２とを含むレジスタを有する。コア１０２は、１又は複数の汎用レジスタ１０２１と、１又は複数のＳＩＭＤレジスタ１０２２とを含むレジスタを有する。なお、図１においてはプロセッサ１０が有するコアの数は２であるが、数に限定は無い。また、ＳＩＭＤレジスタ以外のレジスタとして、汎用レジスタ以外のレジスタをさらに有してもよい。
【００１２】
本実施の形態の処理を実行するためのプログラムは、例えば記憶装置１２に格納されており、プロセッサ１０に実行されることによって図２に示すコンパイル処理部１５の機能を実現する。図２に、情報処理装置１の機能ブロック図を示す。情報処理装置１は、コンパイル処理部１５と、ソースコード格納部１６と、第１データ格納部１７と、第２データ格納部１８と、オブジェクトコード格納部１９とを含む。ソースコード格納部１６、第１データ格納部１７、第２データ格納部１８およびオブジェクトコード格納部１９は、例えば記憶装置１２に設けられる。
【００１３】
コンパイル処理部１５は、ソースコード解析部１５１と、最適化部１５２と、第１レジスタ割付部１５３と、割付解析部１５４と、第２レジスタ割付部１５５と、生成部１５６とを含む。
【００１４】
ソースコード解析部１５１は、ソースコード格納部１６に格納されているソースコードに対して周知の字句解析および構文解析等を実行し、実行結果を最適化部１５２に出力する。最適化部１５２は、ソースコード解析部１５１から受け取った実行結果に基づき、アーキテクチャに依存しない最適化処理およびアーキテクチャ命令への変換処理等を実行し、実行結果を第１レジスタ割付部１５３に出力する。第１レジスタ割付部１５３は、最適化部１５２から受け取った実行結果に基づき、例えばカラーリング法等の公知の方法によってレジスタ割り付けを実行し、レジスタ割り付けの結果を割付解析部１５４に出力する。割付解析部１５４は、第１レジスタ割付部１５３から受け取った結果から、レジスタ溢れについての情報およびＳＩＭＤレジスタの空き領域についての情報を生成し、レジスタ溢れについての情報を第１データ格納部１７に格納し、ＳＩＭＤレジスタの空き領域についての情報を第２データ格納部１８に格納する。第２レジスタ割付部１５５は、第１データ格納部１７に格納されているデータおよび第２データ格納部１８に格納されているデータを用いて処理を実行し、処理結果に基づき第１データ格納部１７に格納されているデータおよび第２データ格納部１８に格納されているデータを更新する。生成部１５６は、第１レジスタ割付部１５３による割り付けの結果、第１データ格納部１７に格納されているデータおよび第２データ格納部１８に格納されているデータを用いてオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード格納部１９に格納する。
【００１５】
なお、ソースコード解析部１５１の処理、最適化部１５２の処理、第１レジスタ割付部１５３の処理および生成部１５６の処理はよく知られているので、本実施の形態においてはこれ以上説明しない。
【００１６】
図３に、第２レジスタ割付部１５５の機能ブロック図を示す。第２レジスタ割付部１５５は、第１処理部１５５１と、第２処理部１５５２とを含む。
【００１７】
第１処理部１５５１は、レジスタ割り付けについての第１の最適化処理を実行する。第２処理部１５５２は、レジスタ割り付けについての第２の最適化処理を実行する。
【００１８】
以下では、ソースコード格納部１６に格納されているソースコードをオブジェクトコードに変換する際に実行されるレジスタ割り付けについて説明する。前提として、割付解析部１５４の処理によって第１データ格納部１７にレジスタ溢れについての情報が格納されており且つ第２データ格納部１８にＳＩＭＤレジスタの空き領域についての情報が格納されているとする。
【００１９】
図４Ａに、第１データ格納部１７に格納される、レジスタ溢れについての情報の一例を示す。図４Ａの例では、レジスタ溢れについての情報は、データ種別と、ライブレンジ（生存区間とも呼ばれる）を示す情報と、割り付けられるレジスタの識別情報と、順番とを含む。データ種別は、第１レジスタ割付部１５３の処理によってはレジスタが割り付けられなかったデータの種別（本実施の形態においては、ＳＩＭＤ又はスカラ）を表す。ライブレンジは、そのデータのライブレンジである。順番は、データ種別が「ＳＩＭＤ」であるデータ（以下、ＳＩＭＤデータと呼ぶ。ＳＩＭＤデータはＳＩＭＤ演算で使用される）を分割した場合において分割後の各データブロックに割り振られる番号である。例えばＳＩＭＤデータを２つに分割した場合、前半部のデータブロックの順番は１であり、後半部のデータブロックの順番は２である。なお、第２レジスタ割付部１５５の処理が実行される前の段階においては、割り付けられるレジスタの識別情報と、順番とは格納されない。
【００２０】
図４Ｂに、第２データ格納部１８に格納される、ＳＩＭＤレジスタの空き領域についての情報の一例を示す。図４Ｂの例では、ＳＩＭＤレジスタの空き領域についての情報は、レジスタの識別情報と、レジスタに格納されるスカラデータ（すなわち、スカラ演算で使用されるデータ）のライブレンジを示す情報と、追加で格納されるデータのデータ種別とを含む。本実施の形態においては、各ＳＩＭＤレジスタは４つの領域を持ち、スカラデータによって１つの領域が使用される。従って、第２データ格納部１８に登録されているレジスタは、追加でデータが格納される前の段階においては３つの空き領域を有する。なお、第２レジスタ割付部１５５の処理が実行される前の段階においては、追加で格納されるデータのデータ種別は格納されない。
【００２１】
以下では、図５乃至図１９を用いて、第２レジスタ割付部１５５が実行する処理について説明する。
【００２２】
まず、第２レジスタ割付部１５５は、レジスタ溢れについての情報を第１データ格納部１７から読み出す（図５：ステップＳ１）。
【００２３】
第２レジスタ割付部１５５は、第１データ格納部１７から読み出した情報に基づき、レジスタ溢れが発生したか判定する（ステップＳ３）。レジスタ溢れが発生していない場合（ステップＳ３：Ｎｏルート）、第２レジスタ割付部１５５によるレジスタ割り付けは行われなくてもよいので、処理は終了する。
【００２４】
一方、レジスタ溢れが発生していた場合（ステップＳ３：Ｙｅｓルート）、第２レジスタ割付部１５５は、第１データ格納部１７から読み出した情報に含まれるエントリのうち未処理のエントリを１つ特定する（ステップＳ５）。
【００２５】
第２レジスタ割付部１５５は、ＳＩＭＤレジスタの空き領域についての情報を第２データ格納部１８から読み出す（ステップＳ７）。
【００２６】
第２レジスタ割付部１５５は、第２データ格納部１８から読み出した情報に基づき、ＳＩＭＤレジスタの領域に空きがあるか判定する（ステップＳ９）。上で述べたように、第２データ格納部１８に登録されているレジスタは、追加でデータが格納される前の段階においては３つの空き領域を有する。本実施の形態においては、ＳＩＭＤデータは２つに分割され、分割後のデータブロックの各々は２つの領域を使用し、スカラデータは１つの領域を使用する。そして、３つの空き領域のうち２つの領域がＳＩＭＤデータ由来のデータブロックによって使用され、１つの領域がスカラデータに使用されるように割付けが行われる。従って、第２データ格納部１８に登録されているレジスタは、ＳＩＭＤデータ由来のデータブロックおよびスカラデータの両方が追加で格納されていない限り空き領域を有する。
【００２７】
ＳＩＭＤレジスタの領域に空きが無い場合（ステップＳ９：Ｎｏルート）、第１レジスタ割付部１５３の処理によってはレジスタが割り付けられなかったデータに対して第２レジスタ割付部１５５の処理によってもレジスタを割り付けることができない。従って、処理は終了する。
【００２８】
一方、ＳＩＭＤレジスタの領域に空きが有る場合（ステップＳ９：Ｙｅｓルート）、第２レジスタ割付部１５５は、ステップＳ５において特定したエントリに含まれるデータ種別は「ＳＩＭＤ」であるか判定する（ステップＳ１１）。
【００２９】
データ種別は「ＳＩＭＤ」である場合（ステップＳ１１：Ｙｅｓルート）、第２レジスタ割付部１５５は、第１処理部１５５１を呼び出し、第１処理部１５５１に第１の最適化処理を実行させる（ステップＳ１３）。第１の最適化処理については、図６乃至図１２Ｂを用いて説明する。
【００３０】
まず、第１処理部１５５１は、ステップＳ５において特定したエントリのＳＩＭＤデータ（以下、処理対象のＳＩＭＤデータと呼ぶ）のライブレンジを、レジスタ溢れについての情報から特定する。そして、第１処理部１５５１は、特定したライブレンジを含むライブレンジを有するスカラデータを格納するという条件を満たす２つのＳＩＭＤレジスタを、ＳＩＭＤレジスタの空き領域についての情報において探索する（図６：ステップＳ２１）。
【００３１】
図７に示すように、本実施の形態においてＳＩＭＤデータは前半部のデータブロックと後半部のデータブロックとに分割される。そのため、ＳＩＭＤデータに割り付けるＳＩＭＤレジスタは２つ用意される。
【００３２】
第１処理部１５５１は、条件を満たす２つのＳＩＭＤレジスタが有るか判定する（ステップＳ２３）。条件を満たす２つのＳＩＭＤレジスタが無い場合（ステップＳ２３：Ｎｏルート）、処理対象のＳＩＭＤデータに対して空き領域を割り付けることはできないので、呼び出し元の処理に戻る。
【００３３】
一方、条件を満たす２つのＳＩＭＤレジスタが有る場合（ステップＳ２３：Ｙｅｓルート）、第１処理部１５５１は、処理対象のＳＩＭＤデータの前半部を、条件を満たす２つのＳＩＭＤレジスタのうち１つのＳＩＭＤレジスタの空き領域に格納する（ステップＳ２５）。
【００３４】
ここで、図８及び図９を用いて、処理対象のＳＩＭＤデータの前半部をＳＩＭＤレジスタの空き領域に格納する方法について説明する。
【００３５】
図８（ａ）において、％ｆ２レジスタにおける、ハッチングが付された図形はスカラデータを表す。まず、図８（ａ）に示すように、％ｆ２レジスタに対して仮想的に％ｆ２レジスタが連結され、図８（ｂ）に示すような、８つの領域を有するレジスタが仮想的に生成される。図８（ｂ）において、左から１番目の領域のスカラデータと、左から５番目のスカラデータは同じである。そして、図８（ｂ）に示したレジスタ内のデータが、左方向に２領域分シフトされる。すると、図８（ｂ）において左から５番目の領域のデータは、左から３番目の領域に移動するので、図８（ｃ）に示す％ｆ２レジスタ８０１が生成される。
【００３６】
この％ｆ２レジスタ８０１に対して仮想的に処理対象のＳＩＭＤデータが連結され、図９（ａ）に示すような、８つの領域を有するレジスタが仮想的に生成される。そして、図９（ａ）に示したレジスタ内のデータが、左方向に２領域分シフトされる。すると、図９（ａ）において左から３番目の領域のデータは左から１番目の領域に移動し且つ左から５番目および６番目のデータは左から３番目および４番目に移動するので、図９（ｂ）に示す％ｆ２レジスタ９０１が生成される。以上により、処理対象のＳＩＭＤデータの前半部がＳＩＭＤレジスタの空き領域に格納される。
【００３７】
但し、ＳＩＭＤレジスタの空き領域にデータを格納する方法は、図８及び図９を用いて説明した方法以外の方法であってもよい。
【００３８】
図６の説明に戻り、第１処理部１５５１は、処理対象のＳＩＭＤデータの前半部に割り付けたレジスタ（図８及び図９の例では、％ｆ２レジスタ）の識別情報を第１データ格納部１７に格納する（ステップＳ２７）。
【００３９】
第１処理部１５５１は、処理対象のＳＩＭＤデータの前半部の順番（本実施の形態においては「１」）を第１データ格納部１７に格納する（ステップＳ２９）。
【００４０】
第１処理部１５５１は、処理対象のＳＩＭＤデータの後半部を、条件を満たす２つのＳＩＭＤレジスタのうち残りのＳＩＭＤレジスタの空き領域に格納する（ステップＳ３１）。処理対象のＳＩＭＤデータの後半部は、図８及び図９を用いて説明した方法と同様の方法によってＳＩＭＤレジスタの空き領域に格納されるので、詳細な説明を省略する。ここでは、図１０に示すように、％ｆ４レジスタの空き領域に処理対象のＳＩＭＤデータの後半部が格納されたとする。
【００４１】
従って、ＳＩＭＤレジスタは全体として図１１に示すような状態になる。図１１においては、ハッチングが付された部分のうち処理対象のＳＩＭＤデータの前半部および後半部ではない部分は、第１レジスタ割付部１５３によるレジスタ割り付けによって割り付けが行われた部分に相当する。本実施の形態においては、スカラデータが格納された領域の直後の領域は、新たにスカラデータを格納することができるように空き領域のままにされる。
【００４２】
第１処理部１５５１は、処理対象のＳＩＭＤデータの後半部に割り付けたレジスタ（図１０の例では、％ｆ４レジスタ）の識別情報を第１データ格納部１７に格納する（ステップＳ３３）。
【００４３】
第１処理部１５５１は、処理対象のＳＩＭＤデータの後半部の順番（本実施の形態においては「２」）を第１データ格納部１７に格納する（ステップＳ３５）。そして呼び出し元の処理に戻る。
【００４４】
以上のような処理によって、第１データ格納部１７には、例えば図１２Ａに示すようなデータが格納される。図１２Ａにおいては、ＳＩＭＤデータに割り付けられるレジスタの識別情報として「％ｆ２」および「％ｆ４」が格納され、順番として「１，２」が格納される。また、第２データ格納部１８には、例えば図１２Ｂに示すようなデータが格納される。図１２Ｂにおいては、％ｆ２レジスタおよび％ｆ４レジスタのエントリに、追加で格納されるデータのデータ種別として「Ｓｉｍｄ」が格納されている。
【００４５】
図５の説明に戻り、第１の最適化処理が終了すると、ステップＳ１９の処理に移行する。一方、データ種別は「ＳＩＭＤ」ではない場合（ステップＳ１１：Ｎｏルート）、第２レジスタ割付部１５５は、データ種別は「スカラ」であるか判定する（ステップＳ１５）。
【００４６】
データ種別は「スカラ」ではない場合（ステップＳ１５：Ｎｏルート）、ステップＳ１９の処理に移行する。一方、データ種別は「スカラ」である場合（ステップＳ１５：Ｙｅｓルート）、第２レジスタ割付部１５５は、第２処理部１５５２を呼び出し、第２処理部１５５２に第２の最適化処理を実行させる（ステップＳ１７）。第２の最適化処理については、図１３乃至図１５を用いて説明する。
【００４７】
まず、第２処理部１５５２は、ステップＳ５において特定したエントリのスカラデータ（以下、処理対象のスカラデータと呼ぶ）のライブレンジを、レジスタ溢れについての情報から特定する。そして、第２処理部１５５２は、特定したライブレンジを含むライブレンジを有するスカラデータを格納するという条件を満たすＳＩＭＤレジスタを、ＳＩＭＤレジスタの空き領域についての情報において探索する（図１３：ステップＳ４１）。
【００４８】
第２処理部１５５２は、条件を満たすＳＩＭＤレジスタが有るか判定する（ステップＳ４３）。条件を満たすＳＩＭＤレジスタが無い場合（ステップＳ４３：Ｎｏルート）、処理対象のスカラデータに対して空き領域を割り付けることはできないので、呼び出し元の処理に戻る。
【００４９】
一方、条件を満たすＳＩＭＤレジスタが有る場合（ステップＳ４３：Ｙｅｓルート）、第２処理部１５５２は、処理対象のスカラデータを、条件を満たすＳＩＭＤレジスタの空き領域に格納する（ステップＳ４５）。
【００５０】
例えば図１４（ａ）に示すように、％ｆ６レジスタにスカラデータが既に格納されている状態において、新たにスカラデータを％ｆ６レジスタに格納するケースを考える。このケースにおいては、図１４（ｂ）に示すように、既に格納されているスカラデータの直後の空き領域に新たにスカラデータが格納される。このようにすることで、残りの２領域にＳＩＭＤデータの前半部又は後半部を格納することができるようになる。
【００５１】
従って、ＳＩＭＤレジスタは全体として図１５に示すような状態になる。図１５においては、ハッチングが付された部分のうち処理対象のスカラデータではない部分は、第１レジスタ割付部１５３によるレジスタ割り付けによって割り付けが行われた部分に相当する。本実施の形態においては、左から３番目および４番目の領域は、新たにＳＩＭＤデータを格納することができるように空き領域のままにされる。
【００５２】
図１３の説明に戻り、第２処理部１５５２は、処理対象のスカラデータに割り付けたレジスタ（図１４の例では、％ｆ６レジスタ）の識別情報を第１データ格納部１７に格納する（ステップＳ４７）。そして呼び出し元の処理に戻る。
【００５３】
以上のような処理によって、第１データ格納部１７には、例えば図１６Ａに示すようなデータが格納される。図１６Ａにおいては、スカラデータに割り付けられるレジスタの識別情報として「％ｆ６」が格納される。また、第２データ格納部１８には、例えば図１６Ｂに示すようなデータが格納される。図１６Ｂにおいては、％ｆ６レジスタのエントリに、追加で格納されるデータのデータ種別として「Ｓｃａｌａｒ」が格納されている。
【００５４】
図５の説明に戻り、第２の最適化処理が終了すると、ステップＳ１９の処理に移行する。第２レジスタ割付部１５５は、未処理のエントリが有るか判定する（ステップＳ１９）。未処理のエントリが有る場合（ステップＳ１９：Ｙｅｓルート）、ステップＳ５の処理に戻る。一方、未処理のエントリが無い場合（ステップＳ１９：Ｎｏルート）、処理は終了する。
【００５５】
以上のような処理を実行すれば、より多くのデータをレジスタに割り付けられるので、プロセッサ１０からメモリ１１へのアクセスを削減し、プログラムの実行性能を高めることができるようになる。
【００５６】
図１７乃至図１９を用いて、ＳＩＭＤデータの前半部および後半部から元のＳＩＭＤデータを復元する方法について説明する。ここでは、図１１に示したように、％ｆ２レジスタが前半部に割り付けられ、％ｆ４レジスタが後半部に割り付けられたとする。
【００５７】
まず、図１７（ａ）に示すように、％ｆ２レジスタに対して仮想的に％ｆ４レジスタが連結され、図１７（ｂ）に示すような、８つの領域を有するレジスタが仮想的に生成される。そして、図１７（ｂ）に示したレジスタ内のデータが、左方向に２領域分シフトされる。すると、図１７（ｃ）に示す％ｆ２レジスタ１７０１が生成される。
【００５８】
さらに、図１８（ａ）に示すように、定義のＳＩＭＤレジスタ（ここでは、元々ＳＩＭＤデータに割り付けるはずだったＳＩＭＤレジスタ）に対して仮想的に％ｆ２レジスタ１７０１が連結され、図１８（ｂ）に示すような、８つの領域を有するレジスタが仮想的に生成される。そして、図１８（ｂ）に示したレジスタ内のデータが、左方向に２領域分シフトされる。すると、図１８（ｃ）に示す定義のＳＩＭＤレジスタ１８０１が生成される。一方で、図１７を用いて説明した処理をＳＩＭＤデータの後半部に対しても実行することで、％ｆ４レジスタ１８０２が生成される。
【００５９】
そして、定義のＳＩＭＤレジスタ１８０１に対して仮想的に％ｆ４レジスタ１８０２が連結され、図１９（ａ）に示すような、８つの領域を有するレジスタが仮想的に生成される。そして、図１９（ａ）に示したレジスタ内のデータが、左方向に２領域分シフトされる。すると、図１９（ｂ）に示す定義のＳＩＭＤレジスタ１９０１が生成される。
【００６０】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００６１】
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００６２】
また、本実施の形態におけるＳＩＭＤレジスタは４つの領域を有するが、領域の数に限定は無い。また、上で述べた例では、ＳＩＭＤデータを分割することで得られるデータのブロックの数は２であるが、数に限定は無い。
【００６３】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００６４】
本実施の形態の第１の態様に係る情報処理装置は、（Ａ）スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定する特定部と、（Ｂ）特定部により特定された第１のＳＩＭＤレジスタの空き領域を、第１のデータに割り付ける割付部とを有する。
【００６５】
これにより、スカラデータに割り付けられたＳＩＭＤレジスタが有効活用され、レジスタ溢れの発生が抑制されるので、プログラムの実行性能を向上させることができるようになる。また、生存区間が第１のデータの生存区間の少なくとも一部と共通するデータに割り付けられた第１のＳＩＭＤレジスタを第１のデータに割り付けることを防げるようになる。
【００６６】
また、上記割付部は、（ｂ１）第１のデータがＳＩＭＤデータである場合、第１のデータを複数のデータブロックに分割し、（ｂ２）特定部により特定された複数の第１のＳＩＭＤレジスタの各々の空き領域を、複数のデータブロックのいずれかに割り付けてもよい。第１のＳＩＭＤレジスタはスカラデータに割り付けられているため、１つの第１のＳＩＭＤレジスタが第１のデータを格納できない可能性がある。従って、上で述べたようにすれば、ＳＩＭＤデータに対する割り付けを適切に行えるようになる。
【００６７】
また、上記割付部は、（ｂ３）第１のデータがスカラデータである場合、第１のＳＩＭＤレジスタにおいてスカラデータが格納されている領域の直後の空き領域を、第１のデータに割り付けてもよい。これにより、ＳＩＭＤデータに対する割り付けを邪魔することがないようにスカラデータに対する割り付けを行えるようになる。
【００６８】
本実施の形態の第２の態様に係るコンパイル方法は、（Ｃ）スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤレジスタを特定し、（Ｄ）特定された第１のＳＩＭＤレジスタの空き領域を、第１のデータに割り付ける処理を含む。
【００６９】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００７０】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７１】
（付記１）
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定する特定部と、
前記特定部により特定された前記第１のＳＩＭＤレジスタの空き領域を、前記第１のデータに割り付ける割付部と、
を有する情報処理装置。
【００７２】
（付記２）
前記割付部は、
前記第１のデータがＳＩＭＤデータである場合、前記第１のデータを複数のデータブロックに分割し、
前記特定部により特定された複数の前記第１のＳＩＭＤレジスタの各々の空き領域を、前記複数のデータブロックのいずれかに割り付ける、
付記１記載の情報処理装置。
【００７３】
（付記３）
前記割付部は、
前記第１のデータがスカラデータである場合、前記第１のＳＩＭＤレジスタにおいて前記スカラデータが格納されている領域の直後の空き領域を、前記第１のデータに割り付ける、
付記１又は２記載の情報処理装置。
【００７４】
（付記４）
プロセッサに、
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定し、
特定された前記第１のＳＩＭＤレジスタの空き領域を、前記第１のデータに割り付ける、
処理を実行させるコンパイルプログラム。
【００７５】
（付記５）
プロセッサが、
スカラデータに割り付けられており、且つ、当該スカラデータの生存区間がいずれのレジスタも割り付けられていない第１のデータの生存区間を含むという条件を満たす第１のＳＩＭＤ（Single Instruction Multiple Data）レジスタを特定し、
特定された前記第１のＳＩＭＤレジスタの空き領域を、前記第１のデータに割り付ける、
処理を実行するコンパイル方法。
【符号の説明】
【００７６】
１  情報処理装置    １０  プロセッサ
１１  メモリ    １２  記憶装置
１３  バス    １５  コンパイル処理部
１６  ソースコード格納部    １７  第１データ格納部
１８  第２データ格納部    １９  オブジェクトコード格納部
１０１，１０２  コア    １０３，１０４  Ｌ１キャッシュ
１０５  Ｌ２キャッシュ    １０１１，１０２１  汎用レジスタ
１０１２，１０２２  ＳＩＭＤレジスタ
１５１  ソースコード解析部    １５２  最適化部
１５３  第１レジスタ割付部    １５４  割付解析部
１５５  第２レジスタ割付部    １５６  生成部
１５５１  第１処理部    １５５２  第２処理部
【図１】
0006627630.tif 000002
【図２】
0006627630.tif 000003
【図３】
0006627630.tif 000004
【図４Ａ】
0006627630.tif 000005
【図４Ｂ】
0006627630.tif 000006
【図５】
0006627630.tif 000007
【図６】
0006627630.tif 000008
【図７】
0006627630.tif 000009
【図８】
0006627630.tif 000010
【図９】
0006627630.tif 000011
【図１０】
0006627630.tif 000012
【図１１】
0006627630.tif 000013
【図１２Ａ】
0006627630.tif 000014
【図１２Ｂ】
0006627630.tif 000015
【図１３】
0006627630.tif 000016
【図１４】
0006627630.tif 000017
【図１５】
0006627630.tif 000018
【図１６Ａ】
0006627630.tif 000019
【図１６Ｂ】
0006627630.tif 000020
【図１７】
0006627630.tif 000021
【図１８】
0006627630.tif 000022
【図１９】
0006627630.tif 000023