(57)【要約】【課題】プログラム５１の実行中に、実行される命令コードの飛び先アドレスを変える分岐処理の内、不要な分岐処理をプログラム５１から削除して、プログラムの実行時間を削減する。【解決手段】プログラム５１を実行する命令実行部１１の実行内容を監視する命令実行監視部の監視結果と、プログラム５１の内容を解析する独立分岐処理判定部２０の解析結果とから、プログラム５１に含まれる分岐処理が削除可能か否かを、以下の４条件を満たすか否かにより判定する削除可能命令抽出部を備える。（１）条件判断に基づく分岐を行う条件分岐処理。（２）固定値に基づいて条件判断を行う固定値分岐処理。（３）分岐が一方向に固定された一方向分岐処理。（４）他の処理の影響を受けない独立分岐処理。【選択図】図１４
2012174153.tif 000002
【特許請求の範囲】
【請求項１】
所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも１つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行部と、
固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも１つの条件分岐処理の実行内容を監視することにより、前記少なくとも１つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、前記条件判断命令コードの実行結果を用いて、前記監視に係る条件分岐処理が含む分岐命令コードを実行する、前記固定値分岐処理であるか否かを判定する命令実行監視部と、
前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部と
を備えたことを特徴とするプログラム最適化装置。
【請求項２】
前記命令実行監視部は、
前記命令実行部が、前記監視に係る条件分岐処理を実行する毎に、前記監視に係る条件分岐処理が含む条件判断命令コードの実行により、前記所定の条件が成立すると判断する成立判断を行うか、前記所定の条件が成立しないと判断する不成立判断を行うかを監視し、
前記削除可能命令抽出部は、
前記命令実行監視部による監視の結果、前記命令実行部が、前記監視に係る条件分岐処理を実行する毎の、どの実行においても、前記成立判断と前記不成立判断との内の特定の一方のみの判断を行う場合に、前記監視に係る条件分岐処理を特定の飛び先アドレスに向かう一方向分岐処理と判断し、前記監視に係る条件分岐処理が前記一方向分岐処理であり、かつ、前記固定値分岐処理である場合に、前記監視に係る条件分岐処理を削除可能と判断することを特徴とする請求項１記載のプログラム最適化装置。
【請求項３】
前記命令実行部が実行する前記プログラムの前記少なくとも１つの条件分岐処理に含まれる前記分岐命令コードは、さらに、
他処理条件判断命令コードであって、前記分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コードである前記他処理条件判断命令コードが実行された場合の条件判断の実行結果に対応して前記飛び先アドレスを変える命令コードであり、
前記プログラム最適化装置は、さらに、
前記命令実行部が実行する前記プログラムを入力し、入力した前記プログラムに含まれる前記少なくとも１つの条件分岐処理を解析することにより、前記少なくとも１つの条件分岐処理の内、解析に係る条件分岐処理が含む分岐命令コードが、前記解析に係る条件分岐処理以外の処理が含む他処理条件判断命令コードが実行された場合の条件判断の実行結果の影響を受けることなく、前記解析に係る条件分岐処理が含む条件判断命令コードが実行された場合の条件判断の実行結果のみに対応して前記飛び先アドレスを変える命令コードであると判断した場合に、前記解析に係る条件分岐処理を前記他の処理の影響を受けない独立した条件分岐処理である独立分岐処理と判定する独立分岐処理判定部を備え、
前記削除可能命令抽出部は、
前記一方向分岐処理と判定し、さらに、前記独立分岐処理判定部が前記独立分岐処理と判定し、さらに、前記命令実行監視部が前記固定値分岐処理と判定した条件分岐処理を、削除可能な条件分岐処理であると判断することを特徴とする請求項１又は２記載のプログラム最適化装置。
【請求項４】
前記プログラム最適化装置は、さらに、
前記削除可能命令抽出部が削除可能と判断した条件分岐処理を、前記プログラムから削除する削除部を備えることを特徴とする請求項１〜３いずれか記載のプログラム最適化装置。
【請求項５】
前記命令実行監視部は、
前記固定値アドレスを複数入力し、入力した前記複数の固定値アドレスの内、前記命令実行部がアクセスを行わなかった前記固定値アドレスを抽出することを特徴とする請求項１〜４いずれか記載のプログラム最適化装置。
【請求項６】
命令実行部が、所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも１つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行ステップと、
命令実行監視部が、固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも１つの条件分岐処理の実行内容を監視することにより、前記少なくとも１つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行う、前記固定値分岐処理であるか否かを判定する命令実行監視ステップと、
削除可能命令抽出部が、前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出ステップと
を備えたことを特徴とするプログラム最適化方法。
【請求項７】
コンピュータを、請求項１〜５いずれか記載のプログラム最適化装置として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、組込みシステムに搭載されるプログラムの最適化を行うプログラム最適化装置およびプログラム最適化方法およびプログラムに関する。
【背景技術】
【０００２】
例えばプログラムの実行時間短縮を図る目的で、プログラムの最適化を行う方法が開示されている。プログラムには、所定の条件の成立、または不成立によって、コンピュータが次に実行する命令を変える分岐処理が含まれる。このような条件判断に基づく分岐処理を条件分岐処理と称する。（一方、条件判断に無関係な分岐処理を無条件分岐処理と称する。）そして、コンピュータは、予め生成されたプログラムを擬似的に実行し、プログラムの実行過程を表わすログ情報を取得する。このログ情報には、コンピュータが条件分岐処理において、所定の条件が成立すると判断（成立判断）したか、不成立であると判断（不成立判断）したかの情報が含まれる。そして、コンピュータは、ログ情報内の成立判断（分岐成立）または不成立判断（分岐不成立）の実行結果に基づき、成立判断時に実行する命令群と、不成立判断時に実行する命令群との配置の入れ替えを行う。また、例えばコンピュータは、実行回数の多い無条件分岐処理を削除し、分岐先の命令群を削除した無条件分岐処理の跡に挿入し、プログラムのサイズを小さくする。（例えば、特許文献１参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−３５８９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この発明の実施の形態は、例えば、プログラムの最適化を行う方法として実行回数の多い無条件分岐処理の削除に限らず、不要な条件分岐処理の削除を行い、プログラムの実行時間の削減を目的とする。
【課題を解決するための手段】
【０００５】
この発明に係るプログラム最適化装置は、
所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも１つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行部と、
固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも１つの条件分岐処理の実行内容を監視することにより、前記少なくとも１つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、前記条件判断命令コードの実行結果を用いて、前記監視に係る条件分岐処理が含む分岐命令コードを実行する、前記固定値分岐処理であるか否かを判定する命令実行監視部と、
前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部と
を備えたことを特徴とする。
【発明の効果】
【０００６】
この発明に係るプログラム最適化装置は、例えば、プログラムの最適化を行う方法として実行回数の多い無条件分岐処理の削除に限らず、不要な条件分岐処理の削除を行い、プログラムの実行時間の削減を可能とする。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１を示す図で、プログラム最適化装置の外観の一例を示す図。
【図２】実施の形態１を示す図で、プログラム最適化装置１００のハードウェア資源の一例を示す図。
【図３】実施の形態１を示す図で、プログラム最適化装置１００の構成を示す図。
【図４】実施の形態１を示す図で、プログラム５１の概要の例を示す図。（（ａ）は機械語で書かれたプログラム５１の例、（ｂ）はプログラム５１をアセンブリ言語で表記した例。）
【図５】実施の形態１を示す図で、ソースプログラムでの条件分岐処理の記述に対応する命令コードを示す例を示す図。（（ａ）はソースプログラムの例、（ｂ）はフローチャートの例、（ｃ）は命令コードの具体例、（ｄ）はＣ言語におけるフローチャートの例。）
【図６】実施の形態１を示す図で、固定値変数テーブル５２の構成の例を示す図。
【図７】実施の形態１を示す図で、命令実行部１１の動作（命令シミュレーション）を示すフローチャート。
【図８】実施の形態１を示す図で、命令実行監視部１２の動作を示すフローチャート。
【図９】実施の形態１を示す図で、プログラム５１の第１の具体例のフローチャート。
【図１０】実施の形態１を示す図で、分岐命令実行結果１３の第１の例を示す図。
【図１１】実施の形態１を示す図で、削除可能分岐処理リスト３１の第１の例を示す図。
【図１２】実施の形態１を示す図で、図３のプログラム最適化装置１００により最適化された最適化プログラム４１の第１の例のフローチャート。
【図１３】実施の形態２を示す図で、アセンブリ言語で作成されたプログラム５１の第２の具体例のフローチャート。
【図１４】実施の形態２を示す図で、独立分岐処理判定部を備えたプログラム最適化装置１００の構成を示す図。
【図１５】実施の形態２を示す図で、命令コード解析テーブル３００の例を示す図。
【図１６】実施の形態２を示す図で、独立分岐処理判定部２０の動作を示すフローチャート。
【図１７】実施の形態２を示す図で、分岐命令テーブル２１の例を示す図。
【図１８】実施の形態２を示す図で、分岐命令実行結果１３の第２の例を示す図。
【図１９】実施の形態２を示す図で、削除可能分岐処理リスト３１の第２の例を示す図。
【図２０】実施の形態２を示す図で、図１４のプログラム最適化装置１００により最適化された最適化プログラム４１の第２の例のフローチャート。
【発明を実施するための形態】
【０００８】
実施の形態１．
本実施の形態では、本実施の形態のプログラム最適化装置が例えば組込みシステムに用いられるプログラムを最適化する例を説明する。
【０００９】
最初に、図１、図２を用いてプログラム最適化装置の概要を説明する。
【００１０】
図１は、実施の形態１におけるプログラム最適化装置の外観の一例を示す図である。
図１において、プログラム最適化装置１００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０に接続されている。
【００１１】
図２は、実施の形態１におけるプログラム最適化装置１００のハードウェア資源の一例を示す図である。
図２において、プログラム最適化装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００１２】
通信ボード９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信ボード９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００１３】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００１４】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」、「〜手段」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００１５】
次に図３を用いて、プログラム最適化装置１００の概要を説明する。
図３は、プログラム最適化装置１００の構成を示す図である。図中の矢印はデータの流れを表わす。ここで、命令シミュレーション部１０（命令実行部１１、命令実行監視部１２）、削除可能命令抽出部３０、削除部４０が、プログラム最適化装置１００を構成する要素であり、プログラム５１、固定値変数テーブル５２、分岐命令実行結果１３、削除可能分岐処理リスト３１、最適化プログラム４１はデータや記述されたプログラム等の情報を示す。
【００１６】
プログラム５１は、プログラム最適化装置１００による最適化対象となるプログラムである。プログラム５１は、命令コードから構成されている。（命令コードの詳細は、後述する。）そして、プログラム５１は、プログラム最適化装置１００の命令実行部１１によって、実行される。また、プログラムには、プログラム最適化装置１００の命令実行部１１が行う所定の条件が成立するか否かの条件判断の結果によって、プログラム最適化装置１００の命令実行部１１が次に実行する命令を変える（分岐を行う）分岐処理が少なくとも１つ含まれる。このような条件判断に基づく分岐処理を以下「条件分岐処理」と称する。一方、条件判断に無関係な分岐処理を「無条件分岐処理」と称する。また、プログラム最適化装置１００の命令実行部１１が所定の条件が成立すると判断することを以下「成立判断」と称し、所定の条件が成立すると判断しないと判断することを以下「不成立判断」と称する。なお、条件分岐処理の詳細は、後述する。
【００１７】
固定値変数テーブル５２は、固定値変数のメモリ（例えばＲＯＭ９１３やＲＡＭ９１４）におけるアドレスを示す固定値アドレスを記録したテーブルである。ここで、固定値変数とは、固定値が設定された変数である。例えば、プログラム５１を使用する組込みシステムに接続される装置の構成が決定するとプログラム５１内で使用する変数の値が確定し、以降変更されることがない。この変更されることがない変数を固定値変数と称する。
ここで、組込みシステムとは、特定の機能を実現する為のハードウェア（例えば演算装置やメモリなど）とプログラム５１を含むソフトウェアとからなるコンピュータの一種である。組込みシステムが組込まれる対象は、例えばカーナビゲーション装置のような小規模なものから、例えばファクトリーオートメーション（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ、以下「ＦＡ」と称する）システムのような大規模なものまで含まれ、対象が限定されるものではない。例えば、カーナビゲーション装置では、カーナビゲーションの機能を実現する為のハードウェアとプログラム５１を含むソフトウェアがカーナビゲーション装置に組込まれる。また、例えば、ＦＡシステムでは、工場の生産自動化の機能を実現する為のハードウェアとプログラム５１を含むソフトウェアがＦＡシステムに組込まれる。ここで、ＦＡシステムは複数の加工装置から構成されるものでも良いし、１台の加工装置であっても良い。
以下、ＦＡシステムを例に説明する。
例えば、ＦＡシステムは、１つ以上のコントローラと各コントローラに接続される複数の入出力装置（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ装置、以下「Ｉ／Ｏ装置」と称する）から構成される。
ここでコントローラがプログラム５１を組み込まれる組込みシステムであり、Ｉ／Ｏ装置は組込みシステムであるコントローラに接続される装置である。Ｉ／Ｏ装置は、例えば製品の温度管理を行う温度センサ（入力装置）や、製品の加工を行う加工装置のモーター（出力装置）などが想定される。コントローラは、接続された入力装置からの情報を入力し、入力された情報に応じて、出力装置の制御をするために、プログラム５１を用いる。
プログラム５１内では、例えば、温度センサの型番を示す変数や、モーターのメーカーを示す変数などを用いて例えばモーターのメーカーを示す変数で指定されたモーターの回転数を制御する命令が書かれている。
そして、ＦＡシステムの設計段階においては、様々なメーカーのモーターを試用する為に、例えば、プログラム５１内で使用するモーターのメーカーを示す変数の値は「Ａ社」であったり、「Ｂ社」であったりと変化する。しかし、ＦＡシステムの設計が完了し、ＦＡシステムに用いるモーターのメーカーが「Ａ社」に決定した時は、モーターのメーカーを示す変数の値は「Ａ社」に固定される。
そして、一度ＦＡシステムを構成するハードウェア（Ｉ／Ｏ装置）が決まると、以降変更されることはほとんど無く、例えばモーターのメーカーを示す変数の値は「Ａ社」という固定値が設定された変数、すなわち固定値変数となる。
【００１８】
記憶装置５０は、プログラム最適化装置１００の外部に備えられ、プログラム５１と固定値変数テーブル５２とを記憶する。記憶装置５０は、例えばダイナミック・ランダム・アクセス・メモリ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、ＤＲＡＭ）やフラッシュメモリなどである。ここで、プログラム５１を記憶する記憶装置と、固定値変数テーブル５２を記憶する記憶装置とが別々で有っても構わない。
命令シミュレーション部１０は、命令実行部１１と命令実行監視部１２とで構成される。
命令実行部１１は、記憶装置５０が記憶するプログラム５１を入力し、プログラム５１を実行する。そして、命令実行部１１は、プログラム５１実行時に、固定値変数の情報が必要な場合には、固定値アドレスにアクセスして固定値変数の情報を得る。なお、命令実行部１１がプログラム５１を実行した結果は、プログラム最適化装置１００から外部には出力されない為、命令実行部１１はプログラム５１を模擬実行（シミュレーション）しているとも言える。
【００１９】
命令実行監視部１２は、固定値変数テーブル５２を入力し、命令実行部１１が実行するプログラム５１に含まれる条件分岐処理の実行内容を監視する。（例えば、命令実行監視部１２は、固定値変数テーブル５２に記録された固定値アドレスと同じアドレスに、命令実行部１１がアクセスするか否かを監視する。）そして、命令実行監視部１２は、条件分岐処理が固定値変数に基づいて条件判断を行う条件分岐処理（以下「固定値分岐処理」と称する）であるか否かを判定する。固定値分岐処理とは、更に詳しく説明すると、命令実行部１１が固定値アドレスにアクセスし、アクセスした固定値アドレスから固定値変数を読み込み、読み込んだ固定値変数に基づいて、条件分岐処理が含む条件判断命令コードにより条件判断を行う条件分岐処理である。
また、命令実行監視部１２は、命令実行部１１がプログラム５１の実行に使用するメモリやレジスタと、命令コードが配置されているプログラムアドレスと命令コードを監視する。
分岐命令実行結果１３は、命令実行監視部１２が出力した命令実行監視部１２による監視の結果である。
削除可能命令抽出部３０は、命令実行監視部１２による監視の結果である分岐命令実行結果１３を入力する。
削除可能命令抽出部３０は、命令実行監視部１２が固定値分岐処理であると判定した条件分岐処理を、削除可能と判断する。また、削除可能命令抽出部３０は、条件分岐処理を削除可能と判断した結果を削除可能分岐処理リスト３１として出力する。
削除部４０は、削除可能命令抽出部３０が削除可能と判断した条件分岐処理を、プログラム５１から削除する。（削除部４０は、削除可能分岐処理リスト３１を入力し、入力した削除可能分岐処理リスト３１から削除可能命令抽出部３０が削除可能と判断した条件分岐処理を特定する。）そして、削除部４０は、プログラム５１から削除可能と判断された条件分岐処理を削除した結果を最適化プログラム４１として出力する。
【００２０】
次にプログラム５１の説明を行う。
まず、図４を用いてプログラム５１の説明を行う。
図４は、プログラム５１の概要の例を示す図である。（（ａ）は機械語で書かれたプログラム５１の例、（ｂ）はプログラム５１をアセンブリ言語で表記した例。）
図４に示す例えば「５８１００３２８」が１つの命令コードである。命令コードとは、コンピュータを動作させる命令である。プログラム５１は、命令コードから構成されている。「５８１００３２８」という命令コードは、例えばアセンブリ言語で表記すると「ＬＤＲ  Ｒ１  ０ｘ０３２８」となる。
プログラム５１は、例えばアセンブリ言語で書かれたソースプログラム（例えば図４（ｂ））がアセンブラで機械語に変換されていても良いし、例えばＣ言語などで書かれたソースプログラムがコンパイラで機械語に変換されたものでも良い。（ソースプログラムにおけるコンピュータ言語の種類の制限は無い。）
そして、プログラム５１は機械語に変換された状態で、記憶装置５０に記憶されている。（例えば、図４（ａ）。本例は機械語を１６進数で表記している。）そして、命令実行部１１は機械語のプログラム５１をデコード（解析）しながら実行する。  例えば、命令実行部１１は、図４（ａ）の１行目に示す「５８１００３２８」の機械語が示す「５８」が「ロード（ＬＤＲ）」、「１０」が「レジスタ（仮にＲ１）」、「０３２８」が「０ｘ０３２８番地のアドレス」と解釈する。そして、命令実行部１１は、０ｘ０３２８番地のアドレスに有るデータをＲ１（レジスタ）にロード（読み込む）する命令であると解釈し、動作を実行する。（アセンブリ言語で記述すると、図４（ｂ）に示す「ＬＤＲ  Ｒ１  ０ｘ０３２８」。）
このように、機械語の命令コードとアセンブリ言語の命令とは１対１で対応する。よって、以下、説明の簡略化の為に、プログラム５１の命令コードの具体例は、機械語の記述を省略し、アセンブリ言語で表記して説明を行う。そして、以下の説明において、機械語の命令コードをアセンブリ言語で表記したものも「命令コード」と称する。
【００２１】
ここで、ソースプログラムでの記述が、どのように命令コードに変換されるか、一般的な例を示す。
図５は、ソースプログラムでの条件分岐処理の記述に対応する命令コードを示す例を示す図である。（（ａ）はソースプログラムの例、（ｂ）はフローチャートの例、（ｃ）は命令コードの具体例、（ｄ）はＣ言語におけるフローチャートの例。）
図５（ａ）に示す「ＩＦ文」は、例えばＣ言語のソースプログラムにおける条件判断付きの分岐処理（条件分岐処理）である。Ｃ言語のような高級言語では、図５（ａ）または図５（ｄ）に示すように条件判断命令と分岐命令とが一つの命令として記述される。しかしながら、条件分岐処理を分解して考えると、図５（ｂ）のようなフローチャートで図示することが出来る。まず、条件判断を行うためのステップＳ１０１として、条件判断を行う条件判断命令が配置される。この条件判断命令としては、論理演算や算術演算、比較演算、シフトなどの演算系命令が使用される。
その後に、条件判断命令の条件判断の実行結果（成立判断もしくは不成立判断）により分岐を行うステップＳ１０２として、分岐命令が配置される。
そして、図５（ｄ）のようなＣ言語の分岐命令も、コンパイルされて機械語の命令コードに変換されると、図５（ｃ）のような３つの命令コードとなる。
なお、関数呼び出し等のように条件判断が不要な無条件分岐では、Ｓ１０１は配置せず（条件判断命令なしで）、直接Ｓ１０２を配置する場合もある。
【００２２】
そして、命令コードの具体例は、図５（ｃ）に示すように、例えば「ＬＤＲ  Ｒ１  ０ｘ０３２８」（Ｓ１０３）と「ＣＭＰ  Ｒ１，ｄ１００」（Ｓ１０４）とが、図５（ｂ）のＳ１０１に対応し、「Ｂ」（Ｓ１０５）が図５（ｂ）のＳ１０２に対応する。
ここで、「ＬＤＲ  Ｒ１  ０ｘ０３２８」（Ｓ１０３）は、「０ｘ０３２８番地のアドレスに有るデータをＲ１（レジスタ）にロード（読み込む）する」を意味する。Ｓ１０３には、値を設定する命令コード（以下、「値設定命令コード」と称する）が配置される。値設定命令コードは、メモリにアクセスして値を設定する命令コードなので、メモリアクセス命令コードとも称する。
そして、「ＣＭＰ  Ｒ１，ｄ１００」（Ｓ１０４）は、「Ｒ１（レジスタ）のデータを１０進数の１００と等しいか否かを比較（コンペア）する」を意味する。Ｓ１０４には、Ｓ１０３で設定された値を用いて、条件判断を行う命令コードが配置される。「ＣＭＰ  Ｒ１，ｄ１００」（Ｓ１０４）は、所定の条件が成立するか（Ｙｅｓ、成立判断）否か（Ｎｏ、不成立判断）を判断する命令コードである。所定の条件が成立するか否かを判断する命令コードを「条件判断命令コード」と称する。
すなわち、条件判断命令（Ｓ１０１）は、値設定命令コード（Ｓ１０３）と条件判断命令コード（Ｓ１０４）との２つの命令コードから構成されることとなる。
そして、「Ｂ（または「ＢＲ」）」（Ｓ１０５）は「分岐（ブランチ）」を意味するアセンブリ言語の命令コードである。「Ｂ」（Ｓ１０５）は、「ＣＭＰ  Ｒ１，ｄ１００」（Ｓ１０４）の条件判断の実行結果（成立判断もしくは不成立判断）によって、次のステップで実行される命令コードのアドレスを変える。次のステップで実行される命令コードのアドレスを「飛び先アドレス」と称する。すなわち、「Ｂ」（Ｓ１０５）は、条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである。条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードを「分岐命令コード」と称する。
分岐命令（Ｓ１０２）は、アセンブリ言語においても分岐命令コード（Ｓ１０５）の１つの命令コードと対応する。
そして、条件判断命令コードと分岐命令コードとの命令コードの組を含む処理を「条件分岐処理」と称する。具体的には、例えば図５（ｃ）に図示するようなＳ１０３〜Ｓ１０５の値設定命令コードを含んだ一連の処理を条件分岐処理と称する。
【００２３】
ここで、図５（ｃ）の例において、「０ｘ０３２８」番地のアドレスに有るデータが常に固定されたデータ（固定値）で有る場合を考える。
例えば、「０ｘ０３２８」番地のアドレスに有るデータが１０進数の１００で有る場合を想定する。この場合は、Ｓ１０５における分岐は必ず「成立判断」となる。すなわち、例えば、命令実行部１１がこの図５（ｃ）の処理を実行した場合に、必ず命令実行部１１は、所定の条件が成立すると判断する「成立判断」を行う。
一方、「０ｘ０３２８」番地のアドレスに有るデータが例えば１０進数の５０（すなわち１０進数の１００ではない）で有る場合を想定する。この場合は、Ｓ１０５における分岐は必ず「不成立判断」となる。すなわち、例えば、命令実行部１１がこの図５（ｃ）の処理を実行した場合に、必ず命令実行部１１は、所定の条件が成立しないと判断する「不成立判断」を行う。
このように、例えば、命令実行部１１が条件分岐処理の含む条件判断命令コードの実行により、成立判断と不成立判断とのいずれか一方のみの判断を行う場合の条件分岐処理は、特定の飛び先アドレスに向かう一方向の条件分岐処理であり、以下「一方向分岐処理」と称する。
すなわち、条件判断に固定値が用いられており、かつ、条件判断Ｓ１０５における分岐結果（成立判断もしくは不成立判断）が予め分かっている場合は、図５（ｃ）に示すＳ１０３〜Ｓ１０５の処理は不要（削除可能）となる。
【００２４】
次に図６を用いて固定値変数テーブル５２の説明を行う。
図６は、固定値変数テーブル５２の構成の例を示す図である。図６の例は、ＦＡシステムを構成するＩ／Ｏ装置の例である。
固定値変数テーブル５２は、固定値変数が格納（配置）されているアドレス１０１、固定値変数のサイズ１０２、固定値変数の変数名１０３で構成されている。ここで、固定値変数の変数名１０３は省略可能である。
この固定値変数は、Ｉ／Ｏ装置（例えば、ＦＡシステムにおける製品加工装置のモーターなど）の情報を示す。そして、アドレス１０１は、Ｉ／Ｏ装置（システム構成装置）の情報を格納（配置）したメモリのメモリアドレスである。
具体例として、図６の１行目は、サイズ１０２が「４バイト」であるので、アドレス１０１が示す「０ｘ８０００」から「０ｘ８００３」までのメモリアドレスの間に変数名１０３が示す「Ｉ／Ｏ装置Ａのメーカー名」の情報（固定値変数）が格納されていることを示す。
すなわち、アドレス１０１からアドレス１０１に固定値変数のサイズ１０２を加算した範囲のアドレス（前記の具体例では「０ｘ８０００」から「０ｘ８００３」）が固定値変数のメモリにおけるアドレスを示す固定値アドレスとなる。
【００２５】
次に図７を用いて命令実行部１１の動作を説明する。
図７は、命令実行部１１の動作（命令シミュレーション）を示すフローチャートである。
命令シミュレーション部１０の命令実行部１１では、図７に示すフローチャートに従い、入力されたプログラム５１の命令コードを解析しながら、命令を実行する（実行を模擬する）。
まず、命令実行部１１は記憶装置５０からプログラム５１を入力し、入力したプログラム５１を実行する。
以下、図７のフローチャートに沿って説明する。
Ｓ２０１において、命令実行部１１は、プログラムカウンタ（以下「ＰＣ」と称する）を設定する。
Ｓ２０２において、命令実行部１１は、設定されたＰＣが示すプログラムメモリから命令コードを取り出す。
Ｓ２０３において、命令実行部１１は、取り出された命令コードのデコードを行う。
Ｓ２０４において、命令実行部１１は、Ｓ２０３でのデコードの結果により、取り出された命令コードが、演算系命令コードであるか、メモリアクセス命令コード（値設定命令コード）であるか、分岐命令コードであるか等が判別できる。そして、命令実行部１１は、取り出された命令コードが、分岐命令コードであるか否かを判断する。分岐命令コードでない場合（Ｎｏのケース）、命令実行部１１は、デコード結果に従い、Ｓ２０５で命令コードを実行する。分岐命令コードであった場合（Ｙｅｓのケース）、命令実行部１１は、Ｓ２１０の処理を行う。
Ｓ２１０において、命令実行部１１は、分岐命令コードの実行結果を判断する。不成立判断（分岐不成立）であった場合（Ｎｏのケース）、命令実行部１１は、デコード結果に従い、Ｓ２０７で（分岐処理以外の）命令コードを実行する。成立判断（分岐成立）であった場合（Ｙｅｓのケース）、命令実行部１１は、デコード結果に従い、Ｓ２１１で（分岐処理以外の）命令コードを実行する。
命令実行部１１は、Ｓ２０５及びＳ２０７を実行した後は、Ｓ２０６において、現ＰＣに命令長を加算してＰＣを更新する。
命令実行部１１は、Ｓ２１１を実行した後は、Ｓ２１２において成立判断時の飛び先アドレス（分岐先アドレス）をＰＣに設定する。
Ｓ２０６及びＳ２１２において、命令実行部１１は、ＰＣを更新あるいは設定後、Ｓ２０２の処理に戻り、該当ＰＣから命令コードの取り出しを行う。
【００２６】
次に図８と図９と図１０とを用いて命令実行監視部１２の動作を説明する。
図８は、命令実行監視部１２の動作を示すフローチャートである。
図９は、プログラム５１の第１の具体例のフローチャートである。
図１０は、分岐命令実行結果１３の第１の例を示す図である。
まず、命令実行監視部１２は、記憶装置５０から固定値変数テーブル５２を入力する。命令実行監視部１２は、入力した固定値変数テーブル５２を例えば、ＲＡＭ９１４や磁気ディスク装置９２０などの記憶装置に記憶する。（図８における図示は省略する。）
以下、図８のフローチャートに沿って説明する。
Ｓ８０１において、命令実行監視部１２は、命令実行部１１が図７のＳ２０５、Ｓ２０７、Ｓ２１１で命令コードを実行すると、命令実行部１１が固定値変数テーブル５２（図６参照）に登録されたアドレス１０１からアドレス１０１にサイズ１０２を加算したアドレスの範囲へアクセスを行ったか否かを監視する。ここで、命令実行監視部１２は、固定値変数テーブル５２に登録された全てのアドレス１０１とサイズ１０２の組が示すアドレスを監視の対象とする。
ここで、アドレス１０１からアドレス１０１にサイズ１０２を加算したアドレスの範囲（固定値アドレス）とは、図６で説明の通りシステムを構成するシステム構成要素の情報である固定値変数（固定値）が格納されているメモリの領域である。すなわち、命令実行部１１が固定値アドレスにアクセスしたということは、命令実行部１１は固定値変数（固定値）をメモリから読み込んだことを意味する。この場合、Ｓ８０１で監視した命令コードは、図５に示す値設定命令コード（Ｓ１０３）となる。命令実行監視部１２は、Ｓ８０１における判定がＹｅｓの場合、Ｓ８０２の処理を行い、Ｓ８０１における判定がＮｏの場合、Ｓ８０５における処理を行う。
Ｓ８０２において、命令実行監視部１２は、Ｓ８０１で監視した命令コードの次に実行される命令コードを命令実行部１１が実行した場合に、固定値アドレスから得た固定値変数を用いて条件判断を行ったか否かを監視する。命令実行監視部１２は、Ｓ８０２における判定がＹｅｓの場合、Ｓ８０３の処理を行い、Ｓ８０２における判定がＮｏの場合、Ｓ８０８における処理を行う。
Ｓ８０３において、命令実行監視部１２は、Ｓ８０２で監視した命令コードの次に実行される命令コードを命令実行部１１が実行した場合に、Ｓ８０２で監視した命令コードの条件判断に基づいて、分岐を行ったか否かを監視する。更に命令実行監視部１２は、分岐の結果（成立判断または不成立判断）も監視する。命令実行監視部１２は、Ｓ８０３における判定がＹｅｓの場合、Ｓ８０４の処理を行い、Ｓ８０２における判定がＮｏの場合、処理を終了し、命令実行部１１が次の命令コードを実行するのを待機する。
【００２７】
Ｓ８０４において、命令実行監視部１２は、Ｓ８０１〜Ｓ８０３の監視の結果、一連の処理が、図５（ｃ）に示すフローチャート構造の条件分岐処理であると判断する。すなわち、命令実行監視部１２がＳ８０１で監視した命令コードが、図５（ｃ）のＳ１０３の命令コードに対応し、固定値変数を読み込んでいる。そして、Ｓ８０２で監視した命令コードが図５（ｃ）のＳ１０４の命令コードに対応し、固定値変数を用いて条件判断を行っている。そして、Ｓ８０３で監視した命令コードが図５（ｃ）のＳ１０５の命令コードに対応し、固定値変数による条件判断結果を基に分岐を行っている。
つまり、Ｓ８０４に導かれた分岐処理は、図５（ｃ）の説明と同様に、条件判断に固定値が用いられている為、分岐が固定される処理（固定値分岐処理）である。そして、命令実行監視部１２は、一連の処理（分岐処理）が固定値分岐処理と判断し、固定値分岐処理フラグを「Ｙｅｓ」に設定する。（固定値分岐処理フラグは、後述の処理で、分岐命令実行結果１３（図１０）の固定値分岐処理フラグ３０６となる。）また、命令実行監視部１２は、条件分岐処理であることを示す分岐処理種類を「条件」に設定する。（分岐処理種類は、後述の処理で、分岐命令実行結果１３（図１０）の分岐処理種類３０３となる。）
更に、命令実行監視部１２はＳ８０１で監視した命令コードのアドレスを分岐命令実行結果１３（図１０）の分岐命令アドレス３０１に設定する。
そして、命令実行監視部１２は処理をＳ８１０に進める。
【００２８】
Ｓ８１０において、命令実行部１１がプログラム５１を実行中の間、命令実行監視部１２は、前記で固定値分岐処理と判断した分岐の実行結果（成立判断または不成立判断）を継続監視する。（命令実行監視部１２は、成立判断と不成立判断とのそれぞれの結果回数をカウントする。）（分岐処理はプログラム５１の実行中に、複数回実行される。）
そして、命令実行監視部１２は、命令実行部１１がプログラム５１を終了すると、分岐の実行結果（成立判断または不成立判断）として、図１０に示す分岐命令実行結果１３を出力する（例えば図１０に示すＤ９３（または、Ｄ９４または、Ｄ９５）。ここで分岐命令実行結果１３は、分岐命令アドレス３０１、成立アドレス３１２（成立判断の場合の飛び先アドレス（分岐先））、不成立アドレス３１３（不成立判断の場合の飛び先アドレス（分岐先））、分岐処理種類３０３、成立判断回数３０４、不成立判断回数３０５、固定値分岐処理フラグ３０６から構成される。
【００２９】
次に、図８のＳ８０５〜Ｓ８０７の流れを説明する。
このＳ８０５〜Ｓ８０７の流れは、条件分岐処理であるが、固定値変数を参照していない場合である。よって、命令実行監視部１２は、Ｓ８０７において、固定値分岐処理フラグを「Ｎｏ」に設定し、分岐処理種類を「条件」に設定する。更に、命令実行監視部１２は、分岐命令コードのアドレスを分岐命令アドレスに設定する。そして、命令実行監視部１２は、Ｓ８１０において、分岐命令実行結果１３を出力する（例えば、図１０に示すＤ９１）。
【００３０】
次に、図８のＳ８０８〜Ｓ８０９の流れを説明する。
このＳ８０８〜Ｓ８０９の流れは、条件判断を行わない無条件分岐処理である。よって、命令実行監視部１２は、Ｓ８０９において、固定値分岐処理フラグを「Ｎｏ」に設定し、分岐処理種類を「無条件」に設定する。更に、命令実行監視部１２は、分岐命令コードのアドレスを分岐命令アドレスに設定する。そして、命令実行監視部１２は、Ｓ８１０において、分岐命令実行結果１３を出力する（例えば、図１０に示すＤ９５）。
【００３１】
ここで、図９のプログラム５１の具体例と図１０の分岐命令実行結果１３の例を用いて、命令実行監視部１２の動作を具体的に説明する。
図９のプログラム５１は、例えばアセンブリ言語で書かれたソースプログラムがアセンブラで機械語に変換されていても良いし、例えばＣ言語などで書かれたソースプログラムがコンパイラで機械語に変換されたものでも良い。（ソースプログラムにおけるコンピュータ言語の種類の制限は無い。）そして、プログラム５１の命令コードを説明が分かり易いように、機械語に対応したアセンブリ言語で表記している。
図９のプログラム５１の具体例は、点線の四角枠で囲まれた命令コードが値設定命令コードを示し、実線の四角枠で囲まれた命令コードが、条件判断命令コードを示し、ひし形枠で囲まれた命令コードが分岐命令コードを示す。また、黒丸は、分岐命令コードからの分岐先（飛び先アドレス）を示す。
そして、例えばＳ１００１における「ＡＤＤ」が命令コードの命令を示し、Ｓ１００１における「０ｘ０ＦＦ０」が命令コードのアドレスを１６進数で示したものである。
なお、プログラム５１による詳細な演算内容は、本実施の形態の説明に無関係である為、命令コードの演算の対象となる値や変数を示すオペランドの表示は省略する。
【００３２】
図８のフローチャートと図９のＳ１００１〜Ｓ１００２の命令コードの説明は省略し、命令実行部１１がＳ１００３の命令コードを実行した場合から命令実行監視部１２の監視内容を以下に列記する。
（１）図９のＳ１００３
まず、命令実行部１１が、Ｓ１００３の命令コードを実行すると、命令実行監視部１２は、命令実行部１１が固定値変数テーブル５２に示された固定値アドレスにアクセスしたか否かを監視する。Ｓ１００３の命令コードは値設定命令コードであるが、「ＳＴＲ」という例えば演算結果の値をレジスタに保存（ストア）する命令であり、命令実行部１１は固定値アドレスにアクセスしない。（例えば、命令実行部１１が、固定値の設定されたアドレスに演算結果の値などを上書きする場合は無い。）よって、命令実行監視部１２は、図８のＳ８０１において、「Ｎｏ」と判定する。続けて命令実行監視部１２は、図８のＳ８０５とＳ８０８とにおいて、Ｓ１００３の命令コードは条件判断命令コードでも分岐命令コードでもないので、「Ｎｏ」と判定する。そして、命令実行監視部１２は、次にＳ１００４の命令コードの監視を行う。
（２）図９のＳ１００４〜Ｓ１００５
Ｓ１００４は、「ＡＤＤ」という条件判断命令コードである。この「ＡＤＤ」という命令コードは、演算系命令コードであり、具体的には加算を行う。他にも「ＳＵＢ（減算）」、「ＯＲＲ（論理和）」、「ＸＯＲ（排他的論理和）」なども演算系命令コードである。これらの演算系命令コードは、演算を実施し、更に分岐命令コード「Ｂ」が分岐の判断を行う為のフラグを更新することが可能である。すなわち、演算系命令コードの処理結果に対応して、分岐命令コードは飛び先アドレスを変えるので、演算系命令コードは、条件判断命令コードであると言える。
命令実行部１１がＳ１００４の命令コードを実行すると、命令実行監視部１２は、図８のＳ８０１において、「Ｎｏ」と判定するが、図８のＳ８０５においては「Ｙｅｓ」と判定する。
そして、続けて、命令実行監視部１２は、次の命令コード（Ｓ１００５）における命令実行部１１の実行内容を監視する。Ｓ１００５は、分岐命令コードなので、命令実行監視部１２は、図８のＳ８０６において、「Ｙｅｓ」と判定する。そして、命令実行監視部１２は図８のＳ８０７において、Ｓ１００５の分岐命令コードの分岐処理種類３０３を条件分岐命令である「条件」と設定し、固定値分岐処理フラグ３０６を「Ｎｏ」に設定し、Ｓ８１０において分岐命令実行結果１３の一部として出力する。
更に、命令実行監視部１２は、命令実行部１１がプログラム５１の実行を完了するまで、Ｓ１００５の分岐命令コードの実行結果（成立判断もしくは不成立判断）の監視を継続する。（命令実行監視部１２は、成立判断と不成立判断とのそれぞれの結果回数をカウントする。）そして、命令実行部１１がプログラム５１の実行を完了すると、命令実行監視部１２は図８のＳ８１０において、Ｓ１００５の分岐命令コードにおける成立判断の回数（成立判断回数３０４）と不成立判断の回数（不成立判断回数３０５）とを分岐命令実行結果１３の一部として出力する。
図１０のＤ９１がＳ１００５の分岐命令コードの分岐命令実行結果を示す。Ｄ９１の分岐命令アドレス３０１は、図９のＳ１００５に示す通り、分岐命令コードのアドレスである。成立アドレス３１２は、図９に示す通り、分岐命令コードにおいて成立判断された場合の飛び先アドレスである。不成立アドレス３１３は、図９に示す通り、分岐命令コードにおいて不成立判断された場合の飛び先アドレスである。そして、成立判断回数３０４が１００回で、不成立判断回数が５０回であったことをＤ９１は示している。分岐処理種類３０３と固定値分岐処理フラグ３０６は前記の通りであり、説明を省略する。
（３）図９のＳ１００６
命令実行監視部１２は、図８のＳ８０５で「Ｙｅｓ」と判定するが、次の命令コードＳ１００７が分岐命令コードでは無いので、Ｓ１００６は無視する。
（４）図９のＳ１００７〜Ｓ１００９
Ｓ１００７は、値設定命令コードであり、命令実行監視部１２は、命令実行部１１が図８のＳ８０１で「Ｙｅｓ」（固定値アドレスにアクセス）と判定する可能性も有るが、本例では、Ｓ１００７の命令コードは固定値アドレスにはアクセスしないものと仮定する。よって、命令実行監視部１２は、Ｓ１００３〜Ｓ１００６と同様の処理を行う。
（５）図９のＳ１０１０〜Ｓ１０１２
Ｓ１０１０の「ＬＤＲ」は、オペランドも含めて表記すると、「ＬＤＲ  Ｒ１  ０ｘ８００８」という命令コードだと仮定する。
命令実行監視部１２は、命令実行部１１がＳ１０１０の命令コードを実行すると、固定値変数テーブル５２に示されている固定値アドレス０ｘ８００８に命令実行部１１がアクセスしたことを検知する。そして、命令実行監視部１２は図８のＳ８０１において、「Ｙｅｓ」と判定する。更に命令実行監視部１２は、次の命令コード「ＡＤＤ」（Ｓ１０１１）が演算系命令コードすなわち、条件判断命令コードである為、図８のＳ８０２において「Ｙｅｓ」と判定する。更に、次の命令コードＳ１０１２も分岐命令コードであり，命令実行監視部１２は、図８のＳ８０３においても「Ｙｅｓ」と判定する。そして、命令実行監視部１２は図８のＳ８０４において、固定値分岐処理フラグを「Ｙｅｓ」と設定する。
Ｓ１０１２の分岐命令コードの分岐命令実行結果１３は、図１０のＤ９３となる。
（６）図９のＳ１０１７〜Ｓ１０１９
Ｓ１０１０〜Ｓ１０１２の処理と同様である為、説明を省略する。ここで、命令実行部１１は、Ｓ１０１７の命令コードの実行において、固定値アドレスにアクセスしているものとする。
（７）図９のＳ１０２０
命令実行監視部１２は、図８のＳ８０１、Ｓ８０５において「Ｎｏ」と判定するが、Ｓ８０８において「Ｙｅｓ」と判定する。そして、命令実行監視部１２は、図８のＳ８０９において、分岐処理種類３０３を無条件分岐を示す「無条件」に設定する。図１０のＤ９５に分岐命令実行結果１３を示す。
【００３３】
次に図１１を用いて、削除可能命令抽出部３０の説明を行う。
図１１は、削除可能分岐処理リスト３１の第１の例を示す図である。
削除可能命令抽出部３０は、命令実行監視部１２から分岐命令実行結果１３を入力する。そして、削除可能命令抽出部３０は、分岐命令実行結果１３から削除可能分岐処理リスト３１を作成する。
ここで、削除可能命令抽出部３０は、成立判断回数３０４と不成立判断回数３０５のどちらかが０回である分岐命令コードを抽出し、図１１に示す一方向分岐処理フラグ６０４を「Ｙｅｓ」に設定する。更に、削除可能命令抽出部３０は、成立判断回数３０４が０回である分岐命令コードの不成立アドレス３１３を分岐先アドレス３０２として設定する。また、削除可能命令抽出部３０は、不成立判断回数３０５が０回である分岐命令コードの成立アドレス３１２を分岐先アドレス３０２として設定する。
一方、削除可能命令抽出部３０は、成立判断回数３０４と不成立判断回数３０５のいずれも０回でない分岐命令の一方向分岐処理フラグ６０４を「Ｎｏ」に設定する。この場合、削除可能命令抽出部３０は、分岐命令コードの成立アドレス３１２もしくは不成立アドレス３１３のいずれを分岐先アドレス３０２として設定しても構わない。
そして、削除可能分岐処理リスト３１では、以下の３条件を全て満たした分岐処理が削除対象の候補となる。
（条件１）分岐処理種類３０３が「条件」である。すなわち、対象の分岐処理は、条件分岐処理である。
（条件２）一方向分岐処理フラグ６０４が「Ｙｅｓ」である。すなわち、対象の分岐処理は、一方向分岐処理である。
（条件３）固定値分岐処理フラグ３０６が「Ｙｅｓ」である。すなわち、対象の分岐処理は、固定値分岐処理である。
そして、削除可能命令抽出部３０は、前記条件１〜３を満たす分岐処理の削除可能命令フラグ６０７を「Ｙｅｓ」に設定する。一方、削除可能命令抽出部３０は、前記条件１〜３を満たさない分岐処理の削除可能命令フラグ６０７を「Ｎｏ」に設定する。
【００３４】
そして、図１２を用いて削除部４０の動作を説明する。
図１２は、図３のプログラム最適化装置１００により最適化された最適化プログラム４１の第１の例のフローチャートである。
削除部４０は、削除可能分岐処理リスト３１で削除可能命令フラグ６０７が「Ｙｅｓ」に設定された分岐命令コードを含む条件分岐処理をプログラム５１から削除する。
具体的には、図１１において、Ｄ１０３とＤ１０４とが削除可能命令フラグ６０７が「Ｙｅｓ」となっている。
ここで、図１１のＤ１０３が示す条件分岐処理を削除する場合を具体的に説明する。
すなわち、削除部４０は、図１１のＤ１０３が示す条件分岐処理（図９のＳ１０１０〜Ｓ１０１２）を削除する。
そして、削除部４０は、図１０において、Ｄ１０３が示す条件分岐処理を削除した後、Ｄ１０３の分岐命令アドレス３０１「０ｘ１０１ｃ」と分岐先アドレス３０２「０ｘ２００ｃ」とで命令が繋がって実行されるようにプログラム５１を編集する。（図１０のＤ１０４が示す条件分岐処理（図９のＳ２００４）を削除する場合については、説明を省略する。）
前記の方法により、削除部４０は、プログラム５１から最適化プログラム４１を作成する。
【００３５】
なお、命令実行監視部１２は、固定値変数テーブル５２が示す固定値アドレスの内、命令実行部１１がアクセスしていない固定値アドレスを抽出することが可能である。
固定値アドレスは、前記のように例えば、システム構成装置（Ｉ／Ｏ装置）の情報を格納（配置）したメモリのメモリアドレスである。そして、例えばシステムの管理者は予め、どのシステム構成装置（Ｉ／Ｏ装置）の情報がどの固定値アドレスに対応しているかを知ることが出来る。（固定値変数テーブル５２は、例えばシステムの管理者が作成している為。）
よって、システムの管理者は、命令実行監視部１２が抽出した命令実行部１１がアクセスしていない固定値アドレスを知ることが出来れば、プログラム５１が未使用のシステム構成装置（Ｉ／Ｏ装置）を知ることも可能である。そして、プログラム最適化装置１００は、命令実行監視部１２が抽出した命令実行部１１がアクセスしていない固定値アドレスを例えば、表示装置９０１などに出力することが可能である。
【００３６】
以上の実施の形態により、プログラム最適化装置１００は、不要な条件分岐処理をプログラム５１から削除し、プログラムの実行時間の削減を可能とする。
本実施の形態のプログラム最適化装置１００は、組込みシステムに用いられるプログラムの最適化に特に有効である。
すなわち、組込みシステムは、組込みシステムに接続されるＩ／Ｏ装置などのシステム構成装置が決定するとプログラム５１内で使用するＩ／Ｏ装置に関係する変数の値が確定し、以降変更されることのない固定値変数となる。そして、プログラム最適化装置１００は、固定値変数により条件判断を行っている条件分岐処理を削除することが可能となる。
また、プログラム最適化装置１００は、未使用のＩ／Ｏ装置を検出することが可能で有り、例えば組込みシステムの設計者は、未使用のＩ／Ｏ装置に関する命令コードをプログラム５１から削除することも可能である。
このように、プログラム最適化装置１００でプログラムの実行時間の削減を対策した予め最適化プログラム４１を作成し、作成した最適化プログラム４１を組込みシステムに実装することが可能となり、組込みシステムを用いた作業を効率化出来る。
【００３７】
実施の形態２．
本実施の形態では、本実施の形態のプログラム最適化装置が例えば組込みシステムに用いられるアセンブリ言語により作成されたプログラムを最適化する例を説明する。
【００３８】
実施の形態１においては、例えば図９に示すように、分岐命令コードからの飛び先アドレスは、条件分岐処理の途中には存在していない。例えば、図９のＳ１０１２において成立判断された場合の飛び先アドレスは、条件分岐処理Ｓ２００４の一連の処理の途中には存在せず、飛び先アドレスは、条件分岐処理Ｓ２００４の先頭アドレス「０ｘ２００ｃ」となっている。
図５で説明したように、例えばＣ言語などでプログラム５１を作成した場合、条件分岐処理は図５（ｄ）のように一つの命令（処理）として記述されるので、他の処理からの飛び先アドレスが、条件分岐処理の途中に存在する場合は無い。（Ｃ言語が書かれた条件分岐処理は、コンパイルされることによって、値設定命令コードと条件判断命令コードと分岐命令コードとの３つの命令コードとなる。）
一方、プログラム５１がアセンブリ言語にて作成されていた場合、他の処理からの飛び先アドレスが条件分岐処理の途中に存在する場合が有り得る。
【００３９】
図１３は、アセンブリ言語で作成されたプログラム５１の第２の具体例のフローチャートである。図９のプログラムの例と異なる点は、図１３においては、Ｓ１００９とＳ１０１２との成立判断時の飛び先アドレスが、条件分岐処理Ｓ２００４の途中に存在する点である。
アセンブリ言語を用いて、プログラム５１を作成する場合は、最初から命令コードに対応したアセンブリ言語の命令コードを用いるので、条件分岐処理も最初から３つのアセンブリ言語の命令コード（値設定命令コードと条件判断命令コードと分岐命令コード）で記述する。そして、３つのアセンブリ言語の命令コードはそれぞれアドレスが設定されており、プログラムの作成者は条件分岐処理の途中の命令コードのアドレスにも他の処理からの飛び先アドレスを設定することが可能である。
【００４０】
そして、例えば、図１３の条件分岐処理Ｓ２００４に着目すると、分岐命令コードＳ１０１９は、条件判断命令コードＳ１０１８における判断結果では無くて、他の処理（Ｓ２００２とＳ２００３）の結果から飛び先アドレスを変えることとなる。ここで、条件分岐処理に含まれる分岐命令コードは、この分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コード（他の処理が含む条件判断命令コードを以下「他処理条件判断命令コード」と称する。）が実行された場合の条件判断の実行結果にも対応して飛び先アドレスを変えることが可能な命令コードである。その為、条件分岐処理は、他処理条件判断命令コードの影響を受けることになる。
従って、条件判断命令コードと分岐命令コードとの間に、他の処理からの飛び先アドレスが存在する条件分岐処理は、実施の形態１に基づく処理によって、削除することが出来ない。
実施の形態２においては、特にアセンブリ言語で作成されたプログラム５１のプログラム最適化装置１００を説明する。
【００４１】
図１４は、独立分岐処理判定部を備えたプログラム最適化装置１００の構成を示す図である。
図１４は、実施の形態１のプログラム最適化装置１００に独立分岐処理判定部２０を追加したものである。よって、重複する部分の説明は省略する。（ここで、独立分岐処理判定部２０が、プログラム最適化装置１００を構成する要素であり、命令コード解析テーブル３００、分岐命令テーブル２１はデータや記述されたプログラム等の情報を示す。）
独立分岐処理判定部２０は、プログラム５１を入力し、入力したプログラムを解析して命令コード解析テーブル３００を作成する。命令コード解析テーブル３００は、プログラム最適化装置１００の記憶装置に保持される。独立分岐処理判定部２０は、さらに命令コード解析テーブル３００を用いてプログラム５１が含む条件分岐処理の内、条件判断命令コードの後に、他の処理からの飛び先アドレスが存在しない独立分岐処理を判定する。そして、その判定結果を分岐命令テーブル２１として出力する。
【００４２】
図１５と図１６と図１７とを用いて、独立分岐処理判定部２０の動作を説明する。
図１５は、命令コード解析テーブル３００の例を示す図である。
図１６は、独立分岐処理判定部２０の動作を示すフローチャートである。
図１７は、分岐命令テーブル２１の例を示す図である。
独立分岐処理判定部２０は、プログラム５１を解析し、プログラム５１を構成する各命令コードに対して以下のフラグを付加し、命令コード解析テーブル３００を作成する。付加されるフラグは、分岐命令コードであることを示す分岐命令フラグ４０３、他の処理からの飛び先アドレスであることを示す分岐先命令フラグ４０４、更に、条件判断命令コードかどうかを示す条件判断命令フラグ４０５である。
独立分岐処理判定部２０が図１３に示すプログラム５１の例を解析して作成した命令コード解析テーブル３００を図１５に示す。
図１５に示すＳ１００１は、図１３に示すＳ１００１と対応している。Ｓ１００１は、命令コードのアドレス４０１が「０ｘＦＦ０」であり、命令４０２が「ＡＤＤ」であり、条件判断命令である為に、条件判断命令フラグ４０５が「Ｙｅｓ」となる。
同様に、図１５に示すＳ１００２は、図１３に示すＳ１００２と対応している。Ｓ１００２は、命令４０２が「Ｂ」であり、分岐命令コードである為に分岐命令フラグ４０３が「Ｙｅｓ」となる。
そして、Ｓ１００３は、命令４０２が「ＳＴＲ」であり、Ｓ１００２の分岐命令コードからの飛び先アドレスである為に分岐先命令フラグ４０４が「Ｙｅｓ」となる。
以下の説明は同様で有る為に省略する。
【００４３】
そして、独立分岐処理判定部２０は、命令コード解析テーブル３００を解析し、各条件分岐処理の内、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを、命令コード解析テーブル３００を用いて判定する。
ここで、独立分岐処理判定部２０は、プログラム５１の最後に実行される命令コードから順に解析を行う。実際のプログラムは多くの命令コードを含むもので有るが、ここでは説明を簡単にする為に、図１５に示すＳ１０２１の命令コードがプログラムの１番最後の命令コードと想定する。
まず、独立分岐処理判定部２０は、図１６のＳ１６１において、命令コード解析テーブル３００が示すプログラムの１番最後の命令コード（図１５のＳ１０２１）からプログラムの先頭の命令コードに向けて検索を行う。そして、独立分岐処理判定部２０は、分岐命令フラグ４０３が「Ｙｅｓ」である命令コードのアドレス４０１を例えばＲＡＭ９１４などのメモリに記憶する。図１５の例では、独立分岐処理判定部２０は、まず、Ｓ１０２０のアドレス４０１「０ｘ２０１８」を記憶する。
次に、図１６のＳ１６２において、独立分岐処理判定部２０は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ４０５が「Ｙｅｓ」である命令コードのアドレス４０１を例えばＲＡＭ９１４などのメモリに記憶する。図１５の例では、独立分岐処理判定部２０は、「０ｘ２０１０」を、条件判断命令フラグ４０５が「Ｙｅｓ」である命令コードのアドレスとして記憶する。
そして、図１６のＳ１６３において、独立分岐処理判定部２０は、Ｓ１６２で記憶したアドレスよりも大きく、Ｓ１６１で記憶したアドレス以下（同じアドレスも含む）のアドレスの範囲に分岐先命令フラグが「Ｙｅｓ」である命令コードが存在するか否かを検索する。そして、独立分岐処理判定部２０は、分岐先命令フラグ４０４が「Ｙｅｓ」である命令コードが存在する場合は、図１７に示す独立分岐処理フラグ５０２を「Ｎｏ」に設定する（Ｓ１６５）。一方、独立分岐処理判定部２０は、分岐先命令フラグ４０４が「Ｙｅｓ」である命令コードが存在しない場合は、図１７に示す独立分岐処理フラグ５０２を「Ｙｅｓ」に設定する（Ｓ１６４）。すなわち、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在しない場合に、独立分岐処理フラグ５０２は「Ｙｅｓ」に設定される。
なお、分岐命令コードのアドレスと飛び先アドレスとが同じ場合は、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在することになる。一方、条件判断命令コードのアドレスと飛び先アドレスとが同じ場合は、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在することにはならない。
図１５の例では、「０ｘ２０１０」より大きく、「０ｘ２０１８」以下のアドレスの範囲に図１５のＳ１０２０とＳ２０１４との分岐先命令フラグが「Ｙｅｓ」である命令コードが存在する。よって、独立分岐処理判定部２０は、Ｓ１０２０の分岐命令コードに対して、独立分岐処理フラグを「Ｎｏ」に設定する。そして、その結果を図１７に示す分岐命令テーブル２１として出力する。
【００４４】
そして、独立分岐処理判定部２０は、次の条件分岐処理の判定を行う為に、更にプログラムの先頭に向けて検索を行い、図１６に示す処理を繰り返す。
独立分岐処理判定部２０は、Ｓ１０２０のアドレス４０１「０ｘ２０１８」の次に、Ｓ１０２０のアドレス４０１「０ｘ２０１４」が、分岐命令フラグ４０３が「Ｙｅｓ」である命令コードであるとして、アドレス４０１「０ｘ２０１４」を例えばＲＡＭ９１４などのメモリに記憶する。そして、独立分岐処理判定部２０は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ４０５が「Ｙｅｓ」である命令コード（Ｓ１０１８）のアドレス４０１「０ｘ２０１０」を記憶する。そして、独立分岐処理判定部２０は、「０ｘ２０１０」より大きく、「０ｘ２０１４」以下のアドレスの範囲に分岐先命令フラグが「Ｙｅｓ」である「０ｘ２０１４」の命令コード（Ｓ１０１９）が存在する為、独立分岐処理フラグ５０２を「Ｎｏ」に設定する。
【００４５】
更に独立分岐処理判定部２０は、プログラムの先頭に向けて検索を行い、Ｓ１０１９のアドレス４０１「０ｘ２０１４」の次に、Ｓ１０１２のアドレス４０１「０ｘ１０１ｃ」（図１５のＳ１０１２）が、分岐命令フラグ４０３が「Ｙｅｓ」である命令コードであるとして、アドレス４０１「０ｘ１０１ｃ」を例えばＲＡＭ９１４などのメモリに記憶する。そして、独立分岐処理判定部２０は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ４０５が「Ｙｅｓ」である命令コード（Ｓ１０１１）のアドレス４０１「０ｘ１０１８」を例えばＲＡＭ９１４などのメモリに記憶する。そして、独立分岐処理判定部２０は、「０ｘ１０１８」より大きく、「０ｘ１０１ｃ」以下のアドレスの範囲に分岐先命令フラグが「Ｙｅｓ」である命令コードが存在しない為に、独立分岐処理フラグを「Ｙｅｓ」に設定する。
この独立分岐処理フラグ５０２を「Ｙｅｓ」に設定された分岐命令コードを含む条件分岐処理は、他の処理の影響を受けない独立した条件分岐処理であり、以下「独立分岐処理」と称する。
【００４６】
同様に独立分岐処理判定部２０は、プログラムの先頭に向けて検索を行い、独立分岐処理か否かの判定を行うが、説明は省略する。
なお、独立分岐処理判定部２０は、図１５の命令コード解析テーブル３００から、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを判定出来れば良い。よって、独立分岐処理判定部２０の独立分岐処理の判定方法は、本例で説明したアルゴリズム以外の方法で有っても構わない。
【００４７】
そして、独立分岐処理判定部２０は、命令コード解析テーブル３００に含まれる条件分岐処理の解析が終了すると、図１７に示す分岐命令テーブル２１を出力する。
分岐命令テーブル２１は、分岐命令コードのアドレスである分岐命令アドレス３０１と独立分岐処理で有るか否かを示す独立分岐処理フラグ５０２で構成される。
【００４８】
図１８と図１９とを用いて削除可能命令抽出部３０の説明を行う。
図１８は、分岐命令実行結果１３の第２の例を示す図である。
図１９は、削除可能分岐処理リスト３１の第２の例を示す図である。
図１８の分岐命令実行結果１３は、命令実行部１１が実行した図１３のプログラム５１の第２の例の実行結果を命令実行監視部１２が監視したものである。内容は実施の形態１と同じであるので、説明は省略する。（図１８の分岐命令実行結果１３は、Ｄ９２とＤ９３との成立アドレス３１２が、図１０の分岐命令実行結果１３とは異なっている。）
そして、削除可能命令抽出部３０は、分岐命令実行結果１３と分岐命令テーブル２１とから削除可能分岐処理リスト３１を作成する。
図１９の削除可能分岐処理リスト３１は、図１１の削除可能分岐処理リスト３１と比べ、分岐命令テーブル２１に含まれる独立分岐処理フラグ５０２が追加されている。（一方向分岐処理フラグ６０４、分岐先アドレス３０２の設定方法は実施の形態１と同様である為、説明を省略する。）
【００４９】
ここで、削除可能分岐処理リスト３１では、以下の４条件を全て満たした分岐処理が削除対象の候補となる。
（条件１）分岐処理種類３０３が「条件」である。すなわち、対象の分岐処理は、条件分岐処理である。
（条件２）一方向分岐処理フラグ６０４が「Ｙｅｓ」である。すなわち、対象の分岐処理は、一方向分岐処理である。
（条件３）固定値分岐処理フラグ３０６が「Ｙｅｓ」である。すなわち、対象の分岐処理は、固定値分岐処理である。
（条件４）独立分岐処理フラグ５０２が「Ｙｅｓ」である。すなわち、対象の分岐処理は、独立分岐処理である。
そして、削除可能命令抽出部３０は、前記条件１〜４を満たす分岐処理の削除可能命令フラグ６０７を「Ｙｅｓ」に設定する。
【００５０】
そして、削除部４０は、削除可能分岐処理リスト３１で削除可能命令フラグ６０７が「Ｙｅｓ」である分岐処理をプログラム５１から削除する。具体例を図２０に示す。
【００５１】
図２０は、図１４のプログラム最適化装置１００により最適化された最適化プログラム４１の第２の例のフローチャートである。
図１９の削除可能分岐処理リスト３１において、削除可能命令フラグ６０７が「Ｙｅｓ」となっているＤ１０３の処理（図２０のＳ２００３）のみが削除されている。（条件分岐処理の削除後の編集方法は、実施の形態１と同様である為、説明を省略する。）
【００５２】
以上の実施の形態により、プログラム最適化装置１００は、アセンブリ言語で作成されたプログラム５１の最適化も可能である。
すなわち、プログラム最適化装置１００は、条件分岐処理における条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを判定することが可能である。そして、プログラム最適化装置１００は、アセンブリ言語で作成されたプログラム５１特有の条件分岐処理における条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されている条件分岐処理は最適化の対象外を判断する。このことにより、プログラム最適化装置１００は、プログラムの実行結果に影響を与えること無く、アセンブリ言語で作成されたプログラム５１の最適化を行う。
【００５３】
改めて、まとめると、実施の形態１では、所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも１つ含むプログラム５１を入力し、入力したプログラム５１をメモリを用いて実行する命令実行部１１と、固定値が設定された変数である固定値変数のメモリにおけるアドレスを示す固定値アドレスを入力し、命令実行部１１が実行するプログラム５１に含まれる少なくとも１つの条件分岐処理の実行内容を監視することにより、少なくとも１つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、命令実行部１１が固定値アドレスにアクセスし、アクセスした固定値アドレスから固定値変数を読み込み、読み込んだ固定値変数に基づいて監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、条件判断命令コードの実行結果を用いて、監視に係る条件分岐処理が含む分岐命令コードを実行する、固定値分岐処理であるか否かを判定する命令実行監視部１２と、命令実行監視部１２が固定値分岐処理であると判定した監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部３０とを備えたことを特徴とするプログラム最適化装置１００について説明した。
更に、実施の形態１では、命令実行監視部１２は、命令実行部１１が、監視に係る条件分岐処理を実行する毎に、監視に係る条件分岐処理が含む条件判断命令コードの実行により、所定の条件が成立すると判断する成立判断を行うか、所定の条件が成立しないと判断する不成立判断を行うかを監視し、削除可能命令抽出部３０は、命令実行監視部１２による監視の結果、命令実行部１１が、監視に係る条件分岐処理を実行する毎の、どの実行においても、、成立判断と不成立判断との内の特定の一方のみの判断を行う場合に、監視に係る条件分岐処理を特定の飛び先アドレスに向かう一方向分岐処理と判断し、監視に係る条件分岐処理が一方向分岐処理であり、かつ、固定値分岐処理である場合に、監視に係る条件分岐処理を削除可能と判断することを特徴とするプログラム最適化装置１００について説明した。
更に、実施の形態１では、プログラム最適化装置１００は、さらに、削除可能命令抽出部３０が削除可能と判断した条件分岐処理を、プログラム５１から削除する削除部４０を備えることを特徴とするプログラム最適化装置１００について説明した。
更に、実施の形態１では、命令実行監視部１２は、固定値アドレスを複数入力し、入力した複数の固定値アドレスの内、命令実行部１１がアクセスを行わなかった固定値アドレスを抽出することを特徴とするプログラム最適化装置について説明した。
また、実施の形態２では、命令実行部１１が実行するプログラム５１の少なくとも１つの条件分岐処理に含まれる分岐命令コードは、さらに、他処理条件判断命令コードであって、分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コードである他処理条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードであり、プログラム最適化装置１００は、さらに、命令実行部１１が実行するプログラム５１を入力し、入力したプログラム５１に含まれる少なくとも１つの条件分岐処理を解析することにより、少なくとも１つの条件分岐処理の内、解析に係る条件分岐処理が含む分岐命令コードが、解析に係る条件分岐処理以外の処理が含む他処理条件判断命令コードが実行された場合の条件判断の実行結果の影響を受けることなく、解析に係る条件分岐処理が含む条件判断命令コードが実行された場合の条件判断の実行結果のみに対応して飛び先アドレスを変える命令コードであると判断した場合に、解析に係る条件分岐処理を他の処理の影響を受けない独立した条件分岐処理である独立分岐処理と判定する独立分岐処理判定部２０を備え、削除可能命令抽出部３０は、一方向分岐処理と判定し、さらに、独立分岐処理判定部２０が独立分岐処理と判定し、さらに、命令実行監視部１２が固定値分岐処理と判定した条件分岐処理を、削除可能な条件分岐処理であると判断することを特徴とするプログラム最適化装置１００について説明した。
【００５４】
更に換言すると、本実施の形態では、システム構成が決まると以降変更されることのない固定値変数テーブル５２と、プログラム５１（命令コード）を入力し、入力されたプログラム５１（命令コード）をシミュレーションし、分岐命令の成立判断（分岐成立）、不成立判断（不成立）を出力すると共に、固定値変数テーブル５２の値同士、あるいは固定値変数テーブル５２の値と即値の演算結果を分岐命令の条件に使用したかどうかの分岐命令実行結果１３を出力する命令シミュレーション部１０と、プログラム５１（命令コード）から、直前に実行した分岐命令の次命令から分岐命令までの間に条件判断を更新する命令があるかどうかを解析し、分岐命令テーブル２１を出力する独立分岐処理判定部２０（分岐命令テーブル作成部）と、命令シミュレーション部１０が出力した分岐命令実行結果１３と独立分岐処理判定部２０（分岐命令テーブル作成部）が出力した分岐命令テーブル２１から削除可能な分岐命令を抽出し、削除可能分岐処理リスト３１を出力する削除可能命令抽出部３０と、削除可能命令抽出部３０が出力した削除可能分岐処理リスト３１とプログラム５１（命令コード）からプログラム５１（命令コード）の再構築を行い、最適化プログラム４１（最適化命令コード）を出力する削除部４０（命令コード再構築部）を備えることを特徴としたプログラム最適化装置１００（命令コード最適化装置）について説明した。
【００５５】
なお、既に、説明したように、本実施の形態１に示すプログラム最適化装置１００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【００５６】
１０  命令シミュレーション部、１１  命令実行部、１２  命令実行監視部、１３  分岐命令実行結果、２０  独立分岐処理判定部、２１  分岐命令テーブル、３０  削除可能命令抽出部、３１  削除可能分岐処理リスト、４０  削除部、４１  最適化プログラム、５０  記憶装置、５１  プログラム、５２  固定値変数テーブル、１００  プログラム最適化装置、１０１  アドレス、１０２  サイズ、１０３  変数名、３００  命令コード解析テーブル、３０１  分岐命令アドレス、３０２  分岐先アドレス、３０３  分岐処理種類、３０４  成立判断回数、３０５  不成立判断回数、３０６  固定値分岐処理フラグ、３１２  成立アドレス、３１３  不成立アドレス、４０１  アドレス、４０２  命令、４０３  分岐命令フラグ、４０４  分岐先命令フラグ、４０５  条件判断命令フラグ、５０２  独立分岐処理フラグ、６０４  一方向分岐処理フラグ、６０７  削除可能命令フラグ、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  コンパクトディスク装置、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ローカルエリアネットワーク。
【図１】
2012174153.tif 000003
【図２】
2012174153.tif 000004
【図３】
2012174153.tif 000005
【図４】
2012174153.tif 000006
【図５】
2012174153.tif 000007
【図６】
2012174153.tif 000008
【図７】
2012174153.tif 000009
【図８】
2012174153.tif 000010
【図９】
2012174153.tif 000011
【図１０】
2012174153.tif 000012
【図１１】
2012174153.tif 000013
【図１２】
2012174153.tif 000014
【図１３】
2012174153.tif 000015
【図１４】
2012174153.tif 000016
【図１５】
2012174153.tif 000017
【図１６】
2012174153.tif 000018
【図１７】
2012174153.tif 000019
【図１８】
2012174153.tif 000020
【図１９】
2012174153.tif 000021
【図２０】
2012174153.tif 000022