JPH1153197A - ループ最適化方法 - Google Patents

ループ最適化方法

Info

Publication number
JPH1153197A
JPH1153197A JP9207453A JP20745397A JPH1153197A JP H1153197 A JPH1153197 A JP H1153197A JP 9207453 A JP9207453 A JP 9207453A JP 20745397 A JP20745397 A JP 20745397A JP H1153197 A JPH1153197 A JP H1153197A
Authority
JP
Japan
Prior art keywords
loop
instruction
program
optimization method
memory access
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.)
Withdrawn
Application number
JP9207453A
Other languages
English (en)
Inventor
Kouji Zaiki
幸治 材木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP9207453A priority Critical patent/JPH1153197A/ja
Publication of JPH1153197A publication Critical patent/JPH1153197A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 プログラム実行開始時にループの反復回数が
未定である場合において、コンディションコード数とレ
ジスタ数とに基づきループを展開し、かつ、投機的命令
を使って効率的なコードを生成することにより、ループ
を最適化する。 【解決手段】 ループ最適化方法に、中間コードからル
ープを検出し、かつ該検出されたループの構造を解析す
る第1の工程10と、コンディションコード数12とレ
ジスタ数13とに基づきループ展開数を決定する第2の
工程11と、該決定されたループ展開数だけループを展
開し、かつ、該展開されたループにおいて命令を投機的
命令に置き換え、かつ並び替えることによって効率的な
コードを生成する第3の工程14とを備える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プロセッサにおけ
る投機的命令を有するアーキテクチャに対する、コンパ
イラのループ最適化方法に関するものである。
【0002】
【従来の技術】近年のプロセッサは、複数の処理を並列
的に実行することによって高い処理性能を実現してい
る。プロセッサにおいてオブジェクトプログラムの実行
効率を向上させるためには、コンパイル処理における構
文解析によって生成された中間コードに基づいて、プロ
グラムの意味を変えずに、並列処理による実行速度の向
上、オブジェクトプログラムのサイズ削減等を行なうた
めの最適化技術が用いられる。その中でも、ループによ
る処理時間がプログラム実行時間の多くを占めることか
ら、ループの最適化が重要である。
【0003】従来のループ最適化を、図7(a)〜
(c)及び図8(a),(b)を参照して説明する。な
お、コンパイラにおいては中間コードを扱うが、以後の
説明においてはわかりやすくするために、必要に応じて
C言語又はアセンブリ言語によってプログラムを記述す
る。図7(a)は、ループ最適化の対象となる、C言語
で記述されたソースプログラムである。該ソースプログ
ラムは、配列xの要素よりなる配列変数x[i]が0で
ない場合には、配列yの要素よりなる配列変数y[i]
とスカラ変数zとの積を新たに配列変数x[i]とし、
かつ配列要素インデックスである変数iをインクリメン
トする。したがって、実行するまでループの反復回数が
わからず、逐次処理しかできない。図7(b)は、図7
(a)のソースプログラムをループ最適化せずにコンパ
イルした場合の、アセンブリ言語で記述されたオブジェ
クトプログラムである。図7(b)において、初期化の
ための命令列600に続く、命令列610がループを構
成する。該ループを構成する命令相互間では、例えば命
令611によってデータが転送されたレジスタr0に依
存して、命令612が実行されるように、先行して実行
されるべき命令と該命令に後続すべき命令との関係、す
なわちデータ依存関係が存在する。該データ依存関係が
ある場合には、後に処理される命令は先に処理される命
令の結果に常に依存するので、データ依存関係を有する
ループは逐次処理によってのみ処理される。図7(c)
は、図7(b)のプログラムのフローチャート図であ
る。判定工程40と処理工程41とからなるループは、
x[i]=0になるまで逐次処理される。
【0004】ループ最適化においては、複数の反復を1
回の反復によって処理するために、ループの展開(ルー
プアンローリング)が使用される。図8(a)は、図7
(a)のソースプログラムを1回ループ展開したプログ
ラムのフローチャート図である。図8(a)において
は、図7(c)における2回の反復を、第1判定工程5
0、第1処理工程51、第2判定工程52及び第2処理
工程53よりなる1回の反復によって処理して、ループ
回数を削減する。しかし、第2処理工程53は第2判定
工程52の結果が判明した後にのみ実行されるので、デ
ータ依存関係が存在する。したがって、このループ展開
されたプログラムは逐次処理によってしか処理されず、
並列処理できない。
【0005】また、ループ最適化においては、ループの
命令レベルの並列度を向上させるために、投機的命令が
使用される。投機的命令とは、ある条件分岐命令の実行
に先立って、すなわち分岐先が決まる前に、分岐後の命
令列のうちのいずれかを実行する命令をいう。図8
(b)は、図8(a)における第2判定工程52の前に
第2処理工程53を配置するように、投機的命令を適用
したプログラムのフローチャート図である。図8(b)
において、第1判定工程60、第1処理工程61、第2
処理工程62及び第2判定工程63がループを形成す
る。第2処理工程62における配列変数x’[i]は、
図8(a)の第2処理工程53における配列変数x
[i]の値が一時的に格納される配列変数を示す。実行
文x’[i]=y[i]*zが実行される際には配列変
数x[i]の更新を行なわず、第2判定工程63により
条件がx[i]≠0に確定した場合には、配列変数x
[i]の値が変数x’[i]によって、かつ、変数iの
値がi’によってそれぞれ置き換えられる。したがっ
て、投機的命令を使うことにより、図8(a)の第2判
定工程52より後の命令を該第2判定工程52より前
に、すなわち、条件分岐命令より後の命令を該条件分岐
命令より前に移動させ、かつ先行して実行できる。この
ことにより、ループ展開後に、条件分岐命令を含まない
命令列よりなる基本ブロックが拡大され、更に該基本ブ
ロック内の命令列をスケジューリング(並び替え)する
ことにより、命令レベルの並列度を向上する機会が拡大
される。
【0006】
【発明が解決しようとする課題】しかしながら、上記従
来の技術によれば、比較命令等の実行結果を符号化した
コンディションコードをプロセッサが保持し得る数、す
なわちコンディションコード数を考慮しないので、プロ
グラム実行開始時にループの反復回数が未定である場合
には、効率的なコードを生成できないという問題があっ
た。すなわち、ループの展開数が、通常のプロセッサに
おいては1個であるコンディションコード数を越える場
合には、該越える分に対応する移動すべき命令列を投機
的命令で置き換えられないので基本ブロックを大きくで
きず、効率的なコードを生成できない。また、コンディ
ションコード数以下の展開数であっても、基本ブロック
における変数の数が、割り当てられたレジスタ数を越え
る場合には、該越える分だけの変数を一時的にメモリへ
退避する必要があるので非効率的なコードが生成され
る。更に、ループを展開した際に、連続するアドレスに
それぞれアクセスするメモリアクセス命令が存在して
も、該メモリアクセス命令が条件分岐にまたがって存在
する場合には1つのメモリアクセス命令では実行できな
いので、オーバヘッドが大きくなる。
【0007】本発明は、上記従来の問題に鑑み、コンデ
ィションコード数及びレジスタ数に基づいて、効率的な
コードを生成することによってループを最適化する、ル
ープ最適化方法を提供することを目的とする。
【0008】
【課題を解決するための手段】上記従来の課題を解決す
るために、本発明は、ループ最適化方法を、コンディシ
ョンコード数及びレジスタ数を上限としてループの展開
数を決定する工程と、該ループにおいて新たな条件分岐
命令とループボディとからなる命令列を該決定された展
開数だけ生成して該ループに代えて新たなループを生成
する工程と、該新たなループが有する基本ブロックがで
きるだけ大きくなるように、該生成されたループボディ
を該生成された条件分岐命令より前へ移動させかつ投機
的命令に置き換える工程とを備えた構成とするものであ
る。
【0009】上記の構成によれば、コンディションコー
ド数及びレジスタ数を上限としてループの展開数を決定
するので、該コンディションコード及びレジスタを有効
に使用して効率的なコードを生成できる。
【0010】
【発明の実施の形態】
(第1の実施形態)本発明の第1の実施形態に係るルー
プ最適化方法を、図面を参照して説明する。図1は、本
発明の第1の実施形態に係るループ最適化方法を示すフ
ローチャート図である。図1において、第1の工程10
は、コンパイル処理において構文解析により生成された
中間コードからループを検出して、該検出されたループ
の構造を解析する工程である。第2の工程11は、該解
析結果に基づいて、ループ実行時にプロセッサが保持し
得るコンディションコード数12及びレジスタ数13を
上限として、ループ展開数を決定する工程である。コン
ディションコード数12及びレジスタ数13は予め定め
られている。第3の工程14は、該決定されたループ展
開数だけループを展開し、かつ該展開されたループにお
いて、投機的命令に置き換えたコードを生成する工程で
ある。
【0011】プロセッサがコンディションコードを2個
保持できる場合において、図7(a)のソースプログラ
ムに基づいてループを最適化する方法を説明する。工程
10において、該ソースプログラムからループを検出か
つ解析し、該ループは実行前において反復回数が未定で
あると認識する。工程11において、コンディションコ
ード数12が“2”であることから展開数を“2”に決
定する。工程14において、展開数“2”に基づいて2
回ループ展開し、該ループ展開されたプログラムにおい
て、投機的命令に置き換えたループボディを条件分岐命
令より前に移動させる。
【0012】図2(a)は、図7(a)のソースプログ
ラムを2回ループ展開したプログラムを示す、C言語に
よるプログラムリストである。図2(a)において、実
行文100,102,104はそれぞれループボディで
あり、実行文101,103はそれぞれ条件判定部であ
る。実行文102,104が新たに生成されたループボ
ディ、実行文101,103が新たに生成された条件判
定部である。図2(b)は、図2(a)のプログラムの
フローチャート図である。図2(b)において、第1の
判定工程20、第1の処理工程21、第2の判定工程2
2、第2の処理工程23、第3の判定工程24及び第3
の処理工程25がループを形成する。図2(a)の実行
文100,102,104はそれぞれ第1,第2,第3
の処理工程21,23,25に対応し、実行文101,
103はそれぞれ第2,第3の判定工程22,24に対
応する。したがって、新たな条件判定部とループボディ
とを生成することによって、図7(a)における3回の
反復による処理を、1回の反復によって処理する。
【0013】図3(a)は、コンディションコードを一
時的に記憶するための、プロセッサが有する一時記憶レ
ジスタを説明する概念図である。図3(a)において、
データフィールド70は、データを一時的に記憶するた
めの32ビットよりなる記憶領域である。タグフィール
ド71は、レジスタ番号、又はアクセス対象がメモリの
場合にはアドレスを記憶するための記憶領域である。条
件フィールド72は、コンディションコードを記憶する
ための記憶領域である。データフィールド70、タグフ
ィールド71及び条件フィールド72が一時記憶レジス
タを構成する。図3(b)は、プロセッサが有するレジ
スタファイルを説明する概念図である。該レジスタファ
イルは、32ビットよりなる汎用レジスタr0,r1,
…,r7によって構成される。図3(a)の領域81に
おいて、該領域81が有するデータフィールドr0’
は、タグフィールド71によって指定された汎用レジス
タr0の記憶内容を一時的に記憶する領域である。該領
域81において、条件フィールド72にはコンディショ
ンコードCC0が記憶される。該コンディションコード
CC0が確定して「真」である場合には、データフィー
ルドr0’へ記憶された値が、レジスタファイルにおけ
る対応する汎用レジスタr0へ記憶される。コンディシ
ョンコードCC0が確定して「偽」である場合には、デ
ータフィールドr0’へ記憶された値は対応する汎用レ
ジスタr0へ記憶されず、該汎用レジスタr0を指定し
ていた、領域81のタグフィールド71がクリアされ
る。同様に、領域82が有するデータフィールドr1’
は、タグフィールド71によって指定された汎用レジス
タr1の記憶内容を一時的に記憶する領域である。領域
83が有するタグフィールド71は、汎用レジスタr1
が記憶するメモリのアドレスを示し、コンディションコ
ードCC0が確定して「真」である場合には、データフ
ィールド[r1]’へ記憶された値が該メモリのアドレ
スへ書き込まれる。領域84が有するデータフィールド
r0''は、タグフィールド71に指定された汎用レジス
タr0の記憶内容を一時的に記憶する領域である。コン
ディションコードCC0とCC1とが共に確定して共に
「真」である場合には、データフィールドr0''へ記憶
された値が、レジスタファイルにおいて対応する汎用レ
ジスタr0へ記憶される。
【0014】図3(a)及び(b)のレジスタを有する
プロセッサにおける、本実施形態に係るループ最適化方
法を、図4を参照して説明する。図4(a)は、図2
(a)のプログラムが有するループボディを移動させ、
かつ投機的命令に置き換えたプログラム、すなわち本実
施形態に係るループ最適化方法の最終結果であるプログ
ラムを示す、C言語によるプログラムリストである。図
2(a)のプログラムが有するループボディである実行
文100,102,104のうち、実行文102,10
4を実行文101の前に移動させ、かつ投機的命令に置
き換えて、図4(a)における実行文201,202を
生成する。条件判定部203において条件がx[i]≠
0に確定した場合には、実行文201における配列変数
x’[i]と変数i’との値に基づき、配列変数x
[i]の値がx’[i]によって、変数iの値がi’に
よって、それぞれ置き換えられる。条件判定部203及
び204の結果いずれも条件がx[i]≠0に確定した
場合には、双方の条件が確定した時点において、実行文
202における配列変数x''[i]と変数i''との値に
基づき、配列変数x[i]の値がx''[i]によって、
変数iの値がi''によって、それぞれ置き換えられる。
【0015】図4(b)は、図4(a)のプログラムの
フローチャート図である。図4(b)において、第1の
判定工程30、第1の処理工程31、第2の処理工程3
2、第3の処理工程33及び第2の判定工程34がルー
プを形成する。図4(a)の実行文200〜202はそ
れぞれ第1〜第3の処理工程31〜33に対応し、実行
文203,204はいずれも第2の判定工程34に対応
する。図4(b)のフローチャート図は1個のループに
対する最適化を示しているが、プログラムが有する複数
のループに対して、コンディションコード数を上限にし
てループ展開数を決定し、それぞれのループを最適化で
きる。したがって、各ループの特性に応じたループ最適
化が可能となる。
【0016】以上説明したように、本実施形態によれ
ば、ループの実行開始時に反復回数が未定の場合におい
て、コンディションコード数を上限にして、ループ展開
数を決定する。このことにより、コンディションコード
数を有効に使用して基本ブロックを大きくできるので、
効率的なコードを生成できる。また、プログラムが有す
るそれぞれのループに対して最適化を行なうことによ
り、プログラム自体を最適化できる。したがって、スー
パースカラーやVLIW(Very Long Ins
truction Word)等の並列処理能力を持っ
たプロセッサにおいて、オブジェクトプログラムの実行
効率を向上できる。
【0017】なお、上述の説明においては、図1のコン
ディションコード数12に基づくループ最適化方法を説
明した。これに限らず、例えばレジスタ数13よりなる
ハードウェア資源に基づいて、又はコンディションコー
ド数12とレジスタ数13との双方に基づいてループを
最適化することもできる。
【0018】(第2の実施形態)本発明の第2の実施形
態に係るループ最適化方法を、図面を参照して説明す
る。図5は、本発明の第2の実施形態に係るループ最適
化方法を示すフローチャート図である。第1の実施形態
と同一の構成要件については、図1と同一の符号を付し
てその説明を省略する。図5において、第4の工程15
は、第3の工程14において投機的命令に置き換えるこ
とによって生成されたコードの中から、連続するアドレ
スをアクセスするためのメモリアクセス命令を選択し、
かつ、該連続するアドレスの順に、データ依存関係を保
持しつつ該選択されたメモリアクセス命令を並び替える
工程である。第5の工程16は、該並び替えられたメモ
リアクセス命令を、1つのメモリアクセス命令に置き換
える工程である。
【0019】図6(a)は、図7(b)の命令列610
を1回ループ展開したプログラム、すなわち本実施形態
に係るループ最適化方法の対象であるプログラムを示
す、アセンブリ言語によるプログラムリストである。図
6(a)において、r0〜r3はそれぞれ32ビットの
汎用レジスタを示す。汎用レジスタr0は、演算結果を
記憶し、かつ配列x又はyが有する配列変数の値を一時
的に記憶するためのレジスタである。汎用レジスタr1
及びr2は、配列変数x[i]及びy[i]のアドレス
をそれぞれ記憶するためのレジスタである。汎用レジス
タr3はスカラ変数zの値を記憶するためのレジスタで
ある。条件分岐命令を含まない命令列、すなわち基本ブ
ロック300と、比較命令及び条件分岐命令を含む命令
列301とから構成されたループは、図7(b)の命令
列610が構成するループが1回展開されたループであ
る。
【0020】命令列302は、投機的命令303〜30
7から構成される命令列である。以下、投機的命令30
3〜307を説明する。命令303は、汎用レジスタr
2へ記憶されたメモリのアドレスから始まる2バイトの
データを、一時記憶レジスタが有するデータフィールド
r0’へ転送するためのロード命令である。命令304
は、該データフィールドr0’の値と汎用レジスタr3
の値との積を計算し、かつ該計算された積を該データフ
ィールドr0’へ転送するための乗算命令である。命令
305は、該データフィールドr0’の値を、汎用レジ
スタr1へ記憶されたメモリのアドレスへ2バイトだけ
転送するためのストア命令である。命令306は、汎用
レジスタr1の値、すなわちメモリのアドレスへ2だけ
加算し、かつ、該2だけ加算された新たなアドレスを一
時記憶レジスタが有するデータフィールドr1’へ記憶
するための加算命令である。命令307は、該データフ
ィールドr1’へ記憶されたアドレスから始まる2バイ
トのデータを、データフィールドr0’へ転送するため
のロード命令である。
【0021】図5の第4の工程15において、基本ブロ
ック300が有する各命令を、データ依存関係を保持し
たまま、連続するアドレスをアクセスするためのメモリ
アクセス命令ができるだけ連続するように並べ替える。
図6(b)は、該並べ替えられたプログラム、すなわち
本実施形態に係るループ最適化方法の中間結果であるプ
ログラムを示す、アセンブリ言語によるプログラムリス
トである。図6(b)において、命令400は、汎用レ
ジスタr2へ記憶されたメモリのアドレスから始まる2
バイトのデータを、汎用レジスタr0へ転送するための
ロード命令である。命令401は、図6(a)の命令3
08が前に移動させられたもので、汎用レジスタr2の
値、すなわちメモリのアドレスへ2だけ加算し、かつ、
該2だけ加算された新たなアドレスを該汎用レジスタr
2へ記憶するための加算命令である。命令402は、図
6(a)の命令303が前に移動させられたもので、汎
用レジスタr2へ記憶されたメモリのアドレスから始ま
る2バイトのデータを、データフィールドr0’へ転送
するためのロード命令である。命令403は、図6
(a)の命令309が後ろに移動させられたもので、汎
用レジスタr1へ記憶されたメモリのアドレスから始ま
る2バイトのデータを、汎用レジスタr0へ転送するた
めのロード命令である。命令404は、図6(a)の命
令306に相当し、汎用レジスタr1の値、すなわちメ
モリのアドレスへ2だけ加算し、かつ、該2だけ加算さ
れた新たなアドレスをデータフィールドr1’へ記憶す
るための加算命令である。命令405は、図6(a)の
命令307に相当し、該データフィールドr1’へ記憶
された新たなアドレスから始まる2バイトのデータを、
データフィールドr0’へ転送するためのロード命令で
ある。
【0022】ところで、32ビットの汎用レジスタを備
えたプロセッサは、通常、1命令で4バイトのデータを
転送できるロード命令を有する。命令400と前に移動
させられた命令402とにおいて、汎用レジスタr2が
記憶するメモリのアドレスから始まる2バイトのデータ
を汎用レジスタr0へ、該汎用レジスタr2が記憶する
アドレスへ2だけ加算された新たなアドレスから始まる
2バイトのデータをデータフィールドr0’へ、順次転
送する。該順次転送された4バイトのデータはアドレス
が連続しているので、32ビットの汎用レジスタを有す
るプロセッサにおいては、1つの汎用レジスタへ該4バ
イトのデータを転送できる。同様に、後ろに移動させら
れた命令403と、命令405とに基づいて生成される
1つのロード命令を使用して、1つの汎用レジスタへ該
4バイトのデータを転送できる。図5の工程16におい
て、命令400と402と、及び命令403と405と
からなるそれぞれ2つのロード命令(メモリアクセス命
令)を、アドレスが連続する4バイトのデータを転送で
きる1つの命令へそれぞれ置き換える。
【0023】図6(c)は、図6(b)のプログラムに
ついて、命令を置き換えることによって変換したプログ
ラム、すなわち本実施形態に係るループ最適化方法の最
終結果であるプログラムを示す、アセンブリ言語による
プログラムリストである。図6(c)において、命令5
00は、図6(b)の命令400と402に基づいて生
成された、汎用レジスタr2へ記憶されたアドレスから
始まる4バイトのデータを汎用レジスタr0へ転送する
ためのロード命令である。命令501は、図6(b)の
命令402によってデータフィールドr0’へ2バイト
転送されることに基づいて、汎用レジスタr0へ記憶さ
れた4バイトのデータのうち2バイトをデータフィール
ドr0’へ転送するための転送命令である。命令502
は、図6(b)の命令403と405とに基づいて生成
された、汎用レジスタr1へ記憶されたアドレスから始
まる4バイトのデータを汎用レジスタr0へ転送するた
めのロード命令である。命令503は、図6(b)の命
令405によってデータフィールドr0’へ2バイト転
送されることに基づいて、汎用レジスタr0へ記憶され
た4バイトのデータのうち2バイトをデータフィールド
r0’へ転送するための転送命令である。
【0024】以上説明したように、本実施形態によれ
ば、ループ展開後に、連続するアドレスをアクセスする
メモリアクセス命令が条件分岐にまたがって複数存在し
ている場合において、投機的命令に置き換えたうえで該
複数のメモリアクセス命令を並び替え、かつ1つのメモ
リアクセス命令へ置き換える。このことにより、メモリ
アクセスのオーバヘッドが小さくなる。
【0025】なお、上述の説明においては、図5の第4
の工程15において、選択されたメモリアクセス命令を
連続するアドレスの順に並び替え、第5の工程16にお
いて、該並び替えられたメモリアクセス命令を1つのメ
モリアクセス命令に置き換えた。これに代えて、第4の
工程15において、選択されたメモリアクセス命令を連
続するアドレスの順に認識し、第5の工程16におい
て、該認識されたメモリアクセス命令を1つのメモリア
クセス命令に置き換えてもよい。
【0026】
【発明の効果】本発明に係るループ最適化方法によれ
ば、ループの実行開始時に反復回数が未定である場合に
おいて、コンディションコード数及びレジスタ数を上限
にして、ループ展開数を決定する。このことにより、コ
ンディションコード数を有効に使用して基本ブロックを
大きくし、かつ変数が一時的にメモリへ退避することを
防止するので、効率的なコードを生成してループを最適
化できる。また、プログラムが有するそれぞれのループ
に対して最適化を行なうことにより、プログラム自体を
最適化できる。また、連続するアドレスをアクセスし、
かつ条件分岐にまたがって存在する複数のメモリアクセ
ス命令を、投機的命令に置き換えたうえで並び替え、か
つ1つのメモリアクセス命令へ置き換える。このことに
より、メモリアクセスのオーバヘッドを小さくしてプロ
グラムの実行効率を向上できる。
【図面の簡単な説明】
【図1】本発明の第1の実施形態に係るループ最適化方
法を示すフローチャート図である。
【図2】(a)は第1の実施形態に係るループ最適化方
法の中間結果であるプログラムを示すC言語によるプロ
グラムリスト、(b)は該プログラムのフローチャート
図である。
【図3】(a)は一時記憶レジスタを、(b)はレジス
タファイルをそれぞれ説明する概念図である。
【図4】(a)は第1の実施形態に係るループ最適化方
法の最終結果であるプログラムを示すC言語によるプロ
グラムリスト、(b)は該プログラムのフローチャート
図である。
【図5】本発明の第2の実施形態に係るループ最適化方
法を示すフローチャート図である。
【図6】(a)は本発明の第2の実施形態に係るループ
最適化方法の対象であるプログラムを、(b)は中間結
果であるプログラムを、(c)は最終結果であるプログ
ラムをそれぞれ示すアセンブリ言語によるプログラムリ
ストである。
【図7】(a)はループ最適化方法の対象であるソース
プログラムをC言語によって、(b)は該ソースプログ
ラムをループ最適化せずにコンパイルしたプログラムを
アセンブリ言語によってそれぞれ示すプログラムリスト
であり、(c)は(b)のプログラムのフローチャート
図である。
【図8】(a)は図7(a)のプログラムを1回ループ
展開したプログラムの、(b)は従来のループ最適化後
のプログラムのそれぞれフローチャート図である。
【符号の説明】
10 第1の工程 11 第2の工程 12 コンディションコード数 13 レジスタ数 14 第3の工程 15 第4の工程 16 第5の工程

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムに基づいて、投機的命
    令を用いるプロセッサが実行するオブジェクトプログラ
    ムを生成するためのコンパイラにおけるループ最適化方
    法であって、 前記プロセッサが保持し得るコンディションコードの数
    を上限として展開数を決定する工程と、 ループにおいて前記決定された展開数に基づき、新たな
    条件分岐命令とループボディとからなる命令列を該展開
    数だけ生成して、前記ループに代わる新たなループを生
    成する工程と、 前記新たなループが有する、条件分岐を含まない命令列
    よりなる基本ブロックができるだけ大きくなるように、
    前記生成されたループボディを、前記生成された条件分
    岐命令より前へ移動させかつ前記投機的命令に置き換え
    る工程とを備えたことを特徴とするループ最適化方法。
  2. 【請求項2】 請求項1記載のループ最適化方法であっ
    て、 前記ソースプログラム中のループを検出して該検出され
    たループの構造を解析する工程と、 前記解析されたループの構造と前記プロセッサが保持し
    得るコンディションコードの数の上限とに基づいて、該
    解析されたループ毎に前記展開数を決定する工程とを更
    に備えたことを特徴とするループ最適化方法。
  3. 【請求項3】 請求項1又は2のいずれかに記載のルー
    プ最適化方法であって、 前記プロセッサが有するレジスタの数を上限として前記
    展開数を決定する工程を更に備えたことを特徴とするル
    ープ最適化方法。
  4. 【請求項4】 請求項1記載のループ最適化方法であっ
    て、 前記ループボディを移動させかつ前記投機的命令に置き
    換えて生成された命令列の中から、連続するアドレスを
    アクセスするためのメモリアクセス命令を選択して、該
    選択されたメモリアクセス命令を、連続するアドレスの
    順に認識し、かつデータ依存関係を保持して1つのメモ
    リアクセス命令へ置き換える工程を更に備えたことを特
    徴とするループ最適化方法。
JP9207453A 1997-08-01 1997-08-01 ループ最適化方法 Withdrawn JPH1153197A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9207453A JPH1153197A (ja) 1997-08-01 1997-08-01 ループ最適化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9207453A JPH1153197A (ja) 1997-08-01 1997-08-01 ループ最適化方法

Publications (1)

Publication Number Publication Date
JPH1153197A true JPH1153197A (ja) 1999-02-26

Family

ID=16540029

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9207453A Withdrawn JPH1153197A (ja) 1997-08-01 1997-08-01 ループ最適化方法

Country Status (1)

Country Link
JP (1) JPH1153197A (ja)

Similar Documents

Publication Publication Date Title
US6826677B2 (en) Renaming registers to values produced by instructions according to assigned produce sequence number
US11340908B2 (en) Reducing data hazards in pipelined processors to provide high processor utilization
US5537620A (en) Redundant load elimination on optimizing compilers
US7533375B2 (en) Program parallelization device, program parallelization method, and program parallelization program
US4763255A (en) Method for generating short form instructions in an optimizing compiler
US5966537A (en) Method and apparatus for dynamically optimizing an executable computer program using input data
US7313788B2 (en) Vectorization in a SIMdD DSP architecture
US5710902A (en) Instruction dependency chain indentifier
JP5882950B2 (ja) ステージド・ループ命令
US5857104A (en) Synthetic dynamic branch prediction
US4961141A (en) Generating efficient code for a computer with dissimilar register spaces
JPH08272609A (ja) Vliwプログラムのオブジェクト・コード互換性提供方法
US6754806B2 (en) Mapping circuitry and method comprising first and second candidate output value producing units, an in-range value determining unit, and an output value selection unit
US8196127B2 (en) Pervasively data parallel information handling system and methodology for generating data parallel select operations
JPH11194948A (ja) コンパイラ最適化アルゴリズム
US6954927B2 (en) Hardware supported software pipelined loop prologue optimization
US7120905B2 (en) System and method for transformation of assembly code for conditional execution
CN115004150A (zh) 用于预测和调度软件流水化循环中的复制指令的方法和装置
EP0180077B1 (en) A data processing machine for compiling computer programs
JP2828219B2 (ja) オブジェクト・コード互換性を与える方法、オブジェクト・コード互換性並びにスカラ・プロセッサ及びスーパスカラ・プロセッサとの互換性を与える方法、ツリー命令を実行するための方法、データ処理システム
JPH11242599A (ja) コンピュータプログラム製品
KR100662846B1 (ko) 데이터 처리 시스템 및 데이터 처리방법
US7676799B1 (en) Address simplification by binary transformation
JPH03135630A (ja) 命令スケジューリング方式
JP2003256214A (ja) 配列拡張によるループ変換方法

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20041005