JPS61183744A - コード生成工程での命令形式選択方法 - Google Patents

コード生成工程での命令形式選択方法

Info

Publication number
JPS61183744A
JPS61183744A JP60283223A JP28322385A JPS61183744A JP S61183744 A JPS61183744 A JP S61183744A JP 60283223 A JP60283223 A JP 60283223A JP 28322385 A JP28322385 A JP 28322385A JP S61183744 A JPS61183744 A JP S61183744A
Authority
JP
Japan
Prior art keywords
instruction
code
register
instructions
format
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
JP60283223A
Other languages
English (en)
Other versions
JPH0519173B2 (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 JPS61183744A publication Critical patent/JPS61183744A/ja
Publication of JPH0519173B2 publication Critical patent/JPH0519173B2/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/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space

Landscapes

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

Abstract

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

Description

【発明の詳細な説明】 A、産業上の利用分野 本発明は最適化アルゴリズムを用いてコードの質向上を
図るディジタル計算機用のコンパイラに、係る。
本発明を適用できる計算機は、−組の汎用レジスタを備
え且つ命令に冗長性があるものである。
命令の冗長性とは、同じオペレーションを実行するのに
幾つかの形式の異なる命令が存在することを意味する。
このような計算機としては、IBMシステム/370、
−[−トローラMC68000等がある。本発明を適用
できるためには、レジスタ・オペランドを主記憶オペラ
ンドよりも優先し、且つ主記憶オペランドを記憶装置か
らの明示的なロード(レジスタ・オペランドを用いて行
われる)よりも優先させなければならない。例えば、I
BMシステム/370においては、加算は次の3種類の
何れかで行うことができる。
(1)  ARrl、r2 (2)  A  rl、d (r2) (3)  L  r3、d (r2) ARrl、r3 (1)はレジスタ加算命令を用いるもので、汎用レジス
タr2の内容を汎用レジスタr1の内容に加算して、結
果をrlに置く。この命令を用いる場合は、加数および
被加数を予め汎用レジスタに入れておく必要がある。
(2)は記憶装置からの加算を行う。II d Itは
変位を表わす定数である。レジスタr2はベース・レジ
スタであって、その内容とdとの和によって記憶装置を
アドレス指定する。記憶装置から取出されたワードはr
lの内容に加算される。
(3)は、一方のオペランドを“d(r2)”によって
アドレス指定された記憶装置から汎用レジスタr3ヘロ
ードし1次いでその内容をrlの内容に加算する。
システム/370における加算操作としては(1)が最
も優れており、(2)がその次であり、(3)が一番劣
る。しかし、r3にロードされた数値がプログラム中の
他の場所で使用されるのであれば、プログラム全体の効
率を考えた場合、(3)が最良になる。このように、同
じ加算であっても、どの形式の命令を選択するのが良い
かは場合によって異なる。このような命令の選択性、即
ち選択の優先原位があることが本発明の前提になってい
る。選択基準としては、目的コードのスペースまたは実
行時間を使用することができる。システム/370およ
びMC68000の場合は、スペースおよび時間の何れ
においてもレジスタ・オペランドの方が記憶装置オペラ
ンドよりも好ましい。
B、従来技術 最初のコンパイラが世に出て以来ずつと、コンパイラが
生成するコードの質が問題になっている。
最初の市場に出回ったコンパイラは本出願人のFORT
RAN  Iコンパイラであるが、その主な目的の1つ
は、科学技術計算の分野において、プログラマがアセン
ブリ言語でコーディングした場合のコードの質に匹敵す
るような目的コードを生成することであった。
最近、様々な高水準言語が考え出されているが、昔から
あるFORTRANも適用範囲を広げるべく改良が続け
られている。しかし依然として、コンパイラが生成する
コードの質を上げることが。
特に製造業の分野で重要問題になっている。その場合、
コンパイラ生成コードの質を計るのに用いる基準は、専
門のアセンブリ言語プログラマが書いたコードである。
1950年代から現在にかけて、コンパイラ生成コード
の質を上げるための最適化方式が多数開発されている。
最初のFORTRANコンパイラでも最適化が行われて
いる。コンパイラの最適化は大きく2つに分けることが
できる。即ち、大域最適化および基本ブロック最適化で
ある。大域最適化は、コンパイルされるプログラム全体
の解析に基くもので、′コード移動(ループ外への移動
)”や″共通式除去″等を考慮する。基本ブロック最適
化は、コンパイルされるプログラムの比較的小さな区域
、即ち基本ブロックの解析に基くもので、基本ブロック
には隣接する2つの命令しか含まないものもある。
本発明は何れの最適化方式でも実施できるが、効率の点
では大域最適化が好ましい。従って、以下の説明も大域
最適化を前提にしている。
プログラムの大域解析から得るべき情報は生死の情報だ
けである。これは、各命令の各レジスタ・オペランドに
関連する“最終使用”または“中途使用”の標識で与え
られる。この情報は、各レジスタ・オペランドについて
、当該レジスタが新しい数値のロード前に再び使用でき
るか否かを示す。
C0発明が解決しようとする問題点 プログラムの最適化で問題になるのは、オペランドをど
こからアクセスするかということである。
オペランドは命令形式に応じてレジスタ又は主記憶装置
からアクセスされるか、最適化の効率を上げるためには
、命令形式を適切に選択する必要がある。
従って本発明の目的は、計算機で使用可能な命令セット
とプログラム中でのオペランドの使用パターンに基いて
、オペランドの参照先を適切に決めるコード生成方法を
提供することにある。
D0問題点を解決するための手段 本発明は、最適化コンパイラにおいて記憶装置参照の効
率を上げるため、まず最初に中間コードを生成する。こ
の中間コードは、主記憶装置の参照をロード命令(L)
及び記憶命令(S T)だけで行い、すべての計算はR
R形式の命令でレジスタを用いて行う。云い換えれば、
最初に生成される中間コードにおいては、算術様データ
に対して、SR形式、R5形式及びSS形式の命令は全
く使用されない。次に、共通式の除去、ループ不変式の
移動、演算子の強さの低下、デッド・コードの除去、と
いった標準の技法により、プログラムを最適化する。次
に、コード中で所定のパターンを探索する。このパター
ンは、ロード命令(L)及びその後のレジスタ操作命令
(op)又は記憶命令(S T)を含む、これらの命令
は同じレジスタ又は記憶位置を指定する。所定のパター
ンが見つかると、それをSR形式、RS形式又はSS形
式の命令で置換える。
上述のパターン探索をレジスタ割当ての後でも行うと最
適化の効率を更に上げることができる。
レジスタ割当ては各命令に実際のレジスタを割当てるも
ので、各記号レジスタを実際の機械レジスタで置換える
ことにより達成される。これは公知、の技術である。最
終的には、計算機で実行可能な機械コードが生成される
E、実施例 以下の説明では、2アドレスの命令形式を仮定している
。命令形式としては、RR形式、SR形式(システム/
370ではRX形式と呼んでいる)、R8形式、および
SS形式を使用する。
本発明によるコード改良の例として、コンパイルされる
原始プログラムが次の割当てステートメントを含んでい
るものと仮定する。
A=A+B AおよびBは整数や浮動小数点数などの算術変数である
。このステートメントの実行開始時にAおよびBがまだ
レジスタにロードされていなかったとする。ここでは次
の4種類の加算命令を実行できる計算機を仮定している
A  RRニ一方のレジスタの内容を他方のレジスタの
内容に加算する。
A  SR:記憶位置の内容をレジスタの内容に加算す
る。
AR8:レジスタの内容を記憶位置の内容に加算する。
A  SS:成る記憶位置の内容を別の記憶位置の内容
に加算する。
使用する側から見ると、RR形式の加算命令ARRが最
も好ましく、次いでSR形式及びR8形式と続き、SS
形式の加算命令A  SSが一番劣る。割当てステート
メントに関して生成できる最良のコードは、A及びBが
割当てステートメントの後で使用されるか否かによって
左右される。
これには次の4つの場合がある。
(1)割当てステートメントの後でA及びBが共に“生
″。
(2)Aが“生″で、Bが11死”。
(3)Aが″死″′で、Bが生”。
(4)A及びBが共に1死″。
本実施例では、上記の4つの場合に対し次のような機械
コード・シーケンスを用いる。
(1)L     rl、A L        r2、 B A   RRrl、  r2 (2)L       rl、A A   SRrl、B (3)L       rl、B A   R5rl、A (4)  A  SS   A、B 割当てステートメントで加算を指定する場合以外にも、
例えばアレイ要素をアドレス指定するときのように、加
算が要求されることがある0本発明が適用されるのは、
加算とそのオペランドの他での使用との間に多数の命令
がある場合である(オペランドがレジスタにロードされ
てしまっていても差支えない)。
前述のように、本発明は特にIBMシステム/370及
びMC68000での最適化コンパイラに適している。
使用するアセンブリ言語はIBMシステム/370で一
般に使用しているものに似ている。具体的に云うと、命
令は2アドレス形式であり、記憶命令及びR5形式の命
令を除く他のすべての命令においては第1オペランドが
ターゲットであり、記憶命令及びRS形式の命令におい
ては第2オペランドがターゲットである。
SR形式、RS形式及びSS形式の命令の場合、もしコ
ンパイラがこれらの命令を早期に生成すると、それらは
一般のプログラム中に留まり、即ち最終目的コード中に
存在し、このような命令をよく使用するプログラムは、
効率が悪くなる。一方、これらの命令の使用によって効
率が改善されることもあるので、これらの命令を全く使
用しないというのも望ましくない。
早期に生成された命令がプログラム中に留まる傾向があ
ることの理由は、そのような命令による主記憶装置の参
照がレジスタの参照に比べて、コンパイラによる解析が
戴しいためである。従って、同じ記憶位置を参照するの
に幾通りもの方法があるが、汎用レジスタの参照方法は
1つしかない。
第1図は本発明が如何にして大域最適化コンパイラに適
応するかを示している。本発明は、゛′命令選択″と呼
ばれるモジュールとして示しである。
このモジュールはコンパイル処理中にレジスタ割当ての
前後で2回呼出される(ブロック4及び6)。
次に第1図を参照しながら本発明の詳細な説明する。
(1)まず、算術様データ(バイト、ハーフワード、フ
ルワード)に対してSR形式、R5形式及びSS形式の
命令を完全に排除した中間コードを生成する(ブロック
1及び2)。この時点でのコードは、ロード命令及び記
憶命令によってのみ主記憶装置を参照し、すべての計算
はRR形式の命令によりレジスタを用いて行われる。(
ここでは、使用可能なレジスタの数が制限されないもの
と仮定する。) (2)次に、共通式の除去、ループ不変式の移動、演算
子の強さの低下、デッド・コード除去、といった標準の
技法によりプログラムを最適化する(ブロック3)。
(3)コード中で所定のパターン(後述する)を探索し
、見つかるとそれをSR形式、RR形式又はSS形式の
命令で置換える(ブロック4)。
(4)次にレジスタを割当てる(ブロック5)。
即ち、各記号レジスタを機械レジスタと関連付け、必要
な場合は″スピル″コードを生成する。′スピル′″コ
ードは、記憶命令及びロード命令から成り、レジスタに
入れたい数量が使用可能な機械レジスタの数を超えた場
合に必要である。
(5)ステップ(3)を繰返す(ブロック6)。今回は
、割当てられた実レジスタを用いて中間コードを処理す
る。
(6)最後に機械コードを生成する(ブロック7)。
命令選択の前に大域最適化(ブロック3)を行うには3
つの理由がある。第1の理由は、大域最適化によりコー
ド選択に必要な゛′最終使用”ビットが各レジスタ・オ
ペレンランド毎に得られるためである。第2の理由は、
大域最適化を行う場合。
SR形式、R8形式又はSS形式の命令が中間言語コー
ド中に存在しないためである。従ってオプテイマイザが
簡単になる。第3の理由は、命令が基本的であればある
程、最適化の効率が上がるが烏である。基本的な操作は
共通化してループの外に移すことができるが、それらを
組合せて1つの命令にしてしまうと、共通化或いはルー
プ外への移動が戴しくなる。この例を下記に示す。
最良の結果を得るため、命令選択はレジスタ割当ての前
後で行う。レジスタ割当ての前に行うのは、命令選択に
よってレジスタが解放されることが多いからである。例
えば、次の(1)から(2)への変更を行うと、レジス
タr2が解放される。
(1)L     rl、A L     r2、B A  RRrl、r2 (2)L     vl、A A  SRrl、B 従って、次のレジスタ割当てで、より良いコードを生成
できる(スピル命令が少なくなる)、レジスタ割当ての
後でコード選択を繰返す理由は、レジスタ割当てで生成
された次のような″スピル”コードがA  SR命令を
用いてうまく変更できるからである。
L     rl、5PILLI L     r2.5PILL2 A  RRrl、r2 しかし、2回目の命令選択は1回目よりも得るものが少
なく、従って2回目はオプションにしておいて、最高度
の最適化が要求される場合にのみ実行するようにしても
よい。
命令選択の詳細は本発明の主題からは外れるが、便宜上
第2図を参照しながら説明しておく。
ラベル間(プログラム結合点間)でコードを走査し、次
のようなパターン(ブロック15のパターン1)を探索
する。
L   rl、d (ri、rb) OP  rl、r2 ST  rl、d (ri、rb) ○P”はレジスタを用いて何らかの操作を行うレジスタ
操作命令を表わし、71 S T TJは記憶命令を表
わす。”d (ri、rb)”は、変位d、インデック
ス・レジスタri及びベース・レジスタrbを用いて主
記憶装置を参照することを示す。
ロード命令り及び記憶命令STのd、ri及びrbの値
は同じである。即ち、これらの命令は同じ記憶位置を参
照する。
次の(イ)乃至(へ)の条件が満たされていると、記憶
命令STを”OP  R8r2. d (ri、rb)
”で置換え、ロード命令り及びレジスタ操作命令OPを
削除する(デッド・コード除去のパスがあれば、そこで
削除)。
(イ) ロード命令りと記憶命令STの間で記憶及びサ
ブルーチン呼出しが行われない。
(ロ) ロード命令りと記憶命令STの間でri及びr
bのセットがない。
(ハ) ロード命令りと記憶命令STの間でrlが使用
されていない(記憶命令STのri及びrbもrlと異
なっていなければならない)。
(ニ) レジスタ操作命令OPと記憶命令STの間でr
2のセットがない。
(ホ)  rlを最後に使用するのが記憶命令STであ
る。
(へ) レジスタ操作命令OPが等価なR5形式の命令
″○P  RS”を持っている。
パターン1と同時に次のパターン2も探索する。
パターン1及びパターン2が両方共生じた場合はパター
ン1の変換を行う。
L  rl、d (ri、rb) OP  r2、rl 次の条件(イ)乃至(ホ)が満たされていると、レジス
タ操作命令opを“OP  SRr2、d(ri、rb
)”で置換え、ロード命令りを削除する(デッド・コー
ド除去のパスがあれば、そこで削除)。
(イ) ロード命令りとレジスタ操作命令OPの間で記
憶及びサブルーチン呼出しが行われない6(ロ) ロー
ド命令りとレジスタ操作命令○Pの間でri及びrbの
セットがない。
(ハ) ロード命令りとレジスタ操作命令OPの間、で
rlが使用されていない。
(ニ)  rlを最後に使用するのがレジスタ操作命令
OPである。
(ホ) レジスタ操作命令oPが等価なSR形式の命令
”OP  SR”を持っている。
パターン1及びパターン2と同時に次のパターン3も探
索する。
L   rl、di (ril、rbl)ST  rl
、d2(rl2、rb2)ロード命令り及び記憶命令S
Tは、それぞれ異なった記憶位置をアドレス指定するも
のであってもよい。次の(イ)乃至(ホ)の条件が満た
されていると、記憶命令STを“MVd2(rl2、r
b2)、di (ril、rbl)”で置換え、ロード
命令りを削除する(デッド・コード除去のパスがあれば
、そこで削除)。“M V ”は移動命令である。
(イ) ロード命令りと記証賞象STの間で記憶及びサ
ブルーチン呼出しが行われない。
(ロ) ロード命令りと記憶命令STの間でril及び
rblのセットがない。
(ハ) ロード命令りと記憶命令STの間でrlが使用
されていない。
(ニ)  rlを最後に使用するのが記憶命令STであ
る。
(ホ) ロード命令り及び記憶命令STの対がより好ま
しい記憶載量移動命令を持っている。
以上のようなパターン探索を行えば、システム/370
やMC68000におけるSR形式、R8形式及びSS
形式の命令を用いるのに有利な場所を見つけることがで
きる。計算機がもつと複雑な命令(例えば、3つのアド
レスを使用するSS形式の加算命令)を持っている場合
にも同様なパターン探索を行える。
パターン探索においては、レジスタの使用が最終使用か
どうかを知ることが重要である。これはプログラムの順
方向探索によってオン・ザ・フライ式に決定することも
できるが、コンパイル時間を考えると、各オペランドに
関連する最終使用ビ、ットを大域オプテイマイザ(第1
図のブロック3)にセットさせるのが好ましい。
例えば、原始プログラムが次のようなステートメントを
含んでいたとする。
X=X−Y するとコンパイラはまず次のようなコードを生成する。
L   rl、X(rb) L   r2、Y (rb) S   r1% r2 ST  rl、X (rb) at S″は減算命令である。rlが他で使用されてい
−なければ、1番目、3番目及び4番目の命令はパター
ン1に適合する。従って、最初のコードは下記のコード
で置換えられる。
L     r2、Y(rb) S  R5r2.X(rb) 最初のコードにおいてrlが記憶命令STの後でも使用
されている場合は、パターン1に代ってパターン2に適
合し、従ってコードは次のようになる。
L     rl、X(rb) S  SRrl、Y  (rb) ST    rl、X(rb) 最初のコードにおいてrl及びr2が両方共に記憶命令
STの後でも使用されていると、パターンl及びパター
ン2には適合せず、コードは元の形のまま残される。こ
うしておくと、rl及びr2を後で使用する場合、それ
らの内容を主記憶装置から再ロードする必要がない。
他の例として、原始プログラムが次のステートメントを
含んでいたとする。
X (I) =Y これは工を変数とするループを表わす。ループ中でYが
変更されるか否かには関係なく、最初に次のようなコー
ドが生成される。
L   rl、Y(rbl) ST  rl、X(rb2、ri) 次にオプテイマイザは、Yがループ中で不変であれば、
″コード移動”技法によってロード命令りをループの外
に移す、Yが可変の場合は、コードはそのままである。
従って、次のような2種類のコードが可能である。
(1)ループ:・・・ L   rl、Y(rbl) ST  rl、X(rb2、ri) (2)      L   rl、Y (rbl)ルー
プ:・・・ ST  rl、X(rb2、ri) 次にパターン探索を行う、コード(1)はパターン3に
適合するが、コード(2)は適合しない、従って最終コ
ードは次の通りである。
(1)ループ:・・・ MVX(rb2、ri)、Y(r b 1)(2)  
  L   rl、Y (rbl)ループ:・・・ ST  rl、X (rb2、ri) 記憶命令STが移動命令MVより速く実行できるのであ
れば、実行時間の点で上記のコードが最良である。
上述のように、ロードや記憶のような基本的な命令は場
合によってはループの外に移すことができるが、それら
の組合せをループの外に移すことはできない。従って、
大域最適化の効率は、基本的な命令を取扱う場合は高い
が、移動命令のようなより複雑な命令の場合はそれ程で
はない。
要約して云うと、本発明に従えば、SR形式、R5形式
及びSS形式の命令を、それらが有用なときにだけ生成
することができる。
システム/370のマスク・テスト命令TMやMC68
000の“イミデイエイト”命命のような他の同様な命
令も本発明により適宜に生成することができる。′イミ
デイエイト”命令の場合は。
即値データが2回以上使用されるか、或いはループ中で
使用されるのであれば、即値データをレジスタにロード
してそれを参照するようにした方がよい。1回しか使用
されないのであれば、それを使用する命令の中に即値デ
ータをコンパイルしておくとよい。
F0発明の効果 本発明に従えば、レジスタ及び主記憶装置を効率よく参
照するコードを生成することができる。
【図面の簡単な説明】
第1図は本発明を適用できる最適化コンパイラの流れ図
。 第2図は命令選択のステップを示す流れ図。 出願人  インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人  弁理士  頓  宮  孝  −(外1名) −at化コレノくイラ 第1図

Claims (1)

  1. 【特許請求の範囲】 最適化コンパイラにおいて記憶装置参照の効率を上げる
    ために下記の(イ)乃至(ハ)のステップを実行するコ
    ード生成方法。 (イ)記憶装置の参照をロード命令及び記憶命令だけで
    行い且つすべての計算をRR形式の命令でレジスタを用
    いて行う中間コードを生成するステップ。 (ロ)上記中間コードを最適化するステップ。 (ハ)ロード命令及びその後のレジスタ操作命令又は記
    憶命令を含む所定のパターンを探索し、該パターンが見
    つかると、それをSR形式、RS形式又はSS形式のよ
    り短い命令シーケンスで置換えるステップ。
JP60283223A 1985-02-04 1985-12-18 コード生成工程での命令形式選択方法 Granted JPS61183744A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US697675 1985-02-04
US06/697,675 US4656582A (en) 1985-02-04 1985-02-04 Generating storage reference instructions in an optimizing compiler

Publications (2)

Publication Number Publication Date
JPS61183744A true JPS61183744A (ja) 1986-08-16
JPH0519173B2 JPH0519173B2 (ja) 1993-03-16

Family

ID=24802087

Family Applications (1)

Application Number Title Priority Date Filing Date
JP60283223A Granted JPS61183744A (ja) 1985-02-04 1985-12-18 コード生成工程での命令形式選択方法

Country Status (5)

Country Link
US (1) US4656582A (ja)
EP (1) EP0190622B1 (ja)
JP (1) JPS61183744A (ja)
CA (1) CA1223665A (ja)
DE (1) DE3685339D1 (ja)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4782444A (en) * 1985-12-17 1988-11-01 International Business Machine Corporation Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering
US5142681A (en) * 1986-07-07 1992-08-25 International Business Machines Corporation APL-to-Fortran translators
JP2539385B2 (ja) * 1986-08-08 1996-10-02 株式会社日立製作所 情報処理装置
US4860203A (en) * 1986-09-17 1989-08-22 International Business Machines Corporation Apparatus and method for extracting documentation text from a source code program
US4965724A (en) * 1987-03-05 1990-10-23 Oki Electric Industry Co., Ltd. Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program
US4866638A (en) * 1988-03-04 1989-09-12 Eastman Kodak Company Process for producing human-computer interface prototypes
US5122949A (en) * 1988-07-27 1992-06-16 Bmc Software, Inc. Data transmission optimizer including device-specific attribute elmination
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
US5202995A (en) * 1989-10-12 1993-04-13 International Business Machines Corporation Method for removing invariant branches from instruction loops of a computer program
JPH03150636A (ja) * 1989-11-08 1991-06-27 Matsushita 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
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
IL98248A0 (en) * 1991-05-23 1992-06-21 Ibm Israel Instruction scheduler for a computer
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
US5418971A (en) * 1992-04-20 1995-05-23 International Business Machines Corporation System and method for ordering commands in an automatic volume placement library
US5469572A (en) * 1992-12-01 1995-11-21 Taylor; James M. Post compile optimizer for linkable object code
US6425124B1 (en) * 1993-11-08 2002-07-23 Matsushita Electric Industrial Co. Ltd. Resource allocation device for reducing the size and run time of a machine language program
US5537620A (en) * 1994-09-16 1996-07-16 International Business Machines Corporation Redundant load elimination on optimizing compilers
US5757966A (en) * 1995-07-11 1998-05-26 Xerox Corporation High-speed encoder
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
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
US6086632A (en) * 1996-10-31 2000-07-11 Nec Corporation Register optimizing compiler using commutative operations
US5890000A (en) * 1996-12-04 1999-03-30 International Business Machines Corporation Cooperation of global and local register allocators for better handling of procedures
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
US6029005A (en) * 1997-04-01 2000-02-22 Intel Corporation Method for identifying partial redundancies in a new processor architecture
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
CA2205797C (en) * 1997-05-22 2001-04-24 Andrew Wilfred Macleod A system for local context spilling for graph colouring register allocators
US5966537A (en) * 1997-05-28 1999-10-12 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing an executable computer program using input data
US5953531A (en) * 1997-07-25 1999-09-14 International Business Machines Corporation Method of, system for, and computer program product for minimizing loop execution time by optimizing block/tile sizes
GB2327784B (en) * 1997-07-28 2002-04-03 Microapl Ltd A method of carrying out computer operations
JPH11134017A (ja) * 1997-10-27 1999-05-21 Honda Motor Co Ltd オフラインティーチング方法
US6317873B1 (en) * 1998-10-14 2001-11-13 Alcatel Usa Sourcing, L.P. Assembly language translator
US6317876B1 (en) * 1999-06-08 2001-11-13 Hewlett-Packard Company Method and apparatus for determining a maximum number of live registers
US6675374B2 (en) 1999-10-12 2004-01-06 Hewlett-Packard Development Company, L.P. Insertion of prefetch instructions into computer program code
US7120906B1 (en) * 2000-04-28 2006-10-10 Silicon Graphics, Inc. Method and computer program product for precise feedback data generation and updating for compile-time optimizations
JP3902147B2 (ja) * 2003-03-04 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
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
US7921416B2 (en) 2006-10-20 2011-04-05 Yahoo! Inc. Formal language and translator for parallel processing of data
JP2011141676A (ja) * 2010-01-06 2011-07-21 Toshiba Corp 言語処理装置、言語処理方法およびコンピュータプログラムプロダクト
CN112257870B (zh) * 2019-11-08 2024-04-09 安徽寒武纪信息科技有限公司 机器学习指令的转换方法及装置、板卡、主板、电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58161045A (ja) * 1982-03-19 1983-09-24 Fujitsu Ltd コンパイラにおけるレジスタ管理方式

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4435753A (en) * 1980-10-31 1984-03-06 International Business Machines Corporation Register allocation system using recursive queuing during source code compilation
US4567574A (en) * 1983-03-14 1986-01-28 International Business Machines Corporation Optimizing cobol object code instruction path length with respect to perform statements

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58161045A (ja) * 1982-03-19 1983-09-24 Fujitsu Ltd コンパイラにおけるレジスタ管理方式

Also Published As

Publication number Publication date
EP0190622B1 (en) 1992-05-20
CA1223665A (en) 1987-06-30
EP0190622A2 (en) 1986-08-13
JPH0519173B2 (ja) 1993-03-16
US4656582A (en) 1987-04-07
EP0190622A3 (en) 1988-06-22
DE3685339D1 (de) 1992-06-25

Similar Documents

Publication Publication Date Title
JPS61183744A (ja) コード生成工程での命令形式選択方法
US4763255A (en) Method for generating short form instructions in an optimizing compiler
US7185327B2 (en) System and method for optimizing operations via dataflow analysis
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
KR100518584B1 (ko) 공유 라이브러리 시스템 및 상기 시스템 구축 방법
Ganapathi et al. Retargetable compiler code generation
EP0273130B1 (en) Reassociation process for code optimization
EP0214751B1 (en) A method for vectorizing and compiling object code
EP0373361B1 (en) Generating efficient code for a computer with dissimilar register spaces
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
Iliffe et al. A dynamic storage allocation scheme
US6117185A (en) Skip list data storage during compilation
US7010785B2 (en) Eliminating cold register store/restores within hot function prolog/epilogs
US7017154B2 (en) Eliminating store/restores within hot function prolog/epilogs using volatile registers
US5515535A (en) System and method for parallel variable optimization
US6625806B1 (en) Language processing method and language processing system improving use efficiency of cache memory
US6922830B1 (en) Skip list data storage during compilation
Zelkowitz et al. Optimization of structured programs
EP0180077B1 (en) A data processing machine for compiling computer programs
Mendicino et al. The LRLTRAN compiler
Kessler et al. EPIC-a retargetable, highly optimizing Lisp compiler
US7676799B1 (en) Address simplification by binary transformation
US6173443B1 (en) Method of compiling a loop
Wichmann PL516, an Algol-like Assembly Language for DDP-516
Marcotty et al. The systems programming language, Malus