(57)【特許請求の範囲】
【請求項１】
実行しなくてもプログラムの結果が変化しない命令である実行不要命令をＣＰＵが抽出して削除する方法であって、
入力プログラムの各命令の定義参照関係を解析する定義参照解析ステップと、
ある１つの命令に着目して、その命令を実行しない場合の以降の命令の実行結果を推測し、実行した場合との結果の変化を解析する実行結果変化解析ステップと、
前記実行結果変化解析ステップで解析した結果を用いて、ある命令を実行しないことによってプログラムの実行結果が変化するかどうかを判定し、変化しない場合はその命令を実行不要として削除する実行不要命令削除ステップと、を備えることを特徴とする実行不要命令の削除方法において、
前記実行不要命令削除ステップは更に、
命令が実行不要かどうかを判定する場合に、目的プログラムの各命令を、ソースプログラムの結果を表す命令である結果命令と、ソースプログラムの結果を求めるための中間結果を表す中間命令との２種類に分類し、ある命令を実行しなかった場合の以降の命令の結果変化において、前記中間命令の実行結果の一部分が変化する可能性があるが、全ての結果命令の実行結果が変化しない場合に、その命令を実行不要とすることを特徴とする実行不要命令の削除方法。
【請求項２】
請求項１記載の削除方法において、
前記実行結果変化解析ステップは更に、
実行結果の推測をする場合に、結果のレジスタやメモリの値を１ビット毎に解析することを特徴とする実行不要命令の削除方法。
【請求項３】
請求項２記載の削除方法において、
前記実行結果変化解析ステップは更に、
レジスタやメモリの各ビットの解析において、各ビットの値を０，１の値に加えて、値が全くわからない場合についても各ビットが同値であるかを表す状態記号表現を用いることにより、各ビットの値を表すことを特徴とする実行不要命令の削除方法。
【請求項４】
請求項１記載の削除方法において、
前記実行結果変化解析ステップは更に、
実行結果の推測をする場合に、結果のレジスタやメモリの値を複数ビット単位でブロックに分割し、ブロック毎に実行結果の変化を解析することを特徴とする実行不要命令の削除方法。
【請求項５】
請求項１記載の削除方法において、
前記実行不要命令削除ステップは更に、
プログラムの一時結果を格納するための、レジスタを定義する命令を中間命令とし、
メモリ定義命令と分岐命令とを含むレジスタを定義する命令以外の命令を結果命令とすることを特徴とする実行不要命令の削除方法。
【請求項６】
請求項１記載の削除方法において、
前記実行不要命令削除ステップは更に、
目的プログラム内のある範囲を対象とし、定義がその範囲内でのみ参照される命令を中間命令とし、定義が範囲外でも参照される命令を結果命令とすることを特徴とする実行不要命令の削除方法。
【請求項７】
実行しなくてもプログラムの結果が変化しない命令である実行不要命令をＣＰＵが抽出して削除する装置であって、
入力プログラムの各命令の定義参照関係を解析する定義参照解析手段と、
ある１つの命令に着目して、その命令を実行しない場合の以降の命令の実行結果を推測し、実行した場合との結果の変化を解析する実行結果変化解析手段と、
前記実行結果変化解析手段で解析した結果を用いて、ある命令を実行しないことによってプログラムの実行結果が変化するかどうかを判定し、変化しない場合はその命令を実行不要として削除する実行不要命令削除手段と、を備え、
前記実行不要命令削除手段は更に、
命令が実行不要かどうかを判定する場合に、目的プログラムの各命令を、ソースプログラムの結果を表す命令である結果命令と、ソースプログラムの結果を求めるための中間結果を表す中間命令との２種類に分類し、ある命令を実行しなかった場合の以降の命令の結果変化において、前記中間命令の実行結果の一部分が変化する可能性があるが、全ての結果命令の実行結果が変化しない場合に、その命令を実行不要とすることを特徴とする実行不要命令の削除装置。
【請求項８】
実行しなくてもプログラムの結果が変化しない命令である実行不要命令をＣＰＵが抽出して削除する各ステップをコンピュータに実行させるプログラムを記録した記録媒体であって、
前記ステップは、
入力プログラムの各命令の定義参照関係を解析する定義参照解析ステップと、
ある１つの命令に着目して、その命令を実行しない場合の以降の命令の実行結果を推測し、実行した場合との結果の変化を解析する実行結果変化解析ステップと、
前記実行結果変化解析ステップで解析した結果を用いて、ある命令を実行しないことによってプログラムの実行結果が変化するかどうかを判定し、変化しない場合はその命令を実行不要として削除する実行不要命令削除ステップであって、
前記実行不要命令削除ステップは更に、
命令が実行不要かどうかを判定する場合に、目的プログラムの各命令を、ソースプログラムの結果を表す命令である結果命令と、ソースプログラムの結果を求めるための中間結果を表す中間命令との２種類に分類し、ある命令を実行しなかった場合の以降の命令の結果変化において、前記中間命令の実行結果の一部分が変化する可能性があるが、全ての結果命令の実行結果が変化しない場合に、その命令を実行不要とすることを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンパイラ最適化技術において、実行不要な命令を削除する最適化である実行不要命令の削除方法、実行不要命令の削除装置及びそのプログラム記録媒体に関する。
【０００２】
【従来の技術】
近年、ソフトウェア開発においては、開発効率や保守性からＣ言語などの高級言語による開発が主流となってきており、コンパイラによるコード最適化が重要性を増している。
【０００３】
コンパイラによるコード最適化には様々な技術が存在するが、その１つに実行不要命令削除最適化がある。コンパイラは、入力したソースプログラムから目的プログラムを生成するが、目的プログラムの中には、実行しなくてもプログラムの実行結果に影響しない冗長な命令が存在することがある。このような命令を実行不要命令と呼び、実行不要命令を削除する最適化を実行不要命令削除最適化と呼ぶ。
【０００４】
従来、ある命令が実行不要かどうかを解析する手法としては、同値関係情報を解析して、同値を転送する命令を実行不要とする手法や、定義参照関係を解析して、定義が参照されない命令を実行不要とする手法などが存在する。
【０００５】
【発明が解決しようとする課題】
しかしながら、上記の従来の解析手法では、削除しても他の命令に全く影響がない命令のみを削除していた。ところが、実際には削除した場合に、他の一部の命令の結果は変化する可能性があるが、ソースプログラムの意味は変化させずに命令を削除することが可能なことがある。
【０００６】
本発明は、従来手法の問題点を解決するもので、命令が実行不要かどうかの判定において、命令を実行しなかった場合にソースプログラムの意味が変化するかどうかを解析することにより、実行不要であるにもかかわらす、従来は実行不要であることが判定できなかった命令を、実行不要命令として削除することを目的とする。
【０００７】
【課題を解決するための手段】
本願の請求項１の発明は、実行しなくてもプログラムの結果が変化しない命令である実行不要命令をＣＰＵが抽出して削除する方法であって、入力プログラムの各命令の定義参照関係を解析する定義参照解析ステップと、ある１つの命令に着目して、その命令を実行しない場合の以降の命令の実行結果を推測し、実行した場合との結果の変化を解析する実行結果変化解析ステップと、前記実行結果変化解析ステップで解析した結果を用いて、ある命令を実行しないことによってプログラムの実行結果が変化するかどうかを判定し、変化しない場合はその命令を実行不要として削除する実行不要命令削除ステップと、を備えることを特徴とする実行不要命令の削除方法において、前記実行不要命令削除ステップは更に、命令が実行不要かどうかを判定する場合に、目的プログラムの各命令を、ソースプログラムの結果を表す命令である結果命令と、ソースプログラムの結果を求めるための中間結果を表す中間命令との２種類に分類し、ある命令を実行しなかった場合の以降の命令の結果変化において、前記中間命令の実行結果の一部分が変化する可能性があるが、全ての結果命令の実行結果が変化しない場合に、その命令を実行不要とすることを特徴とするものである。
【０００８】
本願の請求項２の発明は、請求項１記載の削除方法において、前記実行結果変化解析ステップは更に、実行結果の推測をする場合に、結果のレジスタやメモリの値を１ビット毎に解析することを特徴とするものである。
【０００９】
本願の請求項３の発明は、請求項２記載の削除方法において、前記実行結果変化解析ステップは更に、レジスタやメモリの各ビットの解析において、各ビットの値を０，１の値に加えて、値が全くわからない場合についても各ビットが同値であるかを表す状態記号表現を用いることにより、各ビットの値を表すことを特徴とするものである。
【００１０】
本願の請求項４の発明は、請求項１記載の削除方法において、前記実行結果変化解析ステップは更に、実行結果の推測をする場合に、結果のレジスタやメモリの値を複数ビット単位でブロックに分割し、ブロック毎に実行結果の変化を解析することを特徴とするものである。
【００１２】
本願の請求項５の発明は、請求項１記載の削除方法において、前記実行不要命令削除ステップは更に、プログラムの一時結果を格納するための、レジスタを定義する命令を中間命令とし、メモリ定義命令と分岐命令とを含むレジスタを定義する命令以外の命令を結果命令とすることを特徴とするものである。
【００１３】
本願の請求項６の発明は、請求項１記載の削除方法において、前記実行不要命令削除ステップは更に、目的プログラム内のある範囲を対象とし、定義がその範囲内でのみ参照される命令を中間命令とし、定義が範囲外でも参照される命令を結果命令とすることを特徴とするものである。
【００１４】
本願の請求項７の発明は、実行しなくてもプログラムの結果が変化しない命令である実行不要命令をＣＰＵが抽出して削除する装置であって、入力プログラムの各命令の定義参照関係を解析する定義参照解析手段と、ある１つの命令に着目して、その命令を実行しない場合の以降の命令の実行結果を推測し、実行した場合との結果の変化を解析する実行結果変化解析手段と、前記実行結果変化解析手段で解析した結果を用いて、ある命令を実行しないことによってプログラムの実行結果が変化するかどうかを判定し、変化しない場合はその命令を実行不要として削除する実行不要命令削除手段と、を備え、前記実行不要命令削除手段は更に、命令が実行不要かどうかを判定する場合に、目的プログラムの各命令を、ソースプログラムの結果を表す命令である結果命令と、ソースプログラムの結果を求めるための中間結果を表す中間命令との２種類に分類し、ある命令を実行しなかった場合の以降の命令の結果変化において、前記中間命令の実行結果の一部分が変化する可能性があるが、全ての結果命令の実行結果が変化しない場合に、その命令を実行不要とすることを特徴とするものである。
【００１５】
本願の請求項８の発明は、実行しなくてもプログラムの結果が変化しない命令である実行不要命令をＣＰＵが抽出して削除する各ステップをコンピュータに実行させるプログラムを記録した記録媒体であって、前記ステップは、入力プログラムの各命令の定義参照関係を解析する定義参照解析ステップと、ある１つの命令に着目して、その命令を実行しない場合の以降の命令の実行結果を推測し、実行した場合との結果の変化を解析する実行結果変化解析ステップと、前記実行結果変化解析ステップで解析した結果を用いて、ある命令を実行しないことによってプログラムの実行結果が変化するかどうかを判定し、変化しない場合はその命令を実行不要として削除する実行不要命令削除ステップであって、前記実行不要命令削除ステップは更に、命令が実行不要かどうかを判定する場合に、目的プログラムの各命令を、ソースプログラムの結果を表す命令である結果命令と、ソースプログラムの結果を求めるための中間結果を表す中間命令との２種類に分類し、ある命令を実行しなかった場合の以降の命令の結果変化において、前記中間命令の実行結果の一部分が変化する可能性があるが、全ての結果命令の実行結果が変化しない場合に、その命令を実行不要とすることを特徴とするものである。
【００１６】
【発明の実施の形態】
以下、本発明の一実施の形態について、図面を参照しながら説明する。図１は本発明の一実施の形態の構成を示すものである。本実施の形態は、プログラム入力部１０１と、定義参照解析部１０２と、実行結果変化解析部１０３と、実行不要命令削除部１０４から構成される。
【００１７】
次に、各部の機能について図面を用いて説明する。プログラム入力部１０１は、コンパイラなどのプログラム変換装置の出力である目的プログラムを入力として受け取る。目的プログラムの例としてはアセンブラ命令などが挙げられる。ここでは図示しないプログラム変換装置の入力を「ソースプログラム」、プログラム変換装置の出力を「目的プログラム」と呼ぶことにする。本発明では、入力プログラムである目的プログラムの命令を以下の２種類に分類することにする。
・結果命令
ソースプログラムに対応する目的プログラムの命令列において、そのソースプログラムの結果を表す命令
・中間命令
ソースプログラムに対応する目的プログラムの命令列において、そのソースプログラムの結果を求める過程の命令
【００１８】
図２に結果命令と中間命令の例を示す。ソースプログラムの文（１）をプログラム変換装置で変換することにより、目的プログラムの命令（２），（３），（４）が生成される。命令（２）は変数ａの値をメモリからレジスタＲ０にロードしている。命令（３）はレジスタＲ０に定数２を加算している。命令（４）はレジスタの値を変数ａに格納している。ここで、ソースプログラムの文（１）の結果を表しているのは命令（４）であり、これは結果命令である。命令（２）と（３）は変数ａに格納する値を求めるための中間結果を表しており、これらは中間命令である。
【００１９】
定義参照解析部１０２は、入力プログラムの各命令について、定義参照の関係を解析する。この解析は連鎖情報解析とも呼ばれる。定義参照解析部１０２の詳細な説明については、本発明の主眼ではなく公知技術であるので、ここでは省略する。
【００２０】
実行結果変化解析部１０３は、入力プログラムのうちのある１命令を受け取り、その命令を削除対象命令として、前記削除対象命令を実行しなかったことにより結果が変化する可能性がある全ての命令について、結果の変化を解析する。
【００２１】
実行結果変化解析部１０３の動作を図３のフローチャートを用いながら説明する。ステップａ１では、削除対象命令について定義参照グラフを作成する。削除対象命令の定義参照グラフとは、命令をノードとし、命令間のデータの定義参照関係を有向辺で表したものである。
【００２２】
図４のフローチャートを用いながら定義参照グラフの作成方法を説明する。
ステップｂ１では、初期状態としてまず削除対象命令のノードを作成する。ステップｂ２−ｂ４のループでは、命令の種類が中間命令である全てのノードについて処理を行う。ステップｂ３では、命令の種類が中間命令である命令について、その参照命令を全て取り出してノードを作成し、定義命令から参照命令に向けて有向辺を引く。
ここで、参照命令と定義命令とは以下のような命令である。
・参照命令
ある命令についてその命令の定義を参照している命令
・定義命令
ある命令についてその命令で参照しているデータを定義
又、ステップｂ３において、参照命令のノードがすでにグラフ上に存在している場合は、新規にノードを作成せずに、すでに存在しているノードに有向辺を引く。
【００２３】
図５に定義参照グラフの例を示す。グラフ上の各ノードは命令を表しており、有向辺は命令間の定義参照関係を表している。削除対象命令の参照命令は命令１と命令２であり、命令１の参照命令は命令３と命令４である。
【００２４】
定義参照グラフにおいて、有向辺が出ていないノードを「葉ノード」と呼ぶ。ステップｂ３より、葉ノードとなり得る命令は、結果命令もしくは、定義が参照されない中間命令のどちらかとなる。中間命令は、ソースプログラムの結果を求めるための中間結果であり、結果が参照されないことはない。従って、葉ノードとなる命令は結果命令のみとなる。従って図５では、削除対象命令と命令１が中間命令であり、命令２、命令３、命令４は結果命令となる。
【００２５】
又、中間命令と結果命令を区別する具体的な手法として、プログラムの一時結果を格納するための、レジスタを定義する命令を中間命令とし、メモリ定義命令や分岐命令などの、汎用レジスタを定義する命令以外の命令を結果命令とする手法がある。さらに、メモリについても、スタックなどの一時領域への書き込みの場合は中間命令とすることもできる。
【００２６】
又、中間命令の定義が複数の基本ブロックで参照されている場合など定義参照グラフが複数の基本ブロックに又がる場合、定義参照グラフが巨大になり、解析が複雑になることがある。そこでこのような場合を考慮して、入力プログラムについては、基本ブロック単位などのある範囲を指定し、定義結果がその範囲内でのみ参照される命令を中間命令とし、定義が範囲外でも参照される命令を結果命令とすることにより、解析を単純化することが可能である。
【００２７】
さらに、定義参照グラフに含まれる命令をループでない基本ブロック内に含まれている命令と仮定すると、プログラムの合流がないため、グラフ内のある命令の定義命令は、同一グラフ内に多くとも１つしかない。以降では、定義参照グラフは同一基本ブロック内の命令について作成することする。
【００２８】
尚、ループなどの分岐命令により、プログラムの合流がある場合には、ある命令の定義命令が複数存在する可能性があるが、このような場合には、全てのパターンについて結果を求めることにより、結果の変化を解析することが可能となる。
【００２９】
ステップａ２−ａ１２のループでは、参照定義グラフ内の全ての命令について、結果の解析を行う。
【００３０】
ステップａ３では、まだ結果を解析していない命令のうち、深さが最も小さい命令を１つ取り出し、その命令を解析命令とする。ここで、命令の深さとは、定義参照グラフにおいて、削除対象命令からその命令に至るまでのパスに含まれる有向辺の数である。パスが複数存在する場合は、そのうち最大のものをその命令の深さとする。例えば図５では、削除対象命令の深さが０、命令１と命令２の深さが１、命令２と命令３の深さが２となっている。又、グラフ上のある命令について、その定義命令もグラフ上に存在している場合、有向辺が定義命令から参照命令に引かれているために、定義命令の深さは必ず参照命令の深さより小さくなることがわかる。
【００３１】
ステップａ４−ａ１０のループでは、解析命令の各参照データの参照データ値を解析する。参照データ値とは命令で参照するデータの値を、各ビット毎にビット状態値を用いて表したものである。ビット状態値とは、０，１の値以外にも削除対象命令を実行しない場合に値が変化するかしないかを表すことができるように、ビットの値を状態記号表現を用いて表したものである。ここでは、ビット状態値として以下の値を取る。
・０Ｅ
・０Ｎ
・１Ｅ
・１Ｎ
・ＵＥ
・ＵＮ
ビット状態値の各値の意味を図６に示す。
【００３２】
又、このビット状態値は、定義データの値である定義データ値を表す場合にも使用する。参照データ値や定義データ値のデータ長については、データの種類がレジスタや定数のときは、レジスタ長と同じにしておき、メモリデータのときはそのメモリサイズをデータ長とする。又、分岐命令などデータを定義しない命令については、削除対象命令を実行しない場合に結果が変化するかどうかを１ビットで表すことにする。
【００３３】
以下のステップａ５−ａ９で、参照データ値の設定を行うが、参照データ値は削除対象命令を実行した場合としない場合の２通りについて求める。以下では、削除対象命令を実行する場合を「実行あり」、実行しない場合を「実行なし」と呼ぶ。又、実行ありの場合の参照データ値を「実行あり参照データ値」、実行なしの場合の参照データ値を「実行なし参照データ値」と呼ぶ。又、定義データ値についても同様に、実行ありの場合を「実行あり定義データ値」、実行なしの場合を「実行なし定義データ値」と呼ぶ。
【００３４】
ステップａ５では、参照データが定数であるかどうかで処理を場合分けしている。定数であるときは、ステップａ６でその定数を参照データ値とする。実行ありの場合と実行なしの場合で値は同一である。
【００３５】
ステップａ５で参照データが定数でない場合、ステップａ７では、参照データを定義する命令が定義参照グラフ上に存在するかどうかを調べる。定義命令が定義参照グラフ上に存在する場合、上記の仮定より、定義命令は定義参照グラフ上に１つしかない。従ってステップａ８では、定義命令で求めた定義データ値について、定義命令の実行あり定義データ値を解析命令の実行あり参照データ値とし、定義命令の実行なし定義データ値を解析命令の実行なし参照データ値とする。
【００３６】
ステップａ７で参照データを定義する命令が定義参照グラフ上に存在しない場合、定義命令の定義データは削除対象命令の実行ありなしに依存しない。従って、ステップａ９では、参照データ値は全ビットＵＥとする。これは実行ありの場合と実行なしの場合で同一である。
【００３７】
ステップａ４−ａ１０で、解析命令の全ての参照データ値を求めた後、ステップａ１１で、解析命令について参照データ値から定義データ値を求める。実行あり定義データ値は実行あり参照データから求める。同様に、実行なし定義データは実行なし参照データから求める。
【００３８】
尚、レジスタ長が非常に長い場合などには、１ビット毎に結果を解析することにより、解析時間が非常に増加してしまうことがある。そこで、このような場合には、レジスタの値を複数ビット単位でブロックに分割し、ブロック毎に実行結果の変化を解析することにより、解析時間の増加を抑えることができる。
【００３９】
実行不要命令削除部１０４は、前記実行結果変化解析部１０３で解析した実行結果の変化において、ソースプログラムでの実行結果を表す命令である結果命令について、全ての結果命令の実行結果が変化しない場合に、削除対象命令を実行不要命令として削除する。ここで、実行なしの場合でも結果が変化しない命令を「結果不変命令」と呼ぶ。
【００４０】
ある命令が結果不変命令となるのは、実行あり定義データと実行なし定義データの全てのビット状態値が０Ｅ，１Ｅ，ＵＥのいずれかとなっているものである。削除対象命令が実行不要命令となるのは、定義参照グラフ上の全ての結果命令が結果不変命令となっている場合である。逆に、定義参照グラフ上の結果命令のうち１つでも結果不変命令でないものが存在するなら、削除対象命令は実行不要命令ではなく、削除することができない。
【００４１】
例えば、図５では、命令２と命令３と命令４が結果命令であり、これらの３命令がすべて結果不変命令であるときは、削除対象命令を削除することが可能となる。このとき、削除対象命令と命令１は結果不変命令である必要はない。
【００４２】
逆に、もし命令２が結果不変でないならば、結果命令のうち１命令が結果不変命令でないので、削除対象命令は実行不要命令とはならない。
【００４３】
実行不要命令の例を図７に示す。（１）を削除対象命令とした定義参照グラフについて、実行結果の変化の解析が行われている。ここで、命令の種類については、（１）〜（３）は中間命令、（４）は結果命令であるとする。
【００４４】
まず、（１）の命令は、レジスタＲ０について、下位８ビットを変化させずに、それ以外のビットの値を全て０とする命令である。このとき、レジスタの初期値は不明であるとすると、下位８ビットについては値は変化せず、実行ありのときのみ下位８ビット以外は値が０となる。従って、図に示すように、実行ありの結果は下位８ビットがＵＥで、それ以外が０Ｎとなり、実行なしの結果は下位８ビットがＵＥで、それ以外がＵＮとなる。（２）の命令は、レジスタＲ０の値を１ビット算術右シフトする命令である。このとき、実行あり結果、実行なし結果共に、元のレジスタの値を１ビット右シフトし、最上位ビットは元のレジスタの最上位ビットとする。（３）の命令は、定数１２７とレジスタＲ０の値との論理積をとり、結果をＲ０に格納する。定数０との論理積の結果は必ず０であり、定数１との論理積は値が変化しないことより、下位７ビットは変化せず、それ以外のビットはすべて０となる。従って（３）では、実行ありと実行なしの結果が等しくなる。（４）はレジスタＲ０の値をメモリにストアする命令である。レジスタＲ０の値が実行ありと実行なしで変化しないので、ストアの結果も変化しないことになる。
【００４５】
定義参照グラフ上の結果命令は（４）のみであり、又、結果命令である（４）の結果が変化しないことから、（１）は実行不要命令であることがわかる。
【００４６】
尚、本実施の形態で示される方法を実現するプログラムを、フロッピーディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどの記録媒体に入れることにより、本実施の形態で示される方法を、コンピュータで実現できる。
【００４７】
【発明の効果】
以上のように、請求項１，７，８の削除方法及び削除装置によれば、ある１つの命令に着目して、その命令を実行しない場合の以降の命令の実行結果を推測し、実行した場合との結果の変化を解析することにより、その命令を実行しないことによりプログラムの実行結果が変化するかどうかを判定し、変化しない場合はその命令を実行不要として削除することにより、従来、実行不要と判定できなかった命令を実行不要として削除することができる。また、実行不要命令の削除において、命令が実行不要かどうかを判定する場合に、目的プログラムの各命令を、ソースプログラムの結果を表す命令である結果命令と、ソースプログラムの結果を求めるための中間結果を表す中間命令の２種類に分類し、ある命令を実行しなかった場合の以降の命令の結果変化において、中間命令の実行結果の一部分が変化する可能性があるが、全ての結果命令の実行結果が変化しない場合に、その命令を実行不要として削除することにより、冗長な命令を削除することができる。
【００４８】
ここで請求項２に記載されているように、実行結果の推測をにおいて、レジスタやメモリの値を１ビット毎に解析することにより、解析の精度をより高めることができる。
【００４９】
ここで請求項３に記載されているように、レジスタやメモリの各ビットの解析において、各ビットの値の表現は、０，１の値だけでなく、値はわからないが同値であることがわかっている場合や、値が全くわからない場合など、各ビットの状況についても表せる状態記号表現を用いて各ビットの値を表すことにより、解析の精度をより高めることができる。
【００５０】
ここで請求項４に記載されているように、レジスタやメモリを複数ビット単位でブロックに分割し、ブロック毎に実行結果の変化を解析することにより、レジスタ長が非常に長く、１ビット毎の解析では解析時間が増大してしまう場合などには、解析時間の増加を抑えることができる。
【００５２】
ここで請求項６に記載されているように、実行不要命令の削除において、目的プログラム内のある範囲を対象として、定義がその範囲内でのみ参照される命令を中間命令とし、定義が範囲外でも参照される命令を結果命令とすることにより、定義参照グラフが大きくなりすぎて、解析時間が増大してしまうのを防ぐことができる。
【図面の簡単な説明】
【図１】本発明の一実施の形態に係る削除装置の構成を示す図である。
【図２】結果命令と中間命令の例を示す図である。
【図３】実行結果変化解析部１０３の処理を示すフローチャートである。
【図４】定義参照グラフ作成の処理を示すフローチャートである。
【図５】定義参照グラフの例を示す図である。
【図６】ビット状態値の各値の意味を示す図である。
【図７】実行不要命令の例を示す図である。
【符号の説明】
１０１    プログラム入力部
１０２    定義参照解析部
１０３    実行結果変化解析部
１０４    実行不要命令削除部
【図１】
0003686303.tif 000002
【図２】
0003686303.tif 000003
【図３】
0003686303.tif 000004
【図４】
0003686303.tif 000005
【図５】
0003686303.tif 000006
【図６】
0003686303.tif 000007
【図７】
0003686303.tif 000008