JPH11238012A - メモリアクセス一括化方法および記憶媒体 - Google Patents

メモリアクセス一括化方法および記憶媒体

Info

Publication number
JPH11238012A
JPH11238012A JP3851398A JP3851398A JPH11238012A JP H11238012 A JPH11238012 A JP H11238012A JP 3851398 A JP3851398 A JP 3851398A JP 3851398 A JP3851398 A JP 3851398A JP H11238012 A JPH11238012 A JP H11238012A
Authority
JP
Japan
Prior art keywords
basic block
batch
data
instruction
batching
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
JP3851398A
Other languages
English (en)
Inventor
Keiko Motokawa
敬子 本川
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 JP3851398A priority Critical patent/JPH11238012A/ja
Publication of JPH11238012A publication Critical patent/JPH11238012A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 メモリ空間上で連続的に配置された複数のデ
ータに対するアクセスの一括化を、異なる基本ブロック
に属するデータに対しても可能とする。 【解決手段】 メモリ空間上で連続的に配置されたデー
タの組を見つけ、それらデータのロード/ストアの種別
およびそれらが属する基本ブロックの関係に応じて、一
括ロード命令または一括ストア命令を生成すべき位置を
決定する。そして、決定した位置とデータの位置との間
の処理によってデータの内容が変更される可能性がある
か否かの依存性を判定し、“依存なし”のときのみ、上
記決定した位置に一括ロード命令または一括ストア命令
を生成する。 【効果】 異なる基本ブロックに属する複数のメモリア
クセスでも一括化可能となる。if文を含むループにル
ープ展開を適用した場合には、ループ展開によって現れ
る配列の隣接要素参照の組は異なる基本ブロックに属す
ることになるので、本発明により一括化可能となる効果
が特に大きい。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、メモリアクセス一
括化方法および記録媒体に関し、さらに詳しくは、異な
る基本ブロックに属するデータを一括してアクセス可能
とするメモリアクセス一括化方法およびそのメモリアク
セス一括化方法をコンピュータに実現させるプログラム
を記録した記録媒体に関する。
【0002】
【従来の技術】プログラムの実行コードの中で、ロード
命令・ストア命令の占める割合は高い。このため、複数
のデータを一度にロードする一括ロード命令・一括スト
ア命令を生成することによって、ロード命令・ストア命
令を削減する最適化が行われている。このような最適化
を、メモリアクセス一括化と呼ぶ。
【0003】メモリアクセス一括化の方法については、
論文“ダヴィドソンとジンターカー:「メモリ・アクセ
ス・コアレッシング:ア・テクニック・フォー・エリミ
ネイティング・リダンダント・メモリ・アクセシズ」、
プロシーディングス・オブ・ザ・エイ・シー・エム・コ
ンファレンス・オン・プログラミング・ランゲージ・デ
ザイン・アンド・インプリメンテーション、1994年、第
186頁から第194頁(J.W.Davidson and S.Jinturkar: Me
mory Access Coalescing: A Technique for Eliminatin
g Redundant Memory Accesses. Proceedings of the AC
M Conference on Programming Language Design and Im
plementation, 1994, pp.186-194)”に記載されてい
る。この論文では、同一の基本ブロックに属する複数の
メモリアクセスを一括化している。
【0004】
【発明が解決しようとする課題】同一の基本ブロックに
属する複数のメモリアクセスは全てのメモリアクセスが
必ず実行されるが、異なる基本ブロックに属する複数の
メモリアクセスは全てのメモリアクセスが必ず実行され
るとは限らない。しかし、従来のメモリアクセス一括化
方法では、全てのメモリアクセスが必ず実行されること
を前提としていたため、異なる基本ブロックに属するメ
モリアクセスには適用できない問題点があった。そこ
で、本発明の第1の目的は、異なる基本ブロックに属す
るメモリアクセスを一括化可能とするメモリアクセス一
括化方法を提供することにある。また、本発明の第2の
目的は、異なる基本ブロックに属するメモリアクセスを
一括化可能とするメモリアクセス一括化方法をコンピュ
ータに実現させるプログラムを記録した記録媒体を提供
することにある。
【0005】
【課題を解決するための手段】第1の観点では、本発明
は、メモリ空間上に連続的に配置された2個以上のデー
タを一度にロードする命令(一括ロード命令と呼ぶ)ま
たは一度にストアする命令(一括ストア命令と呼ぶ)を
生成することによってメモリアクセスを一括化するメモ
リアクセス一括化方法であって、処理対象プログラム中
の異なる基本ブロック(文の列であって、その文の列の
先頭から実行が始まり、途中へ飛び込んだり途中から飛
び出すことのないもの)に属するデータを一括化対象デ
ータとして取り出す一括化対象データ取出ステップと、
各一括化対象データが属する各基本ブロックの関係が
“支配(プログラムの入口から基本ブロックBへ至る全
てのパス上に基本ブロックAがあるとき、基本ブロック
Aは基本ブロックBを支配するという)”または“後支
配(基本ブロックBからプログラムの出口に至る全ての
パス上に基本ブロックAがあるとき、基本ブロックAは
基本ブロックBを後支配するという)”または“等価
(基本ブロックAが基本ブロックBを支配し、かつ基本
ブロックBが基本ブロックAを後支配するとき、基本ブ
ロックAと基本ブロックBは等価であるという)”であ
るかどうかを解析する関係解析ステップと、各一括化対
象データのロード/ストアの種別および基本ブロック間
の関係に応じて一括ロード命令または一括ストア命令を
生成すべき位置を決定する生成位置決定ステップと、一
括化対象データがロードするデータであるときは、上記
生成位置決定ステップで決定された位置と当該一括化対
象データの位置との間に当該一括化対象データをストア
する文がないこと、および、一括化対象データがストア
するデータであるときは、当該一括化対象データの位置
と上記生成位置決定ステップで決定された位置との間に
当該一括化対象データをロードする文およびストアする
文がないこと、という“依存なし”条件を判定する依存
性判定ステップと、上記依存性判定ステップで“依存な
し”条件が満たされたときのみ、上記生成位置決定ステ
ップで決定された位置に、前記各一括化対象データに対
する一括ロード命令または一括ストア命令を生成する命
令生成ステップとを含むことを特徴とするメモリアクセ
ス一括化方法を提供する。上記第1の観点のメモリアク
セス一括化方法では、異なる基本ブロックの関係を考慮
して、一括ロード命令または一括ストア命令を生成すべ
き位置を決定する。また、“依存なし”条件を満足する
ときのみ、一括ロード命令または一括ストア命令を生成
する。このことにより、全てのメモリアクセスが必ず実
行されるとは限らない、異なる基本ブロックに属する複
数のメモリアクセスでも一括化可能となる。特に、if
文を含むループにループ展開を適用した場合には、ルー
プ展開によって現れる配列の隣接要素参照の組は異なる
基本ブロックに属することになるので、本発明により一
括化可能となる効果が大きい。
【0006】第2の観点では、本発明は、上記構成のメ
モリアクセス一括化方法において、前記生成位置決定ス
テップは、前記各一括化対象データがロードするデータ
であり且つ各基本ブロックの関係が“支配”である場合
には、支配する基本ブロックに属する一括化対象データ
の文の直前に、一括ロード命令を生成すべき位置を決定
することを特徴とするメモリアクセス一括化方法を提供
する。異なる基本ブロックの関係が“支配”であると
き、後にある基本ブロックが実行される場合は、前にあ
る基本ブロックも必ず実行されている。そこで、上記第
2の観点のメモリアクセス一括化方法では、支配する基
本ブロックに属する一括化対象データの文の直前に一括
ロード命令を置く。これが最も効率的となる(それより
前に置いてもよいが、レジスタを占有する無駄な時間が
長くなる)。
【0007】第3の観点では、本発明は、上記構成のメ
モリアクセス一括化方法において、前記生成位置決定ス
テップは、前記各一括化対象データがロードするデータ
であり且つ各基本ブロックの関係が“後支配”である場
合には、各基本ブロックを共通して支配する基本ブロッ
クの末尾に、一括ロード命令を生成すべき位置を決定す
ることを特徴とするメモリアクセス一括化方法を提供す
る。異なる基本ブロックの関係が“後支配”であると
き、前にある基本ブロックが必ず実行されるとは限らな
い。そこで、上記第3の観点のメモリアクセス一括化方
法では、各基本ブロックを共通に支配する基本ブロック
を探す。この共通に支配する基本ブロックは、各基本ブ
ロックのいずれかが実行される場合は、必ず実行されて
いる。そこで、その共通に支配する基本ブロックの末尾
に一括ロード命令を置く。これが最も効率的となる(そ
れより前に置いてもよいが、レジスタを占有する無駄な
時間が長くなる)。
【0008】第4の観点では、本発明は、上記第3の観
点のメモリアクセス一括化方法において、前記生成位置
決定ステップは、前記各基本ブロックを共通して支配す
る基本ブロックの最後がif文であるときは、そのif
文の直前に、一括ロード命令を生成すべき位置を決定す
ることを特徴とするメモリアクセス一括化方法を提供す
る。各基本ブロックを共通に支配する基本ブロックの最
後がif文であると、その次の文は実行されない場合が
ある。そこで、上記第4の観点のメモリアクセス一括化
方法では、if文の直前に一括ロード命令を置く。これ
が最も効率的となる(それより前に置いてもよいが、レ
ジスタを占有する無駄時間が長くなる)。
【0009】第5の観点では、本発明は、上記構成のメ
モリアクセス一括化方法において、前記生成位置決定ス
テップは、前記各一括化対象データがストアするデータ
であり且つ各基本ブロックの関係が“等価”である場合
には、後支配する基本ブロックに属する一括化対象デー
タの文の直後に、一括ストア命令を生成すべき位置を決
定することを特徴とするメモリアクセス一括化方法を提
供する。ストアの場合はメモリの内容を変更してしまう
ため、各基本ブロックが両方とも実行される場合だけ一
括化すべきである。各基本ブロックの関係が“等価”の
場合は、後の基本ブロックが実行されるときは、前の基
本ブロックも必ず実行されている。そこで、上記第5の
観点のメモリアクセス一括化方法では、各基本ブロック
の関係が“等価”の場合のみ一括化を行う。また、後支
配する基本ブロックに属する一括化対象データの文の直
後に一括ストア命令を置く。これが最も効率的となる
(それより後に置いてもよいが、レジスタを占有する無
駄な時間が長くなる)。
【0010】第6の観点では、本発明は、処理対象プロ
グラム中の異なる基本ブロック(文の列であって、その
文の列の先頭から実行が始まり、途中へ飛び込んだり途
中から飛び出すことのないもの)に属し且つメモリ空間
上に連続的に配置された2個以上のデータを一括化対象
データとして取り出す一括化対象データ取出ステップ
と、各一括化対象データが属する各基本ブロックの関係
が“支配(入口から基本ブロックBへ至る全てのパス上
に基本ブロックAがあるとき、基本ブロックAは基本ブ
ロックBを支配するという)”または“後支配(基本ブ
ロックBから出口に至る全てのパス上に基本ブロックA
があるとき、基本ブロックAは基本ブロックBを後支配
するという)”または“等価(基本ブロックAが基本ブ
ロックBを支配し、かつ基本ブロックBが基本ブロック
Aを後支配するとき、基本ブロックAと基本ブロックB
は等価であるという)”であるかどうかを解析する関係
解析ステップと、各一括化対象データのロード/ストア
の種別および基本ブロック間の関係に応じて、各一括化
対象データを一度にロードする命令(一括ロード命令と
呼ぶ)または一度にストアする命令(一括ストア命令と
呼ぶ)を生成すべき位置を決定する生成位置決定ステッ
プと、一括化対象データがロードするデータであるとき
は、上記生成位置決定ステップで決定された位置と当該
一括化対象データの位置との間に当該一括化対象データ
をストアする文がないこと、および、一括化対象データ
がストアするデータであるときは、当該一括化対象デー
タの位置と上記生成位置決定ステップで決定された位置
との間に当該一括化対象データをロードする文およびス
トアする文がないこと、という“依存なし”条件を判定
する依存性判定ステップと、上記依存性判定ステップで
“依存なし”条件が満たされたときのみ、上記生成位置
決定ステップで決定された位置に、前記各一括化対象デ
ータに対する一括ロード命令または一括ストア命令を生
成する命令生成ステップとをコンピュータに実現させる
プログラムを記録した、コンピュータ読み取り可能な記
録媒体を提供する。上記記録媒体をコンピュータに読み
取らせれば、上記メモリアクセス一括化方法を実施でき
る。
【0011】
【発明の実施の形態】以下、図面を用いて本発明の実施
の形態について説明する。なお、これにより本発明が限
定されるものではない。
【0012】図1は、本発明のメモリアクセス一括化方
法を実施する計算機システムの構成図である。この計算
機システムは、CPU101、ディスプレイ装置10
2、キーボード103、主記憶装置104および外部記
憶装置105を具備している。また、図示していない
が、可搬記録媒体(CD−ROM,FD,MOなど)を
読み取るドライブ装置を具備している。前記主記憶装置
104には、コンパイラ(プログラム変換手段)10
8、中間コード109、配列表110および基本ブロッ
ク表111が格納される。前記コンパイラ108は、前
記可搬記録媒体に記録されたものを前記ドライブ装置で
読み取って前記主記憶装置104に格納したものであ
る。また、前記外部記憶装置105には、ソースプログ
ラム106およびオブジェクトプログラム107が格納
される。前記キーボード103からコンパイラ起動コマ
ンドをユーザが入力すると、前記CPU101が前記コ
ンパイラ108を実行して、前記ソースプログラム10
6から前記オブジェクトプログラム107を作成する。
そのコンパイル過程において、前記中間コード109、
前記配列表110および前記基本ブロック表111が作
成される。また、前記ディスプレイ装置102に、コン
パイラ終了メッセージやエラーメッセージが表示され
る。本発明のメモリアクセス一括化方法は、前記コンパ
イラ108の実行により実施される。
【0013】図2に、前記コンパイラ108の処理手順
を示す。構文解析201では、前記ソースプログラム1
06の構文解析を行い、前記中間コード109および前
記配列表110を出力する。これら中間コード109お
よび配列表110については、後で図4,図5を参照し
て説明する。メモリアクセス一括化202では、前記中
間コード109に対して、隣接する配列要素のメモリア
クセスを一括化する最適化を行う。これが本発明のメモ
リアクセス一括化方法の特徴部分であり、後で図6を参
照して詳細に説明する。レジスタ割り付け203では、
前記中間コード109に対して、レジスタ割り付けを行
う。コード生成205では、前記中間コード109を前
記オブジェクトプログラム107に変換し、出力する。
【0014】図3は、前記ソースプログラム106の具
体例である。図4は、図3のソースプログラム106に
対応した中間コード109の例である。中間コード10
9は、基本ブロックBB0〜BB7をエッジで結んだグ
ラフで表現されている。基本ブロックは、連続した文の
列で、その文の列の先頭から実行が始まり、途中へ飛び
込んだり途中から飛び出すことのないものである。エッ
ジは、基本ブロック間の遷移を表している。このような
グラフは、制御フローグラフと呼ばれる。S0からS8
は、文ラベルである。
【0015】図5は、図3に示すソースプログラム10
6に対応した配列表110の例である。この配列表11
0は、配列名501、型502および要素参照503の
3つのフィールドから構成されている。前記配列名50
1には、前記中間コード109に現れる各配列の名称を
登録する。前記型502には、前記中間コード109に
現れる各配列のデータ型を登録する。データ型には、例
えば“single”“double”“integer”などがある。前
記要素参照503には、前記中間コード109に現れる
各配列の要素参照が登録される。各要素参照は、文ラベ
ル(S1〜S6)により中間コード109との対応がと
れる形で登録される。
【0016】図6に、前記メモリアクセス一括化202
の処理手順を示す。ステップ601では、基本ブロック
(BB0〜BB7)の解析を行い、前記基本ブロック表
111に結果を登録する。図7に、図4の中間コード1
09の基本ブロックを解析して得られた基本ブロック表
111を示す。この基本ブロック表111は、基本ブロ
ック701、支配ブロック702および後支配ブロック
703の3つのフィールドから構成されている。前記基
本ブロック701には、各基本ブロックの名称“BB
0”〜“BB7”を登録する。前記支配ブロック702
には、基本ブロック701に対する支配ブロックの名称
を登録する。前記後支配ブロック703には、基本ブロ
ック701に対する後支配ブロックを登録する。なお、
支配ブロックおよび後支配ブロックの解析方法は、例え
ば“M.Wolfe,High Performance Compilers for Paralle
l Computing, Addison-Wesley Publishing Company, In
c., 1996, pp.64-71”に記載されている。
【0017】図6に戻り、ステップ602およびステッ
プ603では、未処理の配列を1つずつ取り出して処理
対象としてステップ604へ進み、未処理の配列がなけ
れば処理を終了する。ステップ604では、処理対象の
配列について配列表110の型502を参照して一括ロ
ード命令または一括ストア命令の適用対象の型かどうか
を判定し、適用対象の型であればステップ605へ進
み、適用対象の型でなければ前記ステップ602へ戻
る。この適用対象の型は、ターゲットマシンの命令に依
存する。例えばターゲットマシンに8バイトの浮動小数
点データを複数個まとめてロードできる一括ロード命令
がある場合には、“double”型は適用対象の型になる。
ステップ605では、処理対象の配列に対してメモリア
クセス一括化を適用する。次に、図8を参照して、この
メモリアクセス一括化の処理を説明する。
【0018】図8は、前記メモリアクセス一括化の処理
を示すフロー図である。なお、このフロー図では処理対
象の配列の2個の要素のロード/ストアを一括化する場
合を想定して説明するが、3個以上の要素のロード/ス
トアを一括化する場合も同様に実施できる(例えば、3
個の要素があるとき、まず2個の要素のロード/ストア
を一括化し、その一括化アクセス命令と残りの1個の要
素のロード/ストアを一括化すればよい)。ステップ8
01およびステップ802では、処理対象の配列の要素
の中でステップ807,808の処理が行われていない
要素の組であってステップ803の処理が行われていな
い組を1組ずつ取り出して処理対象要素(ref1,ref2)
としてステップ803へ進み、そういう組がなければ処
理を終了する。ステップ803では、一括化可能な第1
条件(処理対象要素ref1,ref2が隣接要素であり且つ両
方の要素参照の種別が同じである)が満たされるかどう
かを調べ、満たされるならステップ804へ進み、満た
されないなら前記ステップ801に戻る。なお、この第
1条件は、一括ロード命令または一括ストア命令を使う
ためには“処理対象要素ref1,ref2が隣接要素である
(要素ref1のアドレスとサイズの和が要素ref2のアドレ
スに等しい)”こと及び“要素参照の種別が同じである
(両方がロードであるか又は両方がストアである)”こ
とが必要であることを意味している。
【0019】ステップ804では、一括化可能な第2条
件(処理対象要素ref1,ref2が属している基本ブロック
の関係が“等価(“基本ブロックA,Bが等価であると
は、AがBを支配しかつBがAを後支配する、または、
BがAを支配しかつAがBを後支配すること)”である
か、要素参照の種別がロードであり且つ基本ブロックの
関係が“支配”または“後支配”である)が満たされる
かどうかを調べ、満たされるならステップ805へ進
み、満たされないなら前記ステップ801に戻る。な
お、この第2条件は、ストアの場合は必ず両方の参照が
実行される“等価”の関係が必要であり(そうでない
と、本来は実行されないストアが実行されてしまう場合
が生じ、変えてはいけないメモリの内容が変わってしま
う危険がある)、ロードの場合は必ず一方の参照が実行
される“支配”または“後支配”の関係が必要である
(本来は実行されないロードが実行されても他へ影響を
与えないから、他方の参照が実施されなくても支障を生
じない。但し、両方の参照が実施されないとロードが全
くの無駄になるから、少なくとも一方のロードは必ず実
行されるべきである)”ことを意味している。
【0020】図9は、前記ステップ804の処理手順の
詳細を示すフロー図である。ステップ901では、処理
対象要素ref1,ref2が属している基本ブロックを求め、
それらをB1,B2とする。ステップ902では、基本
ブロックB1,B2の関係が“等価”であるかを調べ
る。すなわち、基本ブロックB1,B2について図7の
基本ブロック表111の支配ブロック702および後支
配ブロック703のフィールドを参照し、基本ブロック
B1の支配ブロック702に基本ブロックB2が登録さ
れており且つ基本ブロックB2の後支配ブロック703
に基本ブロックB1が登録されているか、又は、基本ブ
ロックB1の後支配ブロック703に基本ブロックB2
が登録されており且つ基本ブロックB2の支配ブロック
702に基本ブロックB1が登録されているか、を調べ
る。そして、“等価”であればステップ908へ進み、
“等価”でなければステップ903へ進む。ステップ9
03では、処理対象要素ref1,ref2の参照がロードであ
るかどうかを調べ、ロードならばステップ904へ進
み、ロードでない(ストアである)ならばステップ90
9へ進む。
【0021】ステップ904,905では、基本ブロッ
クB1,B2の一方が他方の“支配”ブロックであるか
どうかを調べて、そうならステップ908へ進み、そう
でないならステップ906へ進む。
【0022】ステップ906,907では、基本ブロッ
クB1,B2の一方が他方の“後支配”ブロックである
かどうかを調べて、そうならステップ908へ進み、そ
うでないならステップ909へ進む。
【0023】ステップ908では、“条件を満たす”を
返り値として図8のステップ804に戻る。これは次の
場合である。 (1) “等価”の場合。ロードでもストアでもよい。 (2) ロードであり且つ“支配”又は“後支配”の一方ま
たは両方の場合。
【0024】ステップ909では、“条件を満たさな
い”を返り値として図8のステップ804に戻る。これ
は次の場合である。 (1) ストアであり且つ“等価”でない場合。 (2) ロードであり且つ“支配”でも“後支配”でもない
場合。
【0025】図8に戻り、ステップ805では、一括ロ
ード命令または一括ストア命令のコードを生成する位置
を決定し、ステップ806へ進む。一括ロード命令を生
成する位置は、処理対象要素ref1,ref2を参照する各文
の両方よりも前であり、換言すれば、支配する基本ブロ
ックに属する処理対象要素を参照する文より前、また
は、両基本ブロックB1,B2の共通の支配ブロック中
である。一括ストア命令を生成する位置は、処理対象要
素ref1,ref2を参照する各文の両方よりも後であり、換
言すれば、後支配する基本ブロックに属する処理対象要
素を参照する文より後である。図10は、前記ステップ
805の処理手順の詳細を示すフロー図である。ステッ
プ1001では、処理対象要素ref1,ref2が属している
基本ブロックを求め、それらをB1,B2とする。ステ
ップ1002では、処理対象要素ref1,ref2の参照がロ
ードであるかどうかを調べ、ロードならばステップ10
06へ進み、ロードでない(ストアである)ならばステ
ップ1003へ進む。
【0026】ステップ1003では、基本ブロックB1
が後支配ブロックであるかどうかを調べ、そうであれば
ステップ1004へ進み、そうでなければステップ10
05へ進む。ステップ1004では、基本ブロックB1
に属する処理対象要素ref1を参照する文の直後を、一括
ストア命令を生成する位置positionとする。ステップ1
005では、基本ブロックB2が後支配ブロックである
から、基本ブロックB2に属する処理対象要素ref2を参
照する文の直後を、一括ストア命令を生成する位置posi
tionとする。そして、図8のステップ805に戻る。
【0027】ステップ1006では、基本ブロックB1
が支配ブロックであるかどうかを調べ、そうであればス
テップ1007へ進み、そうでなければステップ100
8へ進む。ステップ1007では、基本ブロックB1に
属する処理対象要素ref1を参照する文の直前を、一括ロ
ード命令を生成する位置positionとする。そして、図8
のステップ805に戻る。
【0028】ステップ1008では、基本ブロックB2
が支配ブロックであるかどうかを調べ、そうであればス
テップ1009へ進み、そうでなければステップ101
0へ進む。ステップ1009では、基本ブロックB2に
属する処理対象要素ref2を参照する文の直前を、一括ロ
ード命令を生成する位置positionとする。そして、図8
のステップ805に戻る。
【0029】ステップ1010では、基本ブロックB
1,B2が後支配の関係にあるから、基本ブロックB
1,B2の共通の支配ブロックB3を求め、その共通支
配ブロックB3の末尾を、一括ロード命令を生成する位
置positionとする。但し、共通支配ブロックB3の最後
の文がif文などの場合にはその直後に文を挿入するこ
とができないので、その最後の文の直前とする。そし
て、図8のステップ805に戻る。共通支配ブロックB
3の調べ方は、基本ブロックB1,B2について図7の
基本ブロック表111の支配ブロック702のフィール
ドを参照し、両方に登録されている基本ブロックを探せ
ばよい。なお、両方に登録されている基本ブロックが複
数あるときは、基本ブロックB1,B2になるべく近い
ものを選ぶ。
【0030】図8に戻り、ステップ806では、一括化
可能な第3条件(処理対象要素をストアすべき文と一括
ストア命令の位置positionの間に当該処理対象要素をロ
ードまたはストアする文がないこと、および、一括ロー
ド命令の位置positionと処理対象要素をロードすべき文
の間に当該処理対象要素をストアする文がないこと)が
満たされるかどうかを調べ、満たされるならステップ8
07へ進み、満たされないなら前記ステップ801に戻
る。なお、この第3条件は、処理対象要素をストアする
元々の文が実行されるべき時から一括化ストアが実際に
行われるまでの間に、当該処理対象要素の内容がロード
文により変更されてしまう場合およびストア文によりス
トアの順番が変わってしまう場合、および、一括化ロー
ドした後、その処理対象要素をロードする元々の文が実
行される時までの間に、当該処理対象要素の内容がスト
ア文により変更されてしまう場合には、内容の不整合を
生じるため一括化できない、ことを意味している。上記
第3条件を満たすことを“依存なし”と表現し、上記第
3条件を満たさないことを“依存あり”と表現する。
【0031】図11は、上記ステップ806の処理手順
の詳細を示すフロー図である。ステップ1101では、
処理対象要素ref1を着目要素refとする。ステップ1
102では、着目要素refの参照がロードかどうか調
べる。ロードでない(ストアである)ならばステップ1
103へ進み、ロードであるならばステップ1104へ
進む。ステップ1103では、着目要素refをストア
する元の文と一括ストア命令の位置positionの間に、着
目要素refをロードする文があるかどうかを調べる。
あればステップ1107へ進み、なければステップ11
04へ進む。
【0032】ステップ1104では、 着目要素ref
をストアする元の文と一括ストア命令の位置positionの
間に、着目要素refをストアする文があるかどうかを
調べる。あればステップ1107へ進み、なければステ
ップ1105へ進む。また、一括ロード命令の位置posi
tionと着目要素refをロードする元の文の間に、着目
要素refをストアする文があるかどうかを調べる。あ
ればステップ1107へ進み、なければステップ110
5へ進む。
【0033】ステップ1105,1106では、処理対
象要素ref2を着目要素refとして、前記ステップ11
02へ戻る。そして、処理対象要素ref2についての処理
が終れば、ステップ1108へ進む。
【0034】ステップ1107では、“依存あり”を返
り値として図8のステップ806に戻る。これは次の場
合である。 (1) 処理対象要素ref1をストアする元の文または処理対
象要素ref2をストアする元の文と一括ストア命令の位置
positionの間に、着目要素refをロードまたはストア
する文がある。 (2) 一括ロード命令の位置positionと処理対象要素ref1
をロードする元の文または処理対象要素ref2をロードす
る元の文の間に、着目要素refをストアする文があ
る。
【0035】ステップ1108では、“依存なし”を返
り値として図8のステップ806に戻る。これは次の場
合である。 (1) 処理対象要素ref1をストアする元の文と一括ストア
命令の位置positionの間および処理対象要素ref2をスト
アする元の文と一括ストア命令の位置positionの間に、
着目要素refをロードまたはストアする文がない。 (2) 一括ロード命令の位置positionと処理対象要素ref1
をロードする元の文の間および一括ロード命令の位置po
sitionと処理対象要素ref2をロードする元の文の間に、
着目要素refをストアする文がない。
【0036】図8に戻り、ステップ807では、一括ロ
ード命令を生成する位置positionに処理対象要素ref1,
ref2をそれらに対応する2つの変数として一括ロードす
る一括ロード命令のコードを挿入する。また、一括スト
ア命令を生成する位置positionに処理対象要素ref1,re
f2に対応する2つの変数を一括ストアする一括ストア命
令のコードを挿入する。ステップ808では、処理対象
要素ref1,ref2をそれぞれ参照する元の文の処理対象要
素ref1,ref2をそれらに対応する変数にそれぞれ置換す
る。
【0037】次に、図4の中間コード109を例にとっ
て本発明のメモリアクセス一括化方法を具体的に説明す
る。なお、本例では、8バイトの連続する2参照を一括
化の対象とする。図6のステップ601では、基本ブロ
ックBB0〜BB7を解析し、図7の基本ブロック表1
11を得る。ステップ602,603では、まず配列a
を取り出す。ステップ604では、配列aの型が“doub
le”であるので、ステップ605へ進む。ステップ60
5では、図8へ進む。
【0038】図8のステップ801,802では、図5
の配列表110から要素S1:a[i]とS2:a[i+1]を取り出
し、処理対象要素ref1,ref2とする。ステップ803で
は、要素S1:a[i]とS2:a[i+1]の参照の種別がロードで
同じであるので、ステップ804へ進む。ステップ80
4では、図9へ進む。
【0039】図9のステップ901では、要素S1:a[i]
とS2:a[i+1]の基本ブロックBB2,BB3を基本ブロ
ックB1,B2とする。ステップ904では、図7の配
列表111から基本ブロックBB2が基本ブロックBB
3の支配ブロックであることが判り、ステップ908へ
進む。ステップ908では、“条件を満たす”を返り値
として図8のステップ804に戻る。
【0040】図8のステップ804では、返り値が“条
件を満たす”であるからステップ805へ進む。ステッ
プ805では、図10へ進む。
【0041】図10では、ステップ1001,100
2,1006からステップ1007へ進む。ステップ1
007では、要素S1:a[i]を参照する文S1の直前を位
置positionとする。そして、図8のステップ805に戻
る。
【0042】図8のステップ805では、ステップ80
6へ進む。ステップ806では、図11へ進む。
【0043】図11のステップ1101では、要素S1:
a[i]を着目要素refとする。ステップ1102で
は、要素S1:a[i]の参照がロードであるからステップ1
104へ進む。ステップ1104では、要素S1:a[i]を
参照する文S1と位置positionの間には要素a[i]のス
トア文がないからステップ1105へ進む。ステップ1
105,1106では、要素S2:a[i+1]を着目要素re
fとし、ステップ1102へ戻る。ステップ1102で
は、要素S2:a[i+1]の参照がロードであるからステップ
1104へ進む。ステップ1104では、要素S2:a[i+
1]を参照する文S2と位置positionの間には要素a[i
+1]のストア文がないからステップ1105へ進む。
ステップ1105では、ステップ1108へ進む。ステ
ップ1108では、“依存なし”を返り値として図8の
ステップ806に戻る。
【0044】図8のステップ806では、返り値が“依
存なし”なので、ステップ807へ進む。ステップ80
7では、要素S1:a[i]および要素S2:a[i+1]を変数t1,
t2として一括ロードする一括ロード命令のコードを位置
position(文S1の直前)に挿入する。ステップ808
では、文S1中の要素a[i]を変数t1に置換し、文S
2中の要素a[i+1]を変数t2に置換する。そして、
ステップ801に戻る。
【0045】ステップ801,802では、図5の配列
表110から要素S4:a[i+1]およびS5:a[i+2]を取り出
し、処理対象要素ref1,ref2とする。以下、上記と同様
に処理されて、要素S4:a[i+1]および要素S5:a[i+2]を
変数t3,t4として一括ロードする一括ロード命令のコー
ドを位置position(文S4の直前)に挿入し、文S4中
の要素a[i+1]を変数t3に置換し、文S5中の要素
a[i+2]を変数t4に置換する。そして、ステップ8
01に戻る。ステップ801では、図6のステップ60
2に戻る。
【0046】図6のステップ602,603では、配列
bを取り出す。ステップ604では、配列aの型が“do
uble”であるので、ステップ605へ進む。ステップ6
05では、図8へ進む。
【0047】図8のステップ801,802では、図5
の配列表110から要素S1:b[i]とS2:b[i+1]を取り出
し、処理対象要素ref1,ref2とする。ステップ803で
は、要素S1:b[i]とS2:b[i+1]の参照の種別がロードと
ストアで異なるので、ステップ801に戻る。ステップ
801,802では、図5の配列表110から要素S1:
b[i]とS4:b[i+1]を取り出し、処理対象要素ref1,ref
2とする。ステップ803では、要素S1:b[i]とS4:b[i
+1]の参照の種別がロードで同じであるので、ステップ
804へ進む。ステップ804では、図9へ進む。
【0048】図9のステップ901では、要素S1:b[i]
とS4:b[i+1]の基本ブロックBB2,BB4を基本ブロ
ックB1,B2とする。ステップ902では、図7の配
列表111から基本ブロックBB2と基本ブロックBB
4が“等価”であることが判り、ステップ908へ進
む。ステップ908では、“条件を満たす”を返り値と
して図8のステップ804に戻る。
【0049】図8のステップ804では、返り値が“条
件を満たす”であるからステップ805へ進む。ステッ
プ805では、図10へ進む。
【0050】図10では、ステップ1001,100
2,1006からステップ1007へ進む。ステップ1
007では、要素S1:b[i]を参照する文S1の直前を位
置positionとする。そして、図8のステップ805に戻
る。
【0051】図8のステップ805では、ステップ80
6へ進む。ステップ806では、図11へ進む。
【0052】図11のステップ1101では、要素S1:
b[i]を着目要素refとする。ステップ1102で
は、要素S1:b[i]の参照がロードであるからステップ1
104へ進む。ステップ1104では、要素S1:b[i]を
参照する文S1と位置positionの間には要素b[i]のス
トア文がないからステップ1105へ進む。ステップ1
105,1106では、要素S4:b[i+1]を着目要素re
fとし、ステップ1102へ戻る。ステップ1102で
は、要素S4:b[i+1]の参照がロードであるからステップ
1104へ進む。ステップ1104では、要素S4:b[i+
1]を参照する文S4と位置positionの間には要素b[i
+1]のストア文S2があるからステップ1107へ進
む。ステップ1107では、“依存あり”を返り値とし
て図8のステップ806に戻る。図8のステップ806
では、返り値が“依存あり”なので、一括ロード命令を
挿入せずに、ステップ801に戻る。
【0053】次に、ステップ801,802で要素S2:
b[i+1]と要素S5:b[i+2]を取り出し、ステップ803
で参照の種別がストアで同じためステップ804へ進
み、ステップ804で要素S2:b[i+1]の基本ブロックB
B3と要素S5:b[i+2]の基本ブロックBB5が“等価”
であるためステップ805へ進み、ステップ805で一
括ストア命令を生成する位置positionとして要素S5:b
[i+2]を参照する文S5の直後を求める。しかし、ステ
ップ806では、要素S2:b[i+1]を参照する文S2と位
置positionの間に要素S2:b[i+1]をロードする文S4が
あるので返り値が“依存あり”となり、一括ロード命令
を挿入せずに、ステップ801に戻る。そして、ステッ
プ801から図6のステップ605に戻り、さらにステ
ップ602に戻る。
【0054】次に、ステップ602,603では、配列
cを取り出す。ステップ604では、配列cの型が“do
uble”であるので、ステップ605へ進む。ステップ6
05では、図8へ進む。
【0055】図8のステップ801,802では、図5
の配列表110から要素S2:c[i]とS3:c[i+1]を取り出
し、処理対象要素ref1,ref2とする。ステップ803で
は、要素S2:c[i]とS3:c[i+1]の参照の種別がロードで
同じであるので、ステップ804へ進む。ステップ80
4では、図9へ進む。
【0056】図9のステップ901では、要素S2:c[i]
と要素S3:c[i+1]の基本ブロックBB3,BB4を基本
ブロックB1,B2とする。図7の配列表111から基
本ブロックB1(BB3)に対して基本ブロックB2
(BB4)が“後支配”であることが判り、ステップ9
02,903,904,905,906と進み、ステッ
プ907からステップ908へ進む。ステップ908で
は、“条件を満たす”を返り値として図8のステップ8
04に戻る。
【0057】図8のステップ804では、返り値が“条
件を満たす”であるからステップ805へ進む。ステッ
プ805では、図10へ進む。
【0058】図10では、ステップ1001,100
2,1006,1008からステップ1010へ進む。
ステップ1010では、基本ブロックB1(BB3)と
基本ブロックB2(BB4)の共通支配ブロックである
基本ブロックB3(BB2)の末尾を一括ロード命令の
位置positionとする。ところが、基本ブロックB3(B
B2)の末尾の文S1はif文であるので、文S1の直
前を位置positionとする。そして、図8のステップ80
5に戻り、ステップ806へ進む。図6のステップ80
6では、図11へ進む。
【0059】図11のステップ1101では、要素S2:
c[i]を着目要素refとする。ステップ1102で
は、要素S2:c[i]の参照がロードであるからステップ1
104へ進む。ステップ1104では、要素S2:c[i]を
参照する文S2と位置positionの間には要素c[i]のス
トア文がないからステップ1105へ進む。ステップ1
105,1106では、要素S3:c[i+1]を着目要素re
fとし、ステップ1102へ戻る。ステップ1102で
は、要素S3:c[i+1]の参照がロードであるからステップ
1104へ進む。ステップ1104では、要素S3:c[i+
1]を参照する文S3と位置positionの間には要素c[i
+1]のストア文がないからステップ1105へ進み、
さらにステップ1108へ進む。ステップ1108で
は、“依存なし”を返り値として図8のステップ806
に戻る。
【0060】図8のステップ806では、返り値が“依
存なし”なので、ステップ807へ進む。ステップ80
7では、要素S2:c[i]および要素S3:c[i+1]を変数t5,
t6として一括ロードする一括ロード命令のコードを位置
position(文S1の直前)に挿入する。ステップ808
では、文S2中の要素c[i]を変数t5に置換し、文S
3中の要素c[i+1]を変数t6に置換する。そして、
ステップ801に戻る。
【0061】次に、ステップ801,802で要素S5:
c[i+1]と要素S6:c[i+2]を取り出し、ステップ803
で参照の種別がロードで同じためステップ804へ進
み、ステップ804で要素S5:c[i+1]の基本ブロックB
B5に対して要素S6:c[i+2]の基本ブロックBB6が
“後支配”であるためステップ805へ進み、ステップ
805で基本ブロックBB5と基本ブロックBB6の共
通支配ブロックである基本ブロックBB4の末尾を一括
ロード命令の位置positionとする。ところが、基本ブロ
ックBB4の末尾の文S4はif文であるので、文S4
の直前を位置positionとする。ステップ806では図1
1からの返り値が“依存なし”となるためステップ80
7へ進み、ステップ807で文S4の直前に要素S5:c
[i+1]および要素S6:c[i+2]を変数t7,t8として一括ロ
ードする一括ロード命令のコードを挿入し、ステップ8
08で文S5中の要素c[i+1]を変数t7に置換し、
文S6中の要素c[i+2]を変数t8に置換する。そし
て、ステップ801に戻り、さらに図6のステップ60
5に戻り、ステップ602へと進む。
【0062】次に、ステップ602,603では、配列
dを取り出す。ステップ604では、配列dの型が“do
uble”であるので、ステップ605へ進む。ステップ6
05では、図8へ進む。
【0063】図8のステップ801,802では、図5
の配列表110から要素S3:d[i]とS6:d[i+1]を取り出
し、処理対象要素ref1,ref2とする。ステップ803で
は、要素S3:d[i]とS6:d[i+1]の参照の種別がストアで
同じであるので、ステップ804へ進む。ステップ80
4では、図9へ進む。
【0064】図9のステップ901では、要素S3:d[i]
とS6:d[i+1]の基本ブロックBB4,BB6を基本ブロ
ックB1,B2とする。図7の配列表111から基本ブ
ロックB1(BB4)と基本ブロックB2(BB6)が
“等価”であることが判り、ステップ902からステッ
プ908へ進む。ステップ908では、“条件を満た
す”を返り値として図8のステップ804に戻る。
【0065】図8のステップ804では、返り値が“条
件を満たす”であるからステップ805へ進む。ステッ
プ805では、図10へ進む。
【0066】図10では、ステップ1001,100
2,1003からステップ1005へ進む。ステップ1
005では、要素S6:d[i+1]を参照する文S6の直後を
一括ストア命令の位置positionとする。そして、図8の
ステップ805に戻り、ステップ806へ進む。図6の
ステップ806では、図11へ進む。
【0067】図11のステップ1101では、要素S3:
d[i]を着目要素refとする。ステップ1102で
は、要素S3:d[i]の参照がストアであるからステップ1
103へ進む。ステップ1103では、要素S3:d[i]を
参照する文S3と位置positionの間には要素d[i]のロ
ード文がないからステップ1104へ進む。ステップ1
104では、要素S3:d[i]を参照する文S3と位置posi
tionの間には要素d[i]のストア文がないからステップ
1105へ進む。ステップ1105,1106では、要
素S6:d[i+1]を着目要素refとし、ステップ1102
へ戻る。ステップ1102では、要素S6:d[i+1]の参照
がストアであるからステップ1103へ進む。ステップ
1103では、要素S6:d[i+1]を参照する文S6と位置
positionの間には要素d[i+1]のロード文がないから
ステップ1104へ進む。ステップ1104では、要素
S6:d[i+1]を参照する文S6と位置positionの間には要
素d[i+1]のストア文がないからステップ1105へ
進み、さらにステップ1108へ進む。ステップ110
8では、“依存なし”を返り値として図8のステップ8
06に戻る。
【0068】図8のステップ806では、返り値が“依
存なし”なので、ステップ807へ進む。ステップ80
7では、要素S3:d[i]および要素S6:d[i+1]を変数t9,
t10として一括ストアする一括ストア命令のコードを位
置position(文S6の直後)に挿入する。ステップ80
8では、文S3中の要素d[i]を変数t9に置換し、文
S6中の要素d[i+1]を変数t10に置換する。そし
て、ステップ801に戻り、さらに図6のステップ60
5に戻り、ステップ602へと進む。ステップ602で
は、未処理の配列がないため、処理を終了する。
【0069】以上のようにして、図4の中間コード10
9に対して本発明のメモリアクセス一括化方法を適用す
ることにより、図12の中間コード109が得られる。
【0070】
【発明の効果】本発明のメモリアクセス一括化方法によ
れば、異なる基本ブロックに属するメモリアクセスを一
括化することが出来るので、ロード命令・ストア命令数
を削減でき、オブジェクトの実行性能を向上できる。例
えば、ある配列の要素参照の全てに対して2要素の一括
化を適用した場合、その配列に関するロード・ストア数
をほぼ半分に削減できる。
【図面の簡単な説明】
【図1】本発明に係るメモリアクセス一括化方法を実施
するコンパイラが稼動する計算機システムの構成図であ
る。
【図2】本発明に係るメモリアクセス一括化方法を実施
するコンパイラの処理手順を示すフロー図である。
【図3】ソースプログラムの例示図である。
【図4】図3のソースプログラムに対する中間コードの
模式図である。
【図5】図3のソースプログラムに対する配列表の模式
図である。
【図6】本発明に係るメモリアクセス一括化方法におけ
るメモリアクセス一括化の処理手順を示すフロー図であ
る。
【図7】図3のソースプログラムに対する基本ブロック
表の模式図である。
【図8】本発明に係るメモリアクセス一括化における1
つの配列に対する処理手順を示すフロー図である。
【図9】本発明に係るメモリアクセス一括化における基
本ブロック間の関係を判定する処理手順を示すフロー図
である。
【図10】本発明に係るメモリアクセス一括化における
一括ロード命令または一括ストア命令のコードの生成位
置を求める処理手順を示すフロー図である。
【図11】本発明に係るメモリアクセス一括化における
依存性判定の処理手順を示すフロー図である。
【図12】図4の中間コードに対してメモリアクセス一
括化を適用した後の中間コードを示す例示図である。
【符号の説明】
108・・・コンパイラ、109・・・中間コード、1
10・・・配列表、111・・・基本ブロック表、20
2・・・メモリアクセス一括化の処理。

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 メモリ空間上に連続的に配置された2個
    以上のデータを一度にロードする命令(一括ロード命令
    と呼ぶ)または一度にストアする命令(一括ストア命令
    と呼ぶ)を生成することによってメモリアクセスを一括
    化するメモリアクセス一括化方法であって、 処理対象プログラム中の異なる基本ブロック(文の列で
    あって、その文の列の先頭から実行が始まり、途中へ飛
    び込んだり途中から飛び出すことのないもの)に属する
    データを一括化対象データとして取り出す一括化対象デ
    ータ取出ステップと、 各一括化対象データが属する各基本ブロックの関係が
    “支配(入口から基本ブロックBへ至る全てのパス上に
    基本ブロックAがあるとき、基本ブロックAは基本ブロ
    ックBを支配するという)”または“後支配(基本ブロ
    ックBから出口に至る全てのパス上に基本ブロックAが
    あるとき、基本ブロックAは基本ブロックBを後支配す
    るという)”または“等価(基本ブロックAが基本ブロ
    ックBを支配し、かつ基本ブロックBが基本ブロックA
    を後支配するとき、基本ブロックAと基本ブロックBは
    等価であるという)”であるかどうかを解析する関係解
    析ステップと、 各一括化対象データのロード/ストアの種別および基本
    ブロック間の関係に応じて一括ロード命令または一括ス
    トア命令を生成すべき位置を決定する生成位置決定ステ
    ップと、 一括化対象データがロードするデータであるときは、上
    記生成位置決定ステップで決定された位置と当該一括化
    対象データの位置との間に当該一括化対象データをスト
    アする文がないこと、および、一括化対象データがスト
    アするデータであるときは、当該一括化対象データの位
    置と上記生成位置決定ステップで決定された位置との間
    に当該一括化対象データをロードする文およびストアす
    る文がないこと、という“依存なし”条件を判定する依
    存性判定ステップと、 上記依存性判定ステップで“依存なし”条件が満たされ
    たときのみ、上記生成位置決定ステップで決定された位
    置に、前記各一括化対象データに対する一括ロード命令
    または一括ストア命令を生成する命令生成ステップとを
    含むことを特徴とするメモリアクセス一括化方法。
  2. 【請求項2】 請求項1に記載のメモリアクセス一括化
    方法において、前記生成位置決定ステップは、前記各一
    括化対象データがロードするデータであり且つ各基本ブ
    ロックの関係が“支配”である場合には、支配する基本
    ブロックに属する一括化対象データの文の直前に、一括
    ロード命令を生成すべき位置を決定することを特徴とす
    るメモリアクセス一括化方法。
  3. 【請求項3】 請求項1または請求項2に記載のメモリ
    アクセス一括化方法において、前記生成位置決定ステッ
    プは、前記各一括化対象データがロードするデータであ
    り且つ各基本ブロックの関係が“後支配”である場合に
    は、各基本ブロックを共通して支配する基本ブロックの
    末尾に、一括ロード命令を生成すべき位置を決定するこ
    とを特徴とするメモリアクセス一括化方法。
  4. 【請求項4】 請求項3に記載のメモリアクセス一括化
    方法において、前記生成位置決定ステップは、前記各基
    本ブロックを共通して支配する基本ブロックの最後がi
    f文であるときは、そのif文の直前に、一括ロード命
    令を生成すべき位置を決定することを特徴とするメモリ
    アクセス一括化方法。
  5. 【請求項5】 請求項1から請求項4のいずれかに記載
    のメモリアクセス一括化方法において、前記生成位置決
    定ステップは、前記各一括化対象データがストアするデ
    ータであり且つ各基本ブロックの関係が“等価”である
    場合には、後支配する基本ブロックに属する一括化対象
    データの文の直後に、一括ストア命令を生成すべき位置
    を決定することを特徴とするメモリアクセス一括化方
    法。
  6. 【請求項6】 処理対象プログラム中の異なる基本ブロ
    ック(文の列であって、その文の列の先頭から実行が始
    まり、途中へ飛び込んだり途中から飛び出すことのない
    もの)に属し且つメモリ空間上に連続的に配置された2
    個以上のデータを一括化対象データとして取り出す一括
    化対象データ取出ステップと、 各一括化対象データが属する各基本ブロックの関係が
    “支配(入口から基本ブロックBへ至る全てのパス上に
    基本ブロックAがあるとき、基本ブロックAは基本ブロ
    ックBを支配するという)”または“後支配(基本ブロ
    ックBから出口に至る全てのパス上に基本ブロックAが
    あるとき、基本ブロックAは基本ブロックBを後支配す
    るという)”または“等価(基本ブロックAが基本ブロ
    ックBを支配し、かつ基本ブロックBが基本ブロックA
    を後支配するとき、基本ブロックAと基本ブロックBは
    等価であるという)”であるかどうかを解析する関係解
    析ステップと、 各一括化対象データのロード/ストアの種別および基本
    ブロック間の関係に応じて、各一括化対象データを一度
    にロードする命令(一括ロード命令と呼ぶ)または一度
    にストアする命令(一括ストア命令と呼ぶ)を生成すべ
    き位置を決定する生成位置決定ステップと、 一括化対象データがロードするデータであるときは、上
    記生成位置決定ステップで決定された位置と当該一括化
    対象データの位置との間に当該一括化対象データをスト
    アする文がないこと、および、一括化対象データがスト
    アするデータであるときは、当該一括化対象データの位
    置と上記生成位置決定ステップで決定された位置との間
    に当該一括化対象データをロードする文およびストアす
    る文がないこと、という“依存なし”条件を判定する依
    存性判定ステップと、 上記依存性判定ステップで“依存なし”条件が満たされ
    たときのみ、上記生成位置決定ステップで決定された位
    置に、前記各一括化対象データに対する一括ロード命令
    または一括ストア命令を生成する命令生成ステップとを
    コンピュータに実現させるプログラムを記録した、コン
    ピュータ読み取り可能な記録媒体。
JP3851398A 1998-02-20 1998-02-20 メモリアクセス一括化方法および記憶媒体 Pending JPH11238012A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3851398A JPH11238012A (ja) 1998-02-20 1998-02-20 メモリアクセス一括化方法および記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3851398A JPH11238012A (ja) 1998-02-20 1998-02-20 メモリアクセス一括化方法および記憶媒体

Publications (1)

Publication Number Publication Date
JPH11238012A true JPH11238012A (ja) 1999-08-31

Family

ID=12527362

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3851398A Pending JPH11238012A (ja) 1998-02-20 1998-02-20 メモリアクセス一括化方法および記憶媒体

Country Status (1)

Country Link
JP (1) JPH11238012A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005071331A (ja) * 2003-08-26 2005-03-17 Microsoft Corp トランザクショナルプロセスのデータフロー解析

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005071331A (ja) * 2003-08-26 2005-03-17 Microsoft Corp トランザクショナルプロセスのデータフロー解析
US8196122B2 (en) 2003-08-26 2012-06-05 Microsoft Corporation Data flow analysis of transactional processes

Similar Documents

Publication Publication Date Title
US7571427B2 (en) Methods for comparing versions of a program
US7356813B2 (en) System and method for optimizing a program
JP2001147819A (ja) 最適化装置および記録媒体
JPH02217926A (ja) コード生成方法
JPH04330527A (ja) プログラムの最適化方法及びコンパイラ・システム
US4843545A (en) Compile method using copy propagation of a variable
JPH08180069A (ja) 単語辞書検索装置
JP3246438B2 (ja) 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体
US5721924A (en) Method and device for obtaining a value of a referred to variable defined in a source program having a specific variable name
JP3318051B2 (ja) 翻訳処理方法
JPH11238012A (ja) メモリアクセス一括化方法および記憶媒体
JP2585793B2 (ja) コンパイラシステム
JPH086797A (ja) 定数参照最適化処理装置
JP2000155689A (ja) ループ展開方法及び装置
JP3044953B2 (ja) 言語処理システムのシンボル処理方式
CN117270863A (zh) 一种基于增量编译的Verilog语法分析方法
JPH11161500A (ja) 実行時依存解析を行う目的プログラムの生成方法
JPH07168719A (ja) 冗長式除去装置
JPH07244601A (ja) 関係データベースのアクセス方法および装置
JPH07105014A (ja) 言語処理システムのシンボル処理方式
JPH05197565A (ja) 定数領域割り付け処理方法
JPS63132335A (ja) 計算機言語処理系の実行方式
JPH06274332A (ja) プログラム部品の登録・検索方法
JPH0342728A (ja) 予約語の判定方式
JP2004139369A (ja) 定数アドレス領域を指示するポインタ解析方法