JPH096627A - 最適化装置 - Google Patents

最適化装置

Info

Publication number
JPH096627A
JPH096627A JP7150261A JP15026195A JPH096627A JP H096627 A JPH096627 A JP H096627A JP 7150261 A JP7150261 A JP 7150261A JP 15026195 A JP15026195 A JP 15026195A JP H096627 A JPH096627 A JP H096627A
Authority
JP
Japan
Prior art keywords
constant
variable
expression
constant holding
rewriting
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
JP7150261A
Other languages
English (en)
Other versions
JP3650649B2 (ja
Inventor
Kensuke Kotani
謙介 小谷
Jiyunko Sayama
旬子 佐山
Akira Tanaka
旭 田中
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 JP15026195A priority Critical patent/JP3650649B2/ja
Priority to US08/657,489 priority patent/US5842021A/en
Priority to TW085106680A priority patent/TW434512B/zh
Priority to DE69620057T priority patent/DE69620057T2/de
Priority to EP96304374A priority patent/EP0749067B1/en
Priority to KR1019960021648A priority patent/KR100215502B1/ko
Priority to CN96108810A priority patent/CN1122216C/zh
Publication of JPH096627A publication Critical patent/JPH096627A/ja
Application granted granted Critical
Publication of JP3650649B2 publication Critical patent/JP3650649B2/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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 コンパイラにおける定数の取り扱いを最適化
し、コンパイル後のコードサイズおよび実行時間を短く
する。 【構成】 定数保持変数定義検出部7、使用式検出部8
により定数保持変数の定義および使用情報を定数保持変
数情報保持部6に格納し、部分定数式書き換え部9が、
変数を定数に書き換えればその変数を含む式を定数に畳
み込むことができる定数保持変数を定数に書き換え、コ
スト判定書き換え部10が変数をレジスタに載せて使用
するか、定数伝播するかを判断して、定数伝播する場合
に変数を定数で書き換え、資源割り付け部11が変数に
資源を割り当て、メモリ変数書き換え部12がメモリに
割り付けられた定数保持変数を定数値に書き換え、定数
保持変数定義除去部13が不要となった定数保持変数の
定義を除去する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、高級言語で書かれたソ
ースプログラムを機械語プログラムに翻訳するコンパイ
ラに備えられ、高効率の機械語プログラムを生成できる
ように、ソースプログラムあるいは中間言語プログラム
を最適化する最適化装置に関する。
【0002】
【従来の技術】近年高級言語を用いてソースプログラム
を記述することで、機械語プログラムの開発効率を向上
させることが盛んに行われている。高級言語を用いて記
述されたソースプログラムはコンパイラによって機械語
プログラムに翻訳される。このコンパイラは最適化装置
を備えており、プログラミング言語で記述されたプログ
ラムはこの最適化装置によってターゲットマシンのMPU
上で効率良く実行できるように書き換えられる 一方、機械語プログラムは、より高効率なものが求めら
れるので、上記の最適化装置は、最終的に作成される機
械語プログラムの総実行時間をより短く、総プログラム
サイズをより小さくするためにも、プログラムに対して
様々な書き換えを行う(尚、最終的に作成される機械語
プログラムの実行時間、あるいは、機械語プログラムの
メモリサイズはコストと総称される。)。
【0003】最適化装置によって行われる処理のうち、
プログラムの書き換えによって機械語プログラムの実行
時間、メモリサイズの向上を図る処理の一つに定数の伝
播処理及び畳み込み処理がある。これらの処理を交互に
繰り返せば、最適化装置はプログラムの中の式の数を大
きく減らすことができる。この様子を図13(a)〜
(f)の説明図を参照しながら説明する。
【0004】図13(a)は、中間言語状態のプログラ
ムを示している。本図において左端に付された記号s
1、s2、s3・・・で、プログラム中の各位置を指示
している。本図において”a+x”、”20000+a”の
ように、定数または変数である被演算子、および演算子
から構成されるプログラムのコードは、演算式と称され
る。また”a”、”20000”のように定数または変数の
みからなる式も演算式とする。
【0005】また、図13(b)中の”a1=a+x”
のように、等号の左辺に変数、右辺に演算式を持つプロ
グラムのコード、あるいは、”a=b”のように、右辺
が変数または定数である一連のコードは代入式と呼ばれ
る。更に、図13(b)の位置s4にある全ての被演算
子が定数である代入式”20000+10000”は、特に定数式
と呼ばれる。
【0006】加えて、代入式により、等号の左辺に記述
される変数に、右辺の値を代入することを変数の定義と
いう。演算式の被演算子として変数を用いることを変数
の使用という。また、”a=b”のように、変数が代入
式の右辺に現れることも使用という。本図13(a)に
おいて、位置s1の代入式では、変数aに定数10000を
代入している。このように、定数が代入される変数は定
数保持変数と称される。この変数aからは4本の矢印が
伸び、それらの矢先にも変数aがあるが、これは変数a
が被演算子として使用されている演算式を指示してい
る。最適化装置は、定数保持変数を全て検出し、更にそ
の定数保持変数が被演算子として使用されている演算式
を検出する。検出後、最適化装置は、これらの演算式に
おいて被演算子として使用されている定数保持変数をそ
の保持値に書き換える。この書き換えによって、図13
(a)のプログラム中の各演算式は、定数保持変数aを
被演算子とした演算式からその保持値”10000”を被演
算子にした演算式に書き換えられる。
【0007】この書き換えの結果を図13(b)に示
す。尚、本図において、変数x、yが書き換えられずに
残っているが、これは、変数x、yが定数保持変数では
ない変数、例えば、関数の戻り値を保持する変数だから
である。またこのような書き換えを行えば、位置s1の
代入式”a=10000”は冗長になることがわかる。最適
化装置は、この代入式を冗長な代入式として削除し、式
のコードサイズを低減する。以上の被演算子の書き換え
処理と、この書き換え処理によって冗長となった代入式
を削除する処理とが定数の伝播と称される。
【0008】上記の書き換えによって位置s4の代入式
は、『b=20000+10000』になり、代入式『b=3000
0』と等価になったことがわかる。最適化装置は、プロ
グラム中に『b=20000+10000』のような定数式が表れ
ると、それと等価の代入式『b=30000』に書き換え
る。このように、定数式を等価な定数に書き換えること
を定数の畳み込みという。最適化装置によって定数の畳
み込みが行われると、プログラム中に代入式『b=3000
0』が表れ、この位置s4の代入式の変数bが新たに定
数保持変数になる。
【0009】伝播及び畳み込みによって新たな定数保持
変数が表れると、定数保持変数a同様、最適化装置は定
数保持変数bが被演算子になっている演算式を探し出
す。この変数bからは3本の矢印が伸び、その矢先にも
変数bがあるが、これは変数bが被演算子として使用さ
れている演算式を指示している。最適化装置は位置s
9、s10、s11の演算式を探し出し、これらの演算
式において被演算子になっている定数保持変数bを、そ
の保持値”30000”に書き換える。この書き換えによっ
て位置s9、s10、s11の演算式は図13(d)に
示すように、『u=10000+30000』、『z=30000+450
00』『v=30000+z』と書き換えられる。この書き換
え後、最適化装置は定数の畳み込みを行い、位置s9、
s10の代入式を『u=40000』、『z=75000』に書き
換える。この書き換えによって変数u、zが定数保持変
数になるので、これらの変数についての伝播、畳み込み
を最適化装置は更に繰り返す。以上のように伝播、畳み
込みを繰り返すと、図13(e)に示すように定数保持
変数uについて値の伝播が行われ、位置s4、s9、s
10の代入式が削除されて、図13(f)に示すよう
に、プログラムは至って簡素になる。
【0010】以上のように定数の伝播および定数の畳み
込みが行われた後、最適化装置は、資源割付処理を行
い、プログラム中に残った変数をレジスタあるいはメモ
リに割り付ける。この資源割付を行うにあたって、最適
化装置は、生存区間が重なり合う変数同士をそれぞれ、
異なるレジスタに割り付ける。何故なら、生存区間とは
変数が代入されてから、最後に使用されるまでのプログ
ラム上の区間のことであり、これが重複し合うもの同士
を同一のレジスタに割り付けると、レジスタの保持値の
退避−復元処理が機械語プログラム中に多数必要となる
からである。尚、ターゲットマシンのレジスタが少数で
あり、生存区間が重複し合う変数が多い場合、最適化装
置は、それらの変数の何れかをメモリに割り付ける。こ
のように、割り付け処理が行われた後、コンパイラは、
この割り付け結果に基づいてコード生成を行い、機械語
プログラムを生成する。
【0011】このように、定数の伝播処理、畳み込み処
理を行い、定数保持変数を削除してから資源割付処理を
行えば、その削除分だけ生存区間の重複数が低減するの
で、レジスタを有効に活用することができる。
【0012】
【発明が解決しようとする課題】しかしながら上記従来
技術では、定数の伝播および定数の畳み込みによって代
入式の被演算子がその保持値に書き換えられることで、
バイト長が長い即値データをオペランドとした機械語コ
ードが生成されてしまい、結果として機械語プログラム
の実行時間が長く、メモリサイズが大きくなってしまう
ことが有り得るといった問題点があった。
【0013】定数の伝播および定数の畳み込みによって
図13(d)のように書き換えられたプログラム中の、
変数a1、a2がそれぞれ、レジスタD1、D2に割り
付けられ、また、その結果、図14に示す機械語コード
が生成されたとする。図14中の機械語コード『add #1
0000,D1』、『add #10000,D2』の中の記号#が付された
数値『#10000』は2バイト長の即値であり、これらの機
械語コードは2バイト長の即値が組み込まれたため、図
12に示すレジスタを被演算子にした機械語命令に比べ
れば、機械語プログラムの実行時間が長く、メモリサイ
ズが大きくなっていることがわかる。
【0014】尚即値が組み込まれることを回避するに
は、変数aの伝播を行わないことも考えられるが、この
場合、『b=20000+a』が、『b=30000』に畳み込め
ず、代入式『z=b+45000』、『v=b+z』に、変
数bの保持値”30000”を伝播することができなくなっ
てしまう。変数bの伝播が行えなければ、変数z、uを
プログラムから削除することは不可能となり、プログラ
ムの簡素化は望めなくなる。
【0015】本発明は、上記問題点に鑑み、定数の伝
播、定数の畳み込みを有効に行いつつも、定数の伝播に
伴うコスト増加を防止することができる最適化装置を提
供することを目的とする。
【0016】
【課題を解決するための手段】上記目的を達成するため
に、請求項1の最適化装置は、プログラム言語で書かれ
たプログラムを機械語プログラムに翻訳するコンパイラ
に備えられ、プログラム言語で書かれたプログラムの最
適化を行って最適化後のプログラムを出力する最適化装
置であって、プログラム中の定数が代入される変数であ
る各定数保持変数について、その定数保持変数に定数を
代入している式と、その定数保持変数を被演算子にして
いる式とを対応づけて定数保持変数の関連式集合として
管理する管理手段と、関連式集合中の定数保持変数を被
演算子としている式のうち他の被演算子が全て定数であ
る式、及び、定数保持変数を被演算子とした単項演算で
ある式を、定数保持変数が保持する定数を被演算子とし
た式に書き換える第1の書換手段と、第1の書換手段に
よる書き換えの後、定数に書き換えられなかった定数保
持変数を、その保持する定数即値データに置き換えて機
械語演算の被演算子にした場合に、その定数保持変数の
関連式集合の内、定数保持変数を被演算子としている式
から生ずる機械語命令列の実行サイクルおよび/又はコ
ードサイズを、その定数のバイト長に基づいて推定する
第1の推定手段と、第1の書換手段による書き換えの
後、定数に書き換えられなかった定数保持変数が保持す
る定数を格納したレジスタを機械語演算の被演算子にし
た場合に、その定数保持変数の関連式集合の内、定数保
持変数に定数を代入している式及び定数保持変数を被演
算子としている式から生ずる機械語命令列の実行サイク
ルおよび/又はコードサイズを推定する第2の推定手段
と、第1の推定手段の推定結果と第2の推定手段の推定
結果とを各関連式集合毎に比較する比較手段と、比較手
段による比較の結果、第1の推定手段の推定結果が第2
の推定手段の推定結果以下の関連式集合はその中で被演
算子になっている定数保持変数を全てその定数に書き換
える第2の書換手段と、定数保持変数を被演算子として
用いる式が全て定数保持変数が保持する定数値を被演算
子として用いる式に書き換えられた場合に、当該定数保
持変数に定数を代入している式をプログラムから削除す
る第3の書換手段を備えることを特徴としている。
【0017】請求項2の最適化装置は更に、第1及び第
2の書換手段による書き換えによって全ての被演算子が
定数になった式をそれらの被演算子による演算結果を代
入する式に書き換える第4の書換手段と、第4の書換手
段による書き換えによって生じた式で演算結果が代入さ
れることになる新たな定数保持変数と、その定数保持変
数に定数を代入している式と、その定数保持変数を被演
算子にしている全ての式とを各定数保持変数の関連式集
合として管理手段に管理させる制御手段と、管理手段に
新たに管理された関連式集合に対して、第1の書換手段
を起動する起動手段とを備えることを特徴としている。
【0018】請求項3の最適化装置は更に、第2の書換
手段による書き換え及び削除後、各変数間の生存区間の
重なり具合や各変数の使用頻度に基づいて、プログラム
中の各変数をレジスタ又はメモリに割り付ける資源割付
手段と、資源割付手段によってメモリに割り付けられた
変数のうち、定数保持変数であるものを判定し、判定さ
れた定数保持変数の関連式集合において被演算子になっ
ている定数保持変数を全てその定数に書き換える第5の
書換手段と、を備えることを特徴としている。
【0019】請求項4の最適化装置は、複数個の機械語
命令と、各機械語命令の実行サイクルおよび/又はコー
ドサイズを示すコストとを対応づけて記憶するコスト記
憶手段を備え、第1の推定手段は、第1の書換手段によ
る書き換え後、関連式集合において定数保持変数を被演
算子にしている各式を、定数保持変数の保持する定数を
表す即値データを被演算子とした機械語命令に置き換え
る第1の置き換え手段と、置き換えられた各機械語命令
に対応するコストをコスト記憶手段から読み出し、読み
出したコストを集計し、集計結果を推定結果とする第1
の集計手段を備え第2の推定手段は、第1の書換手段に
よる書き換え後、関連式集合において定数保持変数に定
数を代入する式及び定数保持変数を被演算子にしている
各式を、その定数を格納したレジスタを被演算子とした
機械語命令に置き換える第2の置き換え手段と、置き換
えられた各機械語命令に対応するコストをコスト記憶手
段から読み出し、読み出したコストを集計し、集計結果
を推定結果とする第2の集計手段を備えることを特徴と
している。
【0020】
【作用】上記請求項1の最適化装置によれば、管理手段
は、プログラム中の定数が代入される変数である各定数
保持変数について、その定数保持変数に定数を代入して
いる式と、その定数保持変数を被演算子にしている式と
を対応づけて定数保持変数の関連式集合として管理して
いる。関連式集合中の定数保持変数を被演算子としてい
る式のうち他の被演算子が全て定数である式、及び、定
数保持変数を被演算子とした単項演算である式は第1の
書換手段によって定数保持変数が保持する定数を被演算
子とした式に書き換えられる。
【0021】第1の書換手段による書き換えの後、定数
に書き換えられなかった定数保持変数の関連式集合の
内、定数保持変数を被演算子としている式から生ずる機
械語命令列の実行サイクルおよび/又はコードサイズが
第1の推定手段によって推定される。当該機械語命令列
は、定数保持変数が保持する定数を表す即値データが機
械語演算の被演算子になるものである。例えば、関連式
集合中のその定数保持変数を被演算子にしている式から
は、一方の被演算子がレジスタあるいはメモリであり他
方の被演算子が即値である機械語演算の機械語命令が生
じる。この機械語命令の実行サイクルおよび/又はコー
ドサイズを、第1の推定手段は関連式集合単位でその定
数のバイト長に基づいて推定する。
【0022】一方、第1の書換手段による書き換えの
後、定数に書き換えられなかった定数保持変数の関連式
集合の内、定数保持変数に定数を代入している式、及
び、定数保持変数を被演算子としている式から生ずる機
械語命令列の実行サイクルおよび/又はコードサイズが
第2の推定手段によって推定される。当該機械語命令列
は、定数保持変数が保持する定数を格納したレジスタを
機械語演算の被演算子にしたものである。例えば、関連
式集合中の定数保持変数に定数を代入している式からは
レジスタあるいはメモリへの定数即値の代入といった機
械語命令が生じる。また、関連式集合中のその定数保持
変数を被演算子にしている式からは、一方の被演算子が
レジスタあるいはメモリであり、他方の被演算子が定数
を格納したレジスタである機械語命令が生じる。これら
の機械語命令の実行サイクルおよび/又はコードサイズ
を第2の推定手段は関連式集合単位で、その定数のバイ
ト長に基づいて推定する。
【0023】第1の推定手段の推定結果と第2の推定手
段の推定結果とが比較手段によって各関連式集合毎に比
較され、比較手段による比較の結果、第1の推定手段の
推定結果が第2の推定手段の推定結果以下の関連式集合
は、第2の書換手段によってその中で被演算子になって
いる定数保持変数が全てその定数に書き換えられる。こ
のように被演算子になっている定数保持変数が全て定数
に書き換えられると、その定数保持変数に全ての定数を
代入する式が冗長となるので、第3の書換手段によって
定数保持変数に定数を代入している式がプログラムから
削除される。
【0024】以上のように、一方の被演算子が定数保持
変数である演算式に対しての定数の伝播は第1の推定手
段による実行サイクル及びメモリサイズの推定結果が第
2の推定手段による推定結果以下である場合にのみ行わ
れるので、定数の伝播に伴うコスト増加を防止すること
ができる。請求項2の最適化装置によれば、第1及び第
2の書換手段による書き換えによって全ての被演算子が
定数になった式が第4の書換手段によってそれらの被演
算子による演算結果を代入する式に書き換えられる。全
ての被演算子が定数になった式とは、例えば、『d=1
00+200』、『s=30+10*4』等のように、
等号の右辺側に変数が無い式であり、被演算子による演
算結果とは、例えば、『100+200』なら『30
0』、『30+10*4』なら『70』のように、定数
式と等価である式である。第1の書換手段による書き換
えによって、関連式集合において他の被演算子が全て定
数である式、及び、定数保持変数を被演算子とした単項
演算である式は畳み込める状態になっている。この式が
畳み込まれると、この式で代入されている変数が定数保
持変数になり、この定数保持変数に対して定数の伝播を
行うことで、プログラムの簡素化を従来技術並みに行う
ことができる。
【0025】第4の書換手段による書き換えが行われる
と、その書き換えによって生じた式で演算結果が代入さ
れることになる新たな定数保持変数と、その定数保持変
数に定数を代入している式と、その定数保持変数を被演
算子にしている全ての式とが制御手段によって各定数保
持変数の関連式集合として管理手段に管理させられる。
更に管理手段に新たに管理された関連式集合に対して、
第1の書換手段が起動される。第1の書換手段が起動さ
れると、第1の、第2の推定手段が起動され、第2の書
換手段が起動されるので、その新たな定数保持変数の関
連式集合についても、実行サイクルおよび/又はコード
サイズの推定と、この推定結果に基づいた関連式集合中
の各式の書き換えが行われる。
【0026】請求項3の最適化装置によれば、第2の書
換手段による書き換え及び削除が全て行われた後、各変
数間の生存区間の重なり具合や各変数の使用頻度に基づ
いて、資源割付手段によって、プログラム中の各変数が
レジスタ又はメモリに割り付けられる。資源割付手段に
よってメモリに割り付けられた変数のうち、定数保持変
数であるものが判定され、判定された定数保持変数の関
連式集合において被演算子になっている定数保持変数が
第5の書換手段によって全てその定数に書き換えられ、
定数保持変数を被演算子として用いる式が全て定数保持
変数が保持する定数値を被演算子として用いる式に書き
換えられた場合に第3の書換手段によってその定数保持
変数に定数を代入している式が削除される。
【0027】請求項4の最適化装置によれば、コスト記
憶手段には、複数個の機械語命令と、各機械語命令の実
行サイクルおよび/又はコードサイズを示すコストとが
対応づけて記憶されている。第1の書換手段による書き
換えの後、関連式集合において定数保持変数を被演算子
にしている各式は、第1の置き換え手段によって、定数
保持変数を、その保持する定数即値データに置き換えて
被演算子とした機械語命令に置き換えられる。置き換え
られた各機械語命令に対応するコストがコスト記憶手段
から読み出され、第1の集計手段によって、読み出され
たコストが集計され、集計結果が推定結果とされる。
【0028】また第1の書換手段による書き換えの後、
関連式集合において定数保持変数に定数を代入する式及
び定数保持変数を被演算子にしている各式が第2の置き
換え手段によって、その定数を格納したレジスタを被演
算子とした機械語命令に置き換えられる。置き換えられ
た各機械語命令に対応するコストがコスト記憶手段から
読み出され、読み出されたコストが集計され、第2の集
計手段によって集計結果が推定結果とされる。
【0029】
【実施例】以下、本発明の最適化装置の一実施例を図面
を用いて説明する。この最適化装置はC言語などの高級
言語のコンパイラに備えられ、コンパイラが、ソースプ
ログラムの字句解析、構文解析および意味解析をおこな
った後に起動される。処理対象となるプログラムは、コ
ンパイラが字句解析、構文解析および意味解析を行なっ
た後に解析結果として出力する中間言語プログラムであ
る。
【0030】<コンパイラの構成>図1(a)は本発明
の一実施例におけるコンパイラの構成図である。コンパ
イラは、構文解析装置100と、最適化装置200と、
コード生成装置300で構成される。構文解析装置10
0はファイルとして記憶されているソースプログラムの
字句解析、構文解析、および意味解析をおこなう。解析
結果は中間言語プログラムとして出力される。
【0031】最適化装置200は最終的に生成される機
械語プログラムのプログラムサイズを削減し、実行時間
を短縮するように中間言語プログラムを最適化する。コ
ード生成装置300は、最適化された中間言語プログラ
ムを、ターゲットマシンの機械語命令に変換し、機械語
プログラムとして出力する。 <最適化装置200の構成>図1(b)は、図1(a)
に示す最適化装置200の構成図である。最適化装置2
00は、最適化時使用情報検出装置40、一般コード最
適化装置50、及び定数最適化装置60で構成される。
【0032】最適化時使用情報検出装置40は、プログ
ラム内の変数についてのデータフロー解析および制御フ
ロー解析を行ない、最適化処理に要する情報を検出す
る。ここでデータフロー解析とは、それぞれの変数がど
こで定義され、どこに参照されているかについて解析す
ることであり、制御フロー解析とは、プログラム中の制
御の流れを解析することである。
【0033】一般コード最適化装置50は、定数最適化
を除く、不要コードの削除やインライン展開、ループ不
変式のコード移動などの最適化を行う。不要コードの削
除やインライン展開、ループ不変式のコード移動等の最
適化は、本発明の主眼でないので説明を省略する。 <定数最適化装置60の内部構成>図2は定数最適化装
置60の構成図である。定数最適化装置60は、定数保
持変数情報保持部6、定数保持変数定義検出部7、使用
式検出部8、部分定数式書き換え部9、コスト判定書き
換え部10、資源割り付け部11、メモリ変数書き換え
部12、及び定数保持変数定義除去部13で構成され
る。
【0034】定数保持変数情報保持部6には、プログラ
ムで定義されている複数個の定数保持変数が保持する定
数保持変数情報のデータベースが構築されてゆく。図中
の定数保持変数情報保持部6を示す枠内に定数保持変数
情報の一例を示す。定数保持変数情報は、定数保持変数
の変数名と、プログラム内における位置情報で表された
定数保持変数の定義位置と、定数保持変数に保持されて
いる値と、その定数保持変数がどの資源に割り付けられ
ているかを示す資源欄と、プログラム内における位置情
報で表された定数保持変数の使用位置と、使用位置に保
持値を伝播するかどうかを示す各使用位置の使用属性と
で構成される。本図において、変数『a』から見て横方
向には、『s1』『200』、『レジスタ』『s2』
『伝播』が順に並べられているが、これは、変数『a』
の定義位置が『s1』であり、また変数『a』の保持値
が『200』であり、変数『a』がレジスタに割り付け
られ、位置『s2』で使用され、その使用属性が『伝
播』に代入されていることを示す。
【0035】また『b』から見て横方向には、『s3』
『10200』、『メモリ』『s4』『非伝播』が順に並べ
られ、その下の欄には『s5』『非伝播』並べられてい
るが、これは、変数『b』の定義位置が『s3』であ
り、また変数『b』の保持値が『10200』であり、変数
『b』がメモリに割り付けられ、位置s4での使用属性
が『非伝播』に代入されていることを示す。その下欄の
『s5』『非伝播』は、変数『b』がプログラムにおい
て位置s4の他に位置s5で使用され、位置s5は非伝
播であることを示している。
【0036】尚、上記位置情報は、図13の一例に示し
たような、演算式毎に与えられた情報であり、図のs
1、s2、s3、s4・・・がこれに該当する。定数保
持変数定義検出部7は、プログラムから変数に定数ある
いは定数式を代入する代入式を検出し、検出した代入式
において定義された定数保持変数の変数名、定数保持変
数定義位置、定数保持変数に保持されている値を調べ、
これらの情報を1つにまとめて、1つの定数保持変数情
報にして定数保持変数情報保持部14のデータベースに
登録する。尚、定数保持変数については既に述べている
が、定数保持変数でない変数とは、保持値が代入式によ
って一義的に定まらない変数をいう。例えば、従来例で
述べたような関数の戻り値を格納する変数や、プログラ
ム実行中に値が変化する変数等がこれに相当する。
【0037】使用式検出部8は、プログラムから定数保
持変数情報保持部6に保持されている全ての定数保持変
数について、その定数保持変数が被演算子の位置にある
全ての演算式を検出し、検出した演算式の位置を定数保
持変数情報保持部6のデータベースに登録し、その使用
位置の使用属性を非伝播に設定する。部分定数式書き換
え部9は、プログラムにおいて被演算子になっている定
数保持変数をその保持値に置き換えればその被演算子を
含む演算式が定数又は定数式となるかを予測し、またデ
ータフロー解析結果を鑑みて、その置き換えを行っても
変数間の依存関係が保障できるかを検証する。このよう
な一連の処理によって保持値に置き換えればその演算式
が定数又は定数式になると予測され、変数間の依存関係
が保障できると検証された場合、置き換えを実行する。
置き換えの実行の後、定数保持変数情報保持部6に保持
されている定数保持変数情報の使用属性に伝播を代入す
ることで上記置き換えの形跡を残す。
【0038】コスト判定書き換え部10は、定数保持変
数情報保持部6に定義位置が保持されている各変数に対
して、その変数の使用を定数の使用に置き換えた場合
と、レジスタ変数(変数のうち、レジスタに割り付けら
れているものをいう。)として用いた場合とではどちら
がコストが小さくなるかを予測し、かつ、データフロー
解析結果によりその置き換えを行っても変数間の依存関
係が保障できるかを検証する。以上の一連の処理によっ
て定数に置き換えた方がコストが小さくなると予測さ
れ、変数間の依存関係が保障できると検証された場合、
上記置き換えを実行し、定数保持変数情報保持部6に保
持されている定数保持変数情報の使用属性に伝播を代入
して置き換えの形跡を残す。
【0039】資源割り付け部11は、プログラム中の変
数をターゲットマシンのMPUが有しているレジスタまた
はメモリに割り付ける。この資源割り付けにあたって、
資源割り付け部11は、値の伝播及び畳み込みを終えた
プログラムにおいて、各変数の生存区間がどう重複し合
っているかを調べ、その重複し合う変数にそれぞれ異な
るレジスタを割り付ける。また、資源割り付け部11
は、各変数のネストレベルがどれだけであるか、あるい
は、各変数の使用頻度がどれだけであるかを調べ、調べ
た結果に基づいて、各変数に優先度を与える。そしてこ
の優先度が高い順にレジスタを割り付けてゆく。その結
果、レジスタに割り付けられなかった変数はメモリに割
り付ける。資源割り付け部11は、このような資源割付
を終えた後、特に定数保持変数に関しては、定数保持変
数がレジスタまたはメモリのどちらに割り付けられたか
を定数保持変数情報保持部6の定数保持変数情報のデー
タベースに反映させる。
【0040】メモリ変数書き換え部12は、レジスタに
割り付けた方がコストが小さくなると予測され、また、
保持値への書き換えを行っても変数間の依存関係が保障
できると検証された定数保持変数であって、資源割り付
け部11でレジスタに割り付けられなかったものをその
保持値である定数へと書き換える。またその書き換えの
形跡を、定数保持変数情報保持部6に保持されている定
数保持変数情報の使用属性に伝播を代入することで残
す。
【0041】定数保持変数定義除去部13は、定数保持
変数情報保持部6に保持されている定数保持変数につい
て、その定数保持変数に属する全ての定数保持変数の使
用位置の使用属性が伝播となっている場合に、定数保持
変数の定義をしている代入式を除去する。図3は図2に
示す部分定数式書き換え部9の処理過程を示すフローチ
ャートである。
【0042】ステップa1は、ステップa10と対にな
り、定数保持変数情報保持部6に保持されている全ての
定数保持変数を1つ1つ処理対象にして以下の処理(ス
テップa2〜ステップa9)を繰り返す。ステップa2
は、ステップa9と対になり、ステップa1で現在処理
対象になっている定数保持変数が被演算子として含まれ
ている演算式の全てについて、以下の処理(ステップa
3〜ステップa8)を繰り返す。
【0043】ステップa3では、現在処理対象になって
いる定数保持変数をその保持値に置き換えた場合、その
定数保持変数を含む演算式が定数式になるかを調べる。
具体的には、ステップa3では、当該定数保持変数が単
項演算子の被演算子であるか、当該定数保持変数が二項
演算子の被演算子でもう一方の被演算子が定数もしくは
定数保持変数であるかを調べる。ここで単項演算子と
は、『a=−b』等、演算子及び被演算子が唯一つであ
る代入式を言う。
【0044】ステップa4では、プログラム中において
被演算子の位置にある定数保持変数をその保持値に置き
換える(定数の伝播の実行)。また定数保持変数情報保
持部6に保持されている定数保持変数情報の使用位置の
使用属性を伝播に設定する。ステップa5では、ステッ
プa4での置き換えの結果、プログラム中に定数式が新
たに表れたかを調べ、新たにプログラム中に表れた定数
式を定数に畳み込む。
【0045】ステップa6では、ステップa4、a5で
書き換えられた式(代入式)が、定数保持変数を定義す
る代入式と合致するか否かを判定する。ステップa7で
は、ステップa6で合致すると判定された定数保持変数
を定義している代入式についての定数保持変数名、定数
保持変数定義位置、定数保持変数値をひとまとめにして
定数保持変数情報保持部6のデータベースに登録する。
【0046】ステップa8では、ステップa7で定数保
持変数情報保持部6のデータベースに登録された定数保
持変数について、その定数保持変数が被演算子の位置に
ある全ての演算式をプログラム中から検出し、検出した
演算式の位置を定数保持変数情報保持部6に登録し、そ
の定数保持変数情報の使用属性を非伝播に設定する。以
上ステップa1からステップa10までの処理により、
プログラムにおいて被演算子になっていた定数保持変数
はその保持値に置き換えられ、更に畳み込まれた状態と
なる。
【0047】<コスト判定書き換え部10の内部構成>
図4(a)はコスト判定書き換え部10の内部構成図で
ある。コスト判定書き換え部10は、図4(a)に示す
ように、制御部14と、コスト計算の手掛かりになる情
報を保持するコスト保持部15と、レジスタ変数定義コ
スト計算部16と、レジスタ変数使用コスト計算部17
と、定数使用コスト計算部18と、これらの3つの計算
部の計算結果に基づいて定数保持変数の書き換えを行う
べきかを判定する書き換え判定部19と、当該判定部の
判定結果で書き換えを行う書き換え部20とで構成され
る。
【0048】制御部14は、図6(a)のフロ−チャ−
トに基づいて処理を行う。図6(a)は制御部14の処
理過程を示すフロ−チャ−トである。ステップb1は、
ステップb7と対になり、定数保持変数情報保持部6に
情報が登録されている定数保持変数を1つ1つ処理対象
にして以下の処理(ステップb2〜ステップb6)を繰
り返す。
【0049】ステップb2は、現在処理対象になってい
る定数保持変数について、定数保持変数情報保持部6よ
りその定数保持変数定義位置を取り出し、この定数保持
変数定義位置に含まれる代入式を取り出して、当該定数
保持変数をレジスタ変数として定義した場合に当該代入
式で費やされるコスト(以下レジスタ変数定義コストと
呼ぶ)を推測する。
【0050】ステップb3では、現在処理対象になって
いる定数保持変数について、その定数保持変数の使用位
置の内、使用属性が非伝播であるものの全てを定数保持
変数情報保持部6より取り出し、取り出した使用位置で
定数保持変数を被演算子として含んでいる演算式を取り
出して、定数保持変数をレジスタ変数として使用した場
合に当該演算式で費やされるコスト(以下レジスタ変数
使用コストと呼ぶ。)を推測する。
【0051】ステップb4では、現在処理対象になって
いる定数保持変数について、その定数保持変数の使用位
置の内、使用属性が非伝播であるものの全てを定数保持
変数情報保持部6より取り出し、この使用位置において
定数保持変数を被演算子として含んでいる演算式を取り
出して、定数保持変数を定数に置き換えて使用した場合
この演算式で費やされるコスト(以下定数使用コストと
呼ぶ。)を推測する。
【0052】ステップb5では、ステップb2〜b4で
計算した各コストを用い、レジスタ変数定義コストとレ
ジスタ変数使用コストとの和を計算し、この和と定数使
用コストとの大きさを比較する。ステップb6では、ス
テップb5において定数使用コストの方が小さいか、若
しくは、等しかった場合に起動される。この場合には、
定数保持変数を定数で書き換えた方が全体としてコスト
が小さくなるため、現在処理対象になっている定数保持
変数の使用位置を定数保持変数情報保持部6より取り出
し、この定数保持変数使用位置で定数保持変数を被演算
子として含んでいる演算式を取り出して、演算式の被演
算子になっている定数保持変数の使用を保持値である定
数の使用に置き換え、その使用位置の使用属性を伝播に
設定する。
【0053】以上ステップb1からステップb7までの
処理により、プログラム中の定数保持変数は、レジスタ
として使い回した方がコストが小さいものはレジスタ変
数に、それ以外のものは定数保持変数の値である定数に
置き換えられた状態となる。コスト保持部15は、畳み
込みにおいて定義、使用を行う機械語コードの典型例を
表したパタンの全てと、各パタンで費やされるコストと
を対応付けて保持している。コスト保持部15の保持内
容の一連を図5に示す。図5において、コスト保持部1
5を示す枠内に『命令』、『Size』、『Cycle』が横方
法に並べられ、その『命令』から下に向けて『定数保持
変数定義』『8bit定数』『16bit定数』『24bit定数』が
並んでいる。これらのうち、『8bit定数』から横方向に
『2』『1』が並んでいるが、これらは、8bit長の定数
保持変数の定義を行えば、その定数保持変数を含む代入
式においてメモリサイズが『2』費やされ、実行サイク
ルが『1』費やされることを示す。また『24bit定数』
から横方向に『5』『3』が並んでいるが、これらは、
24bit長の定数保持変数の定義を行えば、その定数保持
変数を含む代入式において、メモリサイズが『5』費や
され、実行サイクルが『3』費やされることを示す。
【0054】『レジスタ変数--定数加算 8bit』から
横方向に『2』『1』が並んでいるが、これらは、8bit
長の定数を保持する定数保持変数を定数として加算に使
用すれば、その使用を行う演算式において、メモリサイ
ズが『2』費やされ、実行サイクルが『1』費やされる
ことを示す。『レジスタ−定数加算 16bit』から横方
向に『4』『2』が並んでいるが、これらは、16bit長
の定数を保持する定数保持変数を定数として加算に使用
すれば、その使用を行う演算式において、メモリサイズ
が『4』費やされ、実行サイクルが『2』費やされるこ
とを示す。
【0055】『定数保持変数定義』、『レジスタ−定数
式加算 8bit』の他に、本図には『レジスタ変数同士の
加算』、『メモリからのロード』、『メモリへのスト
ア』等が存在するが、コスト保持部15はこれらの命令
で費やされるコストをも保持し、プログラムに含まれる
あらゆる式について、コストが計算されるようにしてい
る。
【0056】レジスタ変数定義コスト計算部16は、ス
テップb2での推測を行う。具体的には、定数保持変数
の定義を行う代入式でコスト保持部15を検索し、代入
式とマッチングするコストを取り出し、これを推測結果
とする。レジスタ変数使用コスト計算部17は、ステッ
プb3での推測を行う。具体的には、定数保持変数使用
位置の内、使用属性が非伝播であるものにおいて定数保
持変数を被演算子として含んでいる演算式を検索項目と
してコスト保持部15を検索し、検索項目とマッチング
するコストを取り出して、取り出したコストの集計をと
り、これを推測結果とする。
【0057】定数使用コスト計算部18は、ステップb
4で起動され、定数保持変数使用位置の内、使用属性が
非伝播であるもので定数保持変数を被演算子として含ん
でいる演算式について定数保持変数をその保持している
定数値で置き換えた演算式を検索項目としてコスト保持
部15を検索し、検索項目とマッチングするコストを取
り出して、取り出したコストの集計をとり、これを推測
結果とする。
【0058】書き換え判定部19は、ステップb5で起
動され、レジスタ変数定義コスト計算部16からレジス
タ変数定義コストを受け取り、レジスタ変数使用コスト
計算部17からレジスタ変数使用コストを受け取り、定
数使用コスト計算部18から定数使用コストを受け取っ
て、レジスタ変数定義コストとレジスタ変数使用コスト
との和を計算し、この和と定数使用コストとの大きさを
比較する。定数使用コストの方が小さいか、もしくは、
等しい場合には、定数保持変数を保持値で書き換えた方
が全体としてコストが小さくなるため書き換え部20を
呼び出し、定数保持変数を定数に書き換える。定数使用
コストの方が大きかった場合には、定数保持変数をレジ
スタ変数とした方が全体としてコストが小さくなるた
め、書き換えを行なわない。
【0059】書き換え部20は、現在処理対象になって
いる定数保持変数の使用位置を定数保持変数情報保持部
6より取り出し、この定数保持変数使用位置において定
数保持変数を被演算子として含んでいる演算式を取り出
して、プログラム中の定数保持変数の使用を保持値の使
用に置き換え、その使用位置の使用属性を伝播に設定す
る。
【0060】<メモリ変数書き換え部12の内部構成>
図4(b)はメモリ変数書き換え部12の内部構成図で
ある。メモリ変数書き換え部12は、制御部22と、レ
ジスタ変数判定部23と、書き換え部24から構成され
る。制御部22は、定数保持変数情報保持部6に保持さ
れているそれぞれの定数保持変数について、レジスタ変
数判定部23を呼び出す。
【0061】図6(b)は図4(b)に示す制御部22
の処理過程を示すフロ−チャ−トである。ステップc1
はステップc7と対になり、定数保持変数情報保持部6
に登録されている全ての定数保持変数の1つ1つについ
て以下の処理(ステップc2〜ステップc6)を繰り返
す。
【0062】ステップc2は、現在処理対象になってい
る定数保持変数について、変数が割り付けられている資
源を定数保持変数情報保持部6から取り出し、変数がメ
モリに割り付けられているかどうかを判定する。ステッ
プc3はステップc6と対になり、ステップc2でメモ
リに割り付けられていると判定された定数保持変数につ
いて、定数保持変数情報保持部からその使用を取り出
し、定数保持変数の使用1つ1つについて以下の処理
(ステップc4〜ステップc5)を繰り返す。
【0063】ステップc4では、現在処理対象になって
いる定数保持変数の使用について、変数の使用属性を定
数保持変数情報保持部6から取り出し、使用属性が非伝
播かどうかを判定する。ステップc5では、ステップc
2によりメモリに割り付けられていると判定された定数
保持変数の内、ステップc4で使用属性が非伝播である
と判定された定数保持変数の使用について、その使用位
置を定数保持変数情報保持部6から取り出し、これらの
使用位置で被演算子となっている定数保持変数をその保
持値である定数値で置き換え、使用属性を伝播に設定す
る。
【0064】ステップc1からステップc7までの処理
により、プログラム中の定数保持変数のうち、資源割り
付け後に、メモリに割り付けられてしまったものが保持
値に置き換えられた状態となる。レジスタ変数判定部2
3は、現在処理対象になっている定数保持変数につい
て、定数保持変数の使用属性を定数保持変数情報保持部
6から取り出し、その変数がレジスタに割り付けられた
かメモリに割り付けられたかを定数保持変数情報保持部
6の資源の欄より判定し、メモリに割り付けられたと判
定された場合に、その変数の使用属性が非伝播が否かを
判定して、非伝播の場合に、書き換え部24を起動す
る。
【0065】書き換え部24は、レジスタ変数判定部2
3によって起動され、現在処理対象になっている定数保
持変数の全ての使用位置を定数保持変数情報保持部6か
ら取り出し、取り出した位置で被演算子の位置にある定
数保持変数をその保持値に書き換え、定数保持変数の使
用位置の使用属性を伝播に設定する。 <図7(a)〜(f)の中間言語プログラムを処理対象
とした動作例>以上のように構成された最適化装置に、
図7(a)に示されたプログラムを入力として与えた場
合の動作を、動作例として説明する。
【0066】(1)定数保持変数定義検出部7は、図7
(a)のプログラムにおいて位置s1の定義式(定数保
持変数に定数を設定する代入式)を検出し、定数保持変
数名a、定義位置s1、定数保持変数値200を1つに
まとめて1つの定数保持変数情報として、定数保持変数
情報保持部6のデータベースに登録する。 (2)使用式検出部8は、プログラム中から定数保持変
数情報保持部6に登録されている定数保持変数aの使用
式を探査し、位置s2での定数保持変数aの使用式を検
出して、使用位置s2、使用属性「非伝播」を1つにま
とめて1つの定数保持変数情報として、定数保持変数情
報保持部6のデータベースに登録する。同様に定数保持
変数aの使用を探査し、位置s3の演算式を検出して、
使用位置s3及び使用位置s3での使用属性として「非
伝播」を定数保持変数情報保持部6の定数保持変数aの
欄に書き込む。この段階で定数保持変数情報保持部6に
保持されている情報は図8(a)のようになる。 (3)部分定数式書き換え部9では、ステップa1〜a
10のループが、定数保持変数情報保持部6の各定数保
持変数について繰り返される。現段階での定数保持変数
は定数保持変数aのみであるので、ステップa1〜a1
0のループは定数保持変数aについて実行される。
【0067】ステップa2〜a9のループが、定数保持
変数情報保持部6の定数保持変数aのそれぞれの使用式
(定数保持変数が被演算子になっている代入式)につい
て繰り返し実行される。この例では、定数保持変数aの
定数保持変数情報には位置s2、s3の2つの位置情報
が格納されているので、ループは2回実行される。ステ
ップa3では、定数保持変数情報保持部6に保持された
定数保持変数の使用が定数に畳み込めるかを判定する。
定数保持変数aの使用式の定数200での置き換え後の
式は、位置s2「a1={200}+x」、位置s3
「b=10000+{200}」(※、{,}内の数値は、書
き換えによって生じた定数を示す。)となり、結果が定
数に畳み込めるのは位置s3の演算式のみである。従っ
て以下ステップa4〜a8の処理は定数保持変数の位置
s3の演算式についてのみ実行される。
【0068】ステップa4では、プログラム中の位置s
3が「b=10000+{200}」と書き換えられ(定数
の伝播)、定数保持変数情報保持部6中、定数保持変数
aの位置s3を含む欄の使用属性が「伝播」に設定され
る。ステップa5では、プログラム中の位置s3が、更
に「b={10200}」に畳み込まれる。
【0069】ステップa6では、ステップa5で書き換
えによって、定数保持変数の定義式が新たに生成したか
を判定する。この場合、代入式「b={10200}」によ
り定数保持変数bが新たに生成されたのでので、以下ス
テップa7、a8が実行される。ステップa7では、ス
テップa6で新たに生成したと判定された定義式につい
ての定数保持変数情報として、定数保持変数情報保持部
6のデータベースに、定数保持変数名b、定数保持変数
定義位置s3を1つにまとめて1つの定数保持変数情報
として定数保持変数値10200を登録する。
【0070】ステップa8では、ステップa7で新たに
格納された定数保持変数bについて、その使用位置がプ
ログラム中から探査される。処理は上記(2)の場合と
同様なので説明は省略する。ステップa9では、ステッ
プa2と対になりループ処理を行なう。ステップa10
では、ステップa1と対になりループ処理を行なう。こ
の段階では、定数保持変数情報保持部6には、定数保持
変数bの定義式も登録されているため、再びステップa
1に戻り、ループを行なうこととなる。つまり、途中で
追加されたものを含む全ての定数保持変数bの定義式に
ついてステップa1〜a10の処理が繰り返される。
【0071】部分定数式書き換え部9による書き換えの
結果、中間プログラムは図7(b)、定数保持変数情報
保持部6に保持されている定数保持変数情報は図8
(b)のようになる。 (4)コスト判定書き換え部10は、定数保持変数情報
保持部6に保持されている定数保持変数a、bについて
以下の処理を実行する。MPUの命令セットとして図9を
仮定する。この場合、コスト保持部15に格納されてい
る情報は図10になる。
【0072】{定数保持変数aの使用のコスト比較及び
書き換え}レジスタ変数定義コスト計算部16は、定数
保持変数情報保持部6から定数保持変数aの定義位置を
とりだし、プログラム中から定数保持変数aの定義式を
取り出して、コスト保持部15に格納されているパター
ンとマッチングを行ない、定数保持変数aの定義コスト
を取り出す。この場合200は8bit以内の定数であるた
め、コストとしてサイズ2、サイクル1が取り出される
(ステップb2、図10の矢符c1)。
【0073】レジスタ変数使用コスト計算部17は、定
数保持変数情報保持部6から定数保持変数aの使用の
内、その使用属性が非伝播であるものの使用位置をとり
だし、その使用位置での定数保持変数aの使用式を取り
出して、コスト保持部15に格納されているパターンと
マッチングを行ない、定数保持変数aの使用コストを取
り出す。この場合は定数保持変数aの使用式は、どちら
もレジスタ変数同士の加算とマッチングし、コストとし
てサイズ1、サイクル1が取り出される(ステップb
3、図10の矢符c2)。
【0074】定数使用コスト計算部18は、定数保持変
数情報保持部6から定数保持変数aの使用の内、その使
用属性が非伝播であるものの使用位置をとりだし、プロ
グラム中から使用式を取り出して、使用式中の定数保持
変数をその保持値に置き換えた場合の定数式と、コスト
保持部15に格納されているパターンとのマッチングを
行ない、定数保持変数aを定数に置き換えた場合の使用
コストを取り出す。この例ではレジスタ変数--8bit
定数の加算とマッチングし、コストとしてサイズ2、サ
イクル1が取り出される(ステップb4、図10の矢符
c3)。
【0075】書き換え判定部19は、上記レジスタ変数
定義コスト計算部16で計算されたコストと上記レジス
タ変数使用コスト計算部17で計算されたコストとの和
をとり、これと、定数使用コスト計算部18で計算され
たコストとを比較する(ステップb5)。定数保持変数
aの例では、レジスタ変数として用いた場合には、 サイズ=2+1=3 サイクル=1+1=2 定数に置き換えた場合には、 サイズ=2 サイクル=1 となり、定数使用のコストの方が小さいので、書き換え
部20を起動し、位置s2の演算式で被演算子になって
いる定数保持変数aの使用式を定数保持変数値200に
書き換える(ステップb5)。この結果使用位置s2の
代入式は「a1=200+x」となる。
【0076】{定数保持変数bについてのコスト比較及
び書き換え}定数保持変数aと同様の処理をおこなう
が、定数保持変数bの場合には定数使用コストの方が大
きくなる。従って書き換え部20は起動されない。以
上、コスト判定書き換え部10の処理により、プログラ
ムは図7(c)、定数保持変数情報保持部6に保持され
ている情報は図8(c)になる。
【0077】(5)資源割り付け部5は各変数a、a
1、x、b、b1、b2、yをレジスタまたはメモリに
割り付ける。また定数保持変数であるa、bについては
定数保持変数情報保持部6の資源欄に割り付けられた資
源(レジスタもしくはメモリ)を設定する。 (6)メモリ変数書き換え部12は、定数保持変数情報
保持部6に保持されている定数保持変数についてこの定
数保持変数がレジスタに割り付けられているかどうかを
調べる(ステップc2)。
【0078】(7−1 定数保持変数bがレジスタに割
り付けられた場合)定数保持変数がレジスタに割り付け
られている場合にはここで処理を終了する。例において
定数保持変数bがレジスタに割り付けられていたのでプ
ログラムは図7(c)に示すようになる。 (8)定数保持変数定義除去部7は、定数保持変数情報
保持部6に保持されている定数保持変数について、その
全ての定数保持変数使用属性が伝播となっている場合
に、定数保持変数情報保持部6に登録されている定数保
持変数定義位置の項の内容に基づいて、プログラムから
定数保持変数の定義式を除去する。
【0079】例において定数保持変数bがレジスタに割
り付けられた場合には、定数保持変数情報格納部内の情
報は図8(d)の様になっており、定義式が除去できる
定数保持変数は定数保持変数aのみである。従ってこの
場合には定数保持変数aの定義式(プログラム中の位置
s1)を除去する。結果、最終的にプログラムは図7
(e)に示すように書き換えられる。
【0080】(7−2 定数保持変数bがレジスタに割
り付けられなかった場合)定数保持変数bがレジスタに
割り付けられていなかった場合には、更に定数保持変数
情報の属性項を調べ、使用属性が非伝播となっているか
どうかを調べる(ステップc4)。この例では図8
(c)に示されている通り、使用位置s4、s5で使用
属性項が非伝播となっている。従って、書き換え部24
が起動され、定数保持変数の使用がその保持値の使用に
書き換えられる(ステップc5)。例では、定数保持変
数bがレジスタに割り付けられていないので、プログラ
ムは図7(d)に示すように書き換えられる。定数保持
変数bがレジスタに割り付けられなかった場合には、定
数保持変数情報格納部内の情報は図8(e)の様になっ
ており、定義式が除去できる定数保持変数はa、bとな
る。従ってこの場合には定数保持変数aの定義式(プロ
グラム中の位置s1)および定数保持変数bの定義式
(プログラム中の位置s3)を除去する。結果、最終的
にプログラムは図7(f)に示すように書き換えられ
る。
【0081】<図11(a)〜(f)の中間言語プログ
ラムを処理対象とした動作例>最適化装置に図11
(a)〜(f)に示されたプログラムが入力として与え
られた場合の動作を以下に説明する。 (1)定数保持変数定義検出部7は、位置s1において
プログラム中31の定数保持変数の代入式を検出し、定
数保持変数名a、定義位置s1、定数保持変数値10000
を定数保持変数情報保持部6のデータベースに登録する
(ステップa7)。 (2)使用式検出部8は、プログラム中から定数保持変
数情報保持部6に保持されている定数保持変数aの使用
位置を探査し、位置s2の使用式を検出して、使用位置
s2、使用属性「非伝播」を定数保持変数情報保持部6
の定数保持変数aの欄に登録する。また同様に定数保持
変数aの使用式、s3、s4を検出し、使用位置として
s3、s4を使用属性として「非伝播」に設定する(ス
テップa8)。 (3)部分定数式書き換え部9では、定数保持変数aの
使用s4が書き換え条件に該当するので、図11(b)
に示すように、使用s4が「b=20000+10000」更に
「b=30000」と書き換えられ、定数保持変数情報保持
部6中、定数保持変数aの使用位置s3の使用属性が
「伝播」に設定される(ステップa5)。またこの段階
で変数bも新たな定数保持変数となりここで登録される
が、この例では変数bの使用式についての説明は省略
し、以下変数aについてのみ説明を行う。 (4)コスト判定書き換え部10は、定数保持変数情報
保持部6に保持されている定数保持変数aについて以下
の処理を実行する。MPUの命令セットとして図9を仮定
する。この場合、コスト保持部15に格納されている情
報は図10になる。
【0082】レジスタ変数定義コスト計算部16は、定
数保持変数情報保持部6から定数保持変数aの定義位置
を取り出し、プログラム中から定義式を取り出して、コ
スト保持部15に格納されているパタンとのマッチング
をとり、定数保持変数aの定義コストを取り出す。この
場合10000は16bit以内の定数であるため、コストとし
てサイズ3、サイクル1が取り出される(ステップb
2)。
【0083】レジスタ使用コスト計算部17は、定数保
持変数情報保持部6から定数保持変数aの使用位置の
内、使用属性が非伝播であるものを取り出し、プログラ
ム中から使用式を取り出して、コスト保持部15に格納
されているパタンとのマッチングをとり、定数保持変数
aの使用コストを取り出す。この場合は定数保持変数a
の使用式は、どちらも(s2、s3)レジスタ変数同士
の加算とマッチングするので、コストとしてサイズ1、
サイクル1が取り出される(ステップb3)。
【0084】定数使用コスト計算部18は、定数保持変
数情報保持部6から定数保持変数aの使用位置を取り出
し、その使用位置の使用式の内、使用属性が非伝播であ
るものを取り出して、使用式中の定数保持変数をその保
持値で置き換えた場合の定数式と、コスト保持部15に
格納されているパタンとマッチングをとり、定数保持変
数aを保持値に置き換えた場合の使用コストを取り出
す、この例ではどちらもレジスタ変数−−16bitit定
数の加算とマッチングするので、コストとしてサイズ
4、サイクル2が取り出される(ステップb4)。
【0085】書き換え判定部19は、上記レジスタ変数
定義コスト計算部16で計算されたコストとレジスタ変
数使用コスト計算部17で計算されたコストの和をと
り、これと、定数使用コスト計算部18で計算されたコ
ストとを変換する(ステップb5)。定数保持変数aの
例ではレジスタ変数として用いた場合には、 サイズ=3+1+1=5 サイクル=1+1+1=3 定数で置き換えた場合には、 サイズ=4+4=8 サイクル=2+2=4 となり、レジスタ変数として使用した場合のコストの方
が小さいので、書き換え部20は起動されず位置s2、
s3はこのまま変化しない。
【0086】従って、図11(a)の中間言語プログラ
ムは図11(b)の形となる。図11(b)において、
位置s4では、代入式が『b=30000』となり、プログ
ラム中に代入式『b=30000』が表れ、この位置s4の
代入式の変数bが新たに定数保持変数になる。伝播及び
畳み込みによって新たな定数保持変数が表れると、定数
保持変数a同様、定数保持変数bが被演算子になってい
る代入式を探し出される。この変数bからは3本の矢印
が伸び、その矢先にも変数bがあるが、これは変数bが
被演算子として使用されている代入式を指示している。
最適化装置は位置s9、s10の代入式が探し出され、
これらの代入式において被演算子になっている定数保持
変数bが、その保持値”30000”に書き換えられる。こ
の書き換えによって位置s9、s10の代入式は図に示
すように、『u=10000+{30000}』、『z={3000
0}+45000』と書き換えられる。この書き換え後、最適
化装置は、定数の畳み込みを行い、位置s9、s10の
代入式を『u=40000』、『z=75000』に書き換える。
この書き換えによって変数u、zが定数保持変数になる
ので、これらの変数についての伝播、畳み込みを最適化
装置は更に繰り返す。以上のように伝播、畳み込みを繰
り返すと、プログラムのように、位置s4、s9、s1
0の代入式が削除され、プログラムは至って簡素にな
る。
【0087】以上のように、書き換えが行われると、最
適化装置は、定数の伝播および定数の畳み込み後、プロ
グラム中に残った変数をレジスタあるいはメモリに割り
付ける。この資源割付を行うにあたって、最適化装置
は、生存区間が重なり合う変数同士をそれぞれ、異なる
レジスタに割り付ける。定数の伝播および定数の畳み込
みによって図11(d)のように書き換えられたプログ
ラム中の、変数a、x、yがそれぞれ、レジスタD0、
D1、D2に割り付けられたとする。変数a、x、yが
レジスタに割り付けられたので、図11(d)に示すプ
ログラム中の各代入式はオペランドをレジスタにした機
械語コードに変換される。
【0088】図11(d)で位置s1〜s3の中間言語
プログラムから生成された機械語コードを図12に示
す。図中の『movi #10000,D0』、『add D0,D1』、『add
D0,D2』は、伝播後の中間言語プログラムの代入式に対
応している。これらの機械語コードの右隣に、メモリサ
イズ、実行サイクルが書かれているが、これらの機械語
コードはレジスタを被演算子にしているから、『add D
0,D1』は、メモリサイズが”1”、実行サイクルが”
1”となり、『add D0,D2』は、メモリサイズが”
1”、実行サイクルが”1”となる。これが従来例のよ
うにこの機械語コードが即値『#10000』を含んだもので
あれば、図14に示したようにメモリサイズが”4”、
実行サイクルが”4”となる。そのため、本発明の伝播
では、より低コストの機械語プログラムに書き換えられ
ることがわかる。
【0089】以上説明したように本発明によれば、定数
の伝播、定数の畳み込みを有効に行いつつも、定数の伝
播に伴うコスト増加を防止することができる。なお、上
記実施例においてコストとして命令のサイズと実行時間
(サイクル数)を並列に用いたが、これらを単独で用い
てもよい。またこれらに演算を施した値をコストとして
用いても良いことは言うまでもない。
【0090】
【発明の効果】以上説明してきたように請求項1に係る
最適化装置においては、第1の書換手段による書き換え
でプログラムの簡素化を行うことができ、残りの式の書
き換えは第1の推定手段の推定結果が第2の推定手段に
よる推定結果以下である場合にのみ行うので、定数の伝
播に伴うコスト増加を防止することができる。このよう
にコスト増加を伴わずに定数の伝播が行えれば、プログ
ラムの冗長部が無くなるので、このプログラムに基づい
て生成される機械語プログラムが至って高効率になる。
【0091】また、請求項2に係る最適化装置において
は、請求項1の効果に加えて、全ての被演算子が定数に
なった式はそれらの被演算子による演算結果を代入する
式に書き換えられ、書き換えた式が管理手段に管理され
るので、第1の及び第2の書換手段の書き換えによって
定数保持変数を新たに生成することができ、定数保持変
数が保持する定数を伝播することが可能となる。以上の
処理が繰り返され、伝播及び畳み込みが順々に行われる
と、多くの式が削除されてプログラムが至って簡素にな
る。そのため、最終的に生成される機械語プログラムの
実行時間及びメモリサイズを大きく低減することができ
る。
【0092】また、請求項3に係る最適化装置において
は、請求項1の効果に加えて、第1、第2及び第4の書
換手段によって式が削除されたプログラム中の変数に対
して資源割り付けが行われ、また、この資源割り付けの
結果、メモリに割り付けらた変数のうち定数保持変数
は、メモリが割り付けられる代わりに定数に書き換えら
れるので、定数保持変数が被演算子になっている式及び
定数を代入している式についてはメモリアクセスが不要
になる。そのため、そのメモリアクセスの分だけ、実行
時間を短くすることができる。
【0093】また、請求項4に係る最適化装置において
は、請求項1の効果に加えて、関連式集合中の各式が機
械語命令に置き換えられ、各機械語命令のコストが関連
式集合単位に推定されることで推定が行われるので、よ
り正確なコストを推定することができる。そのため、被
演算子の書き換えを行うか否かの判断がより正確にな
る。
【図面の簡単な説明】
【図1】本発明の一実施例におけるコンパイラ及び最適
化装置200の構成図である。 (a)コンパイラの構成図である。 (b)(a)に示したコンパイラの内部構成における最
適化装置200の構成図である。
【図2】本発明の一実施例における定数最適化装置60
の内部構成図である。
【図3】部分定数式書き換え部9の処理内容を示すフロ
ーチャートである。
【図4】定数最適化装置60の内部構成におけるコスト
判定書き換え部10及びメモリ変数書き換え部12の構
成図である。 (a)コスト判定書き換え部10の構成図である。 (b)メモリ変数書き換え部12の構成図である。
【図5】コスト保持部15の保持内容の一例を示す図で
ある。
【図6】定数最適化装置60の内部構成におけるコスト
判定書き換え部10及びメモリ変数書き換え部12の処
理内容を示すフロ−チャ−トである。 (a)コスト判定書き換え部10の処理内容を示すフロ
−チャ−トである。 (b)メモリ変数書き換え部12の処理内容を示すフロ
−チャ−トである。
【図7】ソースプログラム及び中間言語プログラムの一
例と、その一例が如何に書き換えられるかを示した説明
図である。 (a)ソースプログラムの一例である。 (b)部分定数式書き換え部を経た後の中間言語プログ
ラムの一例である。 (c)コスト判定書き換え部を経た後の中間言語プログ
ラムの一例である。 (d)メモリ変数書き換え部を経た後の中間言語プログ
ラムの一例である。 (e)定数保持変数定義除去部を経た後の中間言語プロ
グラムの一例である。 (f)定数保持変数定義除去部を経た後の中間言語プロ
グラムの一例である。
【図8】定数変数情報の内容が遷移してゆく様子を示し
た図である。 (a)使用式検出部8の処理を経た後の定数変数情報の
一例である。 (b)部分定数式書き換え部9の処理を経た後の定数変
数情報の一例である。 (c)コスト判定書き換え部10の処理を経た後の定数
変数情報の一例である。 (d)メモリ変数書き換え部12の処理を経た後の定数
変数情報の一例である。 (e)メモリ変数書き換え部12の処理を経た後の定数
変数情報の一例である。
【図9】MPUの命令セットの一例である。
【図10】コスト保持部15において登録されている情
報の一例である。
【図11】ソースプログラム及び中間言語プログラムの
一例と、その一例が如何に書き換えられるかを示した説
明図である。 (a)ソースプログラムの一例である。 (b)部分定数式書き換え部を経た後の中間言語プログ
ラムの一例である。 (c)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である (d)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である (e)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である (f)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である
【図12】本発明の最適化装置を経た後の機械語プログ
ラムの一例である。
【図13】ソースプログラム及び中間言語プログラムの
一例と、その一例が、従来の最適化装置によって如何に
書き換えられるかを示した説明図である。 (a)中間言語プログラムの一例である。 (b)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である (c)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である (d)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である (e)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である (f)定数の伝播及び畳み込みが行われた中間言語プロ
グラムの一例である
【図14】定数の伝播及び畳み込みが行われた後に、生
成される機械語プログラムを示す図である。
【符号の説明】
100 構文解析装置 200 最適化装置 300 コード生成装置 400 最適化時使用情報検出装置 40 最適化時使用情報検出装置 50 一般コード最適化装置 60 定数最適化装置 6 定数保持変数情報保持部 7 定数保持変数定義検出部 8 使用式検出部 9 部分定数式書き換え部 10 コスト判定書き換え部 11 資源割り付け部 12 メモリ変数書き換え部 13 定数保持変数定義除去部 14 制御部 15 コスト保持部 16 レジスタ変数定義コスト計算部 17 レジスタ変数使用コスト計算部 18 定数使用コスト計算部 19 書き換え判定部 20 書き換え部 22 制御部 23 レジスタ変数判定部 24 書き換え部

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】プログラム言語で書かれたプログラムを機
    械語プログラムに翻訳するコンパイラに備えられ、プロ
    グラム言語で書かれたプログラムの最適化を行って最適
    化後のプログラムを出力する最適化装置であって、 プログラム中の定数が代入される変数である各定数保持
    変数について、その定数保持変数に定数を代入している
    式と、その定数保持変数を被演算子にしている式とを対
    応づけて定数保持変数の関連式集合として管理する管理
    手段と、 関連式集合中の定数保持変数を被演算子としている式の
    うち他の被演算子が全て定数である式、及び、定数保持
    変数を被演算子とした単項演算である式を、定数保持変
    数が保持する定数を被演算子とした式に書き換える第1
    の書換手段と、 第1の書換手段による書き換えの後、定数に書き換えら
    れなかった定数保持変数を、その保持する定数即値デー
    タに置き換えて機械語演算の被演算子にした場合に、そ
    の定数保持変数の関連式集合の内、定数保持変数を被演
    算子としている式から生ずる機械語命令列の実行サイク
    ルおよび/又はコードサイズを、その定数のバイト長に
    基づいて推定する第1の推定手段と、 第1の書換手段による書き換えの後、定数に書き換えら
    れなかった定数保持変数が保持する定数を格納したレジ
    スタを機械語演算の被演算子にした場合に、その定数保
    持変数の関連式集合の内、定数保持変数に定数を代入し
    ている式及び定数保持変数を被演算子としている式から
    生ずる機械語命令列の実行サイクルおよび/又はコード
    サイズを推定する第2の推定手段と、 第1の推定手段の推定結果と第2の推定手段の推定結果
    とを各関連式集合毎に比較する比較手段と、 比較手段による比較の結果、第1の推定手段の推定結果
    が第2の推定手段の推定結果以下の関連式集合はその中
    で被演算子になっている定数保持変数を全てその定数に
    書き換える第2の書換手段と 定数保持変数を被演算子として用いる式が全て定数保持
    変数が保持する定数値を被演算子として用いる式に書き
    換えられた場合に、当該定数保持変数に定数を代入して
    いる式を削除する第3の書換手段とを備えることを特徴
    とする最適化装置。
  2. 【請求項2】最適化装置は更に、 第1及び第2の書換手段による書き換えによって全ての
    被演算子が定数になった式をそれらの被演算子による演
    算結果を代入する式に書き換える第4の書換手段と、 第4の書換手段による書き換えによって生じた式で演算
    結果が代入されることになる新たな定数保持変数と、そ
    の定数保持変数に定数を代入している式と、その定数保
    持変数を被演算子にしている全ての式とを各定数保持変
    数の関連式集合として管理手段に管理させる制御手段
    と、 管理手段に新たに管理された関連式集合に対して、第1
    の書換手段を起動する起動手段とを備えることを特徴と
    する請求項1記載の最適化装置。
  3. 【請求項3】最適化装置は更に、 第2の書換手段による書き換え及び削除の後、各変数間
    の生存区間の重なり具合や各変数の使用頻度に基づい
    て、プログラム中の各変数をレジスタ又はメモリに割り
    付ける資源割付手段と、 資源割付手段によってメモリに割り付けられた変数のう
    ち、定数保持変数であるものを判定し、判定された定数
    保持変数の関連式集合において被演算子になっている定
    数保持変数を全てその定数に書き換える第5の書換手段
    と、 を備えることを特徴とする請求項1又は2記載の最適化
    装置。
  4. 【請求項4】最適化装置は、 複数個の機械語命令と、各機械語命令の実行サイクルお
    よび/又はコードサイズを示すコストとを対応づけて記
    憶するコスト記憶手段を備え、 第1の推定手段は、 第1の書換手段による書き換え後、関連式集合において
    定数保持変数を被演算子にしている各式を、定数保持変
    数を、その保持する値である定数を表す即値データとし
    て被演算子とした機械語命令に置き換える第1の置き換
    え手段と、 置き換えられた各機械語命令に対応するコストをコスト
    記憶手段から読み出し、読み出したコストを集計し、集
    計結果を推定結果とする第1の集計手段を備え第2の推
    定手段は、 第1の書換手段による書き換え後、関連式集合において
    定数保持変数に定数を代入する式及び定数保持変数を被
    演算子にしている各式を、その定数を格納したレジスタ
    を被演算子とした機械語命令に置き換える第2の置き換
    え手段と、 置き換えられた各機械語命令に対応するコストをコスト
    記憶手段から読み出し、読み出したコストを集計し、集
    計結果を推定結果とする第2の集計手段を備えることを
    特徴とする請求項1〜3記載の何れかの最適化装置。
JP15026195A 1995-06-16 1995-06-16 最適化装置 Expired - Fee Related JP3650649B2 (ja)

Priority Applications (7)

Application Number Priority Date Filing Date Title
JP15026195A JP3650649B2 (ja) 1995-06-16 1995-06-16 最適化装置
TW085106680A TW434512B (en) 1995-06-16 1996-06-04 Optimizer
US08/657,489 US5842021A (en) 1995-06-16 1996-06-04 Optimizer
EP96304374A EP0749067B1 (en) 1995-06-16 1996-06-12 Optimizer
DE69620057T DE69620057T2 (de) 1995-06-16 1996-06-12 Optimierer
KR1019960021648A KR100215502B1 (ko) 1995-06-16 1996-06-15 최적화장치
CN96108810A CN1122216C (zh) 1995-06-16 1996-06-17 优化器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP15026195A JP3650649B2 (ja) 1995-06-16 1995-06-16 最適化装置

Publications (2)

Publication Number Publication Date
JPH096627A true JPH096627A (ja) 1997-01-10
JP3650649B2 JP3650649B2 (ja) 2005-05-25

Family

ID=15493080

Family Applications (1)

Application Number Title Priority Date Filing Date
JP15026195A Expired - Fee Related JP3650649B2 (ja) 1995-06-16 1995-06-16 最適化装置

Country Status (7)

Country Link
US (1) US5842021A (ja)
EP (1) EP0749067B1 (ja)
JP (1) JP3650649B2 (ja)
KR (1) KR100215502B1 (ja)
CN (1) CN1122216C (ja)
DE (1) DE69620057T2 (ja)
TW (1) TW434512B (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004081788A1 (ja) * 2003-03-10 2004-09-23 Catena Corporation Lyee指向ソフトウェアに関する静的分析方法
KR100492131B1 (ko) * 1998-04-08 2005-08-01 한국항공우주산업 주식회사 웹 프로그램의 변수 전달 방법
WO2009098739A1 (ja) * 2008-02-05 2009-08-13 Panasonic Corporation プログラム最適化装置およびプログラム最適化方法
JP2016224724A (ja) * 2015-05-29 2016-12-28 富士通株式会社 情報処理装置、コンパイル方法、及びコンパイラプログラム
JP2021521538A (ja) * 2018-04-13 2021-08-26 マイクロソフト テクノロジー ライセンシング,エルエルシー 短絡高速化のための複合条件の並べ替え

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6223337B1 (en) * 1997-12-12 2001-04-24 Hewlett-Packard Company Random test generation for compiler optimization
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP2002073333A (ja) * 2000-08-25 2002-03-12 Hitachi Ltd 手続き呼び出し先のデータ依存の解析表示方法
US20040003383A1 (en) * 2002-06-28 2004-01-01 Microsoft Corporation Stripping of unnecessary information from source code
US20040095348A1 (en) * 2002-11-19 2004-05-20 Bleiweiss Avi I. Shading language interface and method
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
JP4377369B2 (ja) * 2005-11-09 2009-12-02 株式会社日立製作所 リソース割当調停装置およびリソース割当調停方法
US20070233745A1 (en) * 2006-03-29 2007-10-04 Ori Pomerantz Data Flow Optimization in Meta-Directories
US7870544B2 (en) * 2006-04-05 2011-01-11 International Business Machines Corporation Insuring maximum code motion of accesses to DMA buffers
FR2902543A1 (fr) 2006-06-20 2007-12-21 Alcatel Sa Procede de creation de contenus multimedia pour terminaux mobiles, produit programme d'ordinateur pour la mise en oeuvre d'un tel procede
US20080250032A1 (en) * 2007-04-04 2008-10-09 International Business Machines Corporation Method and system for efficiently saving and retrieving values of a large number of resource variables using a small repository
US8087012B2 (en) * 2007-08-21 2011-12-27 International Business Machines Corporation Eliminating maximum/minimum operations in loop bounds
JP5165969B2 (ja) * 2007-08-29 2013-03-21 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムのコンパイルのために変数にレジスタを割り付ける技術
US7505963B1 (en) * 2008-01-07 2009-03-17 International Business Machines Corporation Method and system for efficiently saving and retrieving values of a large number of resource variables using a small repository
US9176845B2 (en) * 2010-03-19 2015-11-03 Red Hat, Inc. Use of compiler-introduced identifiers to improve debug information pertaining to user variables
CN102184090B (zh) * 2011-05-27 2013-12-04 清华大学 一种动态可重构处理器及其固定数的调用方法
CN109145013A (zh) * 2018-08-10 2019-01-04 上海达梦数据库有限公司 一种表达式转换方法、装置、设备及存储介质
JP6950772B2 (ja) * 2020-03-13 2021-10-13 株式会社安川電機 生産システム、制御方法、及びプログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4802091A (en) * 1986-10-31 1989-01-31 International Business Machines Corporation Method for improving the efficiency of arithmetic code generation in an optimizing compiler using the technique of reassociation
JPH01108638A (ja) * 1987-10-21 1989-04-25 Hitachi Ltd 並列化コンパイル方式
JPH0417031A (ja) * 1990-05-10 1992-01-21 Nec Corp 定数値伝播最適化方式
JP3280449B2 (ja) * 1993-03-01 2002-05-13 富士通株式会社 コンパイル装置
US5659754A (en) * 1995-03-31 1997-08-19 Sun Microsystems, Inc. Method and apparatus for an improved optimizing compiler

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100492131B1 (ko) * 1998-04-08 2005-08-01 한국항공우주산업 주식회사 웹 프로그램의 변수 전달 방법
WO2004081788A1 (ja) * 2003-03-10 2004-09-23 Catena Corporation Lyee指向ソフトウェアに関する静的分析方法
WO2009098739A1 (ja) * 2008-02-05 2009-08-13 Panasonic Corporation プログラム最適化装置およびプログラム最適化方法
JPWO2009098739A1 (ja) * 2008-02-05 2011-05-26 パナソニック株式会社 プログラム最適化装置およびプログラム最適化方法
JP2016224724A (ja) * 2015-05-29 2016-12-28 富士通株式会社 情報処理装置、コンパイル方法、及びコンパイラプログラム
US10545741B2 (en) 2015-05-29 2020-01-28 Fujitsu Limited Information processing apparatus, method of compiling, and storage medium
JP2021521538A (ja) * 2018-04-13 2021-08-26 マイクロソフト テクノロジー ライセンシング,エルエルシー 短絡高速化のための複合条件の並べ替え

Also Published As

Publication number Publication date
US5842021A (en) 1998-11-24
EP0749067A2 (en) 1996-12-18
EP0749067A3 (en) 1997-05-14
CN1143774A (zh) 1997-02-26
EP0749067B1 (en) 2002-03-27
TW434512B (en) 2001-05-16
CN1122216C (zh) 2003-09-24
DE69620057T2 (de) 2002-09-05
KR970002621A (ko) 1997-01-28
DE69620057D1 (de) 2002-05-02
JP3650649B2 (ja) 2005-05-25
KR100215502B1 (ko) 1999-08-16

Similar Documents

Publication Publication Date Title
JPH096627A (ja) 最適化装置
CN110187885B (zh) 一种量子程序编译的中间代码生成方法及装置
US6131189A (en) System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
Chow et al. Effective representation of aliases and indirect memory operations in SSA form
Chambers et al. An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes
US6662354B1 (en) Determining destinations of a dynamic branch
US6427234B1 (en) System and method for performing selective dynamic compilation using run-time information
JP3311462B2 (ja) コンパイル処理装置
JP5419325B2 (ja) プログラム・コードを変換するための共用コード・キャッシングの方法および装置
JP3299611B2 (ja) 資源割付装置
JPH03172936A (ja) 手順間レジスタ割付けを伴うコンピュータプログラムのコンパイル方法及び装置
JP2007531075A5 (ja)
JP2005216177A (ja) コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
CA2321018A1 (en) Optimizing compilation by forward store movement
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
Benitez et al. The advantages of machine-dependent global optimization
US6077314A (en) Method of, system for, and computer program product for providing improved code motion and code redundancy removal using extended global value numbering
US6035124A (en) Method of, system for, and computer program product for providing extended global value numbering
JP2017204080A (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
Wolf et al. Hybrid cache analysis in running time verification of embedded software
Ramalingam et al. Semantics-based reverse engineering of object-oriented data models
JPH08314727A (ja) 資源割付装置
Böckle Exploitation of fine-grain parallelism
Wendt Fast code generation using automatically-generated decision trees
van Engelen et al. Automatic validation of code-improving transformations on low-level program representations

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041109

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050221

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080225

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090225

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100225

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100225

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110225

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120225

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees