JPH046020B2 - - Google Patents

Info

Publication number
JPH046020B2
JPH046020B2 JP3119282A JP3119282A JPH046020B2 JP H046020 B2 JPH046020 B2 JP H046020B2 JP 3119282 A JP3119282 A JP 3119282A JP 3119282 A JP3119282 A JP 3119282A JP H046020 B2 JPH046020 B2 JP H046020B2
Authority
JP
Japan
Prior art keywords
register
intermediate code
allocation
variable
array element
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
Application number
JP3119282A
Other languages
English (en)
Other versions
JPS58149543A (ja
Inventor
Toshiaki Hirota
Yoshuki Tanakura
Toshihiro Hirabayashi
Masaaki Takiuchi
Masaki Aoki
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP3119282A priority Critical patent/JPS58149543A/ja
Publication of JPS58149543A publication Critical patent/JPS58149543A/ja
Publication of JPH046020B2 publication Critical patent/JPH046020B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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

Landscapes

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

Description

【発明の詳細な説明】 (A) 発明の技術分野 本発明は、データ・レジスタ割当て処理装置、
特に例えば複数のパイプライン演算部をそなえた
ベクトル処理プロセツサに対して与えられたソー
ス・プログラムから目的プログラムを生成して供
給するコンパイラにおいて、逐次参照配列要素や
逐次参照変数のうちグローバル・レジスタ割付け
の行われなかつた変数を抽出し、或る回において
定義された値を次回の回転時における参照時点ま
でレジスタによる伝播を可能とするようレジスタ
割当てを行わせ、最適化されたコンパイル処理を
行うようにしたデータ・レジスタ割当て処理装置
に関するものである。
(B) 技術の背景と問題点 例えば、第1図Aに示す如く、ベクトルAに属
するエレメントa1,a2,…とベクトルBに属する
エレメントb1,b2,…との各エレメント相互を加
算して、エレメントC1,C2,…をもつベクトル
Cを生成するような、ベクトル命令を実行するベ
クトル処理プロセツサが存在している。第1図A
図示の場合、第番目のエレメント相互の加算を
行なうか否かをマスク・エレメントm1,m2,…
にて指示するようにされており、第1図Bに一般
化して示す如き処理が行なわれる。
上記の如き処理を行なうベクトル処理プロセツ
サを有するデータ処理システムは、一実施例とし
て第2図図示の如きシステム構成をもつている。
図中の符号1は主記憶装置、2はメモリ制御装
置、3はベクトル処理プロセツサ、4はチヤネ
ル・プロセツサ、5は大記憶装置、6はスカラ処
理回路部、7はベクトル処理回路部、8−0,8
−1,…は夫々浮動小数点データ・レジスタ、9
−0,9−1,…は夫々複数個のデータ(エレメ
ント・データ)を格納し得るベクトル・レジス
タ、10−0,10−1,…は夫々複数個のマス
ク・データ(マスク・エレメント・データ)を格
納し得るマスク・レジスタ、11はベクトル長レ
ジスタであつて各ベクトル・レジスタに各納され
るエレメントの個数情報がセツトされるもの、1
2−0,12−1は夫々メモリ・アクセス・パイ
プライン、13は加減算パイプライン、14は乗
算処理パイプライン、15は除算処理パイプライ
ン、16はマスク処理パイプラインを表わしてい
る。
上記の如きベクトル処理プロセツサが処理を実
行するに当つて、当該プロセツサが実行するに適
した形に、与えられたソース・プログラムをコン
パイルし目的プログラムを生成することが行なわ
れる。当該コンパイルを行なうコンパイラの構成
は第3図を参照して後述されるが、当該コンパイ
ルによるコンパイル処理に当つて、ベクトル処理
プロセツサが処理を実行する際に非所望な形でデ
ータ転送が生じないように、使用するデータ・レ
ジスタの割当てが行われる。
従来から、一般に変数に関しては使用するレジ
スタを1対1に割りつけるグローバル・レジスタ
方式が採用されているが、逐次参照配列要素や変
数のうちのあるものについては、上記グローバ
ル・レジスタの如き処理が行われてなく、ある回
において定義された値を次回の回転時に参照する
に当つてベクトル処理プロセツサが処理の際にス
トア処理→ロード処理→ストア処理→…の如くス
トア処理とロード処理とを繰返すこととなつてい
た。
(C) 発明の目的と構成 本発明は、上記の点を解決することを目的とし
ており、()上記逐次参照配列要素などの存在
を抽出し、()定義された値を次回の回転時に
おける参照時までレジスタによつて伝播するよう
に、コンパイルせしめることを特徴としている。
以下図面を参照しつつ説明する。
(D) 発明の実施例 第3図は本発明に用いるコンパイラの一実施例
構成、第4図は本発明においてソース・プログラ
ムを中間コードに移してゆく態様を説明する説明
図、第5図はソース・プログラムをベクトル化し
てゆく態様を説明する説明図、第6図ないし第8
図は本発明による処理の概念を説明する説明図、
第9図および第10図は夫々本発明の一実施例構
成、第11図は逐次参照変数に対する処理例を示
している。
第3図において、17は大記憶装置に格納され
ているソース・プログラム、18はコンパイラ、
19はコンパイルされて大記憶装置上に格納され
る目的プログラム、20はソース解釈部、21は
記憶域割付け部、22はベクトル化部、23は中
間コード最適化部、24はレジスタ使用決定部、
25は目的プログラム出力部を表わしている。
コンパイラ18は、大記憶装置からソース・プ
ログラム17を取込んで、所望の目的プログラム
19を生成する。このとき図示の各部は次のよう
な処理を行う。
即ち、ソース解釈部20はソース・プログラム
17を大記憶装置から取込み、文解釈を行つて中
間コード(テキスト)に展開する。例えばソー
ス・プログラムが第4図図示左側の如き場合に図
示右側に示す如き中間コードに展開する。記憶域
割付け部21はプログラム内に出現する各種デー
タに対応して記憶域内番地を割当てる。ベクトル
化部22は、プログラム中のループ構造を検出
し、並列実行可能部分を認識し、第5図図示の如
く中間コード変更を行う。中間コード最適化部2
3は、中間コードのレベルで、第2図図示の如き
ベクトル処理プロセツサを有効に利用するための
最適化を施す。レジスタ使用決定部24は、中間
コードに現われたデータに対して、ベクトル処理
プロセツサ上の資源(レジスタ)を割当てる。そ
して目的プログラム出力部25は機械命令語を大
記憶装置へ出力しかつ命令語レベルでの最適化を
行う。
ベクトル処理プロセツサを稼働させるためのコ
ンパイラは第3図図示の如き構成をもつており、
上記レジスタ使用決定部24が、ベクトル処理プ
ロセツサによる処理が行われる際に使用される当
該プロセツサ上のデータ・レジスタの割当てを行
う。しかし、次の如き問題が生じる。
今、例えば第6図A図示の如きソース・プログ
ラムが与えられると、一般には第7図A図示の如
く目的プログラムが生成される。即ち「()デ
ータA(I)をレジスタ「0」にロードし、()
レジスタ「0」の内容をデータBとしてストア
し、()レジスタ「0」の内容にデータCを加
算し、()レジスタ「0」の内容をデータA(I
+1)としてストアする」という処理を繰返すよ
うに目的プログラムが生成される。しかし、上記
において例えばIの値がkのとき ST 0,A(I+1) においてストアされるレジスタ「0」の内容は、
次回の回転即ちI=(k+1)のとき L 0,A(I) においてレジスタ「0」にロードされる内容と同
じものである。したがつて、I=kのときに定義
された配列要素Aの値をI=(k+1)のときの
参照のために、レジスタの内容を保持することに
よつて伝播することが望まれる。
このために、本発明の一実施例においては、第
6図A図示の如きソース・プログラムが与えられ
たとき、第6図Aと同様な表現で表わして第6図
B図示の如き形に変形して、レジスタ使用決定部
24によつて使用レジスタを決定させるようにす
る。このようにすると、第6図B図示の処理は、
目的プログラム上で第7図B図示の如くなり、最
初にデータA(I)をループ外で例えばレジスタ
「2」に一度ロードするだけで足りるようになる。
第8図は、逐次参照変数Vがグローバル・レジ
スタにセツトされなかつた場合についての処理を
表わしている。即ち、第8図Aにおいては、例え
ばI=kのときの変数Vの値がI=(k+1)の
とき C=V*B なる処理を行う際に参照される形となつている。
このような場合、第8図Bに概念的に示す如
く、変数Vを或るレジスタγにループ外の処理と
して一旦ロードしておくようにし、当該レジスタ
γの内容を用いて C=γ*B なる形で参照し、次いで γ=V+D なる形で変数Vの値をレジスタにセツトするよう
にする。このようにすることによつて、I=kの
ときに定義されたレジスタγの内容(Vの値)
は、I=(k+1)のときにレジスタによる伝播
によつて伝播されて、参照される形となる。即
ち、各回転が行われる都度、ストア→ロード→ス
トア→…が行われることがなくなる。
第9図は、第6図および第7図を参照して説明
した処理を実行する一実施例を示している。な
お、図示の符号26,27の処理は、第3図図示
の中間コード最適化部23において行われるもの
と考えてよい。図中26は配列要素検出部、27
は配列要素置換部、28はレジスタ割付け部であ
つて第3図図示のレジスタ使用決定部24におい
て行われるものを表わしている。
図示検出部26は、第6図Aに示す如き配列要
素A(I)やA(I+1)の存在を、配列上の条件
と添字に関する条件とアドレスに関する条件とに
よつて検出する。即ち、 例えば配列上の条件としては、()ループ内
で定義かつ参照されることや()ループの実行
時に制御が必ず移行するブロツクにあることなど
を調べる。またアドレスに関する条件は、 (定義される配列要素のアドレス) −(参照される配列要素のアドレス) =(添字のループ内増分値) などによつて検出する。配列要素置換部27は、
()第6図B図示の如くループの準備ブロツク
にて内部変数GNの形で初期値A()をセツト
し、()第6図A図示の B(I)=A(I) の如き配列要素Aの参照を第6図B図示の如く B(I)=GN の形で上記内部変数GNの参照に置換し、()
第6図A図示の A(I+1)=B(I)+C(I) の如き定義を第6図B図示の如く GN=B(I)+C(I) A(I+1)=GN の形で内部変数GNの定義を介在させた形式に変
更する。そして言うまでもなく、第9図図示のレ
ジスタ割付け部28は、入力されてきた中間コー
ド(中間コードの形で入力される)にもとづいて
順次レジスタを割当ててゆく。この結果が第7図
B図示の如きものとなる。
第10図は、第8図を参照して説明した処理を
実行する一実施例を示している。なお、図示の処
理は、グローバル・レジスタに対して割付けられ
なかつた変数について行われるものであることか
ら、第3図図示のレジスタ使用決定部24におい
てグローバル・レジスタの使用が決定した後に行
われる。図中、29は逐次参照変数検出部であつ
てグローバル・レジスタに割つけられなかつた変
数を検出して処理対象の変数を抽出する。30は
レジスタ伝播範囲検出部であつて、レジスタ伝播
がどの範囲で行われるかを決定する。例えば1つ
のループ内で複数回の定義が行われる場合には、
最後の定義点が伝播開始点となる。また1つのル
ープ内で複数回の参照が行われる場合には、最初
の参照点が伝播終了点となる。
更に31はレジスタ伝播処理部である。該処理
部31は次の如き処理を行う。即ち、 (1) 最初に、伝播媒体となるレジスタ(Rtとす
る)を抽出する。即ち、レジスタRtとしては
当該変数が定義される際に使用されるレジスタ
(Rdとする)であるか、変数参照点までにレジ
スタRdの内容が転送される他のレジスタ(Rf
とする)であるか、伝播範囲内で未使用のレジ
スタ(Ruとする)であるかのいずれかであり
実際にはグローバル・レジスタの割付けが終了
した後にレジスタRtが決定される。
(2) もしもレジスタRtがレジスタRdでなかつた
場合には、レジスタRdの内容をストアする処
理の際にレジスタRdの内容をレジスタRtに転
送する処理を附加させる。
(3) レジスタRtが決まれば、変数Vの参照に対
応して、レジスタRtの内容を参照するように
レジスタRtの割付けを行う。
(4) ループの準備ブロツクにおいて、変数Vの値
をレジスタRtにロードする命令を生成する。
(5) もしも、当該ループの実行が終了した後に、
上記変数Vがループ外において参照される場合
には、ループの外において上記レジスタRtの
内容をストアする命令を生成する。
第11図は、第11図A図示の如き、ソース・
プログラムが与えられた際に、レジスタRt=Rd
のとき(第11図B)、レジスタRt=Rfのとき
(第11図C、レジスタRt=Rd=Rfのとき(第
11図D)の夫々において、得られた目的プログ
ラムが夫々図示右側のものに変更された形となつ
ていることを示している。いずれの場合において
も、ループ外において、ロード(L)を実行して
おり、また必要に応じてループ外においてストア
(ST)を行つている形となつている。
(E) 発明の効果 以上説明した如く、本発明によれば、ループ回
転の間に、逐次参照データがレジスタによる伝播
によつて伝播される形となり、プロセツサによる
処理が行われる際に、非所望な形でのロード/ス
トア処理が大幅に減少される。
【図面の簡単な説明】
第1図はベクトル命令に対応した処理を概念的
に説明する説明図、第2図は本発明にいうベクト
ル処理プロセツサを有する処理システムの一実施
例、第3図は本発明に用いるコンパイラの一実施
例構成、第4図はソース・プログラムを中間コー
ドに移してゆく態様を説明する説明図、第5図は
ソース・プログラムをベクトル化してゆく態様を
説明する説明図、第6図ないし第8図は本発明に
よる処理の概念を説明する説明図、第9図および
第10図は夫々本発明の一実施例構成、第11図
は逐次参照変数に対する処理例を示している。 図中、1は主記憶装置、2はメモリ制御装置、
3はベクトル処理プロセツサ、4はチヤネル・プ
ロセツサ、5は大記憶装置、9はベクトル・レジ
スタ、10はマスク・レジスタ、11ないし16
は夫々パイプライン演算部、17はソース・プロ
グラム、18はコンパイラ、19は目的プログラ
ム、20はソース解釈部、21は記憶域割付け
部、22はベクトル化部、23は中間コード最適
化部、24はレジスタ使用決定部、25は目的プ
ログラム出力部を表わしている。

Claims (1)

  1. 【特許請求の範囲】 1 与えられたソース・プログラムから目的プロ
    グラムを生成して供給するコンパイル装置におい
    て、 上記ソース・プログラムの文解釈を行つて中間
    コードに展開するソース解釈手段、 プログラム中に出現する各種データの記憶域内
    番地を割り当てる記憶域割付け手段、 中間コードのレベルでプロセツサを有効に利用
    するための最適化を施す中間コード最適化手段、 中間コードに現われたデータに実際の資源を割
    り当てるレジスタ使用決定手段、 および目的プログラム出力手段をそなえてな
    り、 更に、上記中間コード最適化手段は、少なくと
    も、 逐次参照配列要素の存在を配列上の条件と添字
    に関する条件とアドレスに関する条件とによつて
    検出する逐次参照配列要素検出手段と、 当該逐次参照配列要素を内部変数を定義しかつ
    当該定義された内部変数を利用する形で置換する
    配列要素置換手段と、 をそなえると共に、 上記レジスタ使用決定手段は、与えられた中間
    コードにもとづいてレジスタを割当ててゆき上記
    逐次参照配列要素が定義されるレジスタの内容を
    少なくとも次回の回転時に参照されるまで当該レ
    ジスタ上に保持するレジスタ割付け手段をそな
    え、 定義時の上記逐次参照配列要素の値を次回の回
    転時に上記レジスタを介して伝播させるようにし
    た ことを特徴とするデータ・レジスタ割当て処理装
    置。 2 与えられたソース・プログラムから目的プロ
    グラムを生成して供給するコンパイル装置におい
    て、 上記ソース・プログラムの文解釈を行つて中間
    コードに展開するソース解釈手段、 プログラム中に出現する各種データの記憶域内
    番地を割り当てる記憶域割付け手段、 中間コードのレベルでプロセツサを有効に利用
    する上での最適化を施す中間コード最適化手段、 中間コードに現われたデータに実際の資源を割
    当てるレジスタ使用決定手段、 および目的プログラム出力手段をそなえてな
    り、 更に、上記レジスタ使用決定手段は、与えられ
    た中間コードにもとづいてレジスタを逐次割当て
    てゆくレジスタ割付け手段を有すると共に、 少なくとも、 グローバル・レジスタ割付けのなされていない
    逐次参照変数を検出する逐次参照変数検出手段
    と、 1つのループ内でのレジスタ使用に当たつて最
    後の定義点から次回の回転における最初の参照点
    までのレジスタ伝播が行われる範囲を検出するレ
    ジスタ伝播範囲検出手段と、 注目されるレジスタが、変数が定義される際に
    使用される第1種のレジスタと、変数参照点まで
    に上記第1種のレジスタの内容が転送される第2
    種のレジスタと、伝播範囲内で未使用の第3種の
    レジスタとのいずれであるかを調べた上で上記逐
    次参照変数を伝播媒体となるレジスタに割付ける
    と共に割付けに整合せしめる命令を生成するレジ
    スタ伝播処理手段と をそなえ、 定義時の上記逐次参照変数の値を次回の回転時
    に上記レジスタを介して伝播させるようにした ことを特徴とするデータ・レジスタ割当て処理装
    置。
JP3119282A 1982-02-27 1982-02-27 デ−タ・レジスタ割当て処理方式 Granted JPS58149543A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3119282A JPS58149543A (ja) 1982-02-27 1982-02-27 デ−タ・レジスタ割当て処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3119282A JPS58149543A (ja) 1982-02-27 1982-02-27 デ−タ・レジスタ割当て処理方式

Publications (2)

Publication Number Publication Date
JPS58149543A JPS58149543A (ja) 1983-09-05
JPH046020B2 true JPH046020B2 (ja) 1992-02-04

Family

ID=12324558

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3119282A Granted JPS58149543A (ja) 1982-02-27 1982-02-27 デ−タ・レジスタ割当て処理方式

Country Status (1)

Country Link
JP (1) JPS58149543A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01159734A (ja) * 1987-12-16 1989-06-22 Fujitsu Ltd 回帰演算におけるデータ形式変換処理方式

Also Published As

Publication number Publication date
JPS58149543A (ja) 1983-09-05

Similar Documents

Publication Publication Date Title
US6202204B1 (en) Comprehensive redundant load elimination for architectures supporting control and data speculation
JP6159825B2 (ja) ハードウェアポインタを使用したsimdコア内での分岐ブランチに対するソリューション
US4965724A (en) Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program
US5247696A (en) Method for compiling loops having recursive equations by detecting and correcting recurring data points before storing the result to memory
JP2016504699A (ja) 並列パイプラインにおいてブランチを分岐するためのハードウェアおよびソフトウェアソリューション
Ebcioglu et al. Optimizations and oracle parallelism with dynamic translation
Wichmann et al. ALGOL 60 compilation and assessment
US20030079210A1 (en) Integrated register allocator in a compiler
KR101293700B1 (ko) 코어스 그레인드 재구성 구조를 위한 코드 생성 장치 및 그 코드 생성 방법
Liu et al. Techniques of program execution with a writable control memory
JPH046020B2 (ja)
CN114127684B (zh) 用于具有专用寄存器的risc处理器的编译器
JPS59165147A (ja) コンパイラにおける条件文のベクトル命令化方式
JPS6319906B2 (ja)
JPH06103462B2 (ja) ベクトル・レングス制御範囲分割処理方式
JP2556148B2 (ja) ベクトルレジスタ割付け方式
JPS6321946B2 (ja)
Lindahl et al. Unboxed compilation of floating point arithmetic in a dynamically typed language environment
JPS62204374A (ja) 2倍演算最適化処理方式
JPS6319908B2 (ja)
JPH053030B2 (ja)
JPS6027947A (ja) コンパイラにおけるベクトル化不可部分を含むル−プのベクトル化方式
JPS6116362A (ja) ベクトルプロセツサ制御処理方式
JPH0142019B2 (ja)
JPS6319905B2 (ja)