JP2004021498A - プログラム最適化方法 - Google Patents
プログラム最適化方法 Download PDFInfo
- Publication number
- JP2004021498A JP2004021498A JP2002174216A JP2002174216A JP2004021498A JP 2004021498 A JP2004021498 A JP 2004021498A JP 2002174216 A JP2002174216 A JP 2002174216A JP 2002174216 A JP2002174216 A JP 2002174216A JP 2004021498 A JP2004021498 A JP 2004021498A
- Authority
- JP
- Japan
- Prior art keywords
- optimization
- instruction
- optimizing
- instructions
- program
- 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
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】最適化処理時間の短縮によりプログラム開発の効率の高い最適化方法を提供する。
【解決手段】最適化命令と非最適化命令(通常命令)とを含むプログラム中のある命令が最適化命令か否かを判別し、最適化命令の場合にのみ最適化処理を行ない、最適化命令のみに対するポインタの集合からなる最適化命令テーブルを作成する。最適化命令テーブルを用いているので、最初の最適化処理によって再度最適化処理が必要な命令がある場合に、最適化命令のみをアクセスして再度最適化処理を行なうことができる。繰り返し最適化処理を行なう対象を最適化命令のみに限定することにより、最適化処理に要する時間を短縮することができ、プログラム開発などの効率の向上を図ることができる。
【選択図】 図1
【解決手段】最適化命令と非最適化命令(通常命令)とを含むプログラム中のある命令が最適化命令か否かを判別し、最適化命令の場合にのみ最適化処理を行ない、最適化命令のみに対するポインタの集合からなる最適化命令テーブルを作成する。最適化命令テーブルを用いているので、最初の最適化処理によって再度最適化処理が必要な命令がある場合に、最適化命令のみをアクセスして再度最適化処理を行なうことができる。繰り返し最適化処理を行なう対象を最適化命令のみに限定することにより、最適化処理に要する時間を短縮することができ、プログラム開発などの効率の向上を図ることができる。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、サイズ(語長)の最適化処理を行なうためのプログラム最適化方法およびプログラム最適化装置に関する。
【0002】
【従来の技術】
従来より、分岐命令、メモリからレジスタへの転送命令、レジスタからメモリへの転送命令を備えているマイコンにおいて、分岐命令の場合には分岐する距離よって、レジスタ−メモリ間の転送命令においてはメモリのアドレスによって、複数の命令が存在する場合がある。
【0003】
図12は、16bit 及び32bit の分岐命令の例を示す図である。図13は、ジャンプに係る分岐命令に対する処理を説明するための図である。
【0004】
図13に示す分岐命令101(jmp )は、飛び先のアドレスに絶対ジャンプするように支持する命令であるが、分岐先のLABEL のアドレスが16bit 以内に収まる場合と、分岐先のLABEL のアドレスが16bit を超えて32bit の値が必要な場合とがある。つまり、分岐先のアドレスが65535番地以内に収まっている場合とそれを超えている場合とである。分岐先のアドレスが16bit 以内に収まる場合には、分岐命令101として図12に示す分岐命令101Aを選択すれば、同図に示す分岐命令101Bを採用するよりも命令サイズが小さくて済み、プログラムを保持するROMの容量を節約することができる。一方、分岐先のアドレスが16bit 以内に収まっていない場合には、図12に示す分岐命令101Bを選択することになる。図11に示す分岐命令101Aまたは分岐命令101Bのどちらの命令を選択するかは、最終的に分岐命令101(jmp )の飛び先のアドレスが決定しているプログラムの最終状態に応じてより有利なように決定することができる。
【0005】
次に、従来行なっているアセンブラ最適化方法における命令選択処理の方法を説明する。図14は、最適な命令を選択する処理(以後、最適化処理と呼ぶ)を行なう前の状態と、実際に最適化処理を行なった後の典型的な状態を示す図である。図14の中の最適化命令111,113,114とは、最適化処理によって、サイズの異なる複数の命令群から最適な命令を選択する処理の対象になっている命令である。また、図14の中の通常命令112,115,116とは、プログラムが配置されるアドレスによって規定されるレジスタ間の転送命令などのように、最適な命令を選択する余地がない命令である。図14の命令を囲んでいる枠の大きさは、命令のサイズを表すものとする。図14に示す処理においては、最適化処理により、最適化処理前の最適化命令111,113,114のうち、最適化命令111,113としてサイズの大きな命令111B,114B(例えば32bit )が選択されて、最適化命令113としてサイズの小さな命令113Aが選択されている。
【0006】
ここで、図14に示すような最適化処理が行なわれる具体的な例について説明する。図15(a)〜(d)は、図14に示す最適化処理における最適化命令111と最適化命令114とを抜き出して、最適化処理の手順を示す図である。
【0007】
まず、図15(a)は最適化処理を行なう前、つまり、最適化命令の選択が行なわれていない状態を示す図である。図15(a)の状態に対して、最適化処理を行なった結果、図15(b)に示すように、先ず最適化命令114がサイズの大きな命令114Bに選択されたものとする。ところが、最適化命令111は、図13に示す分岐命令のごとく他の最適化命令のサイズの変化に依存してサイズが変化する性質の命令である場合があり、かかる場合には、再度最適化処理を行なって最終決定しなければならない。つまり、最適化命令114のサイズが変化したことにより、最適化命令111の分岐先のアドレス,分岐の距離が変化したため、分岐する命令を再選択する必要が生じたものとする。
【0008】
そこで、図15(c)に示すように、最適化命令111の最適化処理が再度行なわれ、最適化命令111として大きなサイズの命令111Bが選択される。
【0009】
図16は、最適化処理の基本的な処理の流れを示すフローチャートである。同図に示すように、ステップST100における最適化処理によって最適化命令のサイズ等が選択されても、その処理だけで最適化処理が終了するというものではなく、最適化処理によってサイズの変化した命令がなくなるまで、つまり、すべての最適化命令が変化しなくなるまで、繰り返し最適化処理を行なう必要がある。
【0010】
【発明が解決しようとする課題】
ところで、最適化処理は、本来、無駄な繰り返し処理を省けるように最適な命令を選択する処理であって、現在では、最適化処理はプログラム記憶領域を効率的に利用するためには必須の処理となっているといっても過言ではない。
【0011】
しかしながら、上述のように、最適化処理によってある最適化命令が最適化されると、その結果によって他の最適化命令の変化の必要性が生じることから、繰り返し最適化処理を行なう必要がある。その場合、上記従来の最適化処理においては、繰り返し最適化処理を行なうための時間が長く、プログラム開発時の効率が悪いという不具合があった。
【0012】
本発明の目的は、プログラムの最適化時間を短縮し、プログラム開発効率の向上を実現しうるプログラム最適化方法及びその装置を提供することにある。
【0013】
【課題を解決するための手段】
本発明の第1のプログラムの最適化方法は、語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ(a)と、上記ステップ(a)で、最適化命令と判断された命令について最適化処理を行なうステップ(b)と、上記プログラムについて、最適化命令のみを格納した最適化命令テーブルを作成して記憶部に記憶するステップ(c)と、上記記憶部に記憶された最適化命令テーブルにしたがって、上記最適化命令のすべての最適化命令の最適化が終了するまで再最適化処理を行うステップ(d)とを含んでいる。
【0014】
この方法により、再最適化処理においては、プログラム中の命令が最適化命令か非最適化命令かを判断することなく、最適化命令のみについて再最適化処理を行なうことができるので、最適化処理のための時間を短縮することができ、ひいてはプログラムの開発効率の向上を図ることができる。
【0015】
上記ステップ(c)では、上記最適化命令テーブルとして最適化命令へのポインタの集合を作成することにより、最適化命令への即座のアクセスが可能になり、最適化処理の効率化をより向上させることができる。
【0016】
上記最適化命令テーブルに、最適化命令の依存関係情報を含めることにより、最適化処理のための時間をさらに短縮することが可能になる。
【0017】
その場合、上記最適化命令の依存関係情報は、各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した情報であり、上記ステップ(b)では、上記最適化命令の最適化処理を行ったときに、上記依存関係情報を用いて該最適化命令に依存する他の最適化命令を検出し、上記ステップ(c)では、上記最適化命令の依存関係情報を上記最適化テーブル内に格納することが好ましい。
【0018】
また、上記ステップ(d)では、当該最適化命令に依存する他の最適化命令の数が多い最適化命令から順に最適化処理を行なうことがより好ましい。
【0019】
上記ステップ(d)では、当該最適化命令に依存する他の最適化命令の数が同じ最適化命令同士については、上記最適化命令テーブルの上記最適化命令の依存関係中に上記他の最適化命令として格納されている頻度の少ない最適化命令から順に最適化処理を行なうことがより好ましい。
【0020】
本発明の第2のプログラムの最適化方法は、語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、上記各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した最適化命令の依存情報を予め作成しておくステップ(a)と、上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ(b)と、上記ステップ(b)で、最適化命令と判断された命令について、上記最適化命令の依存関係に基づいて最適化処理を行なうステップ(c)とを含んでいる。
【0021】
この方法により、最適化命令の依存情報を用いることで、最適化によって再度最適化が必要となる最適化処理の頻度をできるだけ小さくすることができる。
【0022】
【発明の実施の形態】
(第1の実施形態)
図1は、最適化テーブルを用いてプログラム(例えば、アセンブラ,リンカ等)の最適化処理を行なうようにした本発明の第1の実施形態のフローチャートである。図2は、本実施形態で利用する最適化テーブルの例を示す図である。
【0023】
図1に示すように、まず、ステップST11で、ある命令が最適化命令か否かを判別し、最適化命令の場合にのみステップST12〜ST14の処理を行なう。すなわち、ステップST12で、当該最適化命令の最適化処理を行ない、ステップST13で、最適化命令テーブルを作成する。
【0024】
ここで、最適化命令テーブルとは、図2に示すように、最適化命令へのポインタの集合である。すなわち、図2の右図に示すように最適化命令1,3,4と通常命令2,5,6とが混在している場合には、最適化命令テーブルは、図2の左図に示すように最適化命令1,3,4のみにアクセスするポインタR1,R2,R3の集合によって構成されている。そして、この最適化命令テーブルは、図示されていない記憶装置に記憶される。
【0025】
そして、ステップ14で、最適化処理の対象となっている最適化命令のうち最適化処理が行なわれた最後の命令か否かを判別して、最後の命令でなければステップST15で次の命令の処理を行なうよう指令する。一方、上記ステップST11における判別の結果、当該命令が最適化命令でない場合(一般的には通常命令の場合)には、ステップST12〜ST14の処理を行なうことなく、ステップST15の処理に進む。
【0026】
ステップST14における判別においては、上述の処理を行なってきた結果、最適化処理が行なわれた最後の最適化命令に達していると判定された場合には、ステップST16に移行して、最適化処理でサイズの変化した命令があるか否かを判別する。
【0027】
そして、最適化処理でサイズの変化した命令があると、ステップST17,ST18に移行して、最適化命令テーブルに最適化命令が残っていない状態になるまで、最適化命令テーブルを用いて再度最適化処理を行ない、ステップST16に戻る。その場合、最適化命令テーブルを用いているので、最適化命令のみをアクセスして再最適化処理を行なうことができ、最適化命令か通常命令かを判別するステップは不要である。
【0028】
そして、ステップST16の判別において、最適化処理でサイズの変化した命令がなくなると、つまり、サイズの変化が収束すると最適化処理を終了する。すなわち、通常命令は、最適化処理によってサイズが変化することはないので、繰り返し最適化処理を行なう対象を最適化命令のみに限定することができる。
【0029】
本実施形態における最適化処理によると、第1回目の最適化処理は図1のステップST11〜ST16において最適化命令テーブルを使用することなく、各最適化命令に対して1度だけ最適化処理を行なうが、その際、最適化命令をリストアップして最適化命令テーブルを作成しておく。そして、最適化命令テーブルを作成した後の第2回目以降の最適化処理は、ステップST17,ST18で最適化テーブルを用いて行なわれる。ここで、最適化命令テーブルは、図2の左図に示すように、最適化命令1,3,4と通常命令2,5,6とが混在している場合であっても、最適化命令1,3,4へのポインタの集合により構成されているので、アセンブラ命令の中で最適化命令1,3,4のみを即座にアクセスすることを可能にするものである。
【0030】
したがって、本実施形態によると、この最適化命令テーブルの作成によって、最初の最適化処理を行なった後には、命令毎に最適化命令か通常命令かを判断する必要がなくなり、再最適化処理に要する時間の短縮を図ることができる。よって、プログラム開発の効率の向上を図ることができる。
【0031】
(第2の実施形態)
図3(a),(b)は、本発明の第2の実施形態における最適化命令及び最適化命令依存情報を説明するための図である。
【0032】
本実施形態においては、図3(a)に示す2つの最適化命令11と最適化命令12との間に、最適化命令11のサイズは最適化命令12のサイズに依存して変化するが、最適化命令12のサイズは最適化命令11のサイズには依存しない関係があるものとする。その場合、図3(b)に示すように、最適化命令テーブルには、最適化命令依存情報として、最適化命令11に依存する命令はなく(他の最適化命令に影響を与えず)、最適化命令12に依存する命令として最適化命令11がある(最適化命令12は最適化命令11に影響を与える)ことを格納しておく。もちろん、他の実施形態においては、最適化命令11以外にも最適化命令12に依存する命令が存在することもあり得る。
【0033】
従来の最適化処理は、すでに説明したように、先に実行される命令から順番に最適化するように行なわれる。したがって、図3(a)の最適化命令11の最適化処理を従来の方法によって行なう場合には、図3(a)の最適化命令12の最適化処理は未実施の状態である。しかし、最適化命令11の最適化処理行ない、さらに最適化命令12の最適化処理を行なった結果、最適化命令12のサイズが変更された場合には、最適化命令11のサイズを再び変更する必要が生じる。なぜなら、図3(a)に示す最適化命令11は分岐命令であるので、最適化命令12のサイズが変化すると、最適化命令11の分岐先アドレスも変化するためである。このような依存関係の存在により、最適化処理は、新たな最適化処理により命令サイズの変化が起こらなくなるまで繰り返し行なう必要があった。
【0034】
それに対し、本実施形態では、既に説明した第1の実施形態における図2に示す最適化命令テーブルの中に、図3(b)に示す最適化命令依存情報を付加しておくのである。
【0035】
図4(a)〜(d)は、本実施形態における最適化命令依存情報を用いて行なわれる最適化処理の手順を示す図である。ここでは、最適化命令依存情報は最適化処理の前に作成されているものとする。
【0036】
まず、最適化処理を行なう前の状態が図4(a)に示す状態であったとすると、まず、図4(b)に示すように、依存する命令がない最適化命令11よりも、依存する命令(最適化命令11)が存在する最適化命令12を優先的に最適化する。
【0037】
次に、図4(b)に示す最適化命令依存情報によると、最適化命令11は最適化命令12による影響を受けることがわかっているので、図4(b)に示すごとく最適化命令12のサイズが変化した場合には、図4(c)に示すように、最適化命令11の最適化処理を再度行なう。その結果、最適化命令11及び最適化命令12のいずれも最適化されているので、図4(d)に示すように、この状態で最適化処理を終了する。
【0038】
本実施形態のように最適化命令間の依存関係を利用することにより、一度最適化処理を施した最適化命令について、他の最適化命令の最適化を行なったことに起因する再度の最適化処理をできるだけ少なくすることができる。特に、本実施形態に示す依存関係(図3(b)参照)がある場合には、最適化命令のサイズの変化が表れなくなるまで最適化処理を繰り返すことなく、最適化命令11の最適化処理、最適化命令12の最適化処理、及び最適化命令11の最適化処理という3ステップの最適化処理により、最適化処理を完了させることができる。
【0039】
−第1の具体例−
次に、本実施形態における最適化命令依存情報を用いた最適化処理のデータ処理方法の第1の具体例について説明する。
【0040】
図5は、本具体例における最適化命令の対象となる命令の例を示す図である。同図に示すように、最適化命令11は、Label まで分岐するように指令する相対分岐命令であり、最適化命令12は、アドレスdataで示される絶対アドレスの内容をRegisterに転送するデータ転送命令であるとする。
【0041】
図6は、最適化命令11,12を、具体的な機械語命令であるニモニックで表示した図である。同図に示すように、最適化命令11には、分岐先までの相対距離の相違に応じて、命令サイズ2バイトの最適化命令11Aと、命令サイズ3バイトの最適化命令1Bとの2種類の命令があるものとする。最適化命令11Aは、分岐先が、−128から+127までの8bit で表現できる範囲の相対分岐命令であり、最適化命令11Bは、分岐先が、−32768から+32767までの16bit で表現できる範囲の相対分岐命令であるとする。
【0042】
また、同図に示すように、最適化命令12には、転送元のアドレス(dataのアドレス)の相違に応じて、命令サイズ2バイトの最適化命令12Aと、命令サイズ3バイトの最適化命令12Bとの2種類の命令があるものとする。最適化命令12Aは、データのアドレスが0から255までの8bit で表現できる範囲のデータ転送命令であり、最適化命令11Bは、データのアドレスが0から65535までの16ビットで表現できる範囲のデータ転送命令であるとする。
【0043】
図7は、本具体例の最適化処理における最適化命令テーブルと最適化命令との対応関係を示すブロック図である。
【0044】
1.最適化命令テーブルの1番目の命令により、分岐命令である最適化命令11の最適化が行なわれる。その際、最適化命令11として、図6に示す命令サイズ2バイトの命令11Aが選択されるものとする。最適化命令テーブル中のポインタ11は最適化命令11をアクセスするポインタであり、ポインタ12は最適化命令12をアクセスする ポインタである。
【0045】
2.分岐命令である最適化命令11の最適化処理を終了した後、最適化命令11のサイズは変化していないので、次の最適化処理へと進む。
【0046】
3.最適化命令テーブルの2番目の命令により、最適化命令12(データ転送命令命令)の最適化処理を行なう。ここでは、dataのアドレス先が8bit 内に収まらず、図6に示すサイズ3バイトの命令12Bが選択されるとする。
【0047】
4.上記3.の最適化処理により、最適化命令12(データ転送命令)は、命令サイズ2バイトの状態から命令サイズ3バイトの状態へと変化する。
【0048】
5.上記データ転送命令である最適化命令12がサイズ2バイトからサイズ3バイトの命令に変化することにって影響を受ける最適化命令は、図7の最適化命令依存情報から、最適化命令11(分岐命令)であることがわかる。
【0049】
6.次に、図8に示す最適化命令テーブルでは、最適化命令依存情報IF1を作成し、依存関係にある最適化命令11(分岐命令)の再最適化処理を行なう。
【0050】
7.最適化命令11(分岐命令)の再最適化処理を行なうために、上記4.の処理で明らかになった1バイトの増加情報を再最適化処理に渡す。
【0051】
8.最適化命令11(分岐命令)の再最適化処理において、分岐先アドレスの計算時に、サイズ1バイト増加の差分情報を使って、最適化命令11(分岐命令)の最終命令の選択を行なう。
【0052】
9.最適化命令11(分岐命令)の再最適化処理の結果、最適化命令11(分岐命令)は、図6に示す命令11Aから命令11Bに変更され、最適化命令11のサイズが1バイト増加する。
【0053】
10.図7および図8の最適化命令依存情報IF1から、最適化命令11(分岐命令)のサイズ変化に依存する最適化命令は存在しないことがわかるので、最適化命令11(分岐命令)のサイズ変化に応じた再最適化処理は行なわない。
【0054】
11.最適化命令テーブルには、最適化命令11(分岐命令)及び最適化命令12(データ転送命令)の2つが登録されているので、最適化処理はこれで終了する。
【0055】
以上のように、最適化命令依存情報を用いることで、繰り返し再最適化処理を行なう必要がなくなる。その結果、本実施形態における最適化処理は、以下のように簡略化することが可能となる。
【0056】
−第2の実施形態のフローチャート−
図9は、最適化命令依存情報をも付加した最適化テーブルを用いてプログラムの最適化処理を行なうようにした本発明の第2の実施形態のフローチャートである。
【0057】
図9に示すように、まず、ステップST21で、ある命令が最適化命令か否かを判別し、最適化命令の場合にのみステップST22〜ST24の処理を行なう。すなわち、ステップST22で、当該最適化命令の最適化処理を行ない、ステップST23で、最適化命令テーブルを作成する。
【0058】
本実施形態においても、最適化命令テーブルとは、図2に示すように、最適化命令へのポインタの集合である。
【0059】
そして、ステップ14で、最適化処理の対象となっている最適化命令のうち最適化処理が行なわれた最後の命令か否かを判別して、最後の命令でなければステップST25で次の命令の処理を行なうよう指令する。一方、上記ステップST21における判別の結果、当該命令が最適化命令でない場合(一般的には通常命令の場合)には、ステップST22〜ST24の処理を行なうことなく、ステップST25の処理に進む。
【0060】
ステップST24における判別においては、上述の処理を行なってきた結果、最適化処理が行なわれた最後の最適化命令に達していると判定された場合には、ステップST26に移行して、最適化処理でサイズの変化した命令があるか否かを判別する。
【0061】
そして、最適化処理でサイズの変化した命令があると、ステップST27,ST28に移行して、最適化命令依存情報を付加した最適化命令テーブルに最適化命令が残っていない状態になるまで、最適化命令テーブルを用いた最適化処理を行ない、最適化処理を終了する。
【0062】
本実施形態の最適化処理においては、図ST28の判別で最適化テーブルに最適化命令が残っていない状態になると、第1の実施形態のごとくステップST26に戻る必要はなく、そのまま最適化処理を終了することができる。つまり、最適化命令依存情報を用いているので、最適化処理により、サイズが変化した命令の有無を判定するステップST26で繰り返しの判定をすることなく、即座に最適化処理を終了することができる。
【0063】
本実施形態によると、最適化命令テーブルを用いているので、最適化命令のみをアクセスして最適化処理を行なうことができ、最適化命令か通常命令かを判別するステップは不要である。しかも、最適化命令依存情報を付加した最適化命令テーブルを用いているので、繰り返し再最適化処理を行なう回数を最小限にとどめることができるという利点がある。
【0064】
−第2の実施形態の第2の具体例−
図10(a),(b)は、第2の実施形態の第2の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【0065】
図10(a)に示すように、いずれも最適化命令である分岐命令21,分岐命令22,データ転送命令23を順に処理するプログラムがある場合に、図10(b)に示す最適化命令依存情報が予め得られているとする。その場合、分岐命令21に依存する命令は0であり、分岐命令22に依存する命令は分岐命令21の1つだけであり、データ転送命令23に依存する命令は分岐命令21,22の2つである。依存関係を有する命令の数が多い命令から順に最適化処理を行なうことにより、最適化処理の回数をより少なくすることができるので、この具体例の場合には、データ転送命令23,分岐命令22,分岐命令21の順に最適化処理を行なうことが好ましい。
【0066】
−第2の実施形態の第3の具体例−
図11(a),(b)は、第2の実施形態の第3の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【0067】
図11(a)に示すように、いずれも最適化命令である分岐命令33,分岐命令31,分岐命令32を順に処理するプログラムがある場合に、図11(b)に示す最適化命令依存情報が予め得られているとする。その場合、分岐命令31に依存する命令は分岐命令32の1つだけであり、分岐命令32に依存する命令は分岐命令31の1つだけであり、分岐命令33に依存する命令は分岐命令31の1つだけである。
【0068】
このように、分岐命令31,32,33に依存関係を有する命令の数は同じである。したがって、第2の具体例の方法では、最適化処理を行なう順序は決定できない。そこで、本具体例においては、最適化命令依存情報の依存関係に登場する頻度の小さいものから最適化処理を行なう。そこで、最適化依存情報の依存関係に登場する回数をみると、分岐命令31が2回で、分岐命令32が1回で、分岐命令33が0回である。
【0069】
この場合には、分岐命令33,分岐命令32,分岐命令31の順に最適化処理を行なうことにより、最適化処理の繰り返し回数をできるだけ小さくすることができる。
【0070】
なお、第2の実施形態においては、必ずしも最適化テーブルを作成する必要はない。予め最適化命令依存情報を得ておくことにより、最適化命令依存情報に応じて、第1の実施形態の各具体例のように、最適化処理を行なう順序を定めておけば、通常命令か最適化命令かをその都度判別する手間は必要であるが、従来の最適化処理を行なう方法に比べると、最適化処理を行なう回数の低減を図ることができる。
【0071】
【発明の効果】
以上、本発明によると、プログラムの最適化に際し、最適化命令テーブルあるいは最適化命令の依存情報にしたがって最適化処理を行なうようにしたので、最適化処理のための時間をできるだけ低減することができ、よって、プログラム開発の効率化を図ることができる。
【図面の簡単な説明】
【図1】最適化テーブルを用いてプログラム(例えば、アセンブラ,リンカ等)の最適化処理を行なうようにした本発明の第1の実施形態のフローチャートである。
【図2】第1の実施形態で利用する最適化テーブルの例を示す図である。
【図3】(a),(b)は、本発明の第2の実施形態における最適化命令及び最適化命令依存情報を説明するための図である。
【図4】(a)〜(d)は、第2の実施形態における最適化命令依存情報を用いて行なわれる最適化処理の手順を示す図である。
【図5】第2の実施形態の第1の具体例における最適化命令の対象となる命令の例を示す図である。
【図6】第2の実施形態の第1の具体例における最適化命令を、具体的な機械語命令であるニモニックで表示した図である。
【図7】第2の実施形態の第1の具体例の最適化処理における最適化命令テーブルと最適化命令との対応関係を示すブロック図である。
【図8】第2の実施形態の第1の具体例の最適化処理において作成される最適化命令テーブルの構成を示す図である。
【図9】最適化命令依存情報をも付加した最適化テーブルを用いてプログラムの最適化処理を行なうようにした本発明の第2の実施形態のフローチャートである。
【図10】(a),(b)は、第2の実施形態の第2の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【図11】(a),(b)は、第2の実施形態の第3の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【図12】16bit 及び32bit の一般的な分岐命令の例を示す図である。
【図13】ジャンプに係る分岐命令に対する一般的な処理を説明するための図である。
【図14】最適な命令を選択する処理を行なう前の状態と、実際に最適化処理を行なった後の典型的な状態を示す図である。
【図15】(a)〜(d)は、図14に示す最適化処理における最適化命令を抜き出して、最適化処理の手順を示す図である。
【図16】従来の最適化処理の基本的な処理の流れを示すフローチャートである。
【符号の説明】
1 最適化命令
2 通常命令
3 最適化命令
4 最適化命令
5 通常命令
6 通常命令
11 最適化命令
12 最適化命令
【発明の属する技術分野】
本発明は、サイズ(語長)の最適化処理を行なうためのプログラム最適化方法およびプログラム最適化装置に関する。
【0002】
【従来の技術】
従来より、分岐命令、メモリからレジスタへの転送命令、レジスタからメモリへの転送命令を備えているマイコンにおいて、分岐命令の場合には分岐する距離よって、レジスタ−メモリ間の転送命令においてはメモリのアドレスによって、複数の命令が存在する場合がある。
【0003】
図12は、16bit 及び32bit の分岐命令の例を示す図である。図13は、ジャンプに係る分岐命令に対する処理を説明するための図である。
【0004】
図13に示す分岐命令101(jmp )は、飛び先のアドレスに絶対ジャンプするように支持する命令であるが、分岐先のLABEL のアドレスが16bit 以内に収まる場合と、分岐先のLABEL のアドレスが16bit を超えて32bit の値が必要な場合とがある。つまり、分岐先のアドレスが65535番地以内に収まっている場合とそれを超えている場合とである。分岐先のアドレスが16bit 以内に収まる場合には、分岐命令101として図12に示す分岐命令101Aを選択すれば、同図に示す分岐命令101Bを採用するよりも命令サイズが小さくて済み、プログラムを保持するROMの容量を節約することができる。一方、分岐先のアドレスが16bit 以内に収まっていない場合には、図12に示す分岐命令101Bを選択することになる。図11に示す分岐命令101Aまたは分岐命令101Bのどちらの命令を選択するかは、最終的に分岐命令101(jmp )の飛び先のアドレスが決定しているプログラムの最終状態に応じてより有利なように決定することができる。
【0005】
次に、従来行なっているアセンブラ最適化方法における命令選択処理の方法を説明する。図14は、最適な命令を選択する処理(以後、最適化処理と呼ぶ)を行なう前の状態と、実際に最適化処理を行なった後の典型的な状態を示す図である。図14の中の最適化命令111,113,114とは、最適化処理によって、サイズの異なる複数の命令群から最適な命令を選択する処理の対象になっている命令である。また、図14の中の通常命令112,115,116とは、プログラムが配置されるアドレスによって規定されるレジスタ間の転送命令などのように、最適な命令を選択する余地がない命令である。図14の命令を囲んでいる枠の大きさは、命令のサイズを表すものとする。図14に示す処理においては、最適化処理により、最適化処理前の最適化命令111,113,114のうち、最適化命令111,113としてサイズの大きな命令111B,114B(例えば32bit )が選択されて、最適化命令113としてサイズの小さな命令113Aが選択されている。
【0006】
ここで、図14に示すような最適化処理が行なわれる具体的な例について説明する。図15(a)〜(d)は、図14に示す最適化処理における最適化命令111と最適化命令114とを抜き出して、最適化処理の手順を示す図である。
【0007】
まず、図15(a)は最適化処理を行なう前、つまり、最適化命令の選択が行なわれていない状態を示す図である。図15(a)の状態に対して、最適化処理を行なった結果、図15(b)に示すように、先ず最適化命令114がサイズの大きな命令114Bに選択されたものとする。ところが、最適化命令111は、図13に示す分岐命令のごとく他の最適化命令のサイズの変化に依存してサイズが変化する性質の命令である場合があり、かかる場合には、再度最適化処理を行なって最終決定しなければならない。つまり、最適化命令114のサイズが変化したことにより、最適化命令111の分岐先のアドレス,分岐の距離が変化したため、分岐する命令を再選択する必要が生じたものとする。
【0008】
そこで、図15(c)に示すように、最適化命令111の最適化処理が再度行なわれ、最適化命令111として大きなサイズの命令111Bが選択される。
【0009】
図16は、最適化処理の基本的な処理の流れを示すフローチャートである。同図に示すように、ステップST100における最適化処理によって最適化命令のサイズ等が選択されても、その処理だけで最適化処理が終了するというものではなく、最適化処理によってサイズの変化した命令がなくなるまで、つまり、すべての最適化命令が変化しなくなるまで、繰り返し最適化処理を行なう必要がある。
【0010】
【発明が解決しようとする課題】
ところで、最適化処理は、本来、無駄な繰り返し処理を省けるように最適な命令を選択する処理であって、現在では、最適化処理はプログラム記憶領域を効率的に利用するためには必須の処理となっているといっても過言ではない。
【0011】
しかしながら、上述のように、最適化処理によってある最適化命令が最適化されると、その結果によって他の最適化命令の変化の必要性が生じることから、繰り返し最適化処理を行なう必要がある。その場合、上記従来の最適化処理においては、繰り返し最適化処理を行なうための時間が長く、プログラム開発時の効率が悪いという不具合があった。
【0012】
本発明の目的は、プログラムの最適化時間を短縮し、プログラム開発効率の向上を実現しうるプログラム最適化方法及びその装置を提供することにある。
【0013】
【課題を解決するための手段】
本発明の第1のプログラムの最適化方法は、語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ(a)と、上記ステップ(a)で、最適化命令と判断された命令について最適化処理を行なうステップ(b)と、上記プログラムについて、最適化命令のみを格納した最適化命令テーブルを作成して記憶部に記憶するステップ(c)と、上記記憶部に記憶された最適化命令テーブルにしたがって、上記最適化命令のすべての最適化命令の最適化が終了するまで再最適化処理を行うステップ(d)とを含んでいる。
【0014】
この方法により、再最適化処理においては、プログラム中の命令が最適化命令か非最適化命令かを判断することなく、最適化命令のみについて再最適化処理を行なうことができるので、最適化処理のための時間を短縮することができ、ひいてはプログラムの開発効率の向上を図ることができる。
【0015】
上記ステップ(c)では、上記最適化命令テーブルとして最適化命令へのポインタの集合を作成することにより、最適化命令への即座のアクセスが可能になり、最適化処理の効率化をより向上させることができる。
【0016】
上記最適化命令テーブルに、最適化命令の依存関係情報を含めることにより、最適化処理のための時間をさらに短縮することが可能になる。
【0017】
その場合、上記最適化命令の依存関係情報は、各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した情報であり、上記ステップ(b)では、上記最適化命令の最適化処理を行ったときに、上記依存関係情報を用いて該最適化命令に依存する他の最適化命令を検出し、上記ステップ(c)では、上記最適化命令の依存関係情報を上記最適化テーブル内に格納することが好ましい。
【0018】
また、上記ステップ(d)では、当該最適化命令に依存する他の最適化命令の数が多い最適化命令から順に最適化処理を行なうことがより好ましい。
【0019】
上記ステップ(d)では、当該最適化命令に依存する他の最適化命令の数が同じ最適化命令同士については、上記最適化命令テーブルの上記最適化命令の依存関係中に上記他の最適化命令として格納されている頻度の少ない最適化命令から順に最適化処理を行なうことがより好ましい。
【0020】
本発明の第2のプログラムの最適化方法は、語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、上記各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した最適化命令の依存情報を予め作成しておくステップ(a)と、上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ(b)と、上記ステップ(b)で、最適化命令と判断された命令について、上記最適化命令の依存関係に基づいて最適化処理を行なうステップ(c)とを含んでいる。
【0021】
この方法により、最適化命令の依存情報を用いることで、最適化によって再度最適化が必要となる最適化処理の頻度をできるだけ小さくすることができる。
【0022】
【発明の実施の形態】
(第1の実施形態)
図1は、最適化テーブルを用いてプログラム(例えば、アセンブラ,リンカ等)の最適化処理を行なうようにした本発明の第1の実施形態のフローチャートである。図2は、本実施形態で利用する最適化テーブルの例を示す図である。
【0023】
図1に示すように、まず、ステップST11で、ある命令が最適化命令か否かを判別し、最適化命令の場合にのみステップST12〜ST14の処理を行なう。すなわち、ステップST12で、当該最適化命令の最適化処理を行ない、ステップST13で、最適化命令テーブルを作成する。
【0024】
ここで、最適化命令テーブルとは、図2に示すように、最適化命令へのポインタの集合である。すなわち、図2の右図に示すように最適化命令1,3,4と通常命令2,5,6とが混在している場合には、最適化命令テーブルは、図2の左図に示すように最適化命令1,3,4のみにアクセスするポインタR1,R2,R3の集合によって構成されている。そして、この最適化命令テーブルは、図示されていない記憶装置に記憶される。
【0025】
そして、ステップ14で、最適化処理の対象となっている最適化命令のうち最適化処理が行なわれた最後の命令か否かを判別して、最後の命令でなければステップST15で次の命令の処理を行なうよう指令する。一方、上記ステップST11における判別の結果、当該命令が最適化命令でない場合(一般的には通常命令の場合)には、ステップST12〜ST14の処理を行なうことなく、ステップST15の処理に進む。
【0026】
ステップST14における判別においては、上述の処理を行なってきた結果、最適化処理が行なわれた最後の最適化命令に達していると判定された場合には、ステップST16に移行して、最適化処理でサイズの変化した命令があるか否かを判別する。
【0027】
そして、最適化処理でサイズの変化した命令があると、ステップST17,ST18に移行して、最適化命令テーブルに最適化命令が残っていない状態になるまで、最適化命令テーブルを用いて再度最適化処理を行ない、ステップST16に戻る。その場合、最適化命令テーブルを用いているので、最適化命令のみをアクセスして再最適化処理を行なうことができ、最適化命令か通常命令かを判別するステップは不要である。
【0028】
そして、ステップST16の判別において、最適化処理でサイズの変化した命令がなくなると、つまり、サイズの変化が収束すると最適化処理を終了する。すなわち、通常命令は、最適化処理によってサイズが変化することはないので、繰り返し最適化処理を行なう対象を最適化命令のみに限定することができる。
【0029】
本実施形態における最適化処理によると、第1回目の最適化処理は図1のステップST11〜ST16において最適化命令テーブルを使用することなく、各最適化命令に対して1度だけ最適化処理を行なうが、その際、最適化命令をリストアップして最適化命令テーブルを作成しておく。そして、最適化命令テーブルを作成した後の第2回目以降の最適化処理は、ステップST17,ST18で最適化テーブルを用いて行なわれる。ここで、最適化命令テーブルは、図2の左図に示すように、最適化命令1,3,4と通常命令2,5,6とが混在している場合であっても、最適化命令1,3,4へのポインタの集合により構成されているので、アセンブラ命令の中で最適化命令1,3,4のみを即座にアクセスすることを可能にするものである。
【0030】
したがって、本実施形態によると、この最適化命令テーブルの作成によって、最初の最適化処理を行なった後には、命令毎に最適化命令か通常命令かを判断する必要がなくなり、再最適化処理に要する時間の短縮を図ることができる。よって、プログラム開発の効率の向上を図ることができる。
【0031】
(第2の実施形態)
図3(a),(b)は、本発明の第2の実施形態における最適化命令及び最適化命令依存情報を説明するための図である。
【0032】
本実施形態においては、図3(a)に示す2つの最適化命令11と最適化命令12との間に、最適化命令11のサイズは最適化命令12のサイズに依存して変化するが、最適化命令12のサイズは最適化命令11のサイズには依存しない関係があるものとする。その場合、図3(b)に示すように、最適化命令テーブルには、最適化命令依存情報として、最適化命令11に依存する命令はなく(他の最適化命令に影響を与えず)、最適化命令12に依存する命令として最適化命令11がある(最適化命令12は最適化命令11に影響を与える)ことを格納しておく。もちろん、他の実施形態においては、最適化命令11以外にも最適化命令12に依存する命令が存在することもあり得る。
【0033】
従来の最適化処理は、すでに説明したように、先に実行される命令から順番に最適化するように行なわれる。したがって、図3(a)の最適化命令11の最適化処理を従来の方法によって行なう場合には、図3(a)の最適化命令12の最適化処理は未実施の状態である。しかし、最適化命令11の最適化処理行ない、さらに最適化命令12の最適化処理を行なった結果、最適化命令12のサイズが変更された場合には、最適化命令11のサイズを再び変更する必要が生じる。なぜなら、図3(a)に示す最適化命令11は分岐命令であるので、最適化命令12のサイズが変化すると、最適化命令11の分岐先アドレスも変化するためである。このような依存関係の存在により、最適化処理は、新たな最適化処理により命令サイズの変化が起こらなくなるまで繰り返し行なう必要があった。
【0034】
それに対し、本実施形態では、既に説明した第1の実施形態における図2に示す最適化命令テーブルの中に、図3(b)に示す最適化命令依存情報を付加しておくのである。
【0035】
図4(a)〜(d)は、本実施形態における最適化命令依存情報を用いて行なわれる最適化処理の手順を示す図である。ここでは、最適化命令依存情報は最適化処理の前に作成されているものとする。
【0036】
まず、最適化処理を行なう前の状態が図4(a)に示す状態であったとすると、まず、図4(b)に示すように、依存する命令がない最適化命令11よりも、依存する命令(最適化命令11)が存在する最適化命令12を優先的に最適化する。
【0037】
次に、図4(b)に示す最適化命令依存情報によると、最適化命令11は最適化命令12による影響を受けることがわかっているので、図4(b)に示すごとく最適化命令12のサイズが変化した場合には、図4(c)に示すように、最適化命令11の最適化処理を再度行なう。その結果、最適化命令11及び最適化命令12のいずれも最適化されているので、図4(d)に示すように、この状態で最適化処理を終了する。
【0038】
本実施形態のように最適化命令間の依存関係を利用することにより、一度最適化処理を施した最適化命令について、他の最適化命令の最適化を行なったことに起因する再度の最適化処理をできるだけ少なくすることができる。特に、本実施形態に示す依存関係(図3(b)参照)がある場合には、最適化命令のサイズの変化が表れなくなるまで最適化処理を繰り返すことなく、最適化命令11の最適化処理、最適化命令12の最適化処理、及び最適化命令11の最適化処理という3ステップの最適化処理により、最適化処理を完了させることができる。
【0039】
−第1の具体例−
次に、本実施形態における最適化命令依存情報を用いた最適化処理のデータ処理方法の第1の具体例について説明する。
【0040】
図5は、本具体例における最適化命令の対象となる命令の例を示す図である。同図に示すように、最適化命令11は、Label まで分岐するように指令する相対分岐命令であり、最適化命令12は、アドレスdataで示される絶対アドレスの内容をRegisterに転送するデータ転送命令であるとする。
【0041】
図6は、最適化命令11,12を、具体的な機械語命令であるニモニックで表示した図である。同図に示すように、最適化命令11には、分岐先までの相対距離の相違に応じて、命令サイズ2バイトの最適化命令11Aと、命令サイズ3バイトの最適化命令1Bとの2種類の命令があるものとする。最適化命令11Aは、分岐先が、−128から+127までの8bit で表現できる範囲の相対分岐命令であり、最適化命令11Bは、分岐先が、−32768から+32767までの16bit で表現できる範囲の相対分岐命令であるとする。
【0042】
また、同図に示すように、最適化命令12には、転送元のアドレス(dataのアドレス)の相違に応じて、命令サイズ2バイトの最適化命令12Aと、命令サイズ3バイトの最適化命令12Bとの2種類の命令があるものとする。最適化命令12Aは、データのアドレスが0から255までの8bit で表現できる範囲のデータ転送命令であり、最適化命令11Bは、データのアドレスが0から65535までの16ビットで表現できる範囲のデータ転送命令であるとする。
【0043】
図7は、本具体例の最適化処理における最適化命令テーブルと最適化命令との対応関係を示すブロック図である。
【0044】
1.最適化命令テーブルの1番目の命令により、分岐命令である最適化命令11の最適化が行なわれる。その際、最適化命令11として、図6に示す命令サイズ2バイトの命令11Aが選択されるものとする。最適化命令テーブル中のポインタ11は最適化命令11をアクセスするポインタであり、ポインタ12は最適化命令12をアクセスする ポインタである。
【0045】
2.分岐命令である最適化命令11の最適化処理を終了した後、最適化命令11のサイズは変化していないので、次の最適化処理へと進む。
【0046】
3.最適化命令テーブルの2番目の命令により、最適化命令12(データ転送命令命令)の最適化処理を行なう。ここでは、dataのアドレス先が8bit 内に収まらず、図6に示すサイズ3バイトの命令12Bが選択されるとする。
【0047】
4.上記3.の最適化処理により、最適化命令12(データ転送命令)は、命令サイズ2バイトの状態から命令サイズ3バイトの状態へと変化する。
【0048】
5.上記データ転送命令である最適化命令12がサイズ2バイトからサイズ3バイトの命令に変化することにって影響を受ける最適化命令は、図7の最適化命令依存情報から、最適化命令11(分岐命令)であることがわかる。
【0049】
6.次に、図8に示す最適化命令テーブルでは、最適化命令依存情報IF1を作成し、依存関係にある最適化命令11(分岐命令)の再最適化処理を行なう。
【0050】
7.最適化命令11(分岐命令)の再最適化処理を行なうために、上記4.の処理で明らかになった1バイトの増加情報を再最適化処理に渡す。
【0051】
8.最適化命令11(分岐命令)の再最適化処理において、分岐先アドレスの計算時に、サイズ1バイト増加の差分情報を使って、最適化命令11(分岐命令)の最終命令の選択を行なう。
【0052】
9.最適化命令11(分岐命令)の再最適化処理の結果、最適化命令11(分岐命令)は、図6に示す命令11Aから命令11Bに変更され、最適化命令11のサイズが1バイト増加する。
【0053】
10.図7および図8の最適化命令依存情報IF1から、最適化命令11(分岐命令)のサイズ変化に依存する最適化命令は存在しないことがわかるので、最適化命令11(分岐命令)のサイズ変化に応じた再最適化処理は行なわない。
【0054】
11.最適化命令テーブルには、最適化命令11(分岐命令)及び最適化命令12(データ転送命令)の2つが登録されているので、最適化処理はこれで終了する。
【0055】
以上のように、最適化命令依存情報を用いることで、繰り返し再最適化処理を行なう必要がなくなる。その結果、本実施形態における最適化処理は、以下のように簡略化することが可能となる。
【0056】
−第2の実施形態のフローチャート−
図9は、最適化命令依存情報をも付加した最適化テーブルを用いてプログラムの最適化処理を行なうようにした本発明の第2の実施形態のフローチャートである。
【0057】
図9に示すように、まず、ステップST21で、ある命令が最適化命令か否かを判別し、最適化命令の場合にのみステップST22〜ST24の処理を行なう。すなわち、ステップST22で、当該最適化命令の最適化処理を行ない、ステップST23で、最適化命令テーブルを作成する。
【0058】
本実施形態においても、最適化命令テーブルとは、図2に示すように、最適化命令へのポインタの集合である。
【0059】
そして、ステップ14で、最適化処理の対象となっている最適化命令のうち最適化処理が行なわれた最後の命令か否かを判別して、最後の命令でなければステップST25で次の命令の処理を行なうよう指令する。一方、上記ステップST21における判別の結果、当該命令が最適化命令でない場合(一般的には通常命令の場合)には、ステップST22〜ST24の処理を行なうことなく、ステップST25の処理に進む。
【0060】
ステップST24における判別においては、上述の処理を行なってきた結果、最適化処理が行なわれた最後の最適化命令に達していると判定された場合には、ステップST26に移行して、最適化処理でサイズの変化した命令があるか否かを判別する。
【0061】
そして、最適化処理でサイズの変化した命令があると、ステップST27,ST28に移行して、最適化命令依存情報を付加した最適化命令テーブルに最適化命令が残っていない状態になるまで、最適化命令テーブルを用いた最適化処理を行ない、最適化処理を終了する。
【0062】
本実施形態の最適化処理においては、図ST28の判別で最適化テーブルに最適化命令が残っていない状態になると、第1の実施形態のごとくステップST26に戻る必要はなく、そのまま最適化処理を終了することができる。つまり、最適化命令依存情報を用いているので、最適化処理により、サイズが変化した命令の有無を判定するステップST26で繰り返しの判定をすることなく、即座に最適化処理を終了することができる。
【0063】
本実施形態によると、最適化命令テーブルを用いているので、最適化命令のみをアクセスして最適化処理を行なうことができ、最適化命令か通常命令かを判別するステップは不要である。しかも、最適化命令依存情報を付加した最適化命令テーブルを用いているので、繰り返し再最適化処理を行なう回数を最小限にとどめることができるという利点がある。
【0064】
−第2の実施形態の第2の具体例−
図10(a),(b)は、第2の実施形態の第2の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【0065】
図10(a)に示すように、いずれも最適化命令である分岐命令21,分岐命令22,データ転送命令23を順に処理するプログラムがある場合に、図10(b)に示す最適化命令依存情報が予め得られているとする。その場合、分岐命令21に依存する命令は0であり、分岐命令22に依存する命令は分岐命令21の1つだけであり、データ転送命令23に依存する命令は分岐命令21,22の2つである。依存関係を有する命令の数が多い命令から順に最適化処理を行なうことにより、最適化処理の回数をより少なくすることができるので、この具体例の場合には、データ転送命令23,分岐命令22,分岐命令21の順に最適化処理を行なうことが好ましい。
【0066】
−第2の実施形態の第3の具体例−
図11(a),(b)は、第2の実施形態の第3の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【0067】
図11(a)に示すように、いずれも最適化命令である分岐命令33,分岐命令31,分岐命令32を順に処理するプログラムがある場合に、図11(b)に示す最適化命令依存情報が予め得られているとする。その場合、分岐命令31に依存する命令は分岐命令32の1つだけであり、分岐命令32に依存する命令は分岐命令31の1つだけであり、分岐命令33に依存する命令は分岐命令31の1つだけである。
【0068】
このように、分岐命令31,32,33に依存関係を有する命令の数は同じである。したがって、第2の具体例の方法では、最適化処理を行なう順序は決定できない。そこで、本具体例においては、最適化命令依存情報の依存関係に登場する頻度の小さいものから最適化処理を行なう。そこで、最適化依存情報の依存関係に登場する回数をみると、分岐命令31が2回で、分岐命令32が1回で、分岐命令33が0回である。
【0069】
この場合には、分岐命令33,分岐命令32,分岐命令31の順に最適化処理を行なうことにより、最適化処理の繰り返し回数をできるだけ小さくすることができる。
【0070】
なお、第2の実施形態においては、必ずしも最適化テーブルを作成する必要はない。予め最適化命令依存情報を得ておくことにより、最適化命令依存情報に応じて、第1の実施形態の各具体例のように、最適化処理を行なう順序を定めておけば、通常命令か最適化命令かをその都度判別する手間は必要であるが、従来の最適化処理を行なう方法に比べると、最適化処理を行なう回数の低減を図ることができる。
【0071】
【発明の効果】
以上、本発明によると、プログラムの最適化に際し、最適化命令テーブルあるいは最適化命令の依存情報にしたがって最適化処理を行なうようにしたので、最適化処理のための時間をできるだけ低減することができ、よって、プログラム開発の効率化を図ることができる。
【図面の簡単な説明】
【図1】最適化テーブルを用いてプログラム(例えば、アセンブラ,リンカ等)の最適化処理を行なうようにした本発明の第1の実施形態のフローチャートである。
【図2】第1の実施形態で利用する最適化テーブルの例を示す図である。
【図3】(a),(b)は、本発明の第2の実施形態における最適化命令及び最適化命令依存情報を説明するための図である。
【図4】(a)〜(d)は、第2の実施形態における最適化命令依存情報を用いて行なわれる最適化処理の手順を示す図である。
【図5】第2の実施形態の第1の具体例における最適化命令の対象となる命令の例を示す図である。
【図6】第2の実施形態の第1の具体例における最適化命令を、具体的な機械語命令であるニモニックで表示した図である。
【図7】第2の実施形態の第1の具体例の最適化処理における最適化命令テーブルと最適化命令との対応関係を示すブロック図である。
【図8】第2の実施形態の第1の具体例の最適化処理において作成される最適化命令テーブルの構成を示す図である。
【図9】最適化命令依存情報をも付加した最適化テーブルを用いてプログラムの最適化処理を行なうようにした本発明の第2の実施形態のフローチャートである。
【図10】(a),(b)は、第2の実施形態の第2の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【図11】(a),(b)は、第2の実施形態の第3の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【図12】16bit 及び32bit の一般的な分岐命令の例を示す図である。
【図13】ジャンプに係る分岐命令に対する一般的な処理を説明するための図である。
【図14】最適な命令を選択する処理を行なう前の状態と、実際に最適化処理を行なった後の典型的な状態を示す図である。
【図15】(a)〜(d)は、図14に示す最適化処理における最適化命令を抜き出して、最適化処理の手順を示す図である。
【図16】従来の最適化処理の基本的な処理の流れを示すフローチャートである。
【符号の説明】
1 最適化命令
2 通常命令
3 最適化命令
4 最適化命令
5 通常命令
6 通常命令
11 最適化命令
12 最適化命令
Claims (9)
- 語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、
上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ(a)と、
上記ステップ(a)で、最適化命令と判断された命令について最適化処理を行なうステップ(b)と、
上記プログラムについて、最適化命令のみを格納した最適化命令テーブルを作成して記憶部に記憶するステップ(c)と、
上記記憶部に記憶された最適化命令テーブルにしたがって、上記最適化命令のすべての最適化命令の最適化が終了するまで再最適化処理を行うステップ(d)と
を含むプログラム最適化方法。 - 請求項1記載のプログラム最適化方法において、
上記ステップ(c)では、上記最適化命令テーブルとして最適化命令へのポインタの集合を作成することを特徴とするプログラム最適化方法。 - 請求項1又は2記載のプログラム最適化方法において、
上記最適化命令テーブルに、最適化命令の依存関係情報を含めることを特徴とするプログラム最適化方法。 - 請求項3記載のプログラム最適化方法において、
上記最適化命令の依存関係情報は、各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した情報であり、
上記ステップ(b)では、上記最適化命令の最適化処理を行ったときに、上記依存関係情報を用いて該最適化命令に依存する他の最適化命令を検出し、
上記ステップ(c)では、上記最適化命令の依存関係情報を上記最適化テーブル内に格納することを特徴とするプログラム最適化方法。 - 請求項3又は4記載のプログラムの最適化方法において、
上記ステップ(d)では、当該最適化命令に依存する他の最適化命令の数が多い最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。 - 請求項5記載のプログラムの最適化方法において、
上記ステップ(d)では、当該最適化命令に依存する他の最適化命令の数が同じ最適化命令同士については、上記最適化命令テーブルの上記最適化命令の依存関係中に上記他の最適化命令として格納されている頻度の少ない最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。 - 語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、
上記各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した最適化命令の依存情報を予め作成しておくステップ(a)と、
上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ(b)と、
上記ステップ(b)で、最適化命令と判断された命令について、上記最適化命令の依存関係に基づいて最適化処理を行なうステップ(c)と
を含むプログラムの最適化方法。 - 請求項7記載のプログラムの最適化方法において、
上記ステップ(c)では、当該最適化命令に依存する他の最適化命令の数が多い最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。 - 請求項8記載のプログラムの最適化方法において、
上記ステップ(c)では、当該最適化命令に依存する他の最適化命令の数が同じ最適化命令同士については、上記最適化命令テーブルの上記最適化命令の依存関係中に上記他の最適化命令として格納されている頻度の少ない最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002174216A JP2004021498A (ja) | 2002-06-14 | 2002-06-14 | プログラム最適化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002174216A JP2004021498A (ja) | 2002-06-14 | 2002-06-14 | プログラム最適化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004021498A true JP2004021498A (ja) | 2004-01-22 |
Family
ID=31173244
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002174216A Pending JP2004021498A (ja) | 2002-06-14 | 2002-06-14 | プログラム最適化方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004021498A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2963547A1 (en) | 2014-03-31 | 2016-01-06 | Fujitsu Limited | Compiling device, compiling method, and storage medium storing compiler program |
-
2002
- 2002-06-14 JP JP2002174216A patent/JP2004021498A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2963547A1 (en) | 2014-03-31 | 2016-01-06 | Fujitsu Limited | Compiling device, compiling method, and storage medium storing compiler program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5598544A (en) | Instruction buffer device for processing an instruction set of variable-length instruction codes | |
JP2001515619A (ja) | プロセッサのための命令圧縮、解凍のシステム及び方法 | |
AU2005200812A1 (en) | Vector processing apparatus with overtaking function | |
JP2007272353A (ja) | プロセッサ装置及び複合条件処理方法 | |
KR20040039285A (ko) | 메모리 엔진과, 데이터 조사 및 정정 방법 | |
JP3721780B2 (ja) | 複数のパイプライン処理機構を有するデータ処理装置 | |
US6715065B1 (en) | Micro program control method and apparatus thereof having branch instructions | |
JP5630281B2 (ja) | ベクトル命令制御回路及びリストベクトルの追い越し制御方法 | |
JP2004021498A (ja) | プログラム最適化方法 | |
US6862680B2 (en) | Microprocessor processing specified instructions as operands | |
EP1710706B1 (en) | An overlapping command committing method for a dynamic cycle pipeline | |
JP3413432B2 (ja) | 文字展開処理装置 | |
US7181595B1 (en) | Method for decoding composite VLIW packets utilizing a tree structure | |
US5925122A (en) | Data processing unit which pre-fetches instructions of different lengths to conduct processing | |
US6772271B2 (en) | Reduction of bank switching instructions in main memory of data processing apparatus having main memory and plural memory | |
JP2772100B2 (ja) | 並列命令フェッチ機構 | |
JPH06230977A (ja) | 言語処理装置 | |
JPH02140825A (ja) | プログラムの再配置処理方法 | |
JP2007304926A (ja) | 情報処理方法および命令生成方法 | |
US7200739B2 (en) | Generation of modified command sequence from original command by feeding back for subsequent modification based on decode control signal | |
JP2576589B2 (ja) | 仮想記憶アクセス制御方式 | |
JPH1040165A (ja) | データ読み出し方法およびリードバッファ | |
JP4260895B2 (ja) | マイクロコントローラにおける複数フォーマットアドレス指定 | |
JP2000112754A (ja) | データ処理装置 | |
KR100214084B1 (ko) | 마이크로 프로세서의 다수 명령어의 병렬 처리 방법 및 그 장치 |