JP4822817B2 - コンパイルシステム - Google Patents

コンパイルシステム Download PDF

Info

Publication number
JP4822817B2
JP4822817B2 JP2005337648A JP2005337648A JP4822817B2 JP 4822817 B2 JP4822817 B2 JP 4822817B2 JP 2005337648 A JP2005337648 A JP 2005337648A JP 2005337648 A JP2005337648 A JP 2005337648A JP 4822817 B2 JP4822817 B2 JP 4822817B2
Authority
JP
Japan
Prior art keywords
program
source program
source
conversion
machine language
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2005337648A
Other languages
English (en)
Other versions
JP2007141173A (ja
Inventor
岳人 瓶子
涼子 宮地
昌平 道本
輝雄 川端
康博 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2005337648A priority Critical patent/JP4822817B2/ja
Priority to US11/555,449 priority patent/US20070168984A1/en
Priority to CNA2006101486718A priority patent/CN1971518A/zh
Publication of JP2007141173A publication Critical patent/JP2007141173A/ja
Application granted granted Critical
Publication of JP4822817B2 publication Critical patent/JP4822817B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

Description

本発明は、C言語等の高級言語で記述されたソースプログラムを機械語プログラムに変換するコンパイルシステム、機械語プログラムの検証を行うデバッグシステム、ならびにコンパイルシステムおよびデバッグシステムを含むプログラム開発システムに関する。
従来、コンピュータ上で実行される機械語プログラムのプログラム開発システムとして、コンパイルシステムおよびデバッグシステムを含むシステムが提案されている。コンパイルシステムは、C言語等の高級言語で記述されたソースプログラムを機械語命令列に変換するプログラムをコンピュータ上実行することにより実現されるシステムである。デバッグシステムは、機械語プログラムを受け、当該機械語プログラムの実行時における動作の制御やデータの参照等を行って機械語プログラムの妥当性の検証を行うプログラムをコンピュータ上で実行することにより実現されるシステムである。
このようなプログラム開発システムでは、コンパイルシステムにてソースプログラムの行番号と機械語命令との対応関係や、ソースプログラム中のシンボル名と機械語データとの対応関係等を示すデバッグ情報を生成する。すなわち、デバッグ情報は、ソースプログラムと機械語プログラムとの対応関係を示している。また、デバッグシステムにてそのデバッグ情報を読み込んで活用することにより、ユーザがソースレベルの情報を指定してデバッグを行うことができる機能を実現している。
一方、近年、従来のコンパイルシステムにおける中間コードレベルより上位レベルでの最適化機能に対する要望や、秘匿性確保の要望等に応えるために、ソースプログラムを一旦別のソースプログラムに変換するソースプログラム変換・最適化方法が各種提案されている(例えば、特許文献1および2参照)。
ソースプログラム変換・最適化方法によって生成されたソースプログラムは、従来と同様のコンパイルシステムに入力されることにより、当該コンパイルシステムで機械語プログラムに変換される。
特公平6−80490号公報 特開2003−280754号公報
上記ソースプログラム変換・最適化方法を活用した場合に、従来のプログラム開発システムを利用すると、コンパイルシステムで生成するデバッグ情報は、ソースレベル変換後のソースプログラムに基づいたものとなる。このため、ユーザは、元々、自身が記述したソースプログラムに基づいたソースレベルのデバッグを行うことができない。これは、ソースプログラム変換・最適化方法を活用することによって、ソースプログラムの行番号がずれてしまったり、制御構造が変わってしまったり、関数名および変数名が変わってしまったりするためである。
このため、ユーザはソースプログラム変換・最適化方法によって自動生成されたソースプログラムに基づいてデバッグを行うか、生成された機械語プログラムの機械語命令レベルでデバッグを行うことを余儀なくされ、デバッグの効率が低下してしまう。
そのため、システムソフトウェアのユーザは、データの配置等を手動で試行錯誤する必要があり、多大な開発工数が必要であるという問題がある。
本発明は、上述の課題を解決するためになされたもので、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるコンパイルシステム、デバッグシステムおよびプログラム開発システムを提供することを目的とする。
上記目的を達成するために、本発明のある局面に係るコンパイルシステムは、ソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するソースプログラム変換手段と、前記第2ソースプログラムを機械語プログラムに変換するコンパイル手段と、前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を参照することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報を生成するデバッグ情報生成手段とを備えることを特徴とする。
本構成によると、デバッグ時には、第1デバッグ情報を利用することにより、第1ソースプログラムに基づいたデバッグが可能となる。このため、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるコンパイルシステムを提供することができる。
好ましくは、前記コンパイルシステムは、さらに、前記第2ソースプログラムに含まれる指示文を解釈し、解釈した結果に基づく前処理を前記第2ソースプログラムに対して実行するプリプロセッサ手段と、前記プリプロセッサ手段において解釈された前記指示文のうち、前記ソースプログラム変換手段において追加された前記指示文を含む行を前記第2ソースプログラム中より削除する指示文削除手段とを備えることを特徴とする。
この構成によると、第1ソースプログラムから第2ソースプログラムへの変換時に追加された行を第2ソースプログラムにおいて削除する。これにより、行を追加することにより生じる第1ソースプログラムと第2ソースプログラムとの行番号のずれが解消され、第1ソースプログラムの行番号と第2ソースプログラムとの行番号との対応関係を確保することができる。よって、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さが確保され、ソフトウェア開発の利便性および開発効率を高めることができる。
さらに好ましくは、前記ソースプログラム変換手段は、前記第1ソースプログラムの行番号と前記第2ソースプログラムの行番号との対応関係を維持しつつ、前記第1ソースプログラムを前記第2ソースプログラムに変換する行番号維持変換部を有することを特徴とする。また、前記ソースプログラム変換手段は、さらに、前記行番号維持変換部によりソースプログラムの変換に伴う変更点をまとめたソース変換デバッグ情報を生成するソース変換デバッグ情報生成部を備えることを特徴とする。さらに、前記ソース変換デバッグ情報は、前記第1ソースプログラムに含まれる変換対象箇所の文と、前記第2ソースプログラムに含まれる当該変換対象箇所を変換した後の変換箇所の文とを含むことを特徴とする。
この構成によると、デバッグ時にソース変換デバッグ情報を利用することにより、ユーザは、第1ソースプログラムに基づいたデバッグを行なうことができる。このため、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さが確保され、ソフトウェア開発の利便性および開発効率を高めることができる。
本発明の他の局面に係るデバッグシステムは、機械語プログラムのデバッグを支援するデバッグシステムであって、高級言語で記述された第1ソースプログラムを最適化した高級言語で記述された第2ソースプログラムをコンパイルすることにより得られる機械語プログラムを実行するプログラム実行手段と、前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を参照することにより第1ソースプログラムと前記機械語プログラムとの対応関係を示す第1デバッグ情報、および前記第2ソースプログラムと前記機械語プログラムとの対応関係を示す第2デバッグ情報を受け、前記プログラム実行手段における実行結果、前記第1デバッグ情報および前記第2デバッグ情報に基づいて、前記機械語プログラムのユーザによるデバッグを支援するデバッグ支援手段とを備えることを特徴とする。
この構成によると、ユーザは、第1デバッグ情報に基づいて第1ソースプログラムに対するデバッグを行なうことができる。このため、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるデバッグシステムを提供することができる。
好ましくは、前記デバッグシステムは、さらに、前記第1ソースプログラムに含まれる変換対象箇所の文と前記第2プログラムに含まれる当該変換対象箇所を最適化した後の変換箇所の文とを表示する変換箇所表示制御手段と、前記変換対象箇所の文または前記変換箇所の文のいずれか一方の選択を受け付ける選択受け付け手段と、前記選択受け付け手段で受け付けられた情報をプロファイル情報として生成するプロファイル情報生成手段とを備えることを特徴とする。また、前記プロファイル情報生成手段は、前記変換対象箇所の文または前記変換箇所の文を前記プログラム実行手段で実行した際の実行サイクル数を、前記プロファイル情報にさらに含めることを特徴とする。
この構成によると、コンパイルシステムにおいて、変換対象箇所および変換箇所のうち実行サイクルの小さいものを選択して、コンパイルすることが可能になる。よって、実行サイクル数の小さな機械語プログラムを作成することができる。
本発明のさらに他の局面に係るプログラム開発システムは、ソースプログラムから機械語プログラムを開発するプログラム開発システムであって、上述のコンパイルシステムと、上述のデバッグシステムとを備え、前記デバッグシステムは、さらに、前記プログラム実行手段にて前記機械語プログラムを実行した際の実行ログを出力する実行ログ出力手段を備え、前記プログラム開発システムは、さらに、前記デバッグシステムから出力された前記実行ログを解析し、前記コンパイルシステムにおける最適化のためのヒントとなる情報であるプロファイル情報を出力するプロファイラ手段を備え、前記コンパイルシステムの前記ソースプログラム変換手段は、前記プロファイル情報に基づいて、前記第1ソースプログラムの最適化を行なうことを特徴とする。
この構成によると、プロファイル手段を介して、コンパイルシステムとデバッグシステムとが連結され、これらのシステムを自動的に何度も起動しながら徐々に機械語プログラムを更新していくことができる。このため、機械語プログラムの最適化を自動化することができ、ユーザの機械語プログラムのチューニングに要する工数を最小限に抑えつつ、最適な機械語プログラムを自動的に選択して決定していくことができる。よって、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるプログラム開発システムを提供することができる。
なお、本発明は、このような特徴的な手段を備えるコンパイルシステム、デバッグシステムおよびプログラム開発システムとして実現することができるだけでなく、コンパイルシステム、デバッグシステムおよびプログラム開発システムに含まれる特徴的な手段をステップとするコンパイル方法、デバッグ支援方法およびプログラム開発方法として実現したり、コンパイル方法、デバッグ支援方法およびプログラム開発方法に含まれる特徴的なステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM(Compact Disc-Read Only Memory)等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
本発明によると、ソースレベルでの変換・最適化を実施した際にもデバッグのし易さを確保し、ソフトウェア開発の利便性および開発効率を高めることができるコンパイルシステム、デバッグシステムおよびプログラム開発システムを提供することができる。
以下、図面を参照しながら本発明の実施の形態に係るプログラム開発システムについて説明する。
図1は、本発明の実施の形態に係るプログラム開発システムの構成を示すブロック図である。
プログラム開発システム11は、入力されたC言語等の高級言語で記述されたソースプログラム(図示せず)から最終的に機械語プログラム104を生成するシステムであり、コンパイルシステム1とデバッグシステム6とを備えている。
コンパイルシステム1は、ソースプログラムおよびプロファイル情報131を読み込み、ソースプログラムを機械語プログラム104に変換するシステムである。コンパイルシステム1の詳細な構成については後述する。
デバッグシステム6は、機械語プログラム104を読み込み、機械語プログラム104のシミュレーションや情報表示を行って、機械語プログラム104およびソースプログラムの分析・デバッグを支援するシステムである。デバッグシステム6は、機械語プログラム104を実行することによりコンパイルシステム1における最適化のためのヒントとなる情報であるプロファイル情報131を出力する。デバッグシステム6の詳細については後述する。
図2は、本発明に係るプログラム開発システムの構成要素であるコンパイルシステム1の構成を示すブロック図である。
コンパイルシステム1は、ドライバ2と、ソースレベルオプティマイザ3と、プリプロセッサ4と、コンパイラ5とを備えている。コンパイルシステム1の各構成部は、コンピュータ(図示せず)上で実行されるプログラムとして実現される。
ソースレベルオプティマイザ3は、特許請求の範囲に示すソースプログラム変換手段の一例である。プリプロセッサ4は、特許請求の範囲に示すプリプロセッサ手段の一例である。コンパイラ5は、特許請求の範囲に示すコンパイル手段の一例である。
ドライバ2は、ユーザが指定したコンパイルオプションに従って、コンパイルシステム1の他の構成要素であるソースレベルオプティマイザ3、プリプロセッサ4およびコンパイラ5を必要に応じて適切なオプションで起動する機能を有する。
ソースレベルオプティマイザ3は、プロファイル情報131とユーザが記述したオリジナルソースプログラム101とを入力として受け、ソースレベルでの最適化処理を施し、最適化されたソースプログラムである最適化ソースプログラム102を出力する。ここで実施される最適化は、ベクトル化およびマルチスレッド化などの並列化、プロファイル情報活用最適化、ならびにファイル間最適化などである。ソースレベルオプティマイザ3は、プロファイル情報131を入力として受けることも可能であり、プロファイル情報131が入力された場合には、それを活用した最適化および変換を実施することができる。
プリプロセッサ4は、最適化ソースプログラム102を入力として受け、コンパイラ5でのコンパイル処理に先立って、C言語で記述された最適化ソースプログラム102に含まれる“#define”などのプリプロセッサ指示文を解釈し、解釈結果に基づく前処理を行ない、前処理後のソースプログラムであるプリプロセス後ソースプログラム103をコンパイラ5に渡す。
コンパイラ5は、入力されたプリプロセス後ソースプログラム103を中間言語で記述された内部中間表現に変換し、最適化を施した後、ターゲットプロセッサ向けの機械語プログラム104を生成する。
以下、コンパイルシステム1の各構成要素の詳細な構成とその動作について説明する。
ドライバ2は、ユーザ指定オプション処理部21を備える。ユーザ指定オプション処理部21は、コンパイルシステム1で生成される最終デバッグ情報112に関するユーザのオプション指示をコンパイラ5に伝達する。具体的には、ユーザのオプション指示には以下の3通りの指示が存在する。
(1)オリジナルソースプログラム101に基づくデバッグ情報を生成する指示
(2)最適化ソースプログラム102に基づくデバッグ情報を生成する指示
(3)オリジナルソースプログラム101に基づくデバッグ情報と最適化ソースプログラム102に基づくデバッグ情報との両方のデバッグ情報を生成する指示
3通りのオプション指示のうち、指示(1)は“−orgsrcdbg”オプション、指示(2)は“−optsrcdbg”オプション、指示(3)は“−bothsrcdbg”オプションにそれぞれ対応する。
例えば、オリジナルソースプログラム101のファイル名が「test.c」であり、コンパイルシステム1を起動するためのコマンドが「cc」である場合に、コンパイルシステム1に対して指示(1)を行なう場合には、ユーザは、コマンドラインにおいて「cc −orgsrcdbg test.c」というコマンドを入力する。
ソースレベルオプティマイザ3は、行番号維持変換部31と、ソース変換デバッグ情報生成出力部32と、プロファイル情報活用最適化部33とを備えている。
行番号維持変換部31は、特許請求の範囲に示す行番号維持変換部の一例である。ソース変換デバッグ情報生成出力部32は、特許請求の範囲に示すソース変換デバッグ情報生成部の一例である。
プロファイル情報活用最適化部33は、入力されたプロファイル情報131を考慮した最適化を行う機能を有する。プロファイル情報活用最適化部33の動作については後で述べる。
行番号維持変換部31は、ソースレベルの最適化に伴う変換を実施しつつ、デバッグ性を維持するためにオリジナルソースプログラム101の各文の行番号が変換後の最適化ソースプログラム102においても変化しないように維持する機能を有する。
図3は、行番号維持変換部31におけるプログラム変換例を示す図である。
行番号維持変換部31は、図3(a)に示すようなオリジナルソースプログラム101に対して、図3(b)に示すようにループをキャッシュメモリのライン単位のループに分割してプリフェッチ処理を挿入する最適化を実施する。その後、行番号維持変換部31は、図3(c)のように新たに生成された文の行を詰め、図3(a)のオリジナルソースプログラム101の各文の行番号を維持するような変換処理を行い、最適化ソースプログラム102を生成する。すなわち、行番号維持変換部31は、変数sumへの代入文の行番号が、オリジナルソースプログラム101と最適化ソースプログラム102とで同じ2行目となるような変換処理を行なう。
図4は、行番号維持変換部31における他のプログラム変換例を示す図である。
行番号維持変換部31は、図4(a)に示すようなオリジナルソースプログラム101に対して、図4(b)に示すように最内ループ処理をベクトル化してベクトル命令vaddで処理するように変換を実施する。その後、行番号維持変換部31は、図4(c)に示すように変換処理において削減された行に対して空行を挿入し、図4(a)のオリジナルソースプログラム101の各文の行番号を維持するような変換処理を行い、最適化ソースプログラム102を生成する。すなわち、行番号維持変換部31は、オリジナルソースプログラム101における2行目と4行目とを空行で埋めることにより、オリジナルソースプログラム101と最適化ソースプログラム102との行番号の維持を行なっている。
ソース変換デバッグ情報生成出力部32は、オリジナルソースプログラム101のソースレベル変換に伴って、オリジナルソースプログラム101と最適化ソースプログラム102との間で、行番号に変更が生じた場合や、関数名や変数名などのシンボル名に変更が生じた場合に、それぞれ行番号テーブル情報121およびシンボルテーブル情報122をソース変換デバッグ情報111として出力する機能を有する。
図5は、行番号維持変換部31における他のプログラム変換例を示す図である。
図5(a)は、ソースレベルオプティマイザ3による最適化前のオリジナルソースプログラム101を示しており、104行目が空行である。ソースレベルオプティマイザ3による最適化が行なわれ、105行目の直前にプラグマ指令「#pragma ***」が挿入されることになった場合には、空行である104行目に当該プラグマ指令が挿入され、図5(b)に示すような最適化ソースプログラム102が生成される。このような処理により、オリジナルソースプログラム101と最適化ソースプログラム102との行番号が維持される。
図6は、行番号維持変換部31における他のプログラム変換例を示す図である。
図6(a)は、ソースレベルオプティマイザ3による最適化前のオリジナルソースプログラム101を示している。ソースレベルオプティマイザ3による最適化が行なわれ、104行目の直前にプラグマ指令「#pragma ***」が挿入されることになった場合には、行番号維持変換部31は、オリジナルソースプログラム101の103行目の「}」を102行目に移動させ、103行目にプラグマ指令「#pragma ***」を挿入することにより、図6(b)に示すような最適化ソースプログラム102を生成する。このような処理により、オリジナルソースプログラム101と最適化ソースプログラム102との行番号が維持される。
図7は、行番号テーブル情報121の一例を模式的に示す図である。図7(a)はソースレベル変換に伴う行番号の変化の一例を示した図である。すなわち、行番号テーブル情報121には、変換前のプログラムであるオリジナルソースプログラム101は7行のプログラムであり、変換後の最適化ソースプログラム102は10行のプログラムであることが示されている。また、行番号テーブル情報121では、ソースレベル変換により、オリジナルソースプログラム101の2行目が削除されていることが示されている。また、オリジナルソースプログラム101の4行目および5行目が最適化ソースプログラム102では3行目から7行目に変更されていることが示されている。さらに、オリジナルソースプログラム101にはなかった文が最適化ソースプログラム102の10行目に追加されていることが示されている。
図7(b)は、図7(a)に示した行番号テーブル情報121と同様の内容を示した行番号テーブル情報121である。左欄はオリジナルソースプログラム101の行番号を示し、右欄は最適化ソースプログラム102の行番号を示している。行番号テーブル情報121において、“−”となっている部分は、対応する行が存在しないことを示し、“3−7”の部分は、3行目から7行目という意味で、ソース行の範囲を示している。例えば、オリジナルソースプログラム101における4行目から5行目までが、最適化ソースプログラム102における3行目から7行目に対応することが示されている。
このように、ソース変換デバッグ情報生成出力部32では、ソースレベル変換前後で行番号が変更される部分について、それぞれの部分の対応関係を表にまとめる。ただし、後述するプリプロセッサ4およびコンパイラ5にて行番号調整される項目に関しては、ソース変換デバッグ情報111がなくても行番号の調整が実施されるので、ここではそれを考慮した上で必要な情報を生成する。
図8は、シンボルテーブル情報122の一例を示す図である。ソース変換デバッグ情報生成出力部32では、ソースレベル変換前後で変数名および関数名が変わるもの、複数の関数および変数に分割されるもの、複数の関数および変数が統合されるものについて、それぞれのシンボルの対応関係を表にまとめる。図8に示されるように、シンボルによっては変換前のシンボルが変換後の複数のシンボルに対応する場合もあり、その場合はそれらすべてを表に保持することになる。図8の行番号テーブル情報121では、オリジナルソースプログラム101におけるシンボル名が変換前シンボル名として示されており、最適化ソースプログラム102におけるシンボル名が変換後シンボル名として示されている。たとえば、シンボルテーブル情報122は、オリジナルソースプログラム101におけるシンボル名aが、最適化ソースプログラム102ではシンボル名a1およびa2に変換されていることが示されている。
ソース変換デバッグ情報生成出力部32は、さらに、コンパイラ5における最適化を支援するための最適化支援情報123もソース変換デバッグ情報111として生成する。具体的には、ソースレベルオプティマイザ3でのソースプログラムの各変換部分に対する変換前後または変換候補の対応関係の組み合わせと、各ソースプログラム部分の実行サイクル数を生成する。後者の実行サイクル数については、プロファイル情報131にて指定された場合にのみ値が設定され、それ以外の場合には“0”が設定される。ここで、変換後のソースプログラムの変換部分に関する情報には必ずしも1つに限定される必要はなく、複数の変換候補パターンについてソースプログラムの情報およびサイクル数を出力することができる。
図9は、ソース変換デバッグ情報生成出力部32が出力するソース変換デバッグ情報111の一例を示す図である。
ソース変換デバッグ情報111は、上記行番号テーブル情報121、シンボルテーブル情報122および最適化支援情報123を示すテキスト情報であり、出力ファイルである最適化ソースプログラム102の末尾にコメントとして出力される。
すなわち、main関数の部分が最適化ソースプログラム102に相当する。また、「/*」および「*/」で囲まれたコメント文のうち、タグ<DebugInfo>およびタグ</DebugInfo>で囲まれた部分がソース変換デバッグ情報111を示している。また、タグ<LineInfo>およびタグ</LineInfo>で囲まれた部分が行番号テーブル情報121を示している。さらに、タグ<SymbolInfo>およびタグ</SymbolInfo>で囲まれた部分がシンボルテーブル情報122を示している。さらにまた、タグ<TransInfo>およびタグ</TransInfo>で囲まれた部分が最適化支援情報123を示している。
行番号テーブル情報121は、ここでは、タグ<block>およびタグ</block>で囲まれた3行よりなり、1行目は、オリジナルソースプログラム101の7行目が最適化ソースプログラム102では削除されていることを示している。2行目は、オリジナルソースプログラム101の8〜9行目が最適化ソースプログラム102の7〜11行目に変更されていることを示している。3行目は、オリジナルソースプログラム101にはなかった文が最適化ソースプログラム102の12行目に追加されていることを示している。
シンボルテーブル情報122は、ここでは、タグ<symbol>およびタグ</symbol>で囲まれた1行よりなり、オリジナルソースプログラム101のシンボルaが最適化ソースプログラム102ではシンボルa1,a2およびa3に対応することが示されている。
最適化支援情報123のうち、タグ<File>およびタグ</File>で囲まれた部分に示された文字列「test.c」は、コンパイル対象となっているオリジナルソースプログラム101のファイル名を示している。タグ<Line>およびタグ</Line>囲まれた部分に示されている値「23」は、オリジナルソースプログラム101の変換部分の先頭の行番号を示している。タグ<Pattern>およびタグ</Pattern>で囲まれた部分がソースレベルオプティマイザ3による変換後の変換パターンを示しており、ここでは2種類の変換パターンが示されている。それぞれの変換パターンには識別子が付されており、タグ<ID>およびタグ</ID>でそれぞれ囲まれた部分である。すなわち、識別子として、「1」および「2」という番号が付されている。また、各変換パターンはタグ<Code>およびタグ</Code>で囲まれた部分である。それぞれの変換パターンを機械語命令に置き換えて実行した際のサイクル数がタグ<cycle>およびタグ</cycle>で囲まれた部分に示されており、識別子「1」の変換パターンの実行サイクル数として0が設定されている。これは、上述したように、プロファイル情報131による実行サイクル数の指定がないことを示している。一方、識別子「2」の変換パターンの実行サイクル数として1500が設定されている。これは、識別子「2」の変換パターンの実行サイクル数が1500サイクルであることを示している。また、識別子「2」の変換パターンがユーザによって選択されていることが「<UserSelect>True</UserSelect>」により示されている。
次に、図2に示したプリプロセッサ4について説明する。プリプロセッサ4は、行調整部41を備えている。行調整部41は、特許請求の範囲に示す指示分削除手段の一例である。
従来のプリプロセッサによる処理では、プリプロセッサ指示文を解釈してそれに応じた処理を行い、当該プリプロセッサ指示行は空行として出力し、オリジナルソースプログラムの各文の行番号は維持される。例えば、従来のプリプロセッサは、“#define A B”というプリプロセッサ指示文を受け付けると、ソースプログラム中のAをすべてBに置換し、当該プリプロセッサ指示文の存在した行は空行として出力する。
本発明に係るプリプロセッサ4の行調整部41は、最適化ソースプログラム102を入力して、ソースレベルオプティマイザ3にて挿入された“#pragma”などのプリプロセッサ指示を認識し、当該指示文に対応する処理を施した後、ソースレベルオプティマイザ3にて挿入されたプリプロセッサ指示文についてはその行自体を削除する。これによって、ソースレベルオプティマイザ3によるプリプロセッサ指示行挿入によって生じたオリジナルソースプログラム101と最適化ソースプログラム102との行番号のずれが解消され、当該部分についてはオリジナルソースプログラム101とプリプロセス後ソースプログラム103との行番号の対応が確保される。
図10は、行調整部41が解釈可能なプリプロセッサ指示文の一例を示した図である。行調整部41は、本図に示すようなプリプロセッサ指示文の一種であるプラグマ指示をリストとして保持しており、このリストに登録されているプリプロセッサ指示文に対して上述した処理を行なう。
図11は、行調整部41が実行する処理のフローチャートである。行調整部41は、最適化ソースプログラム102に含まれるプリプロセッサ指示文に基づいて、当該文で示されている指示による処理を実行する(S12)。次に、行調整部41は、処理を実行したプリプロセッサ指示文が図10に示すようなリストに登録されているか否かを判断する(S14)。プリプロセッサ指示文がリストに登録されている場合には(S14でYES)、行調整部41は、当該プリプロセッサ指示文が記述されている行を最適化ソースプログラム102より削除する(S16)。プリプロセッサ指示文がリストに登録されていない場合には(S14でNO)、行調整部41は、当該プリプロセッサ指示文が記述されている行を空行に変換する(S18)。以上のような処理を行なうことにより、プリプロセッサ4は、最適化ソースプログラム102をプリプロセス後ソースプログラム103に変換する。
次に、図2に示したコンパイラ5について説明する。コンパイラ5は、行番号調整部51と、最終デバッグ情報選択生成部52とを備えている。行番号調整部51は、特許請求の範囲に示す行番号情報生成部の一例である。最終デバッグ情報選択生成部52は、特許請求の範囲に示すデバッグ情報生成手段およびデバッグ情報出力手段の一例である。
コンパイラ5は、プリプロセス後ソースプログラム103を入力として受け、通常内部の行番号カウンタをインクリメントしながら一行ずつ字句解析および構文解析しながら、各文を解釈し、最終デバッグ情報112の一部である行番号情報を生成するために、各文と行番号との対応付けを行う。
行番号調整部51は、プリプロセス後ソースプログラム103の中の、ソースレベルオプティマイザ3にて挿入された“#pragma”などのコンパイル指示を認識し、当該指示に対応する処理を施したあと、ソースレベルオプティマイザ3で挿入されたコンパイル指示に基づく処理した際には、内部の行番号カウンタをデクリメントする。このようにして、行番号調整部51は、ソースレベルオプティマイザ3にて挿入されたコンパイル指示を無視した行番号情報を生成する。これによって、ソースレベルオプティマイザ3によるコンパイル指示行挿入によって生じたオリジナルソースプログラム101とプリプロセス後ソースプログラム103との行番号のずれをコンパイラ5内部で吸収し、当該部分についてはオリジナルソースプログラム101とコンパイラ5内部の文と行番号の対応関係についての整合性が確保される。
なお、行番号調整部51が解釈可能なコンパイル指示の一例は、プリプロセッサ4の行調整部41が解釈可能なプリプロセッサ指示と同様である。すなわち、行番号調整部51は、図10に示した行調整部41が解釈可能なプリプロセッサ指示のリストと同様のリストを保持している。
図12は、行番号調整部51が実行する処理のフローチャートである。行番号調整部51は、プリプロセス後ソースプログラム103に含まれるコンパイル指示に基づく処理を実行する(S22)。行番号調整部51は、当該コンパイル指示が上述のリストに登録されているか否かを調べる(S24)。コンパイル指示がリストに登録されている場合には(S24でYES)、行番号調整部51は、上述したように内部の行番号カウンタをデクリメントすることにより、行番号の調整処理を行なう(S26)。すなわち、コンパイル指示行を除いて行番号をカウントするような調整処理を行なう。
最終デバッグ情報選択生成部52は、ドライバ2から伝達されたユーザが指定したコンパイルオプションの指示にしたがって、以下のいずれかの情報を最終デバッグ情報112として機械語プログラム104中に含めて出力する。
(1)オリジナルソースプログラム101に基づくデバッグ情報
(2)最適化ソースプログラム102に基づくデバッグ情報
(3)オリジナルソースプログラム101に基づくデバッグ情報と最適化ソースプログラム102に基づくデバッグ情報との両方のデバッグ情報
特に、オリジナルソースプログラム101に基づくデバッグ情報が必要な場合には((1)および(2)の場合)、最終デバッグ情報選択生成部52は、プリプロセス後ソースプログラム103とソース変換デバッグ情報111から必要な情報(例えば、機械語命令とソースコードとの行およびシンボルの対応関係)を生成する。具体的には、最終デバッグ情報選択生成部52は、行番号テーブル情報121に基づいてオリジナルソースプログラム101の行情報を生成し、シンボルテーブル情報122に基づいてオリジナルソースプログラム101のシンボル情報を生成し、最終デバッグ情報112に含めて出力する。さらに、最終デバッグ情報選択生成部52は、最適化支援情報123についても最終デバッグ情報112に含めて出力する。
コンパイルシステム1が以上のような構成をとることにより、ソースレベルオプティマイザ3を採用した場合でも、オリジナルソースプログラム101に基づいたデバッグ情報(最終デバッグ情報112)を生成することができる。これに伴い、ユーザは、オリジナルソースプログラム101に基づいたソースレベルデバッグが可能となる。また、ソースレベルオプティマイザ3による行番号維持変換処理や、プリプロセッサ4やコンパイラ5による行調整処理などの複数の処理を組み合わせて活用することにより、ソース変換デバッグ情報111など、従来のコンパイルシステムにはない追加情報の情報量を極力削減することが可能となる。
図13は、本発明に係るプログラム開発システム11の構成要素であるデバッグシステム6の構成を示すブロック図である。
デバッグシステム6は、コンパイルシステム1で生成された機械語プログラム104を入力として受け、ユーザとのインタラクティブなインタフェースによってプログラムのシミュレーションや情報表示を行って、プログラムの分析・デバッグを支援する開発ツールであり、シミュレータ部7と、デバッグ処理部8と、GUI(Graphical User Interface)処理部9と、プロファイラ部10とを備える。
シミュレータ部7は、特許請求の範囲に示すプログラム実行手段および実行ログ出力手段の一例である。デバッグ処理部8は、特許請求の範囲に示すデバッグ支援手段の一例である。GUI処理部9は、特許請求の範囲に示すプログラム表示制御手段の一例である。プロファイラ部10は、特許請求の範囲に示すプロファイル情報生成手段およびプロファイラ手段の一例である。
シミュレータ部7は、機械語プログラム104中の機械語命令を解釈し、ターゲットプロセッサでの動作をシミュレートする機能を有する。さらに、シミュレータ部7は、実行時の制御フローやサイクル数を含めた実行ログ情報132を出力する機能を有する。
デバッグ処理部8は、機械語プログラム104内の最終デバッグ情報112を参照して、ユーザからの指示に従ってシミュレータ部7でのシミュレーションを制御したり、GUI処理部9にて必要な情報を表示するような制御をしたりする機能を有しており、デバッグ情報選択部81を備える。
デバッグ情報選択部81は、ユーザのオプション指定またはコマンド指示に従って、オリジナルソースプログラム101に基づくソースレベルデバッグ機能を提供するのか、最適化ソースプログラム102に基づくソースレベルデバッグ機能を提供するのかを選択する。具体的には、デバッグシステム6起動時に“−orgsrc”オプションが指定された場合または“orgsrc”コマンド指示が与えられた場合には、機械語プログラム104内の最終デバッグ情報112のうち、オリジナルソースプログラム101に基づくデバッグ情報を選択して参照し、そのデバッグ情報に基づいてデバッグ機能を提供する。また、“−optsrc”オプションが指定された場合または“optsrc”コマンド指示が与えられた場合には、機械語プログラム104内の最終デバッグ情報112のうち、最適化ソースプログラム102に基づくデバッグ情報を選択して参照し、そのデバッグ情報に基づいてデバッグ機能を提供する。
例えば、機械語プログラム104のファイル名が「test.out」であり、デバッグシステム6を起動するためのコマンドが「debug」である場合には、“−orgsrc”オプションの指定は、ユーザがコマンドライン上で「debug −orgsrc test.out」と入力することにより行なわれる。
GUI処理部9は、グラフィカルなユーザインタフェースを提供する部分であり、ユーザの指示を受け付ける機能や、プログラムに関する情報を表示する機能を有しており、ソース変換情報表示部91を備える。ソース変換情報表示部91は、特許請求の範囲に示す変換箇所表示制御手段および選択受け付け手段の一例である。
ソース変換情報表示部91は、ソースレベルオプティマイザ3による最適化前後のソース部分の情報を表示する機能を有する。具体的には、ソース変換情報表示部91は、最終デバッグ情報112を参照し、当該部分に該当するオリジナルソースプログラム101中および最適化ソースプログラム102中のソース部分を検出するかまたは最適化支援情報123から当該ソース部分の情報を抽出し、ユーザ指示に基づいていずれかのソース部分もしくは両方のソース部分を表示する。さらに、ソース変換情報表示部91は、各ソース部分についての実行サイクル数やユーザによる選択状況も表示することが可能である。実行サイクル数については、コンパイルシステム1に後述するプロファイル情報131が入力された場合にのみ、最終デバッグ情報112から有効な値を抽出することが可能である。
図14は、ソース変換情報表示部91が表示するソース変換情報の表示画面の一例を示す図である。表示画面200には、ソースプログラムウィンドウ202と、1つめの変換パターンを示すポップアップウィンドウ204と、2つめの変換パターンを示すポップアップウィンドウ206とが表示されている。ソースプログラムウィンドウ202は、オリジナルソースプログラム101を表示するためのウィンドウである。ポップアップウィンドウ204は、オリジナルソースプログラム101のうち、ソースレベルオプティマイザ3による変換前の部分を表示するためのウィンドウである。ポップアップウィンドウ206は、最適化ソースプログラム102のうち、ポップアップウィンドウ204に表示された部分に対応するソースレベルオプティマイザ3による変換後の部分を表示するためのウィンドウである。
なお、ポップアップウィンドウ204およびポップアップウィンドウ206に表示されているソースレベルオプティマイザ3による変換前後のプログラムには、それを実行した際の実行サイクル数と、ユーザによりいずれの変換パターンが選択されているかが示されている。すなわち、ポップアップウィンドウ204には、「cycle:−」および「select:false」と記述されていることにより、実行サイクル数が未定であり、かつユーザによる選択がなされていないことが示されている。一方、ポップアップウィンドウ206には、「cycle:1500」および「select:true」と記述されていることより、実行サイクル数が1500サイクルであり、ユーザによりこの変換パターンが選択されていることが示されている。
この表示により、ユーザはソースレベルオプティマイザ3による変換の候補を知ることができるとともに、場合によっては実行サイクル数も知ることができ、いずれのソースとするのが望ましいかを選択することが可能となる。
ユーザはGUI処理部9を通じて上記変換パターンの候補のうちのいずれを選択するかを指定することができる。すなわち、表示画面200には、ユーザに2通りの変換パターンのうちのいずれかを選択される旨のメッセージ「いずれを選択しますか?」が表示されており、3通りのボタン208〜212が表示されている。ユーザがマウス等を利用してボタン208を押下すると、ポップアップウィンドウ204に示された1番目の変換パターンが選択され、ボタン210を押下すると、ポップアップウィンドウ206に示された2番目の変換パターンが選択される。また、ボタン212を押下すると、ユーザがいずれの変換パターンの選択をも行なわないこととなる。このため、変換パターンの選択が行なわれない場合には、コンパイラ5において、例えば、サイクル数の最も小さい変換パターンが選択され、機械語プログラム104が生成されることとなる。
変換パターンの選択結果は、プロファイラ部10に出力される。プロファイラ部10は、最終的にユーザの選択をプロファイル情報131として出力することができる。なお、プロファイル情報131の詳細については後述する。
図15は、デバッグ処理部8によりデバッグ処理された結果の表示画面であり、GUI処理部9により表示される。デバッグ表示画面300は、アセンブラプログラム表示ウィンドウ302と、変換前ソースプログラム表示ウィンドウ304と、変換後ソースプログラム表示ウィンドウ306と、コマンド入出力ウィンドウ308とを含む。
変換前ソースプログラム表示ウィンドウ304には、オリジナルソースプログラム101が表示される。なお、オリジナルソースプログラム101の行数も同時に表示される。
変換後ソースプログラム表示ウィンドウ306には、最適化ソースプログラム102が表示される。なお、最適化ソースプログラム102の行数も同時に表示される。
アセンブラプログラム表示ウィンドウ302には、最適化ソースプログラム102をコンパイルした後のアセンブラプログラムが表示される。なお、アセンブラプログラムの行数またはラベルも同時に表示される。
コマンド入出力ウィンドウ308は、デバッグ処理部8におけるデバッグの結果を表示したり、デバッグを行なう際のコマンドを入力したりするためのウィンドウである。
デバッグ表示画面300は、アセンブラプログラム表示ウィンドウ302に表示されたアセンブラプログラムに対応する機械語プログラムをシミュレータ部7にて実行した際の結果を示している。例えば、コマンド入出力ウィンドウ308に示されるように、オリジナルソースプログラム101の27行目において、本来正の値を取らなければならないループカウンタiの値が「−1」になっており、エラーであることが表示されている。なお、エラーを引き起こした箇所がアセンブラプログラム表示ウィンドウ302、変換前ソースプログラム表示ウィンドウ304および変換後ソースプログラム表示ウィンドウ306において、ハイライト表示されている。ユーザは、コマンド入出力ウィンドウ308にデバッグのための命令を入力したり、各変数に値を代入したりすることにより、アセンブラプログラム、オリジナルソースプログラム101および最適化ソースプログラム102のエラー箇所を対応付けて表示することができる。
プロファイラ部10は、シミュレータ部7から受け取った実行ログ情報132を解析し、ソースレベルオプティマイザ3での各ソース変換部分に関するサイクル数を計測して、最終デバッグ情報112に含まれているソース部分に対応づけてサイクル数を設定し、コンパイルシステム1における最適化のヒントとなるプロファイル情報131として出力する。さらに、GUI処理部9を通じてユーザがソース変換候補のいずれかを選択した場合には、その選択情報もプロファイル情報131として出力する。
図16は、プロファイラ部10が出力するプロファイル情報131の一例を示す図である。
プロファイル情報131は、タグ<ProfileInfo>およびタグ</ProfileInfo>で囲まれた部分である。なお、タグ<TransInfo>およびタグ</TransInfo>で囲まれた部分がコンパイル時における最適化時の支援情報となる最適化支援情報を示している。プロファイル情報131は、ソース変換デバッグ情報111内の最適化支援情報123に対応した各変換パターンに対応して、プロファイラ部10での実行ログ分析に基づく実行サイクル数の値が設定されている。また、GUI処理部9を通してユーザによって変換パターンが選択されているか否かを示す“true”もしくは“false”の選択状態の値が設定されている。図16に示されている最適化支援情報は、図9に示した最適化支援情報123と同様である。このため、その詳細な説明はここでは繰り返さない。
プロファイル情報131は、コンパイルシステム1のソースレベルオプティマイザ3に含まれるプロファイル情報活用最適化部33において活用されることになる。
図17は、プロファイル情報活用最適化部33の処理内容を示すフローチャートである。
プロファイル情報活用最適化部33は、プロファイル情報131を参照し、各ソース変換部分(タグ<TransInfo>およびタグ</TransInfo>で囲まれた部分)について、ユーザによっていずれかの候補パターンを選択する旨の情報が設定されているかどうかを判定する(S1)。すなわち、プロファイル情報活用最適化部33は、タグ<UserSelect>およびタグ</UserSelect>で囲まれた部分がTrueになっている候補パターンがあるか否かを判断する。
候補パターンを選択する旨の設定がされていた場合には(S1でYES)、プロファイル情報活用最適化部33は、ユーザによる選択指示に従って、コンパイル対象とする候補パターンを決定する(S2)。
候補パターンを選択する旨の設定がされていない場合には(S1でNO)、プロファイル情報活用最適化部33は、すべての変換候補に対してサイクル数が設定済みであるかどうかを判定する(S3)。すなわち、すべての変換候補について、タグ<cycle>およびタグ</cycle>で囲まれた部分に0以外の値が設定されているか否かを判定する。
すべての変換候補に対してサイクル数が設定済みであった場合には(S3でYES)、プロファイル情報活用最適化部33は、変換候補パターンの中から最もサイクル数が少ないパターンを、コンパイル対象とする候補パターンとして選択する(S4)。
サイクル数が未設定の変換候補パターンがある場合には(S3でNO)、サイクル数を設定するためのシミュレーションをデバッグシステム6のシミュレータ部7で行なわせるために、プロファイル情報活用最適化部33は、サイクル数が未設定の変換候補パターンのうちのいずれかを任意に選択する(S5)。選択された変換候補パターンは、コンパイル対象とされる。
図16に示した例では、2番目の変換候補パターン131bがユーザにより選択されている。したがって、変換候補パターン131bがコンパイル対象とされる。
本実施の形態によると、プログラム開発システム11では、機械語プログラム104とプロファイル情報131とを介してコンパイルシステム1とデバッグシステム6とを自動的に何度も起動しながら、徐々に機械語プログラム104を更新していくことができる。具体的には、ソースレベルオプティマイザ3で実施するソースレベル変換の複数の変換候補に対して、最もサイクル数が小さくなるパターンを自動的に選択して決定していくことができる。
このようにプログラム開発システム11では、ユーザのチューニングに要する工数を最小限に抑えつつ、最適なコードを生成することができる。
また、コンパイルシステム1においてソースレベルオプティマイザ3を採用した場合でも、オリジナルソースプログラム101に基づいたデバッグ情報(最終デバッグ情報112)を生成することができる。これに伴い、ユーザは、オリジナルソースプログラム101に基づいたソースレベルデバッグが可能となる。また、ソースレベルオプティマイザ3による行番号維持変換処理や、プリプロセッサ4やコンパイラ5による行調整処理などの複数の処理を組み合わせて活用することにより、ソース変換デバッグ情報111など、従来のコンパイルシステムにはない追加情報の情報量を極力削減することが可能となる。
以上、本発明に係るプログラム開発システムおよびその構成要素について、実施の形態に基づいて説明したが、本発明はこれらの実施形態に限られない。即ち、以下のような変形が考えられる。
(1)上記実施の形態では、C言語の言語仕様およびプリプロセッサ指示仕様を想定していたが、本発明はC言語のみに限定されるものではなく、他のプログラミング言語を採用した場合でも本発明の有意性は保たれる。
(2)上記実施の形態では、行番号テーブル情報121として、変換前後の行番号の対応関係を表構造で表しているが、本発明はこの情報仕様に限定されるものではない。例えば、行番号の変更ポイント(変更行)のみの集合を表現するといった仕様であったとしても本発明の有意性は保たれる。図18は、変更行のみの集合を表現した行番号テーブル情報の一例を示す図である。同図に示す行番号テーブル情報は、図7(a)に示した行番号テーブル情報121と同様の内容を示している。すなわち、変換前のプログラムであるオリジナルソースプログラム101の3行目から始まる行が変換後のプログラムである最適化ソースプログラム102の2行目から始まる行に対応することが示されている。また、オリジナルソースプログラム101の6行目から始まる行が最適化ソースプログラム102の8行目から始まる行に対応することも示されている。
(3)上記実施の形態では、シンボルテーブル情報122として、変更したシンボルの一対多の対応関係の表構造を採用しているが、本発明はこの情報仕様に限定されるものではない。例えば、複数シンボルに分割される場合は最終参照を採用する等のデバッグ仕様に基づいた一定のルールにしたがって一対一の対応関係の表構造を採用したとしても本発明の有意性は保たれる。図19は、一対一の対応関係の表構造を採用したシンボルテーブル情報の一例を示す図である。図19に示すシンボルテーブル情報は、図8に示したシンボルテーブル情報122と同様の内容を示す。ただし、図19に示すシンボルテーブル情報では、変換後のシンボル名が複数存在する場合には、最後に参照されるシンボル名のみを示している。例えば、オリジナルソースプログラム101におけるシンボル名bは、最適化ソースプログラム102においては、シンボル名b_1、b_2およびb_3に変換されるが、この3つのシンボル名のうち、最後に参照されるシンボル名がb_1であるため、図19に示すシンボルテーブル情報には、変換前シンボル名「b」と変換後シンボル名「b_1」とが対応付けられた記述されている。
(4)上記実施の形態では、図9に示すようにソース変換デバッグ情報111を変換後のソースプログラム(最適化ソースプログラム102)内にコメントとして出力しているが、本発明はこの出力方法に限定されるものではない。例えば、ソース変換デバッグ情報111を最適化ソースプログラム102とは別ファイルとして出力する仕様を採用したとしても本発明の有意性は保たれる。
(5)上記実施の形態では、コンパイルシステム1による最適化のためのプロファイル情報を出力するプロファイラ部10をデバッグシステム6内に内蔵していたが、本発明はこの構成に限定されるものではない。例えば、図20に示すようにプロファイラ部10を独立したプログラムであるプロファイラとして切り出したり、図21に示すようにプロファイラ部をコンパイラ内部に内蔵させたりしてプログラム開発システムを構成するようにしても本発明による効果を実現することができる。
(6)上記実施の形態では、コンパイルシステム1へのヒント情報をプロファイル情報131として入力していたが、本発明はこの指示方法に限定されるものではない。たとえば、ユーザがコンパイルシステム1に対する指示の一種であるコンパイルオプションとしてヒント情報を与えるという方法を採用してもよい。
(7)上記実施の形態では、デバッグシステム6のソース変換情報表示部91は図14のように変換前後の2つのソース部分を表示しているが、本発明はこれに限定されるものではない。ソース部分は2つに限られず、それ以上の変換候補に関する情報をデバッグ情報を介して伝達し、3つを超えるソース部分を同時もしくは選択的に表示するような構成にしてもよい。
(8)上記実施の形態では、プリプロセッサ4の行調整部41およびコンパイラ5の行番号調整部51において、ソースレベルオプティマイザ3で挿入された“#pragma”などのプラグマ指示を認識して行の調整を実施していたが、行調整のための指示としては、プラグマ指示には限定せず、特定の組み込み関数を解釈することによりソースレベルオプティマイザで組込み関数が挿入されたことを認識するような構成にしてもよい。
本発明は、コンパイルシステムやデバッグシステムを含んだプログラム開発システム等に適用できる。
本発明の実施の形態に係るプログラム開発システムの構成を示すブロック図である。 本発明の実施の形態に係るコンパイルシステムの構成を示すブロック図である。 行番号維持変換部におけるプログラム変換例を示す図である。 行番号維持変換部における他のプログラム変換例を示す図である。 行番号維持変換部における他のプログラム変換例を示す図である。 行番号維持変換部における他のプログラム変換例を示す図である。 行番号テーブル情報の一例を模式的に示す図である。 シンボルテーブル情報の一例を示す図である。 ソース変換デバッグ情報生成出力部が出力するソース変換デバッグ情報の一例を示す図である。 行調整部が解釈可能なプリプロセッサ指示文の一例を示した図である。 行調整部が実行する処理のフローチャートである。 行番号調整部が実行する処理のフローチャートである。 本発明の実施の形態に係るデバッグシステムの構成を示すブロック図である。 ソース変換情報表示部が表示したソース変換情報の一例を示す図である。 デバッグ処理部によりデバッグ処理された結果の表示画面を示す図である。 プロファイラ部が出力するプロファイル情報の一例を示す図である。 プロファイル情報活用最適化部の処理内容を示すフローチャートである。 変更行のみの集合を表現した行番号テーブル情報の一例を示す図である。 一対一の対応関係の表構造を採用したシンボルテーブル情報の一例を示す図である。 本発明の実施の形態に係るプログラム開発システムの他の構成を示すブロック図である。 本発明の実施の形態に係るプログラム開発システムの他の構成を示すブロック図である。
符号の説明
1 コンパイルシステム
2 ドライバ
3 ソースレベルオプティマイザ
4 プリプロセッサ
5 コンパイラ
6 デバッグシステム
7 シミュレータ部
8 デバッグ処理部
9 GUI処理部
10 プロファイラ部
11 プログラム開発システム
21 ユーザ指定オプション処理部
31 行番号維持変換部
32 ソース変換デバッグ情報生成出力部
33 プロファイル情報活用最適化部
41 行調整部
51 行番号調整部
52 最終デバッグ情報選択生成部
81 デバッグ情報選択部
91 ソース変換情報表示部
101 オリジナルソースプログラム
102 最適化ソースプログラム
103 プリプロセス後ソースプログラム
104 機械語プログラム
111 ソース変換デバッグ情報
112 最終デバッグ情報
121 行番号テーブル情報
122 シンボルテーブル情報
123 最適化支援情報
131 プロファイル情報
132 実行ログ情報

Claims (15)

  1. コンピュータを用いて、ソースプログラムを機械語プログラムに翻訳するコンパイルシステムであって、
    高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するソースプログラム変換手段と、
    前記第2ソースプログラムを機械語プログラムに変換するコンパイル手段と、
    前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示し、かつ前記第1ソースプログラムと前記機械語プログラムとの対応関係を表示させるために利用される第1デバッグ情報と前記第2ソースプログラムと前記機械語プログラムとの対応関係を示し、かつ前記第2ソースプログラムと前記機械語プログラムとの対応関係を表示させるために利用される第2デバッグ情報を生成するデバッグ情報生成手段と、
    前記第1デバッグ情報のみをデバッガにて読み込まれる機械語プログラムに含めてファイル出力する指示、前記第2デバッグ情報のみを前記機械語プログラムに含めてファイル出力する指示および前記第1デバッグ情報と前記第2デバッグ情報との双方を前記機械語プログラムに含めてファイル出力する指示のうちのいずれかの指示を受け付けるユーザ指定オプション処理手段と、
    前記ユーザ指定オプション処理手段が受け付けた指示に基づいて、前記第1デバッグ情報および前記第2デバッグ情報のいずれか一方または双方を選択して前記機械語プログラムに含めてファイル出力するデバッグ情報出力手段とを
    コンピュータにより実現することを特徴とするコンパイルシステム。
  2. 前記コンパイルシステムは、さらに、
    前記コンパイル手段の実行に先立って、前記第2ソースプログラムに含まれる指示文を解釈し、解釈した結果に基づく前処理を前記第2ソースプログラムに対して実行するプリプロセッサ手段と、
    前記プリプロセッサ手段において解釈された前記指示文のうち、前記ソースプログラム変換手段において追加された前記指示文を含む行を前記第2ソースプログラム中より削除する指示文削除手段とを備え、
    前記コンパイル手段は、前記指示文削除手段で前記指示文を含む行が削除された、前記プリプロセッサ手段により前記前処理が実行された後の前記第2ソースプログラムを前記機械語プログラムに変換する
    ことを特徴とする請求項1に記載のコンパイルシステム。
  3. 前記コンパイル手段は、前記第2ソースプログラムに含まれる指示文を解釈し、解釈した結果に基づく処理を実行するとともに、前記指示文のうち、前記ソースプログラム変換手段において追加された指示文を含む行については除いて前記第2ソースプログラムの行番号をカウントして、デバッガにて前記第1ソースプログラムまたは前記第2ソースプログラムの行数表示のために使用される行番号情報を生成し、
    前記行番号情報は、前記第1デバッグ情報または前記第2デバッグ情報の一部である
    ことを特徴とする請求項1または2に記載のコンパイルシステム。
  4. 前記指示文は、プリプロセッサ指示文または組込み関数である
    ことを特徴とする請求項2または3に記載のコンパイルシステム。
  5. 前記ソースプログラム変換手段は、前記第1ソースプログラムと前記第2ソースプログラムについて、変換によって変更のない行については同じ行番号となるように行番号の対応関係を維持しつつ、前記第1ソースプログラムを前記第2ソースプログラムに変換する行番号維持変換部を有する
    ことを特徴とする請求項1〜4のいずれか1項に記載のコンパイルシステム
  6. 前記行番号維持変換部は、前記第2ソースプログラムに含まれる変換後の文の行数が前記第1ソースプログラムに含まれる変換前の文の行数よりも大きい場合には、前記変換後の文に含まれる複数の文を1行に配置しなおすことにより、前記第1ソースプログラムに含まれる変換前の文の行数と前記第2ソースプログラムに含まれる変換後の文の行数とを等しくし、前記第1ソースプログラムを前記第2ソースプログラムに変換する
    ことを特徴とする請求項5に記載のコンパイルシステム。
  7. 前記行番号維持変換部は、前記第2ソースプログラムに含まれる変換後の文の行数が前記第1ソースプログラムに含まれる変換前の文の行数よりも小さい場合には、前記変換後の文に空行を挿入することにより、前記第1ソースプログラムに含まれる変換前の文の行数と前記第2ソースプログラムに含まれる変換後の文の行数とを等しくし、前記第1ソースプログラムを前記第2ソースプログラムに変換する
    ことを特徴とする請求項5に記載のコンパイルシステム。
  8. 前記ソースプログラム変換手段は、さらに、前記行番号維持変換部によりソースプログラムの変換に伴う変更点をまとめたソース変換デバッグ情報を生成するソース変換デバッグ情報生成部を備える
    ことを特徴とする請求項5〜7のいずれか1項に記載のコンパイルシステム。
  9. 前記ソース変換デバッグ情報は、前記第1ソースプログラムの行番号と前記第2ソースプログラムの行番号との対応関係を示す情報を含む
    ことを特徴とする請求項8に記載のコンパイルシステム。
  10. 前記ソース変換デバッグ情報は、前記第1ソースプログラムに含まれるシンボルと前記第2ソースプログラムに含まれるシンボルとの対応関係を示す情報を含む
    ことを特徴とする請求項8に記載のコンパイルシステム。
  11. 前記ソース変換デバッグ情報は、前記第1ソースプログラムに含まれる変換対象箇所の文と、前記第2ソースプログラムに含まれる当該変換対象箇所を変換した後の変換箇所の文とを含む
    ことを特徴とする請求項8に記載のコンパイルシステム。
  12. 前記ソース変換デバッグ情報生成部は、前記ソース変換デバッグ情報を、前記第2ソースプログラム中にコメントとして挿入する
    ことを特徴とする請求項8〜11のいずれか1項に記載のコンパイルシステム。
  13. 前記第1デバッグ情報は、前記ソース変換デバッグ情報を含む
    ことを特徴とする請求項8〜12のいずれか1項に記載のコンパイルシステム。
  14. コンピュータが、ソースプログラムを機械語プログラムに翻訳するコンパイル方法であって、
    高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するステップと、
    前記第2ソースプログラムを機械語プログラムに変換するステップと、
    前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示し、かつ前記第1ソースプログラムと前記機械語プログラムとの対応関係を表示させるために利用される第1デバッグ情報と前記第2ソースプログラムと前記機械語プログラムとの対応関係を示し、かつ前記第2ソースプログラムと前記機械語プログラムとの対応関係を表示させるために利用される第2デバッグ情報を生成するステップと、
    前記第1デバッグ情報のみをデバッガにて読み込まれる機械語プログラムに含めてファイル出力する指示、前記第2デバッグ情報のみを前記機械語プログラムに含めてファイル出力する指示および前記第1デバッグ情報と前記第2デバッグ情報との双方を前記機械語プログラムに含めてファイル出力する指示のうちのいずれかの指示を受け付けるステップと、
    受け付けた指示に基づいて、前記第1デバッグ情報および前記第2デバッグ情報のいずれか一方または双方を選択して前記機械語プログラムに含めてファイル出力するステップとを含む
    ことを特徴とするコンパイル方法。
  15. ソースプログラムを機械語プログラムに翻訳する、プロセッサおよびメモリを備えるコンピュータが実行可能なプログラムであって、
    プロセッサが、メモリに記憶されている高級言語で記述された第1ソースプログラムに対してソースプログラムレベルの最適化を施すことにより、前記第1ソースプログラムを高級言語で記述された第2ソースプログラムに変換するステップと、
    プロセッサが、前記第2ソースプログラムを機械語プログラムに変換するステップと、
    プロセッサが、前記第1ソースプログラムと前記第2ソースプログラムとの対応関係および前記第2ソースプログラムと前記機械語プログラムとの対応関係を分析することにより前記第1ソースプログラムと前記機械語プログラムとの対応関係を示し、かつ前記第1ソースプログラムと前記機械語プログラムとの対応関係を表示させるために利用される第1デバッグ情報と前記第2ソースプログラムと前記機械語プログラムとの対応関係を示し、かつ前記第2ソースプログラムと前記機械語プログラムとの対応関係を表示させるために利用される第2デバッグ情報を生成するステップと、
    プロセッサが、前記第1デバッグ情報のみをデバッガにて読み込まれる機械語プログラムに含めてファイル出力する指示、前記第2デバッグ情報のみを前記機械語プログラムに含めてファイル出力する指示および前記第1デバッグ情報と前記第2デバッグ情報との双方を前記機械語プログラムに含めてファイル出力する指示のうちのいずれかの指示を受け付けるステップと、
    プロセッサが、受け付けた指示に基づいて、前記第1デバッグ情報および前記第2デバッグ情報のいずれか一方または双方を選択して前記機械語プログラムに含めてファイル出力するステップとをコンピュータに実行させる
    ことを特徴とするプログラム。
JP2005337648A 2005-11-22 2005-11-22 コンパイルシステム Expired - Fee Related JP4822817B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2005337648A JP4822817B2 (ja) 2005-11-22 2005-11-22 コンパイルシステム
US11/555,449 US20070168984A1 (en) 2005-11-22 2006-11-01 Compiling system, debugging system and program development system
CNA2006101486718A CN1971518A (zh) 2005-11-22 2006-11-22 编译系统、调试系统及程序开发系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005337648A JP4822817B2 (ja) 2005-11-22 2005-11-22 コンパイルシステム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2011106687A Division JP2011175673A (ja) 2011-05-11 2011-05-11 デバッグシステムおよびプログラム開発システム

Publications (2)

Publication Number Publication Date
JP2007141173A JP2007141173A (ja) 2007-06-07
JP4822817B2 true JP4822817B2 (ja) 2011-11-24

Family

ID=38112358

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005337648A Expired - Fee Related JP4822817B2 (ja) 2005-11-22 2005-11-22 コンパイルシステム

Country Status (3)

Country Link
US (1) US20070168984A1 (ja)
JP (1) JP4822817B2 (ja)
CN (1) CN1971518A (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716643B2 (en) * 2005-05-20 2010-05-11 Microsoft Corporation Methods and apparatus for software profiling
US8683444B1 (en) * 2006-12-11 2014-03-25 Synopsys, Inc. System and method of debugging multi-threaded processes
JP5226328B2 (ja) * 2007-03-27 2013-07-03 パナソニック株式会社 コード変換装置
JP2009059005A (ja) * 2007-08-29 2009-03-19 Panasonic Corp デバッグシステム、デバッグ装置および方法
JP2009169864A (ja) * 2008-01-18 2009-07-30 Panasonic Corp コンパイル方法およびコンパイルプログラム
US9098626B2 (en) * 2008-04-01 2015-08-04 Oracle International Corporation Method and system for log file processing and generating a graphical user interface based thereon
JP2010108258A (ja) * 2008-10-30 2010-05-13 Panasonic Corp コンパイル方法及びコンパイルプログラム
JP5406549B2 (ja) * 2009-02-12 2014-02-05 株式会社日立製作所 プログラム変換方法、及び装置
US8224997B2 (en) * 2009-02-23 2012-07-17 International Business Machines Corporation Document source debugger
US8621435B2 (en) * 2009-12-23 2013-12-31 Microsoft Corporation Time debugging
US9111031B2 (en) * 2010-04-16 2015-08-18 Salesforce.Com, Inc. Method and system for simulating and analyzing code execution in an on-demand service environment
JP5589670B2 (ja) * 2010-08-19 2014-09-17 富士電機株式会社 デバッグ方法
US20120159444A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages
US8892951B2 (en) * 2011-09-28 2014-11-18 International Business Machines Corporation Fault localization for data-centric programs
CN105144003B (zh) * 2013-03-04 2017-04-05 三菱电机株式会社 程序开发辅助装置及其方法
US9274931B2 (en) * 2013-05-06 2016-03-01 International Business Machines Corporation Inserting implicit sequence points into computer program code to support debug operations
US20150277868A1 (en) * 2014-03-28 2015-10-01 International Business Machines Corporation Declared variable ordering and optimizing compiler
US9558101B2 (en) * 2014-08-08 2017-01-31 Raytheon Company Preprocessor directive symbol analyzer devices and methods
US9971581B1 (en) 2015-12-28 2018-05-15 Wells Fargo Bank, N.A. Programming language conversion
US10540262B2 (en) * 2016-10-17 2020-01-21 Microsoft Technology Licensing, Llc Using edit and continue to dynamically set and unset optimizations in source code while debugging
JP7115342B2 (ja) * 2019-01-31 2022-08-09 日本電信電話株式会社 デバッグ支援システムおよびデバッグ支援方法
CN110928779B (zh) * 2019-11-19 2023-04-25 抖音视界有限公司 文件处理方法、应用程序运行故障定位方法和设备
JP2022028455A (ja) * 2020-08-03 2022-02-16 富士通株式会社 変換補助プログラム、変換補助方法及び変換補助装置
US11941378B1 (en) * 2023-10-19 2024-03-26 Hud Software Platforms Ltd. System and method for utilizing production insights in generative AI models

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US86653A (en) * 1869-02-09 Improvement in razor-straps
US212440A (en) * 1879-02-18 Improvement in toe-weights for horses
US188187A (en) * 1877-03-06 Improvement in sucker-rod couplings
US277529A (en) * 1883-05-15 John m
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
IL100989A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Analysis of inductive expressions in multilingual mehadoptimization
JPH04367946A (ja) * 1991-06-17 1992-12-21 Nec Corp デバッグ情報出力方式
US5555419A (en) * 1993-01-06 1996-09-10 Digital Equipment Corporation Correlation system
US5713010A (en) * 1995-02-10 1998-01-27 Hewlett-Packard Company Source line tracking in optimized code
US5671416A (en) * 1995-02-24 1997-09-23 Elson; David Apparatus and a method for searching and modifying source code of a computer program
US6016474A (en) * 1995-09-11 2000-01-18 Compaq Computer Corporation Tool and method for diagnosing and correcting errors in a computer program
US5881288A (en) * 1995-09-29 1999-03-09 Matsushita Electric Industrial Co., Ltd. Debugging information generation system
JP3196675B2 (ja) * 1996-12-27 2001-08-06 日本電気株式会社 言語処理方式
JPH10207738A (ja) * 1997-01-27 1998-08-07 Nec Corp 言語処理システム
US6631518B1 (en) * 1997-03-19 2003-10-07 International Business Machines Corporation Generating and utilizing organized profile information
US6332212B1 (en) * 1997-10-02 2001-12-18 Ltx Corporation Capturing and displaying computer program execution timing
JP3551353B2 (ja) * 1998-10-02 2004-08-04 株式会社日立製作所 データ再配置方法
US6397382B1 (en) * 1999-05-12 2002-05-28 Wind River Systems, Inc. Dynamic software code instrumentation with cache disabling feature
US20020100031A1 (en) * 2000-01-14 2002-07-25 Miguel Miranda System and method for optimizing source code
US6658649B1 (en) * 2000-06-13 2003-12-02 International Business Machines Corporation Method, apparatus and article of manufacture for debugging a user defined region of code
US7293261B1 (en) * 2001-04-25 2007-11-06 Microsoft Corporation Language-neutral representation of software code elements
US7086046B2 (en) * 2001-07-30 2006-08-01 International Business Machines Corporation Method and apparatus for displaying compiler-optimizated code
US6964036B2 (en) * 2002-05-21 2005-11-08 International Business Machines Corporation Descriptive variables while debugging
JP2004192139A (ja) * 2002-12-09 2004-07-08 Sharp Corp デバッグ装置、デバッグ方法および記録媒体
US7152227B1 (en) * 2003-06-17 2006-12-19 Xilinx, Inc. Automated assessment of programming language coverage by one or more test programs
JP2005063121A (ja) * 2003-08-11 2005-03-10 Ricoh Co Ltd ソースコード変換装置、及びソースコード変換方法、ソースコード変換プログラム、記憶媒体

Also Published As

Publication number Publication date
CN1971518A (zh) 2007-05-30
JP2007141173A (ja) 2007-06-07
US20070168984A1 (en) 2007-07-19

Similar Documents

Publication Publication Date Title
JP4822817B2 (ja) コンパイルシステム
US7657878B2 (en) Compiler, method of compiling and program development tool
US7873948B2 (en) Method and system for split-compiling a hybrid language program
US5606697A (en) Compiler system for language processing program
US9081586B2 (en) Systems and methods for customizing optimization/transformation/ processing strategies
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US20080104096A1 (en) Software development system
CN106598556A (zh) 用户界面生成方法及装置
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
US20080250231A1 (en) Program code conversion apparatus, program code conversion method and recording medium
US20100199269A1 (en) Program optimization device and program optimization method
US10248545B2 (en) Method for tracking high-level source attribution of generated assembly language code
US8037463B2 (en) Computer program functional partitioning system for heterogeneous multi-processing systems
US8930925B2 (en) Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives
KR20170014613A (ko) 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
US7478376B2 (en) Computer program code size partitioning method for multiple memory multi-processing systems
CN102203733A (zh) 编译方法及编译程序
KR20090011974A (ko) 컴파일 대상 파일 추출 방법
KR100417655B1 (ko) 최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템
JP2007122187A (ja) プログラム・コード生成装置
JP2011175673A (ja) デバッグシステムおよびプログラム開発システム
GB2420638A (en) Method of substituting code fragments in Internal Representation
Gupta et al. Optimal code compiling in C
KR100846203B1 (ko) 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체
JP2019139675A (ja) ソースコード最適化装置、プログラムおよび方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080930

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100602

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110322

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110511

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110531

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110801

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110817

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110906

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140916

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees