(57)【要約】【課題】最適化処理時間の短縮によりプログラム開発の効率の高い最適化方法を提供する。【解決手段】最適化命令と非最適化命令（通常命令）とを含むプログラム中のある命令が最適化命令か否かを判別し、最適化命令の場合にのみ最適化処理を行ない、最適化命令のみに対するポインタの集合からなる最適化命令テーブルを作成する。最適化命令テーブルを用いているので、最初の最適化処理によって再度最適化処理が必要な命令がある場合に、最適化命令のみをアクセスして再度最適化処理を行なうことができる。繰り返し最適化処理を行なう対象を最適化命令のみに限定することにより、最適化処理に要する時間を短縮することができ、プログラム開発などの効率の向上を図ることができる。【選択図】　　　図１
2004021498.tif 000002
【特許請求の範囲】
【請求項１】
語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、
上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ（ａ）と、
上記ステップ（ａ）で、最適化命令と判断された命令について最適化処理を行なうステップ（ｂ）と、
上記プログラムについて、最適化命令のみを格納した最適化命令テーブルを作成して記憶部に記憶するステップ（ｃ）と、
上記記憶部に記憶された最適化命令テーブルにしたがって、上記最適化命令のすべての最適化命令の最適化が終了するまで再最適化処理を行うステップ（ｄ）と
を含むプログラム最適化方法。
【請求項２】
請求項１記載のプログラム最適化方法において、
上記ステップ（ｃ）では、上記最適化命令テーブルとして最適化命令へのポインタの集合を作成することを特徴とするプログラム最適化方法。
【請求項３】
請求項１又は２記載のプログラム最適化方法において、
上記最適化命令テーブルに、最適化命令の依存関係情報を含めることを特徴とするプログラム最適化方法。
【請求項４】
請求項３記載のプログラム最適化方法において、
上記最適化命令の依存関係情報は、各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した情報であり、
上記ステップ（ｂ）では、上記最適化命令の最適化処理を行ったときに、上記依存関係情報を用いて該最適化命令に依存する他の最適化命令を検出し、
上記ステップ（ｃ）では、上記最適化命令の依存関係情報を上記最適化テーブル内に格納することを特徴とするプログラム最適化方法。
【請求項５】
請求項３又は４記載のプログラムの最適化方法において、
上記ステップ（ｄ）では、当該最適化命令に依存する他の最適化命令の数が多い最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。
【請求項６】
請求項５記載のプログラムの最適化方法において、
上記ステップ（ｄ）では、当該最適化命令に依存する他の最適化命令の数が同じ最適化命令同士については、上記最適化命令テーブルの上記最適化命令の依存関係中に上記他の最適化命令として格納されている頻度の少ない最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。
【請求項７】
語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、
上記各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した最適化命令の依存情報を予め作成しておくステップ（ａ）と、
上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ（ｂ）と、
上記ステップ（ｂ）で、最適化命令と判断された命令について、上記最適化命令の依存関係に基づいて最適化処理を行なうステップ（ｃ）と
を含むプログラムの最適化方法。
【請求項８】
請求項７記載のプログラムの最適化方法において、
上記ステップ（ｃ）では、当該最適化命令に依存する他の最適化命令の数が多い最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。
【請求項９】
請求項８記載のプログラムの最適化方法において、
上記ステップ（ｃ）では、当該最適化命令に依存する他の最適化命令の数が同じ最適化命令同士については、上記最適化命令テーブルの上記最適化命令の依存関係中に上記他の最適化命令として格納されている頻度の少ない最適化命令から順に最適化処理を行なうことを特徴とするプログラムの最適化方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、サイズ（語長）の最適化処理を行なうためのプログラム最適化方法およびプログラム最適化装置に関する。
【０００２】
【従来の技術】
従来より、分岐命令、メモリからレジスタへの転送命令、レジスタからメモリへの転送命令を備えているマイコンにおいて、分岐命令の場合には分岐する距離よって、レジスタ−メモリ間の転送命令においてはメモリのアドレスによって、複数の命令が存在する場合がある。
【０００３】
図１２は、１６ｂｉｔ　及び３２ｂｉｔ　の分岐命令の例を示す図である。図１３は、ジャンプに係る分岐命令に対する処理を説明するための図である。
【０００４】
図１３に示す分岐命令１０１（ｊｍｐ　）は、飛び先のアドレスに絶対ジャンプするように支持する命令であるが、分岐先のＬＡＢＥＬ　のアドレスが１６ｂｉｔ　以内に収まる場合と、分岐先のＬＡＢＥＬ　のアドレスが１６ｂｉｔ　を超えて３２ｂｉｔ　の値が必要な場合とがある。つまり、分岐先のアドレスが６５５３５番地以内に収まっている場合とそれを超えている場合とである。分岐先のアドレスが１６ｂｉｔ　以内に収まる場合には、分岐命令１０１として図１２に示す分岐命令１０１Ａを選択すれば、同図に示す分岐命令１０１Ｂを採用するよりも命令サイズが小さくて済み、プログラムを保持するＲＯＭの容量を節約することができる。一方、分岐先のアドレスが１６ｂｉｔ　以内に収まっていない場合には、図１２に示す分岐命令１０１Ｂを選択することになる。図１１に示す分岐命令１０１Ａまたは分岐命令１０１Ｂのどちらの命令を選択するかは、最終的に分岐命令１０１（ｊｍｐ　）の飛び先のアドレスが決定しているプログラムの最終状態に応じてより有利なように決定することができる。
【０００５】
次に、従来行なっているアセンブラ最適化方法における命令選択処理の方法を説明する。図１４は、最適な命令を選択する処理（以後、最適化処理と呼ぶ）を行なう前の状態と、実際に最適化処理を行なった後の典型的な状態を示す図である。図１４の中の最適化命令１１１，１１３，１１４とは、最適化処理によって、サイズの異なる複数の命令群から最適な命令を選択する処理の対象になっている命令である。また、図１４の中の通常命令１１２，１１５，１１６とは、プログラムが配置されるアドレスによって規定されるレジスタ間の転送命令などのように、最適な命令を選択する余地がない命令である。図１４の命令を囲んでいる枠の大きさは、命令のサイズを表すものとする。図１４に示す処理においては、最適化処理により、最適化処理前の最適化命令１１１，１１３，１１４のうち、最適化命令１１１，１１３としてサイズの大きな命令１１１Ｂ，１１４Ｂ（例えば３２ｂｉｔ　）が選択されて、最適化命令１１３としてサイズの小さな命令１１３Ａが選択されている。
【０００６】
ここで、図１４に示すような最適化処理が行なわれる具体的な例について説明する。図１５（ａ）〜（ｄ）は、図１４に示す最適化処理における最適化命令１１１と最適化命令１１４とを抜き出して、最適化処理の手順を示す図である。
【０００７】
まず、図１５（ａ）は最適化処理を行なう前、つまり、最適化命令の選択が行なわれていない状態を示す図である。図１５（ａ）の状態に対して、最適化処理を行なった結果、図１５（ｂ）に示すように、先ず最適化命令１１４がサイズの大きな命令１１４Ｂに選択されたものとする。ところが、最適化命令１１１は、図１３に示す分岐命令のごとく他の最適化命令のサイズの変化に依存してサイズが変化する性質の命令である場合があり、かかる場合には、再度最適化処理を行なって最終決定しなければならない。つまり、最適化命令１１４のサイズが変化したことにより、最適化命令１１１の分岐先のアドレス，分岐の距離が変化したため、分岐する命令を再選択する必要が生じたものとする。
【０００８】
そこで、図１５（ｃ）に示すように、最適化命令１１１の最適化処理が再度行なわれ、最適化命令１１１として大きなサイズの命令１１１Ｂが選択される。
【０００９】
図１６は、最適化処理の基本的な処理の流れを示すフローチャートである。同図に示すように、ステップＳＴ１００における最適化処理によって最適化命令のサイズ等が選択されても、その処理だけで最適化処理が終了するというものではなく、最適化処理によってサイズの変化した命令がなくなるまで、つまり、すべての最適化命令が変化しなくなるまで、繰り返し最適化処理を行なう必要がある。
【００１０】
【発明が解決しようとする課題】
ところで、最適化処理は、本来、無駄な繰り返し処理を省けるように最適な命令を選択する処理であって、現在では、最適化処理はプログラム記憶領域を効率的に利用するためには必須の処理となっているといっても過言ではない。
【００１１】
しかしながら、上述のように、最適化処理によってある最適化命令が最適化されると、その結果によって他の最適化命令の変化の必要性が生じることから、繰り返し最適化処理を行なう必要がある。その場合、上記従来の最適化処理においては、繰り返し最適化処理を行なうための時間が長く、プログラム開発時の効率が悪いという不具合があった。
【００１２】
本発明の目的は、プログラムの最適化時間を短縮し、プログラム開発効率の向上を実現しうるプログラム最適化方法及びその装置を提供することにある。
【００１３】
【課題を解決するための手段】
本発明の第１のプログラムの最適化方法は、語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ（ａ）と、上記ステップ（ａ）で、最適化命令と判断された命令について最適化処理を行なうステップ（ｂ）と、上記プログラムについて、最適化命令のみを格納した最適化命令テーブルを作成して記憶部に記憶するステップ（ｃ）と、上記記憶部に記憶された最適化命令テーブルにしたがって、上記最適化命令のすべての最適化命令の最適化が終了するまで再最適化処理を行うステップ（ｄ）とを含んでいる。
【００１４】
この方法により、再最適化処理においては、プログラム中の命令が最適化命令か非最適化命令かを判断することなく、最適化命令のみについて再最適化処理を行なうことができるので、最適化処理のための時間を短縮することができ、ひいてはプログラムの開発効率の向上を図ることができる。
【００１５】
上記ステップ（ｃ）では、上記最適化命令テーブルとして最適化命令へのポインタの集合を作成することにより、最適化命令への即座のアクセスが可能になり、最適化処理の効率化をより向上させることができる。
【００１６】
上記最適化命令テーブルに、最適化命令の依存関係情報を含めることにより、最適化処理のための時間をさらに短縮することが可能になる。
【００１７】
その場合、上記最適化命令の依存関係情報は、各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した情報であり、上記ステップ（ｂ）では、上記最適化命令の最適化処理を行ったときに、上記依存関係情報を用いて該最適化命令に依存する他の最適化命令を検出し、上記ステップ（ｃ）では、上記最適化命令の依存関係情報を上記最適化テーブル内に格納することが好ましい。
【００１８】
また、上記ステップ（ｄ）では、当該最適化命令に依存する他の最適化命令の数が多い最適化命令から順に最適化処理を行なうことがより好ましい。
【００１９】
上記ステップ（ｄ）では、当該最適化命令に依存する他の最適化命令の数が同じ最適化命令同士については、上記最適化命令テーブルの上記最適化命令の依存関係中に上記他の最適化命令として格納されている頻度の少ない最適化命令から順に最適化処理を行なうことがより好ましい。
【００２０】
本発明の第２のプログラムの最適化方法は、語長について最適化が必要な最適化命令と最適化が不要な非最適化命令とを含む複数の命令からなるプログラムを最適化する方法であって、上記各最適化命令ごとに、当該最適化命令の語長の変化に依存して語長が変化する他の最適化命令を登録した最適化命令の依存情報を予め作成しておくステップ（ａ）と、上記プログラムの各命令が上記最適化命令か非最適化命令かを判断するステップ（ｂ）と、上記ステップ（ｂ）で、最適化命令と判断された命令について、上記最適化命令の依存関係に基づいて最適化処理を行なうステップ（ｃ）とを含んでいる。
【００２１】
この方法により、最適化命令の依存情報を用いることで、最適化によって再度最適化が必要となる最適化処理の頻度をできるだけ小さくすることができる。
【００２２】
【発明の実施の形態】
（第１の実施形態）
図１は、最適化テーブルを用いてプログラム（例えば、アセンブラ，リンカ等）の最適化処理を行なうようにした本発明の第１の実施形態のフローチャートである。図２は、本実施形態で利用する最適化テーブルの例を示す図である。
【００２３】
図１に示すように、まず、ステップＳＴ１１で、ある命令が最適化命令か否かを判別し、最適化命令の場合にのみステップＳＴ１２〜ＳＴ１４の処理を行なう。すなわち、ステップＳＴ１２で、当該最適化命令の最適化処理を行ない、ステップＳＴ１３で、最適化命令テーブルを作成する。
【００２４】
ここで、最適化命令テーブルとは、図２に示すように、最適化命令へのポインタの集合である。すなわち、図２の右図に示すように最適化命令１，３，４と通常命令２，５，６とが混在している場合には、最適化命令テーブルは、図２の左図に示すように最適化命令１，３，４のみにアクセスするポインタＲ１，Ｒ２，Ｒ３の集合によって構成されている。そして、この最適化命令テーブルは、図示されていない記憶装置に記憶される。
【００２５】
そして、ステップ１４で、最適化処理の対象となっている最適化命令のうち最適化処理が行なわれた最後の命令か否かを判別して、最後の命令でなければステップＳＴ１５で次の命令の処理を行なうよう指令する。一方、上記ステップＳＴ１１における判別の結果、当該命令が最適化命令でない場合（一般的には通常命令の場合）には、ステップＳＴ１２〜ＳＴ１４の処理を行なうことなく、ステップＳＴ１５の処理に進む。
【００２６】
ステップＳＴ１４における判別においては、上述の処理を行なってきた結果、最適化処理が行なわれた最後の最適化命令に達していると判定された場合には、ステップＳＴ１６に移行して、最適化処理でサイズの変化した命令があるか否かを判別する。
【００２７】
そして、最適化処理でサイズの変化した命令があると、ステップＳＴ１７，ＳＴ１８に移行して、最適化命令テーブルに最適化命令が残っていない状態になるまで、最適化命令テーブルを用いて再度最適化処理を行ない、ステップＳＴ１６に戻る。その場合、最適化命令テーブルを用いているので、最適化命令のみをアクセスして再最適化処理を行なうことができ、最適化命令か通常命令かを判別するステップは不要である。
【００２８】
そして、ステップＳＴ１６の判別において、最適化処理でサイズの変化した命令がなくなると、つまり、サイズの変化が収束すると最適化処理を終了する。すなわち、通常命令は、最適化処理によってサイズが変化することはないので、繰り返し最適化処理を行なう対象を最適化命令のみに限定することができる。
【００２９】
本実施形態における最適化処理によると、第１回目の最適化処理は図１のステップＳＴ１１〜ＳＴ１６において最適化命令テーブルを使用することなく、各最適化命令に対して１度だけ最適化処理を行なうが、その際、最適化命令をリストアップして最適化命令テーブルを作成しておく。そして、最適化命令テーブルを作成した後の第２回目以降の最適化処理は、ステップＳＴ１７，ＳＴ１８で最適化テーブルを用いて行なわれる。ここで、最適化命令テーブルは、図２の左図に示すように、最適化命令１，３，４と通常命令２，５，６とが混在している場合であっても、最適化命令１，３，４へのポインタの集合により構成されているので、アセンブラ命令の中で最適化命令１，３，４のみを即座にアクセスすることを可能にするものである。
【００３０】
したがって、本実施形態によると、この最適化命令テーブルの作成によって、最初の最適化処理を行なった後には、命令毎に最適化命令か通常命令かを判断する必要がなくなり、再最適化処理に要する時間の短縮を図ることができる。よって、プログラム開発の効率の向上を図ることができる。
【００３１】
（第２の実施形態）
図３（ａ），（ｂ）は、本発明の第２の実施形態における最適化命令及び最適化命令依存情報を説明するための図である。
【００３２】
本実施形態においては、図３（ａ）に示す２つの最適化命令１１と最適化命令１２との間に、最適化命令１１のサイズは最適化命令１２のサイズに依存して変化するが、最適化命令１２のサイズは最適化命令１１のサイズには依存しない関係があるものとする。その場合、図３（ｂ）に示すように、最適化命令テーブルには、最適化命令依存情報として、最適化命令１１に依存する命令はなく（他の最適化命令に影響を与えず）、最適化命令１２に依存する命令として最適化命令１１がある（最適化命令１２は最適化命令１１に影響を与える）ことを格納しておく。もちろん、他の実施形態においては、最適化命令１１以外にも最適化命令１２に依存する命令が存在することもあり得る。
【００３３】
従来の最適化処理は、すでに説明したように、先に実行される命令から順番に最適化するように行なわれる。したがって、図３（ａ）の最適化命令１１の最適化処理を従来の方法によって行なう場合には、図３（ａ）の最適化命令１２の最適化処理は未実施の状態である。しかし、最適化命令１１の最適化処理行ない、さらに最適化命令１２の最適化処理を行なった結果、最適化命令１２のサイズが変更された場合には、最適化命令１１のサイズを再び変更する必要が生じる。なぜなら、図３（ａ）に示す最適化命令１１は分岐命令であるので、最適化命令１２のサイズが変化すると、最適化命令１１の分岐先アドレスも変化するためである。このような依存関係の存在により、最適化処理は、新たな最適化処理により命令サイズの変化が起こらなくなるまで繰り返し行なう必要があった。
【００３４】
それに対し、本実施形態では、既に説明した第１の実施形態における図２に示す最適化命令テーブルの中に、図３（ｂ）に示す最適化命令依存情報を付加しておくのである。
【００３５】
図４（ａ）〜（ｄ）は、本実施形態における最適化命令依存情報を用いて行なわれる最適化処理の手順を示す図である。ここでは、最適化命令依存情報は最適化処理の前に作成されているものとする。
【００３６】
まず、最適化処理を行なう前の状態が図４（ａ）に示す状態であったとすると、まず、図４（ｂ）に示すように、依存する命令がない最適化命令１１よりも、依存する命令（最適化命令１１）が存在する最適化命令１２を優先的に最適化する。
【００３７】
次に、図４（ｂ）に示す最適化命令依存情報によると、最適化命令１１は最適化命令１２による影響を受けることがわかっているので、図４（ｂ）に示すごとく最適化命令１２のサイズが変化した場合には、図４（ｃ）に示すように、最適化命令１１の最適化処理を再度行なう。その結果、最適化命令１１及び最適化命令１２のいずれも最適化されているので、図４（ｄ）に示すように、この状態で最適化処理を終了する。
【００３８】
本実施形態のように最適化命令間の依存関係を利用することにより、一度最適化処理を施した最適化命令について、他の最適化命令の最適化を行なったことに起因する再度の最適化処理をできるだけ少なくすることができる。特に、本実施形態に示す依存関係（図３（ｂ）参照）がある場合には、最適化命令のサイズの変化が表れなくなるまで最適化処理を繰り返すことなく、最適化命令１１の最適化処理、最適化命令１２の最適化処理、及び最適化命令１１の最適化処理という３ステップの最適化処理により、最適化処理を完了させることができる。
【００３９】
−第１の具体例−
次に、本実施形態における最適化命令依存情報を用いた最適化処理のデータ処理方法の第１の具体例について説明する。
【００４０】
図５は、本具体例における最適化命令の対象となる命令の例を示す図である。同図に示すように、最適化命令１１は、Ｌａｂｅｌ　まで分岐するように指令する相対分岐命令であり、最適化命令１２は、アドレスｄａｔａで示される絶対アドレスの内容をＲｅｇｉｓｔｅｒに転送するデータ転送命令であるとする。
【００４１】
図６は、最適化命令１１，１２を、具体的な機械語命令であるニモニックで表示した図である。同図に示すように、最適化命令１１には、分岐先までの相対距離の相違に応じて、命令サイズ２バイトの最適化命令１１Ａと、命令サイズ３バイトの最適化命令１Ｂとの２種類の命令があるものとする。最適化命令１１Ａは、分岐先が、−１２８から＋１２７までの８ｂｉｔ　で表現できる範囲の相対分岐命令であり、最適化命令１１Ｂは、分岐先が、−３２７６８から＋３２７６７までの１６ｂｉｔ　で表現できる範囲の相対分岐命令であるとする。
【００４２】
また、同図に示すように、最適化命令１２には、転送元のアドレス（ｄａｔａのアドレス）の相違に応じて、命令サイズ２バイトの最適化命令１２Ａと、命令サイズ３バイトの最適化命令１２Ｂとの２種類の命令があるものとする。最適化命令１２Ａは、データのアドレスが０から２５５までの８ｂｉｔ　で表現できる範囲のデータ転送命令であり、最適化命令１１Ｂは、データのアドレスが０から６５５３５までの１６ビットで表現できる範囲のデータ転送命令であるとする。
【００４３】
図７は、本具体例の最適化処理における最適化命令テーブルと最適化命令との対応関係を示すブロック図である。
【００４４】
１．最適化命令テーブルの１番目の命令により、分岐命令である最適化命令１１の最適化が行なわれる。その際、最適化命令１１として、図６に示す命令サイズ２バイトの命令１１Ａが選択されるものとする。最適化命令テーブル中のポインタ１１は最適化命令１１をアクセスするポインタであり、ポインタ１２は最適化命令１２をアクセスする　　ポインタである。
【００４５】
２．分岐命令である最適化命令１１の最適化処理を終了した後、最適化命令１１のサイズは変化していないので、次の最適化処理へと進む。
【００４６】
３．最適化命令テーブルの２番目の命令により、最適化命令１２（データ転送命令命令）の最適化処理を行なう。ここでは、ｄａｔａのアドレス先が８ｂｉｔ　内に収まらず、図６に示すサイズ３バイトの命令１２Ｂが選択されるとする。
【００４７】
４．上記３．の最適化処理により、最適化命令１２（データ転送命令）は、命令サイズ２バイトの状態から命令サイズ３バイトの状態へと変化する。
【００４８】
５．上記データ転送命令である最適化命令１２がサイズ２バイトからサイズ３バイトの命令に変化することにって影響を受ける最適化命令は、図７の最適化命令依存情報から、最適化命令１１（分岐命令）であることがわかる。
【００４９】
６．次に、図８に示す最適化命令テーブルでは、最適化命令依存情報ＩＦ１を作成し、依存関係にある最適化命令１１（分岐命令）の再最適化処理を行なう。
【００５０】
７．最適化命令１１（分岐命令）の再最適化処理を行なうために、上記４．の処理で明らかになった１バイトの増加情報を再最適化処理に渡す。
【００５１】
８．最適化命令１１（分岐命令）の再最適化処理において、分岐先アドレスの計算時に、サイズ１バイト増加の差分情報を使って、最適化命令１１（分岐命令）の最終命令の選択を行なう。
【００５２】
９．最適化命令１１（分岐命令）の再最適化処理の結果、最適化命令１１（分岐命令）は、図６に示す命令１１Ａから命令１１Ｂに変更され、最適化命令１１のサイズが１バイト増加する。
【００５３】
１０．図７および図８の最適化命令依存情報ＩＦ１から、最適化命令１１（分岐命令）のサイズ変化に依存する最適化命令は存在しないことがわかるので、最適化命令１１（分岐命令）のサイズ変化に応じた再最適化処理は行なわない。
【００５４】
１１．最適化命令テーブルには、最適化命令１１（分岐命令）及び最適化命令１２（データ転送命令）の２つが登録されているので、最適化処理はこれで終了する。
【００５５】
以上のように、最適化命令依存情報を用いることで、繰り返し再最適化処理を行なう必要がなくなる。その結果、本実施形態における最適化処理は、以下のように簡略化することが可能となる。
【００５６】
−第２の実施形態のフローチャート−
図９は、最適化命令依存情報をも付加した最適化テーブルを用いてプログラムの最適化処理を行なうようにした本発明の第２の実施形態のフローチャートである。
【００５７】
図９に示すように、まず、ステップＳＴ２１で、ある命令が最適化命令か否かを判別し、最適化命令の場合にのみステップＳＴ２２〜ＳＴ２４の処理を行なう。すなわち、ステップＳＴ２２で、当該最適化命令の最適化処理を行ない、ステップＳＴ２３で、最適化命令テーブルを作成する。
【００５８】
本実施形態においても、最適化命令テーブルとは、図２に示すように、最適化命令へのポインタの集合である。
【００５９】
そして、ステップ１４で、最適化処理の対象となっている最適化命令のうち最適化処理が行なわれた最後の命令か否かを判別して、最後の命令でなければステップＳＴ２５で次の命令の処理を行なうよう指令する。一方、上記ステップＳＴ２１における判別の結果、当該命令が最適化命令でない場合（一般的には通常命令の場合）には、ステップＳＴ２２〜ＳＴ２４の処理を行なうことなく、ステップＳＴ２５の処理に進む。
【００６０】
ステップＳＴ２４における判別においては、上述の処理を行なってきた結果、最適化処理が行なわれた最後の最適化命令に達していると判定された場合には、ステップＳＴ２６に移行して、最適化処理でサイズの変化した命令があるか否かを判別する。
【００６１】
そして、最適化処理でサイズの変化した命令があると、ステップＳＴ２７，ＳＴ２８に移行して、最適化命令依存情報を付加した最適化命令テーブルに最適化命令が残っていない状態になるまで、最適化命令テーブルを用いた最適化処理を行ない、最適化処理を終了する。
【００６２】
本実施形態の最適化処理においては、図ＳＴ２８の判別で最適化テーブルに最適化命令が残っていない状態になると、第１の実施形態のごとくステップＳＴ２６に戻る必要はなく、そのまま最適化処理を終了することができる。つまり、最適化命令依存情報を用いているので、最適化処理により、サイズが変化した命令の有無を判定するステップＳＴ２６で繰り返しの判定をすることなく、即座に最適化処理を終了することができる。
【００６３】
本実施形態によると、最適化命令テーブルを用いているので、最適化命令のみをアクセスして最適化処理を行なうことができ、最適化命令か通常命令かを判別するステップは不要である。しかも、最適化命令依存情報を付加した最適化命令テーブルを用いているので、繰り返し再最適化処理を行なう回数を最小限にとどめることができるという利点がある。
【００６４】
−第２の実施形態の第２の具体例−
図１０（ａ），（ｂ）は、第２の実施形態の第２の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【００６５】
図１０（ａ）に示すように、いずれも最適化命令である分岐命令２１，分岐命令２２，データ転送命令２３を順に処理するプログラムがある場合に、図１０（ｂ）に示す最適化命令依存情報が予め得られているとする。その場合、分岐命令２１に依存する命令は０であり、分岐命令２２に依存する命令は分岐命令２１の１つだけであり、データ転送命令２３に依存する命令は分岐命令２１，２２の２つである。依存関係を有する命令の数が多い命令から順に最適化処理を行なうことにより、最適化処理の回数をより少なくすることができるので、この具体例の場合には、データ転送命令２３，分岐命令２２，分岐命令２１の順に最適化処理を行なうことが好ましい。
【００６６】
−第２の実施形態の第３の具体例−
図１１（ａ），（ｂ）は、第２の実施形態の第３の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【００６７】
図１１（ａ）に示すように、いずれも最適化命令である分岐命令３３，分岐命令３１，分岐命令３２を順に処理するプログラムがある場合に、図１１（ｂ）に示す最適化命令依存情報が予め得られているとする。その場合、分岐命令３１に依存する命令は分岐命令３２の１つだけであり、分岐命令３２に依存する命令は分岐命令３１の１つだけであり、分岐命令３３に依存する命令は分岐命令３１の１つだけである。
【００６８】
このように、分岐命令３１，３２，３３に依存関係を有する命令の数は同じである。したがって、第２の具体例の方法では、最適化処理を行なう順序は決定できない。そこで、本具体例においては、最適化命令依存情報の依存関係に登場する頻度の小さいものから最適化処理を行なう。そこで、最適化依存情報の依存関係に登場する回数をみると、分岐命令３１が２回で、分岐命令３２が１回で、分岐命令３３が０回である。
【００６９】
この場合には、分岐命令３３，分岐命令３２，分岐命令３１の順に最適化処理を行なうことにより、最適化処理の繰り返し回数をできるだけ小さくすることができる。
【００７０】
なお、第２の実施形態においては、必ずしも最適化テーブルを作成する必要はない。予め最適化命令依存情報を得ておくことにより、最適化命令依存情報に応じて、第１の実施形態の各具体例のように、最適化処理を行なう順序を定めておけば、通常命令か最適化命令かをその都度判別する手間は必要であるが、従来の最適化処理を行なう方法に比べると、最適化処理を行なう回数の低減を図ることができる。
【００７１】
【発明の効果】
以上、本発明によると、プログラムの最適化に際し、最適化命令テーブルあるいは最適化命令の依存情報にしたがって最適化処理を行なうようにしたので、最適化処理のための時間をできるだけ低減することができ、よって、プログラム開発の効率化を図ることができる。
【図面の簡単な説明】
【図１】最適化テーブルを用いてプログラム（例えば、アセンブラ，リンカ等）の最適化処理を行なうようにした本発明の第１の実施形態のフローチャートである。
【図２】第１の実施形態で利用する最適化テーブルの例を示す図である。
【図３】（ａ），（ｂ）は、本発明の第２の実施形態における最適化命令及び最適化命令依存情報を説明するための図である。
【図４】（ａ）〜（ｄ）は、第２の実施形態における最適化命令依存情報を用いて行なわれる最適化処理の手順を示す図である。
【図５】第２の実施形態の第１の具体例における最適化命令の対象となる命令の例を示す図である。
【図６】第２の実施形態の第１の具体例における最適化命令を、具体的な機械語命令であるニモニックで表示した図である。
【図７】第２の実施形態の第１の具体例の最適化処理における最適化命令テーブルと最適化命令との対応関係を示すブロック図である。
【図８】第２の実施形態の第１の具体例の最適化処理において作成される最適化命令テーブルの構成を示す図である。
【図９】最適化命令依存情報をも付加した最適化テーブルを用いてプログラムの最適化処理を行なうようにした本発明の第２の実施形態のフローチャートである。
【図１０】（ａ），（ｂ）は、第２の実施形態の第２の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【図１１】（ａ），（ｂ）は、第２の実施形態の第３の具体例における最適化命令及び最適化命令依存情報を表にして示す図である。
【図１２】１６ｂｉｔ　及び３２ｂｉｔ　の一般的な分岐命令の例を示す図である。
【図１３】ジャンプに係る分岐命令に対する一般的な処理を説明するための図である。
【図１４】最適な命令を選択する処理を行なう前の状態と、実際に最適化処理を行なった後の典型的な状態を示す図である。
【図１５】（ａ）〜（ｄ）は、図１４に示す最適化処理における最適化命令を抜き出して、最適化処理の手順を示す図である。
【図１６】従来の最適化処理の基本的な処理の流れを示すフローチャートである。
【符号の説明】
１　最適化命令
２　通常命令
３　最適化命令
４　最適化命令
５　通常命令
６　通常命令
１１　最適化命令
１２　最適化命令
【図１】
2004021498.tif 000003
【図２】
2004021498.tif 000004
【図３】
2004021498.tif 000005
【図４】
2004021498.tif 000006
【図５】
2004021498.tif 000007
【図６】
2004021498.tif 000008
【図７】
2004021498.tif 000009
【図８】
2004021498.tif 000010
【図９】
2004021498.tif 000011
【図１０】
2004021498.tif 000012
【図１１】
2004021498.tif 000013
【図１２】
2004021498.tif 000014
【図１３】
2004021498.tif 000015
【図１４】
2004021498.tif 000016
【図１５】
2004021498.tif 000017
【図１６】
2004021498.tif 000018