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