JPH0236007B2 - KONPAIRANIOKERUJUDOHENSUKASANMEMEIREINOSEISEIHOSHIKI - Google Patents
KONPAIRANIOKERUJUDOHENSUKASANMEMEIREINOSEISEIHOSHIKIInfo
- Publication number
- JPH0236007B2 JPH0236007B2 JP23407882A JP23407882A JPH0236007B2 JP H0236007 B2 JPH0236007 B2 JP H0236007B2 JP 23407882 A JP23407882 A JP 23407882A JP 23407882 A JP23407882 A JP 23407882A JP H0236007 B2 JPH0236007 B2 JP H0236007B2
- Authority
- JP
- Japan
- Prior art keywords
- induced
- addition
- code
- variable
- loop
- 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
- 238000005457 optimization Methods 0.000 claims description 30
- 238000000034 method Methods 0.000 claims description 17
- 238000006243 chemical reaction Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 15
- 230000006698 induction Effects 0.000 description 7
- 238000007796 conventional method Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
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
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
【発明の詳細な説明】
〔発明の技術分野〕
本発明は、ソース解析部と番地割付け部と最適
化部とコード生成部とを備え、プロセツサに対し
て、与えられたソース・プログラムから目的プロ
グラムを生成して供給するコンパイラにおいて、
誘導変数がインデクスとしてのみ使用される場合
で、かつ、一定の条件を満たす場合には、誘導変
数加算をLA(ロード・アドレス)命令で実現する
ようにしたコンパイラにおける誘導変数加算命令
の生成方式に関するものである。[Detailed Description of the Invention] [Technical Field of the Invention] The present invention includes a source analysis section, an address allocation section, an optimization section, and a code generation section, and allows a processor to convert a given source program into a target program. In the compiler that generates and supplies
Regarding the generation method of induced variable addition instructions in a compiler that implements induced variable addition with LA (load address) instructions when induced variables are used only as indexes and certain conditions are met. It is something.
第1図はコンパイラの構成例を示すブロツク
図、第2図は誘導変数加算のコンパイラによる内
部表現の例を示す図である。第1図において、1
はソース解析部、2は番地割付け部、3は最適化
部、4はコード生成部、31は構造解析部、32
は中間テキスト最適化部、33はレジスタ割付け
部、34は分岐の最適化部を示す。
FIG. 1 is a block diagram showing an example of the configuration of a compiler, and FIG. 2 is a diagram showing an example of internal representation by the compiler of induced variable addition. In Figure 1, 1
is a source analysis section, 2 is an address allocation section, 3 is an optimization section, 4 is a code generation section, 31 is a structure analysis section, 32
3 shows an intermediate text optimization section, 33 a register allocation section, and 34 a branch optimization section.
コンパイラは、第1図に示すように構成され、
ソース・プログラムを記憶装置から取込んで所望
の目的プログラムを生成する。ソース解析部1で
は、ソース・プログラムを記憶装置から取込み、
文解釈を行なつて中間コード(テキスト)に展開
する。そして番地割付け部2では、プログラム内
に出現する各種データに対応して記憶域内の番地
を割当てる。最適化部3では、ループ構造の検出
を行ない、データの流れ、変数毎の定義、参照場
所などの相関関係をつかみ中間コード変更を行な
い(構造解析部31)、中間コードのレベルでプ
ロセツサを有効に利用するための最適化を施し
(中間テキスト最適化部32)、中間コードに現わ
れたデータに実際の資源(レジスタ)を割当て
(レジスタ割付け部33)、分岐の最適化を施す
(分岐の最適化部34)。コード生成部4では、オ
ブジエクト・コードを生成する。 The compiler is configured as shown in Figure 1,
A source program is imported from a storage device to generate a desired target program. The source analysis unit 1 imports the source program from the storage device,
Performs sentence interpretation and develops it into intermediate code (text). The address allocation unit 2 allocates addresses within the storage area corresponding to various data appearing within the program. The optimization unit 3 detects the loop structure, grasps the correlation between data flow, definition of each variable, reference location, etc., and modifies the intermediate code (structure analysis unit 31), enabling the processor at the level of the intermediate code. (intermediate text optimization unit 32), allocates actual resources (registers) to the data appearing in the intermediate code (register allocation unit 33), and performs branch optimization (branch optimization). Part 34). The code generator 4 generates object code.
コンパイラが検出する(具体的には構造解析部
31が行なう)ループ内において、
I=I+α
(ここでαはループ内で一定の値をもつデータ;
通常は定数)
のように回帰定義される変数Iの加算を、誘導変
数の加算という。このような加算オペレーシヨン
は、使用者が陽に代入文として書く場合もある
が、多くの場合、コンパイラの最適化処理の結果
として生成される。例えば、
DIMENSION A(10)、B(10)
DO 5 I=1、10、1
A(I)=B(I)
5 CONTINUE
のようなソース・プログラム(FORTRAN)に
対して、コンパイラによる内部表現は第2図に示
すようなものになる。第2図において、が誘導
変数の初期設定、が誘導変数の加算、その中の
「4」が加算定数である。 In the loop detected by the compiler (specifically, carried out by the structure analysis unit 31), I=I+α (here, α is data that has a constant value within the loop;
The addition of a variable I that is regression-defined as (usually a constant) is called the addition of induced variables. Although such an addition operation may be explicitly written by a user as an assignment statement, in many cases it is generated as a result of compiler optimization processing. For example, for a source program (FORTRAN) such as DIMENSION A(10), B(10) DO 5 I=1, 10, 1 A(I)=B(I) 5 CONTINUE, the internal representation by the compiler is The result will be something like the one shown in Figure 2. In FIG. 2, is the initial setting of the induced variables, is the addition of the induced variables, and "4" is the addition constant.
従来の最適化コンパイラでは、誘導変数の加算
(I=I+α)に対し、Add命令(AR、A)を
生成していた。Add命令の1つは、レジスタ・レ
ジスタで実現するAR命令で、
AR R1、R2
とすると、レジスタR1の内容とレジスタR2の内
容とを加算してレジスタR1に入れよ、という命
令である。もう1つは、レジスタとメモリで実現
するA命令で、
A R1、m
とすると、レジスタR1の内容とアドレスmのメ
モリの内容とを加算してレジスタR1に入れよ、
という命令である。前者の命令は、使用レジスタ
個数が2個になり、データの数に比べて汎用レジ
スタの個数が不足するようなループにおいては、
レジスタに割付けられないデータがそれだけ増え
る。又、後者の命令は、使用レジスタ個数は1個
で済むがメモリ・アクセスが必要になるため、前
者よりも処理が遅くなるといる問題が生じる。 Conventional optimizing compilers generate Add instructions (AR, A) for addition of induced variables (I=I+α). One of the Add instructions is an AR instruction that is implemented using registers, which says, given AR R 1 and R 2 , add the contents of register R 1 and the contents of register R 2 and put it into register R 1 . It is a command. The other is the A instruction that is realized using registers and memory. If A R 1 , m, add the contents of register R 1 and the contents of memory at address m and put it into register R 1 .
This is the command. The former instruction uses two registers, and in a loop where the number of general-purpose registers is insufficient compared to the number of data,
The amount of data that cannot be allocated to registers increases accordingly. Furthermore, although the latter instruction only requires one register, it requires memory access, which causes the problem that the processing is slower than the former.
本発明は、上記の考察に基づくものであつて、
誘導変数の加算命令を1個のレジスタで実現し、
汎用レジスタの有効利用を計ると共に、実行プロ
グラムの性能向上を計つたコンパイラにおける誘
導変数加算命令の生成方式を提供することを目的
とするものである。
The present invention is based on the above considerations, and includes:
Realizes the instruction to add induced variables with one register,
The purpose of this invention is to provide a method for generating induced variable addition instructions in a compiler that makes effective use of general-purpose registers and improves the performance of executed programs.
そのために本発明のコンパイラにおける誘導変
数加算命令の生成方式は、
ソース・プログラムの文解釈を行つて中間コー
ドに展開するソース解析部1と、
プログラム中に出現する各種データに記憶域内
番地を割当てる番地割付け部2と、
プログラム中のループ構造を検出して中間コー
ドの変更を行う構造解析部31、中間コードのレ
ベルでプロセツサを有効に利用するための最適化
を施す中間テキスト最適化部32、中間コードに
現れたデータに実際のレジスタを割当てるレジス
タ割付け部33および分岐の最適化を施す分岐の
最適化部34を有する最適化部3と、
オブジエクト・コードを生成するコード生成部
4と
を備えると共に、
上記レジスタ割付け部33が、
最適化後の中間テキストにおけるループ内の
データの定義参照関係や使用頻度等のループ内
情報を収集する処理を行い、
ループ内の局所的演算部分にレジスタを割付
ける所のローカル・レジスタ割付け処理を行
い、
ループ内で広域的に使用されるデータにレジ
スタを割付ける所のクローバル・レジスタ割付
け処理を行い、
中間テキスト上にローカル・レジスタ割付け
及びグローバル・レジスタ割付けの結果を反映
させる所の中間テキストの更新処理を行い、
未処理のループが存在するか否かを調べ、存
在する場合にはに戻り、そうでない場合には
レジスタ割付け終了処理を行う
ように構成されている。
To this end, the method for generating induced variable addition instructions in the compiler of the present invention consists of a source analysis unit 1 that interprets statements in a source program and develops them into intermediate code; an allocation unit 2, a structure analysis unit 31 that detects loop structures in a program and changes intermediate code, an intermediate text optimization unit 32 that performs optimization to effectively utilize the processor at the level of intermediate code, and an intermediate The optimization unit 3 includes a register allocation unit 33 that allocates actual registers to data appearing in the code, and a branch optimization unit 34 that performs branch optimization, and a code generation unit 4 that generates object code. , The register allocation unit 33 performs processing to collect in-loop information such as the definition reference relationship and usage frequency of data in the loop in the intermediate text after optimization, and allocates registers to local calculation parts in the loop. Performs local register allocation processing where the data is used globally, performs global register allocation processing where registers are allocated to data used globally within the loop, and displays the results of local register allocation and global register allocation on the intermediate text. It is configured to update the intermediate text where it is reflected, check whether there is an unprocessed loop, return to if it exists, and perform register allocation end processing if not. There is.
コンパイラにおける誘導変数加算命令の生成方
式であつて、
中間テキスト最適化部32は、ロード・アドレ
ス命令化フラグ、誘導変数名、誘導変数の初期値
及び誘導変数の加算定数値よりなるテーブル要素
を1個または複数個持つ誘導変数テーブルを、最
適化後の中間テキストの各ループ毎に作成するた
めの処理を行うように構成され、
レジスタ割付け部33のグローバル・レジスタ
割付処理は、最適化後の中間テキストにおける
一つのループ内において出現する固定小数点デー
タのうち誘導変数を含む変数、誘導変数に加算定
数を含む定数およびベース変数の総数Nを計数
し、総計Nが所定値よりも大である場合にはロー
ド・アドレス命令生成モードとし、ロード・アド
レス命令生成モードとされた場合には、当該ルー
プにおける誘導変数の初期値が負であるか否か、
加算定数の値が所定の範囲内にあるか否か、誘導
変数がその加算を除いてインデクスとしてのみ使
用されているか否かを調べ、誘導変数の初期値が
負でなく、誘導変数の加算定数値が所定の範囲内
にあり且つ誘導変数の加算を除いてインデクスと
してのみ使用されている誘導変数については当該
ループに対応する誘導変数テーブルの対応するロ
ード・アドレス命令化フラグをオンとするように
構成され、
レジスタ割付け部33の中間テキストの更新処
理は、RP形式の加算コードの中間テキストが
検出された時には誘導変数テーブルを参照し、当
該RP形式の加算コードを持つ中間テキストの第
1オペランドが誘導変数で且つ当該誘導変数に対
応する誘導変数テーブルのロード・アドレス命令
化フラグがオンである場合には、当該中間テキス
トのコードRR形式の加算コードからロード・ア
ドレス命令を示すコードに変更するよう構成され
ている。 In this method of generating a guided variable addition instruction in a compiler, the intermediate text optimization unit 32 generates one table element consisting of a load address instruction flag, a guided variable name, an initial value of the guided variable, and an addition constant value of the guided variable. The global register allocation process of the register allocation unit 33 is configured to create a guided variable table having one or more induced variable tables for each loop of the intermediate text after optimization. Count the total number N of variables including induced variables, constants including addition constants to induced variables, and base variables among fixed-point data appearing in one loop in the text, and if the total number N is larger than a predetermined value, is set to load address instruction generation mode, and when set to load address instruction generation mode, whether or not the initial value of the induced variable in the loop is negative;
Checks whether the value of the addition constant is within a predetermined range, whether the induced variable is used only as an index except for its addition, and whether the initial value of the induced variable is non-negative and the addition constant of the induced variable. For induced variables whose numerical values are within a predetermined range and are used only as an index except for addition of induced variables, turn on the corresponding load address instruction flag in the induced variable table corresponding to the loop. The intermediate text update process of the register allocation unit 33 refers to the induced variable table when an intermediate text with an addition code in the RP format is detected, and updates the first operand of the intermediate text with the addition code in the RP format. If it is an induced variable and the load address instruction flag of the induced variable table corresponding to the induced variable is on, the code RR format addition code of the intermediate text will be changed to a code indicating a load address instruction. It is configured.
ことを特徴とするものである。It is characterized by this.
以下、本発明の実施例を図面を参照しつつ説明
する。
Embodiments of the present invention will be described below with reference to the drawings.
第3図は本発明に用いられるLA命令表現を示
す図、第4図はループと誘導変数を示す図、第5
図は誘導変数テーブルを示す図、第6図はレジス
タ割付け部による処理の流れを示す図、第7図は
誘導変数加算テキストのコード変更を説明するた
めの図である。図において、5は誘導変数テーブ
ル、6は中間テキストを示す。 Fig. 3 is a diagram showing the LA instruction expression used in the present invention, Fig. 4 is a diagram showing the loop and induced variables, and Fig. 5 is a diagram showing the LA instruction expression used in the present invention.
FIG. 6 is a diagram showing the induced variable table, FIG. 6 is a diagram showing the flow of processing by the register allocation section, and FIG. 7 is a diagram for explaining code change of the induced variable addition text. In the figure, 5 indicates an induced variable table, and 6 indicates intermediate text.
誘導変数がインデクスとしてのみ使用される場
合(このケースが大部分である)でかつ一定の条
件を満たす場合にはLM(ロード・アドレス)命
令を加算命令として用いることができる。本発明
は、整数型誘導変数の加算において、従来生成し
ていたARやA命令が使用レジスタ個数を2個必
要としたり、又メモリへのアクセスを必要として
いたことに鑑み、使用レジスタ個数が1個で済
み、しかも実行速度は使用レジスタ個数が2個の
AR命令とほぼ同等であるLA命令で加算を実現
するものである。そのために次の条件をLA命令
の生成条件とする。 If the induced variable is used only as an index (which is the case in most cases) and certain conditions are met, the LM (load address) instruction can be used as an addition instruction. In consideration of the fact that conventionally generated AR and A instructions require two registers and access to memory when adding integer type induced variables, the present invention reduces the number of registers used to one. It only requires 2 registers, and the execution speed is faster than 2 registers.
Addition is achieved using the LA instruction, which is almost equivalent to the AR instruction. For this purpose, the following conditions are set as the LA instruction generation conditions.
1個ループに対して、使用可能な汎用レジス
タの個数(通常は約10個)よりレジスタに割付
けるべきデータ(固定小数点データ……誘導変
数も該当)の数が多い。(この判断はレジスタ
割付けの初期処理として行なう。)
誘導変数の初期値が負の値ではない。誘導変
数の初期設定は、ループの外側で行なわれる。
例えば、第2図に示す1が初期設定であり、初
期値はこの場合4である。 For one loop, the number of data to be allocated to registers (fixed-point data...this also applies to induced variables) is greater than the number of usable general-purpose registers (usually about 10). (This judgment is made as part of the initial processing of register allocation.) The initial value of the induced variable is not a negative value. Initialization of the induction variables is done outside the loop.
For example, 1 shown in FIG. 2 is the initial setting, and the initial value is 4 in this case.
誘導変数の加算定数値が一定の範囲内の値を
とる。(通常、LA命令表現は、ビツト20から31
までの12ビツトで加算定数値を与えるので0な
いし4095の範囲内の値をとる。)例えば、第2
図に示す2の誘導変数の加算において、誘導変
数の加算定数値は4である。 The addition constant value of the induced variable takes a value within a certain range. (Typically, the LA instruction representation contains bits 20 to 31.
Since the addition constant value is given using up to 12 bits, it takes a value within the range of 0 to 4095. ) For example, the second
In the addition of two induced variables shown in the figure, the addition constant value of the induced variables is four.
誘導変数は、ループ内において、その加算を
除いて配列要素の添字(インデクス)としての
み使用される。 The induced variable is used only as an index of array elements within the loop, except for its addition.
以上の条件がすべて成立する場合に、例えば第
2図に示すような誘導変数加算テキスト、
I=I+4
の加算定数4に対するレジスタ割付けは行なわな
い。一方、Iに対してレジスタの割付けを行な
う。 When all of the above conditions are met, for example, the induced variable addition text as shown in FIG. 2, register allocation to the addition constant 4 of I=I+4 is not performed. On the other hand, a register is allocated to I.
その結果、
LA γ、4(γ、0)
なるLA命令が生成される。そのLA命令表現を示
したのが第3図である。第3図に示すLA命令で
は、X2、B2、D2より求められる第2オペランド
アドレスが、第1オペランドのビツト8から31に
ロードされる。第1オペランドのビツド0から7
にはゼロがセツトされる。 As a result, an LA instruction LA γ,4(γ,0) is generated. Figure 3 shows the LA command expression. In the LA instruction shown in FIG. 3, the second operand address determined from X 2 , B 2 , and D 2 is loaded into bits 8 to 31 of the first operand. Bits 0 to 7 of the first operand
is set to zero.
以下、第4図ないし第7図を参照しつつ具体的
に説明する。 A detailed explanation will be given below with reference to FIGS. 4 to 7.
中間テキストの最適化後の内部表現としてひと
つのループにおける誘導変数生成後の様子を示し
たのが第4図である。第4図において、I1ないし
Inは誘導変数、α1ないしαnは誘導変数の初期値、
β1ないしβnは誘導変数の加算定数値、Ak(Ij)は
インデクスを誘導変数とする配列要素の引用を表
わす。このような配列要素はループ内にn個以上
存在する。又nはループ内の誘導変数の個数、
Akは配列名(k>1)、Ijは誘導変数(1j
n)を表わす。 FIG. 4 shows the state after the induction variables are generated in one loop as the internal representation after optimization of the intermediate text. In Figure 4, I 1 to
In is the induced variable, α 1 to αn are the initial values of the induced variable,
β 1 to βn represent addition constant values of induction variables, and Ak (Ij) represents a reference to an array element using an index as an induction variable. There are n or more such array elements in the loop. Also, n is the number of induced variables in the loop,
Ak is the array name (k>1), Ij is the induction variable (1j
n).
中間テキスト最適化部において、誘導変数の生
成処理の過程で第5図に示す誘導変数テーブルを
作成する。第5図において、I、α、βは、第4
図に示すものと対応し、LAは、各誘導変数の加
算をLA命令で実現可能であることを示すフラグ
情報で、誘導変数テーブル作成時には零クリアし
ておく。 In the intermediate text optimization section, a guided variable table shown in FIG. 5 is created in the process of generating guided variables. In Fig. 5, I, α, β are the fourth
Corresponding to what is shown in the figure, LA is flag information indicating that addition of each induced variable can be realized by the LA instruction, and is cleared to zero when creating the induced variable table.
次にレジスタ割付け部による処理の流れを第6
図を参照しつつ説明する。第5図に示す誘導変数
テーブルが作成されると、レジスタ割付け制御部
に制御がわたり、
ループ内でのデータの定義、参照関係や使用
頻度などのループ内情報を収集する。次にの
処理を行う。 Next, the flow of processing by the register allocation section is explained in the sixth section.
This will be explained with reference to the figures. When the induced variable table shown in FIG. 5 is created, control passes to the register allocation control section, which collects in-loop information such as data definitions, reference relationships, and frequency of use within the loop. Perform the following processing.
ループ内の局所的演算部分にレジスタを割当
てる(ローカル・レジスタの割付け)、次に
の処理を行なう。 Allocate a register to a local operation part within the loop (local register allocation) and perform the following processing.
ループ内で広域的に使用されるデータにレジ
スタを割当てる(グローバル・レジスタ割付
け)。次にの処理を行なう。 Allocate registers for data that is used globally within the loop (global register allocation). Perform the following processing.
中間テキスト上にローカル・レジスタ割付
け、グローバル・レジスタ割付けの結果を反映
させる(中間テキストの更新)。次にの処理
を行なう。 Reflect the results of local register allocation and global register allocation on the intermediate text (updating the intermediate text). Perform the following processing.
ループが存在するか否かを調べる。 Check whether a loop exists.
存在する場合にはの処理に戻り、存在しな
い場合には終了処理を行ない、LA命令を生成
する。 If it exists, the process returns to step 2, and if it does not exist, it performs the termination process and generates an LA instruction.
グローバル・レジスタの割付け処理(の処
理)では、グローバル割当て候補データの選択、
及び誘導変数の吟味を行なう。グローバル割当の
候補データの選択では、
○イ ひとつのループ内で出現する固定小数点デー
タの内、変数、定数、ベース定数の数をカウン
トする。(総計をNとする。変数の中には誘導
変数、定数の中には誘導変数の加算定数も含
む)
○ロ 総計Nが汎用レジスタ総個数(例えば富士通
のMシリーズでは16個の汎用レジスタがある
が、実際には、固定数に使用するレジスタが存
在するので幾分少ない値となる。前述のMシリ
ーズのコンパイラでは、10ないし12個が適当)
より超えればLA生成モードとし、誘導変数の
吟味を行なう。さもなくば、レジスタ数がグロ
ーバル割当て対象データの数より多いと見倣
し、AR生成モード(従来方式)となる。そし
て誘導変数の吟味では、次のようにして誘導変
数の加算がLA命令で実現できるか否かを判定
する。 In global register allocation processing, selection of global allocation candidate data,
and examine the induction variables. When selecting candidate data for global allocation, count the number of variables, constants, and base constants among the fixed-point data that appears in one loop. (The total number is N. Variables include induced variables, and constants include addition constants for induced variables.) ○B Total N is the total number of general-purpose registers (for example, Fujitsu's M series has 16 general-purpose registers. However, in reality, there is a fixed number of registers used, so the value is somewhat smaller.For the M series compiler mentioned above, 10 to 12 is appropriate)
If it exceeds that, the LA generation mode is set and the induction variables are carefully examined. Otherwise, it assumes that the number of registers is greater than the number of globally allocated data, and enters AR generation mode (conventional method). In examining the induced variables, it is determined whether addition of the induced variables can be realized using the LA instruction as follows.
○ハ 誘導変数の初期値の判定;中間テキストの最
適化後に誘導変数に関する情報が先に述べた第
5図に示す誘導変数テーブルとして残されてい
る。この誘導変数テーブルを順に検索して、誘
導変数Ikの初期値(定数値−αk)が負の値か
を判定する。負であればIkのLA化は不可とす
るが、零又は正であれば加算定数地の判定を行
なう。○C Determination of the initial value of the induced variable: After optimization of the intermediate text, information regarding the induced variable is left as the induced variable table shown in FIG. 5 mentioned above. This induced variable table is sequentially searched to determine whether the initial value (constant value - αk) of the induced variable Ik is a negative value. If it is negative, Ik cannot be converted into LA, but if it is zero or positive, it is determined whether it is an addition constant.
○ニ 加算定数値の判定;Ikの加算定数値βkの値
の範囲が、Oβk4095であるか否かを判定
する。範囲外であればIkのLK化は不可とする
が、そうでなければ次の誘導変数の引用箇所の
検査を行なう。○D Determination of addition constant value: Determine whether the value range of addition constant value βk of Ik is Oβk4095. If it is outside the range, converting Ik to LK is not possible, but if not, the next quotation of the induced variable is checked.
○ホ 誘導変数の引用箇所の検査;ループ内でIkが
インデクスとしてのみ使用されているかを調べ
る。インデクス以外に使用されていれば、Ikの
LA化は不可とするが、インデクスとしてのみ
使用されている場合には、予め決まつたコード
(2種類)の中間テキストの特定オペランドと
して現われる。従つて、ループ内の中間テキス
トのチエーンを辿れば、インデクス以外の目的
で使用されているかが判明する。○E Inspection of references to induced variables: Check whether Ik is used only as an index within the loop. If used for something other than an index, Ik's
It cannot be converted into LA, but if it is used only as an index, it appears as a specific operand of intermediate text with predetermined codes (two types). Therefore, by tracing the chain of intermediate text within the loop, it becomes clear whether it is being used for purposes other than indexing.
以上の○ハないし○ホの処理をI1、I2、……Inと順
次判定し、LA化可能な誘導変数については、そ
の加算定数値をグローバル割当て候補から除外す
る。 The above processing of ○C to ○H is sequentially determined as I 1 , I 2 , .
また、中間テキストの更新処理(の処理)で
は、誘導変数加算中間テキストのコード変更の処
理を行なうが、この処理は、ループ内の中間テキ
スト更新処理のひとつとして、加算コードの中間
テキストが検出された時点で行なう。第7図に示
すように、加算コードをもつ中間テキストのオペ
ランド1が誘導変数で、かつ、LA化フラグがオ
ンであれば、この中間テキストのコードを‘
ADD'(加算)から‘LA'(ロード・アドレス)に
変更する。同時に、R1(オペランド1のレジス
タ)及びR2(オペランド2のレジスタ)には、誘
導変数I2に割付けられるグローバル・レジスタγ
を設定する。 Also, in the intermediate text update process, the code of the induced variable addition intermediate text is changed, but this process is performed as one of the intermediate text update processes in the loop when the intermediate text of the addition code is detected. Do it when the time comes. As shown in Figure 7, if operand 1 of an intermediate text with an addition code is an induced variable and the LA flag is on, the code of this intermediate text is '
Change from 'ADD' (addition) to 'LA' (load address). At the same time, R 1 (register of operand 1) and R 2 (register of operand 2) contain global register γ assigned to induced variable I 2 .
Set.
LA中間テキストからLA命令の生成は、一般の
中間テキストと同様にコード生成フエーズで行な
われる。 Generation of LA instructions from LA intermediate text is performed in the code generation phase in the same way as general intermediate text.
以上の説明から明らかなように、本発明によれ
ば、グローバル・レジスタの割付けにおいて、デ
ータの数に比べ汎用レジスタの個数が不足するよ
うなループにおいては、1個の誘導変数の加算を
1つの汎用レジスタで実現することができる。従
つて、従来レジスタに割付けられなかつたデータ
がレジスタに割付けられることになり、実行プロ
グラムの速度向上を計ることができる。
As is clear from the above description, according to the present invention, in global register allocation, in a loop where the number of general-purpose registers is insufficient compared to the number of data, addition of one induced variable is This can be implemented using general-purpose registers. Therefore, data that could not be allocated to registers in the past can be allocated to registers, and the speed of the execution program can be improved.
第1図はコンパイラの構成例を示すブロツク
図、第2図は誘導変数加算のコンパイラによる内
部表現の例を示す図、第3図は本発明に用いられ
るLA命令表現を示す図、第4図はループと誘導
変数を示す図、第5図は誘導変数テーブルを示す
図、第6図はレジスタ割付け部による処理の流れ
を示す図、第7図は誘導変数加算テキストのコー
ド変更を説明するための図である。
1……ソース解析部、2……番地割付け部、3
……最適化部、4……コード生成部、31……構
造解析部、32……中間テキスト最適化部、33
……レジスタ割付け部、34……分岐の最適化
部、5……誘導変数テーブル、6……中間テキス
ト。
Figure 1 is a block diagram showing an example of the configuration of a compiler, Figure 2 is a diagram showing an example of the compiler's internal representation of induced variable addition, Figure 3 is a diagram showing the LA instruction representation used in the present invention, and Figure 4. Figure 5 is a diagram showing the loop and induced variables, Figure 5 is a diagram showing the induced variable table, Figure 6 is a diagram showing the flow of processing by the register allocation section, and Figure 7 is for explaining the code change of the induced variable addition text. This is a diagram. 1... Source analysis section, 2... Address allocation section, 3
...Optimization section, 4...Code generation section, 31...Structure analysis section, 32...Intermediate text optimization section, 33
. . . register allocation section, 34 . . . branch optimization section, 5 . . . induced variable table, 6 . . . intermediate text.
Claims (1)
ードに展開するソース解析部1と、 プログラム中に出現する各種データに記憶域内
番地を割当てる番地割付け部2と、 プログラム中のループ構造を検出して中間コー
ドの変更を行う構造解析部31、中間コードのレ
ベルでプロセツサを有効に利用するための最適化
を施す中間テキスト最適化部32、中間コードに
現れたデータに実際のレジスタを割当てるレジス
タ割付け部33および分岐の最適化を施す分岐の
最適化部34を有する最適化部3と、 オブジエクト・コードを生成するコード生成部
4と を備えると共に、 上記レジスタ割付け部33が、 最適化後の中間テキストにおけるループ内の
データの定義参照関係や使用頻度等のループ内
情報を収集する処理を行い、 ループ内の局所的演算部分にレジスタを割付
ける所のローカル・レジスタ割付け処理を行
い、 ループ内で広域的に使用されるデータにレジ
スタを割付ける所のクローバル・レジスタ割付
け処理を行い、 中間テキスト上にローカル・レジスタ割付け
及びグローバル・レジスタ割付けの結果を反映
させる所の中間テキストの更新処理を行い、 未処理のループが存在するか否かを調べ、存
在する場合にはに戻り、そうでない場合には
レジスタ割付け終了処理を行う ように構成されている コンパイラにおける誘導変数加算命令の生成方
式であつて、 中間テキスト最適化部32は、ロード・アドレ
ス命令化フラグ、誘導変数名、誘導変数の初期値
及び誘導変数の加算定数値よりなるテーブル要素
を1個または複数個持つ誘導変数テーブルを、最
適化後の中間テキストの各ループ毎に作成するた
めの処理を行うように構成され、 レジスタ割付け部33のグローバル・レジスタ
割付処理は、最適化後の中間テキストにおける
一つのループ内において出現する固定小数点デー
タのうち誘導変数を含む変数、誘導変数の加算定
数を含む定数およびベース変数の総計Nを計数
し、総計Nが所定値よりも大である場合にはロー
ド・アドレス命令生成モードとし、ロード・アド
レス命令生成モードとされた場合には、当該ルー
プにおける誘導変数の初期値が負であるか否か、
加算定数の値が所定の範囲内にあるか否か、誘導
変数がその加算を除いてインデクスとしてのみ使
用されているか否かを調べ、誘導変数の初期値が
負でなく、誘導変数の加算定数値が所定の範囲内
にあり且つ誘導変数の加算を除いてインデクスと
してのみ使用されている誘導変数については当該
ループに対応する誘導変数テーブルの対応するロ
ード・アドレス命令化フラグをオンとするように
構成され、 レジスタ割付け部33の中間テキストの更新処
理は、PR形式の加算コードの中間テキストが
検出された時には誘導変数テーブルを参照し、当
該PR形式の加算コードを持つ中間テキストの第
1オペランドが誘導変数で且つ当該誘導変数に対
応する誘導変数テーブルのロード・アドレス命令
化フラグがオンである場合には、当該中間テキス
トのコードをPR形式の加算コードからロード・
アドレス命令を示すコードに変更するよう構成さ
れている ことを特徴とするコンパイラにおける誘導変数加
算命令の生成方式。[Claims] 1. A source analysis unit 1 that interprets the sentences of a source program and develops it into intermediate code; An address allocation unit 2 that allocates addresses in a storage area to various data appearing in the program; and a loop in the program. A structure analysis unit 31 detects the structure and changes the intermediate code; an intermediate text optimization unit 32 performs optimization to effectively utilize the processor at the intermediate code level; an optimization unit 3 having a register allocation unit 33 that allocates a register allocation unit and a branch optimization unit 34 that performs branch optimization; and a code generation unit 4 that generates an object code; This process collects information within the loop such as definition reference relationships and frequency of use of data within the loop in the intermediate text after conversion, and performs local register allocation processing where registers are allocated to local calculation parts within the loop. , Performs global register allocation processing where registers are allocated to data used globally within the loop, and updates intermediate text where the results of local register allocation and global register allocation are reflected on the intermediate text. Generates an induced variable addition instruction in the compiler. In the method, the intermediate text optimization unit 32 creates a guided variable table having one or more table elements each including a load address instruction flag, a guided variable name, an initial value of the guided variable, and an addition constant value of the guided variable. The global register allocation process of the register allocation unit 33 is configured to perform processing to create a global register for each loop in the intermediate text after optimization. The total number N of variables including induced variables, constants including addition constants for induced variables, and base variables among the fixed-point data to be generated is counted, and if the total N is larger than a predetermined value, the mode is set to load address instruction generation mode. , if the load address instruction generation mode is selected, whether or not the initial value of the induced variable in the loop is negative;
Checks whether the value of the addition constant is within a predetermined range, whether the induced variable is used only as an index except for its addition, and whether the initial value of the induced variable is non-negative and the addition constant of the induced variable. For induced variables whose numerical values are within a predetermined range and are used only as an index except for addition of induced variables, turn on the corresponding load address instruction flag in the induced variable table corresponding to the loop. The intermediate text update process of the register allocation unit 33 refers to the induced variable table when an intermediate text with a PR format addition code is detected, and updates the first operand of the intermediate text with the PR format addition code. If it is an induced variable and the load address instruction flag of the induced variable table corresponding to the induced variable is on, the code of the intermediate text is loaded from the PR format addition code.
A method for generating an induced variable addition instruction in a compiler, characterized in that the compiler is configured to change the code to a code indicating an address instruction.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23407882A JPH0236007B2 (en) | 1982-12-30 | 1982-12-30 | KONPAIRANIOKERUJUDOHENSUKASANMEMEIREINOSEISEIHOSHIKI |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23407882A JPH0236007B2 (en) | 1982-12-30 | 1982-12-30 | KONPAIRANIOKERUJUDOHENSUKASANMEMEIREINOSEISEIHOSHIKI |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS59125446A JPS59125446A (en) | 1984-07-19 |
JPH0236007B2 true JPH0236007B2 (en) | 1990-08-15 |
Family
ID=16965249
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP23407882A Expired - Lifetime JPH0236007B2 (en) | 1982-12-30 | 1982-12-30 | KONPAIRANIOKERUJUDOHENSUKASANMEMEIREINOSEISEIHOSHIKI |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0236007B2 (en) |
-
1982
- 1982-12-30 JP JP23407882A patent/JPH0236007B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPS59125446A (en) | 1984-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Krall | Efficient JavaVM just-in-time compilation | |
US6408433B1 (en) | Method and apparatus for building calling convention prolog and epilog code using a register allocator | |
JP3110040B2 (en) | Method and apparatus for compiling a computer program with register allocation between procedures | |
US6973644B2 (en) | Program interpreter | |
US6721943B2 (en) | Compile-time memory coalescing for dynamic arrays | |
US6363522B1 (en) | Method and apparatus for handling exceptions as normal control flow | |
US6202202B1 (en) | Pointer analysis by type inference for programs with structured memory objects and potentially inconsistent memory object accesses | |
US6434743B1 (en) | Method and apparatus for allocating stack slots | |
JPH0695310B2 (en) | Code optimization method | |
JPH09330233A (en) | Optimum object code generating method | |
JPH0695311B2 (en) | Code optimization method | |
US6072950A (en) | Pointer analysis by type inference combined with a non-pointer analysis | |
US20030079210A1 (en) | Integrated register allocator in a compiler | |
EP0947922A2 (en) | Compiler | |
US6421824B1 (en) | Method and apparatus for producing a sparse interference graph | |
US7181724B2 (en) | Representation of Java® data types in virtual machines | |
JPH0236007B2 (en) | KONPAIRANIOKERUJUDOHENSUKASANMEMEIREINOSEISEIHOSHIKI | |
JP3264901B2 (en) | Compiling device and compiling method | |
JPH08212081A (en) | Memory allocation method, compiling method and compiler | |
Yang et al. | Efficient register mapping and allocation in LaTTe, an open-source Java just-in-time compiler | |
JPH0371233A (en) | Optimum data allocating system for compiler | |
JPH01194034A (en) | System for selecting data to be optimized in program | |
Hopkins et al. | A microprogrammed implementation of an architecture simulation language | |
Lindahl | Compilation of Floating Point Arithmetic in the High Performance ERLANG Compiler. | |
JPH04178738A (en) | Register allocation system |