JPH0546404A - 分岐命令削除最適化方式 - Google Patents
分岐命令削除最適化方式Info
- Publication number
- JPH0546404A JPH0546404A JP20022291A JP20022291A JPH0546404A JP H0546404 A JPH0546404 A JP H0546404A JP 20022291 A JP20022291 A JP 20022291A JP 20022291 A JP20022291 A JP 20022291A JP H0546404 A JPH0546404 A JP H0546404A
- Authority
- JP
- Japan
- Prior art keywords
- branch
- instruction
- branch instruction
- intermediate language
- operands
- 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
Landscapes
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 本発明は、翻訳時に分岐命令を削除して最適
化する分岐命令削除最適化方式に関し、翻訳時に、既に
分岐命令の分岐先が確定する分岐命令を削除し、実行性
能を向上させることを目的とする。 【構成】 ソースプログラム(中間言語)の判定文のオ
ペランドが定数のときあるいは変数が同じときに、分岐
命令を削除する比較・分岐削除処理2を備え、この比較
・分岐削除処理2が翻訳時にソースプログラム(中間言
語)の判定文のオペランドが全て定数のときあるいはオ
ペランドの変数が同じときに、当該判定文および分岐先
でない方の命令を削除し、最適化するように構成する。
化する分岐命令削除最適化方式に関し、翻訳時に、既に
分岐命令の分岐先が確定する分岐命令を削除し、実行性
能を向上させることを目的とする。 【構成】 ソースプログラム(中間言語)の判定文のオ
ペランドが定数のときあるいは変数が同じときに、分岐
命令を削除する比較・分岐削除処理2を備え、この比較
・分岐削除処理2が翻訳時にソースプログラム(中間言
語)の判定文のオペランドが全て定数のときあるいはオ
ペランドの変数が同じときに、当該判定文および分岐先
でない方の命令を削除し、最適化するように構成する。
Description
【0001】
【産業上の利用分野】本発明は、翻訳時に分岐命令を削
除して最適化する分岐命令削除最適化方式に関するもの
である。
除して最適化する分岐命令削除最適化方式に関するもの
である。
【0002】
【従来の技術】ソースプログラムに判定文を書いた場
合、機械命令では分岐命令になる。従来のコンパイラ
は、翻訳時に分岐先が確定している分岐命令であっても
分岐命令を削除していなくそのまま翻訳し、機械命令を
生成していた。例えば図5の(イ)に示すC言語のソー
スプログラム(中間言語)のif文 について、最適化を行うと、図5の(ロ)に示すよう
に、当該if文のオペランドa、bに値が置き換えら
れ、下記のようにしていた。
合、機械命令では分岐命令になる。従来のコンパイラ
は、翻訳時に分岐先が確定している分岐命令であっても
分岐命令を削除していなくそのまま翻訳し、機械命令を
生成していた。例えば図5の(イ)に示すC言語のソー
スプログラム(中間言語)のif文 について、最適化を行うと、図5の(ロ)に示すよう
に、当該if文のオペランドa、bに値が置き換えら
れ、下記のようにしていた。
【0003】
【0004】
【発明が解決しようとする課題】このように、従来はi
f文などで分岐先が確定していても、図5の(イ)を最
適化によって図5の(ロ)に示すようにif文などのオ
ペランドに値(定数)を置き換え、これを機械語に翻訳
していたため、機械語で分岐命令の分だけ実行時間が多
く必要になってしまい、実行性能が悪くなると共に、実
行しない個所があり、余分な機械語が残ってしまい、ロ
ードモジュールのサイズを大きくしてしまうという問題
があった。このため、実行しない個所を最適化して削除
することが望まれている。
f文などで分岐先が確定していても、図5の(イ)を最
適化によって図5の(ロ)に示すようにif文などのオ
ペランドに値(定数)を置き換え、これを機械語に翻訳
していたため、機械語で分岐命令の分だけ実行時間が多
く必要になってしまい、実行性能が悪くなると共に、実
行しない個所があり、余分な機械語が残ってしまい、ロ
ードモジュールのサイズを大きくしてしまうという問題
があった。このため、実行しない個所を最適化して削除
することが望まれている。
【0005】本発明は、翻訳時に、既に分岐命令の分岐
先が確定する分岐命令を削除し、実行性能を向上させる
ことを目的としている。
先が確定する分岐命令を削除し、実行性能を向上させる
ことを目的としている。
【0006】
【課題を解決するための手段】図1を参照して課題を解
決するための手段を説明する。図1において、比較・分
岐削除処理2は、ソースプログラム(中間言語)4の判
定文のオペランドが定数かあるいは変数が同じかを比較
したり、分岐命令を削除したりするものである。
決するための手段を説明する。図1において、比較・分
岐削除処理2は、ソースプログラム(中間言語)4の判
定文のオペランドが定数かあるいは変数が同じかを比較
したり、分岐命令を削除したりするものである。
【0007】ソースプログラム(中間言語)4は、最適
化対象のソースプログラムを変換した中間言語である。
化対象のソースプログラムを変換した中間言語である。
【0008】
【作用】本発明は、図1に示すように、比較・分岐削除
処理2が翻訳時にソースプログラム(中間言語)4を順
次取込み、判定文のオペランドが全て定数であった場
合、あるいはオペランドの変数が全て同じであった場
合、ソースプログラム(中間言語)4の判定文および分
岐先でない方の命令を削除し、最適化を行うようにして
いる。
処理2が翻訳時にソースプログラム(中間言語)4を順
次取込み、判定文のオペランドが全て定数であった場
合、あるいはオペランドの変数が全て同じであった場
合、ソースプログラム(中間言語)4の判定文および分
岐先でない方の命令を削除し、最適化を行うようにして
いる。
【0009】従って、翻訳時に、既に分岐命令の分岐先
が確定する分岐命令の判定文および分岐先でない方の命
令を削除し、実行性能を向上させることが可能となる。
が確定する分岐命令の判定文および分岐先でない方の命
令を削除し、実行性能を向上させることが可能となる。
【0010】
【実施例】次に、図1から図4を用いて本発明の実施例
の構成および動作を順次詳細に説明する。
の構成および動作を順次詳細に説明する。
【0011】図1において、コンパイラ1は、ソースプ
ログラムを読込み、中間言語に変換したり、この中間言
語について最適化を行ったり、最適化後の中間言語を機
械語に翻訳したりなどするものであって、ここでは、本
発明の比較・分岐削除処理2などから構成されるもので
ある。
ログラムを読込み、中間言語に変換したり、この中間言
語について最適化を行ったり、最適化後の中間言語を機
械語に翻訳したりなどするものであって、ここでは、本
発明の比較・分岐削除処理2などから構成されるもので
ある。
【0012】比較・分岐削除処理2は、ソースプログラ
ム(中間言語)4の判定文のオペランドが定数である
か、あるいは変数が同じかを比較したり、分岐命令を削
除したりするものである。例えばif文 のうちのif(a==b)のオペランドaと、bとが定
数か否かを判定する。これが例えば図3の(イ)のよう
にif(10==8)と判明したときにオペランドa、
bが共に定数となり、削除対象と判定する。
ム(中間言語)4の判定文のオペランドが定数である
か、あるいは変数が同じかを比較したり、分岐命令を削
除したりするものである。例えばif文 のうちのif(a==b)のオペランドaと、bとが定
数か否かを判定する。これが例えば図3の(イ)のよう
にif(10==8)と判明したときにオペランドa、
bが共に定数となり、削除対象と判定する。
【0013】メモリ3は、ソースプログラム(中間言
語)4などを格納するメモリである。ソースプログラム
(中間言語)4は、本実施例の判定文を削除する対象
の、ソースプログラムを変換した中間言語である。右側
のフローは、左側のソースプログラム(中間言語)の処
理をイメージ図として表示したものである。ここでin
t a,b,x;/変数a、b、xは整数である a=10;/変数aの値は10である b=8;/変数bの値は8である 次に、図2のフローチャートに示す順序に従い、図3
の(イ)の最適化前の状態から図3の(ロ)の最適化後
の状態を生成する処理を詳細に説明する。
語)4などを格納するメモリである。ソースプログラム
(中間言語)4は、本実施例の判定文を削除する対象
の、ソースプログラムを変換した中間言語である。右側
のフローは、左側のソースプログラム(中間言語)の処
理をイメージ図として表示したものである。ここでin
t a,b,x;/変数a、b、xは整数である a=10;/変数aの値は10である b=8;/変数bの値は8である 次に、図2のフローチャートに示す順序に従い、図3
の(イ)の最適化前の状態から図3の(ロ)の最適化後
の状態を生成する処理を詳細に説明する。
【0014】図2において、S1は、命令は残っている
か否かを判別する。これは、図3の(イ)の最適化前の
状態(ソースプログラムを変換した中間言語の本発明の
最適化前の状態)で命令を先頭から順次取込み、未処理
の命令が残っているか否かを判別する。NOの場合に
は、終了する。YESの場合には、S2で次の命令(中
間言語の命令)を1つ読み出し、S3に進む。
か否かを判別する。これは、図3の(イ)の最適化前の
状態(ソースプログラムを変換した中間言語の本発明の
最適化前の状態)で命令を先頭から順次取込み、未処理
の命令が残っているか否かを判別する。NOの場合に
は、終了する。YESの場合には、S2で次の命令(中
間言語の命令)を1つ読み出し、S3に進む。
【0015】S3は、命令が分岐命令か否かを判別す
る。YESの場合には、本発明の最適化の対象の分岐命
令であったので、S4に進む。NOの場合には、本発明
の最適化の対象の分岐命令でなかったので、S1を繰り
返し行う。
る。YESの場合には、本発明の最適化の対象の分岐命
令であったので、S4に進む。NOの場合には、本発明
の最適化の対象の分岐命令でなかったので、S1を繰り
返し行う。
【0016】S4は、分岐命令のオペランドが全て定数
か否かを判別する。これは、例えばif文がif(a=
=b)のときオペランドa、bが共に定数であるか否か
を判別する。YESの場合には、分岐命令のオペランド
が全て定数であって、分岐先が確定しているので、当該
分岐命令を削除できることが判明したので、S6に進
み、オペランドと分岐条件から真か偽か判定し、真のと
きにS7で分岐命令と偽のときの命令とを削除し、偽の
ときにS8で分岐命令と真のときの命令とを削除する。
一方、S4でNOの場合、オペランドが全て定数でなか
ったので、S5に進む。
か否かを判別する。これは、例えばif文がif(a=
=b)のときオペランドa、bが共に定数であるか否か
を判別する。YESの場合には、分岐命令のオペランド
が全て定数であって、分岐先が確定しているので、当該
分岐命令を削除できることが判明したので、S6に進
み、オペランドと分岐条件から真か偽か判定し、真のと
きにS7で分岐命令と偽のときの命令とを削除し、偽の
ときにS8で分岐命令と真のときの命令とを削除する。
一方、S4でNOの場合、オペランドが全て定数でなか
ったので、S5に進む。
【0017】S5は、分岐命令のオペランドの変数が同
じか否かを判別する。YESの場合には、S6に進み、
オペランドと分岐条件から真か偽かを判定し、真のとき
にS7で分岐命令と偽のときの命令を削除し、偽のとき
にS8で分岐命令と真のときの命令を削除する。
じか否かを判別する。YESの場合には、S6に進み、
オペランドと分岐条件から真か偽かを判定し、真のとき
にS7で分岐命令と偽のときの命令を削除し、偽のとき
にS8で分岐命令と真のときの命令を削除する。
【0018】具体的に説明すると、図3の(イ)におい
て、if文である のうちのif(10==8)のオペランド10、8が共
に定数であると判明したので(図2のS4のYES)、
オペランドと分岐条件からここでは偽と判定し(図2の
S6の偽)、分岐命令if(10==8)と、真のとき
の命令x=18を削除し、上記一連のif文を x=2; とする。これにより、図3の(イ)の最適化前の状態の
中間言語が、図3の(ロ)の最適化後の中間言語に最適
化されることとなる。
て、if文である のうちのif(10==8)のオペランド10、8が共
に定数であると判明したので(図2のS4のYES)、
オペランドと分岐条件からここでは偽と判定し(図2の
S6の偽)、分岐命令if(10==8)と、真のとき
の命令x=18を削除し、上記一連のif文を x=2; とする。これにより、図3の(イ)の最適化前の状態の
中間言語が、図3の(ロ)の最適化後の中間言語に最適
化されることとなる。
【0019】以上のように、最適化前の状態の中間言語
の命令を1つ1つ読込み、分岐命令であった場合に、こ
の分岐命令のオペランドが全て定数であったとき、ある
いは全て同一の変数であったとき、分岐先が確定したの
で、分岐命令および分岐先以外の命令を削除してもよ
い。これにより、翻訳時に分岐先の確定した無意味の分
岐命令を削除して最適化を行うことが可能となる。
の命令を1つ1つ読込み、分岐命令であった場合に、こ
の分岐命令のオペランドが全て定数であったとき、ある
いは全て同一の変数であったとき、分岐先が確定したの
で、分岐命令および分岐先以外の命令を削除してもよ
い。これにより、翻訳時に分岐先の確定した無意味の分
岐命令を削除して最適化を行うことが可能となる。
【0020】図3は、具体例説明図を示す。これは、c
言語のif文の最適化の場合のものである。図3の
(イ)は、ソースプログラムを変換した中間言語の最適
化前の状態を示す。左側は中間言語のif文を示し、右
側はそのときの処理のフローをイメージ図として表わし
たものを示す。
言語のif文の最適化の場合のものである。図3の
(イ)は、ソースプログラムを変換した中間言語の最適
化前の状態を示す。左側は中間言語のif文を示し、右
側はそのときの処理のフローをイメージ図として表わし
たものを示す。
【0021】ここで、if文であるif(10==8)
のオペランド10、8が共に定数であり、偽であるので
(図2のS1のYES、S2、S3のYES、S4のY
ES、S5の偽であるので)、図2のS8で分岐命令で
ある if(10==8) と、真のときの命令である x=18; と、if文に付随したelseなどを削除し、図3の
(ロ)に示すようにする。
のオペランド10、8が共に定数であり、偽であるので
(図2のS1のYES、S2、S3のYES、S4のY
ES、S5の偽であるので)、図2のS8で分岐命令で
ある if(10==8) と、真のときの命令である x=18; と、if文に付随したelseなどを削除し、図3の
(ロ)に示すようにする。
【0022】図3の(ロ)は、図3の(イ)の最適化前
の状態の中間言語を、最適化した後の中間言語を示す。
ここで、図3の(イ)の のif文および真の命令などを削除し、 x=2; に最適化している。
の状態の中間言語を、最適化した後の中間言語を示す。
ここで、図3の(イ)の のif文および真の命令などを削除し、 x=2; に最適化している。
【0023】図4は、本発明の他の具体例説明図を示
す。これは、c言語のswitch文の最適化の場合の
ものである。図4の(イ)は、ソースプログラムを変換
した中間言語の最適化前の状態を示す。左側は中間言語
のswitch文を示し、右側はそのときの処理のフロ
ーをイメージ図として表わしたものを示す。
す。これは、c言語のswitch文の最適化の場合の
ものである。図4の(イ)は、ソースプログラムを変換
した中間言語の最適化前の状態を示す。左側は中間言語
のswitch文を示し、右側はそのときの処理のフロ
ーをイメージ図として表わしたものを示す。
【0024】ここで、switch文であるswitc
h(c)のオペランドcが定数2であるので(図2のS
1のYES、S2、S3のYES、S4のYES、S5
の真であるので)、図2のS7で分岐命令である switch(c) と、偽の命令である case 1: x=a+b; break case 3: x=a/b; break default: x=a*b; break などを削除し、図4の(ロ)に示すようにする。
h(c)のオペランドcが定数2であるので(図2のS
1のYES、S2、S3のYES、S4のYES、S5
の真であるので)、図2のS7で分岐命令である switch(c) と、偽の命令である case 1: x=a+b; break case 3: x=a/b; break default: x=a*b; break などを削除し、図4の(ロ)に示すようにする。
【0025】図4の(ロ)は、図4の(イ)の最適化前
の状態の中間言語を、最適化した後の中間言語を示す。
ここで、図4の(イ)の からswitch文および偽の命令などを削除し、 に最適化している。
の状態の中間言語を、最適化した後の中間言語を示す。
ここで、図4の(イ)の からswitch文および偽の命令などを削除し、 に最適化している。
【0026】
【発明の効果】以上説明したように、本発明によれば、
翻訳時に、既に分岐命令の分岐先が確定する分岐命令の
判定文および分岐先でない方の命令を削除して最適化を
行う構成を採用しているため、翻訳性能を向上させ、翻
訳した後の機械語の実行時に分岐命令の実行を無くして
実行速度を向上させることができる。
翻訳時に、既に分岐命令の分岐先が確定する分岐命令の
判定文および分岐先でない方の命令を削除して最適化を
行う構成を採用しているため、翻訳性能を向上させ、翻
訳した後の機械語の実行時に分岐命令の実行を無くして
実行速度を向上させることができる。
【図1】本発明の1実施例構成図である。
【図2】本発明の動作説明フローチャートである。
【図3】本発明の具体例説明図である。
【図4】本発明の他の具体例説明図である。
【図5】従来技術の説明図である。
1:コンパイラ 2:比較・分岐削除処理 3:メモリ 4:ソースプログラム(中間言語)
Claims (1)
- 【請求項1】 翻訳時に分岐命令を削除して最適化する
分岐命令削除最適化方式において、 ソースプログラム(中間言語)の判定文のオペランドが
定数のときあるいは変数が同じときに、分岐命令を削除
する比較・分岐削除処理(2)を備え、 この比較・分岐削除処理(2)が翻訳時にソースプログ
ラム(中間言語)の判定文のオペランドが全て定数のと
きあるいはオペランドの変数が同じときに、当該判定文
および分岐先でない方の命令を削除し、最適化するよう
に構成したことを特徴とする分岐命令削除最適化方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP20022291A JPH0546404A (ja) | 1991-08-09 | 1991-08-09 | 分岐命令削除最適化方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP20022291A JPH0546404A (ja) | 1991-08-09 | 1991-08-09 | 分岐命令削除最適化方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0546404A true JPH0546404A (ja) | 1993-02-26 |
Family
ID=16420841
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP20022291A Pending JPH0546404A (ja) | 1991-08-09 | 1991-08-09 | 分岐命令削除最適化方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0546404A (ja) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0744397A (ja) * | 1993-07-30 | 1995-02-14 | Nec Corp | プログラム処理高速化方式 |
| JPH07152583A (ja) * | 1993-11-30 | 1995-06-16 | Nec Corp | 実行形式ファイル生成装置 |
| US6440062B1 (en) | 1999-11-10 | 2002-08-27 | Asahi Kogaku Kogyo Kabushiki Kaisha | Control wire driving mechanism for use in endoscope |
| WO2009098739A1 (ja) * | 2008-02-05 | 2009-08-13 | Panasonic Corporation | プログラム最適化装置およびプログラム最適化方法 |
-
1991
- 1991-08-09 JP JP20022291A patent/JPH0546404A/ja active Pending
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0744397A (ja) * | 1993-07-30 | 1995-02-14 | Nec Corp | プログラム処理高速化方式 |
| JPH07152583A (ja) * | 1993-11-30 | 1995-06-16 | Nec Corp | 実行形式ファイル生成装置 |
| US6440062B1 (en) | 1999-11-10 | 2002-08-27 | Asahi Kogaku Kogyo Kabushiki Kaisha | Control wire driving mechanism for use in endoscope |
| WO2009098739A1 (ja) * | 2008-02-05 | 2009-08-13 | Panasonic Corporation | プログラム最適化装置およびプログラム最適化方法 |
| JPWO2009098739A1 (ja) * | 2008-02-05 | 2011-05-26 | パナソニック株式会社 | プログラム最適化装置およびプログラム最適化方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH0721033A (ja) | 言語処理装置及びその方法 | |
| JPH0546404A (ja) | 分岐命令削除最適化方式 | |
| JP2636665B2 (ja) | 実行情報採取装置 | |
| JP3430635B2 (ja) | 定数参照最適化処理装置 | |
| JP2001125793A (ja) | コンパイラシステム及びコンパイル方法並びに記録媒体 | |
| JP3239830B2 (ja) | 移送命令最適化装置および方法 | |
| JPH05113882A (ja) | 中間フアイルによる外付けマン・マシン・インターフエース実現方式 | |
| JP3004340B2 (ja) | プログラム最適化装置 | |
| JPS5852752A (ja) | セクション決定方式 | |
| JPH0527986A (ja) | コンパイラの最適化方法および最適化装置 | |
| JPS63318634A (ja) | 命令先取り方式 | |
| JPH0644082A (ja) | 最適化テキスト作成方式 | |
| JPH0776926B2 (ja) | ループ制御処理方法 | |
| JPH05100720A (ja) | プログラムの管理装置 | |
| JPH09330231A (ja) | インタプリタ実行装置 | |
| JP3327634B2 (ja) | プログラム変換装置、およびプログラム変換方法 | |
| JPH04116756A (ja) | アプリケーション内のユーザ定義コマンドのダイナミックリンクシステム | |
| JPH04323731A (ja) | 最適化テキスト編集方式 | |
| JPH1124939A (ja) | プログラム変換方法 | |
| JPS60220468A (ja) | ベクトル演算制御方式 | |
| JPS6297031A (ja) | 仮数部のビツト数整合方式 | |
| KR19990069515A (ko) | 피엘씨 시스템의 데이터 실시간 처리장치 및 방법 | |
| JPH05158706A (ja) | 中間言語の最適化処理方式 | |
| JPH05158507A (ja) | 計装制御装置 | |
| JPH05151000A (ja) | 最適な内部呼び出し命令の生成処理方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20001024 |