JP2002312176A - 変換プログラム、コンパイラ、コンピュータ装置、プログラム変換方法及び記憶媒体 - Google Patents

変換プログラム、コンパイラ、コンピュータ装置、プログラム変換方法及び記憶媒体

Info

Publication number
JP2002312176A
JP2002312176A JP2001102343A JP2001102343A JP2002312176A JP 2002312176 A JP2002312176 A JP 2002312176A JP 2001102343 A JP2001102343 A JP 2001102343A JP 2001102343 A JP2001102343 A JP 2001102343A JP 2002312176 A JP2002312176 A JP 2002312176A
Authority
JP
Japan
Prior art keywords
sign extension
instruction
program
sign
compiler
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.)
Granted
Application number
JP2001102343A
Other languages
English (en)
Other versions
JP3763516B2 (ja
Inventor
Motohiro Kawahito
基弘 川人
Hideaki Komatsu
秀昭 小松
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2001102343A priority Critical patent/JP3763516B2/ja
Priority to US10/102,389 priority patent/US7278138B2/en
Publication of JP2002312176A publication Critical patent/JP2002312176A/ja
Application granted granted Critical
Publication of JP3763516B2 publication Critical patent/JP3763516B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • 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
    • G06F8/4441Reducing the execution time required by the program code

Abstract

(57)【要約】 【課題】 プログラム中の冗長な符号拡張命令を除去
し、プログラムの実行効率の向上を図る。 【解決手段】 コンピュータを制御して実行プログラム
を変換する変換プログラム、特にコンパイラ10であっ
て、この実行プログラムに対し、この実行プログラム中
で定義されている値を符号拡張するための符号拡張命令
に関する解析を行う機能と、この解析結果に応じて、こ
の実行プログラム中の符号拡張命令のうち、所定の符号
拡張命令を除去する機能とをコンピュータに実現させ
る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラム中の冗
長な符号拡張命令を除去することにより、プログラムの
実行効率の向上を図る方法に関する。
【0002】
【従来の技術】コンパイラでプログラムをコンパイルす
る場合に、CPUのアーキテクチャにおけるレジスタサ
イズよりも小さいサイズの値としてプログラム中で定義
されている値に関しては、当該CPUのレジスタサイズ
に補正した後に計算するようにコードを生成することと
なる。
【0003】例えば、64ビットアーキテクチャ(演算
処理やデータ転送を64ビットで行い、64ビットのメ
モリ・アドレッシングが可能な仕様)では、レジスタイ
メージは64ビットである。そのため、プログラム中の
32ビット、16ビット、8ビットの各値は、符号拡張
により64ビットの値として計算する必要がある。ここ
で、符号拡張とは、定義されている値の最上位ビットで
ある符号ビットのさらに上位に当該符号ビットと同じ値
を入れることである。
【0004】図18に示すサンプルプログラムにおい
て、「extend()」は32ビットから64ビットへの符号
拡張を意味し、「i」はプログラム内で32ビットの変
数と仮定する。この例で、「mem」が32ビットのメモ
リ内の値で0xffffffff(符号付き32ビットで「−
1」)と仮定する場合、符号拡張命令(図中(1)行)
を実行しないと、配列アクセス(図中(2)行)におい
て誤った結果となってしまう。そこで、符号拡張により
値のビット数をCPUのレジスタイメージに対応させる
ことが必要となる。
【0005】
【発明が解決しようとする課題】64ビットアーキテク
チャにおいて、32ビットの値の演算を中心とする言語
(例えばJava)をコンパイルしようとすると、メモ
リからのロードだけではなく、ほとんどの整数型命令に
対して符号拡張が必要となる。そして、図18の(1)
行に示したように符号拡張命令を挿入すれば、その分だ
け当該プログラムの実行速度が低下することとなる。
【0006】ところで、32ビットアーキテクチャ(す
なわち、レジスタサイズが32ビット)においても、1
6ビットや8ビットの値を扱う場合には符号拡張が必要
となる。これに対し、32ビットアーキテクチャのCP
UであるIA−32では、メモリからのロードと符号拡
張とを同時に行う命令(MOVSX、MOVZX)が存
在する。したがって、この命令を用いる場合には、符号
拡張によるCPUの負荷を考慮する必要はない。
【0007】しかし、現時点で64ビットアーキテクチ
ャにおいては、メモリからのロードと符号拡張とを同時
に行う命令が一般に知られておらず、かつシステムやア
プリケーションの多くが32ビットアーキテクチャを前
提として設計されているという今日的状況においては、
結果として、多くの整数型命令に対して符号拡張命令が
必要となり、プログラムの実行速度を下げることとな
る。
【0008】そこで、本発明は、プログラム中の冗長な
符号拡張命令を除去し、プログラムの実行効率の向上を
図ることを目的とする。また、本発明は、プログラムを
コンパイルする際に、冗長な符号拡張命令を除去するこ
とにより、実行効率の高いオブジェクトプログラムを生
成するコンパイラを提供することを他の目的とする。
【0009】
【課題を解決するための手段】上記の目的を達成する手
段として、本発明は、コンピュータを制御して実行プロ
グラムを変換する変換プログラムであって、この実行プ
ログラムに対し、この実行プログラム中で定義されてい
る値を符号拡張するための符号拡張命令に関する解析を
行う機能と、この解析結果に応じて、この実行プログラ
ム中の符号拡張命令のうち、所定の符号拡張命令を除去
する機能とをコンピュータに実現させることを特徴とす
る。
【0010】ここで、除去すべき冗長な符号拡張命令と
しては、所定の符号拡張命令における入力値が入力以前
に符号拡張されている場合におけるこの符号拡張命令が
ある。また、所定の符号拡張命令における出力結果が、
この出力結果が使用される全ての場所において符号拡張
以前のデータサイズ以下で使用されている場合における
この符号拡張命令がある。したがって、上記の変換プロ
グラムにて実現される符号拡張命令を除去する機能は、
これらの条件に該当する符号拡張命令を除去する機能を
含む。
【0011】また、この符号拡張命令を除去する機能
は、選択的にいずれかを除去すべき複数の符号拡張命令
がある場合に、実行頻度の高い符号拡張命令を除去する
構成とすることができる。
【0012】上述した変換プログラムは、磁気ディスク
や光ディスク、半導体メモリなどの記録媒体に記録して
配布したり、プログラム伝送装置の記録装置に格納しネ
ットワークを介して配信したりすることにより、提供す
ることができる。
【0013】また、本発明は、プログラミング言語で記
述されたプログラムのソースコードを機械語コードに変
換するコンパイラにおいて、このプログラムを実行する
CPUのレジスタサイズよりも小さいサイズの値として
このプログラム中で定義されている値に関して、この値
のデータサイズを補正するための補正命令をこのプログ
ラムに付加する補正命令生成部と、この補正命令生成部
にて付加された補正命令のうち、所定の補正命令を除去
する命令除去処理部とを備えることを特徴とする。
【0014】ここで、この命令除去処理部が除去すべき
冗長な補正命令としては、一定の条件の下で、配列アク
セスのアドレス計算のために付加された前記補正命令が
ある。かかる一定の条件には、言語仕様に基づいて定め
られる条件も含まれる。また、この命令除去処理部は、
この所定の値に関してこのプログラムにおけるループ処
理の外側と内側のいずれか一方で補正命令を除去可能な
場合に、このループ処理の内側に位置する補正命令を除
去する構成とすることができる。さらに、これらの条件
に該当する補正命令を除去するため、この命令除去処理
部は、使用−定義連鎖及び定義−使用連鎖を用いる構成
とすることができる。
【0015】また、本発明は、プログラムのソースコー
ドをコンパイルして機械語コードに変換するコンパイラ
と、機械語コードに変換されたプログラムを実行する処
理装置とを備えたコンピュータ装置において、このコン
パイラは、このプログラム中で定義されている値を符号
拡張するためにこのプログラム中に挿入されている符号
拡張命令のうち、所定の符号拡張命令を除去することを
特徴とする。
【0016】ここで、このコンパイラは、所定の符号拡
張命令における入力値が入力以前に符号拡張されている
場合、所定の符号拡張命令における出力結果が、この出
力結果が使用される全ての場所において符号拡張以前の
データサイズ以下で使用されている場合に、これらの符
号拡張命令を除去する。また、このコンパイラは、一定
の条件の下で、配列アクセスのアドレス計算のために付
加された前記補正命令を除去する。さらに、このコンパ
イラは、実行頻度の高い符号拡張命令から順に、冗長な
命令かどうかを判断し、除去する。
【0017】また、本発明は、コンピュータを制御して
プログラムを変換するプログラム変換方法において、こ
の実行プログラムに対し、このプログラム中で定義され
ている値を符号拡張するための符号拡張命令を付加する
ステップと、このプログラムに付加された符号拡張命令
のうち、冗長な命令を除去するステップとを含むことを
特徴とする。
【0018】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいて、この発明を詳細に説明する。図17は、本
実施の形態におけるコンパイラが用いられるコンピュー
タ装置のシステム構成を示す図である。図17におい
て、コンパイラ10は、バイトコード(byte code)で
記述された入力プログラムを入力して処理し、機械語で
記述された出力プログラムを生成して出力する。なお、
本実施の形態において、コンパイラ10は、Javaに
おけるJIT(Just In Time)コンパイラのような、実
行プログラムを実行する際に動的に実行プログラムのコ
ンパイル処理を行うコンパイラであっても良いし、ソー
スプログラムを予めコンパイルして生成されたオブジェ
クトプログラムを実行プログラムとする使用形態におけ
るコンパイラであっても良い。コンパイラ10により生
成された出力プログラムは、プログラム実行部30によ
り実行される。
【0019】図1は、本発明の一実施の形態におけるコ
ンパイラの全体構成を説明する図である。本実施の形態
の背景として、入力プログラムは、32ビットアーキテ
クチャのCPUで動作することを想定して記述されてい
るものとする。また、図1に示すコンパイラ10にてコ
ンパイルされた出力プログラムは、64ビットアーキテ
クチャのCPUで動作するものとする。したがって、コ
ンパイラ10は、ソースコードで記述された入力プログ
ラムから機械語コードで記述された出力プログラムを生
成する際に、プログラム中の必要な箇所に符号拡張命令
を挿入する。
【0020】図1を参照すると、本実施の形態のコンパ
イラ10は、実行プログラムに付加する符号拡張命令を
生成する符号拡張命令生成部11と、不要な符号拡張命
令の除去を行う符号拡張命令除去処理部12とを備え
る。図1に示したコンパイラ10の各構成要素は、コン
ピュータプログラムにより制御されたCPUにて実現さ
れる仮想的なソフトウェアブロックである。CPUを制
御する当該コンピュータプログラムは、CD−ROMや
フロッピー(登録商標)ディスクなどの記憶媒体に格納
して配布したり、ネットワークを介して伝送したりする
ことにより提供される。なお、図1に示したコンパイラ
10の構成要素は、本実施の形態における特徴的な機能
に関して記述したものである。図示しないが、実際には
コンパイラ10は、入力プログラムの字句解析や構文解
析、機械語のコード生成といったコンパイル処理におけ
る一般的な機能を有することは言うまでもない。
【0021】コンパイラ10の構成要素において、符号
拡張命令生成部11は、プログラム中の所定の値を32
ビットから64ビットに補正する補正命令である符号拡
張命令を生成し、コンパイル対象であるプログラムの所
定の場所に挿入する。符号拡張命令を挿入する場所は、
コンパイル後の出力プログラムが実行されるコンピュー
タ装置のアーキテクチャにおけるレジスタサイズ(64
ビット)よりも小さいデータサイズの変数の値が定義さ
れている全ての場所である。
【0022】ところで、プログラムにおける符号拡張命
令を挿入する場所として、変数の定義個所に挿入する方
法と変数の使用個所に挿入する方法の2種類が考えられ
る。しかし、プログラムにおけるループ処理の部分にお
いて、変数の使用個所に挿入する方法で符号拡張命令を
挿入した場合、後述する冗長な符号拡張命令の除去処理
を実行する際に、単に符号拡張命令を除去するだけでは
十分でなく、ループ不変の符号拡張命令をループ外に移
動する処理が必須となる。これに対し、変数の定義個所
に挿入する方法で符号拡張命令を挿入した場合は、変数
の定義位置をループの外に移動するような最適化が行わ
れた場合にのみ、対応する符号拡張命令をループ外に移
動すれば良く、処理工数を削減することができる。ま
た、一般的に、変数の定義個所と使用個所では使用個所
の方が数が多い。そのため、変数の使用個所に符号拡張
命令を挿入する方法は、定義箇所に挿入する方法に比し
て、符号拡張命令の最適化処理に多くの時間を必要とす
る。したがって、変数の定義箇所に符号拡張命令を挿入
することが好ましい。
【0023】符号拡張命令除去処理部12は、符号拡張
命令生成部11によりプログラムに挿入された符号拡張
命令のうち、冗長な符号拡張命令を除去する。ここで、
除去可能な符号拡張命令とは、次の二つの場合である。 1.符号拡張命令の入力(値)が必ず既に符号拡張され
ている場合。 2.符号拡張命令の出力結果が全ての場所で入力のデー
タサイズ以下で使用されている場合。
【0024】実際に符号拡張命令を除去する処理は、例
えば、上記二つの条件を両方とも用いて除去を行う場
合、次の2段階のステップで実行することができる。ま
ず、後方データフロー解析を用いて、各符号拡張命令の
出力結果に関して、当該出力結果が使用される全ての場
所において、符号拡張前のデータサイズ(32ビットか
ら64ビットへの符号拡張の場合は32ビット)以下で
使用されているかどうかを調べる。そして、これに該当
する符号拡張命令を除去する。次に、前方データフロー
解析を用いて、各符号拡張命令の入力に関して、必ず既
に符号拡張されているかどうかを調べる。そして、これ
に該当する符号拡張命令を除去する。なお、実際の除去
処理において上の二つのステップは、いずれを先に実行
しても良い。また、冗長な命令の除去によるプログラム
の効率化の効果は劣るが、いずれか一方のみを実行して
も良い。
【0025】図2は、上述した本実施の形態による、符
号拡張命令生成部11による符号拡張命令の挿入(ステ
ップ201)から、符号拡張命令除去処理部12による
符号拡張命令の除去処理(ステップ202、203)ま
での処理の流れを示すフローチャートである。
【0026】次に、本発明の他の実施の形態について説
明する。図3は、本実施の形態におけるコンパイラの全
体構成を説明する図である。図3に示すコンパイラ20
は、図17のコンピュータ装置において、コンパイラ1
0に代えて設けられる。本実施の形態においても、入力
プログラムは、32ビットアーキテクチャのCPUで動
作することを想定して記述されているものとする。ま
た、図3に示すコンパイラ20にてコンパイルされた出
力プログラムは、64ビットアーキテクチャのCPUで
動作するものとする。したがって、コンパイラ20は、
ソースコードで記述された入力プログラムから機械語コ
ードで記述された出力プログラムを生成する際に、プロ
グラム中の必要な箇所に符号拡張命令を挿入する。
【0027】図1及び図2を参照して説明した実施の形
態によっても、多くの冗長な符号拡張命令を除去するこ
とができる。しかし、次のような場合には、不要な符号
拡張命令が除去されずに残ってしまう。すなわち、ルー
プの誘導変数が配列のインデックスとして使われている
場合、ループ内の当該変数に対する符号拡張命令は除去
できない。その理由は、配列アクセスのアドレス計算そ
のものはレジスタサイズで計算されることから、出力結
果の解析処理(図2のステップ202参照)では除去条
件に該当しないためである。また、ループ内で変数が更
新されることから、入力の解析処理(図2のステップ2
03)でも除去条件に該当しないためである。また、図
1及び図2に示した実施の形態は、一定の条件の下で
は、必ずしも効率の良い符号拡張命令の除去処理ができ
るとは限らない。例えば、プログラム中のループ処理の
外側または内側のどちらか片方しか符号拡張命令を除去
できない場合、実行頻度の高いループ処理の内側の符号
拡張命令を除去する方がコンパイル後のプログラムにお
ける実行速度の向上を期待できる。しかしながら、後方
データフロー解析を使った出力結果の解析処理では実行
順で後の符号拡張命令が残る傾向にあり、前方データフ
ロー解析を使った入力の解析処理では実行順で先の符号
拡張命令が残る傾向にあり、いずれもループ処理の構造
及び命令の実行頻度を考慮してはいないため、プログラ
ムの記述順序によっては、ループ処理の内側の符号拡張
命令が残る場合がある。図3に示した本実施の形態によ
れば、このような場合にも効果的に不要な符号拡張命令
を除去することが可能である。
【0028】図3を参照すると、本実施の形態のコンパ
イラ20は、プログラムに付加する符号拡張命令を生成
する符号拡張命令生成部21と、不要な符号拡張命令の
除去順を決定する除去順決定部22と、実際に符号拡張
命令の除去を行う符号拡張命令除去処理部23とを備え
る。図3に示したコンパイラ20の各構成要素は、コン
ピュータプログラムにより制御されたCPUにて実現さ
れる仮想的なソフトウェアブロックである。CPUを制
御する当該コンピュータプログラムは、CD−ROMや
フロッピーディスクなどの記憶媒体に格納して配布した
り、ネットワークを介して伝送したりすることにより提
供される。なお、図3に示したコンパイラ20の構成要
素は、本実施の形態における特徴的な機能に関して記述
したものである。図示しないが、実際にはコンパイラ2
0は、入力プログラムの字句解析や構文解析、機械語の
コード生成といったコンパイル処理における一般的な機
能を有することは言うまでもない。
【0029】コンパイラ20の構成要素において、符号
拡張命令生成部21は、図1に示したコンパイラ10に
おける符号拡張命令生成部11と同様であり、コンパイ
ル後の出力プログラムが実行されるコンピュータ装置の
アーキテクチャにおけるレジスタサイズ(64ビット)
よりも小さいデータサイズの変数の値が定義されている
全ての場所に符号拡張命令を挿入する。
【0030】除去順決定部22は、コンパイラ20の出
力プログラム(コンパイル後のプログラム)が実行され
た場合に、実行される頻度が高いと予想される符号拡張
命令から順に除去順を決定する。これは、選択的にいず
れか一方を除去すべき複数の前記符号拡張命令がある場
合に、実行頻度の高い方の符号拡張命令を除去すること
により、コンパイル後のプログラムにおける実行速度の
一層の向上を図るためである。
【0031】具体的には、例えば、プログラム中におけ
るループ処理の外側及び内側に存在する符号拡張命令の
うち、どちらか一方しか除去できない場合がある。この
場合、ループの内側ほど実行される頻度が高いため、ル
ープの最内ネストから順に符号拡張命令を除去すること
が好ましい。また、プログラム中には必ず実行されるパ
スと条件に応じて実行されるパスとが存在する。そこ
で、これら2種類のパスに記述された符号拡張命令のう
ち一方しか除去できない場合は、必ず実行されるパスに
記述された符号拡張命令を除去することが好ましい。
【0032】図8は、除去順決定部22をコンパイラ2
0に実装するためのアルゴリズムの例を示す図である。
図中、「EliminateOneExtend(I)」は、一つの符号拡張
命令Iに対する除去処理(後述)に移行することを示
す。なお、どのような状況においてどの符号拡張命令の
実行頻度が高いかは、状況に応じて個別的に判断し、設
定しておくことができる。また、どちらの符号拡張命令
の実行頻度が高いかを判断できない場合は、前方データ
フロー解析や後方データフロー解析などの通常の手法に
したがう順番で符号拡張命令の除去を行えば良い。複数
の符号拡張命令のうち選択的に一方しか除去できない場
合としては、例えば、配列アクセスのアドレス計算に対
する符号拡張命令は、配列インデックスにかかわる計算
の一箇所で行えば良い場合が多い。そのため、ある場所
で符号拡張命令を除去した影響で、他の符号拡張命令を
除去できなくなる場合がある。
【0033】符号拡張命令除去処理部23は、除去順決
定部22によって決定された除去順にしたがって、符号
拡張命令の除去処理を行う。また、本実施の形態の符号
拡張命令除去処理部23は、一定の条件の下で、配列ア
クセスのアドレス計算のために配列インデックスに付加
された符号拡張命令を除去する。
【0034】図4は、符号拡張命令除去処理部23が、
プログラム中の一つの符号拡張命令を除去する際の動作
を説明するフローチャートである。符号拡張命令除去処
理部23は、除去順決定部22により決定された順番に
従って、各符号拡張命令に対して図4に示す処理を行
い、必要に応じて符号拡張命令の除去処理を行う。図4
に示すように、符号拡張命令除去処理部23は、まず、
処理対象の符号拡張命令を順次入力する(ステップ40
1)。そして、対象である符号拡張命令の出力について
解析処理を行い(ステップ402)、解析結果に応じて
符号拡張が必要かどうかを判断する(ステップ40
3)。解析処理及び判断の詳細については後述する。符
号拡張が不要と判断した場合は、当該符号拡張命令を除
去する(ステップ406)。
【0035】一方、出力についての解析では符号拡張が
不要と判断できなかった場合は、次に当該符号拡張命令
の入力について解析を行い(ステップ404)、解析結
果に応じて符号拡張が必要かどうかを判断する(ステッ
プ405)。解析処理及び判断の詳細については後述す
る。符号拡張が不要と判断した場合は、当該符号拡張命
令を除去する(ステップ406)。また、入力について
の解析においても符号拡張が不要と判断できなかった場
合は、当該符号拡張命令を除去せずに処理を終了する。
なお、符号拡張命令の出力に関する解析処理及び判断
(ステップ402、403)と、符号拡張命令の入力に
関する解析処理及び判断(ステップ404、405)と
は、いずれを先に実行しても良いことは言うまでもな
い。
【0036】図9は、符号拡張命令除去処理部23をコ
ンパイラ20に実装するためのアルゴリズムの例を示す
図である。図9において、符号拡張命令の出力に関する
解析処理にはDU−chain(definition-use chai
n:定義−使用連鎖)が用いられ、符号拡張命令の入力
に関する解析処理にはUD−chain(use-definiti
on chain:使用−定義連鎖)が用いられている。なお、
DU−chain及びUD−chainは、符号拡張命
令除去処理部23による処理が開始される前の段階で作
成されている。なお、図中、EXT、Extend、Extend命令
などとあるのは符号拡張命令である(以下、図10乃至
図16において同様)。
【0037】ここで、符号拡張命令を除去できる場合
は、まず、「1.符号拡張命令の入力(値)が必ず既に
符号拡張されている場合」及び「2.符号拡張命令の出
力結果が全ての場所で入力のデータサイズ以下で使用さ
れている場合」である。したがって、ステップ402、
403の解析処理及び判断において、第2の条件を判断
し、ステップ404、405の解析処理及び判断におい
て、第1の条件を判断する。しかしながら、かかる条件
だけでは、上述したように、配列のアドレス計算のため
に配列インデックスに付加された符号拡張命令は除去で
きずに残ってしまう場合が多い。ところが、言語仕様に
より負のインデックスを使って配列をアクセスしてはい
けないと定められている言語(Java、C、C++な
ど)では、配列インデックスに必ず負の値が入らないと
仮定することで、一定の条件下、符号拡張を不要とする
ことができる(下記、定理1、定理2、定理3)。そこ
で、符号拡張命令の出力についての解析処理(ステップ
402)において、上述した第2の条件の他に、配列の
アドレス計算のために配列インデックスに付加された符
号拡張命令が定理1、定理2、定理3に該当するかどう
かを判断し、該当する場合は当該符号拡張命令を除去す
る。以下、各定理について説明する。
【0038】<定理1>次の2つの条件が全て満たされ
る場合、配列インデックスaにてアクセスされる配列の
アドレス計算には、当該配列インデックスaに対して3
2ビットから64ビットへの符号拡張は必要ない。 (1)配列インデックスaの上位32ビットが0で初期
化されている。 (2)言語仕様により、配列インデックスaの下位32
ビットについて、 0 ≦ 配列インデックスaの下位32ビット ≦ 0x7ffff
fff が成り立つ。 <証明>条件(1)より、配列インデックスaの取り得
る範囲は、0 〜 0xffffffffである。また条件(2)に
より、0 ≦ 配列インデックスa ≦ 0x7fffffffとな
り、負の値にはならない。したがって、符号拡張は必要
ない。
【0039】<定理2>次の3つの条件が全て満たされ
るときには、配列インデックス(a+b)でアクセスさ
れる配列のアドレス計算には、配列インデックス(a+
b)に対して32ビットから64ビットへの符号拡張は
必要ない。 (1)配列インデックスa、bは両方とも既に符号拡張
されている。 (2)配列インデックスaまたは配列インデックスbの
どちらかの値が0 〜 0x7fffffffの範囲内にある。 (3)言語仕様により、配列インデックス(a+b)の
下位32ビットについて、 0 ≦ 配列インデックス(a+b)の下位32ビット ≦
0x7fffffff が成り立つ。 <証明>配列インデックス(a+b)について、配列イ
ンデックスaと配列インデックスbとは交換可能である
ため、配列インデックスaが条件(2)に合うときのみ
を証明できれば、配列インデックスbが条件(2)に合
うときについても同様に証明することができる。したが
って、配列インデックスaが条件(2)に合う場合、す
なわち配列インデックスaが 0 〜 0x7fffffff の範囲
内にある場合について説明する。 i)配列インデックスbが 0 〜 0x7fffffff の範囲の
とき:配列インデックス(a+b)の取り得る範囲は 0
〜 0xffffffff となり、上位32ビットについて0で
あることが保証されているので、定理1より、符号拡張
は必要ない。 ii)配列インデックスbが 0xffffffff80000000 〜 0
xffffffffffffffff の範囲のとき:配列インデックス
(a+b)の取りうる範囲は 0xffffffff80000000〜 0x
ffffffffffffffff、及び 0 〜 0x7ffffffe である。条
件(3)により、配列インデックス(a+b)は0 ≦
配列インデックス(a+b) < 0x7fffffffとなり、負
の値にはならないため、符号拡張は必要ない。
【0040】また、配列の大きさの上限が、ある値に制
限されている(または制限できる)場合には、定理2を
拡張した次の定理3が導き出せる。定理3を利用する
と、片方が負の値の足し算式であっても、符号拡張命令
の除去を行うことができる。例えば、Java言語で
は、言語仕様上の配列の大きさの最大値は0x7fffffffと
なるので、配列インデックスaまたは配列インデックス
bのどちらかの値が -1 〜 0x7fffffff の範囲内にあ
り、配列インデックスa、bの両方が符号拡張されてい
れば、配列インデックス(a+b)でアクセスされる配
列のアドレス計算には、配列インデックス(a+b)に
対して符号拡張は必要なくなる。また、別の例を挙げる
と、言語処理システムの実装上の制限等により、配列の
大きさの最大値が、例えば0x1fffffffに制限できる場合
は、配列インデックスaまたは配列インデックスbのど
ちらかの値が 0xffffffff9fffffff(-1610612737)〜 0x7
fffffff の範囲内にあり、配列インデックスa、bの両
方が符号拡張されていれば、配列インデックス(a+
b)でアクセスされる配列のアドレス計算には、配列イ
ンデックス(a+b)に対して符号拡張は必要なくな
る。
【0041】<定理3>次の4つの条件がすべて満たさ
れるときには、配列インデックス(a+b)でアクセス
される配列のアドレス計算には、配列インデックス(a
+b)に対して32ビットから64ビットへの符号拡張
は必要ない。 (1)配列の大きさの上限がmaxlenで与えられ、0 ≦ m
axlen ≦ 0x7fffffff が成り立つ。 (2)配列インデックスa、bは両方ともすでに符号拡
張されている。 (3)配列インデックスaまたは配列インデックスbの
どちらかの値が (maxlen-1)-0x7fffffff 〜 0x7fffffff
の範囲内にある。 (4)言語仕様により、配列インデックス(a+b)の
下位32ビットについて、 0 ≦ 配列インデックス(a+b)の下位32ビット <
maxlen ≦ 0x7fffffff が成り立つ。 <証明>配列インデックス(a+b)について、配列イ
ンデックスaと配列インデックスbとは交換可能である
ため、配列インデックスaが条件(3)に合うときのみ
を証明できれば、配列インデックスbが条件(3)に合
うときについても同様に証明することができる。したが
って、配列インデックスaが条件(3)に合う場合につ
いて説明する。 a)配列インデックスaが 0 〜 0x7fffffff の範囲内
にある場合 定理2より、この場合は、符号拡張は必要ない。 b)配列インデックスaが (maxlen-1)-0x7fffffff 〜
0xffffffffffffffffの範囲内にある場合 i)配列インデックスbが 0 〜 0x7fffffff の範囲の
とき:定理2より、こ の場合は、符号拡張は必要ない。 ii)配列インデックスbが 0xffffffff80000000 〜 0
xffffffffffffffffの範囲のとき:配列インデックス
(a+b)の取り得る範囲は0xffffffff00000000+maxle
n 〜 0xfffffffffffffffeであり、配列インデックス
(a+b)の下位32ビットの取り得る範囲はmaxlen
〜 0xfffffffeとなる。この場合、条件(4)が成り立
つことは一切ないため、条件外となり、符号拡張は必要
である。
【0042】次に、図4に示した符号拡張命令除去処理
部23による、符号拡張命令の出力についての解析処理
及び判断(ステップ402、403)の詳細を説明す
る。図5は、符号拡張命令の出力についての解析処理の
内容を説明するフローチャートである。上述したよう
に、この処理には、上記の定理1、定理2、定理3に基
づいて、配列のアドレス計算のために付加された符号拡
張命令が必要かどうかを判断する処理が含まれる。
【0043】図5に示すように、符号拡張命令除去処理
部23は、まず、符号拡張命令をE、解析対象の値をT
とする(ステップ501)。さらに、符号拡張命令Eに
よる解析対象Tの出力変数をDとし(ステップ50
2)、出力変数Dを使用する命令をIとする(ステップ
503)。そして、命令Iが出力変数Dの上位32ビッ
トの値に全く影響を受けない命令かどうかを判断する
(ステップ504)。
【0044】命令Iが出力変数Dの上位32ビットの値
に影響を受る命令である場合、次に符号拡張命令除去処
理部23は、命令Iの出力結果に関して符号拡張の必要
なしと判断できるならば、解析対象Tも必要なしと判断
できるかどうかを調べる(ステップ505)。解析対象
Tも必要なしと判断した場合、符号拡張命令除去処理部
23は、この命令Iの出力結果に対して本処理(図5の
処理)を再帰的に呼び出して実行する(ステップ50
6)。解析対象Tも必要なしと判断できる命令には、例
えばCOPY命令がある。
【0045】一方、ステップ505で解析対象Tが必要
であると判断した場合、次に符号拡張命令除去処理部2
3は、この命令Iが配列のアドレス計算のための命令か
どうかを判断する(ステップ507)。命令Iが配列の
アドレス計算のための命令である場合は、かかる命令に
対する解析処理を実行する(ステップ508)。命令I
が配列のアドレス計算のための命令でない場合は、図4
のステップ403において、当該符号拡張命令Eが必要
であると判断する。また、ステップ506、508の解
析処理を経て符号拡張が必要と判断された場合も、図4
のステップ403において、当該符号拡張命令Eが必要
であると判断する(ステップ509)。
【0046】ステップ504において命令Iが出力変数
Dの上位32ビットの値に影響を受けない命令である場
合、及びステップ509において符号拡張が不要と判断
された場合、符号拡張命令除去処理部23は、出力変数
Dを使用している命令が他にも存在するかどうかを調
べ、存在するならば、当該他の命令を新たに命令Iとし
て処理を繰り返す(ステップ510、503)。一方、
出力変数Dを使用している命令が他に存在しない場合、
すなわち出力変数Dを使用している全ての命令について
当該符号拡張命令Eが必要であると判断できなかった場
合は、図4のステップ403において、当該符号拡張命
令Eを不要であると判断する。
【0047】図10は、符号拡張命令除去処理部23が
図5に示した符号拡張命令の出力に関する解析処理及び
判断を実行するためのアルゴリズムの例を示す図である
(図9における<USEに対するExtend命令は必要か解析
>(EXT, I)の内容)。図10において、5行目の「ca
se 明示的な整数型cast命令:」から11行目の「case
符号無し右シフト命令:」までがステップ504の条件
分岐に対応する。また、13行目の「case 足し算命
令:」から20行目の「case コピー命令:」までがス
テップ505の条件分岐に対応する。また、26行目の
「case 配列のアドレス計算:」がステップ507の条
件分岐に対応する。
【0048】次に、ステップ508の処理の内容につい
て説明する。図6は、配列のアドレス計算のための命令
に対する解析処理を説明するフローチャートである。図
6に示すように、符号拡張命令除去処理部23は、ま
ず、符号拡張命令をE、解析対象の値をTとする(ステ
ップ601)。さらに、符号拡張命令Eの入力変数をS
とし(ステップ602)、入力変数Sを設定している命
令をIとする(ステップ603)。そして、命令Iの出
力結果の上位32ビットが必ず0であるかどうかを判断
する(ステップ604)。この判断は、上述した定理1
の適用に相当する。
【0049】命令Iの出力結果の上位32ビットが必ず
0であるとは言えない場合、次に、符号拡張命令除去処
理部23は、命令Iが足し算か引き算命令であり、かつ
命令Iの出力変数の仕様箇所が1カ所かどうかを判断す
る(ステップ605)。命令Iがこの条件を満足する場
合、次に、符号拡張命令除去処理部23は、命令Iのオ
ペランドについて、上述した定理2または定理2を拡張
した定理3の条件が成り立つかどうかを判断する(ステ
ップ606)。命令Iがステップ605の条件を満足し
ない場合、または命令Iのオペランドについて定理2あ
るいは定理3の条件が成立しない場合は、図4のステッ
プ403において、当該符号拡張命令Eが必要であると
判断する。
【0050】ステップ604において命令Iの出力結果
の上位32ビットは必ず0であると判断した場合、及び
ステップ606において命令Iのオペランドについて定
理2または定理3の条件が成立する場合、符号拡張命令
除去処理部23は、入力変数Sを設定している命令が他
にも存在するかどうかを調べ、存在するならば、当該他
の命令を新たに命令Iとして処理を繰り返す(ステップ
607、603)。一方、入力変数Sを設定している命
令が他に存在しない場合、すなわち入力変数Sを設定し
ている全ての命令について当該符号拡張命令Eが必要で
あると判断できなかった場合は、図4のステップ403
において、当該符号拡張命令Eを不要であると判断す
る。
【0051】図11は、符号拡張命令除去処理部23が
図6に示した配列のアドレス計算のための命令に対する
解析処理を実行するためのアルゴリズムの例を示す図で
ある(図10における<配列のアドレス計算についてEx
tend命令は必要か解析>(EXT, I(図11ではEOP2))
の内容)。図11の9、10行目において、定理3を用
いることが記述されているが、言語仕様によっては定理
2を用いることができる。定理2を用いる場合、条件の
うち、「Dのどちらか片方のオペランドは−1以上であ
る」の部分が「Dのどちらか片方のオペランドは0以上
である」に変わることとなる。
【0052】次に、図4に示した符号拡張命令除去処理
部23による、符号拡張命令の入力についての解析処理
及び判断(ステップ404、405)の詳細を説明す
る。図7は、符号拡張命令の入力についての解析処理の
内容を説明するフローチャートである。図7に示すよう
に、符号拡張命令除去処理部23は、まず、解析対象の
符号拡張命令をEとし(ステップ701)、命令Eの入
力変数をSとし(ステップ702)、入力変数Sを設定
している命令をIとする(ステップ703)。そして、
命令Iの出力が必ず符号拡張されているかどうかを判断
する(ステップ704)。命令Iの出力が必ず符号拡張
されている命令としては、例えば配列の長さを返す命令
などがある。
【0053】命令Iの出力が必ず符号拡張されていると
は言えない場合、次に、符号拡張命令除去処理部23
は、命令Iの入力変数Sが符号拡張されていれば、解析
対象である符号拡張命令Eも必要なしと判断できるかど
うかを調べる(ステップ705)。符号拡張命令Eも必
要なしと判断した場合、符号拡張命令除去処理部23
は、この命令Iの入力に対して本処理(図7の処理)を
再帰的に呼び出して実行する(ステップ706)。符号
拡張命令Eも必要なしと判断できる命令には、例えばC
OPY命令がある。
【0054】ステップ705において、命令Iの入力変
数Sが符号拡張されていても解析対象である符号拡張命
令Eが必要であると判断された場合、図4のステップ4
03において、当該符号拡張命令Eが必要であると判断
する(ステップ707)。また、ステップ706の解析
処理を経て符号拡張が必要と判断された場合も、図4の
ステップ403において、当該符号拡張命令Eが必要で
あると判断する(ステップ707)。
【0055】ステップ704において命令Iの出力が必
ず符号拡張されている場合、及びステップ707におい
て符号拡張が不要と判断された場合、符号拡張命令除去
処理部23は、入力変数Sを設定している命令が他にも
存在するかどうかを調べ、存在するならば、当該他の命
令を新たに命令Iとして処理を繰り返す(ステップ70
8、703)。一方、入力変数Sを設定している命令が
他に存在しない場合、すなわち入力変数Sを設定してい
る全ての命令について当該符号拡張命令が必要であると
判断できなかった場合は、図4のステップ403におい
て、当該符号拡張命令Eを不要であると判断する。
【0056】図12は、符号拡張命令除去処理部23が
図7に示した符号拡張命令の入力に関する解析処理及び
判断を実行するためのアルゴリズムの例を示す図である
(図9における<Destinationに対してExtend命令は必
要か解析>(I)の内容)。図12において、5行目の
「case Iの出力結果が符号拡張された状態になってい
るもの:」がステップ704の条件分岐に対応する。ま
た、8行目の「caseコピー命令:」がステップ705の
条件分岐に対応する。
【0057】次に、サンプルプログラムに対する符号拡
張命令の付加及び除去処理の実行例を示す。図13は、
本実施の形態により符号拡張命令の挿入及び除去を行う
対象のサンプルプログラムを示す図である。ここでは、
サンプルプログラムに対し、図3に示した実施の形態の
コンパイラ20により符号拡張命令の付加及び除去処理
を行うこととする。また、各処理は、図8乃至図12に
示したアルゴリズムにしたがうこととする。
【0058】まず、図13に示すサンプルプログラムが
コンパイラ20に入力され、符号拡張命令生成部21が
このサンプルプログラムに符号拡張命令を挿入する。図
14は、図13のサンプルプログラムにおける所定の箇
所に対して符号拡張命令(extend)を生成した状態の中
間表現を示す図である。図14において、(2)、
(4)、(7)、(9)、(15)の各行が符号拡張命
令である。
【0059】次に、除去順決定部22が、図8に示した
アルゴリズムにしたがって、図14のプログラム中の各
符号拡張命令に対して、除去処理を行う順番が決定され
る。ここでは、サンプルプログラムを実行する際の実行
頻度の高いものから、(15)→(2)→(4)→
(7)→(9)の順で符号拡張命令の除去を行うように
決定されたものとする。
【0060】最初に、(15)の符号拡張命令の除去を
試みる。(15)のdestinationに対するU
SEの場所(出力結果を使用している命令)は(1
1)、(12)、(13)、(14)、(15)、(1
6)の各命令である。この中で(12)以外は、図9及
び図10に示した<USEに対するExtend命令は
必要か解析>のアルゴリズムにより、符号拡張命令は不
要と判断される。また、(12)については、図10及
び図11に示した<配列のアドレス計算についてExt
end命令が必要であるか解析>のアルゴリズムによ
り、符号拡張命令は不要と判断される。その結果、(1
5)の符号拡張命令は除去される。
【0061】次に、(2)の符号拡張命令の除去を試み
る。(2)のdestinationに対するUSEの
場所は(5)であり、(5)はコピー命令なので、図1
0に示すアルゴリズムにより、(5)の命令の出力結果
を使用している命令が次に解析される。そして、(5)
のdestinationに対するUSEの場所は
(6)である。(6)は引き算命令なので、図10に示
すアルゴリズムにより、さらに(6)の命令の出力結果
を使用している命令が解析される。そして、(6)のd
estinationに対するUSEの場所は(7)で
あり、符号拡張命令なので、図10に示すアルゴリズム
により、不要と判断される。その結果、(2)の符号拡
張命令は除去される。
【0062】次に、(4)の符号拡張命令の除去を試み
る。(4)のdestinationに対するUSEの
場所は(10)、(16)の各命令であり、いずれも図
9及び図10に示す<USEに対するExtend命令
は必要か解析>のアルゴリズムにより、符号拡張命令は
不要と判断される。その結果、(4)の符号拡張命令は
除去される。
【0063】次に、(7)の符号拡張命令の除去を試み
る。(7)のdestinationに対するUSEの
場所は(10)、(11)、(12)、(13)、(1
4)、(16)の各命令である。そこで、図9及び図1
0のアルゴリズムにより個々に解析していくこととなる
が、(12)におけるUSE((7)の出力結果の使
用)に対しては、(15)を以前に除去している影響で
必要と判断される。そのため、(7)の符号拡張命令は
除去されない。
【0064】次に、(9)の符号拡張命令の除去を試み
る。(9)のdestinationに対するUSEの
場所は(11)であり、図9及び図10に示した<US
Eに対するExtend命令は必要か解析>のアルゴリ
ズムにより、符号拡張命令は不要と判断される。その結
果、(9)の符号拡張命令は除去される。
【0065】以上の処理の結果、(7)以外の符号拡張
命令は除去される。図15は、図14のプログラムに対
して上記の除去順を考慮した符号拡張命令の除去処理を
行った結果を示す図である。
【0066】ここで、図13のサンプルプログラムに対
して、図1に示した実施の形態のコンパイラ10により
符号拡張命令の付加及び除去処理を行った場合について
考える。なお、各処理は図9乃至図12のアルゴリズム
にしたがって実行されるものとする。まず、符号拡張命
令生成部11により、図13のサンプルプログラムに対
して符号拡張命令が付加され、図14に示した状態とな
る。図1のコンパイラ10は符号拡張命令の実行頻度に
応じて除去処理を行う順番を決定する手段を持たないの
で、例えばプログラムの先頭から順に符号拡張命令の除
去を試みるものとする。
【0067】この場合、上述した手順と同様の手順で
(2)、(4)の符号拡張命令が除去され、次に(7)
の符号拡張命令の除去が試みられる。(7)のdest
inationに対するUSEの場所は(10)、(1
1)、(12)、(13)、(14)、(16)の各命
令である。したがって、(12)以外は、図9及び図1
0に示した<USEに対するExtend命令は必要か
解析>のアルゴリズムにより、符号拡張命令は不要と判
断される。また、(12)は、図10及び図11に示し
た<配列のアドレス計算についてExtend命令が必
要であるか解析>のアルゴリズムにより、符号拡張命令
は不要と判断される。その結果、(7)の符号拡張命令
は除去される。
【0068】次に、(9)の符号拡張命令が上述した手
順と同様の手順で除去され、次に(15)の符号拡張命
令の除去が試みられる。(15)のdestinati
onに対するUSEの場所は(11)、(12)、(1
3)、(14)、(15)、(16)の各命令である。
そして、(12)におけるUSE((15)の出力結果
の使用)に対しては、(7)を以前に除去している影響
で必要と判断される。そのため、(15)の符号拡張命
令は除去されない。
【0069】以上の処理の結果、(15)以外の符号拡
張命令が除去されることとなる。図16は、図14のプ
ログラムに対して上記の除去順を考慮しない符号拡張命
令の除去処理を行った結果を示す図である。
【0070】図15、16の処理結果を比較すると、
(7)と(15)の符号拡張命令については、いずれか
一方が除去され、他方が残ることとなる。いずれの場合
であっても、(2)、(4)、(9)の符号拡張命令と
(7)または(15)の符号拡張命令の一方とを除去す
ることにより、プログラムの実行効率を向上させること
が可能である。数値計算処理プログラム(メソッドレベ
ル)であれば最大で2倍程度、アプリケーションプログ
ラムであれば最大12パーセント程度のパフォーマンス
の向上が期待できる。しかしながら、ループ内が実行さ
れることにより、(7)の符号拡張命令が残っている場
合よりも(15)の符号拡張命令が残っている場合の方
が、実行速度が落ちてしまう。したがって、除去順を考
慮して符号拡張命令の除去処理を行う方が、(15)の
符号拡張命令を除去できる分だけ、さらにプログラムの
実行効率を向上させることができることがわかる。
【0071】なお、上述した実施の形態では、本発明に
よる符号拡張命令の付加及び除去処理をコンパイラの機
能として実現する場合について説明した。しかし本発明
は、コンパイラの機能として実現する他に、所定のプロ
グラムを処理対象とし、プログラム中に符号拡張命令を
生成し、かつ生成した符号拡張命令のうちで冗長なもの
を除去するプログラム変換手段としてコンピュータ装置
に設けることもできる。また、既にプログラム中に挿入
されている符号拡張命令を検出し、冗長な命令を除去す
るプログラム変換手段としてコンピュータ装置に設ける
こともできる。さらに、処理対象である言語について
も、コンパイラ言語に限らず、応用可能な範囲でインタ
プリタ言語に関しても利用することが可能である(例え
ば、符号拡張命令の入力が符号拡張不要の状態になって
いる場合に符号拡張命令を除去する手法)。
【0072】
【発明の効果】以上説明したように、本発明によれば、
プログラム中の冗長な符号拡張命令を除去し、プログラ
ムの実行効率の向上を図ることが可能となる。また、本
発明によれば、プログラムをコンパイルする際に、冗長
な符号拡張命令を除去することにより、実行効率の高い
オブジェクトプログラムを生成するコンパイラを提供す
ることができる。
【図面の簡単な説明】
【図1】 本発明の一実施の形態におけるコンパイラの
全体構成を説明する図である。
【図2】 図1のコンパイラによる符号拡張命令の挿入
から除去処理までの処理の流れを示すフローチャートで
ある。
【図3】 本発明の他の実施の形態におけるコンパイラ
の全体構成を説明する図である。
【図4】 図3のコンパイラにおける符号拡張命令除去
処理部が、プログラム中の一つの符号拡張命令を除去す
る動作を説明するフローチャートである。
【図5】 図4の動作における符号拡張命令の出力につ
いての解析処理の内容を説明するフローチャートであ
る。
【図6】 図5の動作における配列のアドレス計算のた
めの命令に対する解析処理を説明するフローチャートで
ある。
【図7】 図4の動作における符号拡張命令の入力につ
いての解析処理の内容を説明するフローチャートであ
る。
【図8】 本実施の形態における除去順決定部をコンパ
イラに実装するためのアルゴリズムの例を示す図であ
る。
【図9】 本実施の形態における符号拡張命令除去処理
部をコンパイラに実装するためのアルゴリズムの例を示
す図である。
【図10】 本実施の形態における符号拡張命令除去処
理部が符号拡張命令の出力に関する解析処理及び判断を
実行するためのアルゴリズムの例を示す図である。
【図11】 本実施の形態における符号拡張命令除去処
理部が配列のアドレス計算のための命令に対する解析処
理を実行するためのアルゴリズムの例を示す図である。
【図12】 本実施の形態における符号拡張命令除去処
理部が符号拡張命令の入力に関する解析処理及び判断を
実行するためのアルゴリズムの例を示す図である。
【図13】 本実施の形態により符号拡張命令の挿入及
び除去を行う対象のサンプルプログラムを示す図であ
る。
【図14】 図13のサンプルプログラムにおける所定
の箇所に対して符号拡張命令を生成した状態の中間表現
を示す図である。
【図15】 図14のプログラムに対して除去順を考慮
して符号拡張命令の除去処理を行った結果を示す図であ
る。
【図16】 図14のプログラムに対して除去順を考慮
せずに符号拡張命令の除去処理を行った結果を示す図で
ある。
【図17】 本実施の形態におけるコンパイラが用いら
れるコンピュータ装置のシステム構成を示す図である。
【図18】 符号拡張命令の必要性を説明するサンプル
プログラムである。
【符号の説明】
10、20…コンパイラ、11、21…符号拡張命令生
成部、12、23…符号拡張命令除去処理部、22…除
去順決定部
フロントページの続き (72)発明者 川人 基弘 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 (72)発明者 小松 秀昭 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B081 CC00 CC11

Claims (15)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータを制御して実行プログラム
    を変換する変換プログラムであって、 前記実行プログラムに対し、当該実行プログラム中で定
    義されている値を符号拡張するための符号拡張命令に関
    する解析を行う機能と、 解析結果に応じて、前記実行プログラム中の前記符号拡
    張命令のうち、冗長な符号拡張命令を除去する機能とを
    前記コンピュータに実現させることを特徴とする変換プ
    ログラム。
  2. 【請求項2】 前記符号拡張命令を除去する機能は、所
    定の符号拡張命令における入力値が入力以前に符号拡張
    されている場合に、当該符号拡張命令を除去する機能を
    含むことを特徴とする請求項1に記載の変換プログラ
    ム。
  3. 【請求項3】 前記符号拡張命令を除去する機能は、所
    定の符号拡張命令における出力結果が、当該出力結果が
    使用される全ての場所において符号拡張以前のデータサ
    イズ以下で使用されている場合に、当該符号拡張命令を
    除去する機能を含むことを特徴とする請求項1に記載の
    変換プログラム。
  4. 【請求項4】 前記符号拡張命令を除去する機能は、選
    択的にいずれかを除去すべき複数の符号拡張命令がある
    場合に、実行頻度の高い符号拡張命令を除去する機能を
    含むことを特徴とする請求項1に記載の変換プログラ
    ム。
  5. 【請求項5】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語コードに変換するコンパイ
    ラにおいて、 前記プログラムを実行するCPUのレジスタサイズより
    も小さいサイズの値として当該プログラム中で定義され
    ている値に関して、当該値のデータサイズを補正するた
    めの補正命令を当該プログラムに付加する補正命令生成
    部と、 前記補正命令生成部にて付加された前記補正命令のう
    ち、冗長な補正命令を除去する命令除去処理部とを備え
    ることを特徴とするコンパイラ。
  6. 【請求項6】 前記命令除去処理部は、一定の条件の下
    で、配列アクセスのアドレス計算のために付加された前
    記補正命令を除去する機能を含むことを特徴とする請求
    項5に記載のコンパイラ。
  7. 【請求項7】 前記命令除去処理部は、所定の値に関し
    て前記プログラムにおけるループ処理の外側と内側のい
    ずれか一方で前記補正命令を除去可能な場合に、当該ル
    ープ処理の内側に位置する補正命令を除去することを特
    徴とする請求項5に記載のコンパイラ。
  8. 【請求項8】 前記命令除去処理部は、使用−定義連鎖
    及び定義−使用連鎖を用いて前記補正命令を除去するこ
    とを特徴とする請求項5に記載のコンパイラ。
  9. 【請求項9】 プログラムのソースコードをコンパイル
    して機械語コードに変換するコンパイラと、 機械語コードに変換された前記プログラムを実行する処
    理装置とを備えたコンピュータ装置において、 前記コンパイラは、前記プログラム中で定義されている
    値を符号拡張するために当該プログラム中に挿入されて
    いる符号拡張命令のうち、冗長な符号拡張命令を除去す
    ることを特徴とするコンピュータ装置。
  10. 【請求項10】 前記コンパイラは、所定の符号拡張命
    令における入力値が入力以前に符号拡張されている場合
    に、当該符号拡張命令を除去することを特徴とする請求
    項9に記載のコンピュータ装置。
  11. 【請求項11】 前記コンパイラは、所定の符号拡張命
    令における出力結果が、当該出力結果が使用される全て
    の場所において符号拡張以前のデータサイズ以下で使用
    されている場合に、当該符号拡張命令を除去することを
    特徴とする請求項9に記載のコンピュータ装置。
  12. 【請求項12】 前記コンパイラは、一定の条件の下
    で、配列アクセスのアドレス計算のために付加された前
    記補正命令を除去することを特徴とする請求項9に記載
    のコンピュータ装置。
  13. 【請求項13】 前記コンパイラは、実行頻度の高い符
    号拡張命令から順に、冗長な命令かどうかを判断し、除
    去することを特徴とする請求項9に記載のコンピュータ
    装置。
  14. 【請求項14】 コンピュータを制御してプログラムを
    変換するプログラム変換方法において、 前記プログラムに対し、当該プログラム中で定義されて
    いる値を符号拡張するための符号拡張命令を付加するス
    テップと、 前記プログラムに付加された前記符号拡張命令のうち、
    冗長な命令を除去するステップとを含むことを特徴とす
    るプログラム変換方法。
  15. 【請求項15】 コンピュータを制御して実行プログラ
    ムを変換する変換プログラムを当該コンピュータの入力
    手段が読取可能に記憶した記憶媒体において、 前記変換プログラムは、 前記実行プログラムに対し、当該実行プログラム中で定
    義されている値を符号拡張するための符号拡張命令に関
    する解析を行う機能と、 解析結果に応じて、前記実行プログラム中の前記符号拡
    張命令のうち、冗長な命令を除去する機能とを前記コン
    ピュータに実現させることを特徴とする記憶媒体。
JP2001102343A 2001-03-30 2001-03-30 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法 Expired - Fee Related JP3763516B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2001102343A JP3763516B2 (ja) 2001-03-30 2001-03-30 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法
US10/102,389 US7278138B2 (en) 2001-03-30 2002-03-19 Computer program conversion and compilation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001102343A JP3763516B2 (ja) 2001-03-30 2001-03-30 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法

Publications (2)

Publication Number Publication Date
JP2002312176A true JP2002312176A (ja) 2002-10-25
JP3763516B2 JP3763516B2 (ja) 2006-04-05

Family

ID=18955558

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001102343A Expired - Fee Related JP3763516B2 (ja) 2001-03-30 2001-03-30 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法

Country Status (2)

Country Link
US (1) US7278138B2 (ja)
JP (1) JP3763516B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1328655C (zh) * 2002-10-29 2007-07-25 智慧第一公司 存储检查的禁止装置及方法

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8359586B1 (en) * 2007-08-20 2013-01-22 The Mathworks, Inc. Code generation
US7685565B1 (en) 2009-03-19 2010-03-23 International Business Machines Corporation Run time reconfiguration of computer instructions
US9009686B2 (en) 2011-11-07 2015-04-14 Nvidia Corporation Algorithm for 64-bit address mode optimization
JP2013242700A (ja) * 2012-05-21 2013-12-05 Internatl Business Mach Corp <Ibm> コード最適化方法、プログラム及びシステム

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4642765A (en) * 1985-04-15 1987-02-10 International Business Machines Corporation Optimization of range checking
JPS62269238A (ja) 1986-05-17 1987-11-21 Pfu Ltd コンパイル方式
EP1229440B1 (en) * 1993-05-27 2007-05-02 Matsushita Electric Industrial Co., Ltd. Program converting unit and processor improved in address management
JP2847688B2 (ja) * 1993-05-27 1999-01-20 松下電器産業株式会社 プログラム変換装置およびプロセッサ
US5457799A (en) * 1994-03-01 1995-10-10 Digital Equipment Corporation Optimizer for program loops
US5761469A (en) * 1995-08-15 1998-06-02 Sun Microsystems, Inc. Method and apparatus for optimizing signed and unsigned load processing in a pipelined processor
US5768596A (en) * 1996-04-23 1998-06-16 Silicon Graphics, Inc. System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
US6098087A (en) * 1998-04-23 2000-08-01 Infineon Technologies North America Corp. Method and apparatus for performing shift operations on packed data
US6681313B1 (en) * 1999-06-23 2004-01-20 International Business Machines Corporation Method and system for fast access to a translation lookaside buffer
US6571387B1 (en) * 2000-02-08 2003-05-27 Silicon Graphics, Inc. Method and computer program product for global minimization of sign-extension and zero-extension operations

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1328655C (zh) * 2002-10-29 2007-07-25 智慧第一公司 存储检查的禁止装置及方法

Also Published As

Publication number Publication date
US7278138B2 (en) 2007-10-02
JP3763516B2 (ja) 2006-04-05
US20020144097A1 (en) 2002-10-03

Similar Documents

Publication Publication Date Title
US10819633B2 (en) Data-plane stateful processing units in packet processing pipelines
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
US9912610B2 (en) Data-plane stateful processing units in packet processing pipelines
US8151254B2 (en) Compiler, compiler apparatus and compilation method
JP3327818B2 (ja) プログラム変換装置及び記録媒体
US10523764B2 (en) Data-plane stateful processing units in packet processing pipelines
US8984260B2 (en) Predecode logic autovectorizing a group of scalar instructions including result summing add instruction to a vector instruction for execution in vector unit with dot product adder
US20060080645A1 (en) System and method for optimizing source code
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US7509634B2 (en) SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
US6738966B1 (en) Compiling device, computer-readable recording medium on which a compiling program is recorded and a compiling method
JP2005141410A (ja) コンパイラ装置及びコンパイル方法
JP4677172B2 (ja) レジスタあたり複数の符号付き独立データ要素の処理を可能にする装置、方法、およびコンパイラ
JP4647164B2 (ja) 中間言語内の不定サイズ変数
JP3983482B2 (ja) 高速ディスプレースメント付きpc相対分岐方式
JP4045802B2 (ja) プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム
JP2002312176A (ja) 変換プログラム、コンパイラ、コンピュータ装置、プログラム変換方法及び記憶媒体
US6817012B1 (en) Method of translating a source operation to a target operation, computer program, storage medium, computer and translation
US7886133B2 (en) Information processing apparatus and method for accelerating information processing
JP2004265279A (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
JPH11345127A (ja) コンパイラ
JP2000163266A (ja) 命令実行方式
JPH1196001A (ja) プログラム実行装置及びプログラム変換方法
JP3464019B2 (ja) レジスタの割付方式
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050913

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051212

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: 20060110

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20060111

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060113

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees