JP2000207226A - コ―ド最適化装置、言語処理装置及びコ―ド最適化方法 - Google Patents

コ―ド最適化装置、言語処理装置及びコ―ド最適化方法

Info

Publication number
JP2000207226A
JP2000207226A JP11011033A JP1103399A JP2000207226A JP 2000207226 A JP2000207226 A JP 2000207226A JP 11011033 A JP11011033 A JP 11011033A JP 1103399 A JP1103399 A JP 1103399A JP 2000207226 A JP2000207226 A JP 2000207226A
Authority
JP
Japan
Prior art keywords
symbol
code
load module
information table
data
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.)
Pending
Application number
JP11011033A
Other languages
English (en)
Inventor
Chieko Yoshikawa
千恵子 吉川
Masaki Matsushita
正樹 松下
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP11011033A priority Critical patent/JP2000207226A/ja
Publication of JP2000207226A publication Critical patent/JP2000207226A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 プログラムのロードモジュールを生成する言
語処理系において、プログラムのコード上から不要なコ
ードを削除することによって、コードを最適化して、コ
ードの使用リソースの削減とともにコードの実行効率の
向上を実現する。 【解決手段】 入力されたプログラムのコード中で定義
されたシンボルが、生成すべきロードモジュールの実行
時に使用されるシンボルであるか否かを、各シンボルが
他のシンボルから参照されるか否かを示すシンボル参照
情報(80、90)に基づき判定するシンボル判定部
(30、40)と、判定結果に基づいて、入力されたプ
ログラムのコードから前記ロードモジュールの実行時に
使用されないシンボルに対応するコードを削除するコー
ド削除部50とを具備する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコード最適化装置、
言語処理装置及びコード最適化方法に関する。特に、プ
ログラムのロードモジュールを生成する言語処理系にお
いて、プログラムのコード上から不要なコードを削除す
ることによって、コードを最適化して、コードの使用リ
ソースの削減とともにコードの実行効率の向上を実現す
るための技術に関する。
【0002】
【従来の技術】一般に、プログラムのコードは、作成さ
れた後、所望する機能の確認のためにテストおよびデバ
ッグが繰り返し行われる。このテスト・デバッグにより
正常稼働が確認された後に、コンパイラやアセンブラな
ど、コードの言語体系に応じた言語処理システムを用い
て、プログラムソースから最終的なロードモジュールが
生成される。
【0003】また、これらのプログラムコードの作成お
よびデバッグの過程においては、必要に応じ、プログラ
ムコードの文法チェックを行なうシンタックス・チェッ
カーなどのツールが使用されていた。
【0004】
【発明が解決しようとする課題】しかしながら、従来の
言語処理システムには、以下の問題点があった。
【0005】即ち、最終的に得られたプログラムコード
の中には、プログラムソース作成当初またはテスト・デ
バッグ中にコーディングされながら実際には使用されな
いコードやデータ領域が多く含まれている。
【0006】従来の言語処理システムはこれらのコード
やデータ領域もコードの一部として、コードの全体を入
力としてそのままロードモジュールを生成していた。こ
のため、生成されるプログラムコードのサイズが増大し
ていた。このコードサイズの増大は有限なコンピュータ
のRAMメモリ・ROMメモリ・ディスク等のリソース
を圧迫する。又、プログラム自体の実行効率も低下させ
る。特に、マイコン用などの組み込み用のプログラム
は、リソースの制約が厳しい。このため、必要な機能が
十分搭載できない場合も生じていた。
【0007】また、一般に、プログラムが複雑化・高度
化するに従って、プログラムの修正の頻度も多くなる。
このため、近年のプログラムの機能の複雑・高度化は、
不要なコードやデータ領域をより増大させ、全体のコー
ドサイズをより膨大なものとしていた。
【0008】また、従来の言語処理システムで用いられ
ていたシンタックス・チェッカーは、単に与えられたプ
ログラムソースが各プログラミング言語の文法に従って
記載されているか否かをチェックするに過ぎない。従っ
て、ソース上でコメントアウトされた箇所など、プログ
ラマーが不要であると認識した上でコメント化した箇所
以外は、一意的にコードが不要であるか否かの判断をす
ることが不可能であった。
【0009】以上のように、本発明は、ロードモジュー
ルの実行時に実際には使用されないコードやデータ領域
も含めてロードモジュールを生成していたために、コー
ドサイズが増大化していたという問題点を解決するため
になされたものである。
【0010】そしてその目的とするところは、ロードモ
ジュールの実行時に実際には使用されないコードを予め
検出してこれらのコードを削除することで、コードサイ
ズを削減することを可能とするコード最適化装置、言語
処理装置およびコード最適化方法を提供することにあ
る。
【0011】また、他の目的は、この使用されないコー
ドの削除を、オブジェクトモジュールのリンクの際に行
うことによって、迅速かつ簡易に、最適化されたロード
モジュールを得ることにある。
【0012】
【課題を解決するための手段】上記の課題を達成するた
め、本発明は、コード上のデータやブロックに付与され
るシンボルに着目した。即ち、本発明の特徴は、このシ
ンボルの相互参照情報を生成して、この相互参照情報に
基づいて不要なコードを削除する点にある。
【0013】換言すれば、この相互参照情報を用いて、
他のシンボルから参照されないシンボルを未使用シンボ
ルとし、このシンボルに対応するコード領域・データ領
域を未使用領域としてコードから削除する点を要旨とす
る。
【0014】ここで、シンボルとは、プログラムのコー
ド上の変数などのデータに対して付与されるデータシン
ボルと、プログラムのコード上の1または複数の命令文
からなるコードブロックに対して付与されるコードシン
ボルとに大別される。これらのシンボルは、ソースプロ
グラムの作成の際や、デバッグの際に、コード上の実ア
ドレスを意識することなく、特定の変数や命令文への容
易なアクセスを可能としている。また、コード上でシン
ボルであるか否かは、プログラミング言語のそれぞれの
文法に基づいて容易に識別することができる。
【0015】かかる機能を実現するために、請求項1の
発明は、入力されたプログラムのコード中で定義された
シンボルが、生成すべきロードモジュールの実行時に使
用されるシンボルであるか否かを判定するシンボル判定
部と、前記シンボル判定部の判定結果に基づいて、前記
入力されたプログラムのコードから前記ロードモジュー
ルの実行時に使用されないシンボルに対応するコードを
削除するコード削除部とを具備することを特徴とするも
のである。
【0016】上記構成によれば、ロードモジュールの実
行時に使用されないシンボルに対応するコード領域・デ
ータ領域を、不要な領域として削除することが可能とな
る。つまり、実行すべき機能は維持したまま、コードサ
イズの削減が実現される。
【0017】また、請求項2の発明は、前記シンボル判
定部は、少なくとも、前記ロードモジュールに包含され
るシンボルが他のシンボルから参照されるか否かを示す
シンボル参照情報を生成するシンボル参照情報生成手段
と、前記シンボル参照情報を保持するシンボル参照情報
記憶手段とを具備し、前記シンボル参照情報に基づき、
処理すべきシンボルが前記ロードモジュールに包含され
る他のいずれのシンボルからも参照されない場合に、該
シンボルを使用されないシンボルと判定することによ
り、シンボルの相互参照情報に基づいて容易に処理すべ
きシンボルが実行時に使用されるか否かを判定すること
を可能とする。
【0018】また、請求項3の発明は、前記シンボル参
照情報は、入力されたプログラムのコード中のデータに
対して定義されたデータシンボルおよび/または前記コ
ード中の1または複数の命令文に対して定義されたコー
ドシンボルのそれぞれの属性情報と、前記コードシンボ
ルのそれぞれの、他のシンボルへの依存情報とからなる
ことにより、データシンボルおよびコードシンボルのい
ずれのシンボルについても、網羅的に使用されるシンボ
ルであるか否かを判定することを可能とする。
【0019】また、請求項4の発明は、前記属性情報
は、少なくとも各シンボルの識別子、シンボルが前記プ
ログラムのコードの外部から参照されるか否かを示すシ
ンボルタイプ、シンボルが前記データシンボルまたは前
記コードシンボルのいずれであるかを示すシンボル種
別、シンボルの対応するコード領域、およびシンボルが
実行時に使用されるか否かを示す使用フラグのいずれか
1つ以上を含むことにより、処理すべきシンボルのタイ
プ・属性に応じて柔軟に使用の判定を行うことを可能と
する。
【0020】また、請求項5の発明は、前記シンボル判
定部は、処理すべきシンボルが前記データシンボルであ
る場合には、前記依存情報を検索し、前記コードシンボ
ルに参照されるデータシンボルの前記使用フラグを、使
用を示す値に設定することにより、不要なデータシンボ
ルに関連する不要なデータ領域の削除を容易に行うこと
を可能とする。
【0021】また、請求項6の発明は、前記シンボル判
定部は、前記属性情報の使用フラグが使用の値を示す前
記コードシンボルについてのみ、さらに該コードシンボ
ルに参照される前記データシンボルの前記使用フラグの
設定を行うことにより、最終的に使用される可能性のあ
るデータシンボルのみについて使用の判定を行うことを
可能とする。従って、より効率よく不要なデータ領域の
削除が実現される。
【0022】また、請求項7の発明は、前記シンボル判
定部は、処理すべきシンボルが前記コードシンボルであ
る場合には、前記依存情報を検索し、他のコードシンボ
ルに参照される前記コードシンボルの前記使用フラグ
を、使用を示す値に設定することにより、不要なコード
シンボルに関連する不要なコード領域の削除を容易に行
うことを可能とする。
【0023】また、請求項8の発明は、前記シンボル判
定部は、前記コードシンボルの直前の命令が無条件分岐
命令である場合に、該コードシンボルの使用の判定を行
うことにより、他のシンボルから参照されなければ使用
される可能性のないコードシンボルを予め抽出すること
が可能となる。従って、より効率よく不要なコード領域
の削除が実現される。
【0024】また、請求項9の発明は、入力されたプロ
グラムのコード中で定義されたシンボルが、生成すべき
ロードモジュールの実行時に使用されるシンボルである
か否かを判定するシンボル判定部と、前記シンボル判定
部の判定結果に基づいて、前記入力されたプログラムの
コードから前記ロードモジュールの実行時に使用されな
いシンボルに対応するコードを削除するコード削除部
と、前記コード削除部が出力するコードからロードモジ
ュールを生成するロードモジュール生成部とを具備する
ことを特徴とする。
【0025】上記構成によれば、コード最適化の機能を
リンカが行うロードモジュールの生成の際に、同時に行
うことを可能とする。従って、既存の言語処理システム
などに容易にコード最適化機能を組み込んで、迅速に最
適化されたロードモジュールを得ることができる。
【0026】さらに、請求項10の発明は、入力された
プログラムのコード中で定義されたシンボルが、生成す
べきロードモジュールの実行時に使用されるシンボルで
あるか否かを判定するシンボル判定ステップと、前記シ
ンボル判定ステップの判定結果に基づいて、前記入力さ
れたプログラムのコードから前記ロードモジュールの実
行時に使用されないシンボルに対応するコードを削除す
るコード削除ステップとを具備することを特徴とする。
【0027】上記構成によれば、ロードモジュールの実
行時に使用されないシンボルに対応するコード領域・デ
ータ領域を、不要な領域として削除することが可能とな
る。つまり、実行すべき機能は維持したまま、コードサ
イズの削減が実現される。
【0028】また、請求項11の発明は、プログラムの
コード中で定義されたシンボルを抽出するシンボル抽出
ステップと、該抽出されたシンボルの属性情報および該
シンボルが生成すべきロードモジュールの実行時に使用
されるか否かを示す使用フラグを記録するシンボル属性
情報テーブルを生成するシンボル属性情報テーブル生成
ステップと、前記抽出されたシンボル中で前記コード中
の1または複数の命令文に対して定義されたコードシン
ボルが参照する他のシンボル情報を記録するシンボル依
存情報テーブルを生成するシンボル依存情報テーブル生
成ステップと、前記シンボル依存情報テーブルを検索
し、他のコードシンボルから参照されるコードシンボル
の前記使用フラグを使用を示す値に設定するコードシン
ボル使用判定ステップと、前記シンボル依存情報テーブ
ルを検索し、コードシンボルから参照されるコード中の
データに対して定義されたデータシンボルの前記使用フ
ラグを使用を示す値に設定するデータシンボル使用判定
ステップと、前記使用フラグが未使用を示す値のシンボ
ルに対応するコードを削除するコード削除ステップとを
含むことを特徴とする。
【0029】上記構成によれば、ロードモジュールの実
行時に使用されないシンボルに対応するコード領域・デ
ータ領域を、不要な領域として削除することが可能とな
る。つまり、実行すべき機能は維持したまま、コードサ
イズの削減が実現される。
【0030】さらに、請求項12の発明は、コンピュー
タに、入力されたプログラムのコード中で定義されたシ
ンボルが、生成すべきロードモジュールの実行時に使用
されるシンボルであるか否かを判定させるシンボル判定
ステップと、前記シンボル判定ステップの判定結果に基
づいて、前記入力されたプログラムのコードから銭ロー
ドモジュールの実行時に使用されないシンボルに対応す
るコードを削除させるコード削除ステップとを含むこと
を特徴とする。
【0031】上記構成によれば、ロードモジュールの実
行時に使用されないシンボルに対応するコード領域・デ
ータ領域を、不要な領域として削除することが可能とな
る。つまり、実行すべき機能は維持したまま、コードサ
イズの削減が実現される。
【0032】また、請求項13の発明は、コンピュータ
に、プログラムのコード中で定義されたシンボルを抽出
させるシンボル抽出ステップと、該抽出されたシンボル
の属性情報および該シンボルが生成すべきロードモジュ
ールの実行時に使用されるか否かを示す使用フラグを記
録するシンボル属性情報テーブルを生成させるシンボル
属性情報テーブル生成ステップと、前記抽出されたシン
ボル中で前記コード中の1または複数の命令文に対して
定義されたコードシンボルが参照する他のシンボル情報
を記録するシンボル依存情報テーブルを生成させるシン
ボル依存情報テーブル生成ステップと、前記シンボル依
存情報テーブルを検索させ、他のコードシンボルから参
照されるコードシンボルの前記使用フラグを使用を示す
値に設定させるコードシンボル使用判定ステップと、前
記シンボル依存情報テーブルを検索させ、コードシンボ
ルから参照されるコード中のデータに対して定義された
データシンボルの前記使用フラグを使用を示す値に設定
させるデータシンボル使用判定ステップと、前記使用フ
ラグが未使用を示す値のシンボルに対応するコードを削
除させるコード削除ステップとを含むことを特徴とす
る。
【0033】上記構成によれば、ロードモジュールの実
行時に使用されないシンボルに対応するコード領域・デ
ータ領域を、不要な領域として削除することが可能とな
る。つまり、実行すべき機能は維持したまま、コードサ
イズの削減が実現される。
【0034】
【発明の実施の形態】以下、図面を用いて、本発明の実
施形態を詳細に説明する。
【0035】第1の実施形態 第1の実施形態は、内部定義および外部定義のデータシ
ンボル並びに内部参照されるコードシンボルに対応する
未使用コードを削除する機能を提供するものである。こ
こで、内部定義のデータシンボルとは、例えば図6に示
すS1、S2、S4、S6のように、プログラムのコー
ドの内部で定義され、内部でのみ使用されるデータシン
ボルをいう。外部定義のデータシンボルとは、例えば図
6に示すS3、S5のように、プログラムのコードの外
部で定義され、他のコードからも使用されるデータシン
ボルをいう。また、内部参照のコードシンボルとは、例
えば図8(a)のL1、L2、L3のように、プログラ
ムの内部で定義され、内部でのみ使用されるコードシン
ボルをいう。第1の実施形態において、この未使用コー
ドの削除は、複数のリロケータブルオブジェクトから1
つのロードモジュールを生成するリンクの際に行われ
る。
【0036】図1に示すように、本発明の第1の実施形
態に係るコード最適化装置1は、ソースプログラム70
が入力されるソースプログラム入力部10と、入力され
たソースプログラムのコードを解析し、シンボルおよび
各シンボルに関連する情報を抽出するシンボル情報解析
部20と、抽出されたシンボル情報をシンボル定義情報
テーブル80・シンボル依存情報テーブル90に対して
登録するシンボルテーブル作成部30と、シンボルテー
ブルにアクセスしてロードモジュール中で使用されない
未使用シンボルを検索する未使用シンボル検索部40
と、未使用シンボルに対応する未使用コード領域を削除
するコード削除部50と、未使用コード領域削除後のコ
ードからロードモジュールを生成し、最適化されたコー
ド92を出力する最適化コード出力部60とにより構成
される。
【0037】尚、シンボル定義情報テーブル80および
シンボル依存情報テーブル90は、関係型データベース
・メモリ上のデータテーブルなど、アクセスのタイミン
グ・データ規模に応じて任意の配置場所・編成方式とす
ることが可能である。例えば、ソースプログラム入力部
10・シンボル情報解析部20・シンボルテーブル作成
部30をアセンブラまたはコンパイラに実装し、他方未
使用シンボル検索部40・コード削除部50・最適化コ
ード出力部60をリンカに実装する場合には、アセンブ
ラとリンカの処理タイミングは一般に異なる。このた
め、各テーブルを外部記憶装置上の関係型データベース
などに配置することが好ましい。一方、ソースプログラ
ム入力部10・シンボル情報解析部20・シンボルテー
ブル作成部30・未使用シンボル検索部40・コード削
除部50・最適化コード出力部60を専用のオプティマ
イザーやアセンブラまたはコンパイラなどに一括して実
装する場合には、処理効率の向上のため、メモリ上にこ
れらのテーブルを展開することが好ましい。尚、各テー
ブルの内容詳細は後述される。
【0038】次に、第1の実施形態におけるハードウエ
ア構成を説明する。第1の実施形態に係るコード最適化
装置1およびこのコード最適化装置を含む言語処理装置
の実施には、以下で説明する処理を実現するプログラム
を作成し、この作成したプログラムをロードすることで
これらの処理を実行可能とするコンピュータシステムを
用いる。このコンピュータシステムには、いわゆる汎用
機、ワークステーション、PC、NC(Netowork Compu
ter)等が含まれる。第1の実施形態で用いるコンピュ
ータのハードウエアは、各種処理を行うためのCPU
と、プログラムメモリ・データメモリ等のメモリと、F
D・CD等の外部記憶装置と、キーボード・マウス等の
入力装置と、ディスプレー・プリンタ等の出力装置とを
備える。
【0039】さらに、第1の実施形態を実施するコンピ
ュータシステムは、単一のコンピュータであってもよ
く、また例えばローカルまたはリモートにネットワーク
接続されたサーバーマシンとクライアントマシンとによ
り構成されてもよい。ソフトウエアの開発規模や開発人
員構成に応じて、ソースプログラム70、最適化コード
92、シンボル定義情報テーブル80、シンボル依存情
報テーブル90などの各データや言語処理システム自体
を適宜サーバーマシン上に配置してもよい。
【0040】尚、上述したコード最適化装置を実現する
ためのプログラムは、各種記憶媒体に保存することがで
きる。かかる記憶媒体を、上記ハードウエアを具備する
コンピュータが読み出し、当該プログラムを実行するこ
とにより、本発明を実施することができる。ここで記憶
媒体とは、例えばメモリ・磁気ディスク・光ディスク
等、プログラムを記憶することができ、かつコンピュー
タが読みとることが可能な記憶媒体であれば、その記憶
形式はいずれの形態であってもよい。
【0041】第1の実施形態は上記のように構成されて
おり、以下その処理の流れを順に説明する。
【0042】まず、処理内容の説明に先立って、第1の
実施形態と言語処理システムとの関連を説明する。
【0043】図16に示すように、言語処理システムに
おいては、一般にまず仕様に従ってソースプログラム1
00を記述する(S100)。このソースプログラム1
00がアセンブラ言語で記述されている場合にはアセン
ブラが、一方ソースプログラム100が高級言語で記述
されている場合にはコンパイラが、オブジェクトプログ
ラム(モジュール)110を生成する(S110)。こ
の1または複数のオブジェクトプログラム110を入力
としてリンカが実行可能なロードモジュール120を生
成する(S120)。尚、ソースプログラム100が例
えばC言語におけるinclude文などにより外部にあるデ
ータ定義領域などを取り込んでいる場合には、ソースプ
ログラムのコンパイル(S110)の前に、プリコンパ
イラなどによりinclude文を展開ステップが挿入され
る。
【0044】この言語処理システムにおいて、第1の実
施形態は、図1のソースプログラム入力部10・シンボ
ル情報解析部20・シンボルテーブル作成部30の行う
各ソースプログラムに対応するシンボル定義情報テーブ
ル80およびシンボル依存情報テーブル90の作成を、
アセンブルのステップ(S110)で行う。一方、図1
の未使用シンボル検索部40・コード削除部50・最適
化コード出力部60の行うシンボル定義情報テーブル8
0およびシンボル依存情報テーブル90に基づく未使用
シンボルの検索および未使用コードの削除を、リンクの
ステップ(S120)で行う。尚、以下において、特に
説明しない限り、ソースプログラムのプログラミング言
語はアセンブラとして説明する。
【0045】次に、第1の実施形態の行う不要コード削
除の処理の概略をシンボルの種類に応じて説明する。
【0046】(1)データシンボルに対応したコード削
除処理 図6に示すように、まずアセンブラで記述された3つの
ソースプログラム(prog1.asm,prog2.asm,prog3.asm)
をそれぞれアセンブルして対応する3つの再配置可能な
オブジェクトプログラム(prog1.rel,prog2.rel,prog3.
rel)を生成し、次にこれら3つのオブジェクトプログ
ラム(prog1.rel,prog2.rel,prog3.rel)をリンクして
1つのロードモジュールを生成する場合を想定する。図
6に示すように、prog1.asm中ではS1およびS2が変
数を定義するデータシンボルとして記述されている。同
様に、prog2.asm中ではS3およびS4が、prog3.asm中
ではS5およびS6がそれぞれ変数を定義するデータシ
ンボルとして記述されている。
【0047】尚、extern文により、prog3.asm中で定義
されるS5、S6は、外部(即ち、prog2.asmの外部コ
ードであるprog3.asm)から定義される外部変数シンボ
ルであり、prog1.asmがS3を、prog2.asmがS5をそれ
ぞれ外部変数として定義して参照していることが理解さ
れる。
【0048】このアセンブルの際に、ソースプログラム
中のシンボル(S1、S2、S3、S4、S5、S6)
が抽出され、この抽出されたシンボルの定義情報が図7
に示すシンボル定義情報テーブルに登録される。図7の
シンボル定義情報テーブルは、少なくとも入力されたプ
ログラム上で定義された全シンボルの識別子と当該シン
ボルがプログラム中で実際に使用されるか否かを示す使
用フラグとを含む。尚、アセンブルの際には、図7のシ
ンボルテーブル中の各シンボルの使用フラグは、すべて
初期値である”未使用”状態にセットされている。尚、
図7のシンボル定義情報テーブルは理解のために図1に
示すシンボル定義情報テーブル80を簡略化して示した
ものであり、該テーブルの項目の詳細は後述される。
【0049】次に、3つのオブジェクトプログラムをリ
ンクする際に、リンクされる3つのオブジェクトプログ
ラム中のシンボル間の相互参照の情報が検索され、他の
シンボルから参照されるシンボルの使用フラグには”使
用”の値がセットされる。図6の3つのソースコード間
では、シンボルS2、S3、S4、S5、S6は他のシ
ンボルから参照されるため、これらのシンボルの使用フ
ラグが”使用”に置き換えられる。従って、使用フラグ
が”未使用”であるデータシンボルS1に対応するデー
タ領域(”s1 db 11”のステートメントに対応するデー
タ領域)がコードから削除され、削除後のコードにより
ロードモジュールが生成される。即ち、リンカは、図7
のシンボル定義情報テーブル内の使用フラグをセット
し、かつシンボル定義情報テーブルを用いて、各オブジ
ェクトで定義されているデータシンボル(S1、S2、
S3、S4、S5、S6)が、実際にロードモジュール
中で使用されるシンボルであるか否かを使用フラグを用
いてチェックする。リンカは、この使用フラグに従い、
使用されないシンボルが検出された場合には、このデー
タシンボルに対応するデータ領域はリンクの対象外とす
ることで、使用されない不要なコードを削除する。
【0050】(2)コードシンボルに対応したコード削
除処理 図8(a)に示すアセンブラコードを、第1の実施形態
を用いて処理した場合を想定する。図8(a)に示すよ
うに、L1、L2、L3のシンボルがそれぞれコード中
の各ブロックに付与された内部コードシンボルである。
尚、コードシンボルの使用フラグのセットにおいては、
データシンボルの場合のような他のコードシンボルから
の相互参照情報の他に、当該コードシンボルの直前の命
令の種類が考慮される。例えば、図8(a)のL1、L
2、L3の内部コードシンボルの内でL1の直前の命令
は、”jump L2”の無条件分岐命令である。従って、L
1のブロックは、他のブロック中で参照されない限り、
分岐されて処理されることはないブロックであることが
理解される。図8(a)のコード中では、L1は他のブ
ロックから参照されていない。このため、図9に示すよ
うに、オブジェクトプログラムのリンクの際に、シンボ
ル定義情報テーブル80中ではL1のシンボルの使用フ
ラグは”未使用”の値がセットされる。他方、コードシ
ンボルの直前の命令が無条件分岐命令でない場合には、
たとえ他から参照されなくとも実行時に制御が渡る可能
性がある。このため、当該コードシンボルの使用フラグ
は、一律”使用”の値にセットされる。
【0051】次に、”未使用”状態であるL1のシンボ
ルに後続するコードブロックB1が削除され、図8
(b)に示す削除後のコードによるロードモジュールが
生成される。
【0052】尚、上記ではアセンブラのソースコードの
場合を説明したが、以下にC言語のソースコードの場合
を説明する。図12(a)に示されるソースコードを第
1の実施形態を用いて処理した場合を想定する。
【0053】図12(a)のソースプログラム上では、
add_a_b、str_cpy、およびmul_a_bがそれぞれ1つ
のシンボルブロックに対応する関数シンボルである。図
12(a)のソースプログラム上では、最初の関数シン
ボルadd_a_bの宣言位置から次に出現する関数シンボ
ルstr_cpyの宣言位置までが1つのシンボルブロックを
形成する。str_cpy以下も同様に、ある外部シンボルの
宣言位置から次の外部シンボルの宣言位置までがそれぞ
れ1つのシンボルブロックを形成する。
【0054】シンボルテーブル作成部30は、各ソース
プログラム毎に、1つのシンボル定義情報テーブル80
を作成する。図13にシンボル定義情報テーブル80の
内容を示す。図13から理解されるように、図12
(a)のソースプログラム内で宣言されるすべての関数
シンボルの名称add_a_b、str_cpy、およびmul_a_b
と各シンボルの使用フラグが定義されている。図13
は、図12(a)に基づいて作成されたシンボル定義情
報テーブル80の内容を示す。add_a_bおよびmul_a
_bの関数のコードシンボルの使用フラグは”使用”の
値がセットされている。一方、str_cpyの関数のコード
シンボルの使用フラグは”未使用”の値がセットされて
いる。
【0055】次に、”未使用”状態であるstr_cpyの関
数のコードシンボルに後続するコードブロックB3が削
除され、図12(b)に示す削除後のコードによるロー
ドモジュールが生成される。
【0056】次に、不要なコードの判定処理に関し、主
にシンボルテーブル作成部30および未使用シンボル検
索部40が行う処理の詳細を説明する。
【0057】(3)アセンブルの際の処理 まず、ソースプログラムのアセンブルの際に行われるシ
ンボルテーブル作成部30の処理の詳細について、図2
に示すフローチャートに基づき、以下に説明する。
【0058】図2に示すように、まずS10は、ソース
プログラム70を読み込む。S20は、入力されたソー
スプログラム70の字句をソースプログラムのプログラ
ミング言語の言語体系に従って解析する。S30は、S
20の解析結果に従い、ソースプログラム中で定義され
たシンボル情報を抽出する。S32は、抽出されたシン
ボル情報をシンボル定義情報テーブル80に登録する。
【0059】図4は、シンボル定義情報テーブル80の
各シンボルごとのエントリーの詳細の一例を示す図であ
る。図4に示すように、シンボル定義情報テーブル80
は、抽出された各シンボルごとに、シンボル名2、シン
ボルタイプ3、シンボル種別4、格納アドレス5、シン
ボルインデックス6、および使用フラグ7の各項目を有
する。シンボル名2は、プログラム中で定義されている
シンボルの名称を示す。シンボルタイプは、データシン
ボルの場合当該シンボルが同一のコード内部で定義され
る内部定義シンボルであるか、または外部のコードで定
義されこの外部定義をコード内で宣言することで参照可
能とされる外部定義シンボルであるかのいずれかを示
す。また、コードシンボルの場合、当該シンボルが同一
のコード内部でしか参照されない内部参照シンボルであ
るか、外部のコードから参照される外部参照シンボルで
あるかのいずれかを示す。尚、ここで同一のコードと
は、特に説明しない限り同一のソースコード(例えば図
6のprog1.asm,prog2.asm,prog3.asmのそれぞれ)をい
う。
【0060】シンボル種別4は、当該シンボルがデータ
に対して定義されたデータシンボル(例えば、図6のS
1、S2、S3、S4、S5、S6)であるか、コード
に対して定義されたコードシンボル(例えば、図8
(a)のL1、L2、L3)であるかのいずれかを示
す。格納アドレス5は、当該アドレスに対応するコード
領域のスタートアドレスおよび終了アドレスを示す。
尚、格納アドレス5は、マイコン用プログラムなどでR
OM上などに固定的に格納されるアブソリュートオブジ
ェクトモジュールであれば、絶対アドレスを用いて記述
されてよい。一方、再配置可能なモジュールであれば、
モジュールのエントリーアドレスからの相対アドレスを
用いて記述されてよい。シンボルインデックス6は、後
述するシンボル依存情報テーブル90などから参照され
る各シンボルについての識別子であるが、直接シンボル
名2が参照される場合には不要となる。使用フラグ7
は、当該シンボルが他のシンボルから参照されるか否か
を示すフラグであり、アセンブルの段階では初期値であ
る”未使用”状態にセットされている。
【0061】図4では、glob1、L1、func
1、in1の4つのシンボルのエントリーがそれぞれ登
録されている。
【0062】次に、S34は、さらに各コードシンボル
が他のどのシンボルを参照しているかを示すシンボル依
存情報を抽出する。コードシンボルは、コード中の1つ
のラベルから次のラベルまでを1つのシンボルブロック
として、各シンボルブロックに付与されたシンボルであ
る。図8(a)では、L1、L2、L3がそれぞれ該当
する。これらのコードシンボルの付与されたシンボルブ
ロック中で、他のコードシンボルやデータシンボルを参
照していた場合には、当該コードシンボルと参照される
コードシンボル・データシンボルとは依存関係を有す
る。
【0063】S36は、抽出されたシンボル依存情報に
従って、シンボル依存情報テーブル90を生成する。図
5に示すように、シンボル依存情報テーブル90は、シ
ンボルインデックス22と各コードシンボルに包含され
る(即ち、各コードシンボルのシンボルブロック中で参
照される)シンボルインデックス23の項目を有する。
図5では、シンボルS2は、S5およびS6のシンボル
を参照し、シンボルS3はS7のシンボルを参照するこ
とが依存情報として登録されている。
【0064】(4)リンクの際の処理 次に、オブジェクトプログラムのリンクの際に行われる
未使用シンボル検索部40およびコード削除部50の処
理の詳細について、図3のフローチャートに基づき、以
下に説明する。
【0065】図3に示すように、S40は、アセンブラ
の出力を読み込む。S42は、複数のオブジェクトプロ
グラムを1つのロードモジュールにリンクする場合に
は、各オブジェクトプログラムごとに作成されたシンボ
ル定義情報テーブル80を1つのシンボル定義情報テー
ブル80に結合する。同様に、S44は、複数のオブジ
ェクトプログラムをリンクする場合には、各オブジェク
トプログラムごとに作成されたシンボル依存情報テーブ
ル90を1つのシンボル依存情報テーブル90に結合す
る。
【0066】S46は、結合されたシンボル依存情報テ
ーブル90上で、包含されるシンボル23に登録されて
いるシンボルインデックス中のコードシンボルを検索す
る。この検索されたコードシンボル中で、シンボルを含
む命令文の直前の命令文が無条件分岐命令であるコード
シンボルが抽出される。S46は、シンボル定義情報テ
ーブル80中の抽出されたコードシンボルに対応するシ
ンボルインデックス6のエントリーの使用フラグ7を”
使用”状態にセットする。一方、全てのコードシンボル
の中で直前の命令文が無条件分岐命令以外の命令である
コードシンボルの使用フラグ7は、包含されるシンボル
23に登録されているか否かに拘わらず”使用”にセッ
トされる。
【0067】尚、コードシンボルであるかデータシンボ
ルであるかは、シンボル定義情報テーブル80中の対応
するシンボルインデックスのシンボル種別4を検索する
ことにより判定される。このS46の処理により、コー
ドシンボルの使用フラグがシンボル間の相互参照情報に
従ってセットされる。
【0068】S48は、シンボル定義情報テーブル80
中で、使用フラグ7が”使用”状態にセットされている
コードシンボルに関し、対応するシンボル依存情報テー
ブル90中の包含されるシンボル23に登録されている
データシンボルを検索する。S48は、このデータシン
ボルのシンボルインデックス6に対応するエントリーの
使用フラグ7を”使用”状態にセットする。このS48
の処理により、データシンボルの使用フラグがシンボル
間の相互参照情報に従ってセットされる。尚、コードシ
ンボルに包含されるデータシンボルの検索において、必
ずしも”使用”状態のコードシンボルのみを検索対象と
することを要さない。シンボル依存情報テーブル90の
すべてのエントリーを検索してもよい。但し、未使用の
コードシンボルが参照するデータシンボルは結局実行時
に参照されることはない。従って、検索対象を”使用”
状態のコードシンボルに限定することによって、データ
シンボル使用のチェックを効率よく実行することが可能
となる。
【0069】最後にS50は、シンボル定義情報テーブ
ル80上で使用フラグ7が”未使用”状態であるシンボ
ルに対応するコード部分を格納アドレス5から求め、入
力されたアセンブラ出力のコードから該当するアドレス
のコード部分を削除して削除後の最適化されたコードを
出力する。
【0070】第1の実施形態によれば、以下のような効
果が得られる。
【0071】すなわち、アセンブル段階で、各ソースプ
ログラムに対応したシンボルを抽出して、各シンボルの
種別、対応アドレス等のシンボル情報を記録するシンボ
ル定義情報テーブル80を作成する。また、抽出された
シンボル中のコードシンボルについてコードシンボルに
包含されるコードシンボルおよびデータシンボルの対応
関係を記録するシンボル依存情報テーブル90を作成す
る。また、リンク段階で、シンボル依存情報テーブル9
0およびシンボル定義情報テーブル80のシンボル間の
相互参照情報を用いて、各シンボルが他のシンボルから
参照される場合に、当該シンボルを”使用”状態にセッ
トする。これにより、ロードモジュールを生成する際
に、”未使用”状態であるシンボルに対応するコードを
削除することによって、与えられたコード中の不要なコ
ードを削除した最適化コードを容易にえることが可能と
なる。
【0072】不要なコードシンボルの削除によって、主
にロードモジュールの実行に係るROM領域が削減でき
る。他方、不要なデータシンボルの削除によって、主に
ロードモジュールの実行に係るRAM領域が削減でき
る。
【0073】また、これらの未使用シンボルの検出およ
び未使用シンボルに対応するコードの削除を、既存の言
語処理システムのリンカなどの処理に組み込むことによ
って、言語処理の処理効率を損なうことなく、迅速かつ
容易に最適化コードを得ることができる。
【0074】尚、第1の実施形態は、アセンブラ言語で
作成されたコードの例を説明したが、第1の実施形態は
他の言語、例えばC言語などの高級言語にも適用できる
ことは言うまでもない。即ち、第1の実施形態は、アセ
ンブラのみならず、他の高級言語で記述されたソースプ
ログラムにもこれらの言語体系に応じてシンボル情報抽
出などを行うことで適用できる。予めシンボルを付与し
てコーディングされたソースプログラムであれば、いか
なる言語体系のソースプログラムに対してでも第1の実
施形態を適用することができる。また、アセンブラ、リ
ンカなどの言語処理システムの一部に実装されてもよい
が、専用の最適化ツールとして実施できることも言うま
でもない。また、シンボル定義情報テーブル80および
シンボル依存情報テーブル90は、1つのテーブルとし
て編成されてもよい。
【0075】第2の実施形態 以下、本発明の第2の実施形態において、第1の実施形
態と異なる点についてのみ、図面を用いて詳細に説明す
る。
【0076】第2の実施形態は、第1の実施形態の内部
コードシンボルの使用フラグの情報に基づいて、アセン
ブラソースプログラム中の外部参照されるコードシンボ
ルに対応する未使用コードを削除する機能を提供するも
のである。
【0077】第2の実施形態において、この未使用コー
ドの削除は、複数のリロケータブルオブジェクトから1
つのロードモジュールを生成するリンクの際に行われ
る。
【0078】第2の実施形態の機能構成(図1)および
ハードウエア構成は、第1の実施形態と同様であるた
め、説明は省略される。
【0079】以下、第2の実施形態に係るコード最適化
装置および方法の処理の流れにつき説明する。以下で
は、図2のS10が、図10に示されるアセンブラのソ
ースプログラムを読み込んだ場合を例として説明する。
【0080】図2のフローチャートに示される処理手順
に従い、シンボルテーブル作成部30は、シンボル定義
情報テーブル80およびシンボル依存情報テーブル90
を作成する。図10のソースプログラム上では、_fu
nc1、_func2、および_func3がそれぞれ
1つのシンボルブロックに対応する外部シンボルであ
る。シンボル_func1、_func2、および_f
unc3はともに、publicステートメントで宣言されて
いることから、外部シンボルとして用いられることが理
解される。図10のソースプログラム上では、最初の外
部シンボル_func1の宣言位置から次の外部シンボ
ル_func2の宣言位置までが1つのシンボルブロッ
クを形成する。_func2以下も同様に、ある外部シ
ンボルの宣言位置から次の外部シンボルの宣言位置まで
がそれぞれ1つのシンボルブロックを形成する。
【0081】第2の実施形態においては、シンボルテー
ブル作成部30は、各外部シンボル毎に、1つのシンボ
ル定義情報テーブル80を作成する。図11(a)に外
部シンボル_func1に対応するシンボル定義情報テーブ
ル80の内容を示す。図11(a)から理解されるよう
に、外部シンボル_func1に対応するシンボルブロ
ック内で宣言されるすべてのシンボルの名称_func
1,_l11,_l12,_l13と各シンボルの使用フ
ラグが定義されている。
【0082】図11(b)に外部シンボル_func2
に対応するシンボル定義情報テーブル80の内容を示
す。図11(b)から理解されるように、外部シンボル
_func2に対応するシンボルブロック内で宣言され
るすべてのシンボルの名称_func2,_l21,_l
22と各シンボルの使用フラグが定義されている。ま
た、各コードシンボルについて、当該コードシンボル中
で参照されているシンボルが、シンボル依存情報テーブ
ル90中に登録される。図10に示すソースプログラム
においては、内部コードシンボル_l11のブロックお
よび_l21中で、コードシンボル_l11を参照して
いる。一方、他のコードシンボルは参照されていない。
従って、シンボル依存情報テーブル90中の_l11お
よび_l21に包含されるシンボルとして_l11が記
録される。
【0083】次に、オブジェクトモジュールのリンクの
際には、未使用シンボル検索部40は、まず、複数オブ
ジェクトモジュールをリンクする場合には、シンボル依
存情報テーブル90を結合する。同時に、各外部コード
シンボル(外部シンボルブロック)についての図11
(a)および図11(b)の各シンボル定義情報テーブ
ル80を結合する。未使用シンボル検索部40は、さら
に、シンボル依存情報テーブル90に定義された他のコ
ードシンボルから参照されるコードシンボル_l11を
検索する。ここで、内部コードシンボル_l11の直前
は無条件分岐命令であるので、未使用シンボル検索部4
0は、シンボル定義情報テーブルの_l11のエントリ
の使用フラグを”使用”状態にセットする。同時に、_
l11のコードシンボルを包含する_func1の外部
シンボルに対応する、シンボル定義情報テーブル80の
エントリの使用フラグも”使用”状態にセットする。シ
ンボル定義情報テーブル80中の外部コードシンボルの
エントリ(_func1,_func2)は、各外部シ
ンボルブロックに対応するシンボル定義情報テーブル8
0中に定義される全てのシンボルの使用フラグが”未使
用”状態である場合に、当該外部シンボルブロック自体
も”未使用”であると判断されて”未使用”状態のまま
となる。一方、外部シンボルブロックに含まれるシンボ
ル中のいずれかのシンボルの使用フラグが”使用”状態
にセットされていれば、当該外部シンボルブロックの使
用フラグ自体も”使用”状態にセットされる。
【0084】コード削除部50は、シンボル定義情報テ
ーブル80中で、使用フラグが”使用”状態である外部
コードシンボルに対応するコード領域を削除する。図1
0のソースプログラムの場合には、外部コードシンボル
_func2の使用フラグは”未使用”状態を示す。従
って、外部コードシンボル_func2に対応するコー
ド領域(図10のB2)が削除され、削除後のコードに
基づいてオブジェクトコードがリンクされ、ロードモジ
ュールが生成される。
【0085】第2の実施形態によれば、以下のような効
果が得られる。
【0086】すなわち、アセンブル段階で、同一コード
内で内部参照される内部コードシンボルと、これら内部
コードシンボルを包含する外部から参照される外部コー
ドシンボルとの対応関係に応じてシンボル定義情報テー
ブル80を作成する。また、抽出されたシンボル中のコ
ードシンボルについてコードシンボルに包含されるコー
ドシンボルおよびデータシンボルの対応関係を記録する
シンボル依存情報テーブル90を作成する。また、リン
ク段階で、シンボル依存情報テーブル90およびシンボ
ル定義情報テーブル80のシンボル間の相互参照情報を
用いて、各外部コードシンボルに包含されるいずれかの
内部コードシンボルが他のシンボルから参照される場合
に、当該外部コードシンボルを”使用”状態にセットす
る。これにより、ロードモジュールを生成する際に、”
未使用”状態である外部コードシンボルに対応するコー
ドを削除することによって、与えられたコード中の不要
なコードを削除した最適化コードを容易に得ることが可
能となる。
【0087】第3の実施形態以下、本発明の第3の実施
形態について、第1および第2の実施形態と異なる点に
ついてのみ、図面を用いて詳細に説明する。
【0088】第3の実施形態は、1つのリロケータブル
オブジェクトから1つのロードモジュールを生成する場
合に、第1および第2の実施形態でリンクの際に行われ
ていたデータシンボル・コードシンボルに対応するコー
ド領域の削除を、アセンブルまたはコンパイルの際に同
時に行う機能を提供するものである。
【0089】第3の実施形態の機能構成(図1)および
ハードウエア構成は、第1の実施形態と同様であるた
め、説明は省略される。
【0090】以下、第3の実施形態に係るコード最適化
装置および方法の処理の流れにつき説明する。以下で
は、図2のS10が、図14に示されるC言語のソース
プログラムを読み込んだ場合を例として説明する。
【0091】図2のフローチャートに示される処理手順
に従い、シンボルテーブル作成部30は、シンボル定義
情報テーブル80およびシンボル依存情報テーブル90
を作成する。図14のC言語のソースプログラム上で
は、glob1,glob2,glob3,およびgl
ob4がそれぞれ変数を示すデータシンボルとして定義
されている。
【0092】第3の実施形態においては、1つのソース
プログラムから1つのロードモジュールが作成される。
このため、図14のソースプログラムを読み込んだ時点
で、各データシンボルが実際に使用されているか否かを
判断することができる。図14のプログラム中では、コ
ード中の関数の中で使用されているデータシンボルは、
glob1,glob2、およびglob4である。一
方、データシンボルglob3はコード中で使用されて
いないことが理解される。
【0093】シンボルテーブル作成部30は、各ソース
プログラム毎に、1つのシンボル定義情報テーブル80
を作成する。また、ソースプログラム中で用いられるコ
ードシンボル(関数シンボル)main,func1についてシン
ボル依存情報テーブル90のエントリーを作成する。図
14に示すように、main関数はglob1およびglo
b2を包含するため、glob1およびglob2はシ
ンボル依存情報テーブル90中に包含されるシンボルと
して登録される。一方、func1関数はglob4を包含
するため、glob4はシンボル依存情報テーブル90
中に包含されるシンボルとして登録される(テーブル内
容は図示せず)。
【0094】第3の実施形態では、図1の未使用シンボ
ル検索部40、コード削除部50、および最適化コード
出力部60はコンパイラまたはアセンブラに実装され
る。
【0095】即ち、図14のソースプログラムのコンパ
イルの際には、未使用シンボル検索部40は、図14の
ソースプログラムに対応する1つのシンボル定義情報テ
ーブル80および1つのシンボル依存情報テーブル90
を検索して、シンボル間の相互参照情報に基づき、他か
ら参照されるデータシンボルの使用フラグを、初期値
の”未使用”から”使用”状態にセットする。図14の
例では、未使用シンボル検索部40は、まずシンボル依
存情報テーブル90を検索する。この検索結果に基づ
き、コードシンボル(関数)から参照されるデータシン
ボルglob1、glob2およびglob4の使用フ
ラグを”使用”状態にセットする。
【0096】コード削除部50は、シンボル定義情報テ
ーブル80中で、使用フラグが”使用”状態である関数
コードシンボルに対応するコード領域を削除する。図1
5に示すように、最終的にシンボル定義情報テーブル8
0中のglob3の使用フラグのみが”未使用”状態を
示す。従って、データシンボルglob3に対応するコ
ード中のデータ領域(”char glob3”に対応するデータ
領域)が削除され、削除後のコードに基づいてオブジェ
クトコードがリンクされ、ロードモジュールが生成され
る。
【0097】第3の実施形態によれば、以下のような効
果が得られる。
【0098】すなわち、単一のソースプログラムから1
つのロードモジュールを生成する際に、アセンブラ言語
の場合はアセンブラ、高級言語の場合にはコンパイラに
コード最適化装置を実装することができる。これによ
り、アセンブルまたはコンパイルの際に同時にコードの
最適化が行われる。従って、単一のソースプログラムか
ら1つのロードモジュールを生成するなどの比較的小規
模な開発環境においても、簡易かつ迅速にコード最適化
を実現することが可能となる。
【0099】尚、上記ではC言語のコードにおけるコー
ド最適化を説明したが、第3の実施形態をアセンブラの
コードにおけるコード最適化にも適用可能であることは
言うまでもない。
【0100】
【発明の効果】以上説明したように、本発明によれば、
以下に記載されるような効果を奏する。
【0101】即ち、本発明においては、コード上のシン
ボルの相互参照情報を用いてプログラム上で定義されて
いるが実際には使用されないシンボルを判定する機能を
提供する。このシンボルの使用・未使用をチェックする
ことによって、未使用のシンボルに対応するコード領域
を削除することができる。従って、ロードモジュールの
コードサイズを削減するとともに、ロードモジュールの
実行効率を向上させることが可能となる。この不要なコ
ード領域は一般にコードが複雑化・大規模化するのに対
応して増大する。従って、これら複雑・大規模化したコ
ードはさらに多くのコードサイズ削減の利益が享受でき
る。
【0102】このコードサイズの削減は、データシンボ
ルについてはデータ領域がロードされるRAM領域サイ
ズの削減によってもたらされる。一方、コードシンボル
についてはコードが格納されるROM領域サイズの削減
によってもたらされる。さらに、データシンボルでかつ
シンボルの付与される変数等が初期値を有する場合に
は、ROM・RAM双方の領域サイズの削減によっても
たらされる。
【0103】また、このコード最適化(コードサイズ削
減)をオブジェクトモジュールのリンクの際に行うこと
によって、迅速に最適化されたロードモジュールを得る
ことができる。従って、このコード最適化を既存の言語
処理システムに容易に組み込み、言語処理システムの処
理効率を維持したままコードサイズの削減を実現するこ
とが可能となる。
【0104】このように、本発明を用いれば、不要なコ
ードの削減が実現され、ひいては限られたコンピュータ
リソースを用いてより高度な機能の実現がもたらされ
る。
【図面の簡単な説明】
【図1】本発明の第1の実施形態に係るコード最適化装
置および言語処理装置の機能構成を示すブロック図であ
る。
【図2】本発明の第1の実施形態に係るコード最適化方
法のアセンブルの際の処理アルゴリズムを示すフローチ
ャートである。
【図3】本発明の第1の実施形態に係るコード最適化方
法のリンクの際の処理アルゴリズムを示すフローチャー
トである。
【図4】本発明に係るシンボル定義情報テーブルの内容
の一例を示す図である。
【図5】本発明に係るシンボル依存情報テーブルの内容
の一例を示す図である。
【図6】第1の実施形態における入力ソースプログラム
およびロードモジュール生成までの処理の概要を説明す
る図である。
【図7】第1の実施形態におけるシンボル定義情報テー
ブルの一部の項目内容の一例を示す図である。
【図8】第1の実施形態における入力ソースプログラム
および最適化された出力コードの一例を示す図である。
【図9】第1の実施形態におけるシンボル定義情報テー
ブルの一部の項目内容の一例を示す図である。
【図10】第2の実施形態における入力ソースプログラ
ムの一例を示す図である。
【図11】第2の実施形態における各外部シンボルに対
応するシンボル定義情報テーブルの一部の項目内容の一
例を示す図である。
【図12】第1の実施形態における入力ソースプログラ
ムおよび最適化された出力コードの他の一例を示す図で
ある。
【図13】第1の実施形態におけるシンボル定義情報テ
ーブルの一部の項目内容の他の一例を示す図である。
【図14】第3の実施形態における入力ソースプログラ
ムの一例を示す図である。
【図15】第3の実施形態におけるシンボル定義情報テ
ーブルの一部の項目内容の一例を示す図である。
【図16】言語処理システムのソースプログラム作成か
らロードモジュール生成までの一連の処理手順を説明す
る図である。
【符号の説明】
1 コード最適化装置 10 ソースプログラム入力部 20 シンボル情報解析部 30 シンボルテーブル作成部 40 未使用シンボル検索部 50 コード削除部 60 最適化コード出力部 70 ソースプログラム 80シンボル定義情報テーブル 90シンボル依存情報テーブル 92 最適化コード

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 入力されたプログラムのコード中で定義
    されたシンボルが、生成すべきロードモジュールの実行
    時に使用されるシンボルであるか否かを判定するシンボ
    ル判定部と、 前記シンボル判定部の判定結果に基づいて、前記入力さ
    れたプログラムのコードから前記ロードモジュールの実
    行時に使用されないシンボルに対応するコードを削除す
    るコード削除部とを具備することを特徴とするコード最
    適化装置。
  2. 【請求項2】 前記シンボル判定部は、少なくとも、 前記ロードモジュールに包含されるシンボルが他のシン
    ボルから参照されるか否かを示すシンボル参照情報を生
    成するシンボル参照情報生成手段と、 前記シンボル参照情報を保持するシンボル参照情報記憶
    手段とを具備し、 前記シンボル参照情報に基づき、処理すべきシンボルが
    前記ロードモジュールに包含される他のいずれのシンボ
    ルからも参照されない場合に、該シンボルを使用されな
    いシンボルと判定することを特徴とする請求項1に記載
    のコード最適化装置。
  3. 【請求項3】 前記シンボル参照情報は、 入力されたプログラムのコード中のデータに対して定義
    されたデータシンボルおよび/または前記コード中の1
    または複数の命令文に対して定義されたコードシンボル
    のそれぞれの属性情報と、 前記コードシンボルのそれぞれの、他のシンボルへの依
    存情報とからなることを特徴とする請求項1または2に
    記載のコード最適化装置。
  4. 【請求項4】 前記属性情報は、少なくとも各シンボル
    の識別子、シンボルが前記プログラムのコードの外部か
    ら参照されるか否かを示すシンボルタイプ、シンボルが
    前記データシンボルまたは前記コードシンボルのいずれ
    であるかを示すシンボル種別、シンボルの対応するコー
    ド領域、およびシンボルが実行時に使用されるか否かを
    示す使用フラグのいずれか1つ以上を含むことを特徴と
    する請求項3に記載のコード最適化装置。
  5. 【請求項5】 前記シンボル判定部は、処理すべきシン
    ボルが前記データシンボルである場合には、 前記依存情報を検索し、前記コードシンボルに参照され
    るデータシンボルの前記使用フラグを、使用を示す値に
    設定することを特徴とする請求項4に記載のコード最適
    化装置。
  6. 【請求項6】 前記シンボル判定部は、前記属性情報の
    使用フラグが使用の値を示す前記コードシンボルについ
    てのみ、さらに該コードシンボルに参照される前記デー
    タシンボルの前記使用フラグの設定を行うことを特徴と
    する請求項5に記載のコード最適化装置。
  7. 【請求項7】 前記シンボル判定部は、処理すべきシン
    ボルが前記コードシンボルである場合には、 前記依存情報を検索し、他のコードシンボルに参照され
    る前記コードシンボルの前記使用フラグを、使用を示す
    値に設定することを特徴とする請求項4に記載のコード
    最適化装置。
  8. 【請求項8】 前記シンボル判定部は、前記コードシン
    ボルの直前の命令が無条件分岐命令である場合に、該コ
    ードシンボルの使用の判定を行うことを特徴とする請求
    項7に記載のコード最適化装置。
  9. 【請求項9】 入力されたプログラムのコード中で定義
    されたシンボルが、生成すべきロードモジュールの実行
    時に使用されるシンボルであるか否かを判定するシンボ
    ル判定部と、 前記シンボル判定部の判定結果に基づいて、前記入力さ
    れたプログラムのコードから前記ロードモジュールの実
    行時に使用されないシンボルに対応するコードを削除す
    るコード削除部と、 前記コード削除部が出力するコードからロードモジュー
    ルを生成するロードモジュール生成部とを具備すること
    を特徴とする言語処理装置。
  10. 【請求項10】 入力されたプログラムのコード中で定
    義されたシンボルが、生成すべきロードモジュールの実
    行時に使用されるシンボルであるか否かを判定するシン
    ボル判定ステップと、 前記シンボル判定ステップの判定結果に基づいて、前記
    入力されたプログラムのコードから前記ロードモジュー
    ルの実行時に使用されないシンボルに対応するコードを
    削除するコード削除ステップとを含むことを特徴とする
    コード最適化方法。
  11. 【請求項11】 プログラムのコード中で定義されたシ
    ンボルを抽出するシンボル抽出ステップと、 該抽出されたシンボルの属性情報および該シンボルが生
    成すべきロードモジュールの実行時に使用されるか否か
    を示す使用フラグを記録するシンボル属性情報テーブル
    を生成するシンボル属性情報テーブル生成ステップと、 前記抽出されたシンボル中で前記コード中の1または複
    数の命令文に対して定義されたコードシンボルが参照す
    る他のシンボル情報を記録するシンボル依存情報テーブ
    ルを生成するシンボル依存情報テーブル生成ステップ
    と、 前記シンボル依存情報テーブルを検索し、他のコードシ
    ンボルから参照されるコードシンボルの前記使用フラグ
    を使用を示す値に設定するコードシンボル使用判定ステ
    ップと、 前記シンボル依存情報テーブルを検索し、コードシンボ
    ルから参照されるコード中のデータに対して定義された
    データシンボルの前記使用フラグを使用を示す値に設定
    するデータシンボル使用判定ステップと、 前記使用フラグが未使用を示す値のシンボルに対応する
    コードを削除するコード削除ステップとを含むことを特
    徴とするコード最適化方法。
  12. 【請求項12】 コンピュータに、入力されたプログラ
    ムのコード中で定義されたシンボルが、生成すべきロー
    ドモジュールの実行時に使用されるシンボルであるか否
    かを判定させるシンボル判定ステップと、 前記シンボル判定ステップの判定結果に基づいて、前記
    入力されたプログラムのコードから前記ロードモジュー
    ルの実行時に使用されないシンボルに対応するコードを
    削除させるコード削除ステップとを含むことを特徴とす
    るコード最適化プログラムを記憶したコンピュータ読み
    取り可能な記憶媒体。
  13. 【請求項13】 コンピュータに、プログラムのコード
    中で定義されたシンボルを抽出させるシンボル抽出ステ
    ップと、 該抽出されたシンボルの属性情報および該シンボルが生
    成すべきロードモジュールの実行時に使用されるか否か
    を示す使用フラグを記録するシンボル属性情報テーブル
    を生成させるシンボル属性情報テーブル生成ステップ
    と、 前記抽出されたシンボル中で前記コード中の1または複
    数の命令文に対して定義されたコードシンボルが参照す
    る他のシンボル情報を記録するシンボル依存情報テーブ
    ルを生成させるシンボル依存情報テーブル生成ステップ
    と、 前記シンボル依存情報テーブルを検索させ、他のコード
    シンボルから参照されるコードシンボルの前記使用フラ
    グを使用を示す値に設定させるコードシンボル使用判定
    ステップと、 前記シンボル依存情報テーブルを検索させ、コードシン
    ボルから参照されるコード中のデータに対して定義され
    たデータシンボルの前記使用フラグを使用を示す値に設
    定させるデータシンボル使用判定ステップと、 前記使用フラグが未使用を示す値のシンボルに対応する
    コードを削除させるコード削除ステップとを含むことを
    特徴とするコード最適化プログラムを記憶したコンピュ
    ータ読み取り可能な記憶媒体。
JP11011033A 1999-01-19 1999-01-19 コ―ド最適化装置、言語処理装置及びコ―ド最適化方法 Pending JP2000207226A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11011033A JP2000207226A (ja) 1999-01-19 1999-01-19 コ―ド最適化装置、言語処理装置及びコ―ド最適化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11011033A JP2000207226A (ja) 1999-01-19 1999-01-19 コ―ド最適化装置、言語処理装置及びコ―ド最適化方法

Publications (1)

Publication Number Publication Date
JP2000207226A true JP2000207226A (ja) 2000-07-28

Family

ID=11766768

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11011033A Pending JP2000207226A (ja) 1999-01-19 1999-01-19 コ―ド最適化装置、言語処理装置及びコ―ド最適化方法

Country Status (1)

Country Link
JP (1) JP2000207226A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7373641B2 (en) 2001-12-20 2008-05-13 International Business Machines Corporation Method, computer unit and program for converting a program
JP2014206948A (ja) * 2013-04-16 2014-10-30 株式会社東芝 エントリーポイント抽出装置
US10521203B2 (en) 2017-03-15 2019-12-31 Fujitsu Limited Apparatus and method to facilitate extraction of unused symbols in a program source code
CN113835686A (zh) * 2020-06-08 2021-12-24 华为技术有限公司 代码处理方法和装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7373641B2 (en) 2001-12-20 2008-05-13 International Business Machines Corporation Method, computer unit and program for converting a program
JP2014206948A (ja) * 2013-04-16 2014-10-30 株式会社東芝 エントリーポイント抽出装置
US10521203B2 (en) 2017-03-15 2019-12-31 Fujitsu Limited Apparatus and method to facilitate extraction of unused symbols in a program source code
CN113835686A (zh) * 2020-06-08 2021-12-24 华为技术有限公司 代码处理方法和装置

Similar Documents

Publication Publication Date Title
US5313387A (en) Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US5325531A (en) Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5182806A (en) Incremental compiler for source-code development system
US5170465A (en) Incremental-scanning compiler for source-code development system
US7571427B2 (en) Methods for comparing versions of a program
US5201050A (en) Line-skip compiler for source-code development system
US5193191A (en) Incremental linking in source-code development system
CN100462920C (zh) 为优化的程序生成展开信息
US11579856B2 (en) Multi-chip compatible compiling method and device
JP2000507373A (ja) インタラクティブソフトウェア開発システム
JPH08512152A (ja) インクリメンタル生成システム
US20070011664A1 (en) Device and method for generating an instruction set simulator
US20090049431A1 (en) Method and compiler of compiling a program
US20080127151A1 (en) Source Code Modification Technique
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
JP2020119348A (ja) 解析プログラム、解析方法および解析装置
US5301327A (en) Virtual memory management for source-code development system
AU638999B2 (en) Incremental compiler for source-code development system
Rosen A compiler-building system developed by Brooker and Morris: including a comprehensive discussion of the major features of the system
JP2000207226A (ja) コ―ド最適化装置、言語処理装置及びコ―ド最適化方法
GB2420638A (en) Method of substituting code fragments in Internal Representation
CN114489653A (zh) 基于编译器的数据处理方法、装置以及可读存储介质
CN105843661A (zh) 一种面向主机系统的代码重定位方法及其系统
JP3461185B2 (ja) ロードモジュールへのソースコード行番号登録方法および装置
CN116775127B (zh) 一种基于RetroWrite框架的静态符号执行插桩方法