(57)【要約】【課題】ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるコンパイルシステムを提供する。【解決手段】高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、オリジナルソースプログラム１０１に対してソースプログラムレベルの最適化を施すことにより、オリジナルソースプログラム１０１を最適化ソースプログラム１０２に変換するソースレベルオプティマイザ３と、最適化ソースプログラム１０２を機械語プログラム１０４に変換するコンパイラ５と、オリジナルソースプログラム１０１と機械語プログラム１０４との対応関係を示す最終デバッグ情報１１２を生成する最終デバッグ情報選択生成部５２とを備える。【選択図】図２
2011175673.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを用いて、機械語プログラムのデバッグを支援するデバッグシステムであって、
高級言語で記述された第１ソースプログラムを最適化した高級言語で記述された第２ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するプログラム実行手段と、
前記第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報、および前記第２ソースプログラムと前記機械語プログラムとの対応関係を示す第２デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第１デバッグ情報および前記第２デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するデバッグ支援手段とを
コンピュータにより実現することを特徴とするデバッグシステム。
【請求項２】
前記デバッグ支援手段は、前記第１デバッグ情報を選択する指示および前記第２デバッグ情報を選択する指示のいずれかの指示を受け、受け取った指示に基づいて、前記第１デバッグ情報および前記第２デバッグ情報のいずれかと前記プログラム実行手段における実行結果とに基づいて、前記機械語プログラムのユーザによるデバッグを支援する
ことを特徴とする請求項１に記載のデバッグシステム。
【請求項３】
前記指示は、前記デバッグシステム起動時に外部より与えられるオプション指示またはコマンドによる指示である
ことを特徴とする請求項２に記載のデバッグシステム。
【請求項４】
前記デバッグシステムは、さらに、前記第１ソースプログラムおよび前記第２ソースプログラムの両方またはいずれか一方と、前記機械語プログラムとを対応付けて表示させるプログラム表示制御手段を備える
ことを特徴とする請求項１〜３のいずれか１項に記載のデバッグシステム。
【請求項５】
前記プログラム表示制御手段は、前記デバッグシステム起動時に外部より与えられるオプション指示またはコマンドによる指示に基づいて、表示するプログラムを決定する
ことを特徴とする請求項４に記載のデバッグシステム。
【請求項６】
前記デバッグシステムは、さらに、
前記第１ソースプログラムに含まれる変換対象箇所の文と前記第２プログラムに含まれる当該変換対象箇所を最適化した後の変換箇所の文とを表示する変換箇所表示制御手段と、
前記変換対象箇所の文または前記変換箇所の文のいずれか一方の選択を受け付ける選択受け付け手段と、
前記選択受け付け手段で受け付けられた情報をプロファイル情報として生成するプロファイル情報生成手段とを備える
ことを特徴とする請求項１〜５のいずれか１項に記載のデバッグシステム。
【請求項７】
前記プロファイル情報生成手段は、前記変換対象箇所の文または前記変換箇所の文を前記プログラム実行手段で実行した際の実行サイクル数を、前記プロファイル情報にさらに含める
ことを特徴とする請求項６に記載のデバッグシステム。
【請求項８】
コンピュータを用いて、ソースプログラムから機械語プログラムを開発するプログラム開発システムであって、
ソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、
高級言語で記述された第１ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第１ソースプログラムを高級言語で記述された第２ソースプログラムに変換するソースプログラム変換手段と、
前記第２ソースプログラムを機械語プログラムに変換するコンパイル手段と、
前記第１ソースプログラムと前記第２ソースプログラムとの対応関係および前記第２ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報を生成するデバッグ情報生成手段とを備える
ことを特徴とするコンパイルシステムと、
請求項１に記載のデバッグシステムとをコンピュータにより実現し、
前記デバッグシステムは、さらに、前記プログラム実行手段にて前記機械語プログラムを実行した際の実行ログを出力する実行ログ出力手段を備え、
前記プログラム開発システムは、さらに、前記デバッグシステムから出力された前記実行ログを解析し、前記コンパイルシステムにおける最適化のためのヒントとなる情報であるプロファイル情報を出力するプロファイラ手段を備え、
前記コンパイルシステムの前記ソースプログラム変換手段は、前記プロファイル情報に基づいて、前記第１ソースプログラムの最適化を行なう
ことを特徴とするプログラム開発システム。
【請求項９】
コンピュータが、機械語プログラムのデバッグを支援するデバッグ支援方法であって、
高級言語で記述された第１ソースプログラムを最適化した高級言語で記述された第２ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するステップと、
前記第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報、および前記第２ソースプログラムと前記機械語プログラムとの対応関係を示す第２デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第１デバッグ情報および前記第２デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するステップとを含む
ことを特徴とするデバッグ支援方法。
【請求項１０】
コンピュータにより実現するソースプログラムから機械語プログラムを開発するプログラム開発方法であって、
ソースプログラムを機械語プログラムに翻訳するコンパイル方法であって、
高級言語で記述された第１ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第１ソースプログラムを高級言語で記述された第２ソースプログラムに変換するステップと、
前記第２ソースプログラムを機械語プログラムに変換するステップと、
前記第１ソースプログラムと前記第２ソースプログラムとの対応関係および前記第２ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報を生成するステップとを含む
ことを特徴とするコンパイル方法と、
請求項９に記載のデバッグ支援方法とを含み、
前記デバッグ支援方法は、さらに、前記機械語プログラムを実行した際の実行ログを出力するステップを含み、
前記プログラム開発システムは、さらに、前記実行ログを解析し、前記コンパイル方法における最適化のためのヒントとなる情報であるプロファイル情報を出力するステップを含み、
前記コンパイル方法の前記第１ソースプログラムを第２ソースプログラムに変換するステップは、前記プロファイル情報に基づいて、前記第１ソースプログラムの最適化を行なう
ことを特徴とするプログラム開発方法。
【請求項１１】
機械語プログラムのデバッグを支援する、プロセッサおよびメモリを備えるコンピュータが実行可能なプログラムであって、
プロセッサが、メモリに記憶されている高級言語で記述された第１ソースプログラムを最適化した高級言語で記述された第２ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するステップと、
プロセッサが、前記第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報、および前記第２ソースプログラムと前記機械語プログラムとの対応関係を示す第２デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第１デバッグ情報および前記第２デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するステップとをコンピュータに実行させる
ことを特徴とするプログラム。
【請求項１２】
ソースプログラムから機械語プログラムを開発する、プロセッサおよびメモリを備えるコンピュータが実行可能な開発プログラムであって、
プロセッサが、メモリに記憶されているソースプログラムを機械語プログラムに翻訳するプログラムであって、
プロセッサが、メモリに記憶されている高級言語で記述された第１ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第１ソースプログラムを高級言語で記述された第２ソースプログラムに変換するステップと、
プロセッサが、前記第２ソースプログラムを機械語プログラムに変換するステップと、
プロセッサが、前記第１ソースプログラムと前記第２ソースプログラムとの対応関係および前記第２ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報を生成するステップとをコンピュータに実行させる
ことを特徴とするプログラムと、
請求項１１に記載のプログラムとをコンピュータに実行させ、
請求項１１に記載のプログラムでは、さらに、プロセッサが、前記機械語プログラムを実行した際の実行ログを出力するステップをコンピュータに実行させ、
前記開発プログラムは、さらに、プロセッサが、前記実行ログを解析し、前記ソースプログラムを機械語プログラムに翻訳するプログラムをコンピュータに実行させる際の最適化のためのヒントとなる情報であるプロファイル情報を出力するステップをコンピュータに実行させ、
前記ソースプログラムを機械語プログラムに翻訳するプログラムにおいてコンピュータに実行させる前記第１ソースプログラムを第２ソースプログラムに変換するステップは、前記プロファイル情報に基づいて、前記第１ソースプログラムの最適化を行なう
ことを特徴とする開発プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語等の高級言語で記述されたソースプログラムをコンパイルシステムにより変換した機械語プログラムの検証を行うデバッグシステム、ならびにコンパイルシステムおよびデバッグシステムを含むプログラム開発システムに関する。
【背景技術】
【０００２】
従来、コンピュータ上で実行される機械語プログラムのプログラム開発システムとして、コンパイルシステムおよびデバッグシステムを含むシステムが提案されている。コンパイルシステムは、Ｃ言語等の高級言語で記述されたソースプログラムを機械語命令列に変換するプログラムをコンピュータ上実行することにより実現されるシステムである。デバッグシステムは、機械語プログラムを受け、当該機械語プログラムの実行時における動作の制御やデータの参照等を行って機械語プログラムの妥当性の検証を行うプログラムをコンピュータ上で実行することにより実現されるシステムである。
【０００３】
このようなプログラム開発システムでは、コンパイルシステムにてソースプログラムの行番号と機械語命令との対応関係や、ソースプログラム中のシンボル名と機械語データとの対応関係等を示すデバッグ情報を生成する。すなわち、デバッグ情報は、ソースプログラムと機械語プログラムとの対応関係を示している。また、デバッグシステムにてそのデバッグ情報を読み込んで活用することにより、ユーザがソースレベルの情報を指定してデバッグを行うことができる機能を実現している。
【０００４】
一方、近年、従来のコンパイルシステムにおける中間コードレベルより上位レベルでの最適化機能に対する要望や、秘匿性確保の要望等に応えるために、ソースプログラムを一旦別のソースプログラムに変換するソースプログラム変換・最適化方法が各種提案されている（例えば、特許文献１および２参照）。
【０００５】
ソースプログラム変換・最適化方法によって生成されたソースプログラムは、従来と同様のコンパイルシステムに入力されることにより、当該コンパイルシステムで機械語プログラムに変換される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特公平６−８０４９０号公報
【特許文献２】特開２００３−２８０７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記ソースプログラム変換・最適化方法を活用した場合に、従来のプログラム開発システムを利用すると、コンパイルシステムで生成するデバッグ情報は、ソースレベル変換後のソースプログラムに基づいたものとなる。このため、ユーザは、元々、自身が記述したソースプログラムに基づいたソースレベルのデバッグを行うことができない。これは、ソースプログラム変換・最適化方法を活用することによって、ソースプログラムの行番号がずれてしまったり、制御構造が変わってしまったり、関数名および変数名が変わってしまったりするためである。
【０００８】
このため、ユーザはソースプログラム変換・最適化方法によって自動生成されたソースプログラムに基づいてデバッグを行うか、生成された機械語プログラムの機械語命令レベルでデバッグを行うことを余儀なくされ、デバッグの効率が低下してしまう。
【０００９】
そのため、システムソフトウェアのユーザは、データの配置等を手動で試行錯誤する必要があり、多大な開発工数が必要であるという問題がある。
【００１０】
本発明は、上述の課題を解決するためになされたもので、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるデバッグシステムおよびプログラム開発システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明のある局面に係るデバッグシステムは、機械語プログラムのデバッグを支援するデバッグシステムであって、高級言語で記述された第１ソースプログラムを最適化した高級言語で記述された第２ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するプログラム実行手段と、前記第１ソースプログラムと前記第２ソースプログラムとの対応関係および前記第２ソースプログラムと前記機械語プログラムとの対応関係を参照することにより第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報、および前記第２ソースプログラムと前記機械語プログラムとの対応関係を示す第２デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第１デバッグ情報および前記第２デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するデバッグ支援手段とを備えることを特徴とする。
【００１２】
この構成によると、ユーザは、第１デバッグ情報に基づいて第１ソースプログラムに対するデバッグを行なうことができる。このため、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるデバッグシステムを提供することができる。
【００１３】
好ましくは、前記デバッグシステムは、さらに、前記第１ソースプログラムに含まれる変換対象箇所の文と前記第２プログラムに含まれる当該変換対象箇所を最適化した後の変換箇所の文とを表示する変換箇所表示制御手段と、前記変換対象箇所の文または前記変換箇所の文のいずれか一方の選択を受け付ける選択受け付け手段と、前記選択受け付け手段で受け付けられた情報をプロファイル情報として生成するプロファイル情報生成手段とを備えることを特徴とする。また、前記プロファイル情報生成手段は、前記変換対象箇所の文または前記変換箇所の文を前記プログラム実行手段で実行した際の実行サイクル数を、前記プロファイル情報にさらに含めることを特徴とする。
【００１４】
この構成によると、コンパイルシステムにおいて、変換対象箇所および変換箇所のうち実行サイクルの小さいものを選択して、コンパイルすることが可能になる。よって、実行サイクル数の小さな機械語プログラムを作成することができる。
【００１５】
本発明のさらに他の局面に係るプログラム開発システムは、ソースプログラムから機械語プログラムを開発するプログラム開発システムであって、ソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、高級言語で記述された第１ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第１ソースプログラムを高級言語で記述された第２ソースプログラムに変換するソースプログラム変換手段と、前記第２ソースプログラムを機械語プログラムに変換するコンパイル手段と、前記第１ソースプログラムと前記第２ソースプログラムとの対応関係および前記第２ソースプログラムと前記機械語プログラムとの対応関係を参照することにより前記第１ソースプログラムと前記機械語プログラムとの対応関係を示す第１デバッグ情報を生成するデバッグ情報生成手段とを備えることを特徴とするコンパイルシステムと、上述のデバッグシステムとを備え、前記デバッグシステムは、さらに、前記プログラム実行手段にて前記機械語プログラムを実行した際の実行ログを出力する実行ログ出力手段を備え、前記プログラム開発システムは、さらに、前記デバッグシステムから出力された前記実行ログを解析し、前記コンパイルシステムにおける最適化のためのヒントとなる情報であるプロファイル情報を出力するプロファイラ手段を備え、前記コンパイルシステムの前記ソースプログラム変換手段は、前記プロファイル情報に基づいて、前記第１ソースプログラムの最適化を行なうことを特徴とする。
【００１６】
この構成によると、プロファイル手段を介して、コンパイルシステムとデバッグシステムとが連結され、これらのシステムを自動的に何度も起動しながら徐々に機械語プログラムを更新していくことができる。このため、機械語プログラムの最適化を自動化することができ、ユーザの機械語プログラムのチューニングに要する工数を最小限に抑えつつ、最適な機械語プログラムを自動的に選択して決定していくことができる。よって、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるプログラム開発システムを提供することができる。
【００１７】
なお、本発明は、このような特徴的な手段を備えるデバッグシステムおよびプログラム開発システムとして実現することができるだけでなく、デバッグシステムおよびプログラム開発システムに含まれる特徴的な手段をステップとするデバッグ支援方法およびプログラム開発方法として実現したり、デバッグ支援方法およびプログラム開発方法に含まれる特徴的なステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【００１８】
本発明によると、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるデバッグシステムおよびプログラム開発システムを提供することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態に係るプログラム開発システムの構成を示すブロック図である。
【図２】本発明の実施の形態に係るコンパイルシステムの構成を示すブロック図である。
【図３】行番号維持変換部におけるプログラム変換例を示す図である。
【図４】行番号維持変換部における他のプログラム変換例を示す図である。
【図５】行番号維持変換部における他のプログラム変換例を示す図である。
【図６】行番号維持変換部における他のプログラム変換例を示す図である。
【図７】行番号テーブル情報の一例を模式的に示す図である。
【図８】シンボルテーブル情報の一例を示す図である。
【図９】ソース変換デバッグ情報生成出力部が出力するソース変換デバッグ情報の一例を示す図である。
【図１０】行調整部が解釈可能なプリプロセッサ指示文の一例を示した図である。
【図１１】行調整部が実行する処理のフローチャートである。
【図１２】行番号調整部が実行する処理のフローチャートである。
【図１３】本発明の実施の形態に係るデバッグシステムの構成を示すブロック図である。
【図１４】ソース変換情報表示部が表示したソース変換情報の一例を示す図である。
【図１５】デバッグ処理部によりデバッグ処理された結果の表示画面を示す図である。
【図１６】プロファイラ部が出力するプロファイル情報の一例を示す図である。
【図１７】プロファイル情報活用最適化部の処理内容を示すフローチャートである。
【図１８】変更行のみの集合を表現した行番号テーブル情報の一例を示す図である。
【図１９】一対一の対応関係の表構造を採用したシンボルテーブル情報の一例を示す図である。
【図２０】本発明の実施の形態に係るプログラム開発システムの他の構成を示すブロック図である。
【図２１】本発明の実施の形態に係るプログラム開発システムの他の構成を示すブロック図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照しながら本発明の実施の形態に係るプログラム開発システムについて説明する。
【００２１】
図１は、本発明の実施の形態に係るプログラム開発システムの構成を示すブロック図である。
【００２２】
プログラム開発システム１１は、入力されたＣ言語等の高級言語で記述されたソースプログラム（図示せず）から最終的に機械語プログラム１０４を生成するシステムであり、コンパイルシステム１とデバッグシステム６とを備えている。
【００２３】
コンパイルシステム１は、ソースプログラムおよびプロファイル情報１３１を読み込み、ソースプログラムを機械語プログラム１０４に変換するシステムである。コンパイルシステム１の詳細な構成については後述する。
【００２４】
デバッグシステム６は、機械語プログラム１０４を読み込み、機械語プログラム１０４のシミュレーションや情報表示を行って、機械語プログラム１０４およびソースプログラムの分析・デバッグを支援するシステムである。デバッグシステム６は、機械語プログラム１０４を実行することによりコンパイルシステム１における最適化のためのヒントとなる情報であるプロファイル情報１３１を出力する。デバッグシステム６の詳細については後述する。
【００２５】
図２は、本発明に係るプログラム開発システムの構成要素であるコンパイルシステム１の構成を示すブロック図である。
【００２６】
コンパイルシステム１は、ドライバ２と、ソースレベルオプティマイザ３と、プリプロセッサ４と、コンパイラ５とを備えている。コンパイルシステム１の各構成部は、コンピュータ（図示せず）上で実行されるプログラムとして実現される。
【００２７】
ソースレベルオプティマイザ３は、特許請求の範囲に示すソースプログラム変換手段の一例である。プリプロセッサ４は、特許請求の範囲に示すプリプロセッサ手段の一例である。コンパイラ５は、特許請求の範囲に示すコンパイル手段の一例である。
【００２８】
ドライバ２は、ユーザが指定したコンパイルオプションに従って、コンパイルシステム１の他の構成要素であるソースレベルオプティマイザ３、プリプロセッサ４およびコンパイラ５を必要に応じて適切なオプションで起動する機能を有する。
【００２９】
ソースレベルオプティマイザ３は、プロファイル情報１３１とユーザが記述したオリジナルソースプログラム１０１とを入力として受け、ソースレベルでの最適化処理を施し、最適化されたソースプログラムである最適化ソースプログラム１０２を出力する。ここで実施される最適化は、ベクトル化およびマルチスレッド化などの並列化、プロファイル情報活用最適化、ならびにファイル間最適化などである。ソースレベルオプティマイザ３は、プロファイル情報１３１を入力として受けることも可能であり、プロファイル情報１３１が入力された場合には、それを活用した最適化および変換を実施することができる。
【００３０】
プリプロセッサ４は、最適化ソースプログラム１０２を入力として受け、コンパイラ５でのコンパイル処理に先立って、Ｃ言語で記述された最適化ソースプログラム１０２に含まれる“＃ｄｅｆｉｎｅ”などのプリプロセッサ指示文を解釈し、解釈結果に基づく前処理を行ない、前処理後のソースプログラムであるプリプロセス後ソースプログラム１０３をコンパイラ５に渡す。
【００３１】
コンパイラ５は、入力されたプリプロセス後ソースプログラム１０３を中間言語で記述された内部中間表現に変換し、最適化を施した後、ターゲットプロセッサ向けの機械語プログラム１０４を生成する。
【００３２】
以下、コンパイルシステム１の各構成要素の詳細な構成とその動作について説明する。
【００３３】
ドライバ２は、ユーザ指定オプション処理部２１を備える。ユーザ指定オプション処理部２１は、コンパイルシステム１で生成される最終デバッグ情報１１２に関するユーザのオプション指示をコンパイラ５に伝達する。具体的には、ユーザのオプション指示には以下の３通りの指示が存在する。
（１）オリジナルソースプログラム１０１に基づくデバッグ情報を生成する指示
（２）最適化ソースプログラム１０２に基づくデバッグ情報を生成する指示
（３）オリジナルソースプログラム１０１に基づくデバッグ情報と最適化ソースプログラム１０２に基づくデバッグ情報との両方のデバッグ情報を生成する指示
【００３４】
３通りのオプション指示のうち、指示（１）は“−ｏｒｇｓｒｃｄｂｇ”オプション、指示（２）は“−ｏｐｔｓｒｃｄｂｇ”オプション、指示（３）は“−ｂｏｔｈｓｒｃｄｂｇ”オプションにそれぞれ対応する。
【００３５】
例えば、オリジナルソースプログラム１０１のファイル名が「ｔｅｓｔ．ｃ」であり、コンパイルシステム１を起動するためのコマンドが「ｃｃ」である場合に、コンパイルシステム１に対して指示（１）を行なう場合には、ユーザは、コマンドラインにおいて「ｃｃ  −ｏｒｇｓｒｃｄｂｇ  ｔｅｓｔ．ｃ」というコマンドを入力する。
【００３６】
ソースレベルオプティマイザ３は、行番号維持変換部３１と、ソース変換デバッグ情報生成出力部３２と、プロファイル情報活用最適化部３３とを備えている。
【００３７】
行番号維持変換部３１は、特許請求の範囲に示す行番号維持変換部の一例である。ソース変換デバッグ情報生成出力部３２は、特許請求の範囲に示すソース変換デバッグ情報生成部の一例である。
【００３８】
プロファイル情報活用最適化部３３は、入力されたプロファイル情報１３１を考慮した最適化を行う機能を有する。プロファイル情報活用最適化部３３の動作については後で述べる。
【００３９】
行番号維持変換部３１は、ソースレベルの最適化に伴う変換を実施しつつ、デバッグ性を維持するためにオリジナルソースプログラム１０１の各文の行番号が変換後の最適化ソースプログラム１０２においても変化しないように維持する機能を有する。
【００４０】
図３は、行番号維持変換部３１におけるプログラム変換例を示す図である。
【００４１】
行番号維持変換部３１は、図３（ａ）に示すようなオリジナルソースプログラム１０１に対して、図３（ｂ）に示すようにループをキャッシュメモリのライン単位のループに分割してプリフェッチ処理を挿入する最適化を実施する。その後、行番号維持変換部３１は、図３（ｃ）のように新たに生成された文の行を詰め、図３（ａ）のオリジナルソースプログラム１０１の各文の行番号を維持するような変換処理を行い、最適化ソースプログラム１０２を生成する。すなわち、行番号維持変換部３１は、変数ｓｕｍへの代入文の行番号が、オリジナルソースプログラム１０１と最適化ソースプログラム１０２とで同じ２行目となるような変換処理を行なう。
【００４２】
図４は、行番号維持変換部３１における他のプログラム変換例を示す図である。
【００４３】
行番号維持変換部３１は、図４（ａ）に示すようなオリジナルソースプログラム１０１に対して、図４（ｂ）に示すように最内ループ処理をベクトル化してベクトル命令ｖａｄｄで処理するように変換を実施する。その後、行番号維持変換部３１は、図４（ｃ）に示すように変換処理において削減された行に対して空行を挿入し、図４（ａ）のオリジナルソースプログラム１０１の各文の行番号を維持するような変換処理を行い、最適化ソースプログラム１０２を生成する。すなわち、行番号維持変換部３１は、オリジナルソースプログラム１０１における２行目と４行目とを空行で埋めることにより、オリジナルソースプログラム１０１と最適化ソースプログラム１０２との行番号の維持を行なっている。
【００４４】
ソース変換デバッグ情報生成出力部３２は、オリジナルソースプログラム１０１のソースレベル変換に伴って、オリジナルソースプログラム１０１と最適化ソースプログラム１０２との間で、行番号に変更が生じた場合や、関数名や変数名などのシンボル名に変更が生じた場合に、それぞれ行番号テーブル情報１２１およびシンボルテーブル情報１２２をソース変換デバッグ情報１１１として出力する機能を有する。
【００４５】
図５は、行番号維持変換部３１における他のプログラム変換例を示す図である。
【００４６】
図５（ａ）は、ソースレベルオプティマイザ３による最適化前のオリジナルソースプログラム１０１を示しており、１０４行目が空行である。ソースレベルオプティマイザ３による最適化が行なわれ、１０５行目の直前にプラグマ指令「＃ｐｒａｇｍａ  ＊＊＊」が挿入されることになった場合には、空行である１０４行目に当該プラグマ指令が挿入され、図５（ｂ）に示すような最適化ソースプログラム１０２が生成される。このような処理により、オリジナルソースプログラム１０１と最適化ソースプログラム１０２との行番号が維持される。
【００４７】
図６は、行番号維持変換部３１における他のプログラム変換例を示す図である。
【００４８】
図６（ａ）は、ソースレベルオプティマイザ３による最適化前のオリジナルソースプログラム１０１を示している。ソースレベルオプティマイザ３による最適化が行なわれ、１０４行目の直前にプラグマ指令「＃ｐｒａｇｍａ  ＊＊＊」が挿入されることになった場合には、行番号維持変換部３１は、オリジナルソースプログラム１０１の１０３行目の「｝」を１０２行目に移動させ、１０３行目にプラグマ指令「＃ｐｒａｇｍａ  ＊＊＊」を挿入することにより、図６（ｂ）に示すような最適化ソースプログラム１０２を生成する。このような処理により、オリジナルソースプログラム１０１と最適化ソースプログラム１０２との行番号が維持される。
【００４９】
図７は、行番号テーブル情報１２１の一例を模式的に示す図である。図７（ａ）はソースレベル変換に伴う行番号の変化の一例を示した図である。すなわち、行番号テーブル情報１２１には、変換前のプログラムであるオリジナルソースプログラム１０１は７行のプログラムであり、変換後の最適化ソースプログラム１０２は１０行のプログラムであることが示されている。また、行番号テーブル情報１２１では、ソースレベル変換により、オリジナルソースプログラム１０１の２行目が削除されていることが示されている。また、オリジナルソースプログラム１０１の４行目および５行目が最適化ソースプログラム１０２では３行目から７行目に変更されていることが示されている。さらに、オリジナルソースプログラム１０１にはなかった文が最適化ソースプログラム１０２の１０行目に追加されていることが示されている。
【００５０】
図７（ｂ）は、図７（ａ）に示した行番号テーブル情報１２１と同様の内容を示した行番号テーブル情報１２１である。左欄はオリジナルソースプログラム１０１の行番号を示し、右欄は最適化ソースプログラム１０２の行番号を示している。行番号テーブル情報１２１において、“−”となっている部分は、対応する行が存在しないことを示し、“３−７”の部分は、３行目から７行目という意味で、ソース行の範囲を示している。例えば、オリジナルソースプログラム１０１における４行目から５行目までが、最適化ソースプログラム１０２における３行目から７行目に対応することが示されている。
【００５１】
このように、ソース変換デバッグ情報生成出力部３２では、ソースレベル変換前後で行番号が変更される部分について、それぞれの部分の対応関係を表にまとめる。ただし、後述するプリプロセッサ４およびコンパイラ５にて行番号調整される項目に関しては、ソース変換デバッグ情報１１１がなくても行番号の調整が実施されるので、ここではそれを考慮した上で必要な情報を生成する。
【００５２】
図８は、シンボルテーブル情報１２２の一例を示す図である。ソース変換デバッグ情報生成出力部３２では、ソースレベル変換前後で変数名および関数名が変わるもの、複数の関数および変数に分割されるもの、複数の関数および変数が統合されるものについて、それぞれのシンボルの対応関係を表にまとめる。図８に示されるように、シンボルによっては変換前のシンボルが変換後の複数のシンボルに対応する場合もあり、その場合はそれらすべてを表に保持することになる。図８の行番号テーブル情報１２１では、オリジナルソースプログラム１０１におけるシンボル名が変換前シンボル名として示されており、最適化ソースプログラム１０２におけるシンボル名が変換後シンボル名として示されている。たとえば、シンボルテーブル情報１２２は、オリジナルソースプログラム１０１におけるシンボル名ａが、最適化ソースプログラム１０２ではシンボル名ａ１およびａ２に変換されていることが示されている。
【００５３】
ソース変換デバッグ情報生成出力部３２は、さらに、コンパイラ５における最適化を支援するための最適化支援情報１２３もソース変換デバッグ情報１１１として生成する。具体的には、ソースレベルオプティマイザ３でのソースプログラムの各変換部分に対する変換前後または変換候補の対応関係の組み合わせと、各ソースプログラム部分の実行サイクル数を生成する。後者の実行サイクル数については、プロファイル情報１３１にて指定された場合にのみ値が設定され、それ以外の場合には“０”が設定される。ここで、変換後のソースプログラムの変換部分に関する情報には必ずしも１つに限定される必要はなく、複数の変換候補パターンについてソースプログラムの情報およびサイクル数を出力することができる。
【００５４】
図９は、ソース変換デバッグ情報生成出力部３２が出力するソース変換デバッグ情報１１１の一例を示す図である。
【００５５】
ソース変換デバッグ情報１１１は、上記行番号テーブル情報１２１、シンボルテーブル情報１２２および最適化支援情報１２３を示すテキスト情報であり、出力ファイルである最適化ソースプログラム１０２の末尾にコメントとして出力される。
【００５６】
すなわち、ｍａｉｎ関数の部分が最適化ソースプログラム１０２に相当する。また、「／＊」および「＊／」で囲まれたコメント文のうち、タグ＜ＤｅｂｕｇＩｎｆｏ＞およびタグ＜／ＤｅｂｕｇＩｎｆｏ＞で囲まれた部分がソース変換デバッグ情報１１１を示している。また、タグ＜ＬｉｎｅＩｎｆｏ＞およびタグ＜／ＬｉｎｅＩｎｆｏ＞で囲まれた部分が行番号テーブル情報１２１を示している。さらに、タグ＜ＳｙｍｂｏｌＩｎｆｏ＞およびタグ＜／ＳｙｍｂｏｌＩｎｆｏ＞で囲まれた部分がシンボルテーブル情報１２２を示している。さらにまた、タグ＜ＴｒａｎｓＩｎｆｏ＞およびタグ＜／ＴｒａｎｓＩｎｆｏ＞で囲まれた部分が最適化支援情報１２３を示している。
【００５７】
行番号テーブル情報１２１は、ここでは、タグ＜ｂｌｏｃｋ＞およびタグ＜／ｂｌｏｃｋ＞で囲まれた３行よりなり、１行目は、オリジナルソースプログラム１０１の７行目が最適化ソースプログラム１０２では削除されていることを示している。２行目は、オリジナルソースプログラム１０１の８〜９行目が最適化ソースプログラム１０２の７〜１１行目に変更されていることを示している。３行目は、オリジナルソースプログラム１０１にはなかった文が最適化ソースプログラム１０２の１２行目に追加されていることを示している。
【００５８】
シンボルテーブル情報１２２は、ここでは、タグ＜ｓｙｍｂｏｌ＞およびタグ＜／ｓｙｍｂｏｌ＞で囲まれた１行よりなり、オリジナルソースプログラム１０１のシンボルａが最適化ソースプログラム１０２ではシンボルａ１，ａ２およびａ３に対応することが示されている。
【００５９】
最適化支援情報１２３のうち、タグ＜Ｆｉｌｅ＞およびタグ＜／Ｆｉｌｅ＞で囲まれた部分に示された文字列「ｔｅｓｔ．ｃ」は、コンパイル対象となっているオリジナルソースプログラム１０１のファイル名を示している。タグ＜Ｌｉｎｅ＞およびタグ＜／Ｌｉｎｅ＞囲まれた部分に示されている値「２３」は、オリジナルソースプログラム１０１の変換部分の先頭の行番号を示している。タグ＜Ｐａｔｔｅｒｎ＞およびタグ＜／Ｐａｔｔｅｒｎ＞で囲まれた部分がソースレベルオプティマイザ３による変換後の変換パターンを示しており、ここでは２種類の変換パターンが示されている。それぞれの変換パターンには識別子が付されており、タグ＜ＩＤ＞およびタグ＜／ＩＤ＞でそれぞれ囲まれた部分である。すなわち、識別子として、「１」および「２」という番号が付されている。また、各変換パターンはタグ＜Ｃｏｄｅ＞およびタグ＜／Ｃｏｄｅ＞で囲まれた部分である。それぞれの変換パターンを機械語命令に置き換えて実行した際のサイクル数がタグ＜ｃｙｃｌｅ＞およびタグ＜／ｃｙｃｌｅ＞で囲まれた部分に示されており、識別子「１」の変換パターンの実行サイクル数として０が設定されている。これは、上述したように、プロファイル情報１３１による実行サイクル数の指定がないことを示している。一方、識別子「２」の変換パターンの実行サイクル数として１５００が設定されている。これは、識別子「２」の変換パターンの実行サイクル数が１５００サイクルであることを示している。また、識別子「２」の変換パターンがユーザによって選択されていることが「＜ＵｓｅｒＳｅｌｅｃｔ＞Ｔｒｕｅ＜／ＵｓｅｒＳｅｌｅｃｔ＞」により示されている。
【００６０】
次に、図２に示したプリプロセッサ４について説明する。プリプロセッサ４は、行調整部４１を備えている。行調整部４１は、特許請求の範囲に示す指示分削除手段の一例である。
【００６１】
従来のプリプロセッサによる処理では、プリプロセッサ指示文を解釈してそれに応じた処理を行い、当該プリプロセッサ指示行は空行として出力し、オリジナルソースプログラムの各文の行番号は維持される。例えば、従来のプリプロセッサは、“＃ｄｅｆｉｎｅ  Ａ  Ｂ”というプリプロセッサ指示文を受け付けると、ソースプログラム中のＡをすべてＢに置換し、当該プリプロセッサ指示文の存在した行は空行として出力する。
【００６２】
本発明に係るプリプロセッサ４の行調整部４１は、最適化ソースプログラム１０２を入力して、ソースレベルオプティマイザ３にて挿入された“＃ｐｒａｇｍａ”などのプリプロセッサ指示を認識し、当該指示文に対応する処理を施した後、ソースレベルオプティマイザ３にて挿入されたプリプロセッサ指示文についてはその行自体を削除する。これによって、ソースレベルオプティマイザ３によるプリプロセッサ指示行挿入によって生じたオリジナルソースプログラム１０１と最適化ソースプログラム１０２との行番号のずれが解消され、当該部分についてはオリジナルソースプログラム１０１とプリプロセス後ソースプログラム１０３との行番号の対応が確保される。
【００６３】
図１０は、行調整部４１が解釈可能なプリプロセッサ指示文の一例を示した図である。行調整部４１は、本図に示すようなプリプロセッサ指示文の一種であるプラグマ指示をリストとして保持しており、このリストに登録されているプリプロセッサ指示文に対して上述した処理を行なう。
【００６４】
図１１は、行調整部４１が実行する処理のフローチャートである。行調整部４１は、最適化ソースプログラム１０２に含まれるプリプロセッサ指示文に基づいて、当該文で示されている指示による処理を実行する（Ｓ１２）。次に、行調整部４１は、処理を実行したプリプロセッサ指示文が図１０に示すようなリストに登録されているか否かを判断する（Ｓ１４）。プリプロセッサ指示文がリストに登録されている場合には（Ｓ１４でＹＥＳ）、行調整部４１は、当該プリプロセッサ指示文が記述されている行を最適化ソースプログラム１０２より削除する（Ｓ１６）。プリプロセッサ指示文がリストに登録されていない場合には（Ｓ１４でＮＯ）、行調整部４１は、当該プリプロセッサ指示文が記述されている行を空行に変換する（Ｓ１８）。以上のような処理を行なうことにより、プリプロセッサ４は、最適化ソースプログラム１０２をプリプロセス後ソースプログラム１０３に変換する。
【００６５】
次に、図２に示したコンパイラ５について説明する。コンパイラ５は、行番号調整部５１と、最終デバッグ情報選択生成部５２とを備えている。行番号調整部５１は、特許請求の範囲に示す行番号情報生成部の一例である。最終デバッグ情報選択生成部５２は、特許請求の範囲に示すデバッグ情報生成手段およびデバッグ情報出力手段の一例である。
【００６６】
コンパイラ５は、プリプロセス後ソースプログラム１０３を入力として受け、通常内部の行番号カウンタをインクリメントしながら一行ずつ字句解析および構文解析しながら、各文を解釈し、最終デバッグ情報１１２の一部である行番号情報を生成するために、各文と行番号との対応付けを行う。
【００６７】
行番号調整部５１は、プリプロセス後ソースプログラム１０３の中の、ソースレベルオプティマイザ３にて挿入された“＃ｐｒａｇｍａ”などのコンパイル指示を認識し、当該指示に対応する処理を施したあと、ソースレベルオプティマイザ３で挿入されたコンパイル指示に基づく処理した際には、内部の行番号カウンタをデクリメントする。このようにして、行番号調整部５１は、ソースレベルオプティマイザ３にて挿入されたコンパイル指示を無視した行番号情報を生成する。これによって、ソースレベルオプティマイザ３によるコンパイル指示行挿入によって生じたオリジナルソースプログラム１０１とプリプロセス後ソースプログラム１０３との行番号のずれをコンパイラ５内部で吸収し、当該部分についてはオリジナルソースプログラム１０１とコンパイラ５内部の文と行番号の対応関係についての整合性が確保される。
【００６８】
なお、行番号調整部５１が解釈可能なコンパイル指示の一例は、プリプロセッサ４の行調整部４１が解釈可能なプリプロセッサ指示と同様である。すなわち、行番号調整部５１は、図１０に示した行調整部４１が解釈可能なプリプロセッサ指示のリストと同様のリストを保持している。
【００６９】
図１２は、行番号調整部５１が実行する処理のフローチャートである。行番号調整部５１は、プリプロセス後ソースプログラム１０３に含まれるコンパイル指示に基づく処理を実行する（Ｓ２２）。行番号調整部５１は、当該コンパイル指示が上述のリストに登録されているか否かを調べる（Ｓ２４）。コンパイル指示がリストに登録されている場合には（Ｓ２４でＹＥＳ）、行番号調整部５１は、上述したように内部の行番号カウンタをデクリメントすることにより、行番号の調整処理を行なう（Ｓ２６）。すなわち、コンパイル指示行を除いて行番号をカウントするような調整処理を行なう。
【００７０】
最終デバッグ情報選択生成部５２は、ドライバ２から伝達されたユーザが指定したコンパイルオプションの指示にしたがって、以下のいずれかの情報を最終デバッグ情報１１２として機械語プログラム１０４中に含めて出力する。
（１）オリジナルソースプログラム１０１に基づくデバッグ情報
（２）最適化ソースプログラム１０２に基づくデバッグ情報
（３）オリジナルソースプログラム１０１に基づくデバッグ情報と最適化ソースプログラム１０２に基づくデバッグ情報との両方のデバッグ情報
【００７１】
特に、オリジナルソースプログラム１０１に基づくデバッグ情報が必要な場合には（（１）および（２）の場合）、最終デバッグ情報選択生成部５２は、プリプロセス後ソースプログラム１０３とソース変換デバッグ情報１１１から必要な情報（例えば、機械語命令とソースコードとの行およびシンボルの対応関係）を生成する。具体的には、最終デバッグ情報選択生成部５２は、行番号テーブル情報１２１に基づいてオリジナルソースプログラム１０１の行情報を生成し、シンボルテーブル情報１２２に基づいてオリジナルソースプログラム１０１のシンボル情報を生成し、最終デバッグ情報１１２に含めて出力する。さらに、最終デバッグ情報選択生成部５２は、最適化支援情報１２３についても最終デバッグ情報１１２に含めて出力する。
【００７２】
コンパイルシステム１が以上のような構成をとることにより、ソースレベルオプティマイザ３を採用した場合でも、オリジナルソースプログラム１０１に基づいたデバッグ情報（最終デバッグ情報１１２）を生成することができる。これに伴い、ユーザは、オリジナルソースプログラム１０１に基づいたソースレベルデバッグが可能となる。また、ソースレベルオプティマイザ３による行番号維持変換処理や、プリプロセッサ４やコンパイラ５による行調整処理などの複数の処理を組み合わせて活用することにより、ソース変換デバッグ情報１１１など、従来のコンパイルシステムにはない追加情報の情報量を極力削減することが可能となる。
【００７３】
図１３は、本発明に係るプログラム開発システム１１の構成要素であるデバッグシステム６の構成を示すブロック図である。
【００７４】
デバッグシステム６は、コンパイルシステム１で生成された機械語プログラム１０４を入力として受け、ユーザとのインタラクティブなインタフェースによってプログラムのシミュレーションや情報表示を行って、プログラムの分析・デバッグを支援する開発ツールであり、シミュレータ部７と、デバッグ処理部８と、ＧＵＩ（Graphical User Interface）処理部９と、プロファイラ部１０とを備える。
【００７５】
シミュレータ部７は、特許請求の範囲に示すプログラム実行手段および実行ログ出力手段の一例である。デバッグ処理部８は、特許請求の範囲に示すデバッグ支援手段の一例である。ＧＵＩ処理部９は、特許請求の範囲に示すプログラム表示制御手段の一例である。プロファイラ部１０は、特許請求の範囲に示すプロファイル情報生成手段およびプロファイラ手段の一例である。
【００７６】
シミュレータ部７は、機械語プログラム１０４中の機械語命令を解釈し、ターゲットプロセッサでの動作をシミュレートする機能を有する。さらに、シミュレータ部７は、実行時の制御フローやサイクル数を含めた実行ログ情報１３２を出力する機能を有する。
【００７７】
デバッグ処理部８は、機械語プログラム１０４内の最終デバッグ情報１１２を参照して、ユーザからの指示に従ってシミュレータ部７でのシミュレーションを制御したり、ＧＵＩ処理部９にて必要な情報を表示するような制御をしたりする機能を有しており、デバッグ情報選択部８１を備える。
【００７８】
デバッグ情報選択部８１は、ユーザのオプション指定またはコマンド指示に従って、オリジナルソースプログラム１０１に基づくソースレベルデバッグ機能を提供するのか、最適化ソースプログラム１０２に基づくソースレベルデバッグ機能を提供するのかを選択する。具体的には、デバッグシステム６起動時に“−ｏｒｇｓｒｃ”オプションが指定された場合または“ｏｒｇｓｒｃ”コマンド指示が与えられた場合には、機械語プログラム１０４内の最終デバッグ情報１１２のうち、オリジナルソースプログラム１０１に基づくデバッグ情報を選択して参照し、そのデバッグ情報に基づいてデバッグ機能を提供する。また、“−ｏｐｔｓｒｃ”オプションが指定された場合または“ｏｐｔｓｒｃ”コマンド指示が与えられた場合には、機械語プログラム１０４内の最終デバッグ情報１１２のうち、最適化ソースプログラム１０２に基づくデバッグ情報を選択して参照し、そのデバッグ情報に基づいてデバッグ機能を提供する。
【００７９】
例えば、機械語プログラム１０４のファイル名が「ｔｅｓｔ．ｏｕｔ」であり、デバッグシステム６を起動するためのコマンドが「ｄｅｂｕｇ」である場合には、“−ｏｒｇｓｒｃ”オプションの指定は、ユーザがコマンドライン上で「ｄｅｂｕｇ  −ｏｒｇｓｒｃ  ｔｅｓｔ．ｏｕｔ」と入力することにより行なわれる。
【００８０】
ＧＵＩ処理部９は、グラフィカルなユーザインタフェースを提供する部分であり、ユーザの指示を受け付ける機能や、プログラムに関する情報を表示する機能を有しており、ソース変換情報表示部９１を備える。ソース変換情報表示部９１は、特許請求の範囲に示す変換箇所表示制御手段および選択受け付け手段の一例である。
【００８１】
ソース変換情報表示部９１は、ソースレベルオプティマイザ３による最適化前後のソース部分の情報を表示する機能を有する。具体的には、ソース変換情報表示部９１は、最終デバッグ情報１１２を参照し、当該部分に該当するオリジナルソースプログラム１０１中および最適化ソースプログラム１０２中のソース部分を検出するかまたは最適化支援情報１２３から当該ソース部分の情報を抽出し、ユーザ指示に基づいていずれかのソース部分もしくは両方のソース部分を表示する。さらに、ソース変換情報表示部９１は、各ソース部分についての実行サイクル数やユーザによる選択状況も表示することが可能である。実行サイクル数については、コンパイルシステム１に後述するプロファイル情報１３１が入力された場合にのみ、最終デバッグ情報１１２から有効な値を抽出することが可能である。
【００８２】
図１４は、ソース変換情報表示部９１が表示するソース変換情報の表示画面の一例を示す図である。表示画面２００には、ソースプログラムウィンドウ２０２と、１つめの変換パターンを示すポップアップウィンドウ２０４と、２つめの変換パターンを示すポップアップウィンドウ２０６とが表示されている。ソースプログラムウィンドウ２０２は、オリジナルソースプログラム１０１を表示するためのウィンドウである。ポップアップウィンドウ２０４は、オリジナルソースプログラム１０１のうち、ソースレベルオプティマイザ３による変換前の部分を表示するためのウィンドウである。ポップアップウィンドウ２０６は、最適化ソースプログラム１０２のうち、ポップアップウィンドウ２０４に表示された部分に対応するソースレベルオプティマイザ３による変換後の部分を表示するためのウィンドウである。
【００８３】
なお、ポップアップウィンドウ２０４およびポップアップウィンドウ２０６に表示されているソースレベルオプティマイザ３による変換前後のプログラムには、それを実行した際の実行サイクル数と、ユーザによりいずれの変換パターンが選択されているかが示されている。すなわち、ポップアップウィンドウ２０４には、「ｃｙｃｌｅ：−」および「ｓｅｌｅｃｔ：ｆａｌｓｅ」と記述されていることにより、実行サイクル数が未定であり、かつユーザによる選択がなされていないことが示されている。一方、ポップアップウィンドウ２０６には、「ｃｙｃｌｅ：１５００」および「ｓｅｌｅｃｔ：ｔｒｕｅ」と記述されていることより、実行サイクル数が１５００サイクルであり、ユーザによりこの変換パターンが選択されていることが示されている。
【００８４】
この表示により、ユーザはソースレベルオプティマイザ３による変換の候補を知ることができるとともに、場合によっては実行サイクル数も知ることができ、いずれのソースとするのが望ましいかを選択することが可能となる。
【００８５】
ユーザはＧＵＩ処理部９を通じて上記変換パターンの候補のうちのいずれを選択するかを指定することができる。すなわち、表示画面２００には、ユーザに２通りの変換パターンのうちのいずれかを選択される旨のメッセージ「いずれを選択しますか？」が表示されており、３通りのボタン２０８〜２１２が表示されている。ユーザがマウス等を利用してボタン２０８を押下すると、ポップアップウィンドウ２０４に示された１番目の変換パターンが選択され、ボタン２１０を押下すると、ポップアップウィンドウ２０６に示された２番目の変換パターンが選択される。また、ボタン２１２を押下すると、ユーザがいずれの変換パターンの選択をも行なわないこととなる。このため、変換パターンの選択が行なわれない場合には、コンパイラ５において、例えば、サイクル数の最も小さい変換パターンが選択され、機械語プログラム１０４が生成されることとなる。
【００８６】
変換パターンの選択結果は、プロファイラ部１０に出力される。プロファイラ部１０は、最終的にユーザの選択をプロファイル情報１３１として出力することができる。なお、プロファイル情報１３１の詳細については後述する。
【００８７】
図１５は、デバッグ処理部８によりデバッグ処理された結果の表示画面であり、ＧＵＩ処理部９により表示される。デバッグ表示画面３００は、アセンブラプログラム表示ウィンドウ３０２と、変換前ソースプログラム表示ウィンドウ３０４と、変換後ソースプログラム表示ウィンドウ３０６と、コマンド入出力ウィンドウ３０８とを含む。
【００８８】
変換前ソースプログラム表示ウィンドウ３０４には、オリジナルソースプログラム１０１が表示される。なお、オリジナルソースプログラム１０１の行数も同時に表示される。
【００８９】
変換後ソースプログラム表示ウィンドウ３０６には、最適化ソースプログラム１０２が表示される。なお、最適化ソースプログラム１０２の行数も同時に表示される。
【００９０】
アセンブラプログラム表示ウィンドウ３０２には、最適化ソースプログラム１０２をコンパイルした後のアセンブラプログラムが表示される。なお、アセンブラプログラムの行数またはラベルも同時に表示される。
【００９１】
コマンド入出力ウィンドウ３０８は、デバッグ処理部８におけるデバッグの結果を表示したり、デバッグを行なう際のコマンドを入力したりするためのウィンドウである。
【００９２】
デバッグ表示画面３００は、アセンブラプログラム表示ウィンドウ３０２に表示されたアセンブラプログラムに対応する機械語プログラムをシミュレータ部７にて実行した際の結果を示している。例えば、コマンド入出力ウィンドウ３０８に示されるように、オリジナルソースプログラム１０１の２７行目において、本来正の値を取らなければならないループカウンタｉの値が「−１」になっており、エラーであることが表示されている。なお、エラーを引き起こした箇所がアセンブラプログラム表示ウィンドウ３０２、変換前ソースプログラム表示ウィンドウ３０４および変換後ソースプログラム表示ウィンドウ３０６において、ハイライト表示されている。ユーザは、コマンド入出力ウィンドウ３０８にデバッグのための命令を入力したり、各変数に値を代入したりすることにより、アセンブラプログラム、オリジナルソースプログラム１０１および最適化ソースプログラム１０２のエラー箇所を対応付けて表示することができる。
【００９３】
プロファイラ部１０は、シミュレータ部７から受け取った実行ログ情報１３２を解析し、ソースレベルオプティマイザ３での各ソース変換部分に関するサイクル数を計測して、最終デバッグ情報１１２に含まれているソース部分に対応づけてサイクル数を設定し、コンパイルシステム１における最適化のヒントとなるプロファイル情報１３１として出力する。さらに、ＧＵＩ処理部９を通じてユーザがソース変換候補のいずれかを選択した場合には、その選択情報もプロファイル情報１３１として出力する。
【００９４】
図１６は、プロファイラ部１０が出力するプロファイル情報１３１の一例を示す図である。
【００９５】
プロファイル情報１３１は、タグ＜ＰｒｏｆｉｌｅＩｎｆｏ＞およびタグ＜／ＰｒｏｆｉｌｅＩｎｆｏ＞で囲まれた部分である。なお、タグ＜ＴｒａｎｓＩｎｆｏ＞およびタグ＜／ＴｒａｎｓＩｎｆｏ＞で囲まれた部分がコンパイル時における最適化時の支援情報となる最適化支援情報を示している。プロファイル情報１３１は、ソース変換デバッグ情報１１１内の最適化支援情報１２３に対応した各変換パターンに対応して、プロファイラ部１０での実行ログ分析に基づく実行サイクル数の値が設定されている。また、ＧＵＩ処理部９を通してユーザによって変換パターンが選択されているか否かを示す“ｔｒｕｅ”もしくは“ｆａｌｓｅ”の選択状態の値が設定されている。図１６に示されている最適化支援情報は、図９に示した最適化支援情報１２３と同様である。このため、その詳細な説明はここでは繰り返さない。
【００９６】
プロファイル情報１３１は、コンパイルシステム１のソースレベルオプティマイザ３に含まれるプロファイル情報活用最適化部３３において活用されることになる。
【００９７】
図１７は、プロファイル情報活用最適化部３３の処理内容を示すフローチャートである。
【００９８】
プロファイル情報活用最適化部３３は、プロファイル情報１３１を参照し、各ソース変換部分（タグ＜ＴｒａｎｓＩｎｆｏ＞およびタグ＜／ＴｒａｎｓＩｎｆｏ＞で囲まれた部分）について、ユーザによっていずれかの候補パターンを選択する旨の情報が設定されているかどうかを判定する（Ｓ１）。すなわち、プロファイル情報活用最適化部３３は、タグ＜ＵｓｅｒＳｅｌｅｃｔ＞およびタグ＜／ＵｓｅｒＳｅｌｅｃｔ＞で囲まれた部分がＴｒｕｅになっている候補パターンがあるか否かを判断する。
【００９９】
候補パターンを選択する旨の設定がされていた場合には（Ｓ１でＹＥＳ）、プロファイル情報活用最適化部３３は、ユーザによる選択指示に従って、コンパイル対象とする候補パターンを決定する（Ｓ２）。
【０１００】
候補パターンを選択する旨の設定がされていない場合には（Ｓ１でＮＯ）、プロファイル情報活用最適化部３３は、すべての変換候補に対してサイクル数が設定済みであるかどうかを判定する（Ｓ３）。すなわち、すべての変換候補について、タグ＜ｃｙｃｌｅ＞およびタグ＜／ｃｙｃｌｅ＞で囲まれた部分に０以外の値が設定されているか否かを判定する。
【０１０１】
すべての変換候補に対してサイクル数が設定済みであった場合には（Ｓ３でＹＥＳ）、プロファイル情報活用最適化部３３は、変換候補パターンの中から最もサイクル数が少ないパターンを、コンパイル対象とする候補パターンとして選択する（Ｓ４）。
【０１０２】
サイクル数が未設定の変換候補パターンがある場合には（Ｓ３でＮＯ）、サイクル数を設定するためのシミュレーションをデバッグシステム６のシミュレータ部７で行なわせるために、プロファイル情報活用最適化部３３は、サイクル数が未設定の変換候補パターンのうちのいずれかを任意に選択する（Ｓ５）。選択された変換候補パターンは、コンパイル対象とされる。
【０１０３】
図１６に示した例では、２番目の変換候補パターン１３１ｂがユーザにより選択されている。したがって、変換候補パターン１３１ｂがコンパイル対象とされる。
【０１０４】
本実施の形態によると、プログラム開発システム１１では、機械語プログラム１０４とプロファイル情報１３１とを介してコンパイルシステム１とデバッグシステム６とを自動的に何度も起動しながら、徐々に機械語プログラム１０４を更新していくことができる。具体的には、ソースレベルオプティマイザ３で実施するソースレベル変換の複数の変換候補に対して、最もサイクル数が小さくなるパターンを自動的に選択して決定していくことができる。
【０１０５】
このようにプログラム開発システム１１では、ユーザのチューニングに要する工数を最小限に抑えつつ、最適なコードを生成することができる。
【０１０６】
また、コンパイルシステム１においてソースレベルオプティマイザ３を採用した場合でも、オリジナルソースプログラム１０１に基づいたデバッグ情報（最終デバッグ情報１１２）を生成することができる。これに伴い、ユーザは、オリジナルソースプログラム１０１に基づいたソースレベルデバッグが可能となる。また、ソースレベルオプティマイザ３による行番号維持変換処理や、プリプロセッサ４やコンパイラ５による行調整処理などの複数の処理を組み合わせて活用することにより、ソース変換デバッグ情報１１１など、従来のコンパイルシステムにはない追加情報の情報量を極力削減することが可能となる。
【０１０７】
以上、本発明に係るプログラム開発システムおよびその構成要素について、実施の形態に基づいて説明したが、本発明はこれらの実施形態に限られない。即ち、以下のような変形が考えられる。
【０１０８】
（１）上記実施の形態では、Ｃ言語の言語仕様およびプリプロセッサ指示仕様を想定していたが、本発明はＣ言語のみに限定されるものではなく、他のプログラミング言語を採用した場合でも本発明の有意性は保たれる。
【０１０９】
（２）上記実施の形態では、行番号テーブル情報１２１として、変換前後の行番号の対応関係を表構造で表しているが、本発明はこの情報仕様に限定されるものではない。例えば、行番号の変更ポイント（変更行）のみの集合を表現するといった仕様であったとしても本発明の有意性は保たれる。図１８は、変更行のみの集合を表現した行番号テーブル情報の一例を示す図である。同図に示す行番号テーブル情報は、図７（ａ）に示した行番号テーブル情報１２１と同様の内容を示している。すなわち、変換前のプログラムであるオリジナルソースプログラム１０１の３行目から始まる行が変換後のプログラムである最適化ソースプログラム１０２の２行目から始まる行に対応することが示されている。また、オリジナルソースプログラム１０１の６行目から始まる行が最適化ソースプログラム１０２の８行目から始まる行に対応することも示されている。
【０１１０】
（３）上記実施の形態では、シンボルテーブル情報１２２として、変更したシンボルの一対多の対応関係の表構造を採用しているが、本発明はこの情報仕様に限定されるものではない。例えば、複数シンボルに分割される場合は最終参照を採用する等のデバッグ仕様に基づいた一定のルールにしたがって一対一の対応関係の表構造を採用したとしても本発明の有意性は保たれる。図１９は、一対一の対応関係の表構造を採用したシンボルテーブル情報の一例を示す図である。図１９に示すシンボルテーブル情報は、図８に示したシンボルテーブル情報１２２と同様の内容を示す。ただし、図１９に示すシンボルテーブル情報では、変換後のシンボル名が複数存在する場合には、最後に参照されるシンボル名のみを示している。例えば、オリジナルソースプログラム１０１におけるシンボル名ｂは、最適化ソースプログラム１０２においては、シンボル名ｂ＿１、ｂ＿２およびｂ＿３に変換されるが、この３つのシンボル名のうち、最後に参照されるシンボル名がｂ＿１であるため、図１９に示すシンボルテーブル情報には、変換前シンボル名「ｂ」と変換後シンボル名「ｂ＿１」とが対応付けられた記述されている。
【０１１１】
（４）上記実施の形態では、図９に示すようにソース変換デバッグ情報１１１を変換後のソースプログラム（最適化ソースプログラム１０２）内にコメントとして出力しているが、本発明はこの出力方法に限定されるものではない。例えば、ソース変換デバッグ情報１１１を最適化ソースプログラム１０２とは別ファイルとして出力する仕様を採用したとしても本発明の有意性は保たれる。
【０１１２】
（５）上記実施の形態では、コンパイルシステム１による最適化のためのプロファイル情報を出力するプロファイラ部１０をデバッグシステム６内に内蔵していたが、本発明はこの構成に限定されるものではない。例えば、図２０に示すようにプロファイラ部１０を独立したプログラムであるプロファイラとして切り出したり、図２１に示すようにプロファイラ部をコンパイラ内部に内蔵させたりしてプログラム開発システムを構成するようにしても本発明による効果を実現することができる。
【０１１３】
（６）上記実施の形態では、コンパイルシステム１へのヒント情報をプロファイル情報１３１として入力していたが、本発明はこの指示方法に限定されるものではない。たとえば、ユーザがコンパイルシステム１に対する指示の一種であるコンパイルオプションとしてヒント情報を与えるという方法を採用してもよい。
【０１１４】
（７）上記実施の形態では、デバッグシステム６のソース変換情報表示部９１は図１４のように変換前後の２つのソース部分を表示しているが、本発明はこれに限定されるものではない。ソース部分は２つに限られず、それ以上の変換候補に関する情報をデバッグ情報を介して伝達し、３つを超えるソース部分を同時もしくは選択的に表示するような構成にしてもよい。
【０１１５】
（８）上記実施の形態では、プリプロセッサ４の行調整部４１およびコンパイラ５の行番号調整部５１において、ソースレベルオプティマイザ３で挿入された“＃ｐｒａｇｍａ”などのプラグマ指示を認識して行の調整を実施していたが、行調整のための指示としては、プラグマ指示には限定せず、特定の組み込み関数を解釈することによりソースレベルオプティマイザで組込み関数が挿入されたことを認識するような構成にしてもよい。
【産業上の利用可能性】
【０１１６】
本発明は、コンパイルシステムやデバッグシステムを含んだプログラム開発システム等に適用できる。
【符号の説明】
【０１１７】
１  コンパイルシステム
２  ドライバ
３  ソースレベルオプティマイザ
４  プリプロセッサ
５  コンパイラ
６  デバッグシステム
７  シミュレータ部
８  デバッグ処理部
９  ＧＵＩ処理部
１０  プロファイラ部
１１  プログラム開発システム
２１  ユーザ指定オプション処理部
３１  行番号維持変換部
３２  ソース変換デバッグ情報生成出力部
３３  プロファイル情報活用最適化部
４１  行調整部
５１  行番号調整部
５２  最終デバッグ情報選択生成部
８１  デバッグ情報選択部
９１  ソース変換情報表示部
１０１  オリジナルソースプログラム
１０２  最適化ソースプログラム
１０３  プリプロセス後ソースプログラム
１０４  機械語プログラム
１１１  ソース変換デバッグ情報
１１２  最終デバッグ情報
１２１  行番号テーブル情報
１２２  シンボルテーブル情報
１２３  最適化支援情報
１３１  プロファイル情報
１３２  実行ログ情報
【図１】
2011175673.tif 000003
【図２】
2011175673.tif 000004
【図３】
2011175673.tif 000005
【図４】
2011175673.tif 000006
【図５】
2011175673.tif 000007
【図６】
2011175673.tif 000008
【図７】
2011175673.tif 000009
【図８】
2011175673.tif 000010
【図９】
2011175673.tif 000011
【図１０】
2011175673.tif 000012
【図１１】
2011175673.tif 000013
【図１２】
2011175673.tif 000014
【図１３】
2011175673.tif 000015
【図１４】
2011175673.tif 000016
【図１５】
2011175673.tif 000017
【図１６】
2011175673.tif 000018
【図１７】
2011175673.tif 000019
【図１８】
2011175673.tif 000020
【図１９】
2011175673.tif 000021
【図２０】
2011175673.tif 000022
【図２１】
2011175673.tif 000023