JPH0522272B2 - - Google Patents

Info

Publication number
JPH0522272B2
JPH0522272B2 JP13009581A JP13009581A JPH0522272B2 JP H0522272 B2 JPH0522272 B2 JP H0522272B2 JP 13009581 A JP13009581 A JP 13009581A JP 13009581 A JP13009581 A JP 13009581A JP H0522272 B2 JPH0522272 B2 JP H0522272B2
Authority
JP
Japan
Prior art keywords
vector
block
conditional
loop
control
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
Application number
JP13009581A
Other languages
Japanese (ja)
Other versions
JPS5833775A (en
Inventor
Yukio Umetani
Michiaki Yasumura
Tooru Matsunaga
Takashi Takanuki
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP13009581A priority Critical patent/JPS5833775A/en
Publication of JPS5833775A publication Critical patent/JPS5833775A/en
Publication of JPH0522272B2 publication Critical patent/JPH0522272B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Description

【発明の詳細な説明】 本発明は、電子計算機用プログラムのコンパイ
ラ(翻訳プログラム)による目的プログラムへの
自動翻訳技術に係り、特に、内部に条件文による
判定と制御分岐を含むループ演算に対する、制御
ベクトルを用いたベクトルプロセツサ用目的プロ
グラムの生成方式に関するものである。
DETAILED DESCRIPTION OF THE INVENTION The present invention relates to a technology for automatically translating a computer program into a target program using a compiler (translation program), and in particular, the present invention relates to a technology for automatically translating a computer program into a target program using a compiler (translation program). This invention relates to a method for generating a target program for a vector processor using vectors.

近年、半導体技術の進歩を背景に、ベクトルプ
ロセツサと呼ぶ、演算の並列実行性を利用した高
速電子計算機が用いられており、FORTRANな
どの計算機言語により記述されたプログラムを、
ベクトルプロセツサ用目的プログラムに翻訳する
ベクトル コンパイラが必要となつている。ベク
トル コンパイラは、プログラム中のループ演算
部分を、ベクトル命令と呼ぶベクトルプロセツサ
指令命令を含む目的プログラムに翻訳するが、ル
ープ演算中に条件文による制御分岐が含まれると
演算の一様性が阻害されることから目的プログラ
ムの生成が困難になる。
In recent years, with advances in semiconductor technology, high-speed electronic computers called vector processors that take advantage of the ability to execute operations in parallel have been used to process programs written in computer languages such as FORTRAN.
There is a need for a vector compiler to translate target programs for vector processors. A vector compiler translates the loop operation part of a program into a target program that includes vector processor directive instructions called vector instructions, but if a control branch due to a conditional statement is included during the loop operation, the uniformity of the operation will be disrupted. This makes it difficult to generate the target program.

従来、条件文を含むループ演算をベクトル化す
るためのハードウエア機構の1つに制御ベクトル
があり、制御ベクトルを用いて条件分岐を含むル
ープ演算にベクトルプロセツサを適用する方式と
しては従来、マージ機能を用いる方式が知られて
いる。これは、第1図aに示すような二方向分岐
型の条件文を含むループ演算に対して、第1図c
に示すように、両方向の分岐で指定されたベクト
ル演算B+D、F×Gと制御ベクトルCVの生成
を行なつた後に、ベクトルマージ命令CVMGM
によりCVの要素値が論理値“1”の場合には第
1オペランドI1の対応する要素値を、“0”の場
合には第2オペランドI2の対応する要素値を選択
し、Aの対応する要素に代入する方式である。
Conventionally, control vectors are one of the hardware mechanisms for vectorizing loop operations that include conditional statements, and merge is the conventional method for applying vector processors to loop operations that include conditional branches using control vectors. A method using functions is known. This is true for loop operations that include a two-way branch type conditional statement as shown in Figure 1a.
As shown in the figure, after performing the vector operations B+D, F×G specified by branching in both directions and generating the control vector CV, the vector merge instruction CVMGM is executed.
If the element value of CV is the logical value "1", select the corresponding element value of the first operand I 1 , and if it is "0", select the corresponding element value of the second operand I 2 , and select the corresponding element value of the second operand I 2. This is a method of assigning to the corresponding element.

しかしこの方式は、次にのべるような理由で適
用範囲が限定される欠点があつた。
However, this method has the disadvantage that its scope of application is limited for the following reasons.

まずこの方式は、条件の成否により選択的に値
を得るものであることから、第2図に示すよう
に、条件の分岐により値を代入すべき変数ないし
配列要素が異なる条件文構造への適用は直接的で
ない。また第3図のように条件文の分岐上に再び
条件文を含むような多重の条件文構造への適用も
困難である。さらに、プログラムを第1図aに示
すように通常の形で表記したのでは従来コンパイ
ラが第1図cのような目的プログラムを生成でき
ず、第1図bのように特殊な関数CVMGMを用
いてプログラムを作成する必要があることから、
プログラミングの手間を大きくしていた。
First of all, since this method selectively obtains a value depending on whether a condition is met or not, it can be applied to conditional statement structures where the variables or array elements to which values are assigned differ depending on the branching of the condition, as shown in Figure 2. is not direct. Furthermore, it is difficult to apply this method to a multiple conditional sentence structure in which a conditional sentence is included again on a branch of a conditional sentence, as shown in FIG. Furthermore, if the program is written in the normal form as shown in Figure 1a, conventional compilers cannot generate the target program as shown in Figure 1c, but instead use a special function CVMGM as shown in Figure 1b. Since it is necessary to create a program using
This increased the amount of programming effort.

本発明の目的は、条件式を含むループ演算に対
して、ベクトル命令を含む目的プログラムを自動
的に生成するコンパイル方法を提供することであ
る。
An object of the present invention is to provide a compilation method that automatically generates an object program including vector instructions for a loop operation including a conditional expression.

本発明の他の目的は、多重の条件式を含むルー
プ演算に対して、ベクトル命令を含む目的プログ
ラムを自動的に生成するコンパイル方法を提供す
ることである。
Another object of the present invention is to provide a compilation method that automatically generates a target program including vector instructions for a loop operation including multiple conditional expressions.

本発明の他の目的は、条件文を含むループ演算
へのベクトル命令の適用において、できる限り効
率の良い目的プログラムを生成することにある。
Another object of the present invention is to generate an object program that is as efficient as possible in applying vector instructions to loop operations including conditional statements.

本発明では、そのために、FORTRAM言語に
て通常の方法で表記された計算プログラムを自動
翻訳時に解析して条件判定部と被条件演算部を分
離指摘し、また両者の制御・被制御関係を効率の
良い方法で明らかにした後、条件判定部において
は各ベクトル要素の演算の実行可否を制御する論
理値列である制御ベクトルを各要素の条件判定の
結果により再生させる目的プログラムを生成し、
被条件演算部においては当該制御ベクトルによ
り、データベクトルの各要素の演算実行を制御す
るようなベクトル命令による目的プログラムを生
成することにより、それらへのベクトルプロセツ
サの自動適用を実現する。
To this end, the present invention analyzes a calculation program written in the FORTRAM language in a normal manner during automatic translation, separates and points out the condition judgment section and the conditional operation section, and efficiently streamlines the control/controlled relationship between the two. After clarifying the condition in a good manner, the condition determination unit generates a target program that reproduces a control vector, which is a logical value sequence that controls whether or not the operation of each vector element can be executed, based on the result of the condition determination of each element,
In the conditional operation section, the control vector is used to generate a target program using vector instructions that control the execution of operations on each element of the data vector, thereby realizing automatic application of the vector processor to the target program.

さらに上記方式にて、ループの進行にかかわら
ず値を変えない変数、配列要素に基ずく条件判定
式に対しては、制御ベクトルを生成せずに判定・
分岐命令により演算制御を行なうような目的プロ
グラムを生成し、またループの始点、終点におけ
るループ指標値に依存する条件式に対しては、始
点・終点の演算をループ外に展開することにより
当該条件式をループ中から消去し、それに関わる
制御ベクトルの生成と被制御演算命令を不要と
し、効率の良い目的プログラムの生成を実現す
る。このループ指標値に依存した条件式の消去に
関しては、端点値にかぎらず中間値に関する条件
であつても同様な方法で消去が可能である。
Furthermore, in the above method, for conditional judgment expressions based on variables and array elements whose values do not change regardless of the progress of the loop, the judgment can be made without generating a control vector.
Generate a target program that performs calculation control using branch instructions, and for conditional expressions that depend on loop index values at the start and end points of the loop, expand the calculations at the start and end points outside the loop. To eliminate expressions from loops, eliminate the need for generation of control vectors and controlled operation instructions, and achieve efficient generation of target programs. Regarding the elimination of conditional expressions that depend on the loop index value, it is possible to eliminate not only conditions related to endpoint values but also conditions related to intermediate values using the same method.

以下、本発明を実施例により説明する。 The present invention will be explained below with reference to Examples.

条件文を含むループ演算の例として、第4図に
示すようなFORTRAM77言語により記述された
Doループ演算を使用する。このプログラムを構
成する各行の意味は次の通りである。
As an example of a loop operation that includes a conditional statement, the one written in FORTRAM77 language as shown in Figure 4 is
Use the Do loop operation. The meaning of each line composing this program is as follows.

行番号1:以下、文番号10のついた行(行番号
14)までの演算を、指標変数Iの値を1からN
まで1つづつ変えながら繰り返す。
Line number 1: Below, the line with sentence number 10 (line number
14) by changing the value of the indicator variable I from 1 to N.
Repeat by changing one step at a time.

行番号2:配列要素C1(I)の値が0.0よりも大き
ければ、以下ELSE行の直前(行番号7)まで
を実行する。
Line number 2: If the value of array element C 1 (I) is greater than 0.0, execute the following steps up to the ELSE line (line number 7).

行番号3:配列要素C2Jの値が1.0よりも大きけ
れば、以下対応するENDIF行の直前(行番号
6)までを実行する。
Line number 3: If the value of array element C 2 J is greater than 1.0, the following steps are executed up to just before the corresponding ENDIF line (line number 6).

行番号4:配列要素C3(I)の値が0.0よりも大き
ければ、以下対応するENDIF行の直前(行番
号5)までを実行する。
Line number 4: If the value of array element C 3 (I) is greater than 0.0, execute the following steps up to the corresponding ENDIF line (line number 5).

行番号5:配列要素B(I)とD(I)の和をとり
結果をA(I)に格納する。
Line number 5: Add array elements B(I) and D(I) and store the result in A(I).

行番号6:行番号4の条件文により制御される文
群の終り。
Line number 6: End of the statement group controlled by the conditional statement in line number 4.

行番号7:行番号3の条件文により制御される文
群の終り。
Line number 7: End of the statement group controlled by the conditional statement in line number 3.

行番号8:行番号2の条件文にてC1(I)の値が
0.0よりも大きくない場合に、以下行番号13の
ENDIF文の直前(行番号12)までを実行する。
Line number 8: The value of C 1 (I) in the conditional statement of line number 2 is
If not greater than 0.0, the following line number 13
Executes up to just before the ENDIF statement (line number 12).

行番号9:変数Iの値が1に等しい場合に、以下
行番号11のENDIF文の直前(行番号10)まで
を実行する。
Line number 9: If the value of variable I is equal to 1, execute the following lines up to the ENDIF statement in line number 11 (line number 10).

行番号10:配列要素F(I)とG(I)の和をと
り、結果をE(I)に格納する。
Line number 10: Add array elements F(I) and G(I) and store the result in E(I).

行番号11:行番号9の条件文で制御される文群の
終り。
Line number 11: End of the statement group controlled by the conditional statement on line number 9.

行番号12:配列要素Y(I)とZ(I)の和をと
り、結果をX(I)に格納する。
Line number 12: Add the array elements Y(I) and Z(I) and store the result in X(I).

行番号13:行番号2の条件文で制御される文群の
終り。
Line number 13: End of the statement group controlled by the conditional statement in line number 2.

行番号14:行番号1のDo文で制御される文群の
終り。
Line number 14: End of the statement group controlled by the Do statement in line number 1.

以上のような複雑な条件制御構造を有するルー
プ演算に対して本発明の方式によれば、次のよう
にしてコンパイラで自動的にベクトル命令を含む
目的プログラムを生成させることができる。
According to the method of the present invention for a loop operation having a complicated conditional control structure as described above, a target program including vector instructions can be automatically generated by a compiler in the following manner.

まず、コンパイラは第4図のプログラム記述を
走査して内部表現に変換するが、それに際し、プ
ログラム記述を文単位のブロツクに分割し、ブロ
ツク間の制御移動関係を解析して主記憶装置上に
置かれたテーブルに記録する。ブロツク分割と制
御移動関係の解析は、文法にもとずく構文の認識
と文種別の判定、ならびにそれに応じた制御移動
情報の収集により行なうが、従来コンパイラが目
的プログラムの最適化のために行なうものに類似
している。
First, the compiler scans the program description in Figure 4 and converts it into an internal representation. In doing so, it divides the program description into statement blocks, analyzes the control transfer relationship between blocks, and writes the program into main memory. Record it on the table. Analyzing the relationship between block division and control transfer is performed by recognizing the syntax based on the grammar, determining the sentence type, and collecting control transfer information accordingly, which is conventionally performed by a compiler to optimize the target program. is similar to

本発明の特徴は、制御移動関係の解析に続いて
ブロツク間の制御支配関係を解析して記録するこ
とにある。すなわち、第4図の例にて、従来の解
析では、行番号2のブロツク(以後ブロツク2と
略記する)は、ブロツク3,ブロツク4に制御を
移すことを明示するのみであつたが、本発明では
それをさらに押し進め、ブロツク2が能動的に他
ブロツクの実行を制御するものであることを性格
付け(このようなブロツクを条件ブロツクと呼
ぶ)、3,7,8,9,11,12の諸ブロツク
がブロツク2により実行を直接制御されることを
明示する。さらにそれらのブロツクが、条件ブロ
ツクにおける条件式の成立側、非成立側いずれの
支配を受けるものかを明らかにする。ブロツク間
の制御・被制御関係は重層的であり、たとえばブ
ロツク4はブロツク3の制御を受けるが、さらに
ブロツク3はブロツク2の制御を受けている。し
かし、各ブロツクに対してその実行を直接に制御
するブロツク群(これを当該ブロツクの制御ブロ
ツク群と呼ぶ)を指摘することにより、ブロツク
間の制御・被制御関係をすべて明らかにすること
ができる。
A feature of the present invention is that, following the analysis of control movement relationships, the control dominance relationships between blocks are analyzed and recorded. In other words, in the example of FIG. 4, in the conventional analysis, the block with line number 2 (hereinafter abbreviated as block 2) only explicitly indicates that control is transferred to block 3 and block 4, but in this case, In the invention, we take this further and characterize block 2 as something that actively controls the execution of other blocks (such blocks are called conditional blocks), 3, 7, 8, 9, 11, 12. The execution of blocks in block 2 is directly controlled by block 2. Furthermore, it will be clarified whether these blocks are controlled by the satisfied or unfulfilled side of the conditional expression in the conditional block. The control/controlled relationship between blocks is multilayered; for example, block 4 is controlled by block 3, which in turn is controlled by block 2. However, by pointing out the block group that directly controls the execution of each block (this is called the block's control block group), all the control/controlled relationships between blocks can be clarified. .

制御ブロツク群の検出は、ブロツク間の制御移
動情報により行なうが、それに先立ち、条件ブロ
ツクと非条件ブロツクの判別を行なう。この判別
は、当該ブロツクを構成する文の種別に基いて行
ない、当該文が論理IF文、ブロツクIF文、
ELSEIF文、算術IF文,単純GoTo文、計算型
GoTo文、割り当て形GoTo文のいずれかであれ
ば条件ブロツクであるとし、そうでないものを非
条件ブロツクとする。
Detection of control block groups is performed based on control movement information between blocks, but prior to this detection, conditional blocks and non-conditional blocks are discriminated. This determination is made based on the type of statements that make up the block, and whether the statement is a logical IF statement, a block IF statement, or
ELSEIF statement, arithmetic IF statement, simple GoTo statement, computational type
If it is either a GoTo statement or an assignment-type GoTo statement, it is considered a conditional block, and if it is not, it is considered a non-conditional block.

制御支配関係の解析手順を述べる前に、制御移
動関係およびブロツク判別結果の主記憶装置上で
の記憶形式とその略記法を説明する。第5図aに
主記憶装置上の記憶形式、第5図bにその略記
法、第6図に第4図の例題の解析結果を略記法に
て示す。
Before describing the analysis procedure of the control dominance relationship, the storage format of the control transfer relationship and block discrimination results on the main storage device and its abbreviation will be explained. FIG. 5a shows the storage format on the main memory, FIG. 5b shows its abbreviated notation, and FIG. 6 shows the analysis result of the example problem of FIG. 4 in abbreviated notation.

第5図aに示すように、各ブロツクの情報は、
主記憶装置上に置かれた複数のフイールドを持つ
テーブルBLOCKTにより管理される。ここで、
フイールド1は引き続くBLOCKTの先頭番地
を、フイールド2は条件ブロツク/非条件ブロツ
クの種別を、フイールド3はブロツクを構成する
文の行番号を、フイールド4は制御移動先のブロ
ツク群を代表するBLOCKTの先頭番地群を保持
するFLINKテーブルの指標を、フイールド5は
制御移動元のブロツク群を代表するBLOCKTの
先頭番地群を保持するBLINKテーブルの指標
を、フイールド7はブロツクを構成する文本体の
先頭番地を保持する。フイールド6は、後に当該
ブロツクの制御ブロツク群を代表するBLOCKT
の先頭番地群を保持するCLINKテーブルの指標
を入れるべく予約されたフイールドである。フイ
ールド15は、効率的な制御支配関係の解析を行
なうために、当該ブロツクの等価後方定義ブロツ
クの、BLOCKTの先頭番地を置くフイールドで
ある。テーブルFLINKのフイールド8、BLINK
のフイールド10は、一連の制御移動先ブロツク
群あるいは制御移動元ブロツク群の最終か否かを
表示する。フイールド9,11は制御移動先ない
し移動元ブロツクのBLOCKT先頭番地を保持す
る。同様にCLINKのフイールドには制御ブロツ
ク群の最終/否の表示、フイールド13は制御ブ
ロツクのBLOCKT先頭番地、フイールド14は
制御ブロツクから発するいずれの制御バス上にあ
るかを示すものである。以上、主記憶装置上の記
憶形式を説明したが、これは一例であり、必要な
情報が含まれていればどのような形式を取るかは
発明とより重要ではない。
As shown in Figure 5a, the information of each block is
It is managed by a table BLOCKT that has multiple fields located on the main memory. here,
Field 1 indicates the starting address of the subsequent BLOCKT, Field 2 indicates the type of conditional block/non-conditional block, Field 3 indicates the line number of the statement that makes up the block, and Field 4 indicates the BLOCKT representing the group of blocks to which control is transferred. Field 5 is the index of the FLINK table that holds the start address group, field 5 is the index of the BLINK table that holds the start address group of BLOCKT representing the control transfer source block group, and field 7 is the start address of the statement body that makes up the block. hold. Field 6 will later contain BLOCKT representing the control block group of the block in question.
This field is reserved to contain the index of the CLINK table that holds the starting addresses of . Field 15 is a field in which the starting address of BLOCKT of the equivalent backward definition block of the block is placed in order to efficiently analyze the control/dominance relationship. Field 8 of table FLINK, BLINK
Field 10 indicates whether this is the last of a series of control transfer destination block groups or control transfer source block groups. Fields 9 and 11 hold the BLOCKT start address of the control movement destination or movement source block. Similarly, the CLINK field indicates whether the control block group is final or not, field 13 indicates the BLOCKT start address of the control block, and field 14 indicates which control bus originating from the control block is on. The storage format on the main storage device has been described above, but this is just an example, and as long as the necessary information is included, the format is not as important as the invention.

第5図bは上記の記憶形式の略記法を示すもの
である。条件ブロツク、非条件ブロツクの区別を
枠の形で、枠内の数字で対応する行番号を、実線
の矢印で制御移動先のブロツク群を、一点鎖線矢
印で後に明らかにされる制御ブロツク群を明示す
る。
FIG. 5b shows an abbreviation for the above storage format. The distinction between conditional blocks and non-conditional blocks is shown in the form of a frame, the numbers in the frame indicate the corresponding line number, the solid line arrows indicate the block group to which the control is to be moved, and the dashed-dotted line arrows indicate the control block group that will be revealed later. Make it clear.

第6図は略記法による例題プログラムのブロツ
ク間制御移動情報と、条件/非条件のブロツク類
別を示すものである。
FIG. 6 shows the inter-block control movement information of the example program in abbreviated notation and the condition/non-condition block classification.

以上の準備のもとに、ブロツク間制御支配関係
の解析手順を第6図に則して述べる。
Based on the above preparations, the procedure for analyzing the inter-block control relationship will be described with reference to FIG.

ステツプ1:ブロツク間制御移動情報にもとず
き、Do文の端点ブロツク14からループ先頭
ブロツク2に向うループ以外の制御移動のルー
プを持たないことを確認する。この確認方向は
通常の有向グラフの解析に用いられる公知のも
のである。また中途からループ外へ制御の飛び
出しのないことを確認する。ループが存在する
場合あるいはループ外への飛び出しのある場合
には原理的にベクトルプロセツサの適用はでき
ないのでこゝで処理を中断する。
Step 1: Based on the inter-block control transfer information, confirm that there is no control transfer loop other than the loop from the end point block 14 of the Do statement to the loop head block 2. This confirmation direction is a known direction used in normal directed graph analysis. Also, confirm that the control does not jump out of the loop midway through. If a loop exists or if there is a jump out of the loop, the vector processor cannot be applied in principle, so processing is interrupted here.

ステツプ2:先頭ブロツクの次からループ端点に
至る各ブロツクについて、当該ブロツクから制
御移動元の系列に従つて先頭ブロツクに至る全
てのルートを探索し、各ルート上最も当該ブロ
ツクに近い条件ブロツクを集めて当該ブロツク
の制御ブロツク群とする。
Step 2: For each block from the first block to the loop end point, search all routes from that block to the first block according to the sequence of control movement sources, and collect the condition blocks closest to the relevant block on each route. This is used as the control block group for the block.

ルートの探索においては、等価後方定義ブロツ
クの概念を用いて探索を効率化する。すなわち各
段階の探索済みルートの先端ブロツクに対して、
後方定義ブロツク(Back Target Block:ルー
プの先頭ブロツクから当該ブロツクに至る全ての
ブロツク系列上にあり当該ブロツクからの距離が
最短であるもの)を求め、さらに後方定義ブロツ
クの前方定義ブロツク(Forward Target
Block:当該ブロツク今の例では、後方定義ブロ
ツクループ端点にいたるすべてのブロツク系列上
にあり、当該ブロツクからの距離が最短であるも
の)を求める。それが再びルート先端ブロツクに
一致する場合は、ルート先端ブロツクと後方定義
ブロツクは同一の制御条件を有することになるの
で、後方定義ブロツクまでの探索をバイパスし、
ルート先端を後方定義ブロツクの後方に位置付け
ることができる。このような後方定義ブロツクを
当該ブロツクの等価後方定義ブロツクと呼び、こ
れを用いて探索時間の短縮と制御ブロツク群の簡
約化を実現する。ここで、後方定義ブロツク、前
方定義ブロツクの検出方式は従来コンパイラで用
いられる公知のものであるが、これも等価後方定
義ブロツクの概念を用いて効率を上げることがで
きる。
When searching for a route, the concept of equivalent backward definition blocks is used to make the search more efficient. In other words, for the tip block of the searched route at each stage,
Find the backward definition block (Back Target Block: the block that is on all the block series from the first block of the loop to the block and has the shortest distance from the block), and then calculate the forward definition block of the backward definition block (Forward Target Block).
Block: In this example, find the block that is on all the block sequences up to the end point of the backward defined block loop and has the shortest distance from the block. If it matches the root tip block again, the root tip block and the backward definition block have the same control conditions, so the search up to the backward definition block is bypassed,
The root tip can be positioned behind the rear definition block. Such a backward definition block is called an equivalent backward definition block of the block in question, and is used to shorten the search time and simplify the control block group. Here, the detection method for backward defined blocks and forward defined blocks is a known method used in conventional compilers, but the efficiency can also be improved by using the concept of equivalent backward defined blocks.

上記の処理を、ブロツク12を例にとり、主記
憶装置上のテーブル操作に則して説明する。制御
ブロツク群の検出のためには、第5図aの
BLOCKT、FLINK、BLINK、CLINKの他、探
索中の後方ルートを保持するために第7図に示す
RSTACKとその最終指標を保持するSTKPTR
を使用する。STKPTRには当初ゼロ値が格納さ
れている。この他に、後方定義ブロツク、前方定
義ブロツクを検出するためのテーブルが必要であ
るが公知であるので省略する。
The above processing will be explained using block 12 as an example and in accordance with table operations on the main memory. In order to detect the control block group, the procedure shown in FIG.
In addition to BLOCKT, FLINK, BLINK, and CLINK, it is shown in Figure 7 to maintain the backward route being searched.
STKPTR holding RSTACK and its final indicator
use. STKPTR initially stores a zero value. In addition, tables for detecting backward defined blocks and forward defined blocks are required, but they are well known and will therefore be omitted.

まず、ブロツク12の後方ルートの探索を行な
うにあたつて、STKPTRの内容を1つカウント
アツプした後ブロツク12を代表するBLOCKT
の先頭番地をSTKPTRで指示されるRSTACK
のフイールド16にセツトする。また、
BLOCKTのフイールド5の内容(BLINKの指
標)をRSTACKのフイールド17にセツトす
る。フイールド5で指示されるBLINKのフイー
ルド10をテストすることにより、これが唯一の
後方ブロツクであることが判定されこの
RSTACKのフイールド16,17で指定される
ブロツクが次に探索を行なうべきブロツクとな
る。すなわち、RSTACKのフイールド17で指
定されるBLINKテーブルのフイールド11には
ブロツク11のBLOCKT先頭番地が格納されて
いることから、STKPTRをカウントアツプした
後、ブロツク11のBLOCKT先頭番地とフイー
ルド5の内容をSTKPTRの指すRSTACKのフ
イールド16,17に格納する。フイールド16
で指示されるBLOCKTのフイールド2をテスト
し、それが非条件ブロツクであることから、さら
に後方への探索を続行する。すなわち、フイール
ド17で指示されるBLINKエントリのフイール
ド10をテストすることにより、それが最後のブ
ロツクを表示しないので複数個の後方ブロツクを
保持することがわかる。そこで、フイールド15
の内容をテストし、それがゼロであれば等価後方
定義ブロツクが求まつていないとして先に述べた
後方定義ブロツク9の検出とその前方定義ブロツ
クの検出手続きを実行する。それが再びブロツク
11に一致することから、ブロツク9はブロツク
11の等価後方定義ブロツクと判定し、
BLOCKTのフイールド15にブロツク9の
BLOCKTの先頭番地を設定する。また
RSTACKのフイールド16,17の内容を、後
方定義ブロツク9のBLOCKT先頭番地とそのフ
イールド5の内容に置きかえる。他ブロツクの解
析により、フイールド15に既に等価後方定義ブ
ロツクが求まつている場合にはそれにより直接
RSTACKのフイールド16,17の内容を置き
かえる。さらに、フイールド17にしたがつた後
方ブロツクの探索により、ブロツク8、ブロツク
2をRSTACKに登録し、ブロツク2のフイール
ド2のテスト結果によりそれが条件ブロツクであ
ることを判定して、ブロツク12に対する最初の
制御ブロツクと認定する。そこで、CLINK用新
領域のフイールド13にRSTACKのフイールド
16にある、ブロツク2のBLOCKT先頭番地を
格納し、ブロツク2用BLOCKTのフイールド7
からポイントされる文中間語の解析により、
RSTACK上前段のフイールド16から得られる
ブロツク8がブロツク2から別れる制御移動パス
のいずれに属するかを判定してCLINKのフイー
ルド14に設定する。さらに、当該CLINKの指
標を、RSTACKの根幹のフイールド16から指
されるブロツク12用BLOCKTのフイールド6
に設定する。
First, when searching for the backward route of block 12, after counting up the contents of STKPTR by one,
RSTACK indicated by STKPTR
field 16. Also,
Set the contents of field 5 of BLOCKT (BLINK index) to field 17 of RSTACK. By testing field 10 of the BLINK pointed to by field 5, it is determined that this is the only backward block and this
The block specified by fields 16 and 17 of RSTACK becomes the block to be searched next. That is, since field 11 of the BLINK table specified by field 17 of RSTACK stores the BLOCKT start address of block 11, after counting up STKPTR, the BLOCKT start address of block 11 and the contents of field 5 are stored. Store in fields 16 and 17 of RSTACK pointed to by STKPTR. field 16
Tests field 2 of BLOCKT indicated by , and since it is a non-conditional block, continues searching further backwards. That is, by testing field 10 of the BLINK entry pointed to by field 17, we find that it holds multiple backward blocks since it does not display the last block. Therefore, field 15
If it is zero, it is assumed that an equivalent backward definition block has not been found, and the above-described procedures for detecting backward definition block 9 and its forward definition block are executed. Since it again matches block 11, block 9 is determined to be an equivalent backward definition block of block 11,
Block 9 in field 15 of BLOCKT
Set the starting address of BLOCKT. Also
The contents of fields 16 and 17 of RSTACK are replaced with the BLOCKT start address of backward definition block 9 and the contents of field 5 thereof. If an equivalent backward definition block has already been found in field 15 by analyzing other blocks, then
Replace the contents of fields 16 and 17 of RSTACK. Furthermore, by searching the backward blocks according to field 17, block 8 and block 2 are registered in RSTACK, and the test result of field 2 of block 2 determines that it is a condition block. It is recognized as a control block. Therefore, the first address of BLOCKT of block 2 in field 16 of RSTACK is stored in field 13 of the new area for CLINK, and field 7 of BLOCKT for block 2 is stored.
By analyzing the sentence intermediate words pointed from
It is determined which control movement path that block 8 obtained from field 16 in the previous stage of RSTACK belongs to, which is separated from block 2, and is set in field 14 of CLINK. Furthermore, the index of the CLINK is added to field 6 of BLOCKT for block 12 pointed from field 16 of the RSTACK.
Set to .

ブロツク2のCLINKへの登録後、STKPTRを
1つカウントダウンし、別ルート上の制御ブロツ
クの探索に移る。すなわちSTKPTRで指される
RSTACKのフイールド17で指示される
BLINKテーブルのフイールド10はそれがブロ
ツク8の最終後方ブロツクであることを示してい
るので、ブロツク8より後方に他の制御パスが存
在しないことが判定される。そこで、さらに
STKPTRを下げながら探索を続け、ブロツク
9、ブロツク12に至つて探索を終了する。最後
にブロツク12のフイールド6からポイントされ
る唯一のCLINKテーブルのフイールド12に最
終記号を表記する。
After registering block 2 to CLINK, count down STKPTR by one and move on to searching for a control block on another route. i.e. pointed to by STKPTR
Indicated by field 17 of RSTACK
Since field 10 of the BLINK table indicates that this is the last block after block 8, it is determined that there is no other control path after block 8. Therefore, further
The search continues while lowering STKPTR, and the search ends when it reaches blocks 9 and 12. Finally, write the final symbol in field 12 of the only CLINK table pointed to by field 6 of block 12.

このようにして、等価後方定義ブロツクの概念
を用いて、11と9間のルート探索を節約するこ
とにより、探索時間の短縮を実現することができ
る。
In this way, the search time can be shortened by saving the route search between 11 and 9 using the concept of equivalent backward definition blocks.

また、等価後方定義ブロツクを用いない場合に
はブロツク11と9間の全制御パスを走査するこ
とになるので、ブロツク12の制御ブロツク群と
してブロツク9の成立、非成立側の両者を指摘す
ることになり冗長であるのみならず、ブロツク9
の制御ブロツクが2であるという形で間接的な制
御支配関係の表示となり、最終的な目的プログラ
ムの効率を悪くする。等価後方定義ブロツクを用
いる事により簡潔な制御支配関係の表示が可能に
なる。
In addition, if equivalent backward definition blocks are not used, all control paths between blocks 11 and 9 will be scanned, so it is necessary to point out both the establishment and non-establishment of block 9 as a group of control blocks for block 12. Not only is it redundant, but block 9
The fact that the number of control blocks is 2 indicates an indirect control/dominance relationship, which impairs the efficiency of the final target program. By using the equivalent backward definition block, it becomes possible to display the control/dominance relationship in a concise manner.

第6図の各ブロツクの制御ブロツク群検出の手
順は次のとおりである。
The procedure for detecting control block groups for each block in FIG. 6 is as follows.

第6図ブロツク3の制御ブロツク群検出におい
て、ループ入口2に至るルート上にある最初にし
て唯一の条件ブロツクは2であることから、3の
制御ブロツクは2となる。同様にして、ブロツク
4,5,8,9,10の制御ブロツクは、それぞ
れ3,4,2,2,9となる。ブロツク6につい
ては、その後方定義ブロツク4の前方定義ブロツ
クが6であり当該ブロツクに一致することから、
探索をまずブロツク4の後方定義ブロツクから始
めることができる。それが最初の条件ブロツクで
あることから、6の制御ブロツクは3となる。ブ
ロツク7についても同様に、6の等価後方定義ブ
ロツクが4であることを知り、効率よくその等価
後方定義定義ブロツク3を検出する。ブロツク3
の後方より探索を始め、制御ブロツク2を得る。
ブロツク11も等価後方定義ブロツク9を検出し
た後その後方8より検索をはじめ、8,2とルー
トをたどつて2を制御ブロツクと同定する。ブロ
ツク12は、11を探索後その等価後方定義ブロ
ツク9までをスキツプし、8より探索を再開して
2を同定する。最後に13は、7と11の等価後
方定義ブロツクが3と9であることを利用して、
効率良くその等価後方定義ブロツク2を同定し、
2の後方より検索を開始するが、もはやループ内
ブロツクを残さないので制御ブロツクなしと判定
される。
In the control block group detection of block 3 in FIG. 6, the first and only condition block on the route to loop entrance 2 is 2, so the control block 3 is 2. Similarly, the control blocks of blocks 4, 5, 8, 9, and 10 become 3, 4, 2, 2, and 9, respectively. Regarding block 6, since the front definition block of its rear definition block 4 is 6 and it matches that block,
The search can begin with the backward definition block of block 4. Since it is the first condition block, the control block of 6 becomes 3. Similarly, for block 7, it is known that the equivalent backward definition block of 6 is 4, and its equivalent backward definition definition block 3 is efficiently detected. Block 3
The search begins from behind and control block 2 is obtained.
After the block 11 detects the equivalent backward definition block 9, it starts searching from the backward block 8, follows the route 8 and 2, and identifies 2 as a control block. Block 12 searches for block 11, then skips to the equivalent backward definition block 9, and resumes the search from block 8 to identify block 2. Finally, 13 uses the fact that the equivalent backward definition blocks of 7 and 11 are 3 and 9,
Efficiently identify the equivalent backward definition block 2,
The search starts from after 2, but since no block within the loop is left, it is determined that there is no control block.

以上の手順により、第6図にて一点鎖線で示す
ように各ブロツクの制御ブロツク群を確定し、ブ
ロツク間制御支配関係を明らかにする。
By the above procedure, the control block group of each block is determined as shown by the dashed line in FIG. 6, and the inter-block control relationship is clarified.

ところで、ループ演算中の条件式の中には、第
4図の行番号9のようにDoループの制御変数I
の初期値に依存して条件の成/否が決定されるも
のがしばしば用いられる。このような条件式は、
第8図に示すように繰り返しの初回をループ外に
展開しループ内での制御変数の範囲を限定するこ
とにより、ループ内での条件の成否を確定させる
ことができるのでこれを実施する。すなわち、ル
ープ内でIが2からNまでの値しか取らなけれ
ば、IF(I.EQ.1)の条件は成り立たないのでルー
プ内で行番号10の演算が実施されることは無
い。そこでその制御移動パスを消去することによ
り制御構造を単純化し、目的プログラムの効率化
をはかる。
By the way, in the conditional expression during the loop calculation, there is a control variable I of the Do loop, as shown in line number 9 in Figure 4.
Often, the success or failure of a condition is determined depending on the initial value of . Such a conditional expression is
As shown in FIG. 8, by extending the first iteration outside the loop and limiting the range of control variables within the loop, it is possible to determine whether the conditions within the loop are satisfied or not, so this is implemented. That is, if I only takes values from 2 to N within the loop, the condition of IF (I.EQ.1) will not hold, so the operation at line number 10 will not be executed within the loop. Therefore, by deleting the control movement path, the control structure is simplified and the efficiency of the target program is improved.

以上の手続きを第5図aと第9図を用いて説明
する。
The above procedure will be explained using FIG. 5a and FIG. 9.

まず、ループを構成するBLOCKTの系列を走
査し、フイールド2により条件ブロツクか否かを
判定して条件ブロツクについてはフイールド7に
より初回展開により消去の対象となるか否かを判
定する。消去の対象となる条件ブロツクが存在す
る場合には、次の手順で展開を実施する。
First, a series of BLOCKTs constituting a loop is scanned, field 2 is used to determine whether or not it is a conditional block, and field 7 is used to determine whether or not the conditional block is to be erased by initial expansion. If there is a conditional block to be deleted, expand it using the following steps.

初回分の展開はブロツク2から14までの第5
図aに示されるテーブル類、およびフイールド7
から指される文中間語を主記憶装置上の空き領域
にコピーし、ブロツク1のフイールド1をその先
頭BLOCKTに位置付け、コピーブロツク群の最
終BLOCKTのフイールド1をブロツク2に位置
付けることにより行なう。
The first development is the 5th block from block 2 to 14.
Tables shown in figure a and field 7
This is done by copying the sentence intermediate word pointed to by to a free area on the main memory, positioning field 1 of block 1 at its first BLOCKT, and positioning field 1 of the last BLOCKT of the copy block group at block 2.

続いて、ブロツク8から12に至る部分の制御
構造単純化を行なうがその手続きは次のとおりで
ある。ブロツク9の条件式評価によりブロツク1
0への制御移動が起きないことが判定されている
ことから、9のフイールド7から指される論理
IF文をブロツク11への単純GoTo文に変更する
と同時に、ブロツク10への制御移動情報を消去
する。すなわち、ブロツク9のBLOCKTのフイ
ールド4から指されるFLINK系列上にあるブロ
ツク10のエントリを消去すると同時にブロツク
10のBLOCKTフイールド5から指される
BLINK上のブロツク9のエントリを消去する。
この場合ブロツク9が唯一のエントリであるので
後方ブロツクが無くなるわけであり、フイールド
5にはゼロを埋め込む(第9図a→b)。次いで、
改めて全ブロツクを照査し、後方ブロツクを持た
ないブロツクについてはそこからの制御移動先情
報を消去する。すなわち、ブロツク10の
BLOCKTフイールド4から指されるFLINK上の
ブロツク11のエントリを消去し、ブロツク11
のBLOCKTフイールド5から指されるBLINK
上のブロツク10のエントリを消去する。この過
程を、後方ブロツクのないブロツクが消滅するま
で続ける。この過程は必ず有限回で終了し、内部
ループを含まない場合には、最終的に制御パス消
去の結果を正しく全ブロツクに伝えることができ
る。(第9図b→c)。
Next, the control structure of blocks 8 to 12 is simplified, and the procedure is as follows. Block 1 is determined by evaluating the conditional expression of block 9.
Since it has been determined that the control movement to 0 does not occur, the logic pointed to by field 7 of 9
The IF statement is changed to a simple GoTo statement for block 11, and at the same time, the control transfer information for block 10 is deleted. In other words, the entry of block 10 on the FLINK sequence pointed to by field 4 of BLOCKT of block 9 is erased, and at the same time the entry pointed to by field 5 of BLOCKT of block 10 is deleted.
Delete the entry in block 9 on BLINK.
In this case, since block 9 is the only entry, there is no subsequent block, and field 5 is filled with zeros (see a→b in FIG. 9). Then,
All blocks are checked again, and for blocks that do not have a backward block, the control movement destination information from there is deleted. That is, block 10
Delete the entry of block 11 on FLINK pointed to by BLOCKT field 4, and
BLINK pointed to by BLOCKT field 5 of
Erase the entry in block 10 above. This process continues until blocks with no blocks behind them disappear. This process always ends in a finite number of times, and if an inner loop is not included, the result of control path deletion can be correctly transmitted to all blocks in the end. (Fig. 9b→c).

その後、制御移動に変更のあつたブロツク9,
11の文中間語をBLOCKTのフイールド7によ
り照査し、それらが何の演算も行なわないことを
確認した後、第9図dに示すように、ブロツク8
のBLOCKTフイールド1をブロツク12の
BLOCKT先頭に書きかえることにより、ブロツ
ク9,11を削除する。
After that, block 9, which had a change in control movement,
After checking the sentence intermediate words of block 11 using field 7 of BLOCKT and confirming that they do not perform any operation, block 8 is checked as shown in Figure 9d.
BLOCKT field 1 of block 12
By rewriting BLOCKT to the beginning, blocks 9 and 11 are deleted.

このような展開による制御構造簡約化は、制御
変数の終値に関する条件式についても同様に実施
することができる。
Control structure simplification through such expansion can be similarly implemented for conditional expressions regarding the final values of control variables.

以上にのべた展開処理により、制御支配関係が
変わる場合にはそれも併せて更新する。
If the control/dominance relationship changes as a result of the expansion processing described above, it is also updated.

端点条件消去の簡約化と制御支配関係の解析の
後、ベクトル演算適用のための制御移動関係の変
更を行なう。
After simplifying the end point condition elimination and analyzing the control-dominance relationship, we change the control-movement relationship to apply vector calculations.

変更方式の説明に先立ち、第10図により制御
ベクトルの機能を説明する。制御ベクトルとは論
理値“0”または“1”を取る要素から成るデー
タ列であり、制御情報のデータによる表示を行な
うものである。
Prior to explaining the changing method, the function of the control vector will be explained with reference to FIG. A control vector is a data string consisting of elements having a logical value of "0" or "1", and is used to display control information using data.

すなわち、VCGTのようなベクトル比較命令
により、二つのベクトルA,Bの要素ごとの比較
を行ない、ある要素AiとBiの比較の結果、比較
成立時には論理値「1」を、比較不成立時には、
論理値「0」を制御ベクトルCVの対応する要素
CViとして残す。ついで、VEAのような、ベク
トルX,Yに対して加算を行うベクトル加算命令
に対して、こうして生成された制御ベクトルCV
を働かせることにより、制御ベクトルCVの要素
CViの値が1のとき、対応する要素Xi,Yiの加
算を実行し、結果ベクトルZの要素Ziを生成し、
制御ベクトルCVの要素CViの値が0のとき、そ
れらの要素Xi,Yiの加算を抑制する。このよう
に、ベクトルA,Bの要素比較の結果を他のベク
トルX,Yに対するベクトル演算に作用させるの
が制御ベクトルの役割である。
In other words, a vector comparison instruction such as VCGT compares each element of two vectors A and B, and as a result of comparing certain elements Ai and Bi, if the comparison is successful, a logical value of "1" is given, and if the comparison is not true, the logical value is "1".
Logical value "0" is set to the corresponding element of control vector CV
Leave as CVi. Next, for a vector addition instruction such as VEA that adds to vectors X and Y, the control vector CV generated in this way is
The elements of the control vector CV by working with
When the value of CVi is 1, perform addition of corresponding elements Xi and Yi, generate element Zi of result vector Z,
When the value of element CVi of control vector CV is 0, addition of these elements Xi and Yi is suppressed. In this way, the role of the control vector is to apply the result of element comparison of vectors A and B to vector calculations for other vectors X and Y.

第6図の例題における、制御ベクトルを使用す
るためのブロツク間制御移動関係の更新手順を第
11図により説明する。
The procedure for updating the inter-block control movement relationship for using the control vector in the example problem of FIG. 6 will be explained with reference to FIG.

更新の基本原則は、ブロツク14から2に至る
大ループを、ベクトル演算が適用できるように各
ブロツクをまわる小ループ群に変更することであ
る。
The basic principle of the update is to change the large loop from block 14 to block 2 into a group of small loops that go around each block so that vector operations can be applied.

条件ブロツクについては、まず条件式を構成す
る変数ないし配列要素の値がループの進行と共に
変化する可能性のある可変条件ブロツクと、ブロ
ツク3のように変化のない不変条件ブロツクに分
類する。この分類は、このブロツクに対する
BLOCKTのフイールド7を経由して得られる文
中間語に対して条件式を構成する変数、配列のル
ープ内での定義ないし更新の有無を調べることに
より行なう。
Conditional blocks are first classified into variable conditional blocks in which the values of variables or array elements constituting the conditional expression may change as the loop progresses, and invariant conditional blocks such as block 3, which do not change. This classification applies to this block.
This is done by checking the presence or absence of definitions or updates within the loop of variables and arrays forming the conditional expression for the sentence intermediate word obtained via field 7 of BLOCKT.

ついで、ブロツク2,4のようなループ可変条
件ブロツクは、条件式下に制御ベクトル生成のた
めの新ブロツク20,21,22,23などを挿
入することにより小ループ化する。新ブロツクの
挿入は、第5図aのテーブル類新設、およびブロ
ツク2,13のフイールド変更により実現する。
ブロツク20では、配列要素C1(I)がブロツ
ク2で規定される条件を満たすか否かを判別し、
この条件を満たす場合には、ブロツク2用制御ベ
クトルのCV1の対応要素に「1」をセツトし、
ブロツク21では、「0」をセツトするような文
中間語を、これらのブロツクのBLOCKTのフイ
ールド7の先に生成し、同様に、ブロツク22,
23では配列要素C3(I)に関してブロツク4用
制御ベクトルCV2に「1」ないし「0」をセツ
トする文中間語を生成する。
Next, loop variable condition blocks such as blocks 2 and 4 are made into small loops by inserting new blocks 20, 21, 22, 23, etc. for generating control vectors under the conditional expressions. Insertion of a new block is achieved by creating new tables as shown in FIG. 5a and changing the fields of blocks 2 and 13.
In block 20, it is determined whether array element C1(I) satisfies the conditions specified in block 2,
If this condition is met, set "1" to the corresponding element of CV1 of the control vector for block 2,
In block 21, a sentence intermediate word that sets "0" is generated ahead of field 7 of BLOCKT of these blocks, and similarly, in block 22,
At step 23, a sentence intermediate word is generated for setting the control vector CV2 for block 4 to ``1'' or ``0'' regarding array element C3(I).

一方、ブロツク3のようなループ不変条件ブロ
ツクについては、制御ベクトルを作らないでも判
定・分岐命令により演算制御が行なえるので小ス
ープを作らない。
On the other hand, for a loop invariant block such as block 3, a small soup is not created because arithmetic control can be performed by judgment/branch instructions without creating a control vector.

非条件ブロツクは、対応する文の種別により小
ループ化の実施、非実施を決定する。ブロツク
5,12のようなループに依存して異なる値を用
いる代入文ブロツクは小ループ化を行ない、一
方、6,7,8,13のような無演算ブロツクに
対しては行なわない。
A non-conditional block determines whether or not to make a small loop depending on the type of the corresponding statement. Assignment statement blocks that use different values depending on the loop, such as blocks 5 and 12, are made into smaller loops, while non-operational blocks such as 6, 7, 8, and 13 are not made into smaller loops.

条件ブロツクの小ループ化に伴ない、非成立側
ブロツクの制御移動変更を行なう。ブロツク8は
ブロツク2の非成立側に位置するが、第11図の
ように成立側最終ブロツク7から制御を受けるよ
うにブロツク8のFLINK、BLINKを更新して変
更する。
As the conditional block becomes a smaller loop, the control movement of the non-established block is changed. Block 8 is located on the non-established side of block 2, but the FLINK and BLINK of block 8 are updated and changed so that it receives control from the final block 7 on the established side as shown in FIG.

以上の小ループ化を実施するためには、あらか
じめブロツク間のデータ依存関係が小ループ化に
矛盾しないことを確認するが、これは従来のベク
トルコンパイラでも必要とされる公知の技術であ
る。
In order to implement the above-described short loop formation, it is confirmed in advance that the data dependencies between blocks do not contradict the short loop formation, and this is a known technique that is also required in conventional vector compilers.

小ループ化の後に、各ブロツクないし小ループ
対応にベクトル演算を含む目的プログラムの生成
を行なう。その手続きを次にのべる。
After forming small loops, a target program including vector operations corresponding to each block or small loop is generated. The procedure is described below.

まず、ブロツク2,20,21,14の小ルー
プに対しては、BLOCKTフイールド7から指さ
れる文中間語に基づき条件のベクトル比較によ
り、制御ベクトルCV1を発生するコードを生成
し、フイールド7から指し示す。条件式における
配列要素のベクトル表示への変更方法などは従来
コンパイラにて既知の技術である。
First, for the small loops of blocks 2, 20, 21, and 14, a code that generates the control vector CV1 is generated by vector comparison of conditions based on the sentence intermediate word pointed to by BLOCKT field 7, and point. The method of changing array elements in a conditional expression to vector representation is a known technique for conventional compilers.

続くブロツク3に対しては、従来の文中間語の
まゝ比較と分岐を行なう中間語とする。
For the following block 3, the conventional sentence intermediate word is used as an intermediate word for comparison and branching.

ブロツク4,22,23,14の小ループに対
しては、まず制御ベクトルCV2を発生する中間
語を生成する。ところで、BLOCKTフイールド
6によりブロツク4の制御ブロツクはブロツク3
であり、このブロツク3は、文中間語の照査から
不変条件ブロツクであることが分かり、制御ベク
トルを持たないが、ブロツク3の制御ベクトルが
ブロツク2であることから、ブロツク4の制御ベ
クトルCV2はブロツク2の制御ベクトルCV1と
の論理積をとる必要がある。そこで制御ベクトル
CV1とCV2の論理積をとり、新に制御ベクトル
CV2とする中間語NCVを追加する。
For the small loops of blocks 4, 22, 23, and 14, an intermediate word is first generated to generate the control vector CV2. By the way, the control block of block 4 is changed to block 3 by BLOCKT field 6.
Then, block 3 is found to be an invariant block by checking the sentence intermediate word, and has no control vector. However, since the control vector of block 3 is block 2, the control vector CV2 of block 4 is It is necessary to perform an AND with the control vector CV1 of block 2. So the control vector
Take the AND of CV1 and CV2 and create a new control vector
Add the intermediate word NCV to be CV2.

ブロツク5を含む小ループに対しては、ブロツ
ク5の制御ブロツクが4であり、文中間語の照査
によりブロツク4の制御ベクトルはCV2である
ことが判るから、それを用いたベクトル加算中間
語VEA(CV2)に置きかえる。
For the small loop containing block 5, the control block of block 5 is 4, and the control vector of block 4 is found to be CV2 by checking the sentence intermediate word, so the vector addition intermediate word VEA using that is found. Replace with (CV2).

ブロツク6,7,8は非演算ブロツクであるこ
とから、それらに対してダミー中間語NULLを
生成し、ブロツク12を含む小ループは、
CLINKフイールド13,14によりブロツク2
の非成立側の制御を受けることから、CV1の否
定形を制御ベクトルとするベクトル加算中間語
VEA(CV1)に置きかえる。
Since blocks 6, 7, and 8 are non-operational blocks, a dummy intermediate word NULL is generated for them, and the small loop including block 12 is
Block 2 by CLINK fields 13 and 14
Since it is controlled by the non-establishment side of CV1, a vector addition intermediate word whose control vector is the negative form of CV1
Replace with VEA (CV1).

最後に非演算ブロツク13に対してはNULL
中間語に置きかえる。
Finally, NULL for non-operation block 13
Replace it with an intermediate word.

中間語から処理装置の実行可能な目的プログラ
ムへの変換手続きは直接的であり、従来技術によ
り明白である。
The conversion procedure from an intermediate language to an executable object program on a processing device is straightforward and obvious from the prior art.

以上の手順により、多重の条件文を含むループ
演算に対してベクトル命令による目的プログラム
を生成し、ベクトルプロセツサによる高速処理を
可能とする。
Through the above procedure, an object program using vector instructions is generated for a loop operation including multiple conditional statements, and high-speed processing by a vector processor is enabled.

本願発明によれば、従来困難とされた、条件文
を含むループ演算に対するコンパイラによるベク
トル命令コードの自動生成が可能となる。さら
に、本願の他の発明によれば、多重の条件式を含
むループ演算に対して、ベクトル命令を含む目的
プログラムを自動的に生成することができる。さ
らに、本願の他の発明によれば、不変条件式を含
むループ部分も効率よく目的プログラムに変換で
きる。従つて、これらの本願発明により、ベクト
ルプロセツサを利用するためのプログラム作成工
数が大幅に軽減される。
According to the present invention, it becomes possible for a compiler to automatically generate vector instruction codes for loop operations including conditional statements, which has been difficult in the past. Furthermore, according to another invention of the present application, an object program including vector instructions can be automatically generated for a loop operation including multiple conditional expressions. Furthermore, according to another invention of the present application, a loop portion including an invariant conditional expression can also be efficiently converted into a target program. Therefore, with these inventions of the present application, the number of man-hours required to create a program for utilizing a vector processor can be significantly reduced.

【図面の簡単な説明】[Brief explanation of the drawing]

第1図aは条件文を用いて記述した選択的ルー
プ演算のプログラム例、第1図bはマージ関数を
用いた上記のプログラム例、第1図Cはマージ命
令によるその実行方式、第2図は代入文左辺の異
なる選択的演算例、第3図は多重条件文を含むプ
ログラム例である。第4図は実施例に取り上げた
条件文を含むループ演算例、第5図aはブロツク
種別とブロツク間制御移動情報の保持形式、第5
図bはその略記法、第6図は実施例におけるブロ
ツク間制御移動・制御支配関連図、第7図はブロ
ツク間制御支配関係解析のための作業テーブル
図、第8図は実施例のループ展開結果、第9図は
ループ展開に伴なう制御移動関係の更新・過程
図、第10図は制御ベクトルの機能説明図、第1
1図はベクトル命令使用のためのブロツク間制御
移動関係の更新図と生成する目的プログラムであ
る。 符号の説明、第5図aにおける符号の意味は以
下のとおりである。1……ひき続くブロツクテー
ブル(BLOCKT)の番地を置くフイールド、2
……ブロツクの種別を置くフイールド、3……文
番号フイールド、4……制御移動先テーブル
(FLINK)の指標を置くフイールド、5……制御
移動元テーブル(BLINK)の指標を置くフイー
ルド、6……制御支配テーブル(CLINK)の指
標を置くフイールド、7……文中間語の先頭番地
フイールド、8……一連の制御移動先ブロツクの
最後か否かを置くフイールド、9……制御移動先
ブロツクのブロツクテーブル番地を置くフイール
ド、10……一連の制御移動元ブロツクの最後か
否かを置くフイールド、11……制御移動元ブロ
ツクのブロツクテーブル番地を置くフイールド、
12……一連の制御支配ブロツクの最後か否かを
置くフイールド、13……制御支配ブロツクのブ
ロツクテーブル番地を置くフイールド、14……
制御支配ブロツクから出る制御パスを同定するフ
イールド、15……当該ブロツクの等価後方定義
ブロツクのブロツクテーブル(BLOCKT)の番
地を置くフイールド、第7図における符号の意味
は以下のとおりである。16……ルート探査中の
ブロツクテーブル(BLOCKT)先頭番地、17
……ルート探査中の制御移動元テーブル
(BLINK)の指標。
Figure 1a is an example of a program for selective loop operations written using conditional statements, Figure 1b is an example of the above program using a merge function, Figure 1C is how it is executed using a merge instruction, and Figure 2 is an example of a different selective operation on the left side of an assignment statement, and FIG. 3 is an example of a program including multiple conditional statements. FIG. 4 shows an example of a loop operation including the conditional statement taken up in the embodiment, FIG.
Figure b is its abbreviation, Figure 6 is a diagram of inter-block control movement and control dominance relationships in the embodiment, Figure 7 is a work table diagram for analyzing inter-block control dominance relationships, and Figure 8 is loop development in the embodiment. As a result, Fig. 9 is an update/process diagram of the control movement relationship accompanying loop expansion, Fig. 10 is a functional explanatory diagram of control vectors, and Fig. 1
Figure 1 shows an update diagram of inter-block control transfer relationships for use of vector instructions and the generated target program. Explanation of the symbols and the meanings of the symbols in FIG. 5a are as follows. 1... Field for storing the address of the following block table (BLOCKT), 2
...Field to place the block type, 3...Statement number field, 4...Field to put the index of the control transfer destination table (FLINK), 5...Field to put the index of the control transfer source table (BLINK), 6... ...Field for placing the index of the control control table (CLINK), 7...Field for the start address of the sentence intermediate word, 8...Field for setting whether or not it is the end of a series of control transfer destination blocks, 9...For the control transfer destination block. 10: field for storing the block table address; 10: field for determining whether it is the last of a series of control transfer source blocks; 11: field for storing the block table address of the control transfer source block;
12...Field for setting whether it is the last of a series of control/dominance blocks, 13...Field for setting the block table address of the control/dominance block, 14...
Field 15 for identifying the control path exiting from the control dominant block... Field for storing the address of the block table (BLOCKT) of the equivalent backward definition block of the block in question.The meanings of the symbols in FIG. 7 are as follows. 16...Start address of block table (BLOCKT) during route exploration, 17
...Indicator of control movement source table (BLINK) during route exploration.

Claims (1)

【特許請求の範囲】 1 ソースプログラム中のループ部分にある、ル
ープ繰返し変数に依存する添字を有する、ある配
列データの要素に関する演算を指定する演算部分
に対して、その演算部分を実行するか否かを制御
するための条件文であつて、そのループ繰返し変
数に依存する添字を有する、いずれかの配列デー
タの要素の値に関する条件式を指定する少なくと
も一つの条件文がそのループ部分にあるか否かの
第1の判別とそのような条件文があるときには、
その条件式の成立側と非成立側のいずれでその演
算部分が実行されるかの第2の判別を行ない、 そのような条件文があると判別されたときに
は、その第2の判別の結果を利用してベクトルプ
ロセツサ用命令列を生成するステツプであつて、
該ループ部分の繰返しごとに、この条件式が成立
するか否かを評価し、その演算部分で演算を受け
る配列データに属する要素をベクトル要素とする
ベクトルデータの内、その第2の判別の結果と上
記評価結果とに依存して定まる一部のベクトル要
素に対して上記演算を選択的に行うベクトルプロ
セツサ用命令列を生成するステツプからなるコン
パイル方法。 2 上記ベクトルプロセツサ用命令列は、該ルー
プ部分の繰返しごとに、上記条件式が成立するか
否かを評価して、この評価結果を表すベクトル要
素からなる制御ベクトルを生成し、生成された制
御ベクトルと上記第2の判別の結果とに依存し
て、上記ベクトルデータの各要素に対してその演
算を実行するか否かを制御するベクトルプロセツ
サ用命令列からなる請求項1記載のコンパイル方
法。 3 上記ベクトルプロセツサ用命令列は、 該ループ部分の繰返しごとに、上記条件式が成
立するか否かを評価し、この評価結果を表すベク
トル要素からなる制御ベクトルを生成し、する第
1のベクトルプロセツサ用命令と、 その生成された制御ベクトルと上記第2の判別
の結果とに依存して、上記ベクトルデータの各要
素に対して上記演算を実行するか否かを制御する
第2のベクトルプロセツサ用命令を含む請求項2
に記載のコンパイル方法。 4 上記第2のベクトルプロセツサ用命令は、 上記制御ベクトルで演算の実行が制御されるベ
クトルプロセツサ用演算命令もしくは上記制御ベ
クトルを反転した制御ベクトルで演算の実行が制
御されるベクトルプロセツサ用演算命令を含む請
求項3記載のコンパイル方法。 5 上記第2のベクトルプロセツサ用命令は、 上記演算部分が、上記条件文の成立側で実行さ
れるとき、上記制御ベクトルで演算の実行が制御
されるベクトルプロセツサ用演算命令であり、 上記演算部分が、上記条件文の非成立側で実行
されるとき、上記制御ベクトルを反転した制御ベ
クトルで演算の実行が制御されるベクトルプロセ
ツサ用演算命令である請求項3記載のコンパイル
方法。 6 ソースプログラム中のループ部分にある、ル
ープ繰返し変数に依存する添字を有する、ある配
列データの要素に関する演算を指定する演算部分
に対して、それぞれその演算部分を実行するか否
かを制御する多重の条件文であつて、それぞれい
ずれかの配列データの、そのループ繰返し変数に
依存する添字を有する要素の値に関連する条件式
を指定するものがそのループ部分にあるか否かの
第1の判別とそのような多重の条件文があるとき
には、その演算部分がそれぞれの条件式の成立側
と非成立側のいずれで実行されるかの第2の判別
を行ない、 そのような多重の条件文があるときには、この
第2の判別の結果を利用してベクトルプロセツサ
用命令列を生成するステツプであつて、該ループ
部分の繰返しごとに、それぞれの条件式が成立す
るか否かを評価し、その演算部分で指定された配
列データの要素をベクトル要素とするベクトルデ
ータの内、それぞれの条件式に関する上記評価結
果と上記第2の判別の結果に依存して定まる一部
のベクトル要素に対して上記演算を選択的に行う
ベクトルプロセツサ用命令列を生成するコンパイ
ル方法。 7 上記ベクトルプロセツサ用命令列は、該ルー
プ部分の繰返しごとに、それぞれの条件式が成立
するか否かを評価して、それぞれの条件式に対す
る評価結果を表すベクトル要素からなる制御ベク
トルをそれぞれの条件式に対応して生成し、これ
らの生成された制御ベクトルと上記第2の判別の
結果とに依存して、上記ベクトルデータの各要素
に対して上記演算を実行するか否かを制御するベ
クトルプロセツサ用命令列からなる請求項6記載
のコンパイル方法。 8 上記ベクトルプロセツサ用命令列は、 該ループ部分の繰返しごとに、それぞれの条件
式が成立するか否かを評価し、それぞれの条件式
に対する評価結果を表すベクトル要素からなる制
御ベクトルをそれぞれの条件式に対応して生成す
る、それぞれに条件式に対応して設けられた複数
のベクトルプロセツサ用命令と、 それぞれの条件式に対応して生成された制御ベ
クトルを合成して1つの制御ベクトルを生成する
少なくとも一つの第2のベクトルプロセツサ用命
令と、 この合成された制御ベクトルと上記第2の判別
の結果とに依存して、上記ベクトルデータの各要
素に対してその演算を実行するか否かを制御する
第3のベクトルプロセツサ用命令を含む請求項7
記載のコンパイル方法。 9 上記第3のベクトルプロセツサ用命令は、 上記合成された制御ベクトルで演算の実行が制
御されるベクトルプロセツサ用演算命令もしくは
この制御ベクトルを反転した制御ベクトルで演算
の実行が制御されるベクトルプロセツサ用演算命
令を含む請求項8記載のコンパイル方法。 10 上記第3のベクトルプロセツサ用命令は、 上記演算部分が、上記多重の条件文で定まる多
重の条件の成立側で実行されるとき、上記合成さ
れた制御ベクトルで演算の実行が制御されるベク
トルプロセツサ用演算命令であり、 上記演算部分が、上記多重の条件の非成立側で
実行されるとき、上記制御ベクトルを反転した制
御ベクトルで演算の実行が制御されるベクトルプ
ロセツサ用演算命令である請求項8記載のコンパ
イル方法。 11 ソースプログラム中のループ部分にある、
ループ繰返し変数に依存する添字を有する、ある
配列データの要素に関する演算を指定する演算部
分に対して、その演算部分を実行するか否かを制
御する少なくとも一つの条件文がそのループ部分
にあるか否かを検出し、 そのような条件文があるときには、その条件文
が指定する条件式の成立側と非成立側のいずれで
その演算部分が実行されるかを判別し、 さらにそのような条件文があるときには、その
条件式が、ある配列データの、そのループ繰返し
変数に依存する添字の要素を用いた条件式を指定
する第1種の条件文かあるいはループ繰返しに依
存しない条件式を指定する第2種の条件文かを判
定し、 そのような第1種の条件文と第2種の条件文の
両方があるときには、その第2種の条件文が指定
する条件式が成立するか否かを判定した上で、そ
の判定結果によりそのループ部分からその第2の
条件文を除いた部分を実行するか否かを切り替え
る命令を生成し、 その第1の条件文が指定する条件式に関する上
記判別結果を利用して、そのループ部分からその
第2の条件文を除いた部分に対応するベクトルプ
ロセツサ用命令列を生成するステツプであつて、
該ループ部分の繰返しごとに、上記第1の条件文
が指定する条件式が成立するか否かを評価し、そ
の演算部分で演算を受ける配列データの要素をベ
クトル要素とするベクトルデータの内、その評価
結果と第1の条件文が指定する条件式に関する上
記判別結果に依存して定まる一部のベクトル要素
に対して上記演算を選択的に行うベクトルプロセ
ツサ用命令列を生成するステツプからなるコンパ
イル方法。
[Scope of Claims] 1. Whether or not to execute an operation part in a loop part of a source program that specifies an operation on an element of a certain array data that has a subscript that depends on a loop repetition variable. Is there in the loop part at least one conditional statement that specifies a conditional expression regarding the value of any element of array data that has a subscript that depends on the loop repetition variable? When there is a first determination of whether or not and such a conditional statement,
A second determination is made to determine whether the calculation part is executed on the satisfied or unfulfilled side of the conditional expression, and when it is determined that such a conditional statement exists, the result of the second determination is A step for generating an instruction sequence for a vector processor using
Each time the loop part is repeated, it is evaluated whether this conditional expression holds true or not, and the result of the second determination is made among the vector data whose vector elements are elements belonging to the array data subjected to the operation in the calculation part. A compiling method comprising the steps of generating an instruction string for a vector processor that selectively performs the above operation on some vector elements determined depending on the above evaluation results. 2 The above instruction sequence for the vector processor evaluates whether the above conditional expression is satisfied or not every time the loop portion is repeated, and generates a control vector consisting of vector elements representing the evaluation result. 2. The compilation according to claim 1, comprising a sequence of instructions for a vector processor that controls whether or not to execute the operation on each element of the vector data depending on the control vector and the result of the second determination. Method. 3 The above instruction sequence for the vector processor evaluates whether or not the above conditional expression is satisfied each time the loop portion is repeated, and generates a control vector consisting of vector elements representing the evaluation result. A second controller that controls whether or not to perform the above operation on each element of the vector data depending on the vector processor instruction, the generated control vector, and the result of the second determination. Claim 2 containing instructions for a vector processor
Compilation method described in. 4 The second vector processor instruction is an operation instruction for a vector processor whose execution of operations is controlled by the control vector, or an operation instruction for a vector processor whose execution of operations is controlled by a control vector that is an inversion of the control vector. 4. The compiling method according to claim 3, including an arithmetic instruction. 5 The second vector processor instruction is a vector processor operation instruction in which the execution of the operation is controlled by the control vector when the operation part is executed on the side where the conditional statement is satisfied; 4. The compiling method according to claim 3, wherein the computation part is an arithmetic instruction for a vector processor in which execution of the computation is controlled by a control vector obtained by inverting the control vector when the computation part is executed on the non-fulfilling side of the conditional statement. 6 A multiplex function that controls whether or not to execute each calculation part in a loop part of a source program that specifies an operation on an element of a certain array data that has a subscript that depends on the loop repetition variable. The first conditional statement that specifies a conditional expression related to the value of an element of any array data whose index depends on the loop repetition variable is in the loop part. When there are such multiple conditional statements, a second determination is made to determine whether the calculation part is executed on the satisfied side or non-true side of each conditional expression, and such multiple conditional statements If there is, the step is to generate an instruction sequence for the vector processor using the result of this second determination, and it is evaluated whether each conditional expression is satisfied each time the loop part is repeated. , among the vector data whose vector elements are the elements of the array data specified in the calculation part, for some vector elements determined depending on the above evaluation results for each conditional expression and the above second determination results. A compilation method for generating an instruction sequence for a vector processor that selectively performs the above operations. 7 The above instruction sequence for the vector processor evaluates whether each conditional expression holds true each time the loop portion is repeated, and generates a control vector consisting of vector elements representing the evaluation results for each conditional expression. is generated in accordance with the conditional expression of 7. The compiling method according to claim 6, comprising a sequence of instructions for a vector processor. 8 The above instruction sequence for the vector processor evaluates whether or not each conditional expression holds true each time the loop portion is repeated, and generates a control vector consisting of vector elements representing the evaluation results for each conditional expression. A single control vector is created by combining a plurality of vector processor instructions, each generated in response to a conditional expression, and a control vector generated in response to each conditional expression. at least one second vector processor instruction that generates a vector processor, and executes the operation on each element of the vector data depending on the synthesized control vector and the result of the second determination. Claim 7 further comprising a third vector processor instruction for controlling whether or not.
Compile method as described. 9 The third vector processor instruction is a vector processor operation instruction whose execution is controlled by the combined control vector, or a vector whose execution is controlled by a control vector obtained by inverting this control vector. 9. The compiling method according to claim 8, including processor arithmetic instructions. 10 The third vector processor instruction is such that when the calculation part is executed on the side where multiple conditions determined by the multiple condition statements are satisfied, the execution of the calculation is controlled by the combined control vector. An arithmetic instruction for a vector processor, in which when the arithmetic part is executed on the side where the multiple conditions are not met, the execution of the arithmetic operation is controlled by a control vector that is an inversion of the control vector. The compiling method according to claim 8. 11 In the loop part of the source program,
For an operation part that specifies an operation on elements of a certain array data whose subscripts depend on the loop repetition variable, does the loop part have at least one conditional statement that controls whether the operation part is executed? If there is such a conditional statement, it determines whether the calculation part is executed on the satisfied side or the unfulfilled side of the conditional expression specified by the conditional statement, and then If there is a statement, the conditional expression specifies either a conditional expression of the first type that uses an element of a subscript that depends on the loop repetition variable of some array data, or a conditional expression that does not depend on the loop repetition. If there are both such a first-type conditional statement and a second-type conditional statement, determine whether the conditional expression specified by the second-type conditional statement holds true. After determining whether or not the second conditional statement is true, it generates an instruction to switch whether or not to execute the part of the loop excluding the second conditional statement based on the determination result, and executes the conditional expression specified by the first conditional statement. a step of generating a vector processor instruction sequence corresponding to a portion of the loop excluding the second conditional statement by using the above-mentioned determination result regarding
Each time the loop part is repeated, it is evaluated whether the conditional expression specified by the first conditional statement is satisfied, and the calculation part evaluates whether or not the conditional expression specified by the above-mentioned first conditional statement holds true, and the calculation part generates vector data whose vector elements are the elements of the array data to be operated on. It consists of a step of generating an instruction sequence for a vector processor that selectively performs the above operation on some vector elements determined depending on the evaluation result and the above judgment result regarding the conditional expression specified by the first conditional statement. How to compile.
JP13009581A 1981-08-21 1981-08-21 Compiling system for conditional statement for vector processor Granted JPS5833775A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP13009581A JPS5833775A (en) 1981-08-21 1981-08-21 Compiling system for conditional statement for vector processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP13009581A JPS5833775A (en) 1981-08-21 1981-08-21 Compiling system for conditional statement for vector processor

Publications (2)

Publication Number Publication Date
JPS5833775A JPS5833775A (en) 1983-02-28
JPH0522272B2 true JPH0522272B2 (en) 1993-03-29

Family

ID=15025833

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13009581A Granted JPS5833775A (en) 1981-08-21 1981-08-21 Compiling system for conditional statement for vector processor

Country Status (1)

Country Link
JP (1) JPS5833775A (en)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58149544A (en) * 1982-02-27 1983-09-05 Fujitsu Ltd Processing system of compiler
JPH0640309B2 (en) * 1983-11-30 1994-05-25 富士通株式会社 Loop rearrangement processing method in compiler
JPS60136873A (en) * 1983-12-26 1985-07-20 Hitachi Ltd Vector processor
JP2708405B2 (en) * 1986-03-03 1998-02-04 株式会社日立製作所 Loop unrolling method in compiler

Also Published As

Publication number Publication date
JPS5833775A (en) 1983-02-28

Similar Documents

Publication Publication Date Title
EP0533813B1 (en) Method for representing scalar data dependencies for an optimizing compiler
US6662354B1 (en) Determining destinations of a dynamic branch
US6381739B1 (en) Method and apparatus for hierarchical restructuring of computer code
US5355494A (en) Compiler for performing incremental live variable analysis for data-parallel programs
US5889999A (en) Method and apparatus for sequencing computer instruction execution in a data processing system
JP2755154B2 (en) Program conversion processing device and program conversion processing method
JPH0695311B2 (en) Code optimization method
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
EP0702293B1 (en) Compiler with improved live range interference investigation
JPH06103463B2 (en) Code generation method
US6117185A (en) Skip list data storage during compilation
JP3424520B2 (en) Program conversion device and debug device
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
CN114692600A (en) Method and system for formal language processing using subroutine graphs
JP3539613B2 (en) Array summary analysis method for loops containing loop jump statements
US4956791A (en) Merging pattern-matching networks including retes
JP2001166946A (en) Method and device for compiling source code by flattening hierarchy
JPH1069389A (en) Device that make good use of branch predictive cache without tag by rearrangement of branch
US20010044930A1 (en) Loop optimization method and a compiler
JPH0522272B2 (en)
CN112527304B (en) Self-adaptive node fusion compiling optimization method based on heterogeneous platform
JP2002527816A (en) Program optimization apparatus and method
CN114995832B (en) Dynamic and static combined binary program translation method
Barnard et al. Hierarchic syntax error repair for LR grammars