(57)【特許請求の範囲】
【請求項１】
プログラムを解析する方法であって、プロセッサが、
前記プログラムの開始時に、前記プログラムの各命令にそれぞれが対応している複数のフラグを備える第１テーブルの当該フラグをディスエーブルに初期化するステップと、
前記プログラムの開始時に、前記プログラムの各命令にそれぞれが対応している複数のエントリを備え、当該エントリに履歴情報を有する第２テーブルの初期状態を保存するステップと、
分岐命令を実行するステップと、
前記分岐命令の実行時に、前記第１テーブルの該当する前記フラグがイネーブルかディスエーブルかを判定するステップと、
該当する前記フラグがディスエーブルの場合、該当する前記フラグをイネーブルにするステップと、
前記分岐命令の実行時に、分岐が成立か不成立かを判定するステップと、
分岐が不成立の場合、前記第２テーブルの該当する前記エントリの前記履歴情報の値をデクリメントするステップと、
分岐が成立の場合、前記第２テーブルの該当する前記エントリの前記履歴情報の値をインクリメントするステップと、
前記プログラムを終了するか否かを判定するステップと、
前記プログラムを終了しない場合、前記分岐命令を実行するステップから前記プログラムを終了するか否かを判定するステップまでを繰り返すステップと、
前記プログラムを終了する場合、前記第２テーブルの終了状態と保存した前記初期状態から前記エントリそれぞれの前記履歴情報の値の差分を取得するステップと、
前記第１テーブルの前記フラグそれぞれの終了状態を取得するステップと、
を実行することを含む、プログラム解析方法。
【請求項２】
前記フラグはフラグ・ビットであり、前記フラグをディスエーブルに初期化するステップは当該フラグ・ビットを０に設定することを含み、前記フラグをイネーブルにするステップは当該フラグ・ビットを１に設定することを含む、請求項１に記載の方法。
【請求項３】
前記履歴情報は複数のビットからなり、当該複数のビットの最下位ビットを前記フラグにして前記第２テーブルは前記第１テーブルを兼ね、前記フラグをディスエーブルに初期化するステップは当該最下位ビットを０に設定することを含み、前記フラグをイネーブルにするステップは当該最下位ビットを１に設定することを含む、請求項１に記載の方法。
【請求項４】
前記第２テーブルとして分岐履歴テーブルを用いることを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
プロセッサに、請求項１〜４のいずれか１項に記載の方法の各ステップを実行させるプログラム解析のためのコンピュータ・プログラム。
【請求項６】
プログラムを解析するシステムであって、
プロセッサは、前記プログラムの各命令にそれぞれが対応している複数のフラグを備える第１テーブルと、前記第１テーブルを制御する第１テーブル制御部と、前記プログラムの各命令にそれぞれが対応している複数のエントリを備え、当該エントリに履歴情報を有する第２テーブルと、前記第２テーブルを制御する第２テーブル制御部と、分岐命令を処理し、分岐命令実行の情報および分岐の成立、不成立の情報を前記第１テーブル制御部および前記第２テーブル制御部それぞれに提供する分岐処理部とを含み、
前記第１テーブル制御部はフラグ処理部を備え、当該フラグ処理部は、前記プログラムの開始時に前記フラグをディスエーブルに初期化し、前記分岐処理部から前記分岐命令実行の情報が提供されたときには該当する前記フラグがイネーブルかディスエーブルかを判定し、該当する前記フラグがディスエーブルの場合には該当する前記フラグをイネーブルにし、前記プログラムの終了時に前記第１テーブルの前記フラグそれぞれの終了状態を提供し、
前記第２テーブル制御部は履歴情報処理部を備え、当該履歴情報処理部は、前記プログラムの開始時に前記エントリの前記履歴情報の初期状態を保存し、前記分岐処理部から前記分岐不成立の情報が提供されたときには該当する前記エントリの前記履歴情報の値をデクリメントし、前記分岐処理部から前記分岐成立の情報が提供されたときには該当する前記エントリの前記履歴情報の値をインクリメントし、前記プログラムの終了時に前記エントリの前記履歴情報の終了状態と保存した前記初期状態から前記エントリそれぞれの前記履歴情報の値の差分を提供する、
プログラム解析システム。
【請求項７】
前記フラグはフラグ・ビットであり、前記フラグ処理部は、当該フラグ・ビットを０に設定することにより前記フラグをディスエーブルに初期化し、当該フラグ・ビットを１に設定することにより前記フラグをイネーブルにする、請求項６に記載のシステム。
【請求項８】
前記履歴情報は複数のビットからなり、当該複数のビットの最下位ビットを前記フラグにして前記第２テーブルは前記第１テーブルを兼ね、前記履歴情報処理部は、当該最下位ビットを０に設定することにより前記フラグをディスエーブルに初期化し、当該最下位ビットを１に設定することにより前記フラグをイネーブルにする、請求項６に記載のシステム。
【請求項９】
前記第２テーブルは分岐履歴テーブルを含む、請求項６〜８のいずれか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム解析に関し、特に、分岐履歴テーブル（ＢＨＴ：Ｂｒａｎｃｈ  Ｈｉｓｔｏｒｙ  Ｔａｂｌｅ、以下「ＢＨＴ」と称す）のようなテーブルを用いてプログラム解析を行なう方法、システムおよびコンピュータ・プログラムに関する。
【背景技術】
【０００２】
プログラムの開発と最適化では、その振舞いを詳細に知ることが重要である。プログラムの振舞いを知るための解析手法としては、ＣＰＵエミュレータ、ソフトウェア・プロファイラ、ハードウェア・プロファイラなどがある。ソフトウェアのＣＰＵエミュレータ上でプログラムを実行するＣＰＵエミュレータ手法は、プロセッサ内部の状態も含めあらゆる情報を取得することが可能であるが、実行速度が遅く、組込機器の実使用環境を再現できない。コンパイル時に解析用の命令を挿入するソフトウェア・プロファイル手法は、関数単位の実行順序、回数、時間を計測するが、解析用の命令によるプログラムの振る舞いへの影響が大きい。ＣＰＵ内部に実装されバス上やＣＰＵの専用インターフェースに解析用のハードウェアを追加するハードウェア・プロファイラ手法は、その解析能力が実装次第であり、実装されている場合のみ有効である。
【０００３】
特許文献１には、分岐履歴テーブルを使った分岐予測と分岐履歴テーブルを使わない分岐予測（静的分岐予測）とを併用し、静的に予測できる場合には分岐履歴テーブルを更新しないことにより、不要に分岐履歴テーブルの値が書き換わって分岐履歴テーブルを必要とする分岐命令の予測精度を下げないようにする技術が、記載されている。
【０００４】
特許文献２には、分岐命令毎に１ビットの履歴ビットと２ビットのカウンタを保持する分岐予測表と、カウンタの値が０または２の場合は、履歴ビットの値を出力し、カウンタの値が１または３の場合は、履歴ビットの値を反転して出力する予測出力部と、分岐結果と履歴ビットの値を比較し, 一致した場合はカウンタの値を０にし、一致しなかった場合はカウンタの値が３以外ならばカウンタ値を１増加するカウンタ制御部とを備えるようにして、少量のハードウェアで分岐成立と不成立が交互に連続するパターンを正しく予測する分岐予測装置が、記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−２８２６７７号公報
【特許文献２】特開２０００−２９３３７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
既存のプログラム解析手法は必ずしも満足できるものではなく、それぞれには問題点が存在する。特に、組込システムの最適化にはソフトウェアの詳細な振る舞い解析が重要であるが、ＣＰＵエミュレータ手法は、組込機器の実使用環境を再現できないために、組込システムのプログラムには適さない。ソフトウェア・プロファイラ手法は、関数単位かそれよりも粗い粒度でのプログラム解析しか行なえず、ソフトウェアの変更を伴う。ハードウェア・プロファイラ手法は、ＣＰＵにハードウェア・プロファイラが実装されていなければ使えない。
【０００７】
本発明は、それら既存手法の問題点を解決するプログラム解析手法の実現を目的とする。本発明の目的には、ＢＨＴのようなテーブルを用いてプログラム解析を行なう方法、システムおよびコンピュータ・プログラムを提供することが含まれる。
【課題を解決するための手段】
【０００８】
本発明による１実施態様のプログラム解析方法は、プロセッサが次のステップを実行することを含む。即ち、プログラムの開始時に、プログラムの各命令にそれぞれが対応している複数のフラグを備える第１テーブルの当該フラグをディスエーブルに初期化するステップと、プログラムの開始時に、プログラムの各命令にそれぞれが対応している複数のエントリを備え当該エントリに履歴情報を有する第２テーブルの初期状態を保存するステップと、分岐命令を実行するステップと、分岐命令の実行時に、第１テーブルの該当するフラグがイネーブルかディスエーブルかを判定するステップと、該当するフラグがディスエーブルの場合、該当するフラグをイネーブルにするステップと、分岐命令の実行時に、分岐が成立か不成立かを判定するステップと、分岐が不成立の場合、第２テーブルの該当するエントリの履歴情報の値をデクリメントするステップと、分岐が成立の場合、第２テーブルの該当するエントリの履歴情報の値をインクリメントするステップと、プログラムを終了するか否かを判定するステップと、プログラムを終了しない場合、分岐命令を実行するステップからプログラムを終了するか否かを判定するステップまでを繰り返すステップと、プログラムを終了する場合、第２テーブルの終了状態と保存した初期状態からエントリそれぞれの履歴情報の値の差分を取得するステップと、第１テーブルのフラグそれぞれの終了状態を取得するステップである。
【０００９】
好ましくは、フラグはフラグ・ビットであり、フラグをディスエーブルに初期化するステップは当該フラグ・ビットを０に設定することを含み、フラグをイネーブルにするステップは当該フラグ・ビットを１に設定することを含む。また、好ましくは、履歴情報は複数のビットからなり、当該複数のビットの最下位ビットをフラグにして第２テーブルは第１テーブルを兼ね、フラグをディスエーブルに初期化するステップは当該最下位ビットを０に設定することを含み、フラグをイネーブルにするステップは当該最下位ビットを１に設定することを含む。さらに、好ましくは、第２テーブルとして分岐履歴テーブルＢＨＴを用いることを含む。
【００１０】
本発明の１実施態様により、プロセッサに上記方法の各ステップを実行させるプログラム解析のためのコンピュータ・プログラムが提供される。
【００１１】
本発明による１実施態様のプログラム解析システムでは、プロセッサは、プログラムの各命令にそれぞれが対応している複数のフラグを備える第１テーブルと、第１テーブルを制御する第１テーブル制御部と、プログラムの各命令にそれぞれが対応している複数のエントリを備え当該エントリに履歴情報を有する第２テーブルと、第２テーブルを制御する第２テーブル制御部と、分岐命令を処理し、分岐命令実行の情報および分岐の成立、不成立の情報を第１テーブル制御部および第２テーブル制御部それぞれに提供する分岐処理部とを含む。そして、第１テーブル制御部はフラグ処理部を備え、当該フラグ処理部は、プログラムの開始時にフラグをディスエーブルに初期化し、分岐処理部から分岐命令実行の情報が提供されたときには該当するフラグがイネーブルかディスエーブルかを判定し、該当するフラグがディスエーブルの場合には該当するフラグをイネーブルにし、プログラムの終了時に第１テーブルのフラグそれぞれの終了状態を提供する。また、第２テーブル制御部は履歴情報処理部を備え、当該履歴情報処理部は、プログラムの開始時にエントリの履歴情報の初期状態を保存し、分岐処理部から分岐不成立の情報が提供されたときには該当するエントリの履歴情報の値をデクリメントし、分岐処理部から分岐成立の情報が提供されたときには該当するエントリの履歴情報の値をインクリメントし、プログラムの終了時にエントリの履歴情報の終了状態と保存した初期状態からエントリそれぞれの履歴情報の値の差分を提供する。
【００１２】
好ましくは、フラグはフラグ・ビットであり、フラグ処理部は、当該フラグ・ビットを０に設定することによりフラグをディスエーブルに初期化し、当該フラグ・ビットを１に設定することによりフラグをイネーブルにする。また、好ましくは、履歴情報は複数のビットからなり、当該複数のビットの最下位ビットをフラグにして第２テーブルは第１テーブルを兼ね、履歴情報処理部は、当該最下位ビットを０に設定することによりフラグをディスエーブルに初期化し、当該最下位ビットを１に設定することによりフラグをイネーブルにする。さらに、好ましくは、第２テーブルは分岐履歴テーブルＢＨＴを含む。
【発明の効果】
【００１３】
本発明により、既存のプログラム解析手法の問題点を解決するプログラム解析手法が実現され、ＢＨＴのようなテーブルを用いてプログラム解析を行なう方法、システムおよびコンピュータ・プログラムが提供される。特に、プロセッサに実装されているＢＨＴのようなテーブルを用いて、ハードウェア・コストの低い、プログラムへの影響の少ない、関数単位より細かい粒度の基本ブロック（Basic block）単位での高速なプログラム解析手法を達成することができる。
【図面の簡単な説明】
【００１４】
【図１】ＢＨＴの動作を例示する概略図である。
【図２】ＢＨＴの動作を例示する概略図である。
【図３】ＢＨＴの動作を例示する概略図である。
【図４】ＢＨＴの動作を例示する概略図である。
【図５】本発明の１実施形態に係るプログラム解析システムを有するプロセッサを概略的に示すブロック図である。
【図６】本発明の１実施形態に係るプログラム解析方法を概略的に示すフローチャート図である。
【図７】本発明の１実施形態に係るプログラム解析方法を実施したときの開始時のＢＨＴおよびＢＦＴを例示する概略図である。
【図８】本発明の１実施形態に係るプログラム解析方法を実施したときの終了時のＢＨＴおよびＢＦＴを例示する概略図である。
【図９】本発明の１実施形態に係るプログラム解析方法を実施して得られるデータを例示する概略図である。
【図１０】ＢＨＴのみによるプログラム解析での開始時のＢＨＴを例示する概略図である。
【図１１】ＢＨＴのみによるプログラム解析での終了時のＢＨＴを例示する概略図である。
【図１２】ＢＨＴのみによるプログラム解析で得られるデータを例示する概略図である。
【図１３】本発明の１実施形態に係るプログラム解析方法を実施して得られる別のデータを例示する概略図である。
【発明を実施するための形態】
【００１５】
以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。本発明は多くの異なる態様で実施することが可能であり、記載された実施形態の内容に限定して解釈されるべきではない。なお、実施形態の説明の全体を通じて同じ構成部分乃至構成要素には同じ番号を付している。
【００１６】
まず、本発明の１実施形態に係るプログラム解析方法において用いられるＢＨＴの動作についてその概略を述べる。図１に示すように、プログラムは命令を１番目の基本ブロックで順次実行し（１）、ｂｒと記された分岐命令に達する。ＢＨＴの各エントリには、命令のアドレスＡｄｄｒ．に対応して例えば２ビットで表される履歴Ｈｉｓｔｏｒｙが設けられている。
【００１７】
図２に示すように、１番目のブロックの分岐命令ｂｒが実行されて、２番目のブロックの分岐命令ｂｒの直後までジャンプすると（２）、１番目のブロックの分岐命令ｂｒで分岐が成立したことにより、ＢＨＴの該当するエントリのアドレスＡｄｄｒ.が０００Ｃである履歴ビットはインクリメントされ、１０から１１へと変わる。２番目のブロックの分岐命令ｂｒは実行されないので、ＢＨＴの該当するエントリの履歴ビットは変わらない。プログラムは命令を３番目のブロックで順次実行し（３）、ｂｒと記された分岐命令に達する。
【００１８】
図３に示すように、３番目のブロックの分岐命令ｂｒが実行されて、２番目のブロックの分岐命令ｂｒの直後までプログラムはジャンプして戻ると（４）、３番目のブロックの分岐命令ｂｒで分岐が成立したことにより、ＢＨＴの該当するエントリのアドレスＡｄｄｒ.が００３０である履歴ビットはインクリメントされ、０１から１０へと変わる。
【００１９】
図４に示すように、プログラムは、２番目のブロックの分岐命令ｂｒの直後までジャンプして戻ると（４）、再度３番目のブロックで命令を順次実行し、ｂｒと記された分岐命令に達する（５）。今度は３番目のブロックの分岐命令ｂｒが実行されても、ジャンプしないので分岐は成立しない、即ち不成立となる。分岐命令ｂｒが実行されて分岐が不成立となる場合には、ＢＨＴの該当するエントリ（アドレスＡｄｄｒ.が００３０）の履歴ビットはデクリメントされ、１０から０１へと変わる。３番目のブロックの分岐命令ｂｒの実行に続いて、プログラムは、４番目のブロックで命令を順次実行し（６）、ｂｒと記された分岐命令に達する。プログラムは、４番目のブロックの分岐命令ｂｒを実行してジャンプする。４番目のブロックの分岐命令ｂｒで分岐が成立したことにより、ＢＨＴの該当するエントリのアドレスＡｄｄｒ.が３ＦＦＣである履歴ビットはインクリメントされ、１０から１１へと変わる。
【００２０】
図５は、本発明の１実施形態に係るプログラム解析システムを有するプロセッサ１００を概略的に示すブロック図である。プロセッサ１００は、命令を保持する命令キャッシュ１１０、命令を実行のため格納する命令キュー１２０、分岐命令を処理する分岐処理部１３０、ＢＨＴ１４０、ＢＨＴ１４０を制御するＢＨＴ制御部１５０、分岐フラグ・テーブル（ＢＦＴ：Ｂｒａｎｃｈ  Ｆｌａｇ  Ｔａｂｌｅ、以下「ＢＦＴ」と称す）１６０およびＢＦＴ１６０を制御するＢＦＴ制御部１７０を含む。分岐処理部１３０は、命令キュー１２０からの分岐命令を実行し、分岐命令実行の情報および分岐が成立したか否か（不成立）の情報をＢＨＴ制御部１５０およびＢＦＴ制御部１７０それぞれに提供する。
【００２１】
ＢＨＴ制御部１５０は履歴情報処理部１５５を備える。履歴情報処理部１５５は、プログラム解析開始の命令に応答して、ＢＨＴ１４０の初期状態を図示していないメモリや専用ＳＲＡＭに保存する。また、履歴情報処理部１５５は、分岐命令が実行された場合に、分岐処理部１３０から分岐成立の情報が提供されたときは、ＢＨＴ１４０の該当するエントリ、即ち分岐命令のアドレスを有するエントリの履歴ビットをインクリメントし、分岐処理部１３０から分岐不成立の情報が提供されたときは、ＢＨＴ１４０の該当するエントリの履歴ビットをデクリメントする。さらに、履歴情報処理部１５５は、分岐命令が実行されない場合には、ＢＨＴ１４０の該当するエントリの履歴ビットを変えない。
【００２２】
ＢＦＴ１６０は、各命令に対応して例えば１ビットからなるフラグ（Ｆｌａｇ）を有する。フラグは、「１」のイネーブルに設定されたり、「０」のディスエーブルに設定されたりする。フラグビットの値を反対にしてそれらの設定をしても良い。ＢＦＴ制御部１７０はフラグ処理部１７５を備える。フラグ処理部１７５は、プログラム解析開始の命令に応答して、ＢＦＴ１６０のフラグを初期化、即ち「０」のディスエーブルに設定する。また、フラグ処理部１７５は、分岐命令が実行された場合に、分岐処理部１３０から分岐命令実行の情報が提供されたときは、ＢＦＴ１６０の該当するフラグ、即ち分岐命令に対応するフラグがイネーブルかディスエーブルかを判定し、フラグがディスエーブルの場合にはそのフラグのビットを「１」のイネーブルに設定する。フラグがイネーブルの場合には、フラグ処理部１７５はＢＦＴ１６０の該当するフラグの設定されている状態を維持する。さらに、フラグ処理部１７５は、プログラム解析の間イネーブルに設定されたフラグのビットを保持する、即ち、フラグがイネーブルに設定されたら、プログラム解析の間そのイネーブルの設定を変えない。
【００２３】
図５では、ＢＦＴ１６０およびＢＦＴ制御部１７０は、ＢＨＴ１４０およびＢＨＴ制御部１５０とは別に独立して設けられているが、エントリのアドレス部Ａｄｄｒ．以外のフィールドが２ビットよりも多いいビット数のテーブルでＢＨＴ１４０を構成し、そのテーブルの最下位ビットをＢＦＴ１６０用のフラグ部として設けるようにして、ＢＨＴ１４０にＢＦＴ１６０の機能まで持たせても良い。その場合、ＢＦＴ制御部１７０の機能もＢＨＴ制御部１５０に設けられることになり、ＢＨＴ制御部１５０には履歴情報処理部１５５の機能の外にフラグ処理部１７５の機能が加わる。
【００２４】
図６は、本発明の１実施形態に係るプログラム解析方法を概略的に示すフローチャート（２００）図である。この方法は、図５に示されたようなプログラム解析システムを有するプロセッサ１００で実施できる。プロセッサ１００において、プログラム解析開始の命令が命令キュー１２０より提供されると開始する（ステップ２０５）。プロセッサ１００は、ＢＦＴ１６０のフラグを初期化、即ち「０」のディスエーブルに設定する（ステップ２１０）。また、プロセッサ１００は、ＢＨＴ１４０の初期状態を図示していないメモリや専用ＳＲＡＭに保存する（ステップ２１５）。
【００２５】
続いて、プロセッサ１００は、プログラム中の分岐命令を実行し（ステップ２２０）、ＢＦＴ１６０の該当するフラグ、即ち分岐命令に対応するフラグがビットを「１」にするイネーブルに設定されているか否かを判定する（ステップ２２５）。判定が「いいえ」の場合、即ち該当するフラグがイネーブルでない場合には、プロセッサ１００は、その該当するフラグをイネーブルに（ビットを「１」に）設定して（ステップ２３０）、ステップ２３５に進む。判定が「はい」の場合、即ち該当するフラグがイネーブルの場合にも、ステップ２３５に進む。分岐命令の実行で分岐が成立したか否か（不成立）を判定する（ステップ２３５）。判定が「いいえ」の場合、即ち分岐不成立の場合には、プロセッサ１００は、ＢＨＴ１４０の該当するエントリ、即ち分岐命令のアドレスを有するエントリの履歴ビットをデクリメントして（ステップ２４０）、ステップ２５０に進む。判定が「はい」の場合、即ち分岐成立の場合には、プロセッサ１００は、ＢＨＴ１４０の該当するエントリの履歴ビットをインクリメントして（ステップ２４０）、ステップ２５０に進む。
【００２６】
プロセッサ１００は、ステップ２５０で解析対象のプログラムを終了するか否かを判定する。判定が「いいえ」の場合、即ちそのプログラムを終了しないで続ける場合には、ステップ２２０の直前に戻って、ステップ２２０からステップ２５０までを繰り返す。判定が「はい」の場合、即ちそのプログラムを終了する場合には、ステップ２５５に進む。プロセッサ１００は、ＢＨＴ１４０の終了状態と保存した初期状態から各エントリ（履歴ビット）の値の差分を取得し（ステップ２５５）、さらに、ＢＦＴ１６０の終了状態を取得して（ステップ２６０）、終了する（ステップ２６５）。取得したＢＨＴ１４０の各エントリ（履歴ビット）の値の差分およびＢＦＴ１６０の終了状態はメモリなどに保存しても良いし、図示しない表示装置に表示してユーザに提供するようにしても良い。
【００２７】
図７および図８は、本発明の１実施形態に係るプログラム解析方法を実施したときのそれぞれ開始時および終了時のＢＨＴおよびＢＦＴを、図１乃至図４に示した例を用いて示す。図７では、プロファイル即ちプログラム解析の開始時におけるＢＨＴおよびＢＦＴのデータが示されている。ＢＨＴの初期状態は図示していないメモリや専用ＳＲＡＭに保存され、ＢＦＴはフラグすべてを初期化、即ち「０」のディスエーブルに設定される。プログラムは基本ブロック（ａ）の部分から実行される（１）。
【００２８】
図８では、プロファイル即ちプログラム解析の終了時におけるＢＨＴおよびＢＦＴのデータが示されている。プログラムでは、（ａ）の部分の分岐命令（ａ）ｂｒを実行して（ｃ）の部分にジャンプし（２）、（ｃ）の部分を実行する（３）。それから、プログラムでは、（ｃ）の部分の分岐命令（ｃ）ｂｒを実行して（ｃ）の部分の先頭にジャンプし（４）、再度（ｃ）の部分を実行する（５）。プログラムでは、今度は（ｃ）の部分の分岐命令（ｃ）ｂｒを実行せずに、（ｘ）の部分を実行する（６）。そして、プログラムでは、（ｘ）の部分の分岐命令（ｘ）ｂｒを実行してジャンプする。各分岐命令が実行されて、その都度ＢＨＴの該当するエントリの履歴ビットは更新されている。得られたＢＨＴの終了状態のデータから開始時に保存していた初期状態のデータとの差分ｄｉｆｆが求められている。また、各分岐命令が実行されて、分岐が成立した場合にはＢＦＴの該当するフラグのビットが「１」のイネーブルに設定されている。本発明の１実施形態に係るプログラム解析方法を実施して、ＢＨＴの差分ｄｉｆｆのデータとＢＦＴの終了時のフラグのデータが得られる。
【００２９】
図９には、解析するプログラムの動作と共に、得られたＢＨＴの差分ｄｉｆｆのデータとＢＦＴの終了時のフラグＦｌａｇのデータが示されている。得られたこれらのデータからプログラムについて以下のことが解析できる。即ち、
・分岐命令（ａ）ｂｒについての差分データｄｉｆｆの「＋１」とフラグ・データＦｌａｇの「１」から、（ａ）の部分のコードは実行され、分岐命令（ａ）ｂｒの分岐は成立した。
・分岐命令（ｂ）ｂｒについてのフラグ・データＦｌａｇの「０」から、（ｂ）の部分のコードは実行されなかった。
・分岐命令（ｃ）ｂｒについての差分データｄｉｆｆの「０」とフラグ・データＦｌａｇの「１」から、（ｃ）の部分のコードは実行され、分岐命令（ｃ）ｂｒの分岐は成立した。その分岐の不成立も１回はあった。
・分岐命令（ｘ）ｂｒについての差分データｄｉｆｆの「＋１」とフラグ・データＦｌａｇの「１」から、（ｘ）の部分のコードは実行され、分岐命令（ｘ）ｂｒの分岐は１回以上成立した。
【００３０】
図１０乃至図１２は、参考までに、ＢＨＴ（エントリの履歴ビット）のみによるプログラム解析で得られるデータから解析できる事項を示す。図１０には、プロファイル開始時におけるＢＨＴのデータが示されている。図１０は図７に対応するが、図７に示されたＢＦＴのデータは存在しない。同様に、図１１には、プロファイル終了時におけるＢＨＴのデータが示されている。やはり、図１１は図８に対応するが、図８に示されたＢＦＴのデータは存在せず、ＢＨＴの差分ｄｉｆｆのデータのみが得られる。
【００３１】
図１２には、解析するプログラムの動作と共に、得られたＢＨＴの差分ｄｉｆｆのデータが示されている。得られたこのデータからプログラムについて以下のことが解析できる。即ち、
・分岐命令（ａ）ｂｒについての差分データｄｉｆｆの「＋１」から、（ａ）の部分のコードは実行され、分岐命令（ａ）ｂｒの分岐は成立した。
・分岐命令（ｘ）ｂｒについての差分データｄｉｆｆの「＋１」から、（ｘ）の部分のコードは実行され、分岐命令（ｘ）ｂｒの分岐は成立した。
このように、ＢＨＴ（エントリの履歴ビット）のみによるプログラム解析では、（ｂ）の部分のコードが実行されたかどうかは分からないし、また、（ｃ）の部分のコードは実行されたにも拘らず、（ｃ）の部分のコードが実行されたかどうかも分からない。しかしながら、先に例示したとおり、本発明のように、ＢＦＴを設けて分岐成立時に該当フラグをイネーブルにすることにより、それらの問題点は解決される。
【００３２】
図１３は、本発明の１実施形態に係るプログラム解析方法を実施して得られる別のデータを例示する概略図である。図１３の例では、プログラム固有の分岐命令の有無や分岐確率が予めプロファイル取得される。図１３に示すように、コードＡ、ＢおよびＣの最初の分岐命令ｂｒは常に実行される条件分岐であり、コードＡの最後の分岐命令ｂｒは高頻度で成立し、コードＣの最後の分岐命令ｂｒは高頻度で不成立であることが分かっている。これらの、プロファイル情報と得られたＢＨＴの差分ｄｉｆｆのデータおよびＢＦＴのフラグのデータとを対応付けてプログラムの振舞いを解析することができる。特に、以下のことが解析できる。即ち、
・コードＡおよびＣにおける最初の分岐命令ｂｒについての差分データｄｉｆｆの「０」とフラグ・データＦｌａｇの「１」から、コードＡおよびＣは実行され、それらの常に実行される条件分岐は成立した。
・コードＢにおける最初の分岐命令ｂｒについての差分データｄｉｆｆのブランク（更新なし）とフラグ・データＦｌａｇのブランク（「０」）から、コードＢは実行されなかった。
・コードＡが実行されたことが確認されており、コードＡおよびＣにおける最後の分岐命令ｂｒについての差分データｄｉｆｆが「−１」となり、フラグ・データＦｌａｇが「１」となっていることから総合的に判断して、高頻度で成立するコードＡの方の分岐命令が実行された後に、高頻度で不成立するコードＣの方の分岐命令が実行された。
【００３３】
以上、実施態様を用いて本発明の説明をしたが、本発明の技術的範囲は実施態様について記載した範囲には限定されない。実施態様に種々の変更又は改良を加えることが可能であり、そのような変更又は改良を加えた態様も当然に本発明の技術的範囲に含まれる。
【図１】
0005552042.tif 000002
【図２】
0005552042.tif 000003
【図３】
0005552042.tif 000004
【図４】
0005552042.tif 000005
【図５】
0005552042.tif 000006
【図６】
0005552042.tif 000007
【図７】
0005552042.tif 000008
【図８】
0005552042.tif 000009
【図９】
0005552042.tif 000010
【図１０】
0005552042.tif 000011
【図１１】
0005552042.tif 000012
【図１２】
0005552042.tif 000013
【図１３】
0005552042.tif 000014