JP4041248B2 - コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 - Google Patents
コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 Download PDFInfo
- Publication number
- JP4041248B2 JP4041248B2 JP19571799A JP19571799A JP4041248B2 JP 4041248 B2 JP4041248 B2 JP 4041248B2 JP 19571799 A JP19571799 A JP 19571799A JP 19571799 A JP19571799 A JP 19571799A JP 4041248 B2 JP4041248 B2 JP 4041248B2
- Authority
- JP
- Japan
- Prior art keywords
- variable
- resource
- assembler
- program
- register
- 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 - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register 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)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、ソースプログラムを機械語プログラムやアセンブラプログラムなどの目的プログラムに翻訳するコンパイラ装置に関し、特に、ソースプログラムに高級プログラミング言語で書かれたプログラム部分と、アセンブラ言語で記述した部分とが含まれている場合の改良に関する。
【0002】
【従来の技術】
近年、組み込み用途向けマイクロプロセッサの高性能化により、通信、画像、音声処理など、マルチメディア処理を行なう情報機器に、組み込み用途向けマイクロプロセッサが使用されるようになりつつある。
マルチメディア処理では、プログラム規模が肥大化する一方なので、プログラムの開発コスト、保守、移植性などの問題が近年に増して深刻化しており、高級プログラミング言語、特に最近ではC言語やC++言語を用いた開発環境の整備が強く要求されている。しかしマルチメディア処理の開発環境の現状を振り返ってみれば、高級プログラミング言語指向の開発環境の要求に逆行するかの如く、より機械語に近いアセンブラ言語を用いてマルチメディア処理が記述されている例が多く見られる。アセンブラ言語を用いて記述されている部分は、頻繁に実行されかつ短時間実行を強く要求されるプログラム部分であり、マルチメディア処理における大量データの処理機能の中核である。
【0003】
これは、コンパイラ自体の翻訳能力が見劣りすることも然ることながら、マイクロプロセッサに1命令で複数の機能を果たす機械語命令が存在したり、近年よく見られるマルチメディア対応命令など、高級プログラム言語記述ではどうしても効率良く記述できず、かつ、コンパイラでは効率良くそれらの命令に翻訳することが難しい場合があるためである。
【0004】
例えば、コンパイラがターゲットとするマイクロプロセッサがロードストア方式(オペランドのアドレシングにおいて、メモリ間演算命令は転送命令のみしかない方式をいう)であり、かつ、除算命令divが図15(d)のような仕様であるものとする。図15(d)において、除算結果は、レジスタrnに格納され、剰余算の結果は、レジスタmdrに格納されるので、多くのマイクロプロセッサの除算命令は、除算と剰余算を1命令で同時に算出することが可能である。
【0005】
これに対して高級プログラム言語であるC言語では、変数a,bの除算および剰余算の結果をそれぞれ変数c,dに求めたい場合は、図15(a)のようにしか記述できず、その結果、多くのコンパイラは図15(b)の(1)(2)に示すようにそれぞれの「/」演算および「%」演算に対してdiv命令を生成してしまう。div命令の実行には通常、他の命令に比べて多くの実行サイクルを要するので、理想的には、図15(c)のように一つのdiv命令で除算、剰余算を計算することが望まれる(ここで、図15(b)(c)では、変数a,b,c,dにそれぞれレジスタr2,r3,r4,r5が割り付けられているとしており、また、「mov rm,rn」は、レジスタrmの値をレジスタrnに転送することを意味している。)。
【0006】
そのため多くのC言語コンパイラでは、C言語表現によるプログラム記述とアセンブラ言語による記述を混在できるように、拡張言語仕様として「asm文」をプログラマに提供している。図15の例では図16のように「asm」キーワードに続いて、アセンブラ文による記述を可能としている。ここで、asm文内のうちC言語レベルでの変数を記述している部分は、コンパイラが割り付けたレジスタやメモリに置き換えられる。例えば、図15と同様に変数a,b,c,dにそれぞれレジスタr2,r3,r4,r5が割り付けられた場合は図16(b)のようにコンパイラは出力する。図15(c)のような理想的な場合に比較して、図16(b)では転送命令が2命令増加しているがdiv命令は1命令であり、図15(b)よりは実行時間で有利となっている。また図16(b)に対しては従来のコピー伝搬の最適化(後述の文献1)を適用することにより、図15(c)のように変換される可能性もある。
【0007】
さらに、以上のように除算と剰余算を一つのdiv命令で行ないたい所が複数箇所ある場合は、図17(a)のようにマクロ定義しておいて、同図(b)のように使用すると利便性が向上し、さらに関数呼び出しと同様の記述であるので、プログラムの読み易さも向上する。尚、図17(b)は、図17(a)のx,y,z,wがC言語コンパイラのマクロプロセッサによって、図16(a)のようにa,b,c,dに置き換えられる様子を示す図である。このようなC言語コンパイラのマクロプロセッサによる置き換えをマクロ展開といい、図17(a)のdmのように、マクロ定義されたアセンブラ文列であって、特有の機能を持つものを「インラインアセンブラルーチン」と呼ぶことにする。
【0008】
【発明が解決しようとする課題】
しかしながら、従来のコンパイラ装置において、インラインアセンブラルーチンを使用する際、プログラマには以下に示す第1の制限、第2の制限がプログラマに課せられるので、プログラマは、プログラミング時にインラインアセンブラルーチンを取り入れることを躊躇しがちである。
【0009】
ここで第1の制限では、プログラム中のある変数xの値がインラインアセンブラに跨って有効である場合に、コンパイラが変数xにインラインアセンブラで更新されるレジスタを割り付ける可能性があるため、プログラマは変数xの値が壊されていないかどうか、コンパイラが出力する目的プログラムを入念にチェックする必要がある。例えば、図17(c)において、同図(c)の(1)で設定された変数aの値を同図(c)の(2)で使用しており、変数aの値はインラインアセンブラルーチンdmに跨って有効となっている(このように変数が保持している値が有効なプログラム区間を「変数が生きている区間」という)。このとき変数aにコンパイラがレジスタr1を割り付けたとすると、インラインアセンブラルーチンdmではレジスタr1を更新してしまうので、図17(c)の(2)における変数aの使用時には間違った値を使ってしまうことになる。
【0010】
第2の制限では、関数呼び出しを短時間で実行するために、コンパイラの仕様として引数を特定のレジスタrで引き渡している際、その引数の値が、インラインアセンブラに跨って値が生きている場合に、インラインアセンブラでレジスタrを更新してしまう可能性があり、やはりこの場合もプログラマは、インラインアセンブラがどのように定義されているか把握した上で、引数の値が壊されることがないか入念にチェックする必要がある。例えば図17(d)のようにインラインアセンブラルーチンdmの使用箇所の後に引数pの参照があり、かつ引数pはレジスタr0で引き渡されるとすると、明らかにインラインアセンブラルーチンdmでレジスタr0の値は壊され、引数pの参照時には間違った値を使用してしまう。
【0011】
一般的に前述のようなチェックはプログラマに大きな負担を強いるものであり、その負担を軽減するために、多くのプログラマは、コンパイルする前に確実にメモリや特定のレジスタに割り付けられると判断可能な変数(大域変数など)のみが含まれている関数にインラインアセンブラルーチンを使用したり、引数渡しで使用されるレジスタをインラインアセンブラルーチン自体で定義しない、などの制限を加えて記述する場合が多い。
【0012】
しかしこのような使用上の制限は、本来の独立した機能をインラインアセンブラルーチンとして実現し、インラインアセンブラルーチンを使うことにより利便性を向上させたいというプログラマの要求に十分に答えるものでなない。つまり、前述の第1、2の制限により、原則的には、インラインアセンブラルーチンがどのように定義されているかプログラマが必ずチェックする必要があるため、プログラマがインラインアセンブラルーチンの詳細な中身を知らなくても使用可能な、いわゆるブラックボックスとして使用することが困難となる。そのためインラインアセンブラルーチンをライブラリ化し、インラインアセンブラルーチンの再利用性を向上させることが困難となる。
【0013】
本発明の第1の目的は、インラインアセンブラルーチン使用時におけるチェックをプログラマに課すことのないよう、プログラムの翻訳を行うコンパイル装置を提供することである。
本発明の第2の目的は、インラインアセンブラルーチンのブラックボックス化が可能なようにプログラムの翻訳を行うコンパイル装置を提供することである。
【0014】
本発明の第3の目的は、インラインアセンブラルーチンのライブラリィ化を可能とし、プログラムの再利用性を向上させることができるコンパイル装置を提供することである。
【0015】
【課題を解決するための手段】
上記第1、第2、第3の目的を達成するために、本発明は、どの資源に割り付けるべきかが未定である未割付変数のなかから、当該未割付変数の生存区間がアセンブラ文の記述されている区間と重複しているものを検出する未割付変数検出手段と、前記未割付変数検出手段により検出された未割付変数の生存区間と記述されている区間が重複しているアセンブラ文にて定義されている資源を検出する資源検出手段と、前記資源検出手段により検出された資源とは異なる資源を前記未割付変数検出手段により検出された未割付変数に割り付ける資源割付手段とを備えることを特徴としている。
【0016】
【発明の実施の形態】
実施形態の説明の前に実施形態に関連する文献と、用語について説明しておく。
<文献>
1.A.V.Aho, R.Sethi, J.D.Ullman:”Compilers, Principle, Techniques, and Tool”, Addison Wesley Publishing Company Inc.,1986,(邦訳)原田賢一:”コンパイラI、II”,サイエンス社,1990
2.田中:”資源割付装置及び資源割付プログラムが記録されたコンピュータ読み取り可能な記録媒体”,出願番号 特願平10-344524
3.Andrew W.Appel:”Modern Compiler Implementation in Java”, CAMBRIDGE UNIVERSITY PRESS, 1998
<用語の説明>
・変数の定義、参照、使用
変数の値を設定することを「定義する」と呼び、設定した値を使用することを「参照する」と呼ぶ。またプログラム上で変数を定義したり、参照したりすることを変数を「使用する」と呼ぶことにする。また、以下では仮引数も特に断らない限り変数と同様に扱う。
【0017】
・一時変数
処理をし易すくするためにコンパイラが計算結果を一時的に格納するために生成する変数のことを「一時変数」と呼ぶことにする。以下では特に断らない限り通常のソースプログラムで記述される変数と同様に扱う。
・中間命令
処理をし易すくするためにコンパイラがソースプログラムのコードを中間的なコードに変換したものを「中間コード」と呼び、中間コードの1ステップを「中間命令」と呼ぶことにする。中間命令には4つ組や3つ組などが存在し、これらが変換されて最終的な目的プログラムが生成される。またソースプログラムを中間命令の列に変換したものを「中間プログラム」と呼ぶことにする。図7は図6のC言語プログラムに対する中間プログラムの一例であり、4つ組の一つである3番地コードで表現している。また図7のi1,i2など、「i」とそれに付随する番号で示したものは、中間命令の識別子を意味している。 特に、図6の「a = p+b+10」 は図7では中間命令i1,i2というように一時変数t1を介して分割され、3番地コードとして表現されている。また、図6(1)のasm文は、図7(1)のように図面上は図6(1)と同一な形式の中間命令に変換されている。特に図7(1)のasm文の中間命令を「asm文中間命令」と呼ぶことにする。尚、本実施形態における中間命令は特にこの形式に限られるわけでなく他の形式の中間命令にも適用可能である。また、コンパイラ装置内の処理を簡単化するために、中間プログラムの最初と終りを表す中間命令や、関数の始めと終りを表す中間命令など特定のプログラム範囲を表す中間命令も用意されている。図7では中間命令i50,i51のように表現される関数の関数の始めと終りを示す中間命令が示されている。
【0018】
・基本ブロック
中間命令列のうち、中間命令列内部からの飛び越しも、また中間命令列内部への飛び越しもなく、中間命令列の実行順が一定順序である場合、その中間命令列を基本ブロックという。基本ブロックについては文献1に詳細に記載されている。
【0019】
・生存区間
生存区間とはそれぞれの変数に保持されている値が有効となる区間であり、正確には変数に値を定義する中間命令からその定義された値を最後に参照する中間命令までのプログラム上の区間のことである。そして、生存区間はこの区間に含まれる中間命令の集合で表される。ここで変数に値を定義する中間命令は生存区間の開始点に相当し、生存区間中で定義された値を参照している中間命令のうち、最後に参照する中間命令は生存区間の終了点に相当する。また生存区間の重複、非重複を中間命令の集合積で判定するため、二つの生存区間の終始が一致する中間命令では、それら二つの生存区間は重ならないとする。図9(b)が生存区間の一例である。図9(b)において生存区間は縦線の実線で表されている。生存区間の開始点、及び終了点をそれぞれ白丸、黒丸で表現している。また図18は図9(b)の生存区間を表現する具体的なデータ構造を示しており、各変数の生存区間が中間命令の集合として示されている。図18の「生存区間」における「..」は、図外に何らかの中間命令が存在することを示す。生存区間の詳細な定義および具体例は文献1,2に記載されている。
【0020】
・変数への資源割り付け
変数への資源割り付けとは、変数にレジスタやメモリを割り付けることである。一つのレジスタやメモリにはプログラムの同一区間で二つ以上の値を保持することは不可能であるため、生存区間が重なる変数には同じレジスタやメモリを割り付けることは不可能であり、異なるレジスタやメモリを割り付けることが必須となる。例えば、図9の変数aと変数bの二つの生存区間が重なっており、それぞれの変数には異なるレジスタやメモリを割り付ける必要がある。以下ではレジスタやメモリを合わせて「資源」と呼ぶことにする。
【0021】
<第1実施形態>
図1は第1実施形態のコンパイラ装置の構成図である。コンパイラ装置1は、マクロ展開部11、構文解析部12、最適化部13、資源割付部14、コード生成部15の一般的なコンパイラ装置を構成する主要な部分と、レジスタ引数置換部16、asm文定義レジスタ検出部17、asm文定義レジスタ保持部18からなり、これらは何れも本実施形態に関係している部分で構成されている。
【0022】
次に各部の動作と機能について例を示しながら説明する。
マクロ展開部11は、 コンパイラ装置1により、まず最初に起動されるものであり、マクロ定義されたマクロ識別子をその本体で置き換える。この処理部分は一般的なC言語コンパイラのマクロプロセッサの処理と同様なので詳細説明は省略し処理結果の例について説明する。
【0023】
図5はソースプログラムの一例であり、「従来の技術」で取り上げた除算と剰余算を行なうインラインアセンブラルーチンをマクロ定義したdm(x,y,z,w)と、そのdmを使用している関数fの例を示している。尚関数fでは本実施形態の説明に使用する部分のみを抽出して記述している。図6は図5のソースプログラムをマクロ展開部11で処理した後の中間的なプログラムを示している。図6(1)に示すようにマクロ識別子dmがマクロ定義されたインラインアセンブラルーチン本体に置き換えられている。
【0024】
図6の(1)は、「mov a,r0」「mov b,r1」「div r1,r0」「mov r0,c」「mov mdr,d」という5つのアセンブラ命令を含むが、これらは何れも文頭に「asm」キーワードが付与されていることがわかる。この「asm」キーワードは、当該「asm」キーワードから文末のセミコロン記号までに示されている一文が、アセンブラ命令を含んでおり(このように、「asm」キーワードが付与され、アセンブラ命令を含んでいる文をアセンブラ文と呼ぶ。)、この文は、通常の高級言語記述されたプログラム部分と同等な翻訳処理が不要な旨をコンパイラ装置に指示している。そのためコンパイラ装置における構文解析部12及び最適化部13は、文頭に「asm」キーワードが付与された文についての処理をスキップする。
【0025】
構文解析部12は、マクロ展開部11の処理終了後に起動され、マクロ展開部11によりマクロ展開されたプログラムの字句解析、構文解析および意味解析を行い、中間プログラムに変換する。例えば、図6のプログラムは図7の中間プログラムに変換される。この構文解析部12の詳細は本実施形態の主眼ではないため説明を省略する。この際、マクロ展開部11により、「asm」キーワードが付与されてソースプログラム内に展開されたアセンブラ文は、構文解析部12によって他のコードに置き換えられることもなく、そのまま変換後の中間プログラム内に継承される。これにより、「asm」キーワードが付与されたアセンブラ文は、中間命令として、中間プログラム内に存在することになる。
【0026】
最適化部13は、構文解析部12の処理終了後に起動され、最終的にコンパイラ装置1が生成する目的プログラムのプログラムサイズ縮小化及び処理実行時間の短縮化を図るよう中間プログラムの最適化を行う。この最適化部13の詳細は本実施形態の主眼ではないため説明を省略し、本実施形態に関連のある点についてのみ説明する。最適化部13では、最適化を行なうために、基本ブロック解析、制御フロー解析、データフロー解析という処理を行なう。基本ブロック解析とは処理対象の中間プログラムを基本ブロックに分割することである。制御フロー解析とは各基本ブロック間の制御の流れを解析することである。データフロー解析とは各基本ブロック中、それぞれの変数がどこで定義され、どこで参照されているかについて解析することである。またこれらの解析結果から、後述する資源割付部14は生存区間を算出する。尚、翻訳すべきプログラムにレジスタ引数が含まれている場合、最適化部13は、レジスタ引数置換部16を起動した後に起動される。この際、「asm」キーワードが付与されて中間プログラム内に継承されたアセンブラ文は、最適化部13の最適化により他のコードに置き換えられることなく、また、削除されることもなく、そのまま最適化後の中間プログラム内に継承される。
【0027】
レジスタ引数置換部16は、翻訳すべきプログラムにレジスタ引数が含まれている場合に起動され、レジスタで渡される仮引数の値を一旦一時変数に格納する中間命令を関数の最初に挿入し、さらに中間プログラムの仮引数の使用部分を全て一時変数に置き換える。図2はレジスタ引数置換部16の処理フローチャートである。
【0028】
ステップa1では、全ての仮引数pについてステップa2からステップa5を繰り返し、全てについて処理を終えたらレジスタ引数置換部16の処理を終了する。
ステップa2では、仮引数pがレジスタで渡されるものであるとき、ステップa3からステップa4を行なう。
ステップa3では、新たに一時変数tを生成し、仮引数pから一時変数tへの代入を示す中間命令i:t=p;を生成する。
【0029】
ステップa4では生成した中間命令iを関数の最初に挿入する。
ステップa5では、中間プログラムの仮引数pの全ての使用部分を一時変数tで置き換え、ステップa1に戻る。
次にレジスタ引数置換部16の具体的な動作例を図8の例を用いて説明する。図8は、図7の中間プログラムに対してレジスタ引数置換部16の処理を行なった結果である。まずレジスタで引き渡される仮引数pが取り出され(ステップa1、a2)、仮引数pから新たに生成された一時変数t2への代入を示す中間命令i20が生成され(ステップa3)、中間命令i20が中間プログラムの最初に挿入され(ステップa4)、中間命令i1,i9において仮引数pが使用されている部分が一時変数t2に置き換えられている(ステップa5)。
【0030】
資源割付部14は、最適化部13の処理終了後に起動され、生存区間が重なる複数の変数それぞれに、互いに異なるレジスタを割り付ける。ここで、プログラム内にアセンブラ文が展開されている場合、資源割付部14は自身が処理を行う前にasm文定義レジスタ検出部17を起動する。
asm文定義レジスタ検出部17は、中間プログラムの何れかの中間命令にasm識別子が付与されたアセンブラ文が含まれている場合、当該アセンブラ文で定義されるレジスタを検出して、検出結果をasm文定義レジスタ保持部18に格納する。図3はasm文定義レジスタ検出部17の処理フローチャートである。
【0031】
ステップb1では、全ての中間命令iについてステップb2からステップb3を繰り返し、全ての中間命令iについて処理を終えたらasm文定義レジスタ検出部17の処理を終了する。
ステップb2では、中間命令iがasm文中間命令であるときステップb3を行なう。そうでないときはステップb1へ戻る。
【0032】
ステップb3では、中間命令iでレジスタrが定義されている場合、中間命令iとレジスタrをasm文定義レジスタ保持部18に格納し、ステップb1へ戻る。
図10はasm文定義レジスタ保持部18の図8の中間プログラムの例に対する保持内容である。asm文中間命令毎に定義するレジスタを保持しており、例えば、図8のasm文中間命令i3では変数aの値がレジスタr0に転送され、レジスタr0が定義されるので、図10のasm文中間命令i3の定義されるレジスタにはr0が設定される(ステップb3)。
【0033】
資源割付部14は、最適化部13で解析された制御フロー情報とデータフロー情報を用いて、前述のレジスタ引数置換部16で生成した一時変数も含めて、全ての変数の生存区間を算出する。生存区間の算出方法は文献1、2などと同様なので詳細説明は省略し、ここでは、図8の中間プログラム例に対する生存区間の算出結果を示すにとどめる。図9が図8の中間プログラムに対して生存区間を算出した結果である。生存区間は、文献2などように一般的には中間命令の集合として表現されるが、ここでは直観的に解り易いように実線でその範囲を示している。また、図9(b)の仮引数pの生存区間に記載されている(r0)は仮引数pにレジスタr0が割り付けられていることを意味している。生存区間を算出した後、資源割付部14は、前述のレジスタ引数置換部16で生成した一時変数も含めた変数への資源割り付けを行なう。特に資源割付部14は、変数へのレジスタ割り付けにおいて、生存区間が重なる変数に割り付けられているレジスタでなくかつ、変数の生存区間にasm文中間命令が含まれているとき、asm文定義レジスタ保持部18から得られるasm文中間命令が定義するレジスタでもないレジスタを割り付ける。図4が資源割付部14の処理フローチャートである。
【0034】
ステップc1では、全ての資源が未割付けの変数vについてステップc2からステップc6まで繰り返し、処理を終えたら資源割付部14の処理を終了する。
ステップc2では、変数vと生存区間が重なる変数に割り付けられているレジスタの集合R1を求める。
ステップc3では、変数vの生存区間に含まれる全てのasm文中間命令iについて、asm文中間命令iで定義されるレジスタをasm文定義レジスタ保持部18から検出し、レジスタの集合R2に求める。
【0035】
ステップc4では、ステップc2で求めたレジスタ集合R1にも、ステップc3で求めたレジスタ集合R2にも両方に属さないレジスタrが存在するときはステップc5を実行し、そうでないときはステップc6を実行する。
ステップc5では、変数vにレジスタrを割り付け、ステップc1に戻る。
ステップc6では、変数vにメモリを割り付け、ステップc1に戻る。
【0036】
次に資源割付部14の具体的な動作例を図9の例を用いて説明する。ここでは変数aと変数t2の割り付けについて述べる。まず変数aと生存区間が重なる変数t2,b,c,dに割り付けられているレジスタの集合R1を求めるが、ここでは、変数t2,b,c,dには未だ何も割り付けられていないとするので、集合R1は空集合となる(ステップc2)。次に変数aの生存区間に含まれているasm文中間命令i3からi7について、図10のasm文定義レジスタ保持部18を参照して、それぞれのasm文中間命令で定義されるレジスタr0,r1,mdrを集合R2に取り出す(ステップc2)。求めたレジスタの集合R1、R2に属さないレジスタ、例えばレジスタr2を変数aに割り付ける(ステップc4、c5)。
【0037】
次に引き続き変数t2の割り付けについて説明する。まず変数t2と生存区間が重なる変数t1,a,b,c,d,eに割り付けられているレジスタの集合R1を求める。ここでは、変数t1,b,c,d,eには未だ何も割り付けられていないとし、変数aが先に述べた通りレジスタr2に割り付けられているとすると、集合R1にはレジスタr2が取り出される(ステップc2)。次に変数t2の生存区間に含まれているasm文中間命令i3からi7について、図10のasm文定義レジスタ保持部18を参照して、それぞれのasm文中間命令で定義されるレジスタr0,r1,mdrを集合R2に取り出す(ステップc2)。求めたレジスタの集合R1、R2に属さないレジスタ、例えばレジスタr3を変数t2に割り付ける(ステップc4、c5)。
【0038】
次にコンパイラ装置1はコード生成部15を起動し、中間命令をコンパイラがターゲットとするマシンのアセンブラ文又は機械語命令などの目的プログラムに変換する。コード生成部15自体は従来方式と同様なので詳細説明は省略する。
以上述べたように本実施形態によれば、図9の変数a,t2のようにasm文を跨って生きている変数には、資源割付部14のステップc3からc5において、asm文で定義されるレジスタは割り付けられないので、前述の「発明が解決しようとする課題」で述べた第1の制限は無くなり、またレジスタ引数置換部16のステップa2からa5により、図9の一時変数t2が生成され、さらに一時変数t2には資源割付部14のステップc3からc5において、asm文で定義されるレジスタは割り付けられないので、「発明が解決しようとする課題」で述べた第2の制限も無くなる。よって、プログラマが自由にインラインアセンブラルーチンを定義し、それをブラックボックスとして任意の場所で使用可能となり、インラインアセンブラルーチン使用時のプログラマのチェックの負担を大幅に軽減し、かつ、インラインアセンブラルーチンをライブラリ化し、プログラムの再利用性を向上させることが可能となる。
【0039】
尚、レジスタ引数置換部16のフローチャートのステップa4では、生成した中間命令iを関数の最初に挿入するようにしているが、仮引数pの値が参照される前の位置に挿入してもよい。
<第2実施形態>
図11は第2実施形態のコンパイラ装置の構成図である。コンパイラ装置2は、マクロ展開部21、構文解析部22、最適化部23、資源割付部24、コード生成部25といった一般的なコンパイラ装置を構成する主要な部分と、レジスタ引数置換部26、asm文定義レジスタ検出部27、asm文定義レジスタ保持部28、asm文生存区間生成部29といった本実施形態に関係している部分で構成されている。
【0040】
コンパイラ装置2は、第1実施形態で述べたコンパイラ装置1と同様に、マクロ展開部21、構文解析部22、最適化部23と順番に起動する。ここで、図2のマクロ展開部21、構文解析部22、最適化部23および、レジスタ引数置換部26は、第1実施形態で説明した図1のマクロ展開部11、構文解析部12、最適化部13およびレジスタ引数置換部16と同じものであるので、以下では資源割付部24、asm文定義レジスタ検出部27、asm文生存区間生成部29に焦点を絞った説明を行なう。よって、図5のプログラム例に関しては、第1実施形態と同様に、最適化部23の処理を終了した時点では、図8のような中間プログラムが生成されているものとする。
【0041】
asm文定義レジスタ検出部27は、第1実施形態で説明したasm文定義レジスタ検出部17と同一構成であり、まず最初に資源割付部24により起動される。図8の中間プログラム例に対して、asm文定義レジスタ検出部27が検出処理を行うと、図10のようにasm文定義レジスタ保持部28の保持内容が設定される。
資源割付部24は、asm文定義レジスタ検出部27が検出処理を行った後、最適化部23で解析された制御フロー情報とデータフロー情報を用いて全ての変数の生存区間を算出する。図8の例に対する処理結果は第1実施形態で説明した図9と同様である。
【0042】
asm文生存区間生成部29は、資源割付部24が生存区間を算出した後に起動され、asm文で定義されるレジスタに割り付けられた割付済みの一時変数とその生存区間を生成する。図12がasm文生存区間生成部29の処理フローチャートである。
ステップd1では、全てのasm文中間命令iについてステップd2からステップd5まで繰り返し、処理を終えたらasm文生存区間生成部29の処理を終了する。
【0043】
ステップd2では、asm文定義レジスタ保持部28からasm文中間命令iで定義されるレジスタrが存在するときステップd3からステップd5を行ない、そうでないときはステップd1へ戻る。
ステップd3では、新たに一時変数sを生成する。
ステップd4では、生成した一時変数sに対してasm文中間命令iで生存区間が開始し終了する生存区間を生成する。
【0044】
ステップd5では、生成した一時変数sにレジスタrを割り付け、ステップd1へ戻る。
図14(b)は、asm文生存区間生成部29の処理後の各変数の生存区間を示しており、図9(b)に対してさらにレジスタに割り付けられている一時変数s1,s2,s3とその生存区間が付け加わっている。例えばasm文中間命令i3においては、asm文中間命令i3で定義されるレジスタr0を割り付けた一時変数s1と、一時変数s1に対してasm文中間命令i3で生存区間が開始し終了している生存区間が生成されている。
【0045】
次に資源割付部24は変数への資源割り付けを行なう。図13が資源割付部24の処理フローチャートである。
ステップe1では、全ての資源が未割付けの変数vについてステップe2からステップe5まで繰り返し、全ての変数vについて処理を終えたら資源割付部24の処理を終了する。
【0046】
ステップe2では、変数vと生存区間が重なる変数に割り付けられているレジスタの集合Rを求める。
ステップe3では、ステップe2で求めたレジスタの集合Rに属さないレジスタrが存在するときはステップe4を実行し、そうでないときはステップe5を実行する。
【0047】
ステップe4では、変数vにレジスタrを割り付け、ステップe1に戻る。
ステップe5では、変数vにメモリを割り付け、ステップe1に戻る。
次に資源割付部24の具体的な動作例を図14の例を用いて説明する。ここでは変数aと変数t2の割り付けについて述べる。変数aと生存区間が重なる変数はt2,b,c,d,s1,s2,s3であるが、このうち変数s1,s2,s3には、それぞれレジスタr0,r1,r0とmdrが割り付けられているので、レジスタの集合Rにはこれらレジスタが属することになり(ステップe2)、変数aには、それ以外の例えば、レジスタr2が割り付けられる。
【0048】
次に引続き変数t2の割り付けについて説明する。変数t2に関しても同様に、変数t2と生存区間が重なる変数は、変数t1,a,b,c,d,e,s1,s2,s3であり、このうちレジスタに割り付けられているのは、変数a,s1,s2,s3でありそれぞれレジスタr2,r0,r1,r0とmdrが割り付けられているので変数t2には、それ以外の例えばレジスタr3が割り付けられる。
【0049】
次にコンパイラ装置2はコード生成部25を起動し、中間命令をコンパイラがターゲットとするマシンのアセンブラ文又は機械語命令などの目的プログラムに変換する。コード生成部25自体は従来方式と同様なので詳細説明は省略する。
以上述べたように本実施形態によれば、図14の変数a,t2のようにasm文を跨って生きている変数には、asm文生存区間生成部29で生成される一時変数s1,s2,s3の効果により、資源割付部24のステップe3,e4において、asm文で定義されるレジスタは割り付けられないので前述の「発明が解決しようとする課題」で述べた第1の制限は無くなり、またレジスタ引数置換部16のステップa2からa5により、図14の一時変数t2が生成され、さらに一時変数t2には資源割付部24のステップe3、e4において、asm文で定義されるレジスタは割り付けられないので、「発明が解決しようとする課題」で述べた第2の制限も無くなる。よって、プログラマが自由にインラインアセンブラルーチンを定義し、それをブラックボックスとして任意の場所で使用可能となり、インラインアセンブラルーチン使用時のプログラマのチェックの負担を大幅に軽減し、かつ、インラインアセンブラルーチンをライブラリ化し、プログラムの再利用性を向上させることが可能となる。
【0050】
尚、前述のasm文生存区間生成部29によって生成される一時変数sの導入とその生存区間の生成によって、資源割付部24に従来方式の文献2、3と同様の資源割り付け方式が適用可能となる。文献2に関しては、図14の中間プログラムと生存区間の情報をそのまま用いることによって適用可能となる。特に文献2は、コンパイラが生成する目的プログラの転送命令の発生を極力押えることが可能であり、例えば、図14の変数bと変数s2のように生存区間の終始が一致している変数は、可能であれば同じレジスタに割り付けられるので、変数bがレジスタr1に割り付けられ、asm中間命令i4は同一レジスタ間の転送となり削除される。
【0051】
また、広く知られている「グラフカラーリング」方式の拡張方式である文献3に関しては、図14の生存区間の情報から図19のような変数間の生存区間の重なりを示すグラフである干渉グラフを構築することによって適用可能となる。図19のグラフは、変数をグラフのノードとして表現し、生存区間が重なる変数(ノード)をエッジで結んだものであり、特にグラフのノードのうち一部のノード、図19ではノード(変数)p,s1,s2,s3が既にカラーリング(レジスタ割り付け)されている。文献3の方式は特に、このように既に一部のノードがカラーリングされているグラフを扱うことの可能な「グラフカラーリング方式」である。
【0052】
また以上述べた実施形態では除算命令に関するものついて述べたが、単に除算命令に対してのみ適用できるのでなく、積和演算命令などのマルチメディア処理対応の高機能命令や、四則演算、ビット操作演算等の任意の命令であって良く、また、それら複数の命令の組み合わせであっても良いことは言うまでもない。
更に、本実施形態でフローチャートを参照して説明した手順(図2〜図4、図12〜図13)等を機械語プログラムにより実現し、これを記録媒体に記録して流通・販売の対象にしても良い。このような記録媒体には、ICカードや光ディスク、フロッピーディスク等があるが、これらに記録された機械語プログラムは汎用コンピュータにインストールされることにより利用に供される。この汎用コンピュータは、インストールした機械語プログラムを逐次実行して、本実施形態に示したコンパイラ装置の機能を実現するのである。
【0053】
【発明の効果】
以上のように本発明は、どの資源に割り付けるべきかが未定である未割付変数のなかから、当該未割付変数の生存区間がアセンブラ文の記述されている区間と重複しているものを検出する未割付変数検出手段と、前記未割付変数検出手段により検出された未割付変数の生存区間と記述されている区間が重複しているアセンブラ文にて定義されている資源を検出する資源検出手段と、前記資源検出手段により検出された資源とは異なる資源を前記未割付変数検出手段により検出された未割付変数に割り付ける資源割付手段とを備えているので、インラインアセンブラルーチン使用時におけるチェックがプログラマに課せられることはない。インラインアセンブラルーチン使用時において従来プログラマに課せられていたチェック負担がなくなるので、アセンブラ文をプログラム上の任意の位置に記述することが可能となり、インラインアセンブラルーチンもプログラム上の任意の位置に記述することができる。それに伴い、インラインアセンブラルーチンを積極的に使用することによるプログラムの高速実行性を向上させることができ、プログラムの再利用性を向上させることができる。
【0054】
ここで何れかの関数にレジスタを用いて引渡される仮引数が存在する場合、当該仮引数の値を一時変数に代入する旨の代入命令を生成して当該関数の最初の位置に挿入すると共に、関数において使用されている全ての仮引数を、前記代入命令において値が代入される一時変数に置き換えるレジスタ引数置換手段を備え、前記未割付変数検出手段は更に、解析された生存区間内にアセンブラ文が含まれている一時変数を検出し、前記資源検出手段は更に、生存区間に含まれている当該アセンブラ文にて定義又は参照されているレジスタを検出して、前記資源割付手段は、未割付変数検出手段により検出された一時変数に、資源検出手段により検出されたレジスタとは異なるレジスタを割り付けてもよい。この場合、レジスタで渡される仮引数に割り付けられているレジスタが、アセンブラ文で不正に更新されることはなく、また、アセンブラ文を跨って生きている変数もアセンブラ文で不正に更新されることはなくなる。これによりインラインアセンブラルーチンを自由に定義し、それをブラックボックスとして任意の場所で使用可能となり、インラインアセンブラルーチンを積極的に使用することによるプログラムの高速実行性を向上させるとともにプログラムの再利用性も向上させることが可能となる。
【0055】
また上記装置において、前記未割付変数検出手段は、前記プログラムからアセンブラ文を検出する検出部と、アセンブラ文が検出されると、当該アセンブラ文にて定義又は参照される資源に割り付けられた割付済み一時変数を生成する割付済み一時変数生成部と、前記プログラムにおいて検出されたアセンブラ文が記述されている区間を検出し、検出された区間を生存区間として、前記生成された割付済み一時変数に設定する生存区間設定部と、割付済み一時変数に設定された生存区間と、生存区間が重なる未割付変数を検出する未割付変数検出部とを備えるので、アセンブラ文から割付済み一時変数を生成して、これを取り込む形式で資源割り付けを行うことができる。故に、転送命令の発生を極力押えることができる文献2と同様の資源割り付け方式や、広く知られている「グラフカラーリング」方式の拡張方式である文献3と同様の資源割り付け方式を適用することができる。
【図面の簡単な説明】
【図1】第1実施形態に係るコンパイラ装置1の構成図である。
【図2】レジスタ引数置換部16の処理のフローチャートである。
【図3】 asm文定義レジスタ検出部17の処理手順を示すフローチャートである。
【図4】資源割付部14の処理手順を示すフローチャートである。
【図5】高級言語で書かれたプログラムの一例を示す図である。
【図6】マクロ展開部11を実行した後のプログラムを示す図である。
【図7】構文解析部12を実行した後の中間プログラムの例を示す図である。
【図8】レジスタ引数置換部16を実行した後の中間プログラムを示す図である。
【図9】プログラム例に対する中間プログラムと生存区間を示す図である。
【図10】 asm文定義レジスタ保持部18および28の保持内容の一例を示す図である。
【図11】第2の実施形態に係るコンパイラ装置2の構成図である。
【図12】 asm文生存区間生成部29の処理手順を示すフローチャートである。
【図13】資源割付部24の処理手順を示すフローチャートである。
【図14】 asm文生存区間生成部29を実行した後のプログラム例に対する中間プログラムと生存区間を示す図である。
【図15】プログラム例と、対応するアセンブラプログラムと、比較アセンブラプログラムを示す図と、除算命令を説明する図である。
【図16】 asm文の記述例と、対応するアセンブラプログラムを示す図である。
【図17】インラインアセンブラルーチンの定義例と、インラインアセンブラルーチンの使用例を示す図である。
【図18】生存区間を表現する具体的なデータ構造を示す図である。
【図19】図14の生存区間に対する変数の干渉グラフを示す図である。
【符号の説明】
1 コンパイラ
11 マクロ展開部
12 構文解析部
13 最適化部
14 資源割付部
15 コード生成部
16 レジスタ引数置換部
17 asm文定義レジスタ検出部
18 asm文定義レジスタ保持部
2 コンパイラ
21 マクロ展開部
22 構文解析部
23 最適化部
24 資源割付部
25 コード生成部
26 レジスタ引数置換部
27 asm文定義レジスタ検出部
28 asm文定義レジスタ保持部
29 asm文生存区間生成部
Claims (10)
- 変数を定義又は参照している文を含むプログラムを、オブジェクト命令列に翻訳するコンパイラ装置であって、
前記オブジェクト命令列は、レジスタ又はメモリである資源を定義又は参照している命令からなり、
前記プログラムの何れかの区間に、何れかの資源を定義又は参照しているアセンブラ文が記述されており、
前記コンパイラ装置は、
どの資源に割り付けるべきかが未定である未割付変数のなかから、当該未割付変数の生存区間がアセンブラ文の記述されている区間と重複しているものを検出する未割付変数検出手段と、
前記未割付変数検出手段により検出された未割付変数の生存区間と記述されている区間が重複しているアセンブラ文にて定義されている資源を検出する資源検出手段と、
前記資源検出手段により検出された資源とは異なる資源を前記未割付変数検出手段により検出された未割付変数に割り付ける資源割付手段と
を備えることを特徴とするコンパイラ装置。 - 前記プログラムは、複数の関数を含み、
前記コンパイラ装置は更に、
何れかの関数にレジスタを用いて引渡される仮引数が存在する場合、当該仮引数の値を一時変数に代入する旨の代入命令を生成して当該関数の最初の位置に挿入すると共に、関数において使用されている全ての仮引数を、前記代入命令において値が代入される一時変数に置き換えるレジスタ引数置換手段を備え、
前記未割付変数検出手段は更に、
解析された生存区間内にアセンブラ文が含まれている一時変数を検出し、
前記資源検出手段は更に、
生存区間に含まれている当該アセンブラ文にて定義又は参照されているレジスタを検出して、
前記資源割付手段は、
未割付変数検出手段により検出された一時変数に、資源検出手段により検出されたレジスタとは異なるレジスタを割り付ける
ことを特徴とする請求項1に記載のコンパイラ装置。 - 前記未割付変数検出手段は、
前記プログラムからアセンブラ文を検出する検出部と、
アセンブラ文が検出されると、当該アセンブラ文にて定義又は参照される資源に割り付けられた割付済み一時変数を生成する割付済み一時変数生成部と、
前記プログラムにおいて検出されたアセンブラ文が記述されている区間を検出し、検出された区間を生存区間として、前記生成された割付済み一時変数に設定する生存区間設定部と、
割付済み一時変数に設定された生存区間と、生存区間が重なる未割付変数を検出する未割付変数検出部と
を備えることを特徴とする請求項1又は2に記載のコンパイラ装置。 - 前記コンパイラ装置は、
変数を定義又は参照している文と、マクロ識別子とを含むソースプログラムを装置外部から読み出す読出手段と、
マクロ識別子に基づいてソースプログラム内にアセンブラ文を展開するマクロ展開手段と、
展開されたアセンブラ文を含むソースプログラムの構文を解析して、複数の中間命令からなる中間プログラムを得る構文解析手段と、
構文解析により得られた中間プログラムに含まれる各変数がどの中間命令で定義され、
どの中間命令で最後に参照されているか解析することにより、中間プログラムにおける未割付変数について生存区間を解析する生存区間解析手段とを備え、
前記未割付変数検出手段は、
解析された生存区間がアセンブラ文の記述されている区間と重複している未割付変数を検出する
ことを特徴とする請求項1〜3の何れかに記載のコンパイラ装置。 - 変数を定義又は参照している文を含むプログラムを、オブジェクト命令列に翻訳するためにコンピュータを機能させるためのコンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記オブジェクト命令列は、レジスタ又はメモリである資源を定義又は参照している命令からなり、
前記コンパイラプログラムは、コンピュータを、
どの資源に割り付けるべきかが未定である未割付変数のなかから、当該未割付変数の生存区間がアセンブラ文の記述されている区間と重複しているものを検出する未割付変数検出手段と、
前記未割付変数検出手段により検出された未割付変数の生存区間と記述されている区間が重複しているアセンブラ文にて定義されている資源を検出する資源検出手段と、
前記資源検出手段により検出された資源とは異なる資源を前記未割付変数検出手段により検出された未割付変数に割り付ける資源割付手段として機能させる、コンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体。 - 前記プログラムは、複数の関数を含み、
前記コンパイラプログラムは更に、
何れかの関数にレジスタを用いて引渡される仮引数が存在する場合、当該仮引数の値を一時変数に代入する旨の代入命令を生成して当該関数の最初の位置に挿入すると共に、関数において使用されている全ての仮引数を、前記代入命令において値が代入される一時変数に置き換えるレジスタ引数置換手段としてコンピュータに機能させ、
前記未割付変数検出手段は更に、
解析された生存区間内にアセンブラ文が含まれている一時変数を検出し、
前記資源検出手段は更に、
生存区間に含まれている当該アセンブラ文にて定義又は参照されているレジスタを検出して、
前記資源割付手段は、
未割付変数検出手段により検出された一時変数に、資源検出手段により検出されたレジスタとは異なるレジスタを割り付ける
ことを特徴とする請求項5に記載のコンピュータ読取可能な記録媒体。 - 前記未割付変数検出手段は、
前記プログラムからアセンブラ文を検出する検出部と、
アセンブラ文が検出されると、当該アセンブラ文にて定義又は参照される資源に割り付けられた割付済み一時変数を生成する割付済み一時変数生成部と、
前記プログラムにおいて検出されたアセンブラ文が記述されている区間を検出し、検出された区間を生存区間として、前記生成された割付済み一時変数に設定する生存区間設定部と、
割付済み一時変数に設定された生存区間と、生存区間が重なる未割付変数を検出する未割付変数検出部と
を備え、
前記資源割付手段は、前記割付済み一時変数と生存区間が重なる未割付変数に対して資源を割り付けることを特徴とする請求項5又は6に記載のコンピュータ読取可能な記録媒体。 - 変数を定義又は参照している文を含むプログラムを、オブジェクト命令列に翻訳するコンパイル方法であって、
前記オブジェクト命令列は、レジスタ又はメモリである資源を定義又は参照している命令からなり、
前記プログラムの何れかの区間に、何れかの資源を定義又は参照しているアセンブラ文が記述されており、
未割付変数検出手段が、記憶手段に格納されている前記プログラムを読み出して、どの資源に割り付けるべきかが未定である未割付変数のなかから、当該未割付変数の生存区間がアセンブラ文の記述されている区間と重複しているものを検出する未割付変数検出ステップと、
資源検出手段が、記憶手段に格納されている前記プログラムを読み出して、前記未割付変数検出手段により検出された未割付変数の生存区間と記述されている区間が重複しているアセンブラ文にて定義されている資源を検出する資源検出ステップと、
資源割付手段が、前記資源検出手段により検出された資源とは異なる資源を前記未割付変数検出手段により検出された未割付変数に割り付ける資源割付ステップと、を備えることを特徴とするコンパイル方法。 - 前記プログラムは、複数の関数を含み、
前記コンパイル方法は更に、
レジスタ引数置換手段が何れかの関数にレジスタを用いて引渡される仮引数が存在する場合、当該仮引数の値を一時変数に代入する旨の代入命令を生成して当該関数の最初の位置に挿入すると共に、関数において使用されている全ての仮引数を、前記代入命令において値が代入される一時変数に置き換えるステップと、
前記未割付変数検出ステップにおいて、
解析された生存区間内にアセンブラ文が含まれている一時変数を検出し、
前記資源検出ステップにおいて、
生存区間に含まれている当該アセンブラ文にて定義又は参照されているレジスタを検出し、
前記資源割付ステップにおいて、
未割付変数検出ステップにおいて検出された一時変数に、前記資源検出ステップにより検出されたレジスタとは異なるレジスタを割り付ける
ことを特徴とする請求項8に記載のコンパイラ方法。 - 前記未割付変数検出ステップは、
前記プログラムからアセンブラ文を検出する検出サブステップと、
アセンブラ文が検出されると、当該アセンブラ文にて定義又は参照される資源に割り付けられた割付済み一時変数を生成する割付済み一時変数生成サブステップと、
前記プログラムにおいて検出されたアセンブラ文が記述されている区間を検出し、検出された区間を生存区間として、前記生成された割付済み一時変数に設定する生存区間設定サブステップと、
割付済み一時変数に設定された生存区間と、生存区間が重なる未割付変数を検出する未割付変数検出サブステップとを備え、
前記資源割付ステップにおいては、前記割付済み一時変数と生存区間が重なる未割付変数に対して資源を割り付けることを特徴とする請求項8又は9に記載のコンパイル方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP19571799A JP4041248B2 (ja) | 1999-07-09 | 1999-07-09 | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 |
US09/612,028 US6738966B1 (en) | 1999-07-09 | 2000-07-07 | Compiling device, computer-readable recording medium on which a compiling program is recorded and a compiling method |
US10/819,595 US20040194071A1 (en) | 1999-07-09 | 2004-04-07 | Compiling device, computer-readable recording medium on which a compiling program is recorded and a compiling method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP19571799A JP4041248B2 (ja) | 1999-07-09 | 1999-07-09 | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001022591A JP2001022591A (ja) | 2001-01-26 |
JP4041248B2 true JP4041248B2 (ja) | 2008-01-30 |
Family
ID=16345804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP19571799A Expired - Lifetime JP4041248B2 (ja) | 1999-07-09 | 1999-07-09 | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 |
Country Status (2)
Country | Link |
---|---|
US (2) | US6738966B1 (ja) |
JP (1) | JP4041248B2 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1199629A1 (en) * | 2000-10-17 | 2002-04-24 | STMicroelectronics S.r.l. | Processor architecture with variable-stage pipeline |
US20020138819A1 (en) * | 2000-12-19 | 2002-09-26 | Hills Theodore S. | Computer programming language to describe and encapsulate a computer as a set of classes and objects |
DE10216602A1 (de) * | 2002-04-15 | 2003-10-30 | Giesecke & Devrient Gmbh | Optimierung von compilergeneriertem Programmcode |
JP2004078268A (ja) * | 2002-08-09 | 2004-03-11 | Fujitsu Ltd | 情報処理装置、情報処理方法、およびプログラム |
JP3896087B2 (ja) | 2003-01-28 | 2007-03-22 | 松下電器産業株式会社 | コンパイラ装置およびコンパイル方法 |
US7337438B1 (en) | 2003-03-31 | 2008-02-26 | Applied Micro Circuits Corporation | Macros to support structures for an assembler that does not support structures |
US7409678B2 (en) * | 2004-01-28 | 2008-08-05 | International Business Machines Corporation | Compiler, compilation and storage |
US7861234B1 (en) * | 2005-02-23 | 2010-12-28 | Oracle America, Inc. | System and method for binary translation to improve parameter passing |
JP2006338616A (ja) * | 2005-06-06 | 2006-12-14 | Matsushita Electric Ind Co Ltd | コンパイラ装置 |
US8549466B2 (en) * | 2005-07-15 | 2013-10-01 | Texas Instruments Incorporated | Tiered register allocation |
US8924691B2 (en) * | 2006-02-24 | 2014-12-30 | Freescale Semiconductor, Inc. | Software pipelining |
US8161464B2 (en) * | 2006-04-11 | 2012-04-17 | International Business Machines Corporation | Compiling source code |
JP5165969B2 (ja) * | 2007-08-29 | 2013-03-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムのコンパイルのために変数にレジスタを割り付ける技術 |
US8522218B2 (en) * | 2010-03-12 | 2013-08-27 | Microsoft Corporation | Cross-module inlining candidate identification |
JP5059174B2 (ja) * | 2010-08-10 | 2012-10-24 | 株式会社東芝 | プログラム変換装置、およびそのプログラム |
US11188656B2 (en) * | 2018-07-27 | 2021-11-30 | Silicon Laboratories Inc. | Secure software system for microcontroller or the like and method therefor |
JP7225900B2 (ja) * | 2019-02-25 | 2023-02-21 | 富士通株式会社 | コンパイラ装置、プログラム、及び情報処理方法 |
GB2582785A (en) * | 2019-04-02 | 2020-10-07 | Graphcore Ltd | Compiling a program from a graph |
CN111124416B (zh) * | 2019-12-09 | 2024-02-13 | 龙芯中科(合肥)技术有限公司 | 向内联汇编传递参数的方法、装置、设备以及存储介质 |
GB202010839D0 (en) * | 2020-07-14 | 2020-08-26 | Graphcore Ltd | Variable allocation |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4782444A (en) * | 1985-12-17 | 1988-11-01 | International Business Machine Corporation | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering |
US5428793A (en) * | 1989-11-13 | 1995-06-27 | Hewlett-Packard Company | Method and apparatus for compiling computer programs with interproceduural register allocation |
IL100990A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher |
IL100987A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Method and device for encoding |
US5659753A (en) * | 1991-02-27 | 1997-08-19 | Digital Equipment Corporation | Interface for symbol table construction in a multilanguage optimizing compiler |
US5355494A (en) * | 1991-12-12 | 1994-10-11 | Thinking Machines Corporation | Compiler for performing incremental live variable analysis for data-parallel programs |
US5418958A (en) * | 1992-07-15 | 1995-05-23 | Sun Microsystems, Inc. | Register allocation by decomposing, re-connecting and coloring hierarchical program regions |
JPH0721033A (ja) * | 1993-07-07 | 1995-01-24 | Nec Corp | 言語処理装置及びその方法 |
JP3606387B2 (ja) * | 1994-09-13 | 2005-01-05 | 松下電器産業株式会社 | コンパイル装置 |
CN1149476C (zh) * | 1995-03-16 | 2004-05-12 | 松下电器产业株式会社 | 资源分配装置 |
JP3130446B2 (ja) * | 1995-05-10 | 2001-01-31 | 松下電器産業株式会社 | プログラム変換装置及びプロセッサ |
JP3650649B2 (ja) * | 1995-06-16 | 2005-05-25 | 松下電器産業株式会社 | 最適化装置 |
US5881288A (en) * | 1995-09-29 | 1999-03-09 | Matsushita Electric Industrial Co., Ltd. | Debugging information generation system |
US5815719A (en) | 1996-05-07 | 1998-09-29 | Sun Microsystems, Inc. | Method and apparatus for easy insertion of assembler code for optimization |
US6286135B1 (en) * | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
JP3220055B2 (ja) * | 1997-07-17 | 2001-10-22 | 松下電器産業株式会社 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
US6247174B1 (en) * | 1998-01-02 | 2001-06-12 | Hewlett-Packard Company | Optimization of source code with embedded machine instructions |
US6463582B1 (en) * | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6983459B1 (en) * | 1999-04-06 | 2006-01-03 | International Business Machines Corporation | Incorporating register pressure into an inlining compiler |
US6651247B1 (en) * | 2000-05-09 | 2003-11-18 | Hewlett-Packard Development Company, L.P. | Method, apparatus, and product for optimizing compiler with rotating register assignment to modulo scheduled code in SSA form |
-
1999
- 1999-07-09 JP JP19571799A patent/JP4041248B2/ja not_active Expired - Lifetime
-
2000
- 2000-07-07 US US09/612,028 patent/US6738966B1/en not_active Expired - Lifetime
-
2004
- 2004-04-07 US US10/819,595 patent/US20040194071A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20040194071A1 (en) | 2004-09-30 |
JP2001022591A (ja) | 2001-01-26 |
US6738966B1 (en) | 2004-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4041248B2 (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
JP5851396B2 (ja) | 処理方法 | |
JP5893038B2 (ja) | ユーザ定義型のコンパイル時境界検査 | |
US8843920B2 (en) | Systems and methods for deferring software implementation decisions until load time | |
JP4638484B2 (ja) | データ処理装置におけるデータ整合性 | |
US10409559B2 (en) | Single-source-base compilation for multiple target environments | |
US9134973B2 (en) | Dynamic compiling and loading at runtime | |
JP6651977B2 (ja) | 情報処理装置、コンパイル方法、およびコンパイルプログラム | |
JP2008305337A (ja) | プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム | |
JP2022522880A (ja) | プログラム論理の表現を生成する方法、逆コンパイル装置、再コンパイルシステムおよびコンピュータプログラム製品 | |
CN112416313A (zh) | 支持大整数数据类型和运算符的编译方法 | |
JP5278088B2 (ja) | プログラムの飜訳装置、飜訳方法、ならびに、プログラム | |
KR20190060561A (ko) | 이종 디바이스의 선택적 추상화를 통한 사물 인터넷 어플리케이션의 개발 환경을 통합하는 방법 및 시스템 | |
CN113220327A (zh) | 智能合约升级方法及区块链系统 | |
JP3264901B2 (ja) | コンパイル装置及びコンパイル方法 | |
JP2017091070A (ja) | 実行可能コード生成プログラムおよび実行可能コード生成装置 | |
JP2011181114A (ja) | プログラム変換装置、プログラム変換方法及び記録媒体 | |
CN116775127B (zh) | 一种基于RetroWrite框架的静态符号执行插桩方法 | |
JP3630086B2 (ja) | プログラム変換装置、プログラム変換方法及び記録媒体 | |
JP2007114934A (ja) | コンパイラシステム | |
JP3915208B2 (ja) | コンパイル装置 | |
JP3551352B2 (ja) | ループ分割方法 | |
Bartulović et al. | Reducing RAM footprint of the generated tests for AUTOSAR RTE | |
Szalay et al. | Visualising compiler-generated special member functions of C++ types | |
JP3634712B2 (ja) | コンパイラ装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040927 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070423 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070501 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070614 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070717 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070903 |
|
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: 20071016 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071109 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101116 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4041248 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111116 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121116 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121116 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131116 Year of fee payment: 6 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |