JP2003131887A - 変数ロードおよび処理の一括化コンパイル方法 - Google Patents

変数ロードおよび処理の一括化コンパイル方法

Info

Publication number
JP2003131887A
JP2003131887A JP2001327109A JP2001327109A JP2003131887A JP 2003131887 A JP2003131887 A JP 2003131887A JP 2001327109 A JP2001327109 A JP 2001327109A JP 2001327109 A JP2001327109 A JP 2001327109A JP 2003131887 A JP2003131887 A JP 2003131887A
Authority
JP
Japan
Prior art keywords
variables
comparison
register
size
execution code
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
JP2001327109A
Other languages
English (en)
Inventor
Eiichiro Sendai
英一郎 千代
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2001327109A priority Critical patent/JP2003131887A/ja
Publication of JP2003131887A publication Critical patent/JP2003131887A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】変数のロードおよび処理の一括化により、プロ
グラムの実行コードサイズの縮小および実行速度の向上
を行うコンパイル方法を提供する。 【解決手段】コンパイル対象プログラムの各文につい
て、CPUの備える命令によって一括処理が行えるかど
うかを判断する(ステップ206)。文で利用されてい
る複数の変数が、連続するメモリ領域に配置されてお
り、かつそのサイズの総和がレジスタサイズ以下の場合
には、それら複数の変数の値を同一レジスタ上に一括し
てロードし、そのレジスタ上の値を一括処理する実行コ
ードを生成する(ステップ207)。そうでない場合に
は通常の実行コードを生成する(ステップ208)。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は計算機の利用技術に
おいて、実行コードサイズを縮小し、実行速度を向上さ
せるコンパイル方法に関する。特に、複数の変数に対す
る処理を一括して行うことにより、処理に要する命令数
を削減するコンパイル方法に関する。
【0002】
【従来の技術】組み込みプログラムでは、実行コードの
格納に必要なROMサイズにより製品の製造コストが大
きく変化する。そのため、実行コードのサイズが可能な
限り小さくなるようなコンパイル方法が求められてい
る。実行速度の向上に関しては、実行コードサイズが増
加しない範囲内で要求されるのが一般的である。
【0003】組み込みプログラムでは、制御対象である
機械の状態を取得し、それに応じた処理を行う必要があ
る。機械の状態がビットフラグのように限定された小さ
な範囲の値で表現できる場合には、実行コードサイズの
縮小のため、レジスタサイズより小さなサイズの変数を
使用することが多い。実行時には、機械の状態を示す値
を変数に読み込み、その値を条件比較することで必要な
処理を選択したり、その値をもとにした各種演算処理を
行う。その際に、たとえば条件比較において、レジスタ
サイズより小さな複数の変数の値を参照する場合に、そ
れらの変数の値のロードおよび比較を一括して行うこと
ができれば、実行コードサイズを縮小し、かつ実行速度
を向上させることが可能である。
【0004】複数の変数のロードの一括化に関しては、
たとえば文献「J.W.Davidson他,Memo
ry Access Coalescing: A Tec
hnique for Eliminating Red
undant MemoryAccess, Proce
edings of the ACM SIGPLAN‘9
4 Conference on Programmin
g LanguageDesign and Imple
mentation, pp.186−194,199
4」に示されている手法がある。これによって、複数の
変数の値のロードを1つのロード命令で行う実行コード
を生成することができる。
【0005】
【発明が解決しようとする課題】上記論文は変数ロード
の一括化を目的とする一般的な手法である。一括ロード
したレジスタ上の値は、対応するSIMD命令が存在する場
合にはそのまま利用することができるが、それ以外の場
合には各変数の値を個々のレジスタに転送する処理が必
要となる。組み込みプログラムの対象とするほとんどCP
UはSIMD命令を備えておらず、ロード一括化によって必
要となる転送処理により、実行コードサイズが逆に増加
する可能性がある。
【0006】
【課題を解決するための手段】本発明では上記課題を解
決するために、複数の変数に対する処理を通常のCPU命
令を用いて一括して行える場合に限定して、複数の変数
を同一レジスタ上に一括ロードして処理を行うコード生
成を行う。たとえば比較処理の場合、変数と定数との等
値比較の論理積、もしくはその否定形の条件比較文にお
いて、比較対象の変数のサイズの総和がレジスタサイズ
以下であり、かつ連続するメモリ領域に配置されている
時に、比較対象の変数群の値を同一レジスタ上に一括し
て読み込み、比較対象の定数を統合した定数と一括して
比較を行うコードを生成することで、実行コードサイズ
を縮小し、実行速度を向上させる。
【0007】
【発明の実施の形態】以下、比較処理の一括化の場合に
おける本発明の一実施例を説明する。
【0008】図1は本発明によるコンパイラが稼動する
計算機システムの構成図である。図示するように、計算
機システムはCPU101、主記憶装置104、外部記
憶装置105、ディスプレイ装置102、キーボード1
03より構成されている。外部記憶装置105にはソー
スプログラム106、実行コード107が格納される。
主記憶装置104には、コンパイラ108と、コンパイ
ル処理過程で必要となる中間コード109、記号表11
0および変数参照表111が保持される。コンパイル処
理はCPU101がコンパイラプログラム108を実行
することにより行われる。キーボード103はユーザか
らのコマンドをコンパイラ108に与えるのに用いる。
ディスプレイ装置102はコンパイルの終了またはエラ
ーをユーザに知らせる。
【0009】図2はコンパイル処理の流れを示したフロ
ーチャートである。コンパイラの処理は、まずステップ
201で、構文解析を行う。構文解析はソースプログラ
ム106を読み出し、コンパイラ内部で処理可能な中間
コード109を作成する。構文解析処理については、た
とえば「エイホ、セシィ、ウルマン著:コンパイラI
(サイエンス社、1990年)30頁〜74頁」に記載
されている。次にステップ202で、変数参照解析を行
う。変数参照解析についても「エイホ、セシィ、ウルマ
ン著:コンパイラII(サイエンス社、1990年)74
1頁〜 772頁」に記載がある。変数参照解析によ
り、プログラムに含まれる各文ごとに、文で使用される
変数の集合、文に到達する変数の定義、および文から到
達可能な変数の使用が求められ、これが変数参照表11
0に記録される。次にステップ203で、変数のメモリ
割付けを行う。変数のメモリ割付けについても「エイ
ホ、セシィ、ウルマン著:コンパイラII(サイエンス
社、1990年)634頁〜 642頁」に記載があ
る。変数のメモリ割付けにより、プログラムに含まれる
各変数に対応するメモリ領域が決定され、これが記号表
111に記録される。次にステップ204で、未処理の
文があるか調べ、なければ終了する。未処理の文があれ
ばステップ205で文を1つ取り出す(sとする)。そ
してステップ206でsが比較一括化の対象であるかの
判定処理を行う。この処理については図3を用いてさら
に詳しく説明する。比較一括化の対象であると判定され
た場合には、ステップ207へ進み、比較一括化による
実行コードを生成する。この処理については図4を用い
てさらに詳しく説明する。比較一括化の対象でないと判
定された場合には、ステップ208へ進み、通常の実行
コード生成を行う。通常の実行コード生成については、
「エイホ、セシィ、ウルマン著:コンパイラII(サイエ
ンス社、1990年)624頁〜707頁」に記載があ
る。
【0010】図3はステップ206の処理の流れを詳し
く示した図である。ここでは与えられた文sが比較一括
化の適用対象であるかどうかの判定処理を行う。まずス
テップ301で文sが条件比較文であるかを調べ、そう
でなければステップ308へ進み、比較一括化の適用対
象外であると判定する。条件比較文である場合にはステ
ップ302へ進み、条件比較文中の比較式が、変数と定
数の等値比較の論理積、もしくはその否定形である変数
と定数の非等値比較の論理和であるかどうかを調べる。
そうでなければステップ308へ進み、比較一括化の適
用対象外であると判定する。そうであればステップ30
3へ進み、比較式から比較対象となっている変数群を取
り出す(v1,…vnとする)。次にステップ304
で、記号表111から変数v1,…vnのサイズを取得
し、その総和を求め、レジスタサイズと比較する。総和
がレジスタサイズより大きい場合にはステップ308へ
進み、比較一括化の適用対象外であると判定する。レジ
スタサイズ以下の場合にはステップ305へ進み、記号
表111から変数v1,…vnのメモリ位置を調べ、メ
モリ中に連続して配置されているかどうかを調べる。連
続して配置されていない場合にはステップ308へ進
み、比較一括化の適用対象外であると判定する。連続し
て配置されている場合にはステップ306へ進み、変数
参照表110から、文sに到達する変数v1,…vnの
定義および文sから到達可能な変数v1,…vnの使用
が存在するかどうかを調べる。存在する場合にはステッ
プ308へ進み、比較一括化の適用対象外であると判定
する。存在しない場合にはステップ307へ進み、比較
一括化の適用対象であると判定する。
【0011】図4はステップ207の処理の流れを詳し
く示した図である。ここでは与えられた文sに対して、
比較一括化を行った実行コードを生成する。
【0012】まずステップ401で比較対象である変数
群をすべて含むメモリ領域を求める(Rとする)。次に
ステップ402へ進み、比較対象である定数群を、対応
する変数のメモリ位置の順序に沿って結合する(Cとす
る)。定数の結合は、各定数を対応する変数のサイズで
表現した後に行う。次にステップ403へ進み、比較式
が変数と定数の等値比較の論理積である場合にはステッ
プ404でRとCを等値比較する実行コードを生成す
る。そうでない場合にはステップ405へ進み、RとC
を非等値比較する実行コードを生成する。
【0013】続いて、本実施例の適用例を示す。入力と
して図5(a)のようなプログラムを考える。また本適
用例においては生成する実行コードの目的機械のレジス
タサイズは4バイトであるとする。
【0014】図2のステップ202の変数参照解析によ
り、図5(b)のような変数参照表が作成される。
【0015】次にステップ203の変数のメモリ割付け
により、図5(c)のような記号表が作成される。
【0016】次にステップ204で未処理文として文5
05を取り出し、ステップ205で比較一括の適用対象
であるかの判定を行う。ステップ205を詳しくした図
3では、最初にステップ301で条件比較文かどうかの
判定を行う。文505は条件比較文ではないため、ステ
ップ308へ進み、比較一括化の適用対象外と判定す
る。そこで図2に戻り、ステップ208へ進み、通常の
実行コードの生成を行う。
【0017】次にステップ204へ戻り、未処理文とし
て文506を取り出し、ステップ205で比較一括の適
用対象であるかの判定を行う。ステップ205を詳しく
した図3では、最初にステップ301で条件比較文かど
うかの判定を行う。文506は条件比較文であるため、
ステップ302へ進む。ステップ302では、文506
中の比較式v1==2&&v2==3が変数と定数の等
値比較の論理積、もしくはその否定形であるかどうかの
判定を行う。v1==2およびv2==3はいずれも変
数と定数の等値比較であり、かつ両者は論理積として結
合されているため、文506はステップ302の条件を
満たす。そこでステップ303へ進み、比較式から比較
対象である変数v1、v2を取り出す。次にステップ3
04で、v1、v2のサイズを記号表より取得し、総和
をレジスタサイズと比較する。v1、v2のサイズは2
バイトで、その総和は4バイトであり、レジスタサイズ
の4バイト以下である。そこでステップ305へ進み、
v1、v2がメモリ中に連続して配置されているかどう
かを記号表から調べる。v1のメモリ位置は4番地、サ
イズは2バイトであり、v2のメモリ位置は6番地であ
るため、v1、v2は連続して配置されていることがわ
かる。そこでステップ306へ進み、文506へ到達す
るv1、v2の定義、および文506から到達可能なv
1、v2の使用が存在するかどうかを変数参照表から調
べる。その結果、これらはいずれも存在しないことが分
かるため、ステップ307へ進み、比較一括化の適用対
象であると判定する。そこで図2へ戻り、ステップ20
7へ進み、比較一括化による実行コードの生成を行う。
ステップ207を詳しくした図4では、最初にステップ
401で比較対象である変数v1、v2のメモリ領域を
記号表より取得し、4番地から始まるサイズが4バイト
の領域を比較変数群の領域Rとする。次にステップ40
2へ進み、v1、v2の比較対象である定数値2および
3をv1、v2のメモリ位置の順に沿って結合し、0x00
020003を統合定数値Cとする。次にステップ403へ進
み、現在処理している比較式は変数と定数の等値比較の
論理積であるため、ステップ404へ進む。ステップ4
04では、RとCを等値比較する実行コードの生成を行
う。
【0018】次にステップ204へ戻り、未処理文とし
て文508を取り出し、ステップ205で比較一括の適
用対象であるかの判定を行う。ステップ205を詳しく
した図3では、最初にステップ301で条件比較文かど
うかの判定を行う。文508は条件比較文ではないた
め、ステップ308へ進み、比較一括化の適用対象外と
判定する。そこで図2に戻り、ステップ208へ進み、
通常の実行コードの生成を行う。
【0019】次にステップ204へ戻るが、未処理文は
存在しないため、終了する。生成した実行コードは図6
(a)のようになる。比較一括化を行わない場合の実行
コードは図6(b)のようになる。
【0020】使用されている命令のうち、load.4
byteは第2オペランドで指定したメモリ番地から4
バイトの領域の値を第1オペランドで指定したレジスタ
にロードする。load.2byteはロードするデー
タのサイズが2バイトになる他はload.4byte
と同じである。store.4byteは第2オペラン
ドで指定したメモリ番地から4バイトの領域へ第1オペ
ランドで指定したレジスタの値をストアする。stor
e.2byteはストアする領域のサイズが2バイトに
なる他はstore.4byteと同じである。add
は第2オペランドの値と第3オペランドの値を加算し、
結果を第1オペランドのレジスタへ格納する。comp
areは第1オペランドの値と第2オペランドの値を等
値比較し、結果を比較フラグに格納する。jump.n
otequalは比較フラグがオフの場合に、オペラン
ドで指定したラベルアドレスへ分岐する。return
は呼び出し元の関数へ復帰する。
【0021】図6(a)と図6(b)を比べてみると、
文506の比較処理に要する命令は、本発明を適用しな
い場合には文613から618までの6命令であるのに
対し、本発明を適用した場合には文604から606ま
での3命令となっており、比較一括化により比較に要す
る命令数が削減され、実行コードサイズが縮小されてい
ることがわかる。
【0022】
【発明の効果】本発明によれば、コンパイラは連続して
配置されたレジスタサイズより小さな変数と定数の等値
比較の論理積、もしくはその否定形の条件比較文で行う
比較の一括化が可能となる。また、比較以外の処理に関
しても、CPUの備える命令の種類に応じて同様の一括化
を行うことができる。これにより、実行コードサイズの
縮小および実行速度の向上に効果がある。
【図面の簡単な説明】
【図1】本発明のコンパイラが稼動する計算機システム
の構成図。
【図2】コンパイラの処理の流れ。
【図3】比較一括化の可否の判定処理の流れ。
【図4】比較一括化の処理の流れ。
【図5】本発明の比較一括化の例。
【図6】本発明の比較一括化の例(結果)。
【符号の説明】
101…CPU、102…ディスプレイ装置、103…
キーボード、104…主記憶装置、105…外部記憶装
置。

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 SIMD命令を備えていないCPU上で実行す
    るプログラムにおいて、複数の変数が連続するメモリ領
    域に配置され、そのサイズの総和がレジスタサイズ以下
    の場合に、該変数群の値を同一レジスタ上に一括してロ
    ードし、該レジスタの値を一括して処理することによ
    り、実行コードサイズの縮小および実行速度の向上を達
    成することを特徴とするコンパイル方法。
  2. 【請求項2】 請求項1のコンパイル方法であって、変
    数と定数との等値比較の論理積、もしくはその否定形の
    条件比較文を含むプログラムにおいて、比較対象の変数
    のサイズの総和がレジスタサイズ以下であり、かつ連続
    するメモリ領域に配置されている時、比較対象の変数群
    の値を同一レジスタ上に一括してロードし、比較対象の
    定数を統合した定数と一括して比較を行うことで、実行
    コードサイズの縮小および実行速度の向上を達成するこ
    とを特徴とするコンパイル方法。
  3. 【請求項3】 請求項1および請求項2のコンパイル方
    法を用いたコンパイラ。
  4. 【請求項4】 請求項3のコンパイラを格納した記憶媒
    体。
JP2001327109A 2001-10-25 2001-10-25 変数ロードおよび処理の一括化コンパイル方法 Pending JP2003131887A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001327109A JP2003131887A (ja) 2001-10-25 2001-10-25 変数ロードおよび処理の一括化コンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001327109A JP2003131887A (ja) 2001-10-25 2001-10-25 変数ロードおよび処理の一括化コンパイル方法

Publications (1)

Publication Number Publication Date
JP2003131887A true JP2003131887A (ja) 2003-05-09

Family

ID=19143378

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001327109A Pending JP2003131887A (ja) 2001-10-25 2001-10-25 変数ロードおよび処理の一括化コンパイル方法

Country Status (1)

Country Link
JP (1) JP2003131887A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007536599A (ja) * 2003-11-19 2007-12-13 インテル・コーポレーション メモリアクセス命令のベクトル化
JP2011165216A (ja) * 2004-06-24 2011-08-25 Intel Corp 複数の入力命令をベクトル化する方法及び装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007536599A (ja) * 2003-11-19 2007-12-13 インテル・コーポレーション メモリアクセス命令のベクトル化
JP2011118909A (ja) * 2003-11-19 2011-06-16 Intel Corp メモリアクセス命令のベクトル化
JP2011165216A (ja) * 2004-06-24 2011-08-25 Intel Corp 複数の入力命令をベクトル化する方法及び装置

Similar Documents

Publication Publication Date Title
US10776114B2 (en) Variable register and immediate field encoding in an instruction set architecture
JP3847672B2 (ja) コンパイラ装置及びコンパイル方法
JP4485198B2 (ja) Javaアクセラレータを備えたプロセッサシステム
US6324686B1 (en) Just in time compiler technique
JP3801545B2 (ja) コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
EP2324424B1 (en) Apparatus and method for handling page protection faults in a computing system
US7316007B2 (en) Optimization of n-base typed arithmetic expressions
US5721927A (en) Method for verifying contiquity of a binary translated block of instructions by attaching a compare and/or branch instruction to predecessor block of instructions
EP0806725B1 (en) Method and apparatus for early insertion of assembler code for optimization
US20070169061A1 (en) Run-Time Parallelization of Loops in Computer Programs Using Bit Vectors
EP2439635B1 (en) System and method for fast branching using a programmable branch table
US7028293B2 (en) Constant return optimization transforming indirect calls to data fetches
JPH0496825A (ja) データ・プロセッサ
US6550000B1 (en) Processor to execute in parallel plurality of instructions using plurality of functional units, and instruction allocation controller
US6578193B1 (en) Endian-neutral loader for interpretive environment
US7032230B2 (en) Efficient virtual function calls for compiled/interpreted environments
US6691307B2 (en) Interpreter optimization for native endianness
US20030079210A1 (en) Integrated register allocator in a compiler
Gubner et al. Exploring query execution strategies for jit, vectorization and simd
US6571387B1 (en) Method and computer program product for global minimization of sign-extension and zero-extension operations
JP2003131887A (ja) 変数ロードおよび処理の一括化コンパイル方法
US6408380B1 (en) Execution of an instruction to load two independently selected registers in a single cycle
JP2002182926A (ja) コンパイル方法及びコンピュータ読み取り可能な記録媒体
JP6790646B2 (ja) コンパイル装置、コンパイル方法、および、コンパイルプログラム
Cockshott Glasgow Pascal Compiler with vector extensions