JPS62144247A - コンパイル方法 - Google Patents

コンパイル方法

Info

Publication number
JPS62144247A
JPS62144247A JP61266812A JP26681286A JPS62144247A JP S62144247 A JPS62144247 A JP S62144247A JP 61266812 A JP61266812 A JP 61266812A JP 26681286 A JP26681286 A JP 26681286A JP S62144247 A JPS62144247 A JP S62144247A
Authority
JP
Japan
Prior art keywords
registers
register
clause
graph
nodes
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.)
Granted
Application number
JP61266812A
Other languages
English (en)
Other versions
JPH0776927B2 (ja
Inventor
アシユフアク・アブダルレマン・ミユンシ
カール・マツクス・シンプフ
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPS62144247A publication Critical patent/JPS62144247A/ja
Publication of JPH0776927B2 publication Critical patent/JPH0776927B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space

Landscapes

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

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 A、産業上の利用分野 本発明は、スカシ・プロセッサまたはベクトル・プロセ
ッサにおいて、原始コード(ソース・コード)をマシン
の実行可能なコードにコンパイルする際に、レジスタの
割り当ての最適化を行う方法に関する。
B、従来技術およびその問題点 コンパイラの作成に関する標準的な著作の中で、Aha
等による“Pr1nciples of Compil
er Design”、Addision−Wesle
y Publishing Co、、1977、および
Waite等による“Compiler Con5tr
uction”。
Springer−Verlag、 1984は、PA
SCALやFORTRAN等のコンピュータの原始言語
を、ターゲット・マシンによって実行可能なコードに変
換する場合、一連の変形(トランスフォーメーション)
を経ることを指摘している。まず、原始記号のストリン
グは字句的に解析されて、翻訳用の原始的ユニツ1〜ま
たはワードが確定され、続いて構文的に解析されて、ワ
ード間の文法的関係を確定する。
出力は、「解析木」の形で表現される。解析木は。
原始コードの中間言語表現に変形される。はとんどのコ
ンパイラは、解析木を明示的に生成しないで、構文的解
析が生じる際に、中間コードを形成する。続いて、中間
コードに対して最適化が施され、その後、ターゲット・
マシンの実行可能なオブジェクト・コードが生成される
コンパイラが実行しなければならないタスクの中には、
原始コード命令のストリームによって指定される計算を
効率よく完了できるようにするための、計算資源の割り
当て・指定がある。使用可能な「資源」の中には、AL
U (演算論理機構)のような計算機構、入力/出力、
レジスタを含むメモリ、および、オペレーティング・シ
ステム要素等が含まれる。コンパイラの最適化部の目的
は、(a)コートのサイズを縮める(b)可能な場合、
実行速度を上げる(c)効率のよい資源割当てにより、
コストを最小限にすることにある。資源使用または消費
パターンのスケジュールは、コンパイルされつつあるコ
ードに組み込まれる。
よく知られているように、命令のストリームをグラフ構
造に写像(マツプ)して、グラフ理論の特性を利用する
ことができる。コード列は、局所的最適化に関しては基
本ブロックのグラフィカルな特性により、そして大域的
最適化に関してはブロックのフロー・グラフにより、そ
れぞれ解析可能である。
基本ブロックとは、連続するステートメントの列である
。この列は始めからしか入ることができず、一度入ると
停止したり分岐したりすることなく(ただし、列の終わ
りは除く)順番に実行される。
フロー・グラフは、基本ブロックの間の制御の流れを記
述する。フロー・グラフは、例えば、繰返し計算または
再帰的計算に必要な、基本ブロックの間のルーピング1
、ブランチングおよびネスティングの振舞を示す。
データ依存性に関する閉路のない有向グラフ(DAG)
とは、基本ブロックを解析するデータ構造である。例え
ば、a = s + cは、b+cにより、それぞれの
辺を通してそれぞれが共通節Cに接続される開始節とし
て表現される。フロー・グラフの節(基本ブロック)は
それぞれDAGによって表現され得るけれども、それは
フロー・グラフではない。
「生変数解析」は、名前が後で計算に使われるかもしれ
ない値を持つか否かを確定する一群の技術を指す。名前
が基本ブロック内で再定義される前に使われるか、また
は、該ブロックから「生きて」出てきて該ブロック内で
「再定義」されないならば、その名前はブロックに[生
きて」入ると考えられる。その結果、レジスタである値
が計算され、基本ブロック内で用いられると推定された
後に、該値がブロックの終わりで「死んで」いるならば
、該値を記憶する必要はない。また、レジスタがすべて
一杯であり、かつ別のレジスタが必要であるならば、「
死んでいる」値を現在含むレジスタに対して、指定がな
され得る。
概念的に言って、第1のコンパイラ・トランスフォーメ
ーションは、原始コードのストリングのフロー・グラフ
への写像からなる。フロー・グラフの節のそれぞれは基
本ブロックであり、かつフロー・グラフの制御とデータ
・パスの関係は、フロー・グラフの有向辺によって定義
される。資源の割当ておよび指定における最適化は、ま
ず局所的レベル、つまり基本ブロック・レベルで考慮し
、次に、大域的レベル、つまりフロー・グラフ・レベル
で考慮することができる。
局所的最適化において、各基本ブロックは別々のユニッ
トとして扱われ、その内容と無関係に最適化される。デ
ータ依存グラフは、基本ブロックのために築かれ、変形
され、そして、最終マシン・コードを生成するのに用い
られる。その後、該グラフは放棄され、次の基本ブロッ
クが考慮される。
「データ依存グラフ」とは、基本ブロック内でのグラフ
理論的属性の表現である。基本ブロックは閉路を含めな
いので、データ依存グラフの基本ブロックは、すべてD
AGによって表現され得る。
ちなみに、DAGは必ずしも木ではない。実例として、
基本ブロックが2つの計算ステートメントx=u+v、
y=u+wから構成されるならば、DAGは、閉路を含
まないけれども、木にはならない。最後に、大域的最適
化は、フロー・グラフの大域的再配置を行うとともに、
基本ブロックの境界での文脈情報を提供する。
コンピュータはメモリを含み、その最高速の形態が、最
も高価である。有限個の物理的レジスタが、計算および
制限のために直接的に用いるオペランドを記憶する。レ
ジスタ・ツー・スターの操作をするコンピュータの命令
は、最高速で実行される。レジスタが使用不能ならば、
中間結果を、プログラムとメモリの大半が配Inされて
いるメイン・メモリにロードするか、または、レジスタ
が使用可能になると、前記メイン・メモリからレジスタ
にロードするかしなければならない。メモリからレジス
タへのロードと記憶は、実質的に長い時間を要する。し
たがって、フロー・グラフまたは基本ブロックの一方を
評価するとき、1つの目的は、必要とされる数の、計算
名前または変数をレジスタに留めるか、もしくはレジス
タを使用可能にすることにある。
レジスタの割当てには、レジスタに常駐すべきソフトウ
ェア・ストリームの中の名前(、つまり、必要とされる
レジスタの数)の識別が含まれる。
一方、指定とは、基礎的なスキーム、ルールまたはモデ
ルに従って5節にレジスタを指定するステップのことで
ある。従来の割当て戦略の中には、指定の固定化があっ
た。すなわち、オブジェクト・プログラムの特定タイプ
の量が、一定のレジスタに指定されていた。例えば、サ
ブルーチンのリンクは、第2レジスタ、グループに、基
底アドレスは第2レジスタ・グループに、算術計算は、
第3レジスタ・グループに、実行時のスタックポイント
は固定したレジスタに、という具合に指定することがで
きた。このような固定写像の問題点は。
レジスタの使用が実行要求に動的に従わないことである
。これは、レジスタの中に、全く使われなかったり、過
度に使われたり、使用頻度が少ないものがあることを意
味する。
大域的レジスタ割当ては、はとんどのプログラムがその
ほとんどの時間を内側のループで過ごすというwtaに
関係する。したがって、指定の1つの方策は、頻繁に用
いられる名前を、ループの間中、固定レジスタに留めて
おくことである。したがって、1つの戦略として、ある
固定数のレジスタを指定して、各内側のループの最も活
動的な名前を保持することが挙げられる。選択された名
前は、ループ毎に違っていても差し支えない。他の非専
用レジスタは、1つのブロックについて、局所的な値を
保持するのに使用できる。このように割当て・指定には
、レジスタの数をどのような付与しても、大域的レジス
タ割当てにとって使用可能となる普遍的に正しい数には
ならないという欠点がある。
ChaLtin等による“Reqister A11o
cation ViaColoring”、Compu
ter Languages、Vol、6,1981.
pp。
47−57.Pergamon Press Lim1
tedおよびChaitinによる”Register
 A11ocation and Spilling 
ViaGraph Coloring” 、Proca
edings 5IGPLAN82゜Symposiu
m on Compiler Con5tructio
n、5IGPLANNotices、 1982.pp
、98−105は、プロシージャー全体にまたがる大域
的レジスタ割当て方法を記述している。前記文献では、
1つを除いて全レジスタが均一プールの一部だと考えら
れるとともに、全計算が、これらのレジスタに同じよう
に基づいて競合する。実際、レジスタのサブセットは保
留されない。
前記文献は、記憶装置ではなくてレジスタに、できるだ
け多くの計算を保つことが意図されることを指摘してい
る。なぜなら、ロードおよび記憶命令は、レジスタ・ツ
ー・レジスタの命令よりも高価だからである。また、前
記文献では、無限数のレジスタ(つまりプールと考えら
れ、中間言語において、プログラムでのロードと記憶の
数を最小限にするために許される)を利用するのは、コ
ード生成および最適化の責任であると書かれている。
前記文献のクリティカルなIl!察によれば、レジスタ
の割当ては、グラフの配色問題として解析可能である。
グラフの配色とは、隣り合う(グラフの辺によって連絡
される)2つの節の色が異なるように、各節に色を指定
することをいう。グラフの「彩色数」とは配色における
最小限の色の数をいう。前記文献では、レジスタ割当て
が「レジスタ干渉グラフ」と呼ばれる構成体を利用して
いる。
マシン・レジスタに常駐する計算または名前は、それら
がプログラムのどの点でも同時に「生きて」いるならば
、互いに「干渉する」といわれる。
前記文献のグラフ配色方法は、次のチップを含んでいる
。(a)コードの特定のテキスト配列に関して、名前か
ら干渉グラフを築<、(b)該グラフの彩色数を確定し
、該彩色数が使用可能なレジスタの数を越えなければ、
着色(節にレジスタを指定)して、そうでない場合は、
427798度が最高の節を退ける(核部および連結す
る辺を削除する)ことにより、グラフを簡約化する。
(c)値が収束するまで、ステップ(b)を繰り返す。
(d)コンパイルされるコード・ストリームに、適当な
、メミリへの書込みとメモリからのロードを組み込むこ
とによって、「こぼれ(spills)」の報告および
管理を行う。
本発明の目的は、スカシ・プロセッサまたはベクトル・
プロセッサにおいて、原始コードを実行可能なコードに
コンパイルする際に、最適なレジスタの割当て・指定を
行い、こぼれの数(メモリへの参照およびメモリからの
参照の数)を最小限にすることにある。関連する目的は
、基本ブロック内で、原文の配列に対してこぼれコード
の量が不変であるように、レジスタの割当て・指定を行
うことである。
C0問題点を解決するための手段 スカシ・プロセッサまたはバク1−ル・プロセッサで原
始コードを実行可能コードにコンパイルする際の最適化
段階において、レジスタを割り当てるとともに、「基本
ブロック」と呼ばれる分岐のないコード領域に局所的な
前記割当てを最適化する方法によって、前記目的は達成
される。各基本ブロックは、計算を定義するステートメ
ントを持つ。また、各プロセッサは、実行可能なコード
およびデータの列を記憶するメモリと、前記メモリをア
クセスしてアクセスされたコードを実行する手段とを含
む。プロセッサにおいて、メモリは。
有限の2個のレジスタとそれに比較して無限側の内部メ
モリとを含む2レベル・モデルとして写像される。関連
することだが、レジスタのアクセス時間は、内部メモリ
のアクセス時間よりも速い。
本発明の方法は、プロセッサで実現される次の(a)、
(b)のステップからなる。(a)基本ブロックのデー
タ依存グラフ属性を確定する。
(b)2レベル・メモリ・モデルを利用して、確定され
たデータ依存グラフにつき「2色の小石ゲーム」発見法
を実行することにより、基本ブロック内の全計算に関し
て、2個のレジスタのうちの9個の割当てと指定を生成
する。
上記(a)、(b)に加えて、(c)生変数解析を行い
、それに応答してループが最も重要な最適化エンテイテ
イーであると仮定して大域的なレジスタ割当てと指定を
生成するステップを含んでなり、局所的および大域的レ
ジスタ最適化を行う方法によって、前述の目的は一層よ
く達成される。
Chaintinの[レジスタ干渉グラフ」と異なり、
データ依存グラフは原文の配列に対して不変である。本
発明の方法は、割当て処理を2つのステップに分ける。
第1のステップは、良性の局所的割当てを得ることであ
る。第2のステップは、局所的割当てを用いて大域的割
当てを得ることである。
データ依存グラフで行われる小石ゲーム発見法は、基本
ブロック内のこぼれが最小になることを保証する。該発
見法は、基本ブロックに対応するグラフ上で赤と青の小
石ゲームを行うことを意味する。
メモリへのアクセスは、ゲラフレこ青い小石を置くこと
によってモデル化される一方、レジスタへのアクセスは
、グラフに赤い小石を置くことによってモデル化される
。このモデルは、こぼれを正確に制御する。同じデータ
依存グラフは同じ割当てをもたらす。
重要なことは、局所的割当てを実行する間、使用可能な
レジスタのすべてが使われるわけではないことである。
実際、いくつかのレジスタは、大域的情報を運ぶために
取って置かれる。関連することだが、2番目の大きなス
テップは、これらのレジスタを用いてメモリへのアクセ
スをさらに減らす大域的最適化を行うステップである。
これらの大域的レジスタのために選ばれる変数は、プロ
グラム全体のロードまたは記憶操作の数を最大限に減ら
すように選択される。
本発明のために、小石ゲームとは、DAGで行われる1
人用のゲームである。プレヤーには、赤と青の2つのタ
イプの小石が与えられる。青い小石の数は無限である一
方、赤い小石の数は、ある数、例えばp、に制限されて
いる。最初、DAGはすべてのソースに青の小石を置い
ている。プレヤーには、以下の動きの何れかが許される
(1)青い小石の隣りの赤い小石を置く。
(2)赤い小石の隣りに青い小石を置く。
(3)ある節に赤い小石を置く。ただし、すべての先行
節に赤い小石が置かれている場合に限る。
(4)ある節に、赤い小石を先行節の1つからスライド
させる。ただし、その前に先行節に赤い小石が置かれて
いた場合に限る。
(5)赤い小石を取り除く。これはいつでも差し支えな
い。
これに関連して、青い小石はメモリ位置であり、赤い小
石はレジスタである。この意味で、ルール(1)はメモ
リからのロート、ルール(2)はメモリへの書込み、ル
ール(3)は値を計算してレジスタに格納すること、ル
ール(4)は値を計算して、計算に用いられていたオペ
ランドを以前保持していたレジスタに格納することに相
当する。
レジスタ割当てに関連するゲームの目的は、こぼれの数
を最小化することである。ここで、こほれはルール(1
)または(2)の利用に関係する。
小石ゲームは、 Pippengerによって、“Pe
bbling”5th  IBM  Symposiu
m  on  the  MachematicalF
oundations of Computer 5c
ience、 1980年5月26〜28日、箱板、日
本において述べられている。彼は、コンパイラ、特にコ
ード生成と最適化を含めて、小石ゲームの応用範囲が広
いことを指摘している。彼が述べたのは1色のゲームで
あり、「黒色小石ゲーム」と呼ばれることもある。
明らかに、「黒色小石ゲーム」は1時間−空間トレード
オフの研究に用いられてきた。1時間−空間トレードオ
フ」には、使用可能なレジスタの数の積によって形成さ
れるファクタの変更の結果と、計算の実行に要する時間
とが関係する。該積は、データ依存グラフの中の節の数
に比例する量である。もし1色だけがレジスタを表現す
るならば、所与の計算について、「前記計算を実行する
のに必要とされるレジスタの最低数はいくつか?」とい
う問いかけが従来なされてきた。しかしながら、前記1
色小石ゲームは、本発明の方法を教示も示唆もしない。
重要なことは、本発明が、2色小石ゲームにより、DA
G上でレジスタの割当て・指定を扱い5それによって5
一般のグラフ配色方法に比べ、こぼれを協働して最小化
する局所的最適化およびループ準拠の大域的最適化を行
うことである。
D、実施例 まず、小石ゲーム発見法アルゴリムズを記述して、局所
的最適化を達成するレジスタの割当て・指定について説
明する。続いて、大域的割当てについて論じる。
漫ノけm化 局所的最適化は、「小石ゲームJ発見法を利用する。本
発明のために、「発見法」とは、予期的に近最適な結果
を達成するための、直観に基づく、マシンで実現可能な
プロシージャまたはアルゴリズムをいう。
第1例 第1図ないし第6図には、基本ブロックに分割され、か
つDAGタイプのカウンタパート・データ依存グラフに
よって表現される計算例が示されている。第1近似に至
る発見法は、以下のようにして進行する。
1、DAGを検査し、2個の支配節、つまり、後続節の
数が最も多い節を識別する。ここで、pは赤い小石の数
である。そのような2個の節のセット毎に、該セットの
中の赤でない節の数であるコス1〜を関連させる。続い
て、これらのセットの中から、支配者のコスト/サイズ
の値が最小のセットを選ぶ。これは、計算のための「有
望な」エリアを定義する。
2、上記選択されたセットの直接的な後続節である節毎
のカバー・コストを計算することにより、「良性の」計
算を見つける。カバー・コストには3つのパラメータが
ある。それらには、 (a)赤い小石が置かれていない
先行節の数、(b)カバー・コストを計算する節の直接
的な前身全体での最小スライドコストが含まれる。関連
して、スライド・コストは、最小の「アウト度」を持つ
(a)の中の先行節を参照する。「アウト度」とは、ま
だ計算されていない後続節を意味する。ちなみに、一旦
計算が実行されると、未計算後続節の数は変化する。し
たがって1例えば基本ブロック1を参照する第2図にお
いて、節t1はカバー・コスト(2,1)を持つ。ここ
で、先行節の数は2である(節x+y)一方、スライド
・コスト(未計算後続節に対するアウト度)は、最初、
Xについては1、yについては3である。選択は、スラ
イド・コストがより小さいものについてなされる。一旦
カバー・コストが計算されると、アルゴリズムの次のス
テップで実行される計算が、最小のカバー・コストを持
つものとなるように選ばれる。
3、一旦「良性の」計算を決定すると、赤い小石を置く
従属節は、小石のスライディングに関するルールを用い
る。スライドを実行するのに用いることのできる赤い小
石がない場合は、現在DAG上にない小石が、存在すれ
ば用いられる。
4、レジスタが使用不能ならば、中間(または最終)結
果をメモリに書き出すとともに、必要なときに(使用可
能なレジスタに)ロードし直さなければならない。
第2図を参照すると、節t1はソースXとyに依存して
いる一方、節qは節yと2に依存している。結果Vはt
lとyに依存する。3つのレジスタro、rl、r2が
使用可能だと仮定すると、3つの節からなる支配者が選
ばれる。可能性のある唯一の支配者は、セラ1〜(x+
 y+ z)である。
したがって、これを「有望な」セットと呼ぶことにする
節t1とqは、選択された支配セットの後続節である。
各節毎に、カバー・コストが計算される。
tlのカバー・コストは(2,1)である。その理由は
、tlの2つの先行節には小石が置かれていないこと、
および、Xの未計算後続節は1つだけなので、最小スラ
イド・コストは1であることによる。qの場合も同様の
ことがあてはまる。t1+ qのカバー・コストはどち
らも同じなので、1つの節(例えばし1)が任意に選ば
れる。tlを計算するためには、まず、赤い小石をXと
yに置かねばならない。次に、Xのスライド・コストが
1なので、Xをtlにスライドさせる。すると、tlの
赤い小石をVにスライドさせることにより、節Vが計算
可能になる。続いて、2のロード後に、yの小石をqに
スライドさせることにより、節qが計算可能になる。
前述の解析は、十分な数のレジスタが与えられると、ス
ケジューリングの提供を合理的にスムーズに行えること
を指摘している。
第3図および第4図には、第1図に記した計算列のCh
aitinの文献による従来のレジスタ干渉グラフが示
されている。第3図のグラフは、技術的に3色で配色可
能である。しかしながら、2つのレジスタ(ro、r2
)だけが使用可能ならば、グラフの配色は本質的に可能
でなくなる。度の高さの順に、節を除去する。または退
けることが必要になるであろう。これに関連して、第4
図は、節Xとyを除去した従来の干渉グラフの例である
しかしながら、2色で配色を可能にするには、節2も除
去しなければならないだろう。3つの節を退けることは
、こぼれコードの量が相当あることを示す。対照的に、
使用可能なレジスタが2つだけ提供されるとともに、第
2図のデータ依存グラフに応じてそれらが指定されるな
らば、比較して3回のロードと1回の記憶だけが必要と
される。
必」1匹 第5図および第6図を参照する。再び、3つのレジスタ
と3つの赤い小石が使用可能であると仮定する。アルゴ
リズムによると、節tl、vおよびWは、支配節として
選ばれる。カバー・コスト(x)= (2,1)である
一方、カバー・コスト(y)= (2,2)である。し
たがってカルボリズムは、節Xの評価を選択する。カバ
ー・コスト= (cl、C2)であって、C1=2だか
ら、アルゴリズムは、現在の辺境(フロンティア)のた
めにこぼれ節(X)を計算する。辺境という言葉は、セ
ット内のすべての節Vについて、核部が小石を持ってお
り、かつVの後続節の少なくとも1つが未計算であると
いう性質を持つ節のセットから由来する。これが辺境と
呼ばれている。
DAG上に赤い小石が全く置かれていないので。
空である。したがって、この方法によれば、節UとVに
自由な赤い小石を置くことができる。また、C2=1な
ので、節Uにおけるレジスタは節Xにスライドされ、1
つの計算が完了する。もう1度、別の支配者が選択され
る。今度は5節pが計算の目票となる。なぜなら、カバ
ー・コスト(p)=(0,1)だからである。前のよう
に、C2=1である。これは、節X上のレジスタが節p
にスライドされることを意味する。
明らかに、今度計算しなければならない節は、yそして
2である。なぜなら、他の選択は使用不能だからである
。第5図を参照する。ロードは3回だけ行われ、かつp
と2はレジスタ内にあって使用可能であることに注意す
べきである。これは、どちらかが後で使われる場合、メ
モリからロードする必要が全くないことを意味する。
重要なことは1列の中のコードがどんなに並べ変えられ
ても、データ依存グラフが不変であることである。した
がって、この方法によりもたらされる結果は、原文の配
列に依存しない。
また、第6図に示すようなコードに従来の配色が適用さ
れたならば、ロードの数は4になるところ2本発明の方
法によれば、ロードの数は、最小限の3だけになること
に注意すべきである。
太部ば庭11生 本発明において、大域的最適化は、まず、使用可能なレ
ジスタの全体数のある一部を用い、フロー・グラフに現
われ順番で、各基本ブロック毎に局所的割当てを実行す
ることを含む。次に、ループが最もクリティカルなエン
テイテイーであると仮定し、残りのレジスタを用いて大
域的情報を運ぶ。
第7図には、開始節で初期設定され、かつ終了節で終了
するフロー・グラフが示されている。
局所的割当てがなされたと仮定すると、大域的ステップ
が、各局所的割当てにおいてロード・記憶される変数の
セットを検査する。これらの変数のために、カウントが
、変数のロードまたは記憶の回数によって構成される。
このカウントは、いわゆる変数のネスティング・レベル
によってバイアスされる。該ネスティング・レベルは、
該変数を囲むフロー・グラフのループの数に関連するも
のである。このリストから、最高の値を持つ変数が選択
されて、大域的レジスタに常駐する。該プロセスは、使
用可能な大域的レジスタがなくなるまで、または、該リ
ストが空になるまで、繰り返される。
この大域的割当てのスキームまたはステップには、変形
が存在する。例えば、大域的レジスタに入れられる変数
は、局所的割当てに対応するフロー・グラフの生きてい
る最大範囲を表わすものである。すなわち、局所的割当
てが、入力プログラムの中の対応する基本ブロックの代
わりに用いられる。続いて、基本ブロックにとって局所
的ではない変数すべてのために、生きている範囲が計算
される。生きている範囲は、ネスティング・レベルプレ
イキング・タイおよび使用の数を持つ大域的レジスタに
割り当てられるのはどの変数であるかを判断するのに用
いられる。つまり、基本ブロックに局所的でない変数で
あって、最大の生きている範囲を持つ変数が大域的レジ
スタに割り当てられるのである。そして、2つ以上の変
数が同じ生きている範囲を持つ場合は、使用の数または
ネスティング・レベルが最大である変数に、大域的レジ
スタの1つが指定されるのである。
ループの底において、変数が異なるレジスタで終わる(
ワインド・アップ)けれども、これらがループの先頭に
あると想定される場合は、転送の必要がなくなるまで、
または、転送数がある所定のしきい値より小さくなるま
で、該ループを展開することが可能である。
下記表は、小石ゲーム発見法のアルゴリズムを詳述した
ものである。
■                        
    −一                   
        η)     1    個+   
      ψ                  
  リ本滲遭μ贋劇張 本発明の方法は、IBM(登録商標)システム/370
タイプのスカシ・プロセッサ、または、IBM3090
によって代表されるようなベクトル・マシンにおいて、
用いることができる。ベクトル・プロセッサにおいては
、トップ・スピードで計算を行うことが望まれる。これ
は、計算がメモリをアクセスする頻度をできるだけ少な
くすべきであることを意味する。なぜなら、ベクトル・
レジスタへのアクセスに比べると、メモリ・アクセスは
非常に遅いからである。前述のように、小石ゲームの発
見法は、次のようにしてベクトル・レジスタの数を決定
するのに使うことができる。
まず、ベクI・ル・レジスタの開始番号を選択する。
続いて、実行されるべきベクトル計算に対応するデータ
依存グラフDACで、該発見法を実行する。
次に、この固定数のレジスタのために行われるロート/
記憶の合計数を計算する。続いて、この数を、必要とさ
れるアジセスの数(つまり、ソースの数とシンクの数の
和)の下限と比較する。実行されるアクセスの数が多す
ぎるならば、レジスタの数を倍にしてアルゴリズムを再
適用する。下限に達したならば、レジスタの数を半分に
して、最適なレジスタ数が識別されるまで、アルゴリズ
ムを繰り返す。これは、ベクトル・レジスタの数につい
て二分探索を行うとともに、探索パラメータを決定する
のに小石ゲーム発見法を用いることと等価である。
本発明の別の拡張は、計算をメモリに対するロードと記
憶オーバーラツプであるマシンでの使用である。該発見
法は、現在レジスタにあるデータに基づいて、できるだ
け多くの計算を試みるので。
計算とメモリ・アクセスとの間の良性のオーバーラツプ
を提供しなければならない。
差星皿咀 本発明は、PL/I、FORTRAN、C0BOL等の
高級言語コンパイラのオプテイマイザ部に組み込まれ、
かつ、IBMシステム/370等のシステム上で、米国
特許第3400371号明細書およびI B M  S
ystem/370 Pr1nciples of0p
eration、 IBM Publication 
GA22−7000−6に記載されているように実行す
ると、簡便に実行できる。
E3発明の効果 本発明によれば、コンパイル時に最適なレジスタの割当
てを行うことができ、メモリへのアクセスを最小限に抑
えることができる。
【図面の簡単な説明】
第1図は、3つの基本ブロックの計算列を示す図である
。 2図は、本発明により、小石ゲーム発見法を用いる局所
的レジスタ割当てを説明する第1列で用いられた、第1
図のブロックのデータ依存グラフへの翻訳を示す図であ
る。 第3図は、従来技術による、第1図の列のレジスタ干渉
グラフを示す図である。 第4図は、従来技術により、配色が可能となるようにい
くつかの節を除去した第3図の干渉グラフを示す図であ
る。 第5図および第6図は、本発明により、小石ゲーム発見
法を用いる局所的レジスタ割当ての第2列で用いられた
、計算列、データ依存グラフおよびレジスタ活動列を示
す。 第7図は、本発明による大域的割当てのステップの記述
に関係するフロー・グラフの説明図である。 出願人  インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人  弁理士  頓  宮  孝  −(外1名)

Claims (2)

    【特許請求の範囲】
  1. (1)有限個のレジスタと、該レジスタの総容量に比べ
    て十分大きい記憶容量を有し該レジスタより遅いアクセ
    ス時間を有するメモリとに接続されたプロセッサで原始
    コードを実行可能コードにコンパイルする際に、基本ブ
    ロックへのレジスタの割当てを最適化する方法において
    、 (a)前記基本ブロックのデータ依存グラフ属性を確定
    し、 (b)確定されたデータ依存グラフについて、(b1)
    使用可能なレジスタと同じ数の節を、前記データ依存グ
    ラフの節の中から後続節の数が多いものの順に選択し、
    該選択された節にレジスタを割当て、 (b2)次に、レジスタを割り当てられた節の直接の後
    続節のすべてについてカバー・コストを確定し、そのう
    ちのカバー・コストが最小である1つの後続節にその時
    点で使用可能なレジスタを割り当て、以下このステップ
    をその時点でレジスタを割り当てられている節の直接の
    後続節について繰り返し、 (b3)後続節への割り当てに使用可能なレジスタがな
    い場合は、該節での計算結果をメモリに書き込み、その
    後必要に応じて該結果を使用可能となつたレジスタにロ
    ードする ことを特徴とするコンパイル時のレジスタの割当て方法
  2. (2)有限のp個のレジスタと、該レジスタの総容量に
    比べて十分大きい記憶容量を有し該レジスタより遅いア
    クセス時間を有するメモリとに接続されたプロセッサで
    原始コードを実行可能コードにコンパイルする際に、 (a)基本ブロックのそれぞれについてデータ依存グラ
    フ属性を確定し、 (b)確定されたデータ依存グラフについて、(b1)
    使用可能なレジスタと同じ数の節を、前記データ依存グ
    ラフの節の中から後続節の数が多いものの順に選択し、
    該選択された節にレジスタを割当て、 (b2)次に、レジスタを割り当てられた節の直接の後
    続節のすべてについてカバー・コストを確定し、そのう
    ちのカバー・コストが最小である1つの後続節にその時
    点で使用可能なレジスタを割り当て、以下このステップ
    をその時点でレジスタを割り当てられている節の直接の
    後続節について繰り返し、 (b3)後続節への割り当てに使用可能なレジスタがな
    い場合は、該節での計算結果をメモリに書き込み、その
    後必要に応じて該結果を使用可能となつたレジスタにロ
    ードする ことにより、各基本ブロックへの、p個のうちのq個の
    レジスタの割り当てを最適化するとともに、 (c)基本ブロックのフロー・グラフ状の表現について
    生変数解析を行い、それに応じて、該表現においてルー
    プが最も重要な最適化エンティティーであると仮定して
    、(p−q)個のレジスタを用いた大域的なレジスタの
    割り当てを最適化することを特徴とするコンパイル時の
    レジスタの割り当て方法。
JP61266812A 1985-12-17 1986-11-11 コンパイル方法 Expired - Lifetime JPH0776927B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US809989 1985-12-17
US06/809,989 US4782444A (en) 1985-12-17 1985-12-17 Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering

Publications (2)

Publication Number Publication Date
JPS62144247A true JPS62144247A (ja) 1987-06-27
JPH0776927B2 JPH0776927B2 (ja) 1995-08-16

Family

ID=25202684

Family Applications (1)

Application Number Title Priority Date Filing Date
JP61266812A Expired - Lifetime JPH0776927B2 (ja) 1985-12-17 1986-11-11 コンパイル方法

Country Status (8)

Country Link
US (1) US4782444A (ja)
EP (1) EP0229245A3 (ja)
JP (1) JPH0776927B2 (ja)
KR (1) KR910009116B1 (ja)
CN (1) CN1003679B (ja)
BR (1) BR8605865A (ja)
CA (1) CA1264859A (ja)
ES (1) ES2004348A6 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6481035A (en) * 1987-09-22 1989-03-27 Nec Corp C compiler
JPH04213118A (ja) * 1990-12-07 1992-08-04 Fuji Xerox Co Ltd プログラム翻訳装置およびプログラム翻訳方法
JPH05108373A (ja) * 1991-10-18 1993-04-30 Matsushita Electric Ind Co Ltd 資源割り付け装置
JP2008500654A (ja) * 2004-06-30 2008-01-10 インテル・コーポレーション 仕切りのあるレジスタバンクのためのバンク付与

Families Citing this family (107)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6378231A (ja) * 1986-09-22 1988-04-08 Nec Corp 部分的プログラム結合方式
JPS6476322A (en) * 1987-09-18 1989-03-22 Hitachi Ltd Program synthesizing method
US4953084A (en) * 1987-11-16 1990-08-28 Hewlett-Packard Company Method and apparatus using variable ranges to support symbolic debugging of optimized code
US5121498A (en) * 1988-05-11 1992-06-09 Massachusetts Institute Of Technology Translator for translating source code for selective unrolling of loops in the source code
US5129086A (en) * 1988-11-29 1992-07-07 International Business Machines Corporation System and method for intercommunicating between applications and a database manager
US5070453A (en) * 1989-04-10 1991-12-03 At&T Bell Laboratories System and method for scheduling data transfers among a plurality of data processing units to avoid conflicting data requests
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
US5274820A (en) * 1989-08-14 1993-12-28 International Business Machines Corporation Method and system for eliminating operation codes from intermediate prolog instructions
JPH03150637A (ja) * 1989-11-08 1991-06-27 Oki Electric Ind Co Ltd パイプライン対応のレジスタ割付け方式
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
WO1991010954A1 (en) * 1990-01-19 1991-07-25 Alliant Computer Systems Corporation A risc vectorization system
CA2010067C (en) * 1990-02-14 1993-10-26 Steven Murray Hoxey Reducing pipeline delays in compilers by code hoisting
EP0453160A3 (en) * 1990-04-20 1993-09-15 Digital Equipment Corporation A method and apparatus for analyzing the flow of data through a complex information exchange system
US5212794A (en) * 1990-06-01 1993-05-18 Hewlett-Packard Company Method for optimizing computer code to provide more efficient execution on computers having cache memories
US5202975A (en) * 1990-06-11 1993-04-13 Supercomputer Systems Limited Partnership Method for optimizing instruction scheduling for a processor having multiple functional resources
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5511218A (en) * 1991-02-13 1996-04-23 Hughes Aircraft Company Connectionist architecture for weapons assignment
JP3032031B2 (ja) * 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
JP3049814B2 (ja) * 1991-04-09 2000-06-05 日本電気株式会社 マイクロコンピュータの言語処理装置
US5530866A (en) * 1991-07-30 1996-06-25 Tera Computer Company Register allocation methods having upward pass for determining and propagating variable usage information and downward pass for binding; both passes utilizing interference graphs via coloring
US5339428A (en) * 1991-09-04 1994-08-16 Digital Equipment Corporation Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register
US5386562A (en) * 1992-05-13 1995-01-31 Mips Computer Systems, Inc. Circular scheduling method and apparatus for executing computer programs by moving independent instructions out of a loop
US5418958A (en) * 1992-07-15 1995-05-23 Sun Microsystems, Inc. Register allocation by decomposing, re-connecting and coloring hierarchical program regions
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
US5469572A (en) * 1992-12-01 1995-11-21 Taylor; James M. Post compile optimizer for linkable object code
WO1994015304A1 (en) * 1992-12-21 1994-07-07 Apple Computer, Inc. Method and apparatus for transforming an arbitrary topology collection of nodes into an acyclic directed graph
SE502733C2 (sv) * 1993-06-11 1995-12-18 Ellemtel Utvecklings Ab Sätt att undvika ej önskvärd interferens mellan tjänster i ett telekommunikationssystem
CA2134059C (en) * 1993-10-29 2009-01-13 Charles Simonyi Method and system for generating a computer program
US5491823A (en) * 1994-01-25 1996-02-13 Silicon Graphics, Inc. Loop scheduler
US5999737A (en) * 1994-03-01 1999-12-07 Digital Equipment Corporation Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis
US5590356A (en) * 1994-08-23 1996-12-31 Massachusetts Institute Of Technology Mesh parallel computer architecture apparatus and associated methods
JP3606387B2 (ja) * 1994-09-13 2005-01-05 松下電器産業株式会社 コンパイル装置
US5802375A (en) * 1994-11-23 1998-09-01 Cray Research, Inc. Outer loop vectorization
CN1149476C (zh) * 1995-03-16 2004-05-12 松下电器产业株式会社 资源分配装置
US5659754A (en) * 1995-03-31 1997-08-19 Sun Microsystems, Inc. Method and apparatus for an improved optimizing compiler
US5691897A (en) * 1995-05-30 1997-11-25 Roy-G-Biv Corporation Motion control systems
US20060206219A1 (en) 1995-05-30 2006-09-14 Brown David W Motion control systems and methods
US7137107B1 (en) 2003-04-29 2006-11-14 Roy-G-Biv Corporation Motion control systems and methods
US7024666B1 (en) * 2002-01-28 2006-04-04 Roy-G-Biv Corporation Motion control systems and methods
US20100131081A1 (en) * 1995-05-30 2010-05-27 Brown David W Systems and methods for motion control
US7139843B1 (en) 1995-05-30 2006-11-21 Roy-G-Biv Corporation System and methods for generating and communicating motion data through a distributed network
JP3060907B2 (ja) * 1995-07-28 2000-07-10 日本電気株式会社 言語処理プログラムの処理方式
US5761514A (en) * 1995-08-31 1998-06-02 International Business Machines Corporation Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system
US6135650A (en) * 1995-12-22 2000-10-24 Sun Microsystems, Inc. Method and system for wrapper routine optimization
US5901317A (en) * 1996-03-25 1999-05-04 Sun Microsystems, Inc. Method and system for register allocation using multiple interference graphs
US5946491A (en) * 1996-06-06 1999-08-31 International Business Machines Corporation Register allocation method and apparatus for gernerating spill code as a function of register pressure compared to dual thresholds
US5901316A (en) * 1996-07-01 1999-05-04 Sun Microsystems, Inc. Float register spill cache method, system, and computer program product
KR100186338B1 (ko) * 1996-08-02 1999-05-15 문정환 교환법칙이 성립하는 연산기의 입력단수 저감방법
WO1998006038A1 (en) * 1996-08-07 1998-02-12 Sun Microsystems, Inc. Architectural support for software pipelining of loops
US6049864A (en) * 1996-08-20 2000-04-11 Intel Corporation Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor
US5937195A (en) * 1996-11-27 1999-08-10 Hewlett-Packard Co Global control flow treatment of predicated code
US5890000A (en) * 1996-12-04 1999-03-30 International Business Machines Corporation Cooperation of global and local register allocators for better handling of procedures
US6016398A (en) * 1997-04-01 2000-01-18 Intel Corporation Method for using static single assignment to color out artificial register dependencies
US6031994A (en) * 1997-04-01 2000-02-29 Intel Corporation Method for determining the set of variables that may be ambiguously defined at a point in a computer program
US6029005A (en) * 1997-04-01 2000-02-22 Intel Corporation Method for identifying partial redundancies in a new processor architecture
US5991540A (en) * 1997-04-01 1999-11-23 Intel Corporation Method for identifying partial redundancies in existing processor architectures
US6151704A (en) * 1997-04-01 2000-11-21 Intel Corporation Method for optimizing a loop in a computer program by speculatively removing loads from within the loop
CA2205797C (en) * 1997-05-22 2001-04-24 Andrew Wilfred Macleod A system for local context spilling for graph colouring register allocators
US6009272A (en) * 1997-06-30 1999-12-28 Sun Microsystems, Inc. Register allocation via selective spilling
US5987259A (en) * 1997-06-30 1999-11-16 Sun Microsystems, Inc. Functional unit switching for the allocation of registers
US6139200A (en) * 1997-06-30 2000-10-31 Sun Microsystems, Inc. Register resource allocation feedback
US6314562B1 (en) 1997-09-12 2001-11-06 Microsoft Corporation Method and system for anticipatory optimization of computer programs
US20010032278A1 (en) * 1997-10-07 2001-10-18 Brown Stephen J. Remote generation and distribution of command programs for programmable devices
US6058265A (en) * 1997-10-21 2000-05-02 Hewlett Packard Company Enabling troubleshooting of subroutines with greatest execution time/input data set size relationship
US6292938B1 (en) * 1998-12-02 2001-09-18 International Business Machines Corporation Retargeting optimized code by matching tree patterns in directed acyclic graphs
US6954927B2 (en) * 1999-02-17 2005-10-11 Elbrus International Hardware supported software pipelined loop prologue optimization
US6317876B1 (en) * 1999-06-08 2001-11-13 Hewlett-Packard Company Method and apparatus for determining a maximum number of live registers
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
US8032605B2 (en) 1999-10-27 2011-10-04 Roy-G-Biv Corporation Generation and distribution of motion commands over a distributed network
US20100131078A1 (en) * 1999-10-27 2010-05-27 Brown David W Event driven motion systems
US6885898B1 (en) 2001-05-18 2005-04-26 Roy-G-Biv Corporation Event driven motion systems
CA2288614C (en) 1999-11-08 2004-05-11 Robert J. Blainey Loop allocation for optimizing compilers
US6725218B1 (en) 2000-04-28 2004-04-20 Cisco Technology, Inc. Computerized database system and method
JP3651774B2 (ja) * 2000-09-12 2005-05-25 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ及びそのレジスタ割付方法
US6883165B1 (en) 2000-09-28 2005-04-19 International Business Machines Corporation Apparatus and method for avoiding deadlocks in a multithreaded environment
US6799262B1 (en) 2000-09-28 2004-09-28 International Business Machines Corporation Apparatus and method for creating instruction groups for explicity parallel architectures
US6779106B1 (en) 2000-09-28 2004-08-17 International Business Machines Corporation Apparatus and method for an enhanced integer divide in an IA64 architecture
US6886094B1 (en) 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US6912647B1 (en) 2000-09-28 2005-06-28 International Business Machines Corportion Apparatus and method for creating instruction bundles in an explicitly parallel architecture
WO2002071241A1 (en) 2001-02-09 2002-09-12 Roy-G-Biv Corporation Event management systems and methods for the distribution of motion control commands
US7904194B2 (en) 2001-02-09 2011-03-08 Roy-G-Biv Corporation Event management systems and methods for motion control systems
US7013460B2 (en) * 2001-05-15 2006-03-14 Hewlett-Packard Development Company, L.P. Specifying an invariant property (range of addresses) in the annotation in source code of the computer program
US20030079210A1 (en) * 2001-10-19 2003-04-24 Peter Markstein Integrated register allocator in a compiler
US7263694B2 (en) * 2001-10-26 2007-08-28 International Business Machines Corporation Directed non-cyclic graph walking system for data processing and analysis in software application
US20030237080A1 (en) * 2002-06-19 2003-12-25 Carol Thompson System and method for improved register allocation in an optimizing compiler
US7069548B2 (en) * 2002-06-28 2006-06-27 Intel Corporation Inter-procedure global register allocation method
US20040025151A1 (en) * 2002-07-31 2004-02-05 Shan-Chyun Ku Method for improving instruction selection efficiency in a DSP/RISC compiler
US7111287B2 (en) * 2003-01-10 2006-09-19 International Business Machines Corporation Global processor resource assignment in an assembler
US7185329B1 (en) 2003-03-28 2007-02-27 Applied Micro Circuits Corporation Use of different color sequences for variables of different sizes and different semantics
US7207032B1 (en) * 2003-03-28 2007-04-17 Applied Micro Circuits Corporation Expanding a software program by insertion of statements
US8027349B2 (en) * 2003-09-25 2011-09-27 Roy-G-Biv Corporation Database event driven motion systems
US20060064503A1 (en) 2003-09-25 2006-03-23 Brown David W Data routing systems and methods
US20100131077A1 (en) * 2004-02-25 2010-05-27 Brown David W Data Collection Systems and Methods for Motion Control
KR100597414B1 (ko) * 2004-10-21 2006-07-05 삼성전자주식회사 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
CN100337202C (zh) * 2004-12-03 2007-09-12 中国科学院计算技术研究所 一种汇编代码热函数中的热路径搜寻方法
US20060200811A1 (en) * 2005-03-07 2006-09-07 Cheng Stephen M Method of generating optimised stack code
CN100414505C (zh) * 2005-07-08 2008-08-27 中国科学院计算技术研究所 一种基于组合并算法的偏移量分配优化方法
US7797692B1 (en) * 2006-05-12 2010-09-14 Google Inc. Estimating a dominant resource used by a computer program
US8237726B2 (en) * 2009-06-26 2012-08-07 Intel Corporation Register allocation for message sends in graphics processing pipelines
US8933954B2 (en) 2011-03-23 2015-01-13 Qualcomm Incorporated Register allocation for graphics processing
CN103399741B (zh) * 2013-07-24 2016-05-25 中国科学院声学研究所 一种汇编级静态路径剖析方法及装置
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US9588746B2 (en) 2014-12-19 2017-03-07 International Business Machines Corporation Compiler method for generating instructions for vector operations on a multi-endian processor
US9569190B1 (en) 2015-08-04 2017-02-14 International Business Machines Corporation Compiling source code to reduce run-time execution of vector element reverse operations
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
KR20170047957A (ko) * 2015-10-26 2017-05-08 삼성전자주식회사 반도체 장치의 동작 방법 및 반도체 시스템

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE1250659B (de) * 1964-04-06 1967-09-21 International Business Machines Corporation, Armonk, NY (V St A) Mikroprogrammgesteuerte Datenverarbeitungsanlage
US3921153A (en) * 1973-08-02 1975-11-18 Ibm System and method for evaluating paging behavior
US4493020A (en) * 1980-05-06 1985-01-08 Burroughs Corporation Microprogrammed digital data processor employing microinstruction tasking and dynamic register allocation
US4378590A (en) * 1980-09-03 1983-03-29 Burroughs Corporation Register allocation apparatus
US4435753A (en) * 1980-10-31 1984-03-06 International Business Machines Corporation Register allocation system using recursive queuing during source code compilation
US4571678A (en) * 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring
US4567574A (en) * 1983-03-14 1986-01-28 International Business Machines Corporation Optimizing cobol object code instruction path length with respect to perform statements
JPS6140643A (ja) * 1984-07-31 1986-02-26 Hitachi Ltd システムの資源割当て制御方式
US4656583A (en) * 1984-08-13 1987-04-07 International Business Machines Corporation Method for improving global common subexpression elimination and code motion in an optimizing compiler
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
US4656582A (en) * 1985-02-04 1987-04-07 International Business Machines Corporation Generating storage reference instructions in an optimizing compiler
US4722071A (en) * 1985-04-19 1988-01-26 Pertron Controls, Corporation Compiler for evaluating Boolean expressions

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6481035A (en) * 1987-09-22 1989-03-27 Nec Corp C compiler
JPH04213118A (ja) * 1990-12-07 1992-08-04 Fuji Xerox Co Ltd プログラム翻訳装置およびプログラム翻訳方法
JPH05108373A (ja) * 1991-10-18 1993-04-30 Matsushita Electric Ind Co Ltd 資源割り付け装置
JP2008500654A (ja) * 2004-06-30 2008-01-10 インテル・コーポレーション 仕切りのあるレジスタバンクのためのバンク付与

Also Published As

Publication number Publication date
CN1003679B (zh) 1989-03-22
JPH0776927B2 (ja) 1995-08-16
BR8605865A (pt) 1987-08-25
CN86107764A (zh) 1987-07-01
KR910009116B1 (ko) 1991-10-31
EP0229245A2 (en) 1987-07-22
EP0229245A3 (en) 1990-03-21
CA1264859A (en) 1990-01-23
ES2004348A6 (es) 1989-01-01
KR870006460A (ko) 1987-07-11
US4782444A (en) 1988-11-01

Similar Documents

Publication Publication Date Title
JPS62144247A (ja) コンパイル方法
Govindarajan et al. A framework for resource-constrained rate-optimal software pipelining
CN104965687B (zh) 基于指令集生成的大数据处理方法及装置
Beaty Instruction scheduling using genetic algorithms
Gualandi et al. Pallene: a statically typed companion language for lua
Majchrzak et al. Logic java: combining object-oriented and logic programming
Antoy et al. A virtual machine for functional logic computations
Ibrahim et al. Performance portability of sparse block diagonal matrix multiple vector multiplications on gpus
Zhu et al. Locality analysis for parallel C programs
Gheorghioiu Statistically determining memory consumption of real-time java threads
Johnsson An approach to global register allocation.
Weening Parallel execution of Lisp programs
Hagedorn et al. Achieving High Performance the Functional Way: Expressing High-Performance Optimizations as Rewrite Strategies
Ekanadham Future scientific programming on parallel machines
Lawrence Optimizing compilation with the value state dependence graph
Browne et al. Visual programming and parallel computing
Jagannathan Communication-passing style for coordination languages
Poletto Language and compiler support for dyanmic code generation
Waite et al. Code generation
Schmitt et al. A language extension set to generate adaptive versions automatically
Papazoglou et al. An outline of the programming language Simula
Widemann et al. The Functional Programming Language R and the Paradigm of Dynamic Scientific Programming: (Position Paper)
Browne Understanding execution behavior of software systems
Lin Code Generation from Functional to Imperative: Combining Destination-Passing Style and Views
JPH03135630A (ja) 命令スケジューリング方式