"所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行部と、固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも1つの条件分岐処理の実行内容を監視することにより、前記少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、前記条件判断命令コードの実行結果を用いて、前記監視に係る条件分岐処理が含む分岐命令コードを実行する、前記固定値分岐処理であるか否かを判定する命令実行監視部と、前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部とを備えたことを特徴とするプログラム最適化装置。前記命令実行監視部は、前記命令実行部が、前記監視に係る条件分岐処理を実行する毎に、前記監視に係る条件分岐処理が含む条件判断命令コードの実行により、前記所定の条件が成立すると判断する成立判断を行うか、前記所定の条件が成立しないと判断する不成立判断を行うかを監視し、前記削除可能命令抽出部は、前記命令実行監視部による監視の結果、前記命令実行部が、前記監視に係る条件分岐処理を実行する毎の、どの実行においても、前記成立判断と前記不成立判断との内の特定の一方のみの判断を行う場合に、前記監視に係る条件分岐処理を特定の飛び先アドレスに向かう一方向分岐処理と判断し、前記監視に係る条件分岐処理が前記一方向分岐処理であり、かつ、前記固定値分岐処理である場合に、前記監視に係る条件分岐処理を削除可能と判断することを特徴とする請求項1記載のプログラム最適化装置。前記命令実行部が実行する前記プログラムの前記少なくとも1つの条件分岐処理に含まれる前記分岐命令コードは、さらに、他処理条件判断命令コードであって、前記分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コードである前記他処理条件判断命令コードが実行された場合の条件判断の実行結果に対応して前記飛び先アドレスを変える命令コードであり、前記プログラム最適化装置は、さらに、前記命令実行部が実行する前記プログラムを入力し、入力した前記プログラムに含まれる前記少なくとも1つの条件分岐処理を解析することにより、前記少なくとも1つの条件分岐処理の内、解析に係る条件分岐処理が含む分岐命令コードが、前記解析に係る条件分岐処理以外の処理が含む他処理条件判断命令コードが実行された場合の条件判断の実行結果の影響を受けることなく、前記解析に係る条件分岐処理が含む条件判断命令コードが実行された場合の条件判断の実行結果のみに対応して前記飛び先アドレスを変える命令コードであると判断した場合に、前記解析に係る条件分岐処理を前記他の処理の影響を受けない独立した条件分岐処理である独立分岐処理と判定する独立分岐処理判定部を備え、前記削除可能命令抽出部は、前記一方向分岐処理と判定し、さらに、前記独立分岐処理判定部が前記独立分岐処理と判定し、さらに、前記命令実行監視部が前記固定値分岐処理と判定した条件分岐処理を、削除可能な条件分岐処理であると判断することを特徴とする請求項1又は2記載のプログラム最適化装置。前記プログラム最適化装置は、さらに、前記削除可能命令抽出部が削除可能と判断した条件分岐処理を、前記プログラムから削除する削除部を備えることを特徴とする請求項1~3いずれか記載のプログラム最適化装置。前記命令実行監視部は、前記固定値アドレスを複数入力し、入力した前記複数の固定値アドレスの内、前記命令実行部がアクセスを行わなかった前記固定値アドレスを抽出することを特徴とする請求項1~4いずれか記載のプログラム最適化装置。命令実行部が、所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行ステップと、命令実行監視部が、固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも1つの条件分岐処理の実行内容を監視することにより、前記少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行う、前記固定値分岐処理であるか否かを判定する命令実行監視ステップと、削除可能命令抽出部が、前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出ステップとを備えたことを特徴とするプログラム最適化方法。コンピュータを、請求項1~5いずれか記載のプログラム最適化装置として機能させることを特徴とするプログラム。この発明の実施の形態は、例えば、プログラムの最適化を行う方法として実行回数の多い無条件分岐処理の削除に限らず、不要な条件分岐処理の削除を行い、プログラムの実行時間の削減を目的とする。この発明に係るプログラム最適化装置は、所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、前記条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラムを入力し、入力した前記プログラムをメモリを用いて実行する命令実行部と、固定値が設定された変数である固定値変数の前記メモリにおけるアドレスを示す固定値アドレスを入力し、前記命令実行部が実行する前記プログラムに含まれる前記少なくとも1つの条件分岐処理の実行内容を監視することにより、前記少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、前記命令実行部が前記固定値アドレスにアクセスし、アクセスした前記固定値アドレスから前記固定値変数を読み込み、読み込んだ前記固定値変数に基づいて前記監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、前記条件判断命令コードの実行結果を用いて、前記監視に係る条件分岐処理が含む分岐命令コードを実行する、前記固定値分岐処理であるか否かを判定する命令実行監視部と、前記命令実行監視部が前記固定値分岐処理であると判定した前記監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部とを備えたことを特徴とする。この発明に係るプログラム最適化装置は、例えば、プログラムの最適化を行う方法として実行回数の多い無条件分岐処理の削除に限らず、不要な条件分岐処理の削除を行い、プログラムの実行時間の削減を可能とする。実施の形態1.本実施の形態では、本実施の形態のプログラム最適化装置が例えば組込みシステムに用いられるプログラムを最適化する例を説明する。最初に、図1、図2を用いてプログラム最適化装置の概要を説明する。図1は、実施の形態1におけるプログラム最適化装置の外観の一例を示す図である。図1において、プログラム最適化装置100は、システムユニット910、CRTCathodeRayTubeやLCD液晶の表示画面を有する表示装置901、キーボード902KeyBoard:K/B、マウス903、FDD904FlexibleDiskDrive、コンパクトディスク装置905CDD、プリンタ装置906、スキャナ装置907などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。システムユニット910は、コンピュータであり、ファクシミリ機932、電話器931とケーブルで接続され、また、ローカルエリアネットワーク942LAN、ゲートウェイ941を介してインターネット940に接続されている。図2は、実施の形態1におけるプログラム最適化装置100のハードウェア資源の一例を示す図である。図2において、プログラム最適化装置100は、プログラムを実行するCPU911CentralProcessingUnit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいうを備えている。CPU911は、バス912を介してROM913、RAM914、通信ボード915、表示装置901、キーボード902、マウス903、FDD904、CDD905、プリンタ装置906、スキャナ装置907、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置920の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。通信ボード915、キーボード902、スキャナ装置907、FDD904などは、入力部、入力装置の一例である。また、通信ボード915、表示装置901、プリンタ装置906などは、出力部、出力装置の一例である。通信ボード915は、ファクシミリ機932、電話器931、LAN942等に接続されている。通信ボード915は、LAN942に限らず、インターネット940、ISDN等のWANワイドエリアネットワークなどに接続されていても構わない。インターネット940或いはISDN等のWANに接続されている場合、ゲートウェイ941は不用となる。磁気ディスク装置920には、オペレーティングシステム921OS、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、オペレーティングシステム921、ウィンドウシステム922により実行される。上記プログラム群923には、以下に述べる実施の形態の説明において~部として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。ファイル群924には、以下に述べる実施の形態の説明において、~の判定結果、~の計算結果、~の処理結果として説明する情報やデータや信号値や変数値やパラメータが、~ファイルや~データベースの各項目として記憶されている。~ファイルや~データベースは、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出検索参照比較演算計算処理出力印刷表示などのCPUの動作に用いられる。抽出検索参照比較演算計算処理出力印刷表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVDDigitalVersatileDisk等の記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。また、以下に述べる実施の形態の説明において~部として説明するものは、~回路、~装置、~機器、手段であってもよく、また、~ステップ、~手順、~処理であってもよい。すなわち、~部、~手段として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子デバイス基板配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。プログラムはCPU911により読み出され、CPU911により実行される。すなわち、プログラムは、以下に述べる~部としてコンピュータを機能させるものである。あるいは、以下に述べる~部の手順や方法をコンピュータに実行させるものである。次に図3を用いて、プログラム最適化装置100の概要を説明する。図3は、プログラム最適化装置100の構成を示す図である。図中の矢印はデータの流れを表わす。ここで、命令シミュレーション部10命令実行部11、命令実行監視部12、削除可能命令抽出部30、削除部40が、プログラム最適化装置100を構成する要素であり、プログラム51、固定値変数テーブル52、分岐命令実行結果13、削除可能分岐処理リスト31、最適化プログラム41はデータや記述されたプログラム等の情報を示す。プログラム51は、プログラム最適化装置100による最適化対象となるプログラムである。プログラム51は、命令コードから構成されている。命令コードの詳細は、後述する。そして、プログラム51は、プログラム最適化装置100の命令実行部11によって、実行される。また、プログラムには、プログラム最適化装置100の命令実行部11が行う所定の条件が成立するか否かの条件判断の結果によって、プログラム最適化装置100の命令実行部11が次に実行する命令を変える分岐を行う分岐処理が少なくとも1つ含まれる。このような条件判断に基づく分岐処理を以下条件分岐処理と称する。一方、条件判断に無関係な分岐処理を無条件分岐処理と称する。また、プログラム最適化装置100の命令実行部11が所定の条件が成立すると判断することを以下成立判断と称し、所定の条件が成立すると判断しないと判断することを以下不成立判断と称する。なお、条件分岐処理の詳細は、後述する。固定値変数テーブル52は、固定値変数のメモリ例えばROM913やRAM914におけるアドレスを示す固定値アドレスを記録したテーブルである。ここで、固定値変数とは、固定値が設定された変数である。例えば、プログラム51を使用する組込みシステムに接続される装置の構成が決定するとプログラム51内で使用する変数の値が確定し、以降変更されることがない。この変更されることがない変数を固定値変数と称する。ここで、組込みシステムとは、特定の機能を実現する為のハードウェア例えば演算装置やメモリなどとプログラム51を含むソフトウェアとからなるコンピュータの一種である。組込みシステムが組込まれる対象は、例えばカーナビゲーション装置のような小規模なものから、例えばファクトリーオートメーションFactoryAutomation、以下FAと称するシステムのような大規模なものまで含まれ、対象が限定されるものではない。例えば、カーナビゲーション装置では、カーナビゲーションの機能を実現する為のハードウェアとプログラム51を含むソフトウェアがカーナビゲーション装置に組込まれる。また、例えば、FAシステムでは、工場の生産自動化の機能を実現する為のハードウェアとプログラム51を含むソフトウェアがFAシステムに組込まれる。ここで、FAシステムは複数の加工装置から構成されるものでも良いし、1台の加工装置であっても良い。以下、FAシステムを例に説明する。例えば、FAシステムは、1つ以上のコントローラと各コントローラに接続される複数の入出力装置Input/Output装置、以下I/O装置と称するから構成される。ここでコントローラがプログラム51を組み込まれる組込みシステムであり、I/O装置は組込みシステムであるコントローラに接続される装置である。I/O装置は、例えば製品の温度管理を行う温度センサ入力装置や、製品の加工を行う加工装置のモーター出力装置などが想定される。コントローラは、接続された入力装置からの情報を入力し、入力された情報に応じて、出力装置の制御をするために、プログラム51を用いる。プログラム51内では、例えば、温度センサの型番を示す変数や、モーターのメーカーを示す変数などを用いて例えばモーターのメーカーを示す変数で指定されたモーターの回転数を制御する命令が書かれている。そして、FAシステムの設計段階においては、様々なメーカーのモーターを試用する為に、例えば、プログラム51内で使用するモーターのメーカーを示す変数の値はA社であったり、B社であったりと変化する。しかし、FAシステムの設計が完了し、FAシステムに用いるモーターのメーカーがA社に決定した時は、モーターのメーカーを示す変数の値はA社に固定される。そして、一度FAシステムを構成するハードウェアI/O装置が決まると、以降変更されることはほとんど無く、例えばモーターのメーカーを示す変数の値はA社という固定値が設定された変数、すなわち固定値変数となる。記憶装置50は、プログラム最適化装置100の外部に備えられ、プログラム51と固定値変数テーブル52とを記憶する。記憶装置50は、例えばダイナミックランダムアクセスメモリDynamicRandomAccessMemory、DRAMやフラッシュメモリなどである。ここで、プログラム51を記憶する記憶装置と、固定値変数テーブル52を記憶する記憶装置とが別々で有っても構わない。命令シミュレーション部10は、命令実行部11と命令実行監視部12とで構成される。命令実行部11は、記憶装置50が記憶するプログラム51を入力し、プログラム51を実行する。そして、命令実行部11は、プログラム51実行時に、固定値変数の情報が必要な場合には、固定値アドレスにアクセスして固定値変数の情報を得る。なお、命令実行部11がプログラム51を実行した結果は、プログラム最適化装置100から外部には出力されない為、命令実行部11はプログラム51を模擬実行シミュレーションしているとも言える。命令実行監視部12は、固定値変数テーブル52を入力し、命令実行部11が実行するプログラム51に含まれる条件分岐処理の実行内容を監視する。例えば、命令実行監視部12は、固定値変数テーブル52に記録された固定値アドレスと同じアドレスに、命令実行部11がアクセスするか否かを監視する。そして、命令実行監視部12は、条件分岐処理が固定値変数に基づいて条件判断を行う条件分岐処理以下固定値分岐処理と称するであるか否かを判定する。固定値分岐処理とは、更に詳しく説明すると、命令実行部11が固定値アドレスにアクセスし、アクセスした固定値アドレスから固定値変数を読み込み、読み込んだ固定値変数に基づいて、条件分岐処理が含む条件判断命令コードにより条件判断を行う条件分岐処理である。また、命令実行監視部12は、命令実行部11がプログラム51の実行に使用するメモリやレジスタと、命令コードが配置されているプログラムアドレスと命令コードを監視する。分岐命令実行結果13は、命令実行監視部12が出力した命令実行監視部12による監視の結果である。削除可能命令抽出部30は、命令実行監視部12による監視の結果である分岐命令実行結果13を入力する。削除可能命令抽出部30は、命令実行監視部12が固定値分岐処理であると判定した条件分岐処理を、削除可能と判断する。また、削除可能命令抽出部30は、条件分岐処理を削除可能と判断した結果を削除可能分岐処理リスト31として出力する。削除部40は、削除可能命令抽出部30が削除可能と判断した条件分岐処理を、プログラム51から削除する。削除部40は、削除可能分岐処理リスト31を入力し、入力した削除可能分岐処理リスト31から削除可能命令抽出部30が削除可能と判断した条件分岐処理を特定する。そして、削除部40は、プログラム51から削除可能と判断された条件分岐処理を削除した結果を最適化プログラム41として出力する。次にプログラム51の説明を行う。まず、図4を用いてプログラム51の説明を行う。図4は、プログラム51の概要の例を示す図である。aは機械語で書かれたプログラム51の例、bはプログラム51をアセンブリ言語で表記した例。図4に示す例えば58100328が1つの命令コードである。命令コードとは、コンピュータを動作させる命令である。プログラム51は、命令コードから構成されている。58100328という命令コードは、例えばアセンブリ言語で表記するとLDRR10x0328となる。プログラム51は、例えばアセンブリ言語で書かれたソースプログラム例えば図4bがアセンブラで機械語に変換されていても良いし、例えばC言語などで書かれたソースプログラムがコンパイラで機械語に変換されたものでも良い。ソースプログラムにおけるコンピュータ言語の種類の制限は無い。そして、プログラム51は機械語に変換された状態で、記憶装置50に記憶されている。例えば、図4a。本例は機械語を16進数で表記している。そして、命令実行部11は機械語のプログラム51をデコード解析しながら実行する。例えば、命令実行部11は、図4aの1行目に示す58100328の機械語が示す58がロードLDR、10がレジスタ仮にR1、0328が0x0328番地のアドレスと解釈する。そして、命令実行部11は、0x0328番地のアドレスに有るデータをR1レジスタにロード読み込むする命令であると解釈し、動作を実行する。アセンブリ言語で記述すると、図4bに示すLDRR10x0328。このように、機械語の命令コードとアセンブリ言語の命令とは1対1で対応する。よって、以下、説明の簡略化の為に、プログラム51の命令コードの具体例は、機械語の記述を省略し、アセンブリ言語で表記して説明を行う。そして、以下の説明において、機械語の命令コードをアセンブリ言語で表記したものも命令コードと称する。ここで、ソースプログラムでの記述が、どのように命令コードに変換されるか、一般的な例を示す。図5は、ソースプログラムでの条件分岐処理の記述に対応する命令コードを示す例を示す図である。aはソースプログラムの例、bはフローチャートの例、cは命令コードの具体例、dはC言語におけるフローチャートの例。図5aに示すIF文は、例えばC言語のソースプログラムにおける条件判断付きの分岐処理条件分岐処理である。C言語のような高級言語では、図5aまたは図5dに示すように条件判断命令と分岐命令とが一つの命令として記述される。しかしながら、条件分岐処理を分解して考えると、図5bのようなフローチャートで図示することが出来る。まず、条件判断を行うためのステップS101として、条件判断を行う条件判断命令が配置される。この条件判断命令としては、論理演算や算術演算、比較演算、シフトなどの演算系命令が使用される。その後に、条件判断命令の条件判断の実行結果成立判断もしくは不成立判断により分岐を行うステップS102として、分岐命令が配置される。そして、図5dのようなC言語の分岐命令も、コンパイルされて機械語の命令コードに変換されると、図5cのような3つの命令コードとなる。なお、関数呼び出し等のように条件判断が不要な無条件分岐では、S101は配置せず条件判断命令なしで、直接S102を配置する場合もある。そして、命令コードの具体例は、図5cに示すように、例えばLDRR10x0328S103とCMPR1,d100S104とが、図5bのS101に対応し、BS105が図5bのS102に対応する。ここで、LDRR10x0328S103は、0x0328番地のアドレスに有るデータをR1レジスタにロード読み込むするを意味する。S103には、値を設定する命令コード以下、値設定命令コードと称するが配置される。値設定命令コードは、メモリにアクセスして値を設定する命令コードなので、メモリアクセス命令コードとも称する。そして、CMPR1,d100S104は、R1レジスタのデータを10進数の100と等しいか否かを比較コンペアするを意味する。S104には、S103で設定された値を用いて、条件判断を行う命令コードが配置される。CMPR1,d100S104は、所定の条件が成立するかYes、成立判断否かNo、不成立判断を判断する命令コードである。所定の条件が成立するか否かを判断する命令コードを条件判断命令コードと称する。すなわち、条件判断命令S101は、値設定命令コードS103と条件判断命令コードS104との2つの命令コードから構成されることとなる。そして、BまたはBRS105は分岐ブランチを意味するアセンブリ言語の命令コードである。BS105は、CMPR1,d100S104の条件判断の実行結果成立判断もしくは不成立判断によって、次のステップで実行される命令コードのアドレスを変える。次のステップで実行される命令コードのアドレスを飛び先アドレスと称する。すなわち、BS105は、条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである。条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードを分岐命令コードと称する。分岐命令S102は、アセンブリ言語においても分岐命令コードS105の1つの命令コードと対応する。そして、条件判断命令コードと分岐命令コードとの命令コードの組を含む処理を条件分岐処理と称する。具体的には、例えば図5cに図示するようなS103~S105の値設定命令コードを含んだ一連の処理を条件分岐処理と称する。ここで、図5cの例において、0x0328番地のアドレスに有るデータが常に固定されたデータ固定値で有る場合を考える。例えば、0x0328番地のアドレスに有るデータが10進数の100で有る場合を想定する。この場合は、S105における分岐は必ず成立判断となる。すなわち、例えば、命令実行部11がこの図5cの処理を実行した場合に、必ず命令実行部11は、所定の条件が成立すると判断する成立判断を行う。一方、0x0328番地のアドレスに有るデータが例えば10進数の50すなわち10進数の100ではないで有る場合を想定する。この場合は、S105における分岐は必ず不成立判断となる。すなわち、例えば、命令実行部11がこの図5cの処理を実行した場合に、必ず命令実行部11は、所定の条件が成立しないと判断する不成立判断を行う。このように、例えば、命令実行部11が条件分岐処理の含む条件判断命令コードの実行により、成立判断と不成立判断とのいずれか一方のみの判断を行う場合の条件分岐処理は、特定の飛び先アドレスに向かう一方向の条件分岐処理であり、以下一方向分岐処理と称する。すなわち、条件判断に固定値が用いられており、かつ、条件判断S105における分岐結果成立判断もしくは不成立判断が予め分かっている場合は、図5cに示すS103~S105の処理は不要削除可能となる。次に図6を用いて固定値変数テーブル52の説明を行う。図6は、固定値変数テーブル52の構成の例を示す図である。図6の例は、FAシステムを構成するI/O装置の例である。固定値変数テーブル52は、固定値変数が格納配置されているアドレス101、固定値変数のサイズ102、固定値変数の変数名103で構成されている。ここで、固定値変数の変数名103は省略可能である。この固定値変数は、I/O装置例えば、FAシステムにおける製品加工装置のモーターなどの情報を示す。そして、アドレス101は、I/O装置システム構成装置の情報を格納配置したメモリのメモリアドレスである。具体例として、図6の1行目は、サイズ102が4バイトであるので、アドレス101が示す0x8000から0x8003までのメモリアドレスの間に変数名103が示すI/O装置Aのメーカー名の情報固定値変数が格納されていることを示す。すなわち、アドレス101からアドレス101に固定値変数のサイズ102を加算した範囲のアドレス前記の具体例では0x8000から0x8003が固定値変数のメモリにおけるアドレスを示す固定値アドレスとなる。次に図7を用いて命令実行部11の動作を説明する。図7は、命令実行部11の動作命令シミュレーションを示すフローチャートである。命令シミュレーション部10の命令実行部11では、図7に示すフローチャートに従い、入力されたプログラム51の命令コードを解析しながら、命令を実行する実行を模擬する。まず、命令実行部11は記憶装置50からプログラム51を入力し、入力したプログラム51を実行する。以下、図7のフローチャートに沿って説明する。S201において、命令実行部11は、プログラムカウンタ以下PCと称するを設定する。S202において、命令実行部11は、設定されたPCが示すプログラムメモリから命令コードを取り出す。S203において、命令実行部11は、取り出された命令コードのデコードを行う。S204において、命令実行部11は、S203でのデコードの結果により、取り出された命令コードが、演算系命令コードであるか、メモリアクセス命令コード値設定命令コードであるか、分岐命令コードであるか等が判別できる。そして、命令実行部11は、取り出された命令コードが、分岐命令コードであるか否かを判断する。分岐命令コードでない場合Noのケース、命令実行部11は、デコード結果に従い、S205で命令コードを実行する。分岐命令コードであった場合Yesのケース、命令実行部11は、S210の処理を行う。S210において、命令実行部11は、分岐命令コードの実行結果を判断する。不成立判断分岐不成立であった場合Noのケース、命令実行部11は、デコード結果に従い、S207で分岐処理以外の命令コードを実行する。成立判断分岐成立であった場合Yesのケース、命令実行部11は、デコード結果に従い、S211で分岐処理以外の命令コードを実行する。命令実行部11は、S205及びS207を実行した後は、S206において、現PCに命令長を加算してPCを更新する。命令実行部11は、S211を実行した後は、S212において成立判断時の飛び先アドレス分岐先アドレスをPCに設定する。S206及びS212において、命令実行部11は、PCを更新あるいは設定後、S202の処理に戻り、該当PCから命令コードの取り出しを行う。次に図8と図9と図10とを用いて命令実行監視部12の動作を説明する。図8は、命令実行監視部12の動作を示すフローチャートである。図9は、プログラム51の第1の具体例のフローチャートである。図10は、分岐命令実行結果13の第1の例を示す図である。まず、命令実行監視部12は、記憶装置50から固定値変数テーブル52を入力する。命令実行監視部12は、入力した固定値変数テーブル52を例えば、RAM914や磁気ディスク装置920などの記憶装置に記憶する。図8における図示は省略する。以下、図8のフローチャートに沿って説明する。S801において、命令実行監視部12は、命令実行部11が図7のS205、S207、S211で命令コードを実行すると、命令実行部11が固定値変数テーブル52図6参照に登録されたアドレス101からアドレス101にサイズ102を加算したアドレスの範囲へアクセスを行ったか否かを監視する。ここで、命令実行監視部12は、固定値変数テーブル52に登録された全てのアドレス101とサイズ102の組が示すアドレスを監視の対象とする。ここで、アドレス101からアドレス101にサイズ102を加算したアドレスの範囲固定値アドレスとは、図6で説明の通りシステムを構成するシステム構成要素の情報である固定値変数固定値が格納されているメモリの領域である。すなわち、命令実行部11が固定値アドレスにアクセスしたということは、命令実行部11は固定値変数固定値をメモリから読み込んだことを意味する。この場合、S801で監視した命令コードは、図5に示す値設定命令コードS103となる。命令実行監視部12は、S801における判定がYesの場合、S802の処理を行い、S801における判定がNoの場合、S805における処理を行う。S802において、命令実行監視部12は、S801で監視した命令コードの次に実行される命令コードを命令実行部11が実行した場合に、固定値アドレスから得た固定値変数を用いて条件判断を行ったか否かを監視する。命令実行監視部12は、S802における判定がYesの場合、S803の処理を行い、S802における判定がNoの場合、S808における処理を行う。S803において、命令実行監視部12は、S802で監視した命令コードの次に実行される命令コードを命令実行部11が実行した場合に、S802で監視した命令コードの条件判断に基づいて、分岐を行ったか否かを監視する。更に命令実行監視部12は、分岐の結果成立判断または不成立判断も監視する。命令実行監視部12は、S803における判定がYesの場合、S804の処理を行い、S802における判定がNoの場合、処理を終了し、命令実行部11が次の命令コードを実行するのを待機する。S804において、命令実行監視部12は、S801~S803の監視の結果、一連の処理が、図5cに示すフローチャート構造の条件分岐処理であると判断する。すなわち、命令実行監視部12がS801で監視した命令コードが、図5cのS103の命令コードに対応し、固定値変数を読み込んでいる。そして、S802で監視した命令コードが図5cのS104の命令コードに対応し、固定値変数を用いて条件判断を行っている。そして、S803で監視した命令コードが図5cのS105の命令コードに対応し、固定値変数による条件判断結果を基に分岐を行っている。つまり、S804に導かれた分岐処理は、図5cの説明と同様に、条件判断に固定値が用いられている為、分岐が固定される処理固定値分岐処理である。そして、命令実行監視部12は、一連の処理分岐処理が固定値分岐処理と判断し、固定値分岐処理フラグをYesに設定する。固定値分岐処理フラグは、後述の処理で、分岐命令実行結果13図10の固定値分岐処理フラグ306となる。また、命令実行監視部12は、条件分岐処理であることを示す分岐処理種類を条件に設定する。分岐処理種類は、後述の処理で、分岐命令実行結果13図10の分岐処理種類303となる。更に、命令実行監視部12はS801で監視した命令コードのアドレスを分岐命令実行結果13図10の分岐命令アドレス301に設定する。そして、命令実行監視部12は処理をS810に進める。S810において、命令実行部11がプログラム51を実行中の間、命令実行監視部12は、前記で固定値分岐処理と判断した分岐の実行結果成立判断または不成立判断を継続監視する。命令実行監視部12は、成立判断と不成立判断とのそれぞれの結果回数をカウントする。分岐処理はプログラム51の実行中に、複数回実行される。そして、命令実行監視部12は、命令実行部11がプログラム51を終了すると、分岐の実行結果成立判断または不成立判断として、図10に示す分岐命令実行結果13を出力する例えば図10に示すD93または、D94または、D95。ここで分岐命令実行結果13は、分岐命令アドレス301、成立アドレス312成立判断の場合の飛び先アドレス分岐先、不成立アドレス313不成立判断の場合の飛び先アドレス分岐先、分岐処理種類303、成立判断回数304、不成立判断回数305、固定値分岐処理フラグ306から構成される。次に、図8のS805~S807の流れを説明する。このS805~S807の流れは、条件分岐処理であるが、固定値変数を参照していない場合である。よって、命令実行監視部12は、S807において、固定値分岐処理フラグをNoに設定し、分岐処理種類を条件に設定する。更に、命令実行監視部12は、分岐命令コードのアドレスを分岐命令アドレスに設定する。そして、命令実行監視部12は、S810において、分岐命令実行結果13を出力する例えば、図10に示すD91。次に、図8のS808~S809の流れを説明する。このS808~S809の流れは、条件判断を行わない無条件分岐処理である。よって、命令実行監視部12は、S809において、固定値分岐処理フラグをNoに設定し、分岐処理種類を無条件に設定する。更に、命令実行監視部12は、分岐命令コードのアドレスを分岐命令アドレスに設定する。そして、命令実行監視部12は、S810において、分岐命令実行結果13を出力する例えば、図10に示すD95。ここで、図9のプログラム51の具体例と図10の分岐命令実行結果13の例を用いて、命令実行監視部12の動作を具体的に説明する。図9のプログラム51は、例えばアセンブリ言語で書かれたソースプログラムがアセンブラで機械語に変換されていても良いし、例えばC言語などで書かれたソースプログラムがコンパイラで機械語に変換されたものでも良い。ソースプログラムにおけるコンピュータ言語の種類の制限は無い。そして、プログラム51の命令コードを説明が分かり易いように、機械語に対応したアセンブリ言語で表記している。図9のプログラム51の具体例は、点線の四角枠で囲まれた命令コードが値設定命令コードを示し、実線の四角枠で囲まれた命令コードが、条件判断命令コードを示し、ひし形枠で囲まれた命令コードが分岐命令コードを示す。また、黒丸は、分岐命令コードからの分岐先飛び先アドレスを示す。そして、例えばS1001におけるADDが命令コードの命令を示し、S1001における0x0FF0が命令コードのアドレスを16進数で示したものである。なお、プログラム51による詳細な演算内容は、本実施の形態の説明に無関係である為、命令コードの演算の対象となる値や変数を示すオペランドの表示は省略する。図8のフローチャートと図9のS1001~S1002の命令コードの説明は省略し、命令実行部11がS1003の命令コードを実行した場合から命令実行監視部12の監視内容を以下に列記する。1図9のS1003まず、命令実行部11が、S1003の命令コードを実行すると、命令実行監視部12は、命令実行部11が固定値変数テーブル52に示された固定値アドレスにアクセスしたか否かを監視する。S1003の命令コードは値設定命令コードであるが、STRという例えば演算結果の値をレジスタに保存ストアする命令であり、命令実行部11は固定値アドレスにアクセスしない。例えば、命令実行部11が、固定値の設定されたアドレスに演算結果の値などを上書きする場合は無い。よって、命令実行監視部12は、図8のS801において、Noと判定する。続けて命令実行監視部12は、図8のS805とS808とにおいて、S1003の命令コードは条件判断命令コードでも分岐命令コードでもないので、Noと判定する。そして、命令実行監視部12は、次にS1004の命令コードの監視を行う。2図9のS1004~S1005S1004は、ADDという条件判断命令コードである。このADDという命令コードは、演算系命令コードであり、具体的には加算を行う。他にもSUB減算、ORR論理和、XOR排他的論理和なども演算系命令コードである。これらの演算系命令コードは、演算を実施し、更に分岐命令コードBが分岐の判断を行う為のフラグを更新することが可能である。すなわち、演算系命令コードの処理結果に対応して、分岐命令コードは飛び先アドレスを変えるので、演算系命令コードは、条件判断命令コードであると言える。命令実行部11がS1004の命令コードを実行すると、命令実行監視部12は、図8のS801において、Noと判定するが、図8のS805においてはYesと判定する。そして、続けて、命令実行監視部12は、次の命令コードS1005における命令実行部11の実行内容を監視する。S1005は、分岐命令コードなので、命令実行監視部12は、図8のS806において、Yesと判定する。そして、命令実行監視部12は図8のS807において、S1005の分岐命令コードの分岐処理種類303を条件分岐命令である条件と設定し、固定値分岐処理フラグ306をNoに設定し、S810において分岐命令実行結果13の一部として出力する。更に、命令実行監視部12は、命令実行部11がプログラム51の実行を完了するまで、S1005の分岐命令コードの実行結果成立判断もしくは不成立判断の監視を継続する。命令実行監視部12は、成立判断と不成立判断とのそれぞれの結果回数をカウントする。そして、命令実行部11がプログラム51の実行を完了すると、命令実行監視部12は図8のS810において、S1005の分岐命令コードにおける成立判断の回数成立判断回数304と不成立判断の回数不成立判断回数305とを分岐命令実行結果13の一部として出力する。図10のD91がS1005の分岐命令コードの分岐命令実行結果を示す。D91の分岐命令アドレス301は、図9のS1005に示す通り、分岐命令コードのアドレスである。成立アドレス312は、図9に示す通り、分岐命令コードにおいて成立判断された場合の飛び先アドレスである。不成立アドレス313は、図9に示す通り、分岐命令コードにおいて不成立判断された場合の飛び先アドレスである。そして、成立判断回数304が100回で、不成立判断回数が50回であったことをD91は示している。分岐処理種類303と固定値分岐処理フラグ306は前記の通りであり、説明を省略する。3図9のS1006命令実行監視部12は、図8のS805でYesと判定するが、次の命令コードS1007が分岐命令コードでは無いので、S1006は無視する。4図9のS1007~S1009S1007は、値設定命令コードであり、命令実行監視部12は、命令実行部11が図8のS801でYes固定値アドレスにアクセスと判定する可能性も有るが、本例では、S1007の命令コードは固定値アドレスにはアクセスしないものと仮定する。よって、命令実行監視部12は、S1003~S1006と同様の処理を行う。5図9のS1010~S1012S1010のLDRは、オペランドも含めて表記すると、LDRR10x8008という命令コードだと仮定する。命令実行監視部12は、命令実行部11がS1010の命令コードを実行すると、固定値変数テーブル52に示されている固定値アドレス0x8008に命令実行部11がアクセスしたことを検知する。そして、命令実行監視部12は図8のS801において、Yesと判定する。更に命令実行監視部12は、次の命令コードADDS1011が演算系命令コードすなわち、条件判断命令コードである為、図8のS802においてYesと判定する。更に、次の命令コードS1012も分岐命令コードであり,命令実行監視部12は、図8のS803においてもYesと判定する。そして、命令実行監視部12は図8のS804において、固定値分岐処理フラグをYesと設定する。S1012の分岐命令コードの分岐命令実行結果13は、図10のD93となる。6図9のS1017~S1019S1010~S1012の処理と同様である為、説明を省略する。ここで、命令実行部11は、S1017の命令コードの実行において、固定値アドレスにアクセスしているものとする。7図9のS1020命令実行監視部12は、図8のS801、S805においてNoと判定するが、S808においてYesと判定する。そして、命令実行監視部12は、図8のS809において、分岐処理種類303を無条件分岐を示す無条件に設定する。図10のD95に分岐命令実行結果13を示す。次に図11を用いて、削除可能命令抽出部30の説明を行う。図11は、削除可能分岐処理リスト31の第1の例を示す図である。削除可能命令抽出部30は、命令実行監視部12から分岐命令実行結果13を入力する。そして、削除可能命令抽出部30は、分岐命令実行結果13から削除可能分岐処理リスト31を作成する。ここで、削除可能命令抽出部30は、成立判断回数304と不成立判断回数305のどちらかが0回である分岐命令コードを抽出し、図11に示す一方向分岐処理フラグ604をYesに設定する。更に、削除可能命令抽出部30は、成立判断回数304が0回である分岐命令コードの不成立アドレス313を分岐先アドレス302として設定する。また、削除可能命令抽出部30は、不成立判断回数305が0回である分岐命令コードの成立アドレス312を分岐先アドレス302として設定する。一方、削除可能命令抽出部30は、成立判断回数304と不成立判断回数305のいずれも0回でない分岐命令の一方向分岐処理フラグ604をNoに設定する。この場合、削除可能命令抽出部30は、分岐命令コードの成立アドレス312もしくは不成立アドレス313のいずれを分岐先アドレス302として設定しても構わない。そして、削除可能分岐処理リスト31では、以下の3条件を全て満たした分岐処理が削除対象の候補となる。条件1分岐処理種類303が条件である。すなわち、対象の分岐処理は、条件分岐処理である。条件2一方向分岐処理フラグ604がYesである。すなわち、対象の分岐処理は、一方向分岐処理である。条件3固定値分岐処理フラグ306がYesである。すなわち、対象の分岐処理は、固定値分岐処理である。そして、削除可能命令抽出部30は、前記条件1~3を満たす分岐処理の削除可能命令フラグ607をYesに設定する。一方、削除可能命令抽出部30は、前記条件1~3を満たさない分岐処理の削除可能命令フラグ607をNoに設定する。そして、図12を用いて削除部40の動作を説明する。図12は、図3のプログラム最適化装置100により最適化された最適化プログラム41の第1の例のフローチャートである。削除部40は、削除可能分岐処理リスト31で削除可能命令フラグ607がYesに設定された分岐命令コードを含む条件分岐処理をプログラム51から削除する。具体的には、図11において、D103とD104とが削除可能命令フラグ607がYesとなっている。ここで、図11のD103が示す条件分岐処理を削除する場合を具体的に説明する。すなわち、削除部40は、図11のD103が示す条件分岐処理図9のS1010~S1012を削除する。そして、削除部40は、図10において、D103が示す条件分岐処理を削除した後、D103の分岐命令アドレス3010x101cと分岐先アドレス3020x200cとで命令が繋がって実行されるようにプログラム51を編集する。図10のD104が示す条件分岐処理図9のS2004を削除する場合については、説明を省略する。前記の方法により、削除部40は、プログラム51から最適化プログラム41を作成する。なお、命令実行監視部12は、固定値変数テーブル52が示す固定値アドレスの内、命令実行部11がアクセスしていない固定値アドレスを抽出することが可能である。固定値アドレスは、前記のように例えば、システム構成装置I/O装置の情報を格納配置したメモリのメモリアドレスである。そして、例えばシステムの管理者は予め、どのシステム構成装置I/O装置の情報がどの固定値アドレスに対応しているかを知ることが出来る。固定値変数テーブル52は、例えばシステムの管理者が作成している為。よって、システムの管理者は、命令実行監視部12が抽出した命令実行部11がアクセスしていない固定値アドレスを知ることが出来れば、プログラム51が未使用のシステム構成装置I/O装置を知ることも可能である。そして、プログラム最適化装置100は、命令実行監視部12が抽出した命令実行部11がアクセスしていない固定値アドレスを例えば、表示装置901などに出力することが可能である。以上の実施の形態により、プログラム最適化装置100は、不要な条件分岐処理をプログラム51から削除し、プログラムの実行時間の削減を可能とする。本実施の形態のプログラム最適化装置100は、組込みシステムに用いられるプログラムの最適化に特に有効である。すなわち、組込みシステムは、組込みシステムに接続されるI/O装置などのシステム構成装置が決定するとプログラム51内で使用するI/O装置に関係する変数の値が確定し、以降変更されることのない固定値変数となる。そして、プログラム最適化装置100は、固定値変数により条件判断を行っている条件分岐処理を削除することが可能となる。また、プログラム最適化装置100は、未使用のI/O装置を検出することが可能で有り、例えば組込みシステムの設計者は、未使用のI/O装置に関する命令コードをプログラム51から削除することも可能である。このように、プログラム最適化装置100でプログラムの実行時間の削減を対策した予め最適化プログラム41を作成し、作成した最適化プログラム41を組込みシステムに実装することが可能となり、組込みシステムを用いた作業を効率化出来る。実施の形態2.本実施の形態では、本実施の形態のプログラム最適化装置が例えば組込みシステムに用いられるアセンブリ言語により作成されたプログラムを最適化する例を説明する。実施の形態1においては、例えば図9に示すように、分岐命令コードからの飛び先アドレスは、条件分岐処理の途中には存在していない。例えば、図9のS1012において成立判断された場合の飛び先アドレスは、条件分岐処理S2004の一連の処理の途中には存在せず、飛び先アドレスは、条件分岐処理S2004の先頭アドレス0x200cとなっている。図5で説明したように、例えばC言語などでプログラム51を作成した場合、条件分岐処理は図5dのように一つの命令処理として記述されるので、他の処理からの飛び先アドレスが、条件分岐処理の途中に存在する場合は無い。C言語が書かれた条件分岐処理は、コンパイルされることによって、値設定命令コードと条件判断命令コードと分岐命令コードとの3つの命令コードとなる。一方、プログラム51がアセンブリ言語にて作成されていた場合、他の処理からの飛び先アドレスが条件分岐処理の途中に存在する場合が有り得る。図13は、アセンブリ言語で作成されたプログラム51の第2の具体例のフローチャートである。図9のプログラムの例と異なる点は、図13においては、S1009とS1012との成立判断時の飛び先アドレスが、条件分岐処理S2004の途中に存在する点である。アセンブリ言語を用いて、プログラム51を作成する場合は、最初から命令コードに対応したアセンブリ言語の命令コードを用いるので、条件分岐処理も最初から3つのアセンブリ言語の命令コード値設定命令コードと条件判断命令コードと分岐命令コードで記述する。そして、3つのアセンブリ言語の命令コードはそれぞれアドレスが設定されており、プログラムの作成者は条件分岐処理の途中の命令コードのアドレスにも他の処理からの飛び先アドレスを設定することが可能である。そして、例えば、図13の条件分岐処理S2004に着目すると、分岐命令コードS1019は、条件判断命令コードS1018における判断結果では無くて、他の処理S2002とS2003の結果から飛び先アドレスを変えることとなる。ここで、条件分岐処理に含まれる分岐命令コードは、この分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コード他の処理が含む条件判断命令コードを以下他処理条件判断命令コードと称する。が実行された場合の条件判断の実行結果にも対応して飛び先アドレスを変えることが可能な命令コードである。その為、条件分岐処理は、他処理条件判断命令コードの影響を受けることになる。従って、条件判断命令コードと分岐命令コードとの間に、他の処理からの飛び先アドレスが存在する条件分岐処理は、実施の形態1に基づく処理によって、削除することが出来ない。実施の形態2においては、特にアセンブリ言語で作成されたプログラム51のプログラム最適化装置100を説明する。図14は、独立分岐処理判定部を備えたプログラム最適化装置100の構成を示す図である。図14は、実施の形態1のプログラム最適化装置100に独立分岐処理判定部20を追加したものである。よって、重複する部分の説明は省略する。ここで、独立分岐処理判定部20が、プログラム最適化装置100を構成する要素であり、命令コード解析テーブル300、分岐命令テーブル21はデータや記述されたプログラム等の情報を示す。独立分岐処理判定部20は、プログラム51を入力し、入力したプログラムを解析して命令コード解析テーブル300を作成する。命令コード解析テーブル300は、プログラム最適化装置100の記憶装置に保持される。独立分岐処理判定部20は、さらに命令コード解析テーブル300を用いてプログラム51が含む条件分岐処理の内、条件判断命令コードの後に、他の処理からの飛び先アドレスが存在しない独立分岐処理を判定する。そして、その判定結果を分岐命令テーブル21として出力する。図15と図16と図17とを用いて、独立分岐処理判定部20の動作を説明する。図15は、命令コード解析テーブル300の例を示す図である。図16は、独立分岐処理判定部20の動作を示すフローチャートである。図17は、分岐命令テーブル21の例を示す図である。独立分岐処理判定部20は、プログラム51を解析し、プログラム51を構成する各命令コードに対して以下のフラグを付加し、命令コード解析テーブル300を作成する。付加されるフラグは、分岐命令コードであることを示す分岐命令フラグ403、他の処理からの飛び先アドレスであることを示す分岐先命令フラグ404、更に、条件判断命令コードかどうかを示す条件判断命令フラグ405である。独立分岐処理判定部20が図13に示すプログラム51の例を解析して作成した命令コード解析テーブル300を図15に示す。図15に示すS1001は、図13に示すS1001と対応している。S1001は、命令コードのアドレス401が0xFF0であり、命令402がADDであり、条件判断命令である為に、条件判断命令フラグ405がYesとなる。同様に、図15に示すS1002は、図13に示すS1002と対応している。S1002は、命令402がBであり、分岐命令コードである為に分岐命令フラグ403がYesとなる。そして、S1003は、命令402がSTRであり、S1002の分岐命令コードからの飛び先アドレスである為に分岐先命令フラグ404がYesとなる。以下の説明は同様で有る為に省略する。そして、独立分岐処理判定部20は、命令コード解析テーブル300を解析し、各条件分岐処理の内、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを、命令コード解析テーブル300を用いて判定する。ここで、独立分岐処理判定部20は、プログラム51の最後に実行される命令コードから順に解析を行う。実際のプログラムは多くの命令コードを含むもので有るが、ここでは説明を簡単にする為に、図15に示すS1021の命令コードがプログラムの1番最後の命令コードと想定する。まず、独立分岐処理判定部20は、図16のS161において、命令コード解析テーブル300が示すプログラムの1番最後の命令コード図15のS1021からプログラムの先頭の命令コードに向けて検索を行う。そして、独立分岐処理判定部20は、分岐命令フラグ403がYesである命令コードのアドレス401を例えばRAM914などのメモリに記憶する。図15の例では、独立分岐処理判定部20は、まず、S1020のアドレス4010x2018を記憶する。次に、図16のS162において、独立分岐処理判定部20は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ405がYesである命令コードのアドレス401を例えばRAM914などのメモリに記憶する。図15の例では、独立分岐処理判定部20は、0x2010を、条件判断命令フラグ405がYesである命令コードのアドレスとして記憶する。そして、図16のS163において、独立分岐処理判定部20は、S162で記憶したアドレスよりも大きく、S161で記憶したアドレス以下同じアドレスも含むのアドレスの範囲に分岐先命令フラグがYesである命令コードが存在するか否かを検索する。そして、独立分岐処理判定部20は、分岐先命令フラグ404がYesである命令コードが存在する場合は、図17に示す独立分岐処理フラグ502をNoに設定するS165。一方、独立分岐処理判定部20は、分岐先命令フラグ404がYesである命令コードが存在しない場合は、図17に示す独立分岐処理フラグ502をYesに設定するS164。すなわち、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在しない場合に、独立分岐処理フラグ502はYesに設定される。なお、分岐命令コードのアドレスと飛び先アドレスとが同じ場合は、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在することになる。一方、条件判断命令コードのアドレスと飛び先アドレスとが同じ場合は、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが存在することにはならない。図15の例では、0x2010より大きく、0x2018以下のアドレスの範囲に図15のS1020とS2014との分岐先命令フラグがYesである命令コードが存在する。よって、独立分岐処理判定部20は、S1020の分岐命令コードに対して、独立分岐処理フラグをNoに設定する。そして、その結果を図17に示す分岐命令テーブル21として出力する。そして、独立分岐処理判定部20は、次の条件分岐処理の判定を行う為に、更にプログラムの先頭に向けて検索を行い、図16に示す処理を繰り返す。独立分岐処理判定部20は、S1020のアドレス4010x2018の次に、S1020のアドレス4010x2014が、分岐命令フラグ403がYesである命令コードであるとして、アドレス4010x2014を例えばRAM914などのメモリに記憶する。そして、独立分岐処理判定部20は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ405がYesである命令コードS1018のアドレス4010x2010を記憶する。そして、独立分岐処理判定部20は、0x2010より大きく、0x2014以下のアドレスの範囲に分岐先命令フラグがYesである0x2014の命令コードS1019が存在する為、独立分岐処理フラグ502をNoに設定する。更に独立分岐処理判定部20は、プログラムの先頭に向けて検索を行い、S1019のアドレス4010x2014の次に、S1012のアドレス4010x101c図15のS1012が、分岐命令フラグ403がYesである命令コードであるとして、アドレス4010x101cを例えばRAM914などのメモリに記憶する。そして、独立分岐処理判定部20は、更にプログラムの先頭に向けて検索を行い、条件判断命令フラグ405がYesである命令コードS1011のアドレス4010x1018を例えばRAM914などのメモリに記憶する。そして、独立分岐処理判定部20は、0x1018より大きく、0x101c以下のアドレスの範囲に分岐先命令フラグがYesである命令コードが存在しない為に、独立分岐処理フラグをYesに設定する。この独立分岐処理フラグ502をYesに設定された分岐命令コードを含む条件分岐処理は、他の処理の影響を受けない独立した条件分岐処理であり、以下独立分岐処理と称する。同様に独立分岐処理判定部20は、プログラムの先頭に向けて検索を行い、独立分岐処理か否かの判定を行うが、説明は省略する。なお、独立分岐処理判定部20は、図15の命令コード解析テーブル300から、条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを判定出来れば良い。よって、独立分岐処理判定部20の独立分岐処理の判定方法は、本例で説明したアルゴリズム以外の方法で有っても構わない。そして、独立分岐処理判定部20は、命令コード解析テーブル300に含まれる条件分岐処理の解析が終了すると、図17に示す分岐命令テーブル21を出力する。分岐命令テーブル21は、分岐命令コードのアドレスである分岐命令アドレス301と独立分岐処理で有るか否かを示す独立分岐処理フラグ502で構成される。図18と図19とを用いて削除可能命令抽出部30の説明を行う。図18は、分岐命令実行結果13の第2の例を示す図である。図19は、削除可能分岐処理リスト31の第2の例を示す図である。図18の分岐命令実行結果13は、命令実行部11が実行した図13のプログラム51の第2の例の実行結果を命令実行監視部12が監視したものである。内容は実施の形態1と同じであるので、説明は省略する。図18の分岐命令実行結果13は、D92とD93との成立アドレス312が、図10の分岐命令実行結果13とは異なっている。そして、削除可能命令抽出部30は、分岐命令実行結果13と分岐命令テーブル21とから削除可能分岐処理リスト31を作成する。図19の削除可能分岐処理リスト31は、図11の削除可能分岐処理リスト31と比べ、分岐命令テーブル21に含まれる独立分岐処理フラグ502が追加されている。一方向分岐処理フラグ604、分岐先アドレス302の設定方法は実施の形態1と同様である為、説明を省略する。ここで、削除可能分岐処理リスト31では、以下の4条件を全て満たした分岐処理が削除対象の候補となる。条件1分岐処理種類303が条件である。すなわち、対象の分岐処理は、条件分岐処理である。条件2一方向分岐処理フラグ604がYesである。すなわち、対象の分岐処理は、一方向分岐処理である。条件3固定値分岐処理フラグ306がYesである。すなわち、対象の分岐処理は、固定値分岐処理である。条件4独立分岐処理フラグ502がYesである。すなわち、対象の分岐処理は、独立分岐処理である。そして、削除可能命令抽出部30は、前記条件1~4を満たす分岐処理の削除可能命令フラグ607をYesに設定する。そして、削除部40は、削除可能分岐処理リスト31で削除可能命令フラグ607がYesである分岐処理をプログラム51から削除する。具体例を図20に示す。図20は、図14のプログラム最適化装置100により最適化された最適化プログラム41の第2の例のフローチャートである。図19の削除可能分岐処理リスト31において、削除可能命令フラグ607がYesとなっているD103の処理図20のS2003のみが削除されている。条件分岐処理の削除後の編集方法は、実施の形態1と同様である為、説明を省略する。以上の実施の形態により、プログラム最適化装置100は、アセンブリ言語で作成されたプログラム51の最適化も可能である。すなわち、プログラム最適化装置100は、条件分岐処理における条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されているか否かを判定することが可能である。そして、プログラム最適化装置100は、アセンブリ言語で作成されたプログラム51特有の条件分岐処理における条件判断命令コードと分岐命令コードとの間に他の処理からの飛び先アドレスが設定されている条件分岐処理は最適化の対象外を判断する。このことにより、プログラム最適化装置100は、プログラムの実行結果に影響を与えること無く、アセンブリ言語で作成されたプログラム51の最適化を行う。改めて、まとめると、実施の形態1では、所定の条件が成立するか否かを判断する命令コードである条件判断命令コードと、条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードである分岐命令コードとの命令コードの組を含む処理を示す条件分岐処理を少なくとも1つ含むプログラム51を入力し、入力したプログラム51をメモリを用いて実行する命令実行部11と、固定値が設定された変数である固定値変数のメモリにおけるアドレスを示す固定値アドレスを入力し、命令実行部11が実行するプログラム51に含まれる少なくとも1つの条件分岐処理の実行内容を監視することにより、少なくとも1つの条件分岐処理の内、監視に係る条件分岐処理が、固定値分岐処理であって、命令実行部11が固定値アドレスにアクセスし、アクセスした固定値アドレスから固定値変数を読み込み、読み込んだ固定値変数に基づいて監視に係る条件分岐処理が含む条件判断命令コードにより条件判断を行い、条件判断命令コードの実行結果を用いて、監視に係る条件分岐処理が含む分岐命令コードを実行する、固定値分岐処理であるか否かを判定する命令実行監視部12と、命令実行監視部12が固定値分岐処理であると判定した監視に係る条件分岐処理を、削除可能と判断する削除可能命令抽出部30とを備えたことを特徴とするプログラム最適化装置100について説明した。更に、実施の形態1では、命令実行監視部12は、命令実行部11が、監視に係る条件分岐処理を実行する毎に、監視に係る条件分岐処理が含む条件判断命令コードの実行により、所定の条件が成立すると判断する成立判断を行うか、所定の条件が成立しないと判断する不成立判断を行うかを監視し、削除可能命令抽出部30は、命令実行監視部12による監視の結果、命令実行部11が、監視に係る条件分岐処理を実行する毎の、どの実行においても、、成立判断と不成立判断との内の特定の一方のみの判断を行う場合に、監視に係る条件分岐処理を特定の飛び先アドレスに向かう一方向分岐処理と判断し、監視に係る条件分岐処理が一方向分岐処理であり、かつ、固定値分岐処理である場合に、監視に係る条件分岐処理を削除可能と判断することを特徴とするプログラム最適化装置100について説明した。更に、実施の形態1では、プログラム最適化装置100は、さらに、削除可能命令抽出部30が削除可能と判断した条件分岐処理を、プログラム51から削除する削除部40を備えることを特徴とするプログラム最適化装置100について説明した。更に、実施の形態1では、命令実行監視部12は、固定値アドレスを複数入力し、入力した複数の固定値アドレスの内、命令実行部11がアクセスを行わなかった固定値アドレスを抽出することを特徴とするプログラム最適化装置について説明した。また、実施の形態2では、命令実行部11が実行するプログラム51の少なくとも1つの条件分岐処理に含まれる分岐命令コードは、さらに、他処理条件判断命令コードであって、分岐命令コードが含まれる条件分岐処理以外の他の処理が含む条件判断命令コードである他処理条件判断命令コードが実行された場合の条件判断の実行結果に対応して飛び先アドレスを変える命令コードであり、プログラム最適化装置100は、さらに、命令実行部11が実行するプログラム51を入力し、入力したプログラム51に含まれる少なくとも1つの条件分岐処理を解析することにより、少なくとも1つの条件分岐処理の内、解析に係る条件分岐処理が含む分岐命令コードが、解析に係る条件分岐処理以外の処理が含む他処理条件判断命令コードが実行された場合の条件判断の実行結果の影響を受けることなく、解析に係る条件分岐処理が含む条件判断命令コードが実行された場合の条件判断の実行結果のみに対応して飛び先アドレスを変える命令コードであると判断した場合に、解析に係る条件分岐処理を他の処理の影響を受けない独立した条件分岐処理である独立分岐処理と判定する独立分岐処理判定部20を備え、削除可能命令抽出部30は、一方向分岐処理と判定し、さらに、独立分岐処理判定部20が独立分岐処理と判定し、さらに、命令実行監視部12が固定値分岐処理と判定した条件分岐処理を、削除可能な条件分岐処理であると判断することを特徴とするプログラム最適化装置100について説明した。更に換言すると、本実施の形態では、システム構成が決まると以降変更されることのない固定値変数テーブル52と、プログラム51命令コードを入力し、入力されたプログラム51命令コードをシミュレーションし、分岐命令の成立判断分岐成立、不成立判断不成立を出力すると共に、固定値変数テーブル52の値同士、あるいは固定値変数テーブル52の値と即値の演算結果を分岐命令の条件に使用したかどうかの分岐命令実行結果13を出力する命令シミュレーション部10と、プログラム51命令コードから、直前に実行した分岐命令の次命令から分岐命令までの間に条件判断を更新する命令があるかどうかを解析し、分岐命令テーブル21を出力する独立分岐処理判定部20分岐命令テーブル作成部と、命令シミュレーション部10が出力した分岐命令実行結果13と独立分岐処理判定部20分岐命令テーブル作成部が出力した分岐命令テーブル21から削除可能な分岐命令を抽出し、削除可能分岐処理リスト31を出力する削除可能命令抽出部30と、削除可能命令抽出部30が出力した削除可能分岐処理リスト31とプログラム51命令コードからプログラム51命令コードの再構築を行い、最適化プログラム41最適化命令コードを出力する削除部40命令コード再構築部を備えることを特徴としたプログラム最適化装置100命令コード最適化装置について説明した。なお、既に、説明したように、本実施の形態1に示すプログラム最適化装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。そして、上記したように~部として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。"