JPS61110240A - 最適化コンパイラ - Google Patents
最適化コンパイラInfo
- Publication number
- JPS61110240A JPS61110240A JP19403485A JP19403485A JPS61110240A JP S61110240 A JPS61110240 A JP S61110240A JP 19403485 A JP19403485 A JP 19403485A JP 19403485 A JP19403485 A JP 19403485A JP S61110240 A JPS61110240 A JP S61110240A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- bits
- register
- valid
- bit
- 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.)
- Pending
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/447—Target code generation
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、産業上の利用分野
本発明は、最適化アルゴリズムを使ってコードの品質が
改善される、ディジタル計算機用のコンパイラに特に有
用である。またアセンブラにも使用できるが、最適化ア
センブラは一般的ではない。
改善される、ディジタル計算機用のコンパイラに特に有
用である。またアセンブラにも使用できるが、最適化ア
センブラは一般的ではない。
本発明は、コンパイラまたはアセンブラによって生成さ
れた目的コードの品質を改善するものである。
れた目的コードの品質を改善するものである。
本発明は、アキュムレータまたは一組の汎用レジスタを
使用し、オペランドの長さが異なる2種以上の形式で存
在する、一種または数種の命令形式をもつ計算機に適用
できる。さらに、本発明を適用するには、より短い形式
の命令が使用できる場合、その短形命令の方が有利とな
る何らかの理由がなければならない、多くの機種では、
実行がより速くまた少しの記憶域しか占めないため、短
かい形式の方が有利である。
使用し、オペランドの長さが異なる2種以上の形式で存
在する、一種または数種の命令形式をもつ計算機に適用
できる。さらに、本発明を適用するには、より短い形式
の命令が使用できる場合、その短形命令の方が有利とな
る何らかの理由がなければならない、多くの機種では、
実行がより速くまた少しの記憶域しか占めないため、短
かい形式の方が有利である。
B、開示の概要
命令セット中の一部の命令が短形式と長形式とをもち、
短形式の命令は実行速度が速いかまたはより少しの記憶
域しか占めないような機械用の、コンパイラまたはアセ
ンブラで生成されるコードの品質を改善する方法、この
方法は、まず各計算命令の結果オペランドのどのビット
が後に有効に使用されるかを、プログラムを逆方向にた
どる事によって決定する0次にそのようにして計算され
た有効ビットを用いて、有効ビット位置では正しい結果
を与える短形式の命令を使用して効率的なコードの生成
を行なう。
短形式の命令は実行速度が速いかまたはより少しの記憶
域しか占めないような機械用の、コンパイラまたはアセ
ンブラで生成されるコードの品質を改善する方法、この
方法は、まず各計算命令の結果オペランドのどのビット
が後に有効に使用されるかを、プログラムを逆方向にた
どる事によって決定する0次にそのようにして計算され
た有効ビットを用いて、有効ビット位置では正しい結果
を与える短形式の命令を使用して効率的なコードの生成
を行なう。
C0従来技術
]ンパイラによって生成されるコードの品質は、最初の
コンパイラが生成されて以来の問題である。
コンパイラが生成されて以来の問題である。
市販された最初のコンパイラであるIBMのFORTR
AN Iコンパイラの主目的は、科学計算の分野で、
アセンブリ言語プログラマがr手ノでコード化すること
によって直接生成されるコードの品質に匹敵する目的コ
ードを生成することであった。
AN Iコンパイラの主目的は、科学計算の分野で、
アセンブリ言語プログラマがr手ノでコード化すること
によって直接生成されるコードの品質に匹敵する目的コ
ードを生成することであった。
今日、計算機が使用できるあらゆる分野で使用できる高
水準言語が設計されている。最初のFORTRAN言語
TR法範囲のプログラミング・タスクに使用できるよう
になっている。しかし、特に得られるコードを生産環境
に使用すべき場合には、コンパイラで生成されるコード
の品質が高いことが一層重要である。熟練したアセンブ
リ言語プログラマが生成するコードは、依然としてコン
パイラで生成されるコードの測定基準となっている。
水準言語が設計されている。最初のFORTRAN言語
TR法範囲のプログラミング・タスクに使用できるよう
になっている。しかし、特に得られるコードを生産環境
に使用すべき場合には、コンパイラで生成されるコード
の品質が高いことが一層重要である。熟練したアセンブ
リ言語プログラマが生成するコードは、依然としてコン
パイラで生成されるコードの測定基準となっている。
1950年代以降、コンパイラで生成されるコードの品
質を改善するための多数の最適化技術が開発され精巧化
されてきた。事実、こ九らの最適化法の多くは原理的に
知られており、最初のFORTRANコンパイラを生成
したチームが何らかの形で使用してきた。
質を改善するための多数の最適化技術が開発され精巧化
されてきた。事実、こ九らの最適化法の多くは原理的に
知られており、最初のFORTRANコンパイラを生成
したチームが何らかの形で使用してきた。
最適化コンパイラでしばしば使用されている最適化法は
、2つのクラスに区分でき、一般に大域的最適化および
ビープホール式最適化と呼ばれる。
、2つのクラスに区分でき、一般に大域的最適化および
ビープホール式最適化と呼ばれる。
大域的最適化は、コンパイルされるプログラム全体の分
析にもとづくものである。その例は、「コル式最適化は
、「基本ブロック」や隣接する2個だけの命令など比較
的小さなプログラム領域の分析にもとづくものである。
析にもとづくものである。その例は、「コル式最適化は
、「基本ブロック」や隣接する2個だけの命令など比較
的小さなプログラム領域の分析にもとづくものである。
本発明は大域的最適化としてまたは基本ブロック・レベ
ルで実現することができ、また大域的分析から通常は容
易に入手できる部分的な大域的情報をの 使用し1次にこY情報を基本ブロック・レベルで精巧化
することができる。沢山の情報が利用できるほど、効果
が高くなる。大域的分析からの情報のうち、ライブ/プ
ツト情報を使うと有利である。
ルで実現することができ、また大域的分析から通常は容
易に入手できる部分的な大域的情報をの 使用し1次にこY情報を基本ブロック・レベルで精巧化
することができる。沢山の情報が利用できるほど、効果
が高くなる。大域的分析からの情報のうち、ライブ/プ
ツト情報を使うと有利である。
この情報は、ある命令の各レジスタ・オペランドについ
て、そのレジスタを新しい値で再ロードする前に再度使
用できるかどうかを教えるものである。命令のレジスタ
・オペランドがr死」んでいる場合、その命令がそのレ
ジスタの「最終使用」ということになり、命令の実行後
、プログラム実行に影響を与えずにレジスタの内容を何
らかの方法で変更することができる。一方、命令のレジ
スタ・オペランドが「生」きている場合は、レジスタの
内容を再度使用する実行経路があり得るため、命令実行
後にレジスタの内容は変更できない。
て、そのレジスタを新しい値で再ロードする前に再度使
用できるかどうかを教えるものである。命令のレジスタ
・オペランドがr死」んでいる場合、その命令がそのレ
ジスタの「最終使用」ということになり、命令の実行後
、プログラム実行に影響を与えずにレジスタの内容を何
らかの方法で変更することができる。一方、命令のレジ
スタ・オペランドが「生」きている場合は、レジスタの
内容を再度使用する実行経路があり得るため、命令実行
後にレジスタの内容は変更できない。
下記の参照文献で、ライブ変数分析が考察されている。
J、D、 Ullman、 Irデータ流れ分析技術ノ
調査」r第2回米日計算機会議記事録J、AFIPSプ
レス、ニューシャーシー州モントヴエール、1975年
(“A 5urve of Data Flow^n
alSiS7、’ 5econd USA−Japan
Co+1puterConference Pro
ceedings、AFIPS Press、Mon
tvale+New Jersey、 335−342
頁(参考文献37件))。
調査」r第2回米日計算機会議記事録J、AFIPSプ
レス、ニューシャーシー州モントヴエール、1975年
(“A 5urve of Data Flow^n
alSiS7、’ 5econd USA−Japan
Co+1puterConference Pro
ceedings、AFIPS Press、Mon
tvale+New Jersey、 335−342
頁(参考文献37件))。
A、 V、 AhaおよびJ、 D、υl1man、
rコンパイラ設計の原理」、アデイソンーウエスリー、
1977年(“Pr1nciples of Co+5
pilar Design”。
rコンパイラ設計の原理」、アデイソンーウエスリー、
1977年(“Pr1nciples of Co+5
pilar Design”。
Addiso−weslay)
M、 S、 Hecht、 r計算機プログラムの流れ
分析」エルセピア、ニューヨーク州ノースホランド、1
977年(”Folv Analysis of Co
mputerPrograms”、 Hlsevier
、 North−Holland、 New York
)モトローラMC68000は、本発明を使用できる計
算機の一例である。この計算機は、下記のように3つの
形式の加算命令及び3つの形式の即値加算命令を有する
。
分析」エルセピア、ニューヨーク州ノースホランド、1
977年(”Folv Analysis of Co
mputerPrograms”、 Hlsevier
、 North−Holland、 New York
)モトローラMC68000は、本発明を使用できる計
算機の一例である。この計算機は、下記のように3つの
形式の加算命令及び3つの形式の即値加算命令を有する
。
ADD、L rl、 r2 ADDl、L 02
3. rl^DD、V rl、 r2 ^DDI
J [23,rl^DD、B rl、 r2 A
DDl、B 023. rlADD、L (ロング
加算)は、レジスタr1の32ビツトの内容全体をレジ
スタr2に加算し、結果をr2に入れる。ADD、W
(ワード加算)は、rlの右側16ビツトをr2の右側
16ビツトに加算し、r2の左側16ビツトは元のまま
にする。ADD、B (バイト加算)は、rlの右側8
ビツトをr2の右側8ビツトに加算し、r2の左側24
ビツトは元のままにする。同様に、ADDl、L (ロ
ング即値加算)は、ある数(123と示しである)を、
レジスタr1の32ビツトの内容全体に加算し、ADD
l、Wは、右側16ビツトに加算し、ADDl、Bは右
側8ビツトに加算する。
3. rl^DD、V rl、 r2 ^DDI
J [23,rl^DD、B rl、 r2 A
DDl、B 023. rlADD、L (ロング
加算)は、レジスタr1の32ビツトの内容全体をレジ
スタr2に加算し、結果をr2に入れる。ADD、W
(ワード加算)は、rlの右側16ビツトをr2の右側
16ビツトに加算し、r2の左側16ビツトは元のまま
にする。ADD、B (バイト加算)は、rlの右側8
ビツトをr2の右側8ビツトに加算し、r2の左側24
ビツトは元のままにする。同様に、ADDl、L (ロ
ング即値加算)は、ある数(123と示しである)を、
レジスタr1の32ビツトの内容全体に加算し、ADD
l、Wは、右側16ビツトに加算し、ADDl、Bは右
側8ビツトに加算する。
命令ADD、WとADD、Bは、ADD、Lよりも実行
が速く、したがってどちらでもよい状況ではADD、L
よりも有利である。命令ADD I 。
が速く、したがってどちらでもよい状況ではADD、L
よりも有利である。命令ADD I 。
WとADDl、BはADDl、Lよりも実行が速く、ま
た少しの記憶域しか占めず、したがってADDl、Lよ
りも有利である。
た少しの記憶域しか占めず、したがってADDl、Lよ
りも有利である。
モトローラMC:68000では、他の多数の型式の命
令にも「長」形式と「短」形式があり、短形の方が実行
が速く、またしばしば少しの記憶域しか占めない、命令
のタイミングを含めてさらに詳シイコトは、rMc68
000 16ビツトまイクロプロセッサ・ユーザ用マニ
ュアル」第2版、モトローラ社(1980年1月)(“
MC:68000 16−bit Microproc
essor User’s Manual”、5eco
nd edition、 Motorola、 Inc
、、 )に出ているe本発明によって実現されるコード
改善の一例として、コンパイラが下記の命令列を生成し
たものと仮定する。
令にも「長」形式と「短」形式があり、短形の方が実行
が速く、またしばしば少しの記憶域しか占めない、命令
のタイミングを含めてさらに詳シイコトは、rMc68
000 16ビツトまイクロプロセッサ・ユーザ用マニ
ュアル」第2版、モトローラ社(1980年1月)(“
MC:68000 16−bit Microproc
essor User’s Manual”、5eco
nd edition、 Motorola、 Inc
、、 )に出ているe本発明によって実現されるコード
改善の一例として、コンパイラが下記の命令列を生成し
たものと仮定する。
ADD、L r2.rl
SUBl、L $16.r1
MOVE、W rl、6 (r5)
また、レジスタr1の右側16ビツトを、レジスタr5
の内容+6でアドレス指定される記憶位置に記憶するM
OVE、W命令が、レジスタr1の最終使用であると仮
定する。その場合、本発明ではADD、L命令の代りに
ADD、、Wを使い、5UB1.L命令の代りにSUB
1.Wを使う。
の内容+6でアドレス指定される記憶位置に記憶するM
OVE、W命令が、レジスタr1の最終使用であると仮
定する。その場合、本発明ではADD、L命令の代りに
ADD、、Wを使い、5UB1.L命令の代りにSUB
1.Wを使う。
後者の形は前者よりも実行が速く、また5UBI。
W命令は5UB1.Lよりも少しの記憶域しか占めない
。
。
D0発明が解決しようとする問題点
ある生成された命令を、プログラムによって実行される
計算全体を変えないという意味では同等るモジュールを
もつ最適化コンパイラを提供することが、本発明の主目
的である。
計算全体を変えないという意味では同等るモジュールを
もつ最適化コンパイラを提供することが、本発明の主目
的である。
E1問題点を解決するための手段
本発明では、プログラムの「ライブネス」分析の概念の
一般化が利用される。
一般化が利用される。
本発明では、通常のやり方のようにレジスタ中のどこか
のビットが生きているかどうかを示す要約ビットのみを
計算するのではなく、この一般化を利用して汎用レジス
タのどのビットがプログラムのある時点で「生きて」い
るかが計算される。
のビットが生きているかどうかを示す要約ビットのみを
計算するのではなく、この一般化を利用して汎用レジス
タのどのビットがプログラムのある時点で「生きて」い
るかが計算される。
以下の説明では、こめ一般化を「有効ビット分析」と呼
ぶことにする。
ぶことにする。
モトローラMC68000用の最適化コンパイラとして
、本発明を説明する。
、本発明を説明する。
本発明の適用の第1段階は、コンパイラされるプログラ
ムの「有効ビット分析」を行なうことである。これは、
各命令について、その命令の結果のどのビットが「有効
Jであるかを決定するプロセスである。(話を簡単にす
るため、結果は1つしかないと仮定する。)あるビット
が計算された後にプログラムによって使用される場合、
そのビットは有効である。これは、結果の各ビットを検
査してそれが「生きているJないし「有効である」かど
うかを決定する以外は1周知の「ライブネス」と同じ概
念である0通常のライブネス分析では、各命令について
、結果の何れかのビットが「生きでいる」ないし有効で
ある」かどうかを示す要約ビットを、1つだけ計算する
。有効ビット分析を行なうことができる水準は3種ある
。
ムの「有効ビット分析」を行なうことである。これは、
各命令について、その命令の結果のどのビットが「有効
Jであるかを決定するプロセスである。(話を簡単にす
るため、結果は1つしかないと仮定する。)あるビット
が計算された後にプログラムによって使用される場合、
そのビットは有効である。これは、結果の各ビットを検
査してそれが「生きているJないし「有効である」かど
うかを決定する以外は1周知の「ライブネス」と同じ概
念である0通常のライブネス分析では、各命令について
、結果の何れかのビットが「生きでいる」ないし有効で
ある」かどうかを示す要約ビットを、1つだけ計算する
。有効ビット分析を行なうことができる水準は3種ある
。
1、通常のライブネス分析と同じく、大域的。
2、大域ライブネス分析からの援助を伴う基本ブロック
上(実際には分岐間)の水準。
上(実際には分岐間)の水準。
3、援助なしの基本ブロック上(分岐間)の水準。
上記の最初の選択枝は、計算が最も高価になるが、最高
の結果を与える。最後のものは、計算が最も安価である
が、最も貧弱な結果を与える。第2のものは、何らかの
形でライブネス分析を行なった場合に(3)よりも計算
が少しだけ高価になり、中間の品質の結果を与える折衷
案である。ここでは選択枝(2)について説明するが、
本発明はこの特定の方法に限られるものではない。
の結果を与える。最後のものは、計算が最も安価である
が、最も貧弱な結果を与える。第2のものは、何らかの
形でライブネス分析を行なった場合に(3)よりも計算
が少しだけ高価になり、中間の品質の結果を与える折衷
案である。ここでは選択枝(2)について説明するが、
本発明はこの特定の方法に限られるものではない。
F、実施例
第1図は、典型的な最適化コンパイラの枠内で、どうす
れば水準(2)の有効ビット分析(ブロック5)を最も
都合よく行なえるかを示したものである0重要なことは
、有効ビット分析の前に大域的コード最適化(ブロック
3)を行なうことである。これは、通常のライブネス分
析が大域的コード最適化の一部分であり、ライブネス分
析の副産物である「最終使用」ビットが必要な為である
。
れば水準(2)の有効ビット分析(ブロック5)を最も
都合よく行なえるかを示したものである0重要なことは
、有効ビット分析の前に大域的コード最適化(ブロック
3)を行なうことである。これは、通常のライブネス分
析が大域的コード最適化の一部分であり、ライブネス分
析の副産物である「最終使用」ビットが必要な為である
。
有効ビット分析の前にレジスタの割り振り(ブロック4
)を行なうことが、必要ではないまでも有利である。そ
の場合レジスタの割り振りを最初に行なえば、有効ビッ
ト分析をマシンの実レジスタによって行なうことができ
、また通常はレジスタがかなり少数(例えば、モトロー
ラMC68000では16個)なので、より効率的なコ
ンパイラが得られる。
)を行なうことが、必要ではないまでも有利である。そ
の場合レジスタの割り振りを最初に行なえば、有効ビッ
ト分析をマシンの実レジスタによって行なうことができ
、また通常はレジスタがかなり少数(例えば、モトロー
ラMC68000では16個)なので、より効率的なコ
ンパイラが得られる。
有効ビット分析は、最終コード生成(ブロック6)の前
に行わねばならない、コンパイラの最終コード生成モジ
ュールにより、有効ビット分析の結果を使って、各命令
をどんな形で(8ビツト、16ビツト、または32ビツ
ト)生成するかが決まる。
に行わねばならない、コンパイラの最終コード生成モジ
ュールにより、有効ビット分析の結果を使って、各命令
をどんな形で(8ビツト、16ビツト、または32ビツ
ト)生成するかが決まる。
第2図は、第1図のブロック5に示された有効ビット分
析の高水準流れ図である。この分析は。
析の高水準流れ図である。この分析は。
プログラム全体にわたる単一逆方向バスで行われる。こ
こに示した処理は、基本ブロックで行なうこともできる
が、ここでは分岐間で行なうものとして示しである。こ
れはプログラミングが同じくらい容易であり、ときには
より秀れた品質のコートが生成される。この方式では、
プログラム中のラベル点が無視される(ブロック3)、
しかし、分岐命令(ブロック5)は、各レジスタ中でど
のビットが有効であるかについてのプログラムの知識を
、「すべでのレジスタのすべてのビットが有効であると
推定される」状態にリセットする。これは、プログラム
が情報をもたない時点でとる安全状態である。
こに示した処理は、基本ブロックで行なうこともできる
が、ここでは分岐間で行なうものとして示しである。こ
れはプログラミングが同じくらい容易であり、ときには
より秀れた品質のコートが生成される。この方式では、
プログラム中のラベル点が無視される(ブロック3)、
しかし、分岐命令(ブロック5)は、各レジスタ中でど
のビットが有効であるかについてのプログラムの知識を
、「すべでのレジスタのすべてのビットが有効であると
推定される」状態にリセットする。これは、プログラム
が情報をもたない時点でとる安全状態である。
命令がラベル点を表すものでなく、また分岐ないしサブ
ルーチン「戻り」命令でもない場合は、その命令は「加
算」、「ロード」、「記憶」。
ルーチン「戻り」命令でもない場合は、その命令は「加
算」、「ロード」、「記憶」。
「桁送り」なと通常の計算命令である。第2図のブロッ
ク6として示す計算命令の処理を、第3図により詳しく
示しである。
ク6として示す計算命令の処理を、第3図により詳しく
示しである。
このプログラムは、ここで有効ビット・テーブル(SB
T)と呼ぶビット列を用いて動作する。
T)と呼ぶビット列を用いて動作する。
このテーブルは行数がマシンのレジスタ数(例えばモト
ローラMC68000では16個)に等しく、列数が、
マシンのレジスタ長さくMC68000では32)に等
しいものである。典型的な処理時点では、このビット列
は次のような形になることがある。
ローラMC68000では16個)に等しく、列数が、
マシンのレジスタ長さくMC68000では32)に等
しいものである。典型的な処理時点では、このビット列
は次のような形になることがある。
32ビツト
0 000OFFFF 8 FFFFFFFFI
FFFFFFFF 9 000OFFFF2
FFFFFFFF 10 000001FF3
FFFFFFFF 11 7FFFFFFF4 F
FFFFFFo 12 0FOFOFOF5 000
00OFF 13 000OFFOO6FFFFFF
FF 14 FFFFFFFF7 FFFFFF
FF 15 FFFFFFFFここでは、ビットを
16進法で示した0例えば” OOOOF F F F
” +!、16個のゼ0−ビットの後に16個の1ビ
ツトが続くことを表している。
FFFFFFFF 9 000OFFFF2
FFFFFFFF 10 000001FF3
FFFFFFFF 11 7FFFFFFF4 F
FFFFFFo 12 0FOFOFOF5 000
00OFF 13 000OFFOO6FFFFFF
FF 14 FFFFFFFF7 FFFFFF
FF 15 FFFFFFFFここでは、ビットを
16進法で示した0例えば” OOOOF F F F
” +!、16個のゼ0−ビットの後に16個の1ビ
ツトが続くことを表している。
ビット列の値は、命令ストリーム中でプログラムが逆方
向に走査すると変化する。ある時点で、ビット列が上記
のような値である場合、その時点でレジスタ0の左側1
6ビツトは有効でない(「死んでいる」)が、右側16
ビツトは有効なことになる。”FFFFFFFF”の値
は、関連するレジスタのすべてのビットが有効なことを
意味し、他の場合も同様である。
向に走査すると変化する。ある時点で、ビット列が上記
のような値である場合、その時点でレジスタ0の左側1
6ビツトは有効でない(「死んでいる」)が、右側16
ビツトは有効なことになる。”FFFFFFFF”の値
は、関連するレジスタのすべてのビットが有効なことを
意味し、他の場合も同様である。
ここで、第3図を参照しながら、命令をどのように処理
してその結果の有効ビットを決定するかを見ていくこと
にする。このプロセスは、ある結果の有効ビットを命令
の入力オペランドに伝播することである0次に、プログ
ラムが命令ストリームを逆走査するとき、それが現命令
の入力オペランドから以前の命令の結果オペランドに伝
播される。ビットがどのようにして結果から入力オペラ
ンドに伝播されるかは、第3図に示すように命令の型式
(加算1桁送り、記憶など)によって決まる。開始する
ためには、プログラムは、R初に出会った命令の結果の
どのビットが有効であるかを知るか、または仮定しなけ
ればならない、ここで説明しているプロセスの場合、最
初の出会う命令は、そのすべての結果ビットが有効なも
のと仮定する。これは、分岐命令に出会ったとき、16
X32ビット列全体をすべて1と初期設定することによ
り記録される。
してその結果の有効ビットを決定するかを見ていくこと
にする。このプロセスは、ある結果の有効ビットを命令
の入力オペランドに伝播することである0次に、プログ
ラムが命令ストリームを逆走査するとき、それが現命令
の入力オペランドから以前の命令の結果オペランドに伝
播される。ビットがどのようにして結果から入力オペラ
ンドに伝播されるかは、第3図に示すように命令の型式
(加算1桁送り、記憶など)によって決まる。開始する
ためには、プログラムは、R初に出会った命令の結果の
どのビットが有効であるかを知るか、または仮定しなけ
ればならない、ここで説明しているプロセスの場合、最
初の出会う命令は、そのすべての結果ビットが有効なも
のと仮定する。これは、分岐命令に出会ったとき、16
X32ビット列全体をすべて1と初期設定することによ
り記録される。
次に、コードの分岐と分岐の間のセクションの真中が現
在処理中であり、加算命令または減算命令に出会ったと
仮定する。具体的には、次のような命令であると仮定す
る。 ′。
在処理中であり、加算命令または減算命令に出会ったと
仮定する。具体的には、次のような命令であると仮定す
る。 ′。
ADD、L rl、r2
これはレジスタr1の内容をレジスタr2の内容に加算
するという意味である。レジスタr2は、命令への入力
であり、かつ命令の結果である1次のような3アドレス
命令であると考えた方が考えやすい。
するという意味である。レジスタr2は、命令への入力
であり、かつ命令の結果である1次のような3アドレス
命令であると考えた方が考えやすい。
ADD、L rl、r2.r3
ただし、r3は結果レジスタである。
まず、有効ビット・テーブルの位1 r 3を参照して
、結果のどのビットが有効であるかを知ることが必要で
ある。テーブルから検索されたビット・マスクは加算命
令と連関(して記憶)され、後でアセンブリ、最終コー
ド生成モジュールがそれを使って最適形式の加算命令を
生成できるようにする。実際には、効率上、2ビツトの
みを加算命令と関連させて、その命令がロング(32ビ
ツト)形、ワード(16ビツト)形、またはバイト(8
ビツト)形のどの形で生成されるかを記録するだけで充
分である。MC68000では、この3種の形しかない
、この2ビツトを命令と連関させることを、以下では、
命令の「マーキング」と呼ぶことにする。
、結果のどのビットが有効であるかを知ることが必要で
ある。テーブルから検索されたビット・マスクは加算命
令と連関(して記憶)され、後でアセンブリ、最終コー
ド生成モジュールがそれを使って最適形式の加算命令を
生成できるようにする。実際には、効率上、2ビツトの
みを加算命令と関連させて、その命令がロング(32ビ
ツト)形、ワード(16ビツト)形、またはバイト(8
ビツト)形のどの形で生成されるかを記録するだけで充
分である。MC68000では、この3種の形しかない
、この2ビツトを命令と連関させることを、以下では、
命令の「マーキング」と呼ぶことにする。
(SBTで決定される)結果レジスタr3の有効ビット
がX’ 00008012’であると仮定する。その場
合、結果の有効ビットはすべてレジスタr3の右側16
ビツトに含まれるので、加算命令を「ワード」形ないし
16ビツト形としてマークすることができる。加算は右
から左へ進行するプロセスなのでレジスタr1とr2の
左側16ビツトが結果の有効ビットに影響を与えること
はないが、右側16ビツトはいずれも影響を与えること
があり得る。したがって、この命令の場合のレジスタr
1とr2の有効ビットは、x’oo。
がX’ 00008012’であると仮定する。その場
合、結果の有効ビットはすべてレジスタr3の右側16
ビツトに含まれるので、加算命令を「ワード」形ないし
16ビツト形としてマークすることができる。加算は右
から左へ進行するプロセスなのでレジスタr1とr2の
左側16ビツトが結果の有効ビットに影響を与えること
はないが、右側16ビツトはいずれも影響を与えること
があり得る。したがって、この命令の場合のレジスタr
1とr2の有効ビットは、x’oo。
0FFFF’ となる、それが9次にSBTテーブルの
レジスタr1とr2の行に記録される。加算命令がその
ブロックでのrl(またはr2)の最終使用である場合
、rl(またはr2)に対するテーブル位置がX’ 0
OOOFFFF’ にセットされる。これは、rコード
最適化」段階でセットできる上記のライブネス・ビット
をみて決定される。加算命令がrl(またはr2)の最
終使用でない場合は、X’ 0OOOFFFF’ をテ
ープ/l/の位置rl(またはr2)の内容と○Rして
、そのテーブル位置に記憶する。これは、それらのレジ
スタが加算命令の下方で使用されており、その使用が逆
走査中の初期に処理されているので、rl及びr2があ
る有効ビットを有している可能性があるからである。こ
の加算(または減算)命令の処理は、第3図のブロック
lとブロック2に示されている。逆走査が進行するにす
れて、rlまたはr2をセットする命令に出会うことが
ある。
レジスタr1とr2の行に記録される。加算命令がその
ブロックでのrl(またはr2)の最終使用である場合
、rl(またはr2)に対するテーブル位置がX’ 0
OOOFFFF’ にセットされる。これは、rコード
最適化」段階でセットできる上記のライブネス・ビット
をみて決定される。加算命令がrl(またはr2)の最
終使用でない場合は、X’ 0OOOFFFF’ をテ
ープ/l/の位置rl(またはr2)の内容と○Rして
、そのテーブル位置に記憶する。これは、それらのレジ
スタが加算命令の下方で使用されており、その使用が逆
走査中の初期に処理されているので、rl及びr2があ
る有効ビットを有している可能性があるからである。こ
の加算(または減算)命令の処理は、第3図のブロック
lとブロック2に示されている。逆走査が進行するにす
れて、rlまたはr2をセットする命令に出会うことが
ある。
この時点で、その命令はテーブルの位@ r 1または
r2を参照して、そのレジスタのどのビットが有効であ
るかを決定する0次に、この情報を上記の加算命令の処
理と同様にして、入力オペランドに伝播する。
r2を参照して、そのレジスタのどのビットが有効であ
るかを決定する0次に、この情報を上記の加算命令の処
理と同様にして、入力オペランドに伝播する。
もう−例として、rバイト記憶J命令に出会ったものと
仮定する。(第3図のブロック9とブロック10)この
命令は、次のように書かれる。
仮定する。(第3図のブロック9とブロック10)この
命令は、次のように書かれる。
MOVE、B rl、d (r2.r3)この場合、
レジスタr1は記憶されるバイトを含んでおり、r2と
r3と記憶域をアドレス指定する働きをするベース・レ
ジスタおよびインデックス・レジスタである。d”は変
位(定数)であり、有効度分析では何の役割ももたない
、このMOVE命令は、結果レジスタをもたない、(ど
のレジスタの内容も変更しない)、これはレジスタの右
側8ビツトのみを使用する。したがって。
レジスタr1は記憶されるバイトを含んでおり、r2と
r3と記憶域をアドレス指定する働きをするベース・レ
ジスタおよびインデックス・レジスタである。d”は変
位(定数)であり、有効度分析では何の役割ももたない
、このMOVE命令は、結果レジスタをもたない、(ど
のレジスタの内容も変更しない)、これはレジスタの右
側8ビツトのみを使用する。したがって。
X’ 0OOOOOFF’のマスクがORされてテーブ
ルのrlの位置に入れられる。MOVE命令はベース・
レジスタとインデックス・レジスタの右側24ビツトを
使用し、したがってX’0OFFFFFF’ のマスク
がORされてテーブルのr2とr3の位置に入れられる
。
ルのrlの位置に入れられる。MOVE命令はベース・
レジスタとインデックス・レジスタの右側24ビツトを
使用し、したがってX’0OFFFFFF’ のマスク
がORされてテーブルのr2とr3の位置に入れられる
。
第3図は、6種の型式の命令の処理を示したものである
。「ロートノ命令や「桁送り」命令など。
。「ロートノ命令や「桁送り」命令など。
第3図に示されていない他の型式の命令を含むように、
このプロセス全体を拡張すべきである。
このプロセス全体を拡張すべきである。
ここでは比較的基本的な例として、分岐間のコード系列
を下記のように仮定する。
を下記のように仮定する。
rlの有効値
MOVB、L 4(r2)、rl 0OOOF
FOOLSR,L 18. rl OOO
OOOFFAMDl、L X’00000OFF’、r
l 00000OFFMOVE、B rl’、 0(
r2) FFFFFFFFプログラムは、メモリ
からロング・ワード(32ビツト)を読み取り、その右
側8ビツトを桁送り(LSR=右論理桁送り)シ、それ
をマスクX′00000OFF’ とANDL、、 レ
ジスタr1の右側バイトを主メモリに記憶する。rrl
の有効値」という見出しのついて欄は、逆方向に処理が
進むとき、有効ビット列の1つの行、rlに対する行を
示す1次に、この命令列が処理されるとき。
FOOLSR,L 18. rl OOO
OOOFFAMDl、L X’00000OFF’、r
l 00000OFFMOVE、B rl’、 0(
r2) FFFFFFFFプログラムは、メモリ
からロング・ワード(32ビツト)を読み取り、その右
側8ビツトを桁送り(LSR=右論理桁送り)シ、それ
をマスクX′00000OFF’ とANDL、、 レ
ジスタr1の右側バイトを主メモリに記憶する。rrl
の有効値」という見出しのついて欄は、逆方向に処理が
進むとき、有効ビット列の1つの行、rlに対する行を
示す1次に、この命令列が処理されるとき。
rlの有効値がどうなるかについて説明する。
最初に、(最下行)rlの有効値がX’FFFFFFF
F’ にセットされる。これは、どんな知識もない場合
にとるべきものである。次にMOVE、B命令と出会う
。この例では、この命令でのrlの使用は「最終使用」
とフラグされているものと仮定する。それは、rlの次
にダッシュ(′)をつけて示されている0次に、第3図
のブロック10に従って、rlの有効値がテーブル中で
X′00000OFF’ にセットされる。
F’ にセットされる。これは、どんな知識もない場合
にとるべきものである。次にMOVE、B命令と出会う
。この例では、この命令でのrlの使用は「最終使用」
とフラグされているものと仮定する。それは、rlの次
にダッシュ(′)をつけて示されている0次に、第3図
のブロック10に従って、rlの有効値がテーブル中で
X′00000OFF’ にセットされる。
次に、ANDl、Lに出会う、この命令は、rlを入力
レジスタとしても結果レジスタとしても使用する。その
結果、rlの有効値x’ooo。
レジスタとしても結果レジスタとしても使用する。その
結果、rlの有効値x’ooo。
0OFF’ がvXりX’ 0OOOOOFF’ とA
NDされ、結果であるX’ 0OOOOOFF’ がO
Rされてテーブルのrの位置に入れられる。結果は、X
’ 0OOOOOFF’である。(rlの有効値は変化
なし)これらのステップは第3図のブロック12にまと
めて示しである。
NDされ、結果であるX’ 0OOOOOFF’ がO
Rされてテーブルのrの位置に入れられる。結果は、X
’ 0OOOOOFF’である。(rlの有効値は変化
なし)これらのステップは第3図のブロック12にまと
めて示しである。
ここで、有効ビット分析プログラムは、AND命令が非
有効ビットのみをターン・オフし、したがって無視でき
ることを認めることができる。別法として、直接マスク
は8個の1ビツトで終るので、命令をバイト形式として
マークし、!&終コード生成でそれを削除することもで
きる。
有効ビットのみをターン・オフし、したがって無視でき
ることを認めることができる。別法として、直接マスク
は8個の1ビツトで終るので、命令をバイト形式として
マークし、!&終コード生成でそれを削除することもで
きる。
次に、LSR,Lに出会う、結果の有効値はX′000
00OFF’なので、これはバイト形式でマークされる
。入力レジスタr1の有効値は、左側に8位置桁送りさ
れた結果レジスタr1の有効値である。(桁送りの取扱
いは、第3図に示してない、) 最後に、MOVE、Lに出会う、結果レジスタ(rl)
の有効値はX’ 0OOOFFOO’であり、右側16
ビツトだけが有効なので、これはワード(16ビツト)
形式でマークされる。
00OFF’なので、これはバイト形式でマークされる
。入力レジスタr1の有効値は、左側に8位置桁送りさ
れた結果レジスタr1の有効値である。(桁送りの取扱
いは、第3図に示してない、) 最後に、MOVE、Lに出会う、結果レジスタ(rl)
の有効値はX’ 0OOOFFOO’であり、右側16
ビツトだけが有効なので、これはワード(16ビツト)
形式でマークされる。
上記のように計算したマーキングを使うことによって、
最終コード生成では、上記に示したものと等価な下記の
命令をより迅速でより短い命令として出力することがで
きる。
最終コード生成では、上記に示したものと等価な下記の
命令をより迅速でより短い命令として出力することがで
きる。
MOVE、V 4 (r2) 、 rl (メモリか
らのロード命令) LSR,118,rl MOVE、B rl’、 0(r2) (メモリへ
の記憶命令)上記の例で生じる、最終コード生成が知ら
なければならないことが2つある。(1)変位が(この
例では4から6に)2つだけ増加すると、その命令によ
って許容される限界(MC68000では32767)
内に収まらない場合は、MOVE。
らのロード命令) LSR,118,rl MOVE、B rl’、 0(r2) (メモリへ
の記憶命令)上記の例で生じる、最終コード生成が知ら
なければならないことが2つある。(1)変位が(この
例では4から6に)2つだけ増加すると、その命令によ
って許容される限界(MC68000では32767)
内に収まらない場合は、MOVE。
LをMOVE、Wに変えることができない。(2)LS
R命令の最も効率的な形の選択は、結果の有効値と桁送
り量によって決まる。この例では、結果の有効値は、X
’ 0OOOOOFF’ であるが、レジスタr1の位
I!16〜23のビットが位置24〜31に桁送りされ
るため、LSR命令をLSR,Bにすることはできない
。
R命令の最も効率的な形の選択は、結果の有効値と桁送
り量によって決まる。この例では、結果の有効値は、X
’ 0OOOOOFF’ であるが、レジスタr1の位
I!16〜23のビットが位置24〜31に桁送りされ
るため、LSR命令をLSR,Bにすることはできない
。
しかし、それを元のLSR,Lよりは速いLSR,Wに
することはできる。
することはできる。
当然のことながら、ビット・テーブルに示した特定の有
効値の値は、特定のシステム構成および特定の命令書式
にあわせて変更しなければならない。本発明は、例えば
16ビツト・フルワード機械構成にも45ビツトまたは
64ビツト機械構成にも、同様に応用できるはずである
。さらに具体的にいえば、本発明の利点は、短形命令を
使うと。
効値の値は、特定のシステム構成および特定の命令書式
にあわせて変更しなければならない。本発明は、例えば
16ビツト・フルワード機械構成にも45ビツトまたは
64ビツト機械構成にも、同様に応用できるはずである
。さらに具体的にいえば、本発明の利点は、短形命令を
使うと。
機械時間または記憶スペースが少なくてすむような、ア
ーキテクチャの機械で実現されることに注目すべきであ
る。
ーキテクチャの機械で実現されることに注目すべきであ
る。
第1図は、本発明が特に有用な最適化コンパイラの超高
水準機能流れ図である。 第2図は、所期の有効ビット分析を実施するための、本
明細書で開示されるコンパイラ・モジュールの高水準流
れ図である。 第3図は、ある種の計算形式の命令が、本明細書で開示
されるコンパイラ・モジュールによってどのように処理
されるかを示す、より詳しい流れ図である。 出願人 インターナ・ショナル・ビジネス・マシーン
ズ・コーポレーション 代理人 弁理士 頓 宮 孝 −(外1名) 97Q 第1図
水準機能流れ図である。 第2図は、所期の有効ビット分析を実施するための、本
明細書で開示されるコンパイラ・モジュールの高水準流
れ図である。 第3図は、ある種の計算形式の命令が、本明細書で開示
されるコンパイラ・モジュールによってどのように処理
されるかを示す、より詳しい流れ図である。 出願人 インターナ・ショナル・ビジネス・マシーン
ズ・コーポレーション 代理人 弁理士 頓 宮 孝 −(外1名) 97Q 第1図
Claims (1)
- 【特許請求の範囲】 命令の系列を調査し、上記命令系列中の命令の文脈に基
づいて、各命令の結果のどのビットが後に有効に使用さ
れるかを判定する手段と、 上記有効に使用されると判定されたビット位置において
正確な結果を与える命令のうち、最も効率的な形式の命
令を生成する手段とを有する最適化コンパイラ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US66680084A | 1984-10-31 | 1984-10-31 | |
US666800 | 1984-10-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPS61110240A true JPS61110240A (ja) | 1986-05-28 |
Family
ID=24675539
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP19403485A Pending JPS61110240A (ja) | 1984-10-31 | 1985-09-04 | 最適化コンパイラ |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP0180077B1 (ja) |
JP (1) | JPS61110240A (ja) |
DE (1) | DE3586234T2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5132972A (en) * | 1989-11-29 | 1992-07-21 | Honeywell Bull Inc. | Assembly language programming potential error detection scheme sensing apparent inconsistency with a previous operation |
EP1229440B1 (en) | 1993-05-27 | 2007-05-02 | Matsushita Electric Industrial Co., Ltd. | Program converting unit and processor improved in address management |
JP3233245B2 (ja) * | 1993-07-01 | 2001-11-26 | 日本電気株式会社 | 言語処理方法 |
WO1995031767A1 (en) * | 1994-05-11 | 1995-11-23 | Vlsi Technology, Inc. | Floating-point processor with apparent-precision based selection of execution-precision |
WO2002041145A2 (en) * | 2000-11-20 | 2002-05-23 | Zucotto Wireless Inc. | System and methods providing runtime byte code simplification for platform independent languages |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS51115744A (en) * | 1975-04-04 | 1976-10-12 | Hitachi Ltd | Assembler order word length automatic setting method |
JPS5854449A (ja) * | 1981-09-28 | 1983-03-31 | Fujitsu Ltd | 分岐命令短縮化処理方式 |
JPS58161045A (ja) * | 1982-03-19 | 1983-09-24 | Fujitsu Ltd | コンパイラにおけるレジスタ管理方式 |
-
1985
- 1985-09-04 JP JP19403485A patent/JPS61110240A/ja active Pending
- 1985-10-11 DE DE19853586234 patent/DE3586234T2/de not_active Expired - Lifetime
- 1985-10-11 EP EP19850112899 patent/EP0180077B1/en not_active Expired
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS51115744A (en) * | 1975-04-04 | 1976-10-12 | Hitachi Ltd | Assembler order word length automatic setting method |
JPS5854449A (ja) * | 1981-09-28 | 1983-03-31 | Fujitsu Ltd | 分岐命令短縮化処理方式 |
JPS58161045A (ja) * | 1982-03-19 | 1983-09-24 | Fujitsu Ltd | コンパイラにおけるレジスタ管理方式 |
Also Published As
Publication number | Publication date |
---|---|
EP0180077B1 (en) | 1992-06-17 |
DE3586234D1 (de) | 1992-07-23 |
EP0180077A2 (en) | 1986-05-07 |
EP0180077A3 (en) | 1988-06-22 |
DE3586234T2 (de) | 1992-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4763255A (en) | Method for generating short form instructions in an optimizing compiler | |
US6061783A (en) | Method and apparatus for manipulation of bit fields directly in a memory source | |
US4539635A (en) | Pipelined digital processor arranged for conditional operation | |
JPH04172533A (ja) | 電子計算機 | |
JPS63132338A (ja) | コード生成方法 | |
JPH0253810B2 (ja) | ||
JPH0721034A (ja) | 文字列複写処理方法 | |
JPH06110703A (ja) | コンパイル方法 | |
JP2004086837A (ja) | データ処理装置 | |
US4598358A (en) | Pipelined digital signal processor using a common data and control bus | |
JPS61110240A (ja) | 最適化コンパイラ | |
US5390306A (en) | Pipeline processing system and microprocessor using the system | |
JP2002229778A (ja) | 高速ディスプレースメント付きpc相対分岐方式 | |
JPS6212529B2 (ja) | ||
JPH034936B2 (ja) | ||
JP2748957B2 (ja) | データ処理装置 | |
US20080313428A1 (en) | Microprocessor | |
RU2066067C1 (ru) | Центральный процессор для многопроцессорной вычислительной системы | |
US6772292B2 (en) | Two area stack | |
JP4545777B2 (ja) | データ処理装置 | |
US5093784A (en) | Data processor with efficient transfer between subroutines and main program | |
JPS62295138A (ja) | アドレス生成方式 | |
JP3464019B2 (ja) | レジスタの割付方式 | |
KR100246465B1 (ko) | 마이크로프로세서 스택 명령어의 수행사이클을 줄이기 위한 장치 및 그 방법 | |
JP2722493B2 (ja) | レジスタ割り付け処理方法 |