JP2001290652A - Device and method for converting program and recording medium - Google Patents
Device and method for converting program and recording mediumInfo
- Publication number
- JP2001290652A JP2001290652A JP2000102751A JP2000102751A JP2001290652A JP 2001290652 A JP2001290652 A JP 2001290652A JP 2000102751 A JP2000102751 A JP 2000102751A JP 2000102751 A JP2000102751 A JP 2000102751A JP 2001290652 A JP2001290652 A JP 2001290652A
- Authority
- JP
- Japan
- Prior art keywords
- register
- program
- variable
- real
- virtual
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
Description
【0001】[0001]
【発明の属する技術分野】本発明は、高級プログラミン
グ言語で書かれたソースプログラムを機械語プログラム
やアセンブラプログラムなどの目的プログラム(オブジ
ェクトプログラム)に翻訳するプログラム言語処理系に
おいて、高級プログラミング言語で書かれたプログラム
部分と、プログラムの特定部分を高速実行するために、
より機械語に近いアセンブラ言語で記述した部分の両方
を含むソースプログラムを翻訳するプログラム変換装
置、プログラム変換方法及び記録媒体に関する。BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention relates to a program language processing system for translating a source program written in a high-level programming language into a target program (object program) such as a machine language program or an assembler program. In order to execute the program part and the specific part of the program at high speed,
The present invention relates to a program conversion device, a program conversion method, and a recording medium for translating a source program including both portions described in an assembler language closer to a machine language.
【0002】[0002]
【従来の技術】近年、機器組み込み用プロセッサととも
に機器に搭載されるプログラム(以下、組み込みプログ
ラムと呼ぶ)の規模が増大し、組み込みプログラムと言
えども、そのプログラム開発はC言語などの高級言語で
行なわれるのが一般的である。特に、近年急速に発展し
ている通信、画像、文字、音声処理などを扱う、マルチ
メディア処理を行なう情報機器に搭載される組み込みプ
ログラムでは、プログラムサイズが増大し、高級言語開
発は必須となっている。2. Description of the Related Art In recent years, the scale of programs (hereinafter referred to as "embedded programs") mounted on devices together with a processor for embedded devices has increased, and even though the programs are embedded programs, their programs are developed in a high-level language such as C language. It is common that In particular, in embedded programs installed in information devices that perform multimedia processing, such as communication, images, characters, and sound processing, which are rapidly developing in recent years, the program size has increased, and high-level language development has become indispensable. I have.
【0003】ところで、これらマルチメディア処理は、
大量のデータを高速に処理する事が要求されるため、頻
繁に実行されかつ短時間実行を強く要求されるプログラ
ム部分は、高級言語を用いた記述をせずに、機械語に近
いアセンブラ言語による記述を行なうことが多い。これ
は、高級言語記述を用いたプログラム部分は、コンパイ
ラによって、より機械語に近いアセンブラ言語などに変
換されるが、コンパイラでは高級言語記述された様々な
形のプログラムを想定して翻訳処理を行なうので、どう
しても冗長なアセンブラ言語プログラムに変換してしま
う場合があるからである。[0003] By the way, these multimedia processing,
Because high-speed processing of large amounts of data is required, program parts that are frequently executed and strongly required to be executed in a short time are written in an assembler language close to machine language without using a high-level language. Often described. This is because a program part using a high-level language description is converted into an assembler language closer to a machine language by a compiler, but the compiler performs a translation process assuming various types of programs described in the high-level language. Therefore, there is a case where the program is inevitably converted into a redundant assembler language program.
【0004】そこで高級言語の拡張機能として、高級言
語記述部分とアセンブラ言語記述部分との値の受渡しを
行なえる機能を備えかつ、高級言語記述部分にアセンブ
ラ言語記述部分を埋め込むことができる、「インライン
アセンブラ機能」を有するコンパイラが多数存在してい
る。インラインアセンブラ機能の実現方式に関しては、
様々な方式が存在するが、その中でも、より使い勝手の
良い文献3(後述)の方式について次に述べる。ここで
は、説明の簡単化のために、文献3の方式説明でも扱っ
ているC言語の除算、剰余算を例にした説明を行なう。Therefore, as an extended function of a high-level language, there is provided a function of passing values between a high-level language description part and an assembler language description part, and an inline function that can embed an assembler language description part in the high-level language description part. There are many compilers having the "assembler function". Regarding the method of realizing the inline assembler function,
There are various methods, and among them, the method of Literature 3 (described later) which is more convenient is described below. Here, for simplicity of description, a description will be given of an example of division and remainder calculation in C language, which is also handled in the method description of Reference 3.
【0005】まず、コンパイラがターゲットとするマイ
クロプロセッサが2オペランド形式のロードストア方式
(オペランドのアドレシングにおいて、メモリ間演算命
令は転送命令しかない)であり、かつ、除算命令div
が次のような仕様であるとする。 div rm,rn ここにおいて除算命令divは、レジスタrmをレジス
タrnで除算し、除算結果をrnに格納し、剰余結果を
特殊レジスタmdrに格納する。First, a microprocessor targeted by a compiler is a load / store system of a two-operand type (in operand addressing, an inter-memory operation instruction has only a transfer instruction), and a division instruction div
Has the following specifications. div rm, rn Here, the division instruction div divides the register rm by the register rn, stores the division result in rn, and stores the remainder result in the special register mdr.
【0006】このように多くのマイクロプロセッサの除
算命令は、除算と剰余算を1命令で同時に算出すること
が可能である。また図12などに記述されている転送命
令movは第1オペランドの値を第2オペランドに転送
することを示すとする。そこで、図12(a)のように
「asm」キーワードを用いた「asm文」(後述する
が、正確には「asm文ブロック」)を使用して、アセ
ンブラルーチンをマクロ定義し、同図(b)のように複
数箇所で使用する。マクロ定義されたマクロdmは同図
(c)のように展開される。文献3の方式では、変数の
うちマクロdmの間、値が保存される変数(マクロdm
に跨って生きている変数と言う)には、マクロdmで値
が壊されるレジスタ(この場合はレジスタr0, r1)
が割り付けられないことをコンパイラが保証するので、
マクロdmを任意の場所に記述することが可能となり、
プログラミングの自由度が向上する。As described above, the division instructions of many microprocessors can simultaneously calculate the division and the remainder with one instruction. It is also assumed that the transfer instruction mov described in FIG. 12 or the like indicates that the value of the first operand is transferred to the second operand. Therefore, as shown in FIG. 12A, an assembler routine is macro-defined by using an "asm sentence" using the "asm" keyword (more precisely, an "asm sentence block", which will be described later). Use at multiple locations as in b). The macro dm defined by the macro is expanded as shown in FIG. In the method of Reference 3, a variable whose value is stored during macro dm (macro dm
Are stored in the registers whose values are destroyed by the macro dm (registers r0 and r1 in this case).
Is guaranteed to be unallocated,
Macro dm can be described anywhere.
The degree of freedom in programming is improved.
【0007】なお、図12(a)のasm文の記述例
は、文献3の例と若干異なっており、複数のasm文の
集合を「{」「}」で囲むことによって表現している。
このように、複数のasm文の集合を「asmブロッ
ク」と呼ぶことにする。一つのasmブロックを一つの
asm文と同様に扱うことによって、文献3の方式をa
smブロックにも容易に適用できる。The description example of the asm sentence in FIG. 12A is slightly different from the example of Reference 3, and is expressed by enclosing a set of a plurality of asm sentences with "@" and "@".
In this way, a set of a plurality of asm sentences will be referred to as an “asm block”. By treating one asm block in the same way as one asm statement,
It can be easily applied to sm blocks.
【0008】[0008]
【発明が解決しようとする課題】しかしながら、文献3
の方式では、マクロdmの使用箇所によっては、コンパ
イラが必ずしも効率のよいアセンブラコードに変換でき
ないという問題がある。この点を具体的な例で示す。図
13は、図12(c)の関数f2をさらにコンパイラ内
部で処理しやすいように内部変換したものである。特に
図13の(s1)のように関数hの呼び出しの前に、コ
ンパイラが生成した一時変数tに変数mの値を格納し、
変数tを関数hの引数としている。これは、コンパイラ
が関数の引数の値を確実にレジスタで渡すために導入し
たものであり、一時変数tにはレジスタr0が割り付け
られているものとする。(引数をレジスタで渡すこと
は、高速な関数呼び出しを行なうために、広くコンパイ
ラで行なわれている方式である。)このとき図13の変
数mは、asmブロックに跨って生きているので、レジ
スタr0,r1は変数mには割り付けることができな
い。その結果、変数mにはレジスタr0,r1以外のレ
ジスタが割り付けられることになり、図13の(s1)
において転送命令が生成されることとなる。[Problems to be Solved by the Invention] However, Document 3
In the method of (1), there is a problem that the compiler cannot always convert to efficient assembler code depending on where the macro dm is used. This point will be described with a specific example. FIG. 13 shows a result of internally converting the function f2 of FIG. 12C so that it can be further processed inside the compiler. In particular, before calling the function h as shown in (s1) of FIG. 13, the value of the variable m is stored in the temporary variable t generated by the compiler,
The variable t is used as an argument of the function h. This is introduced by the compiler to ensure that the value of the argument of the function is passed by the register, and it is assumed that the register r0 is allocated to the temporary variable t. (Passing an argument by register is a method widely used by compilers in order to perform high-speed function calls.) At this time, since the variable m in FIG. r0 and r1 cannot be assigned to the variable m. As a result, registers other than the registers r0 and r1 are allocated to the variable m, and (s1) in FIG.
, A transfer instruction is generated.
【0009】そこで本発明の目的は、転送命令の生成を
低減するプログラム変換装置(コンパイラ装置)、プロ
グラム変換方法及び記録媒体を提供することを目的とす
る。An object of the present invention is to provide a program conversion device (compiler device), a program conversion method, and a recording medium that reduce generation of transfer instructions.
【0010】[0010]
【課題を解決するための手段】上記目的を達成するた
め、本発明は、ソースプログラムをオブジェクトプログ
ラムに変換するプログラム変換装置であって、実レジス
タの代わりに任意のレジスタを示す仮想レジスタを用い
て記述されたプログラム部分を含むソースプログラムを
記憶する記憶手段と、ソースプログラム中の変数であっ
て、前記プログラム部分を跨ぐ生存区間を有する変数を
検出する検出手段と、前記仮想レジスタに対して、前記
検出手段により検出された変数に対して割り当てられる
べき実レジスタとは異なる実レジスタを割り当てる割り
当て手段と、割り当て結果に従ってソースプログラムか
らオブジェクトプログラムを生成する生成手段とを備え
る。To achieve the above object, the present invention provides a program conversion device for converting a source program into an object program, using a virtual register indicating an arbitrary register instead of a real register. A storage unit that stores a source program including the described program part; a detection unit that detects a variable in the source program, the variable having a live range spanning the program part; An allocation unit that allocates a real register different from the real register to be allocated to the variable detected by the detection unit, and a generation unit that generates an object program from a source program according to the allocation result.
【0011】また前記検出手段は、前記プログラム部分
を生存区間とする一時変数を、仮想レジスタ毎に生成す
る一時変数生成部と、ソースプログラム中の変数であっ
て、前記一時変数の生存区間と重複する生存区間を有す
る変数を検出する検出部とを有する。前記割り当て手段
は、検出された変数に実レジスタを割り当てた場合にど
れだけ有利であるかを示す得失値を、実レジスタ毎に算
出する得失値算出部と、前記検出手段により検出された
変数に対して得失値が最小の実レジスタを、前記仮想レ
ジスタに割り当てる割り当て部とを有する。The detecting means may include a temporary variable generating unit for generating, for each virtual register, a temporary variable having the program portion as a live range, wherein the temporary variable is a variable in the source program and overlaps with a live range of the temporary variable. And a detection unit for detecting a variable having a live range. The allocating means calculates a value obtained by assigning a real register to the detected variable, and calculates a value obtained by calculating the value obtained by the detecting means. And an allocating unit for allocating a real register having a minimum value to the virtual register.
【0012】この構成によれば検出された変数に対して
最小得失値の実レジスタが仮想レジスタに割り当てられ
るので、検出された変数には得失値がより高い実レジス
タを割り当てることができる。変数に割り当てる実レジ
スタの変数に対する得失値が高い程、その変数と資源継
承関係にある別の変数とが同じ実レジスタを継承する確
率が高くなるので、転送命令の発生を低減できるという
効果がある。According to this configuration, since the real register having the minimum gain / loss value is assigned to the virtual register for the detected variable, the real register having the higher gain / loss value can be assigned to the detected variable. The higher the gain / loss value of a real register assigned to a variable, the higher the probability that the variable and another variable in a resource inheritance relationship will inherit the same real register, thereby reducing the occurrence of transfer instructions. .
【0013】[0013]
【発明の実施の形態】本発明の実施形態の説明に先だっ
て、本発明に関連する文献を挙げ、以下で用いる用語に
ついて説明しておく。 <文献> 1.A.V.Aho, R.Sethi, J.D.Ullman:”Compilers, Prin
ciple, Techniques, andTool”, Addison Wesley Publi
shing Company Inc.,1986,(邦訳)原田賢一:”コンパ
イラI、II”,サイエンス社,1990 2.田中:”資源割付装置及び資源割付プログラムが記
録されたコンピュータ読み取り可能な記録媒体”,出願
番号 特願平10−344524 3.田中:”コンパイラ装置及びコンパイラプログラム
が記録されたコンピュータ読み取り可能な記録媒体およ
びコンパイル方法”,出願番号 特願平11−1957
17 <用語の説明> ・変数の定義、参照、使用 変数の値を設定することを「定義する」と呼び、設定し
た値を使用することを「参照する」と呼ぶ。またプログ
ラム上で変数を定義したり、参照したりすることを、変
数を「使用する」と呼ぶことにする。また、以下では仮
引数も特に断らない限り変数と同様に扱う。 ・一時変数 コンパイラが計算結果を一時的に格納するために生成す
る変数や、処理の効率化を図る上で生成する変数のこと
を「一時変数」と呼ぶことにする。以下では特に断らな
い限り通常のソースプログラムで記述される変数と同様
に扱う。 ・中間命令 処理をし易すくするためにコンパイラがソースプログラ
ムのコードを中間的なコードに変換したものを「中間コ
ード」と呼び、中間コードの1ステップを「中間命令」
と呼ぶことにする。中間命令には4つ組や3つ組などが
存在し、これらが変換されて最終的な目的プログラム
(オブジェクトプログラム)が生成される。またソース
プログラムを中間命令の列に変換したものを「中間プロ
グラム」と呼ぶことにする。図6(a)は図5(c)関
数f2のプログラムに対する中間プログラムの一例であ
り、4つ組の一つである3番地コードで表現している。
また図6(a)のi1,i2など、「i」とそれに付随
する番号で示したものは、中間命令の識別子を意味して
いる。また、図5(c)のasmブロックは、図6
(a)のように図面上は図5(c)と同一な形式の中間
命令に変換されている。特に図6(a)のasmブロッ
クの中間命令を「asmブロック中間命令」と呼ぶこと
にする。DESCRIPTION OF THE PREFERRED EMBODIMENTS Prior to the description of the embodiments of the present invention, documents related to the present invention will be cited and terms used in the following will be explained. <Literature> 1. AVAho, R. Sethi, JDUllman: ”Compilers, Prin
ciple, Techniques, andTool ”, Addison Wesley Publi
shing Company Inc., 1986, Kenichi Harada: "Compiler I, II", Science, 1990. 2. Tanaka: “Computer readable recording medium on which resource allocation device and resource allocation program are recorded”, application number Japanese Patent Application No. Hei 10-344524. Tanaka: "Compiler device and computer-readable recording medium on which compiler program is recorded and compiling method", application number Japanese Patent Application No. 11-1957.
17 <Explanation of terms> Definition, reference and use of variables Setting the value of a variable is called "defining", and using the set value is called "referencing". Defining or referencing a variable in a program is referred to as "using" a variable. In the following, formal arguments are treated in the same manner as variables unless otherwise specified. -Temporary variables Variables that are generated by the compiler to temporarily store calculation results and variables that are generated to increase the efficiency of processing are called "temporary variables". In the following, unless otherwise specified, they are handled in the same way as variables described in ordinary source programs. -Intermediate instruction The compiler converts the code of the source program into intermediate code to facilitate processing, called "intermediate code", and one step of the intermediate code is called "intermediate instruction".
I will call it. There are quadruples and triads in the intermediate instructions, and these are converted to generate a final target program (object program). A source program converted into a sequence of intermediate instructions will be referred to as an "intermediate program". FIG. 6A shows an example of an intermediate program corresponding to the program of the function f2 in FIG. 5C, which is represented by an address code, which is one of a set of four.
In addition, those indicated by “i” and the accompanying numbers, such as i1 and i2 in FIG. 6A, mean the identifier of the intermediate instruction. Also, the asm block in FIG.
As shown in FIG. 5A, the instruction is converted into an intermediate instruction having the same format as that shown in FIG. 5C. In particular, the intermediate instruction of the asm block in FIG. 6A will be referred to as “asm block intermediate instruction”.
【0014】尚、本発明における中間命令は特にこの形
式に限りるわけでなく他の形式の中間命令にも適用可能
である。また、コンパイラ装置内の処理を簡単化するた
めに、中間プログラムの最初と終りを表す中間命令や、
関数の始めと終りを表す中間命令など特定のプログラム
範囲を表す中間命令も用意されている。図6(a)では
中間命令i50,i51のように表現される関数の関数
の始めと終りを示す中間命令が示されている。 ・基本ブロック 中間命令列のうち、中間命令列内部からの飛び越しも、
また中間命令列内部への飛び越しもなく、中間命令列の
実行順が一定順序である場合、その中間命令列を基本ブ
ロックと言う。基本ブロックについては文献1に詳細に
記載されている。 ・生存区間 生存区間とはそれぞれの変数に保持されている値が有効
となる区間であり、正確には変数の値を定義する中間命
令からその定義された値を最後に参照する中間命令まで
のプログラム上の区間のことである。また生存区間中に
おいて変数は「生きている」と言うことにする。生存区
間のさらに詳しい説明は、文献1、2、3に記載されて
いる。図7(b)が生存区間の一例である。図7(b)
において生存区間は縦線の実線で表されている。生存区
間の開始点、及び終了点をそれぞれ白丸、黒丸で表現し
ている。また、図7(b)のようにasmブロック中間
命令に対する生存区間に関しては、asmブロック内の
asm文毎の生存区間までも求める必要はなく、生存区
間はasmブロック全体を表すもので十分である。 ・変数への資源割り付け 変数への資源割り付けとは、変数にレジスタやメモリを
割り付けることである。一つのレジスタやメモリにはプ
ログラムの同一区間で二つ以上の値を保持することは不
可能であるため、生存区間が重なる変数には同じレジス
タやメモリを割り付けることは不可能であり、異なるレ
ジスタやメモリを割り付けることが必須となる。例え
ば、図7の変数mと変数s2(s2に関しては後述)の
二つの生存区間が重なっており、それぞれの変数には異
なるレジスタやメモリを割り付ける必要がある。以下で
はレジスタやメモリを合わせて「資源」と呼ぶことにす
る。 ・資源継承関係 変数tと生存区間の始めと終りが一致し、同一の資源に
割り付けると転送命令の発生を削減できる変数uが存在
するとき、変数tと変数uは「資源継承関係」にあると
言うことにする。例えば、図7(b)において、変数e
と変数t1、変数t1と変数m、変数mと変数t2はそ
れぞれ、資源継承関係にある。また、変数eと変数m
は、「間接的資源継承関係」にあると言うことにする。
資源継承関係の詳細な説明は文献2に記載されているの
で、これ以上の説明は省略する。 ・得失値 得失値とは、目的プログラムの転送命令の発生を抑える
観点から考えて、既に変数に割り付けられた資源の要素
(レジスタやメモリ)を、これから割り付けようとする
変数tに割り付けたとき、どれだけ転送命令の発生抑制
に貢献するかを、変数tと資源継承関係または間接的資
源継承関係にある変数に着目して定量化した値である。
例えば、図7(b)において、変数mにレジスタr0を
割り付けると、中間命令i11は削除可能となるので、
この場合、レジスタr0の得失値は増加し、得失値の算
出結果から変数mにレジスタr0を割り付けると有利で
あると判断される。得失値の詳細な説明は文献2に記載
されているので、これ以上の説明は省略する。 <実施形態の説明>本実施形態のコンパイラ装置では、
asmブロック内のレジスタの記述方法において、レジ
スタ名の前に「v_」をつけた場合は、特定のレジスタ
ではなく、任意のレジスタを意味することとし、この
「v_」付きのレジスタを「仮想レジスタ」と呼ぶこと
にする。そして、その有効範囲は、asmブロック内で
あるとする。Incidentally, the intermediate instruction in the present invention is not limited to this format, and can be applied to other types of intermediate instructions. Also, in order to simplify the processing in the compiler device, intermediate instructions indicating the beginning and end of the intermediate program,
Intermediate instructions that represent a specific program range, such as intermediate instructions that indicate the beginning and end of a function, are also provided. FIG. 6A shows an intermediate instruction indicating the beginning and end of a function of a function expressed as intermediate instructions i50 and i51.・ Basic block Of the intermediate instruction sequence, jumping from inside the intermediate instruction sequence
If the execution order of the intermediate instruction sequence is a fixed order without jumping into the intermediate instruction sequence, the intermediate instruction sequence is called a basic block. The basic block is described in detail in Document 1. -Live range The live range is the range in which the value held in each variable is valid. To be precise, the range from the intermediate instruction that defines the value of the variable to the intermediate instruction that finally refers to the defined value is defined. A section on the program. The variable is said to be "alive" during the life span. A more detailed description of the survival interval is described in References 1, 2, and 3. FIG. 7B shows an example of the live range. FIG. 7 (b)
In, the live range is represented by a vertical solid line. The start point and end point of the live range are represented by white circles and black circles, respectively. Further, as shown in FIG. 7B, it is not necessary to obtain the live range for each asm statement in the asm block as to the live range for the asm block intermediate instruction, and it is sufficient that the live range represents the entire asm block. . -Resource allocation to variables Resource allocation to variables means allocating registers and memory to variables. Since it is impossible to store two or more values in the same section of a program in one register or memory, it is impossible to assign the same register or memory to a variable whose live range overlaps. And it is essential to allocate memory. For example, two live ranges of a variable m and a variable s2 (s2 will be described later) in FIG. 7 overlap, and it is necessary to allocate different registers and memories to each variable. Hereinafter, the register and the memory are collectively referred to as “resource”. -Resource inheritance relationship When the variable t and the start and end of the live range match, and there is a variable u that can reduce the occurrence of transfer instructions when allocated to the same resource, the variable t and the variable u are in a "resource inheritance relationship". I will say. For example, in FIG.
And the variable t1, the variable t1 and the variable m, and the variable m and the variable t2, respectively, have a resource inheritance relationship. Variable e and variable m
Are in an "indirect resource inheritance relationship".
Since the detailed description of the resource inheritance relationship is described in Reference 2, further description is omitted.・ Loss / Loss A gain / loss value is defined as a case where a resource element (register or memory) already allocated to a variable is allocated to a variable t to be allocated from the viewpoint of suppressing the occurrence of a transfer instruction of a target program. This is a value quantified by focusing on variables that have a resource inheritance relationship or an indirect resource inheritance relationship with the variable t, which contributes to the suppression of the occurrence of transfer instructions.
For example, in FIG. 7B, if the register r0 is assigned to the variable m, the intermediate instruction i11 can be deleted.
In this case, the profit / loss value of the register r0 increases, and it is determined that it is advantageous to assign the register r0 to the variable m from the calculation result of the profit / loss value. Since the detailed description of the gain / loss value is described in Reference 2, further description is omitted. <Description of Embodiment> In the compiler device of this embodiment,
In the description method of the register in the asm block, when “v_” is added before the register name, it means not a specific register but an arbitrary register, and the register with “v_” is referred to as a “virtual register”. ". Then, it is assumed that the effective range is within the asm block.
【0015】以下では、図5から図7のプログラム例を
参照しながら説明を行なう。特に、図5(a)は従来技
術の説明で用いた図12(a)のレジスタr0の使用部
分を仮想レジスタv_r0としたものである。asmブ
ロック中のレジスタを仮想レジスタで記述するのは、プ
ログラム作成者が行なうものとする。図1は本実施形態
のコンパイラ装置の構成図である。図1のコンパイラ装
置1は、マクロ展開部11、構文解析部12、最適化部
13、資源割付部14及びコード生成部15からなる一
般的なコンパイラ装置を構成する部分と、レジスタ引数
置換部16、asmブロック定義レジスタ検出部17、
asmブロック定義レジスタ保持部18及びasmブロ
ック生存区間生成部19からなる本発明に関係する部分
から構成されている。In the following, description will be made with reference to program examples shown in FIGS. In particular, FIG. 5A shows a case where the used part of the register r0 of FIG. 12A used in the description of the conventional technique is a virtual register v_r0. The register in the asm block is described by a virtual register by a program creator. FIG. 1 is a configuration diagram of a compiler device of the present embodiment. The compiler device 1 shown in FIG. 1 includes a general compiler device including a macro expansion unit 11, a syntax analysis unit 12, an optimization unit 13, a resource allocation unit 14, and a code generation unit 15, and a register argument replacement unit 16 , Asm block definition register detection unit 17,
It comprises a part related to the present invention, which comprises an asm block definition register holding unit 18 and an asm block live range generation unit 19.
【0016】次に各部の動作と機能について例を示しな
がら説明する。コンパイラ装置1はまず最初にマクロ展
開部11を起動する。マクロ展開部11は、マクロ定義
されたマクロ識別子をその本体で置き換える。この処理
部分は一般的なC言語コンパイラのマクロプロセッサの
処理と同様なので詳細説明は省略し処理結果の例につい
て説明する。Next, the operation and function of each section will be described with reference to examples. First, the compiler 1 activates the macro expansion unit 11. The macro expansion unit 11 replaces the macro identifier defined by the macro with its body. This processing part is the same as the processing of the macro processor of a general C language compiler, so that the detailed description will be omitted and an example of the processing result will be described.
【0017】例えば、図5(a)がマクロ定義されたマ
クロdmであり、図5(b)がマクロdmのソースプロ
グラムにおける使用例であり、図5(c)がマクロ展開
部11によってマクロdmをその本体で置き換えた結果
である。次にコンパイラ装置1は構文解析部12を起動
する。構文解析部12はマクロ展開部11が出力するマ
クロ展開されたプログラムの字句解析、構文解析および
意味解析を行い、コンパイラが処理し易い形の中間プロ
グラムに変換する。For example, FIG. 5A shows a macro dm defined by a macro, FIG. 5B shows an example of use of the macro dm in a source program, and FIG. Is replaced by its body. Next, the compiler device 1 activates the syntax analysis unit 12. The syntax analysis unit 12 performs lexical analysis, syntax analysis, and semantic analysis of the macro-expanded program output from the macro expansion unit 11, and converts the program into an intermediate program that can be easily processed by a compiler.
【0018】例えば、図5(c)の関数f2は図6
(a)の中間プログラムに変換される。この構文解析部
12の詳細は本発明の主眼ではないので説明を省略す
る。次にコンパイラ装置1は最適化部13を起動する。
最適化部13は、まず後述のレジスタ引数置換部16を
起動し処理を終えた後、最終的にコンパイラ装置1が生
成する目的プログラムのプログラムサイズ縮小化及び処
理実行時間の短縮化を図るよう中間プログラムの最適化
を行う。この最適化部13の詳細は本発明の主眼ではな
いので説明を省略し、本発明に関連のある点についての
み説明する。For example, the function f2 in FIG.
It is converted to the intermediate program of (a). Since the details of the syntax analysis unit 12 are not the focus of the present invention, the description is omitted. Next, the compiler device 1 activates the optimizing unit 13.
The optimizing unit 13 first activates the register argument replacing unit 16 to be described later and finishes the processing, and then intermediately reduces the program size of the target program generated by the compiler apparatus 1 and the processing execution time. Perform program optimization. Since the details of the optimizing unit 13 are not the main subject of the present invention, a description thereof will be omitted, and only points relevant to the present invention will be described.
【0019】最適化部13では、最適化を行なうため
に、基本ブロック解析、制御フロー解析、データフロー
解析と言う処理を行なう。基本ブロック解析とは処理対
象の中間プログラムを基本ブロックに分割することであ
る。制御フロー解析とは各基本ブロック間の制御の流れ
を解析することである。データフロー解析とは各基本ブ
ロック中、それぞれの変数がどこで定義され、どこで参
照されているかについて解析することである。またこれ
らの解析結果から、後の資源割付部14は生存区間を算
出する。The optimizing unit 13 performs basic block analysis, control flow analysis, and data flow analysis in order to perform optimization. The basic block analysis is to divide an intermediate program to be processed into basic blocks. Control flow analysis is to analyze the flow of control between each basic block. Data flow analysis is to analyze where each variable is defined and referenced in each basic block. Further, from these analysis results, the later resource allocation unit 14 calculates a live range.
【0020】最適化部13より起動されるレジスタ引数
置換部16は、まずレジスタで渡される仮引数の値を一
旦一時変数に格納する中間命令を関数の最初に挿入し、
さらに中間プログラムの仮引数の使用部分を全て一時変
数に置き換える。さらに、レジスタで引き渡す実引数の
値を一旦一時変数に格納する中間命令を生成し、生成し
た関数呼び出しの前に挿入し、さらに一時変数に、引き
渡しレジスタを割り付けるものである。The register argument replacing unit 16 started by the optimizing unit 13 first inserts an intermediate instruction for temporarily storing the value of the dummy argument passed by the register in a temporary variable at the beginning of the function,
Furthermore, all the used parts of the dummy arguments of the intermediate program are replaced with temporary variables. Further, an intermediate instruction for temporarily storing the value of an actual argument to be transferred in a register in a temporary variable is generated, inserted before the generated function call, and a transfer register is allocated to the temporary variable.
【0021】例えば、図6(b)では仮引数eを一旦一
時変数t1に格納する中間命令i10を関数の最初に挿
入し、仮引数eの使用箇所を一時変数t1に置き換えて
いる。さらに、図6(b)では実引数mに対して一旦一
時変数t2に格納する中間命令i11を関数hの呼び出
しの前に挿入し、一時変数t2を実引数として関数hを
呼び出すように置き換えている。なお、ここで、仮引数
eと、一時変数t2にはレジスタr0が割り付けられる
ものとする。For example, in FIG. 6B, an intermediate instruction i10 for temporarily storing the temporary argument e in the temporary variable t1 is inserted at the beginning of the function, and the place where the temporary argument e is used is replaced with the temporary variable t1. Further, in FIG. 6B, the intermediate instruction i11 temporarily stored in the temporary variable t2 for the actual argument m is inserted before calling the function h, and the function h is called with the temporary variable t2 as the actual argument. I have. Here, it is assumed that the register r0 is allocated to the temporary argument e and the temporary variable t2.
【0022】次にコンパイラ装置1は資源割付部14を
起動する。資源割付部14はまず最初にasmブロック
定義レジスタ検出部17を起動する。asmブロック定
義レジスタ検出部17は、中間プログラムからasmブ
ロックの中間命令を抽出し、抽出したasmブロック内
に存在するasm文で定義されるレジスタを検出し、結
果をasmブロック定義レジスタ保持部18に格納す
る。図2はasmブロック定義レジスタ検出部17の処
理フローチャートである。ステップa1では、全ての中
間命令iについてステップa2からステップa3を繰り
返し、全ての中間命令iについて処理を終えたらasm
ブロック定義レジスタ検出部17の処理を終了する。
ステップa2では、中間命令iがasmブロック中間命
令であるときステップa3を行なう。そうでないときは
ステップa1へ戻る。Next, the compiler device 1 activates the resource allocation unit 14. The resource allocating unit 14 first activates the asm block definition register detecting unit 17. The asm block definition register detection unit 17 extracts an intermediate instruction of the asm block from the intermediate program, detects a register defined by an asm statement existing in the extracted asm block, and stores the result in the asm block definition register holding unit 18. Store. FIG. 2 is a processing flowchart of the asm block definition register detection unit 17. In step a1, steps a2 to a3 are repeated for all the intermediate instructions i.
The process of the block definition register detection unit 17 ends.
In step a2, when the intermediate instruction i is an asm block intermediate instruction, step a3 is performed. If not, the process returns to step a1.
【0023】ステップa3では、仮想レジスタも含め
て、中間命令iでレジスタrが定義されている場合、中
間命令iとレジスタrをasmブロック定義レジスタ保
持部18に格納し、ステップa1へ戻る。 (フローチャート終了)例えば、図8はasmブロック
定義レジスタ保持部18の図6(b)の中間プログラム
の例に対する保持内容である。asmブロック中間命令
毎に、asmブロック中間命令で定義するレジスタを保
持しており、図6(b)のasmブロック中間命令i2
では変数gの値が仮想レジスタv_r0に転送され、変
数hの値が実レジスタr1に転送され、div命令では
仮想レジスタv_r0が更新され、さらに実レジスタm
drも更新されるので、図8のasm文中間命令i2で
定義されるレジスタの欄にはv_r0、r1、mdrが
格納される。(ステップa3)。In step a3, if the register r is defined by the intermediate instruction i including the virtual register, the intermediate instruction i and the register r are stored in the asm block definition register holding unit 18, and the process returns to step a1. (End of Flowchart) For example, FIG. 8 shows the contents held by the asm block definition register holding unit 18 with respect to the example of the intermediate program shown in FIG. 6B. The register defined by the asm block intermediate instruction is held for each asm block intermediate instruction, and the asm block intermediate instruction i2 shown in FIG.
In, the value of the variable g is transferred to the virtual register v_r0, the value of the variable h is transferred to the real register r1, the virtual register v_r0 is updated by the div instruction, and the real register m
Since dr is also updated, v_r0, r1, and mdr are stored in the register column defined by the asm statement intermediate instruction i2 in FIG. (Step a3).
【0024】尚、ステップa3の処理において、asm
ブロックで定義されるレジスタを、単にasmブロック
に出現するレジスタとして、処理の負荷を軽減させても
もよい。なぜならば、特殊な場合を除いて、asmブロ
ックで記述される大部分のレジスタは、asmブロック
内で定義されてから参照されることが常だからである。In the process of step a3, asm
The register defined by the block may simply be a register appearing in the asm block to reduce the processing load. This is because most of the registers described in the asm block are usually defined and then referred to in the asm block except in special cases.
【0025】次に資源割付部14は、最適化部13で解
析された制御フロー情報とデータフロー情報を用いて、
前述のレジスタ引数置換部16で生成した一時変数も含
めて、全ての変数の生存区間を算出する。生存区間の算
出方法は従来方式と同様なので詳細説明は省略し、ここ
では、図6(b)の中間プログラム例に対する生存区間
の算出結果を示すにとどめる。図7(b)が図6(b)
の中間プログラムに対して生存区間を算出した結果であ
る。生存区間は、文献2などのように中間命令の集合と
して表現されるが、ここでは直観的に解り易いように実
線でその範囲を示している。また、図7(b)の仮引数
eの生存区間に記載されている(r0)は、仮引数eに
レジスタr0が割り付けられていることを意味してい
る。一時変数t2も同様である。(但し、変数s1、s
2の生存区間は次に説明するasmブロック生存区間生
成部19で生成さるものである。)さらに資源割付部1
4は、asmブロック生存区間生成部19を起動して、
asm文で定義されるレジスタに割り付けられた特殊な
一時変数とその生存区間を生成する。図3がasmブロ
ック生存区間生成部19の処理フローチャートである。Next, the resource allocation unit 14 uses the control flow information and the data flow information analyzed by the optimization unit 13 to
The live ranges of all variables including the temporary variables generated by the register argument replacing unit 16 are calculated. Since the method of calculating the live range is the same as that of the conventional method, the detailed description is omitted, and here, only the result of calculating the live range for the example of the intermediate program in FIG. 6B is shown. FIG. 7B shows FIG. 6B.
Is the result of calculating the live range for the intermediate program of FIG. The live range is expressed as a set of intermediate instructions as in Document 2 or the like, but here the range is indicated by a solid line for easy understanding intuitively. Further, (r0) described in the live range of the dummy argument e in FIG. 7B means that the register r0 is allocated to the dummy argument e. The same applies to the temporary variable t2. (However, variables s1, s
The live range 2 is generated by the asm block live range generating unit 19 described below. ) Resource allocation unit 1
4 starts the asm block live range generation unit 19,
A special temporary variable assigned to a register defined by an asm statement and its live range are generated. FIG. 3 is a processing flowchart of the asm block live range generation unit 19.
【0026】ステップb1では、全てのasmブロック
中間命令iについてステップd2からステップd5まで
繰り返し、処理を終えたらasmブロック生存区間生成
部19の処理を終了する。ステップb2では、仮想レジ
スタも含めて、asmブロック定義レジスタ保持部18
からasmブロック中間命令iで定義されるレジスタr
が存在するとき、全てのレジスタrに対して、ステップ
d3からステップd5を行ない、そうでないときはステ
ップd1へ戻る。In step b1, the process is repeated from step d2 to step d5 for all the asm block intermediate instructions i, and when the processing is completed, the processing of the asm block live range generation unit 19 ends. In step b2, the asm block definition register holding unit 18 including the virtual register
To the register r defined by the asm block intermediate instruction i
Is present, steps d3 to d5 are performed for all the registers r, and if not, the procedure returns to step d1.
【0027】ステップb3では、新たに一時変数sを生
成する。ステップb4では、生成した一時変数sに対し
てasmブロック中間命令iで生存区間が開始し終了す
る生存区間を生成する。ステップb5では、生成した一
時変数sにレジスタrを割り付け、ステップd1へ戻
る。At step b3, a new temporary variable s is generated. In step b4, a live range in which the live range starts and ends with the asm block intermediate instruction i for the generated temporary variable s is generated. In step b5, a register r is assigned to the generated temporary variable s, and the process returns to step d1.
【0028】(フローチャート終了)例えば、図7
(b)において、s1,s2が、asmブロック生存区
間生成部19で生成された特殊な一時変数であり、生存
区間が中間命令i2においてしか存在しておらず、か
つ、一時変数s1には仮想レジスタv_r0, 一時変数
s2には実レジスタr1が割り付けられている。尚、図
7の例では、中間命令i2のdiv命令において、レジ
スタmdrも値が更新さるが、ここでは、レジスタmd
r自体は変数への割り付けレジスタとはしないこととす
るので、レジスタmdrに割り付けられた一時変数は生
成していない。(End of flowchart) For example, FIG.
In (b), s1 and s2 are special temporary variables generated by the asm block live range generation unit 19, a live range exists only in the intermediate instruction i2, and a virtual variable is stored in the temporary variable s1. The real register r1 is allocated to the register v_r0 and the temporary variable s2. In the example of FIG. 7, the value of the register mdr is also updated in the div instruction of the intermediate instruction i2.
Since r itself is not used as a register allocated to a variable, a temporary variable allocated to the register mdr is not generated.
【0029】次に資源割付部14は、前述のレジスタ引
数置換部16で生成した未だレジスタが未割り付けの一
時変数(図7の例では一時変数t1)および、asmブ
ロック生存区間生成部19で生成した一時変数のうち仮
想レジスタに割り付けられた一時変数(図7の例では一
時変数s1)も含めた変数への資源割り付けを行なう。
特に資源割付部14は、仮想レジスタに割り付けられた
一時変数への割り付けを優先する。この割り付けのと
き、仮想レジスタに割り付けられた一時変数と生存区間
が重なる変数へ割り付けるべきレジスタを考慮してレジ
スタを割り付ける。図4が資源割付部14の処理フロー
チャートである。Next, the resource allocating unit 14 generates a temporary variable (temporary variable t1 in the example of FIG. 7) generated by the register argument replacing unit 16 and not generated by the register argument replacing unit 16 and a temporary variable t1 in the example of FIG. Resources are allocated to variables including the temporary variables (temporary variables s1 in the example of FIG. 7) allocated to the virtual registers among the temporary variables thus set.
In particular, the resource allocation unit 14 gives priority to allocation to temporary variables allocated to virtual registers. At the time of this allocation, the register is allocated in consideration of the register to be allocated to the variable whose live range overlaps with the temporary variable allocated to the virtual register. FIG. 4 is a processing flowchart of the resource allocation unit 14.
【0030】ステップc1では、全ての、仮想レジスタ
に割り付けられた変数sについてステップc2からステ
ップc3まで繰り返し、全ての変数sについて処理を終
えたらステップc5に進む。ステップc2では、変数s
と生存区間が重なる変数に割り付けられているレジスタ
の集合R1を求める。In step c1, all the variables s allocated to the virtual registers are repeated from step c2 to step c3. When the processing is completed for all variables s, the process proceeds to step c5. In step c2, the variable s
And a set R1 of registers assigned to variables whose live ranges overlap with that of R1.
【0031】ステップc3では、変数sと生存区間が重
なる全ての変数tについて、変数tと資源継承関係また
は、間接的資源継承関係にある変数に着目して得失値を
算出する。ステップc4では、集合R1に属さずかつ、
ステップc3で求めた得失値が最小のレジスタを変数s
に割り付ける。(得失値が大きいレジスタは、変数tに
割り付けた方が有利であるので、ここでは得失値のより
小さいレジスタを変数sに割り付ける。尚、この得失値
の詳細は文献2で述べられている「資源排他関係」にあ
る変数(文献2では割付対象)に対する得失値計算と同
様である。)ここで変数sに得失値さ最小のレジスタを
割り付けるとしているが、得失値が最小のレジスタに限
らず、例えば得失値が最大ではないレジスタとしてもよ
い。In step c3, for all the variables t whose variables s and the live range overlap, the gain / loss value is calculated by focusing on the variables that have a resource inheritance relationship or an indirect resource inheritance relationship with the variable t. In step c4, the group does not belong to the set R1 and
The register with the smallest gain / loss value obtained in step c3 is the variable s
Assign to (Because it is more advantageous to assign a register with a large gain / loss value to the variable t, a register with a smaller gain / loss value is assigned to the variable s. The details of the gain / loss value are described in Reference 2. This is the same as the calculation of the profit / loss value for a variable in the “resource exclusion relationship” (the assignment target in Literature 2). Here, the register with the lowest profit / loss value is assigned to the variable s, but is not limited to the register with the lowest profit / loss value. For example, a register whose gain / loss value is not the maximum may be used.
【0032】ステップc5では、残りの全ての変数vに
ついてステップc6からステップc9まで繰り返し、全
ての変数vについて処理を終えたら資源割付部14の処
理を終了する。ステップc6では、変数vと生存区間が
重なる変数に割り付けられているレジスタの集合R2を
求める。In step c5, steps c6 to c9 are repeated for all the remaining variables v, and when the processing has been completed for all the variables v, the processing of the resource allocation unit 14 ends. In step c6, a set R2 of registers assigned to variables whose live ranges overlap with the variable v is obtained.
【0033】ステップc7、集合R2に属さないレジス
タが存在しないときは変数vにメモリを割り付けステッ
プc5に戻る。ステップc8では、変数vに関して得失
値を算出する。ステップc9では、集合R2に属さない
レジスタのうち、ステップc8で求めた得失値が最大の
レジスタを変数vに割り付け、ステップc5に戻る。Step c7, if there is no register that does not belong to the set R2, a memory is allocated to the variable v and the process returns to step c5. In step c8, a gain / loss value is calculated for the variable v. In step c9, among the registers that do not belong to the set R2, the register having the largest value obtained in step c8 is assigned to the variable v, and the process returns to step c5.
【0034】(フローチャート終了)尚、上記ステップ
c5からステップc9の変数vへの資源割り付けは、文
献2と同様のより厳密な資源割り付けを行なってもよ
い。図7(b)の例では、一時変数s1へのレジスタ割
り付けにおいて、まずステップc2で、一時変数s1と
生存区間が重なる一時変数s2に割り付けられているレ
ジスタr1を要素とする集合R1が求められる。次にス
テップc3では、一時変数s1と生存区間が重なる変数
mについて得失値が求められ、この例の場合は、レジス
タr0の得失値が最大となる。次にステップc4では、
集合R1に属さない、つまりレジスタr1ではなく、か
つ、変数mの得失値からレジスタr0でもない、レジス
タr2が一時変数s1への割り付けレジスタとして選択
される。(End of Flowchart) The resource allocation to the variable v in steps c5 to c9 may be performed more strictly as in document 2. In the example of FIG. 7B, in register allocation to the temporary variable s1, first, in step c2, a set R1 having elements of the register r1 allocated to the temporary variable s2 whose live range overlaps the temporary variable s1 is obtained. . Next, at step c3, the profit / loss value is obtained for the variable m whose live range overlaps the temporary variable s1, and in this case, the profit / loss value of the register r0 becomes the maximum. Next, in step c4,
The register r2 that does not belong to the set R1, that is, is not the register r1, and is not the register r0 based on the gain / loss value of the variable m, is selected as a register to be assigned to the temporary variable s1.
【0035】また、変数mへのレジスタ割り付けにおい
ては、まず、ステップc6で、変数mと生存区間が重な
る一時変数s1、s2に割り付けられているレジスタr
2、r1を要素とする集合R2が求められる。次にステ
ップc8では変数mの得失値が求められ、この例ではレ
ジスタr0の得失値が最大となる。次にステップc9で
は、集合R2に属しておらず得失値が最大のレジスタr
0が変数mへの割り付けレジスタとして選択される。変
数t1も同様にレジスタr0に割り付けられる。In allocating registers to the variable m, first, at step c6, the registers r allocated to the temporary variables s1 and s2 whose live ranges overlap the variable m.
A set R2 having 2, r1 as elements is obtained. Next, in step c8, the profit / loss value of the variable m is obtained, and in this example, the profit / loss value of the register r0 becomes the maximum. Next, in step c9, the register r which does not belong to the set R2 and has
0 is selected as the allocation register for the variable m. The variable t1 is similarly allocated to the register r0.
【0036】結果、図7(a)の中間プログラムは、図
7(c)のように変換され、asmブロック中間命令中
の仮想レジスタv_r0は実レジスタr2に置き換えら
れ、また、中間命令i10、i11は同一レジスタへの
転送となるので削除が可能となる。次にコンパイラ装置
1はコード生成部15を起動し、中間命令をコンパイラ
がターゲットとするマシンのアセンブラ命令または機械
語命令などの目的プログラムに変換する。コード生成部
15自体は従来方式と同様なので詳細説明は省略する。As a result, the intermediate program of FIG. 7A is converted as shown in FIG. 7C, the virtual register v_r0 in the asm block intermediate instruction is replaced by the real register r2, and the intermediate instructions i10 and i11 Is transferred to the same register, and can be deleted. Next, the compiler device 1 activates the code generation unit 15 and converts the intermediate instruction into a target program such as an assembler instruction or a machine language instruction of a machine targeted by the compiler. The code generation unit 15 itself is the same as the conventional method, and a detailed description is omitted.
【0037】以上述べた通り、図7、図8のasmブロ
ック中間命令i2内で記述されている仮想レジスタv_
r0はレジスタr2に置き換えられ、変数mはレジスタ
r0に割り付け可能となり、中間命令i11が削除でき
る。このように、asmブロックが記述された場所、ま
たは、asmブロックで定義されたマクロが記述された
場所の状況によって、asmブロック内で記述された仮
想レジスタがより適切な実レジスタに置き換わるので、
より効率のよいコード生成を行なうことが可能となる。As described above, the virtual register v_ described in the asm block intermediate instruction i2 in FIGS.
r0 is replaced by register r2, variable m can be assigned to register r0, and intermediate instruction i11 can be deleted. As described above, the virtual register described in the asm block is replaced with a more appropriate real register depending on the situation where the asm block is described or the macro defined in the asm block is described.
More efficient code generation can be performed.
【0038】以下に図5から図7のプログラム例とは別
のプログラム例を図9から図11を用いて説明する。図
9(a)は図5(a)と同様のマクロ定義されたマクロ
dmであり、従来技術の説明で用いた図9(a)のレジ
スタr0の使用部分を仮想レジスタv_r0としたもの
である。asmブロック中のレジスタを仮想レジスタで
記述するのは、プログラム作成者が行なうものとする。
図9(b)はマクロdmのソースプログラムにおける使
用例であり、図9(c)がマクロ展開部11によってマ
クロdmをその本体で置き換えた結果である。図9
(c)の関数f2は図10(a)の中間プログラムに変
換される。図10(b)は、図10(a)の中間プログ
ラムに対して、レジスタ引数置換部16によって仮引数
eを一旦一時変数t1に格納する中間命令i10が挿入
され、実引数mに対して一旦一時変数t2に格納する中
間命令i11と実引数nに対して一旦一時変数t3に格
納する中間命令i12とが関数hの呼び出しの前に挿入
されている。仮引数の使用部分が一時変数に置き換えら
れている。図11(b)は図10(b)の中間プログラ
ムに対して生存区間を算出した結果である。ここで仮引
数eに記載されている(r0)は、仮引数eにレジスタ
r0が割り付けられていることを意味する。同様に一時
変数t2、t3にはそれぞれレジスタr0、r1が割り
付けられていることを意味する。Hereinafter, another program example different from the program examples of FIGS. 5 to 7 will be described with reference to FIGS. 9 to 11. FIG. 9A shows a macro dm defined by the same macro as FIG. 5A, in which the used part of the register r0 of FIG. 9A used in the description of the conventional technique is a virtual register v_r0. . The register in the asm block is described by a virtual register by a program creator.
FIG. 9B shows an example of the use of the macro dm in the source program, and FIG. 9C shows the result of replacing the macro dm by the macro expansion unit 11 with its body. FIG.
The function f2 in (c) is converted to the intermediate program in FIG. FIG. 10B shows that the intermediate instruction i10 for temporarily storing the temporary argument e in the temporary variable t1 is inserted into the intermediate program of FIG. An intermediate instruction i11 to be stored in the temporary variable t2 and an intermediate instruction i12 to be temporarily stored in the temporary variable t3 for the actual argument n are inserted before the function h is called. The used part of a dummy argument has been replaced with a temporary variable. FIG. 11B shows the result of calculating a live range for the intermediate program of FIG. 10B. Here, (r0) described in the formal parameter e means that the register r0 is allocated to the formal parameter e. Similarly, it means that registers r0 and r1 are allocated to the temporary variables t2 and t3, respectively.
【0039】図11(b)の例において図4に示すフロ
ーチャートが実行された場合、一時変数s1へのレジス
タ割り付けにおいて、まずステップc2で、一時変数s
1と生存区間が重なる一時変数s2に割り付けられてい
るレジスタr2を要素とする集合R1が求められる。次
にステップc3では、一時変数s1と生存区間が重なる
変数m、nについて得失値が求められ、この例の場合
は、変数mについてはレジスタr0、変数nについては
r1の得失値が最大となる。次にステップc4では、集
合R1に属さない、つまりレジスタr1ではなく、か
つ、変数m、nの得失値からレジスタr0でもr1でも
r2でもない、レジスタr3が一時変数s1への割り付
けレジスタとして選択される。When the flowchart shown in FIG. 4 is executed in the example of FIG. 11 (b), in allocating registers to the temporary variable s1, first, in step c2, the temporary variable s
A set R1 having a register r2 assigned as an element to a temporary variable s2 whose live range overlaps with 1 is obtained. Next, in step c3, the profit and loss values are obtained for the variables m and n whose live ranges overlap with the temporary variable s1, and in this example, the profit and loss value of the register r0 for the variable m and r1 for the variable n becomes the maximum. . Next, in step c4, a register r3 that does not belong to the set R1, that is, is not the register r1, and is not a register r0, r1, or r2 from the gain / loss values of the variables m and n, is selected as a register to be assigned to the temporary variable s1. You.
【0040】また、変数mへのレジスタ割り付けにおい
ては、まず、ステップc6で、変数mと生存区間が重な
る一時変数s1、s2に割り付けられているレジスタr
3、r2を要素とする集合R2が求められる。次にステ
ップc8では変数mの得失値が求められ、この例ではレ
ジスタr0の得失値が最大となる。次にステップc9で
は、集合R2に属しておらず得失値が最大のレジスタr
0が変数mへの割り付けレジスタとして選択される。変
数nも同様にレジスタr1に割り付けられる。変数t
1、eも同様にしてレジスタr1に割り付けられる。In allocating registers to the variable m, first, at step c6, the registers r allocated to the temporary variables s1 and s2 whose live range overlaps the variable m.
3. A set R2 having r2 as elements is obtained. Next, in step c8, the profit / loss value of the variable m is obtained, and in this example, the profit / loss value of the register r0 becomes the maximum. Next, in step c9, the register r which does not belong to the set R2 and has
0 is selected as the allocation register for the variable m. The variable n is similarly allocated to the register r1. Variable t
1 and e are similarly allocated to the register r1.
【0041】結果、図11(a)の中間プログラムは、
図11(c)のように変換され、asmブロック中間命
令中の仮想レジスタv_r0は実レジスタr3に置き換
えられ、また、中間命令i10、i11は同一レジスタ
への転送となるので削除が可能となる。以上本発明にか
かるプログラム変換装置(コンパイラ装置)について実
施形態に基いて説明したが本発明はこれらの実施形態に
限らず、以下のようにしてもよい。 (1)本実施の形態の具体例ではasmブロック内の仮
想レジスタに対してのみコンパイラがより適切なレジス
タに置き換える方式について示したが、特に仮想レジス
タ記述を設けずに、asmブロック内の全てのレジスタ
記述を仮想レジスタとして扱い、コンパイラがasmブ
ロック内の全てのレジスタを適切なレジスタに置き換え
ることも可能である。 (2)仮想レジスタが置き換えられるレジスタに制限を
設けてもよい。例えばコンパイラでは、関数の始めでレ
ジスタの値をメモリに退避し、関数の終りでレジスタの
値を復帰する必要がある保証レジスタと、その必要がな
い破壊レジスタを設けることが一般的である。そのた
め、仮想レジスタの置き換えレジスタを破壊レジスタの
いずれかにできると効率の良いコード生成が可能となる
場合がある。As a result, the intermediate program in FIG.
The conversion is performed as shown in FIG. 11C, the virtual register v_r0 in the asm block intermediate instruction is replaced with the real register r3, and the intermediate instructions i10 and i11 are transferred to the same register, so that they can be deleted. Although the program conversion device (compiler device) according to the present invention has been described based on the embodiments, the present invention is not limited to these embodiments, and may be as follows. (1) In the specific example of the present embodiment, a method has been described in which the compiler replaces only virtual registers in an asm block with more appropriate registers. However, without providing a virtual register description, all compilers in the asm block are provided. The register description can be treated as a virtual register, and the compiler can replace all registers in the asm block with appropriate registers. (2) A restriction may be placed on the register in which the virtual register is replaced. For example, a compiler generally saves a register value in a memory at the beginning of a function, and provides a guarantee register which needs to restore the register value at the end of the function, and a destruction register which does not require it. Therefore, if the replacement register of the virtual register can be any of the destruction registers, efficient code generation may be possible.
【0042】この場合コンパイラ装置1は、破壊レジス
タの集合を予め記憶し、図4のステップc4の処理にお
いて、破壊レジスタの集合に属し、集合R1に属さずか
つステップc3で求めた得失値が最小のレジスタを変数
sに割り付けるよう構成すればよい。このように本発明
は、例えば破壊レジスタ等の特定の機能を有する実レジ
スタの集合のうちの1つの実レジスタを仮想レジスタに
割り付けるよう構成してもよい。特定の機能を有する実
レジスタの種類としては、破壊レジスタ以外に、アドレ
スレジスタやデータレジスタ等がある。 (3)またアドレスレジスタ、データレジスタのように
特定の機能を有する実レジスタの集合が複数ある場合に
おいて、これら複数の集合のうちの1つの集合のうちの
1つの実レジスタを仮想レジスタに割り当てるよう構成
してもよい。この場合、仮想レジスタの種類を仮想レジ
スタv_Ari、v_Briというように特定の機能を
有する集合それぞれに対応するように設け、プログラマ
はそれら複数種類の仮想レジスタを使い分けた記述を行
う。コンパイラ装置1は、仮想レジスタの種類と特定の
機能を有する集合とを対応させて記憶しており、ソース
プログラム中の仮想レジスタの種類に応じて、対応する
特定の機能を有する集合に属し、当該仮想レジスタに割
り付けられた変数sと生存区間が重なる変数に割り付け
られた実レジスタの集合に属さず(つまりR1に属さな
い)、得失値が最小の実レジスタを変数sに割り付け
る。In this case, the compiler device 1 stores the set of destruction registers in advance, and in the process of step c4 in FIG. 4, belongs to the set of destruction registers, does not belong to the set R1, and has the minimum value obtained in step c3. May be assigned to the variable s. As described above, the present invention may be configured such that one real register of a set of real registers having a specific function such as a destruction register is allocated to a virtual register. Types of real registers having a specific function include address registers and data registers in addition to destruction registers. (3) When there are a plurality of sets of real registers having a specific function such as an address register and a data register, one real register of one of the plurality of sets is assigned to a virtual register. You may comprise. In this case, the types of the virtual registers are provided so as to correspond to the respective sets having a specific function, such as virtual registers v_Ari and v_Bri, and the programmer performs the description using the plurality of types of virtual registers properly. The compiler device 1 stores a virtual register type and a set having a specific function in association with each other, and belongs to a set having a specific function corresponding to the type of the virtual register in the source program. A real register that does not belong to a set of real registers assigned to a variable whose live range overlaps with the variable s assigned to the virtual register (that is, does not belong to R1) and has the smallest gain / loss value is assigned to the variable s.
【0043】より具体的には、図4の資源割付部14の
フローチャートのステップc4を「ステップ4におい
て、変数sに割り付けられている仮想レジスタの種類に
対応する、特定の機能を有する集合に属し、集合R1に
属さず、かつ、ステップ3で求めた得失値が最小のレジ
スタを変数sに割り付ける」となる。 (4)以上の実施例では説明の簡単化のために、除算命
令に関するものについて述べたが、単に除算命令に対し
てのみ適用できるだけでなく、積和演算命令などのマル
チメディア処理対応の高機能命令にも適用できることは
言うまでもない。 (5)コンパイラ装置1の各構成要素の動作手順、特に
図2、3、4に示すフローチャートに示した手順を、汎
用のコンピュータ又はプログラム実行機能を有する機器
等に実行させるためのコンピュータプログラムを、記録
媒体に記録し又は各種通信路等を介して、流通させ頒布
することもできる。このような記録媒体にはICカー
ド、光ディスク、フレキシブルディスク、ROM等があ
る。More specifically, step c4 in the flowchart of the resource allocating unit 14 in FIG. 4 is referred to as “in step 4, a group belonging to a set having a specific function corresponding to the type of the virtual register allocated to the variable s. , A register that does not belong to the set R1 and has the smallest gain / loss value obtained in step 3 is assigned to the variable s. " (4) In the above embodiments, for simplicity of explanation, the description related to the division instruction has been described. However, the present invention can be applied not only to the division instruction but also to a multi-function such as a product-sum operation instruction. It goes without saying that it can also be applied to instructions. (5) A computer program for causing a general-purpose computer or a device having a program execution function to execute the operation procedure of each component of the compiler apparatus 1, in particular, the procedure shown in the flowcharts of FIGS. It can be recorded on a recording medium or distributed and distributed via various communication paths. Such recording media include an IC card, an optical disk, a flexible disk, a ROM, and the like.
【0044】[0044]
【発明の効果】ソースプログラムをオブジェクトプログ
ラムに変換するプログラム変換装置であって、実レジス
タの代わり任意のレジスタを示す仮想レジスタを用いて
記述されたプログラム部分を含むソースプログラムを記
憶する記憶手段と、ソースプログラム中の変数であっ
て、前記プログラム部分を跨ぐ生存区間を有する変数を
検出する検出手段と、前記仮想レジスタに対して、前記
検出手段により検出された変数に対して割り当てられる
べき実レジスタとは異なる実レジスタを割り当てる割り
当て手段と、割り当て結果に従ってソースプログラムか
らオブジェクトプログラムを生成する生成手段とを備え
る。According to the present invention, there is provided a program conversion device for converting a source program into an object program, wherein the storage means stores a source program including a program portion described using a virtual register indicating an arbitrary register instead of a real register. A detecting means for detecting a variable in the source program, the variable having a live range spanning the program part; and, for the virtual register, a real register to be assigned to the variable detected by the detecting means. Comprises an allocating means for allocating different real registers, and a generating means for generating an object program from a source program according to the allocation result.
【0045】この構成によればプログラム変換装置は、
ソースプログラムに含まれるプログラム部分が実レジス
タの代わりに仮想レジスタにより記述されたソースプロ
グラムを記憶し、この仮想レジスタに対してレジスタを
割り当てる際に、プログラム部分を跨ぐ生存区間の変数
に割り当てるレジスタとは異なるレジスタを割り当て
る。According to this configuration, the program conversion device
A program part included in a source program stores a source program described by a virtual register instead of a real register, and when allocating a register to this virtual register, what is a register to be assigned to a variable in a live range across a program part? Assign different registers.
【0046】これによりプログラム部分を跨ぐ生存区間
の変数と、当該変数と資源継承関係にある別の変数とに
同じレジスタが割り当てられる可能性が高くなり、同じ
レジスタが割り当てられた場合には、資源継承関係にあ
る変数と別の変数との間の転送命令を削除することがで
きるので、無用な転送命令の数を低減することができる
という効果がある。As a result, there is a high possibility that the same register is allocated to a variable in a live range that crosses a program part and another variable that has a resource inheritance relationship with the variable. If the same register is allocated, the same register is allocated. Since a transfer instruction between a variable in an inheritance relationship and another variable can be deleted, the number of unnecessary transfer instructions can be reduced.
【0047】前記検出手段は、前記プログラム部分を生
存区間とする一時変数を、仮想レジスタ毎に生成する一
時変数生成部と、ソースプログラム中の変数であって、
前記一時変数の生存区間と重複する生存区間を有する検
出部とを有する。前記割り当て手段は、検出された変数
に実レジスタを割り当てた場合にどれだけ有利であるか
を示す得失値を、実レジスタ毎に算出する得失値算出部
と、前記検出手段により検出された変数に対して得失値
が最小の実レジスタを、前記仮想レジスタに割り当てる
割り当て部とを有する。The detecting means includes: a temporary variable generating unit for generating, for each virtual register, a temporary variable having the program portion as a live range; and a variable in the source program,
A detection unit having a live range overlapping the live range of the temporary variable. The allocating means calculates a value obtained by assigning a real register to the detected variable, and calculates a value obtained by calculating the value obtained by the detecting means. And an allocating unit for allocating a real register having a minimum value to the virtual register.
【0048】この構成によれば検出された変数に対して
最小得失値の実レジスタが仮想レジスタに割り当てられ
るので、検出された変数には得失値がより高い実レジス
タを割り当てることができる。変数に割り当てる実レジ
スタの変数に対する得失値が高い程、その変数と資源継
承関係にある別の変数とが同じ実レジスタを継承する確
率が高くなるので、転送命令の発生を低減できるという
効果がある。According to this configuration, since the real register having the minimum gain / loss value is assigned to the virtual register for the detected variable, an actual register having a higher gain / loss value can be assigned to the detected variable. The higher the gain / loss value of a real register assigned to a variable, the higher the probability that the variable and another variable in a resource inheritance relationship will inherit the same real register, thereby reducing the occurrence of transfer instructions. .
【0049】また前記割り当て手段は、優先的に仮想レ
ジスタに実レジスタを割り当てた後、プログラム中の変
数へのレジスタ割り当てを行うよう構成される。前記割
り当て手段は、すべての実レジスタのうち特定の機能を
有する実レジスタ群のうちの1つの実レジスタを仮想レ
ジスタに割り当てるよう構成される。この構成によれ
ば、仮想レジスタに割り当てられる実レジスタを特定の
機能を有する実レジスタに限定することができるという
効果がある。The allocating means is configured to allocate the real registers preferentially to the virtual registers, and then perform the register allocation to the variables in the program. The allocating means is configured to allocate one real register of a real register group having a specific function among all real registers to a virtual register. According to this configuration, there is an effect that real registers assigned to virtual registers can be limited to real registers having a specific function.
【0050】以上のようにプログラム部分(実施例にお
いてはasmブロック)内で記述されている仮想レジス
タの置換えレジスタを、プログラム部分に跨って生きて
いる変数を考慮して決定することが可能となり、より効
率のよいコード生成が可能となる。また、仮想レジスタ
記述を含んだプログラム部分をしようして定義された、
C言語のマクロ関数や、C++言語の「inline」指定関
数など、ソースプログラムにインラインされる(埋め込
まれる)関数は、ソースプログラムの任意の場所に記述
でき、かつ記述された場所の使用状況に応じて、仮想レ
ジスタがより適切な実レジスタに置き換えられるのでコ
ンパイラの生成コード効率が一段と高まる。As described above, it is possible to determine the replacement register of the virtual register described in the program portion (in the embodiment, the asm block) in consideration of the variables that live over the program portion. More efficient code generation becomes possible. Also defined using the program part containing the virtual register description,
Functions that are inlined (embedded) in the source program, such as C language macro functions and C ++ language “inline” specification functions, can be written anywhere in the source program, and according to the usage of the written places. Therefore, the virtual register is replaced with a more appropriate real register, so that the generated code efficiency of the compiler is further improved.
【図1】第1の実施形態に係るコンパイラ装置1の構成
図である。FIG. 1 is a configuration diagram of a compiler device 1 according to a first embodiment.
【図2】asmブロック定義レジスタ検出部17の処理
フローチャートである。FIG. 2 is a processing flowchart of an asm block definition register detection unit 17;
【図3】asmブロック生存区間生成部19の処理フロ
ーチャートである。FIG. 3 is a processing flowchart of an asm block live range generation unit 19;
【図4】資源割付部14の処理フローチャートである。FIG. 4 is a processing flowchart of a resource allocation unit 14;
【図5】asmブロックで定義されたマクロの例と、マ
クロの使用プログラム例と、マクロの展開プログラムの
例を示す図である。FIG. 5 is a diagram showing an example of a macro defined by an asm block, an example of a program using the macro, and an example of a program for expanding the macro.
【図6】asmブロックを含む中間プログラムと、レジ
スタ引数置換部16の処理を行なった後の中間プログラ
ムの例を示す図である。FIG. 6 is a diagram illustrating an example of an intermediate program including an asm block and an intermediate program after processing of a register argument replacing unit 16;
【図7】asmブロックを含む中間プログラムと、中間
プログラムの生存区間と、割り付け後の中間プログラム
を示す図である。FIG. 7 is a diagram showing an intermediate program including an asm block, a live range of the intermediate program, and an allocated intermediate program.
【図8】asmブロック定義レジスタ保持部18の保持
内容の図である。FIG. 8 is a diagram of contents held by an asm block definition register holding unit 18;
【図9】asmブロックで定義されたマクロの例と、マ
クロの使用プログラム例と、マクロの展開プログラムの
例を示す図である。FIG. 9 is a diagram illustrating an example of a macro defined by an asm block, an example of a program using the macro, and an example of a program for expanding the macro.
【図10】asmブロックを含む中間プログラムと、レ
ジスタ引数置換部16の処理を行なった後の中間プログ
ラムの例を示す図である。FIG. 10 is a diagram illustrating an example of an intermediate program including an asm block and an intermediate program after processing of a register argument replacement unit 16;
【図11】asmブロックを含む中間プログラムと、中
間プログラムの生存区間と、割り付け後の中間プログラ
ムを示す図である。FIG. 11 is a diagram showing an intermediate program including an asm block, a live range of the intermediate program, and an intermediate program after allocation.
【図12】asmブロックで定義されたマクロの例と、
マクロの使用プログラム例と、マクロの展開プログラム
の例を示す図である。FIG. 12 shows an example of a macro defined by an asm block;
FIG. 3 is a diagram illustrating an example of a macro use program and an example of a macro expansion program.
【図13】asmブロックを含む中間プログラムの例で
ある。FIG. 13 is an example of an intermediate program including an asm block.
1 コンパイラ 11 マクロ展開部 12 構文解析部 13 最適化部 14 資源割付部 15 コード生成部 16 レジスタ引数置換部 17 asmブロック定義レジスタ検出部 18 asmブロック定義レジスタ保持部 19 asmブロック生存区間生成部 DESCRIPTION OF SYMBOLS 1 Compiler 11 Macro expansion part 12 Syntax analysis part 13 Optimization part 14 Resource allocation part 15 Code generation part 16 Register argument substitution part 17 asm block definition register detection part 18 asm block definition register holding part 19 asm block live range generation part
Claims (7)
ラムに変換するプログラム変換装置であって、 実レジスタの代わりに任意のレジスタを示す仮想レジス
タを用いて記述されたプログラム部分を含むソースプロ
グラムを記憶する記憶手段と、 ソースプログラム中の変数であって、前記プログラム部
分を跨ぐ生存区間を有する変数を検出する検出手段と、 前記仮想レジスタに対して、前記検出手段により検出さ
れた変数に対して割り当てられるべき実レジスタとは異
なる実レジスタを割り当てる割り当て手段と、 割り当て結果に従ってソースプログラムからオブジェク
トプログラムを生成する生成手段とを備えることを特徴
とするプログラム変換装置。1. A program conversion device for converting a source program into an object program, comprising: storage means for storing a source program including a program portion described using a virtual register indicating an arbitrary register instead of a real register; Detecting means for detecting a variable in the source program, the variable having a live range spanning the program portion; and a real register to be assigned to the variable detected by the detecting means for the virtual register. A program conversion device comprising: an allocating unit for allocating a real register different from a real register; and a generating unit for generating an object program from a source program according to the allocation result.
レジスタ毎に生成する一時変数生成部と、 ソースプログラム中の変数であって、前記一時変数の生
存区間と重複する生存区間を有する変数を検出する検出
部とを有することを特徴とする請求項1記載のプログラ
ム変換装置。2. The method according to claim 1, wherein the detecting unit includes: a temporary variable generation unit configured to generate, for each virtual register, a temporary variable having the program portion as a live range; The program conversion device according to claim 1, further comprising a detection unit that detects a variable having an overlapping live range.
け有利であるかを示す得失値を、実レジスタ毎に算出す
る得失値算出部と、 前記検出手段により検出された変数に対して得失値が最
小の実レジスタを、前記仮想レジスタに割り当てる割り
当て部とを有することを特徴とする請求項1記載のプロ
グラム変換装置。3. The gain and loss value calculating section for calculating, for each real register, a profit and loss value indicating how advantageous the real register is when the real register is allocated to the detected variable; 2. The program conversion device according to claim 1, further comprising: an allocating unit that allocates a real register having a minimum value to the detected variable to the virtual register.
スタに実レジスタを割り当てた後、ソースプログラム中
の変数へのレジスタ割り当てを行うことを特徴とする請
求項1記載のプログラム変換装置。4. The program conversion device according to claim 1, wherein said assigning means assigns registers to variables in the source program after assigning the real registers to the virtual registers with priority.
タのうち特定の機能を有する実レジスタ群のうちの1つ
の実レジスタを仮想レジスタに割り当てることを特徴と
する請求項1記載のプログラム変換装置。5. The program conversion device according to claim 1, wherein said allocating means allocates one real register of a real register group having a specific function among all real registers to a virtual register.
ラムに変換するプログラム変換方法であって、 メモリに記憶されたソースプログラムであって、実レジ
スタの代わりに任意のレジスタを示す仮想レジスタを用
いて記述されたプログラム部分を含むソースプログラム
から、前記プログラム部分を跨ぐ生存区間を有する変数
を検出する検出ステップと、 前記仮想レジスタに対して、前記検出ステップにより検
出された変数に対して割り当てられるべき実レジスタと
は異なる実レジスタを割り当てる割り当てステップと、 割り当て結果に従ってソースプログラムからオブジェク
トプログラムを生成する生成ステップとからなることを
特徴とするプログラム変換方法。6. A program conversion method for converting a source program into an object program, wherein the program is a source program stored in a memory, the program being described using a virtual register indicating an arbitrary register instead of a real register. Detecting, from a source program including a portion, a variable having a live range spanning the program portion; and a real register to be assigned to the variable detected by the detecting step for the virtual register. A program conversion method, comprising: an assignment step of assigning real registers; and a creation step of creating an object program from a source program according to the assignment result.
ラムに変換する処理をコンピュータに実行させるための
プログラムを記録したコンピュータ読み取り可能な記録
媒体であって、当該プログラムはコンピュータに、 メモリに記憶せれたソースプログラムであって、実レジ
スタの代わりに任意のレジスタを示す仮想レジスタを用
いて記述されたプログラム部分を含むソースプログラム
から、前記プログラム部分を跨ぐ生存区間を有する変数
を検出する検出ステップと、 前記仮想レジスタに対して、前記検出ステップにより検
出された変数に割り当てられるべき実レジスタとは異な
る実レジスタを割り当てる割り当てステップと、 割り当て結果に従ってソースプログラムからオブジェク
トプログラムを生成する生成ステップとを実行させるこ
とを特徴とするプログラムを記録した記録媒体。7. A computer-readable recording medium having recorded thereon a program for causing a computer to execute a process of converting a source program into an object program, wherein the program is a source program stored in a memory of a computer. Detecting, from a source program including a program part described using a virtual register indicating an arbitrary register instead of a real register, a variable having a live range that extends over the program part, And executing a allocating step of allocating a real register different from the real register to be allocated to the variable detected by the detecting step, and a generating step of generating an object program from a source program according to the allocation result. A recording medium recording a program characterized by the following.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000102751A JP2001290652A (en) | 2000-04-04 | 2000-04-04 | Device and method for converting program and recording medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000102751A JP2001290652A (en) | 2000-04-04 | 2000-04-04 | Device and method for converting program and recording medium |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011139789A Division JP2011181114A (en) | 2011-06-23 | 2011-06-23 | Device and method for converting program, and recording medium |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001290652A true JP2001290652A (en) | 2001-10-19 |
Family
ID=18616574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000102751A Pending JP2001290652A (en) | 2000-04-04 | 2000-04-04 | Device and method for converting program and recording medium |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2001290652A (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008305337A (en) * | 2007-06-11 | 2008-12-18 | Panasonic Corp | Program converter, program conversion method, program, storage medium, debugging device, debugging method and program development system |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06110702A (en) * | 1992-09-29 | 1994-04-22 | Matsushita Electric Ind Co Ltd | Procedure call translator |
JPH0721033A (en) * | 1993-07-07 | 1995-01-24 | Nec Corp | Device and method for processing language |
JPH07121377A (en) * | 1993-10-20 | 1995-05-12 | Matsushita Electric Ind Co Ltd | Resource allocating device |
JPH08234997A (en) * | 1995-02-28 | 1996-09-13 | Nec Corp | Register allocation method |
JPH08314727A (en) * | 1995-03-16 | 1996-11-29 | Matsushita Electric Ind Co Ltd | Resource allocation device |
JPH11175351A (en) * | 1997-12-10 | 1999-07-02 | Matsushita Electric Ind Co Ltd | Program converter, assembler expression method inside high level language program and recording medium |
-
2000
- 2000-04-04 JP JP2000102751A patent/JP2001290652A/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06110702A (en) * | 1992-09-29 | 1994-04-22 | Matsushita Electric Ind Co Ltd | Procedure call translator |
JPH0721033A (en) * | 1993-07-07 | 1995-01-24 | Nec Corp | Device and method for processing language |
JPH07121377A (en) * | 1993-10-20 | 1995-05-12 | Matsushita Electric Ind Co Ltd | Resource allocating device |
JPH08234997A (en) * | 1995-02-28 | 1996-09-13 | Nec Corp | Register allocation method |
JPH08314727A (en) * | 1995-03-16 | 1996-11-29 | Matsushita Electric Ind Co Ltd | Resource allocation device |
JPH11175351A (en) * | 1997-12-10 | 1999-07-02 | Matsushita Electric Ind Co Ltd | Program converter, assembler expression method inside high level language program and recording medium |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008305337A (en) * | 2007-06-11 | 2008-12-18 | Panasonic Corp | Program converter, program conversion method, program, storage medium, debugging device, debugging method and program development system |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6292939B1 (en) | Method of reducing unnecessary barrier instructions | |
US10133560B2 (en) | Link time program optimization in presence of a linker script | |
US20210089283A1 (en) | Direct function call substitution using preprocessor | |
JP4041248B2 (en) | COMPILER DEVICE, COMPUTER-READABLE RECORDING MEDIUM CONTAINING COMPILING PROGRAM, AND COMPILING METHOD | |
US20030237080A1 (en) | System and method for improved register allocation in an optimizing compiler | |
US7181730B2 (en) | Methods and apparatus for indirect VLIW memory allocation | |
JP2000347874A (en) | Method and device for structuring call rule prolog and epilog codes using register allocator | |
JP2004220583A (en) | Method and system for executing global processor resource assignment in assembler | |
JP2011118909A (en) | Memory access instruction vectorization | |
KR19990013980A (en) | Compilation method, compiler, exception handler and program recording medium | |
US8266416B2 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
JP2003196106A (en) | Program conversion method, computer system and program | |
JP2002366366A (en) | Compiling method, code generation method, stack register using method, compiler, program for realizing them, and storage medium | |
US20090187897A1 (en) | Compiling method and compiling program | |
JP2008305337A (en) | Program converter, program conversion method, program, storage medium, debugging device, debugging method and program development system | |
JP2005129001A (en) | Apparatus and method for program execution, and microprocessor | |
JP2000353097A (en) | Method and device for generating low density interference graph | |
JP3790707B2 (en) | Program conversion method, computer apparatus and program using the same | |
JP3871312B2 (en) | Program conversion method, data processing apparatus using the same, and program | |
US20050125783A1 (en) | Program optimization with intermediate code | |
JP2001290652A (en) | Device and method for converting program and recording medium | |
JP2011181114A (en) | Device and method for converting program, and recording medium | |
JP2009258796A (en) | Program development device and program development method | |
JP2011180814A (en) | Compiler apparatus, compiling method and program | |
JP3276479B2 (en) | Compilation method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070327 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20091116 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100629 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100823 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110329 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110623 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20110628 |
|
A912 | Removal of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20110916 |