JPH06314203A - コンパイラの最適化方法および装置 - Google Patents
コンパイラの最適化方法および装置Info
- Publication number
- JPH06314203A JPH06314203A JP5102744A JP10274493A JPH06314203A JP H06314203 A JPH06314203 A JP H06314203A JP 5102744 A JP5102744 A JP 5102744A JP 10274493 A JP10274493 A JP 10274493A JP H06314203 A JPH06314203 A JP H06314203A
- Authority
- JP
- Japan
- Prior art keywords
- conditional branch
- compiler
- branch
- preceding procedure
- optimization
- 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 OR CALCULATING; 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/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
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)
- Advance Control (AREA)
Abstract
(57)【要約】
【目的】 プログラム言語をアセンブラ言語に変換する
コンパイラの最適化方法および装置に関し、条件分岐を
移動または複写してコンパイルされたプログラムの実行
時間を短縮することを目的とする。 【構成】 条件分岐に先立って実行されるように記述さ
れた先行手続きの結果が、該条件分岐により選択される
複数の分岐先の一方の結果無参照側では参照されないこ
とを検出する機能を有するコンパイラの最適化方法であ
って、前記先行手続きが条件判定に影響を与えないこと
が判るときに、前記条件分岐を当該先行手続きの前に移
動することによって、不要な手続きの実行を抑止するよ
うに構成する。
コンパイラの最適化方法および装置に関し、条件分岐を
移動または複写してコンパイルされたプログラムの実行
時間を短縮することを目的とする。 【構成】 条件分岐に先立って実行されるように記述さ
れた先行手続きの結果が、該条件分岐により選択される
複数の分岐先の一方の結果無参照側では参照されないこ
とを検出する機能を有するコンパイラの最適化方法であ
って、前記先行手続きが条件判定に影響を与えないこと
が判るときに、前記条件分岐を当該先行手続きの前に移
動することによって、不要な手続きの実行を抑止するよ
うに構成する。
Description
【0001】
【産業上の利用分野】本発明はコンパイラの最適化技術
に関し、特に、プログラム言語をアセンブラ言語に変換
するコンパイラの最適化方法および装置に関する。近
年、コンピュータシステム等のハード面での研究開発が
進められ、より高速の演算処理が提供されるようになっ
て来ている。しかしながら、プログラマーにより作成さ
れたプログラムにおいては、不要な演算を繰り返し行う
ことにより、結果的に、処理速度を低下させることにも
なっている。そこで、例えば、プログラム内に頻繁に使
用される条件判定において、不要演算を検出して実行時
間を短縮することのできるコンパイラの最適化技術が要
望されている。
に関し、特に、プログラム言語をアセンブラ言語に変換
するコンパイラの最適化方法および装置に関する。近
年、コンピュータシステム等のハード面での研究開発が
進められ、より高速の演算処理が提供されるようになっ
て来ている。しかしながら、プログラマーにより作成さ
れたプログラムにおいては、不要な演算を繰り返し行う
ことにより、結果的に、処理速度を低下させることにも
なっている。そこで、例えば、プログラム内に頻繁に使
用される条件判定において、不要演算を検出して実行時
間を短縮することのできるコンパイラの最適化技術が要
望されている。
【0002】
【従来の技術】従来、コンパイラによる条件分岐に関す
る最適化処理では、条件式の真率に応じて使用命令を選
択する機能(例えば、特願平4-004869)があるが、これ
は演算自体の実行を停止するものではない。また、ルー
プ内の不変条件分岐をループ外に移動することにより、
ループ内での条件判定を削減するものがあるが、これは
条件判定を減らすことが目的であり他の演算の削減は行
われない。
る最適化処理では、条件式の真率に応じて使用命令を選
択する機能(例えば、特願平4-004869)があるが、これ
は演算自体の実行を停止するものではない。また、ルー
プ内の不変条件分岐をループ外に移動することにより、
ループ内での条件判定を削減するものがあるが、これは
条件判定を減らすことが目的であり他の演算の削減は行
われない。
【0003】ここで、コンパイラとは、第1の言語(例
えば、C, FORTRAN, COBOLといったプログラミング言
語)から第2の言語(例えば、アセンブラ言語)へと変
換する装置と考えることができ、従って、コンパイラに
よる最適化とは、変換後の第2の言語が元の第1の言語
の意味を変えることなくプログラムの実行時間を短縮で
きるように変換する機能を示すことになる。そして、コ
ンパイラによる最適化の基本的なものとしては、上述し
たように、同一演算を纏めて一回だけ行う共通化や不要
演算の実行の抑止等がある。
えば、C, FORTRAN, COBOLといったプログラミング言
語)から第2の言語(例えば、アセンブラ言語)へと変
換する装置と考えることができ、従って、コンパイラに
よる最適化とは、変換後の第2の言語が元の第1の言語
の意味を変えることなくプログラムの実行時間を短縮で
きるように変換する機能を示すことになる。そして、コ
ンパイラによる最適化の基本的なものとしては、上述し
たように、同一演算を纏めて一回だけ行う共通化や不要
演算の実行の抑止等がある。
【0004】
【発明が解決しようとする課題】一般的に、プログラマ
ーがプログラムを作成する場合、プログラムを簡潔に記
述することによりその正しさを保証する目的で、冗長な
演算を記述することが頻繁に行われている。しかしなが
ら、従来のコンパイラによる最適化では、条件判定の移
動/挿入といった最適化は行われておらず、そのため冗
長な演算はそのまま命令としてオブジェクトプログラム
中に残り実行時間を長くする要因になっている。
ーがプログラムを作成する場合、プログラムを簡潔に記
述することによりその正しさを保証する目的で、冗長な
演算を記述することが頻繁に行われている。しかしなが
ら、従来のコンパイラによる最適化では、条件判定の移
動/挿入といった最適化は行われておらず、そのため冗
長な演算はそのまま命令としてオブジェクトプログラム
中に残り実行時間を長くする要因になっている。
【0005】本発明は、上述した従来のコンパイラの最
適化技術が有する課題に鑑み、条件分岐を移動または複
写してコンパイルされたプログラムの実行時間を短縮す
ることを目的とする。
適化技術が有する課題に鑑み、条件分岐を移動または複
写してコンパイルされたプログラムの実行時間を短縮す
ることを目的とする。
【0006】
【課題を解決するための手段】本発明によれば、条件分
岐に先立って実行されるように記述された先行手続きの
結果が、該条件分岐により選択される複数の分岐先の一
方の結果無参照側では参照されないことを検出する機能
を有するコンパイラの最適化方法であって、前記先行手
続きが条件判定に影響を与えないことが判るときに、前
記条件分岐を当該先行手続きの前に移動することによっ
て、不要な手続きの実行を抑止するようにしたことを特
徴とするコンパイラの最適化方法が提供される。
岐に先立って実行されるように記述された先行手続きの
結果が、該条件分岐により選択される複数の分岐先の一
方の結果無参照側では参照されないことを検出する機能
を有するコンパイラの最適化方法であって、前記先行手
続きが条件判定に影響を与えないことが判るときに、前
記条件分岐を当該先行手続きの前に移動することによっ
て、不要な手続きの実行を抑止するようにしたことを特
徴とするコンパイラの最適化方法が提供される。
【0007】
【作用】本発明のコンパイラの最適化方法によれば、先
行手続きが条件判定に影響を与えないときには、条件分
岐を先行手続きの前に移動することによって、不要な手
続きの実行を抑止してコンパイルされたプログラムの実
行時間を短縮することができる。
行手続きが条件判定に影響を与えないときには、条件分
岐を先行手続きの前に移動することによって、不要な手
続きの実行を抑止してコンパイルされたプログラムの実
行時間を短縮することができる。
【0008】このように、本発明のコンパイラの最適化
方法によれば、手続きの実行条件を限定することでプロ
グラムの実行時間を短縮することができる。
方法によれば、手続きの実行条件を限定することでプロ
グラムの実行時間を短縮することができる。
【0009】
【実施例】以下、図面を参照して本発明に係るコンパイ
ラの最適化方法および装置の実施例を説明する。図1は
本発明に係るコンパイラの最適化装置の原理構成を示す
ブロック図である。同図において、参照符号1はソース
プログラム解析部、2は最適化部、そして、3はオブジ
ェクトコード出力部を示している。
ラの最適化方法および装置の実施例を説明する。図1は
本発明に係るコンパイラの最適化装置の原理構成を示す
ブロック図である。同図において、参照符号1はソース
プログラム解析部、2は最適化部、そして、3はオブジ
ェクトコード出力部を示している。
【0010】コンパイラに入力されるソースプログラム
(例えば、C, FORTRAN, COBOL)は、ソースプログラム
解析部1により中間コードに変換され、さらに、最適化
部2へ供給されて最適化が行われる。そして、最適化が
行われた中間コードは、コード生成部3により、例え
ば、アセンブラ言語に変換されてオブジェクトプログラ
ムが出力されることになる。
(例えば、C, FORTRAN, COBOL)は、ソースプログラム
解析部1により中間コードに変換され、さらに、最適化
部2へ供給されて最適化が行われる。そして、最適化が
行われた中間コードは、コード生成部3により、例え
ば、アセンブラ言語に変換されてオブジェクトプログラ
ムが出力されることになる。
【0011】最適化部2は、データフロー情報収集部
(データフロー解析部)4,分岐確率予測部5,プログ
ラム構造解析部6,および,プログラム構造変更部(条
件判定移動/複写部)7を備えている。データフロー情
報収集部4は、条件分岐および該条件分岐に先行する先
行手続き等を抽出し、プログラム構造解析部6は、最適
化が適用され得る個所を検出し、そして、プログラム構
造変更部7は、プログラムの所定個所を移動或いは複写
して最適化を行う。ここで、分岐確率予測部5は、本発
明の最適化を適用する場合、プログラムの流れの確率を
予測して、その予測された確率に基づいて、動作の高速
化が可能な個所に対して本発明の最適化を適用するよう
になっている。すなわち、分岐確率予測部5は、例え
ば、複写された条件分岐において、分岐先が結果無参照
側となる確率を検出し、該複写された条件分岐の挿入に
よりオーバヘッドが大きくなるときには、上記コンパイ
ラの最適化を抑止するようになっている。尚、分岐確率
予測部5においては、分岐する確率を推論するだけでな
く、例えば、外部から(例えば、オペレータ)分岐確率
に相当する条件を与えて、本発明の最適化を適用する個
所を規定するように構成してもよい。
(データフロー解析部)4,分岐確率予測部5,プログ
ラム構造解析部6,および,プログラム構造変更部(条
件判定移動/複写部)7を備えている。データフロー情
報収集部4は、条件分岐および該条件分岐に先行する先
行手続き等を抽出し、プログラム構造解析部6は、最適
化が適用され得る個所を検出し、そして、プログラム構
造変更部7は、プログラムの所定個所を移動或いは複写
して最適化を行う。ここで、分岐確率予測部5は、本発
明の最適化を適用する場合、プログラムの流れの確率を
予測して、その予測された確率に基づいて、動作の高速
化が可能な個所に対して本発明の最適化を適用するよう
になっている。すなわち、分岐確率予測部5は、例え
ば、複写された条件分岐において、分岐先が結果無参照
側となる確率を検出し、該複写された条件分岐の挿入に
よりオーバヘッドが大きくなるときには、上記コンパイ
ラの最適化を抑止するようになっている。尚、分岐確率
予測部5においては、分岐する確率を推論するだけでな
く、例えば、外部から(例えば、オペレータ)分岐確率
に相当する条件を与えて、本発明の最適化を適用する個
所を規定するように構成してもよい。
【0012】以上において、『先行手続き』としては、
条件判定の直前から始めて中間コードを遡り、条件分岐
によって制御が渡る先のうちの少なくともいづれか一か
所では不要となる範囲を選ぶことになる。そのために
は、『先行手続き』内で値が変更されるデータの分岐先
での使用状況(ビジー情報)を判定する必要があるが、
これは一般の最適化で使用するデータフロー情報として
データフロー情報収集部4に保持されることになる。
条件判定の直前から始めて中間コードを遡り、条件分岐
によって制御が渡る先のうちの少なくともいづれか一か
所では不要となる範囲を選ぶことになる。そのために
は、『先行手続き』内で値が変更されるデータの分岐先
での使用状況(ビジー情報)を判定する必要があるが、
これは一般の最適化で使用するデータフロー情報として
データフロー情報収集部4に保持されることになる。
【0013】図2は本発明が適用される前後のプログラ
ムの一例を比較して示す図であり、また、図3は本発明
が適用される前後のプログラムの他の例を比較して示す
図である。ここで、図2および図3は、ソースプログラ
ムがフォートラン(FORTRAN)で記載された例を示してい
る。また、図2および図3において、最適化後のプログ
ラムとしては、例えば、中間コード或いはアセンブラ言
語であるが、本発明による最適化の前後におけるプログ
ラムを比較し易くするために、フォートランに変換した
形で記載している。
ムの一例を比較して示す図であり、また、図3は本発明
が適用される前後のプログラムの他の例を比較して示す
図である。ここで、図2および図3は、ソースプログラ
ムがフォートラン(FORTRAN)で記載された例を示してい
る。また、図2および図3において、最適化後のプログ
ラムとしては、例えば、中間コード或いはアセンブラ言
語であるが、本発明による最適化の前後におけるプログ
ラムを比較し易くするために、フォートランに変換した
形で記載している。
【0014】まず、図2に示されるように、最適化前の
プログラムW=P*Q (1) → X=Y+Z (2)→ IF (A.EQ.0) GOT
O 100 (3) において、(1) の文で値が代入される変数W
(W=P*Q)は、(3) の条件分岐の条件に関わらず参照され
るが、(2) の文で値が代入される変数X(X=Y+Z)は、
(3) の条件A=0が成立し、文番号100 に分岐(GOTO 10
0)するときには参照されない。この場合、データフロー
情報収集部4により、条件分岐(3) および該条件分岐に
先行する先行手続き(2) が抽出され、プログラム構造解
析部6により、最適化が適用され得る個所(先行手続き
(2))が検出される。そして、プログラム構造変更部7に
より、先行手続き(2) の直前に条件分岐(3) の移動が行
われる。これにより、最適化後のプログラムは、W=P*Q
(1) → IF(A.EQ.0) GOTO 100 (3) → X=Y+Z (2)とな
る。
プログラムW=P*Q (1) → X=Y+Z (2)→ IF (A.EQ.0) GOT
O 100 (3) において、(1) の文で値が代入される変数W
(W=P*Q)は、(3) の条件分岐の条件に関わらず参照され
るが、(2) の文で値が代入される変数X(X=Y+Z)は、
(3) の条件A=0が成立し、文番号100 に分岐(GOTO 10
0)するときには参照されない。この場合、データフロー
情報収集部4により、条件分岐(3) および該条件分岐に
先行する先行手続き(2) が抽出され、プログラム構造解
析部6により、最適化が適用され得る個所(先行手続き
(2))が検出される。そして、プログラム構造変更部7に
より、先行手続き(2) の直前に条件分岐(3) の移動が行
われる。これにより、最適化後のプログラムは、W=P*Q
(1) → IF(A.EQ.0) GOTO 100 (3) → X=Y+Z (2)とな
る。
【0015】従って、最適化前のプログラムでは、(3)
の条件A=0が成立する場合でも、(1) および(2) の文
を実行するようになっているが、最適化後のプログラム
では、(3) の条件A=0が成立する場合には、(1) の文
だけを実行し、(2) の文の実行を飛ばしてプログラムの
実行時間を短縮することができるようになっている。こ
のように、先行手続きが求まれば、条件分岐の移動の妥
当性を検証し、分岐条件が先行手続きの中で不変である
ことが判れば、先行手続きの直前に条件分岐の移動を行
うことが可能となる。
の条件A=0が成立する場合でも、(1) および(2) の文
を実行するようになっているが、最適化後のプログラム
では、(3) の条件A=0が成立する場合には、(1) の文
だけを実行し、(2) の文の実行を飛ばしてプログラムの
実行時間を短縮することができるようになっている。こ
のように、先行手続きが求まれば、条件分岐の移動の妥
当性を検証し、分岐条件が先行手続きの中で不変である
ことが判れば、先行手続きの直前に条件分岐の移動を行
うことが可能となる。
【0016】ここで、先行手続きの中で分岐条件の変更
がなされている場合、先行手続きの直前で分岐条件が結
果無参照側になるときには、先行手続きの直後でも必ず
結果無参照側になることが保証できる場合に限って、条
件分岐の挿入が可能であるという判定が行われるように
なっている。この場合、新たに挿入された条件分岐によ
って結果無参照側に制御が渡る可能性が低いと、条件分
岐のオーバヘッドが大きくなって性能低下を招くので、
分岐確率予測部5において、プログラムの実行プロファ
イル情報および先行手続きの内部の状況等により分岐確
率の予測をすることが性能向上を確実とするために必要
となる。
がなされている場合、先行手続きの直前で分岐条件が結
果無参照側になるときには、先行手続きの直後でも必ず
結果無参照側になることが保証できる場合に限って、条
件分岐の挿入が可能であるという判定が行われるように
なっている。この場合、新たに挿入された条件分岐によ
って結果無参照側に制御が渡る可能性が低いと、条件分
岐のオーバヘッドが大きくなって性能低下を招くので、
分岐確率予測部5において、プログラムの実行プロファ
イル情報および先行手続きの内部の状況等により分岐確
率の予測をすることが性能向上を確実とするために必要
となる。
【0017】次に、図3に示されるように、最適化前の
プログラムIF (A.EQ.X) A=Y (1) →IF (B.EQ.X) B=Y
(2) → IF (A.EQ.B) GOTO 10 (3)において、(1) および
(2) の文を『先行手続き』とすると、ここで、変数Aお
よびBの値の更新を行っているので、(3) の判定によっ
て分岐の移動を行うことはできない。しかしながら、
(1) の文の直前でAおよびBの値が等しければ、(2) の
の直後でもAおよびBの値が等しいということが判るの
で、(3) の条件分岐の複写を行うことが可能である。す
なわち、(1) の文の直前に、(3) の条件分岐の複写であ
る(3)'の条件分岐を挿入することが可能である。
プログラムIF (A.EQ.X) A=Y (1) →IF (B.EQ.X) B=Y
(2) → IF (A.EQ.B) GOTO 10 (3)において、(1) および
(2) の文を『先行手続き』とすると、ここで、変数Aお
よびBの値の更新を行っているので、(3) の判定によっ
て分岐の移動を行うことはできない。しかしながら、
(1) の文の直前でAおよびBの値が等しければ、(2) の
の直後でもAおよびBの値が等しいということが判るの
で、(3) の条件分岐の複写を行うことが可能である。す
なわち、(1) の文の直前に、(3) の条件分岐の複写であ
る(3)'の条件分岐を挿入することが可能である。
【0018】図3に示す例において、ループの回転数が
多いと仮定すると、条件判定によってループを飛び出す
確率は低いということが導出できる。そのため、複写先
の条件が偽(すなわち、分岐しない)となり、複写元の
条件も偽となってループを繰り返す場合のみが条件判定
の複写に伴うオーバヘッドが性能(プログラムの実行速
度)に決定的に影響を与えるという推論が可能である。
これは、オーバヘッドが性能に決定的に影響を与えるこ
とが、すなわち、プログラムの実行速度を低下させるこ
とになるのが、(1) の文の直前において、(A=Xでか
つB=Y)または(A=YかつB=X)のときだけであ
り、それよりも、(1) の文の直前においてA=Bである
確率の方が高いと推理するので自然であるため、オーバ
ーヘッドが大きくなるよりもプログラムの実行時間を低
減させることがきる確率の方が高いと推論することがで
きる。したがって、分岐確率の予測によっても分岐の複
写を抑止する必要はなく、本発明の最適化である(1) の
文の直前に(3) の条件分岐と同じ(3)'の条件分岐の複写
を行うことになる。
多いと仮定すると、条件判定によってループを飛び出す
確率は低いということが導出できる。そのため、複写先
の条件が偽(すなわち、分岐しない)となり、複写元の
条件も偽となってループを繰り返す場合のみが条件判定
の複写に伴うオーバヘッドが性能(プログラムの実行速
度)に決定的に影響を与えるという推論が可能である。
これは、オーバヘッドが性能に決定的に影響を与えるこ
とが、すなわち、プログラムの実行速度を低下させるこ
とになるのが、(1) の文の直前において、(A=Xでか
つB=Y)または(A=YかつB=X)のときだけであ
り、それよりも、(1) の文の直前においてA=Bである
確率の方が高いと推理するので自然であるため、オーバ
ーヘッドが大きくなるよりもプログラムの実行時間を低
減させることがきる確率の方が高いと推論することがで
きる。したがって、分岐確率の予測によっても分岐の複
写を抑止する必要はなく、本発明の最適化である(1) の
文の直前に(3) の条件分岐と同じ(3)'の条件分岐の複写
を行うことになる。
【0019】ここで、プログラム構造変更部7におい
て、上述した方式に基づいて条件分岐の移動または複写
を行う場合、先行手続きの直前に条件分岐を挿入し、移
動を行う場合にのみ、元の条件分岐を削除することで、
この手続きは終了することになる。上述したように、本
発明は、プログラムの意味を判定して、条件分岐の移動
/挿入を行うものであり、その結果としてソースプログ
ラムから高速に実行するオブジェクトプログラムを生成
することが可能になる。
て、上述した方式に基づいて条件分岐の移動または複写
を行う場合、先行手続きの直前に条件分岐を挿入し、移
動を行う場合にのみ、元の条件分岐を削除することで、
この手続きは終了することになる。上述したように、本
発明は、プログラムの意味を判定して、条件分岐の移動
/挿入を行うものであり、その結果としてソースプログ
ラムから高速に実行するオブジェクトプログラムを生成
することが可能になる。
【0020】図4は本発明におけるコンパイラの最適化
処理の一例を説明するためのフローチャートである。図
4において、まず、ステップ11において、条件分岐を選
択(初期条件: UA=0,UB=0 それぞれ条件分岐後の行き先
に対応)する。具体的には、プログラムを文の実行順序
に従って、条件分岐のある文を順次選択する。ここで、
調査対象中間コードは、条件分岐の直前とする。次にス
テップ12において、調査対象コードによって値が書換え
られる結果が、条件分岐の行き先におけるAで使用され
れば、UAtmp=1,Bで使用されれば、UBtmp=1 とし、使用
されなければ、それぞれ"0" とする。さらに、ステップ
13に進んで、"(UA or UAtmp) and (UB or UBtmp)" が成
立するか否かを判別し、成立すれば(少なくとも、Aお
よびBの一方が"0" ならば)ステップ15に進み、成立し
なければ8AおよびBの両方が"1" ならば)ステップ14
に進む。ステップ14では、"(UA=UA or UAtmp), (UB=UB
or UBtmp)"を実行して、調査対象中間コードを1つ前に
遡らせて、ステップ12に戻る。
処理の一例を説明するためのフローチャートである。図
4において、まず、ステップ11において、条件分岐を選
択(初期条件: UA=0,UB=0 それぞれ条件分岐後の行き先
に対応)する。具体的には、プログラムを文の実行順序
に従って、条件分岐のある文を順次選択する。ここで、
調査対象中間コードは、条件分岐の直前とする。次にス
テップ12において、調査対象コードによって値が書換え
られる結果が、条件分岐の行き先におけるAで使用され
れば、UAtmp=1,Bで使用されれば、UBtmp=1 とし、使用
されなければ、それぞれ"0" とする。さらに、ステップ
13に進んで、"(UA or UAtmp) and (UB or UBtmp)" が成
立するか否かを判別し、成立すれば(少なくとも、Aお
よびBの一方が"0" ならば)ステップ15に進み、成立し
なければ8AおよびBの両方が"1" ならば)ステップ14
に進む。ステップ14では、"(UA=UA or UAtmp), (UB=UB
or UBtmp)"を実行して、調査対象中間コードを1つ前に
遡らせて、ステップ12に戻る。
【0021】次に、ステップ15において、UA, UBのうち
値が"0" の方を結果無参照側とし、"1" の方を結果参照
側とし、UAおよびUBが共に"1" かどうか判別する。ステ
ップ15において、UAおよびUBが共に"1" と判別される
と、抽出失敗として最適化不可能となる。また、ステッ
プ15において、UAおよびUBが共に"1" ではない(少なく
とも、UAおよびUBの一方が"0" である)と判別される
と、ステップ16に進んで条件分岐移動可能性判定を行
う。このステップ16の条件分岐移動可能性判定において
は、条件が先行手続き内で不変かどうかが判別される
が、条件が先行手続き内で不変であると判別されると、
本発明の『移動』による最適化が行われることになる。
逆に、ステップ16で、条件が先行手続き内で不変ではな
いと判別されると、移動不可となってステップ17に進
み、該ステップ17で条件分岐複写可能性判定を行う。
値が"0" の方を結果無参照側とし、"1" の方を結果参照
側とし、UAおよびUBが共に"1" かどうか判別する。ステ
ップ15において、UAおよびUBが共に"1" と判別される
と、抽出失敗として最適化不可能となる。また、ステッ
プ15において、UAおよびUBが共に"1" ではない(少なく
とも、UAおよびUBの一方が"0" である)と判別される
と、ステップ16に進んで条件分岐移動可能性判定を行
う。このステップ16の条件分岐移動可能性判定において
は、条件が先行手続き内で不変かどうかが判別される
が、条件が先行手続き内で不変であると判別されると、
本発明の『移動』による最適化が行われることになる。
逆に、ステップ16で、条件が先行手続き内で不変ではな
いと判別されると、移動不可となってステップ17に進
み、該ステップ17で条件分岐複写可能性判定を行う。
【0022】ステップ17の条件分岐複写可能性判定にお
いては、先行手続きでの条件の変更が結果参照側から結
果無参照側への変化のみかが判別され、先行手続きでの
条件の変更が結果参照側から結果無参照側への変化のみ
であると判別されると、ステップ18に進んで条件分岐成
立の確率予測を行う。ステップ17で、先行手続きでの条
件の変更が結果参照側から結果無参照側への変化のみで
はないと判別されると、最適化不可能となる。ステップ
18の条件分岐成立の確率予測においては、結果無参照側
への分岐確率が高いかどうかが判別され、結果無参照側
への分岐確率が高いと判別されると、本発明の『複写』
による最適化が行われることになる。ここで、ステップ
18における条件分岐成立の確率予測としては、例えば、
オペレータが外部から分岐確率に相当する条件を与える
ようにしてもよい。
いては、先行手続きでの条件の変更が結果参照側から結
果無参照側への変化のみかが判別され、先行手続きでの
条件の変更が結果参照側から結果無参照側への変化のみ
であると判別されると、ステップ18に進んで条件分岐成
立の確率予測を行う。ステップ17で、先行手続きでの条
件の変更が結果参照側から結果無参照側への変化のみで
はないと判別されると、最適化不可能となる。ステップ
18の条件分岐成立の確率予測においては、結果無参照側
への分岐確率が高いかどうかが判別され、結果無参照側
への分岐確率が高いと判別されると、本発明の『複写』
による最適化が行われることになる。ここで、ステップ
18における条件分岐成立の確率予測としては、例えば、
オペレータが外部から分岐確率に相当する条件を与える
ようにしてもよい。
【0023】逆に、ステップ18で、結果無参照側への分
岐確率が高くないと判別されると、最適化不可能とな
る。ここで、最適化不可能の場合には、コンパイラにお
いて中間コードに変換されたソースプログラムに対して
最適化を行うことなくそのままオブジェクトプログラム
に変換することになる。
岐確率が高くないと判別されると、最適化不可能とな
る。ここで、最適化不可能の場合には、コンパイラにお
いて中間コードに変換されたソースプログラムに対して
最適化を行うことなくそのままオブジェクトプログラム
に変換することになる。
【0024】
【発明の効果】以上、詳述したように、本発明のコンパ
イラの最適化方法および装置によれば、プログラム内に
多く現れる条件判定において、不要演算を検出して実行
を抑止するように条件分岐を移動または複写することに
よって、コンパイルされたプログラムの実行時間を短縮
することができる。
イラの最適化方法および装置によれば、プログラム内に
多く現れる条件判定において、不要演算を検出して実行
を抑止するように条件分岐を移動または複写することに
よって、コンパイルされたプログラムの実行時間を短縮
することができる。
【図1】本発明に係るコンパイラの最適化装置の原理構
成を示すブロック図である。
成を示すブロック図である。
【図2】本発明が適用される前後のプログラムの一例を
比較して示す図である。
比較して示す図である。
【図3】本発明が適用される前後のプログラムの他の例
を比較して示す図である。
を比較して示す図である。
【図4】本発明におけるコンパイラの最適化処理の一例
を説明するためのフローチャートである。
を説明するためのフローチャートである。
1…ソースプログラム解析部 2…最適化部 3…コード生成部 4…データフロー情報収集部(データフロー解析部) 5…分岐確率予測部 6…プログラム構造解析部 7…プログラム構造変更部
Claims (9)
- 【請求項1】 条件分岐に先立って実行されるように記
述された先行手続きの結果が、該条件分岐により選択さ
れる複数の分岐先の一方の結果無参照側では参照されな
いことを検出する機能を有するコンパイラの最適化方法
であって、 前記先行手続きが条件判定に影響を与えないことが判る
ときに、前記条件分岐を当該先行手続きの前に移動する
ことによって、不要な手続きの実行を抑止するようにし
たことを特徴とするコンパイラの最適化方法。 - 【請求項2】 条件分岐に先立って実行されるように記
述された先行手続きの結果が、該条件分岐により選択さ
れる複数の分岐先のいずれか一方では参照されないこと
を検出する機能を有するコンパイラの最適化方法であっ
て、 前記先行手続きが条件判定に影響を与える場合でも、前
記結果無参照側へ分岐する十分条件を当該先行手続きの
前に決定し、且つ、前記条件分岐を複写することによっ
て、前記先行手続きの実行回数を削減するようにしたこ
とを特徴とするコンパイラの最適化方法。 - 【請求項3】 前記複写された条件分岐において、分岐
先が結果無参照側となる確率を検出し、該複写された条
件分岐の挿入によりオーバヘッドが大きくなるときに
は、前記コンパイラの最適化を抑止するようになってい
る請求項2のコンパイラの最適化方法。 - 【請求項4】 前記条件分岐の判定条件が2つの変数が
一致するか否かの判定であり、一致した場合には結果無
参照側へ分岐するとき、前記先行手続きの内容が前記2
つの変数に対してそれぞれ値を判定し、一致した場合に
当該変数の値を別の値に変更する手続きを備え、前記先
行手続きの前に前記2つの変数が一致する確率の方が当
該先行手続きの後に一致する確率よりも大きいと予測す
るようになっている請求項2のコンパイラの最適化方
法。 - 【請求項5】 入力された第1の言語のソースプログラ
ムを中間コードに変換するソースプログラム解析部
(1)と、該変換された中間コードにより最適化処理を
行う最適化部(2)と、該最適化された中間コードを第
2の言語に変換してオブジェクトプログラムを出力する
コード生成部(3)とを具備し、前記最適化部(2)
は、 条件分岐に先立って実行されるように記述された先行手
続きの結果が、該条件分岐により選択される複数の分岐
先の一方の結果無参照側では参照されないことを検出す
るデータフロー情報収集部(4)と、 前記先行手続きが条件判定に影響を与えないことを判別
するプログラム構造解析部(6)と、 不要な手続きの実行を抑止するために、前記条件分岐を
当該先行手続きの前に移動するプログラム構造変更部
(7)とを具備するコンパイラの最適化装置。 - 【請求項6】 入力された第1の言語のソースプログラ
ムを中間コードに変換するソースプログラム解析部
(1)と、該変換された中間コードにより最適化処理を
行う最適化部(2)と、該最適化された中間コードを第
2の言語に変換してオブジェクトプログラムを出力する
コード生成部(3)とを具備し、前記最適化部(2)
は、 条件分岐に先立って実行されるように記述された先行手
続きの結果が、該条件分岐により選択される複数の分岐
先の一方の結果無参照側では参照されないことを検出す
るデータフロー情報収集部(4)と、 前記先行手続きが条件判定に影響を与える場合でも、前
記結果無参照側へ分岐する十分条件を当該先行手続きの
前に決定するプログラム構造解析部(6)と、 前記先行手続きの実行回数を削減するために、前記条件
分岐を複写するプログラム構造変更部(7)とを具備す
るコンパイラの最適化装置。 - 【請求項7】 前記コンパイラの最適化装置は、さら
に、前記複写された条件分岐において、分岐先が結果無
参照側となる確率を検出する分岐確率予測部(5)を具
備し、該複写された条件分岐の挿入によりオーバヘッド
が大きくなるときには、前記コンパイラの最適化を抑止
するようになっている請求項6のコンパイラの最適化装
置。 - 【請求項8】 前記プログラム構造解析部(6)は、前
記条件分岐の判定条件が2つの変数が一致するか否かを
判定し、前記プログラム構造変更部(7)は、前記2つ
の変数が一致した場合には結果無参照側へ分岐すると
き、前記先行手続きの内容が前記2つの変数に対してそ
れぞれ値を判定し、一致した場合に当該変数の値を別の
値に変更し、そして、前記分岐確率予測部(5)は、前
記先行手続きの前に前記2つの変数が一致する確率の方
が当該先行手続きの後に一致する確率よりも大きいと予
測するようになっている請求項7のコンパイラの最適化
方法。 - 【請求項9】 前記第1の言語は、プログラミング言語
であり、前記第2の言語はアセンブラ言語となっている
請求項5または6に記載のコンパイラの最適化装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5102744A JPH06314203A (ja) | 1993-04-28 | 1993-04-28 | コンパイラの最適化方法および装置 |
| US08/202,567 US5511198A (en) | 1993-04-28 | 1994-02-28 | Optimizing compiler for shortening execution time of object program |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP5102744A JPH06314203A (ja) | 1993-04-28 | 1993-04-28 | コンパイラの最適化方法および装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH06314203A true JPH06314203A (ja) | 1994-11-08 |
Family
ID=14335743
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP5102744A Pending JPH06314203A (ja) | 1993-04-28 | 1993-04-28 | コンパイラの最適化方法および装置 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US5511198A (ja) |
| JP (1) | JPH06314203A (ja) |
Families Citing this family (34)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6009267A (en) * | 1993-09-30 | 1999-12-28 | Fujitsu Limited | Apparatus for analyzing the task specification (business rule specification) of a source program |
| JP3494489B2 (ja) * | 1994-11-30 | 2004-02-09 | 株式会社ルネサステクノロジ | 命令処理装置 |
| US5901318A (en) * | 1996-05-06 | 1999-05-04 | Hewlett-Packard Company | Method and system for optimizing code |
| US5721893A (en) * | 1996-05-14 | 1998-02-24 | Hewlett-Packard Company | Exploiting untagged branch prediction cache by relocating branches |
| US6055371A (en) * | 1996-12-26 | 2000-04-25 | Nec Corporation | Compile device, compile method and recording medium for recording compiler |
| US6282663B1 (en) | 1997-01-22 | 2001-08-28 | Intel Corporation | Method and apparatus for performing power management by suppressing the speculative execution of instructions within a pipelined microprocessor |
| US5894424A (en) * | 1997-05-15 | 1999-04-13 | Matsushita Electrical Industrial Co., Ltd. | Semiconductor testing apparatus |
| US5999739A (en) * | 1997-05-29 | 1999-12-07 | Hewlett-Packard Company | Method and apparatus for elimination of redundant branch instructions from a program |
| US6366999B1 (en) * | 1998-01-28 | 2002-04-02 | Bops, Inc. | Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution |
| US6357039B1 (en) * | 1998-03-03 | 2002-03-12 | Twelve Tone Systems, Inc | Automatic code generation |
| US7599491B2 (en) | 1999-01-11 | 2009-10-06 | Certicom Corp. | Method for strengthening the implementation of ECDSA against power analysis |
| US7092523B2 (en) | 1999-01-11 | 2006-08-15 | Certicom Corp. | Method and apparatus for minimizing differential power attacks on processors |
| US7856633B1 (en) | 2000-03-24 | 2010-12-21 | Intel Corporation | LRU cache replacement for a partitioned set associative cache |
| 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 |
| US6651247B1 (en) | 2000-05-09 | 2003-11-18 | Hewlett-Packard Development Company, L.P. | Method, apparatus, and product for optimizing compiler with rotating register assignment to modulo scheduled code in SSA form |
| US20050071827A1 (en) * | 2003-09-29 | 2005-03-31 | Lai Michael Y. | Method and apparatus for bit field optimization |
| US7886293B2 (en) * | 2004-07-07 | 2011-02-08 | Intel Corporation | Optimizing system behavior in a virtual machine environment |
| US8204232B2 (en) | 2005-01-18 | 2012-06-19 | Certicom Corp. | Accelerated verification of digital signatures and public keys |
| US8467535B2 (en) * | 2005-01-18 | 2013-06-18 | Certicom Corp. | Accelerated verification of digital signatures and public keys |
| KR100902461B1 (ko) | 2005-02-03 | 2009-06-11 | 미쓰비시덴키 가부시키가이샤 | 프로그램 코드 생성 지원 장치 및 방법, 프로그램실행장치와 방법, 프로그램 코드 압축 처리 장치 및 방법과그들의 프로그램 |
| US8813057B2 (en) * | 2007-03-31 | 2014-08-19 | Intel Corporation | Branch pruning in architectures with speculation support |
| US20100199269A1 (en) * | 2008-02-05 | 2010-08-05 | Panasonic Corporation | Program optimization device and program optimization method |
| US9235390B1 (en) * | 2008-03-31 | 2016-01-12 | Symantec Corporation | Application optimization for use based on feature popularity |
| US8570905B2 (en) * | 2008-09-26 | 2013-10-29 | International Business Machines Corporation | Adaptive enterprise service bus (ESB) runtime system and method |
| US8984259B2 (en) * | 2008-11-04 | 2015-03-17 | International Business Machines Corporation | Method, system, and computer program product for optimizing runtime branch selection in a flow process |
| US9134977B2 (en) * | 2010-02-26 | 2015-09-15 | Red Hat, Inc. | Compiler operation for handling conditional statements |
| US8869113B2 (en) * | 2011-01-20 | 2014-10-21 | Fujitsu Limited | Software architecture for validating C++ programs using symbolic execution |
| US8745376B2 (en) | 2011-10-14 | 2014-06-03 | Certicom Corp. | Verifying implicit certificates and digital signatures |
| US9070227B2 (en) | 2013-03-04 | 2015-06-30 | Microsoft Technology Licensing, Llc | Particle based visualizations of abstract information |
| US9754392B2 (en) * | 2013-03-04 | 2017-09-05 | Microsoft Technology Licensing, Llc | Generating data-mapped visualization of data |
| JP6366033B2 (ja) * | 2014-05-09 | 2018-08-01 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | プログラム中のif文の最適化方法 |
| JP6122054B2 (ja) * | 2015-03-13 | 2017-04-26 | ファナック株式会社 | ラダープログラムの分岐回路抽出表示機能を有するモニタ装置 |
| JP6602511B2 (ja) * | 2017-06-02 | 2019-11-06 | 三菱電機株式会社 | プログラムコード生成装置およびプログラムコード生成プログラム |
| US11327733B2 (en) | 2020-05-27 | 2022-05-10 | Blaize, Inc. | Method of using multidimensional blockification to optimize computer program and device thereof |
Family Cites Families (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS5960640A (ja) * | 1982-09-30 | 1984-04-06 | Fujitsu Ltd | コンパイラ処理方法 |
| US4710872A (en) * | 1985-08-07 | 1987-12-01 | International Business Machines Corporation | Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops |
| JPS62159274A (ja) * | 1986-01-08 | 1987-07-15 | Hitachi Ltd | 条件分岐の分割・複写によるベクトル化方式 |
| US5202995A (en) * | 1989-10-12 | 1993-04-13 | International Business Machines Corporation | Method for removing invariant branches from instruction loops of a computer program |
| CA2010068C (en) * | 1990-02-14 | 1993-10-26 | Steven Murray Hoxey | Partitioning case statements for optimal execution performance |
| CA2010056C (en) * | 1990-02-14 | 1998-05-12 | Charles Brian Hall | Method for improving the efficiency of arithmetic code generation in an optimizing compiler using machine independent update instruction generation |
| 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 |
| US5293631A (en) * | 1991-08-06 | 1994-03-08 | Hewlett-Packard Company | Analysis and optimization of array variables in compiler for instruction level parallel processor |
-
1993
- 1993-04-28 JP JP5102744A patent/JPH06314203A/ja active Pending
-
1994
- 1994-02-28 US US08/202,567 patent/US5511198A/en not_active Expired - Lifetime
Also Published As
| Publication number | Publication date |
|---|---|
| US5511198A (en) | 1996-04-23 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH06314203A (ja) | コンパイラの最適化方法および装置 | |
| US6292939B1 (en) | Method of reducing unnecessary barrier instructions | |
| US20110119660A1 (en) | Program conversion apparatus and program conversion method | |
| US6986130B1 (en) | Methods and apparatus for compiling computer programs using partial function inlining | |
| JPH05257709A (ja) | 並列化判別方法およびそれを用いた並列化支援方法 | |
| JP4346316B2 (ja) | 複数の意味レベルによるアスペクト指向プログラミングのための方法 | |
| US20020095667A1 (en) | Optimizing compilation by forward store movement | |
| JP3280332B2 (ja) | ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法 | |
| US7373641B2 (en) | Method, computer unit and program for converting a program | |
| US7950005B2 (en) | Method and apparatus for performing versioning for loop, method and apparatus for collecting array range check information in basic blocks, method for modifying array range check information, method for optimizing array range checks, method for generating codes for array range checks, method and apparatus for eliminating redundant array range checks, method for selecting array range checks, method for modifying array range checks, method for collecting array range checks, and method for determining handling of array range checks | |
| JP2002259134A (ja) | ポストリンク・コードの最適化方法及び装置 | |
| US5854933A (en) | Method for optimizing a computer program by moving certain load and store instructions out of a loop | |
| JPH06324881A (ja) | メモリデータの重なり判定機能を備えたコンパイラ装置 | |
| US20020052856A1 (en) | Method of data-dependence analysis and display for procedure call | |
| US4642765A (en) | Optimization of range checking | |
| US20020095669A1 (en) | Interprocedural dead store elimination | |
| JPH11167492A (ja) | ループ飛び出し文を含むループに対する配列サマリ解析方法 | |
| EP1121641A1 (en) | Apparatus and method for program optimizing | |
| EP1202171A2 (en) | Compile method and program recording medium | |
| US8762974B1 (en) | Context-sensitive compiler directives | |
| JPH10116197A (ja) | プログラム解析方法 | |
| JPH09265400A (ja) | コンパイル最適化方式 | |
| JP3034582B2 (ja) | コンパイル処理方式 | |
| JP3018783B2 (ja) | コンパイル方式 | |
| JPH08328868A (ja) | 目的コード最適化装置及び方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20010403 |