JP2009187285A - プログラム変換方法、プログラム変換装置およびプログラム - Google Patents

プログラム変換方法、プログラム変換装置およびプログラム Download PDF

Info

Publication number
JP2009187285A
JP2009187285A JP2008026556A JP2008026556A JP2009187285A JP 2009187285 A JP2009187285 A JP 2009187285A JP 2008026556 A JP2008026556 A JP 2008026556A JP 2008026556 A JP2008026556 A JP 2008026556A JP 2009187285 A JP2009187285 A JP 2009187285A
Authority
JP
Japan
Prior art keywords
function
argument
program
constraint
expression
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
JP2008026556A
Other languages
English (en)
Inventor
Tomoo Hamada
智雄 濱田
Masaru Hattori
大 服部
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 Corp
Original Assignee
Panasonic Corp
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 Panasonic Corp filed Critical Panasonic Corp
Priority to JP2008026556A priority Critical patent/JP2009187285A/ja
Priority to US12/366,237 priority patent/US20090199168A1/en
Publication of JP2009187285A publication Critical patent/JP2009187285A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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

【課題】数の特性や2つ以上の変数間の関連を、プログラマあるいはプロファイラが、最適化の際のヒント情報として与えることで、適用可能な最適化の種類やその効果を拡大する。
【解決手段】コンピュータにより入力プログラムを変換するプログラム変換方法であって、入力プログラムに含まれる変数、定数、演算子、擬似変数および組み込み関数のうちの少なくとも1つで構成され、かつ結果が真偽値となる制約式を取得する取得ステップ(S400)と、取得された前記制約式に基づいて、前記入力プログラムを最適化することにより、前記入力プログラムを変換する変換ステップ(S401〜S404)とを含む。
【選択図】図5

Description

本発明は、プログラムの実行速度向上およびプログラムのサイズ削減を実現するプログラム変換方法に関する。
入力プログラムから目的機械が実行可能なプログラムを生成する言語処理系においては、生成するプログラムの実行速度やプログラムのサイズを削減するために、さまざまな最適化が行われる。
上記最適化の1つに、プログラム中の変数が取る値に着目し、変数が取りうる値とその値の出現頻度を調べ、当該変数が出現頻度が高い値を取った場合の処理を高速化する手法がある(例えば、特許文献1参照。)。
特開2002−222088号公報
しかしながら、従来の技術で、ユーザがヒント情報として与えたり、プロファイラの解析結果から自動生成したりするのは、プログラム中の個々の変数が取りうる値とその出現頻度である。したがって、当該情報を用いた最適化は、関数内あるいは関数間の定数伝播と、それに伴う定数畳み込みとに制限される。
本発明は、変数の特性や2つ以上の変数間の関連を、プログラマあるいはプロファイラが、最適化の際のヒント情報として与えることで、適用可能な最適化の種類やその効果を拡大することを目的とする。
本発明のある局面に係るプログラム変換方法は、コンピュータにより入力プログラムを変換するプログラム変換方法であって、入力プログラムに含まれる変数、定数、演算子、擬似変数および組み込み関数のうちの少なくとも1つを含み、かつ結果が真偽値となる制約式を取得する取得ステップと、取得された前記制約式に基づいて、前記入力プログラムを最適化することにより、前記入力プログラムを変換する変換ステップとを含むことを特徴とする。
上述のような制約式を用いて入力プログラムを最適化する。このため、変数の特性や2つ以上の変数間の関連を制約式として与えることができ、従来に比べ、適用可能な最適化の種類やその効果を拡大することができる。
好ましくは、前記取得ステップでは、1つの関数定義に関連付けられ、かつ仮引数、定数および演算子からなる制約式である仮引数制約式を取得し、前記変換ステップは、前記関連付けられた関数定義で示される関数の複製を作成するステップと、複製された関数の内部の処理を、前記仮引数制約式が真になるとみなして最適化するステップと、前記仮引数制約式に含まれる仮引数を実引数で置き換えた制約式が真となり、かつ前記関連付けられた関数定義で示される関数を呼び出す関数呼び出し文について、当該関数呼び出し文が呼び出す関数を前記複製された関数に置き換えるステップとを含むことを特徴とする。
複製された関数の内部の処理を、仮引数制約式が真になるとみなして最適化するため、仮引数制約式の演算処理が不要になる。このため、関数呼び出し文から呼び出される関数の処理量を削減できる。
さらに好ましくは、前記取得ステップでは、1つの関数呼び出し文に関連付けられ、かつ前記擬似仮引数変数、定数および演算子からなる制約式である実引数制約式を取得し、前記変換ステップは、前記実引数制約式中の前記擬似仮引数変数を、前記関数呼び出し文が呼び出す関数の実引数で置き換えた式が常に真である場合に、前記関数呼び出し文が呼び出す関数の複製を作成するステップと、複製された関数の内部の処理を、前記実引数制約式中の前記擬似仮引数変数を、前記関数呼び出し文が呼び出す前記関数の仮引数で置き換えた式が真になるとみなして最適化するステップと、前記関数呼び出し文が呼び出す関数を前記複製された関数に置き換えるステップとを含むことを特徴とする。
複製された関数の内部の処理を、実引数制約式中の擬似仮引数変数を、関数呼び出し文が呼び出す関数の仮引数で置き換えた式が真になるとみなして最適化する。このため、当該式の演算処理が不要になる。これによって、関数呼び出し文から呼び出される関数の処理量を削減できる。
さらに好ましくは、前記制約式における擬似変数として、前記入力プログラム中の関数宣言における引数を指定するための変数である擬似宣言部引数を用いることを特徴とする。
また、前記取得ステップでは、1つの関数宣言に関連付けられ、かつ前記擬似宣言部引数、定数および演算子からなる制約式である擬似宣言部引数制約式を取得し、前記変換ステップは、前記入力プログラムに前記関数宣言に対応する関数の定義が存在する場合に、前記擬似宣言部引数制約式中の擬似宣言部引数を、対応する関数の仮引数変数に置き換えた仮引数制約式を用いて、当該関数の複製を、当該仮引数制約式が真になるとみなして最適化するステップと、前記入力プログラム中に前記関数宣言に対応する関数呼び出し文が存在する場合に、前記擬似宣言部引数制約式中の擬似宣言部引数を、対応する関数呼び出しの実引数変数に置き換えた実引数制約式が常に真である場合に、当該関数呼び出し文を、複製される関数への呼び出し文に置き換えるステップとを含むことを特徴とする。
さらに好ましくは、前記取得ステップでは、1つの関数内の変数または大域変数、定数、および演算子からなる関数内制約式を取得し、前記変換ステップは、前記関数から、前記関数内制約式に含まれる全ての変数について共通する生存区間に含まれる文の並び、または前記生存区間に含まれる文の並びを含む文を最適化対象文として取得するステップと、前記関数内制約式を条件式とし、当該条件式の結果が真である場合の処理として、前記最適化対象文を前記関数内制約式が真になるとみなして最適化した文を有し、かつ前記条件式の結果が偽である場合の処理として、前記最適化対象文を有する条件分岐文を生成するステップと、前記最適化対象文を生成された前記条件分岐文に置き換えるステップとを含むことを特徴とする。
制約式の結果が真となる場合には、最適化された文を実行することができる。このため、与えられた制約式を満足するときの、当該関数の処理量を削減できる。
さらに好ましくは、前記取得ステップでは、1つの関数内の変数または大域変数、定数、および演算子からなる関数内制約式を取得し、前記変換ステップでは、前記関数から、2つ以上の分岐条件と2つ以上の分岐先と、前記分岐先毎に排他的処理を持つ分岐文または分岐文の並びとを取得するステップと、前記関数内制約式と同じ式が前記2つ以上の分岐条件のいずれかに含まれている場合には、分岐文または分岐文の並びの条件式の評価順序を入れ替えるステップとを含むことを特徴とする。
例えば、制約式により指定された条件式の評価を優先させるように条件式の評価順序を入れ替えると、制約式で与えられた式が成立する際の条件式の評価に要する処理量を削減することができる。
なお、本発明は、このような特徴的なステップを含むプログラム変換方法として実現することができるだけでなく、プログラム変換方法に含まれる特徴的なステップを手段とするプログラム変換装置として実現したり、プログラム変換方法に含まれる特徴的なステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM(Compact Disc−Read Only Memory)等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
先に述べた制約式を用いて、入力プログラムを変換することにより、適用可能な最適化の種類やその効果を拡大することができる。
以下、本発明の実施の形態に係るプログラム変換装置について図面を参照しながら説明する。
図1は、プログラム変換装置の外観図である。プログラム変換装置200は、通常のコンピュータからなり、当該コンピュータ上でプログラムを実行することにより実現される。
図2は、プログラム変換装置の機能的な構成を示すブロック図である。
プログラム変換装置200は、高級言語で記述された入力プログラム110と、制約式集合111とを入力として受け、入力プログラム110を変換し、変換した結果である目的プログラム120を出力する装置である。ここで、制約式集合111には、入力プログラム110内の変数、定数および演算子、並びにプログラム変換装置200が提供する擬似変数および組み込み関数の少なくとも1つで構成され、結果が真偽値となる式(以下、「制約式」と呼ぶ。)の集合が含まれる。
プログラム変換装置200は、中間表現生成部230と、制約式集合解析部231と、中間表現変換部232と、目的プログラム生成部233と、制約式データベース140と、中間表現データベース141とを備える。
中間表現生成部230は、入力プログラム110を、プログラム変換装置200の内部データ表現である中間表現に変換し、記憶装置である中間表現データベース141に格納する処理部である。
制約式集合解析部231は、制約式集合111に含まれる制約式をプログラム変換装置200の内部データ表現である式表現に変換し、記憶装置である制約式データベース140に格納する処理部である。
中間表現変換部232は、中間表現データベース141に含まれている入力プログラム110の内部表現を、制約式データベース140の情報に基づいて、変換し、中間表現データベース141に格納する処理部である。
目的プログラム生成部233は、中間表現データベース141の内容から、目的機械に適した書式の目的プログラム120を生成し、出力する処理部である。
図3は、プログラム変換装置200が実行するプログラム変換処理を示すフローチャートである。
中間表現生成部230は、入力プログラム110を中間表現に変換し、中間表現データベース141に格納する(ステップS130)。中間表現として一般的な形式には、3番地コードや抽象構文木が使用され、本発明においてもそれらを用いる事ができる。
制約式集合解析部231は、制約式集合111をプログラム変換装置200の内部データ表現である式表現に変換し、制約式データベース140に格納する(ステップS131)。式表現として一般的な形式には、式木構造が挙げられる。
中間表現変換部232は、中間表現データベース141の内容を、制約式データベース140の情報に基づいて、変換し、中間表現データベース141に格納する(ステップS132)。変換の目的は、演算の高速化あるいはプログラムサイズの削減である。
目的プログラム生成部233は、中間表現データベース141の内容から、目的機械に適した書式の目的プログラム120を生成し、出力する(ステップS133)。
図4は、制約式の記述方法の一例について説明するための図である。
同図に示される入力プログラム110において、指示子300は、関数sample_1の仮引数からなる仮引数制約式である。指示子300の1行目は、仮引数p0が条件式p0>0の成立を前提とした関数sample_1の処理の最適化を行なうことを指示し、指示子300の2行目は、p0>255の成立を前提とした場合の処理の最適化を行うことを指示する。
指示子301は、呼び出される関数(ここでは、関数sample2)の仮引数に相当する擬似変数を用いた、実引数制約式である。例では“$0”,“$1”,...をそれぞれ、呼ばれる関数の0番目の仮引数,1番目の仮引数,...としている。指示子301の1行目は、関数sample2の0番目の引数を2で割った時の余りが0の場合のsample2内の処理の最適化を行なうことを指示し、指示子300の2行目は、関数sample2の0番目の引数を2で割ったときの余りが1の関数の場合のsample2内の処理の最適化を行うことを指示する。
指示子302は、関数内の変数からなる関数内制約式である。指示子302は、p0==5かつp1==3が成立する場合の次行の処理の最適化を指示する。
上記の例では、制約式を指示子にて与えたが、変数の名前と各変数の生存区間に関する情報が含まれていれば、例えば入力ファイルとは別のファイルでも制約式を定義可能である。
次に、中間表現変換部232が実行する中間表現の最適化処理(ステップS132)について、具体的な変換例を示しながら説明する。
図5は、中間表現変換部232が実行する中間表現の最適化処理(ステップS132)の概要を示すフローチャートである。なお、以下の各処理の詳細については、図6以降の図を用いて説明する。
中間表現変換部232は、制約式データベース140内の全ての制約式を順次取り出し、取り出された制約式をeとする(ステップS400)。
中間表現変換部232は、制約式eに関連付けられた、中間表現データベース141の文、関数または宣言を取り出し、取り出された文または関数または宣言を中間表現sとする(ステップS401)。
中間表現変換部232は、制約式eとそれが関連する中間表現sとを解析し、入力プログラム110の内部表現に適用可能でかつ有効な最適化方法を選択する(ステップS402)。ここで、得られた最適化方法をmとする。
適用可能でかつ有効な最適化方法が得られた場合には(ステップS403でYES)、中間表現変換部232は、制約式eと最適化方法mに基づいて、中間表現sの変換と最適化を実行する。また、中間表現変換部232は、変換及び最適化が施された中間表現sを中間表現データベース141に格納する(ステップS404)。
適用可能でかつ有効な最適化方法が得られなかった場合(ステップS403でNO)または中間表現最適化処理(ステップS404)の後、中間表現変換部232は、制約式データベース140内の全ての制約式を取り出し終えたか否かを判断する(ステップS405)。全ての制約式を取り出し終えていれば(ステップS405でYES)、中間表現変換部232は、処理を終了する。取り出し終えていない制約式がある場合には(ステップS405でNO)、中間表現変換部232は、ステップS400以降の処理を繰り返す。
以下では、制約式の種類ごとに中間表現変換部232が実行する中間表現の最適化処理(ステップS132、図5)について説明する。
図6は、関数の仮引数、定数および演算子からなる仮引数制約式を用いた入力プログラム110の変換処理を示すフローチャートである。
中間表現変換部232は、制約式データベース140内の全ての制約式を順次取り出し、取り出された制約式をeとする(ステップS500)。
制約式eが、仮引数制約式である場合には(ステップS501でYES)、中間表現変換部232は、制約式eに含まれる変数を仮引数として持つ関数pを、中間表現データベース141より取得する(ステップS502)。
中間表現変換部232は、関数pを複製した関数p´を生成する(ステップS503)。
中間表現変換部232は、関数p´を、制約式eが真であるとして最適化する(ステップS504)。
中間表現変換部232は、関数pを呼び出す関数呼び出し文の集合Sを、中間表現データベース141より求める(ステップS505)。
中間表現変換部232は、関数呼び出し文の集合Sの要素を順次取り出し、取り出された関数呼び出し文をsとする(ステップS506)。
中間表現変換部232は、制約式eに含まれる変数、即ち関数pの仮引数を、関数呼び出し文sの対応する実引数で置き換えた、制約式e´を生成する(ステップS507)。
制約式e´が常に真であることが保障される場合には(ステップS508でYES)、中間表現変換部232は、関数呼び出し文sの呼び出す関数をpからp´に置き換えて(ステップS509)、p´と更新した関数呼び出し文sとを中間表現データベース141に登録する(ステップS510)。
制約式e´が常に真であることが保障されない場合(ステップS508でNO)、またはステップS510の処理の後、中間表現変換部232は、集合Sに含まれる全ての関数呼び出し文sを取り出し終えたか否かを判定する(ステップS511)。取り出していない関数呼び出し文sが存在する場合には(ステップS511でNO)、中間表現変換部232は、S506以降の処理を繰り返し実行する。
全ての関数呼び出し文sを取り出し終えた場合(ステップS511でYES)、または取り出した制約式eが仮引数制約式ではない場合(ステップS501でNO)、中間表現変換部232は、制約式データベース140内の全ての制約式を取り出し終えたか否かを判断する(ステップS512)。全ての制約式を取り出し終えていれば(ステップS512でYES)、中間表現変換部232は、処理を終了する。取り出し終えていない制約式がある場合には(ステップS512でNO)、中間表現変換部232は、ステップS500以降の処理を繰り返す。
次に、図7を用いて仮引数制約式を用いたプログラムの変換の実行例について説明する。図7(a)は、入力プログラム110の一例であるプログラム600を示す図である。図7(b)は、プログラム600の変換結果であるプログラム610を示す図である。
中間表現変換部232は、指示子601“b>0”を、制約式eとして、制約式データベース140から取り出したものとする(ステップS500)。
取り出した制約式“b>0”が仮引数制約式であるため(ステップS501でYES)、中間表現変換部232は、制約式“b>0”が付与された関数clipを、中間表現データベース141より取得する(ステップS502)。
中間表現変換部232は、関数clipの複製の関数clip´を作成する(ステップS503)。
中間表現変換部232は、関数clip´を制約式“b>0”が真であるとして最適化する(ステップS504)。この実行例では、“b>0”を評価するif文の条件式が定数“true”に置き換えられるため、条件判定と、else側の処理とを削減でき、関数clip´の処理内容は、文612となる。
中間表現変換部232は、関数clipを呼び出す関数呼び出し文603の集合Sを、中間表現データベース141より求める(ステップS505)。
中間表現変換部232は、集合Sから関数呼び出し文603を取り出す(ステップS506)。
中間表現変換部232は、制約式“b>0”の仮引数bを、関数呼び出し文603の実引数aで置き換えた、制約式“a>0”を得る(ステップS507)。
関数呼び出し文603の直前の条件式“if(a>5)”から分かるように、関数呼び出し文603の実行時には制約式“a>0”は常に真であることが保障される。制約式“a>0”は常に真であることが保障されるため(ステップS508でYES)、中間表現変換部232は、関数呼び出し文603が呼び出す関数を、clip関数から、clip´関数に置き換え、更新した関数呼び出し文613を作成する(ステップS509)。
以上のように、プログラム600をプログラム610に変換することにより、clip関数に含まれる分岐処理を削減することができる。
図8は、関数の実引数、定数および演算子からなる実引数制約式を用いた入力プログラム110の変換処理を示すフローチャートである。
中間表現変換部232は、制約式データベース140内の全ての制約式を順次取り出し、取り出された制約式をeとする(ステップS700)。
制約式eが実引数制約式の場合には(ステップS701でYES)、中間表現変換部232は、中間表現データベース141から、制約式eが付与された関数呼び出し文sを取得する(ステップS702)。
中間表現変換部232は、制約式eの擬似仮引数変数を、関数呼び出し文sに含まれる関数の実引数に置き換えた、制約式e´を生成する(ステップS703)。
中間表現変換部232は、制約式e´が常に真であるか否かを判定する(ステップS704)。常に真であることが保障される場合には(ステップS704でYES)、中間表現変換部232は、中間表現データベース141から、関数呼び出し文sが呼び出す関数pを取得する(ステップS705)。
中間表現変換部232は、制約式eに含まれる擬似仮引数を、関数pの仮引数で置き換えた、制約式e´´を生成する(ステップS706)。
中間表現変換部232は、関数pの複製p´を生成する(ステップS707)。
中間表現変換部232は、関数p´を制約式e´´が真であるという条件を用いて最適化する(ステップS708)。
中間表現変換部232は、中間表現データベース141に、関数p´と同じ処理を行う関数p´´が格納されているか否かを判断する(ステップS709)。関数p´´が中間表現データベース141に格納されている場合には(ステップS709でYES)、中間表現変換部232は、関数呼び出し文sが呼び出す関数をpからp´´に置き換えて、更新した関数呼び出し文sを中間表現データベース141に登録する(ステップS710)。
関数p´´が中間表現データベース141に格納されていない場合には(ステップS709でYES)、中間表現変換部232は、関数p´を中間表現データベース141に登録する(ステップS711)。また、中間表現変換部232は、関数呼び出し文sが呼び出す関数をpからp´に置き換えて、更新した関数呼び出し文sを中間表現データベース141に登録する(ステップS712)。
中間表現変換部232は、制約式データベース140内の全ての制約式を取り出し終えたか否かを判断する(ステップS713)。全ての制約式を取り出し終えていれば(ステップS713でYES)、中間表現変換部232は、処理を終了する。取り出し終えていない制約式がある場合には(ステップS713でNO)、中間表現変換部232は、ステップS700以降の処理を繰り返す。
次に、図9を用いて実引数制約式を用いたプログラムの変換の実行例について説明する。図9(a)は、入力プログラム110の一例であるプログラム800を示す図である。図9(b)は、プログラム800の変換結果であるプログラム810を示す図である。
中間表現変換部232は、制約式eとして指示子801“$0>0”を、制約式データベース140から取り出したものとする(ステップS700)。
取り出した制約式eが実引数制約式であるため(ステップS701でYES)、中間表現変換部232は、制約式eが付与された関数呼び出し文802を取得する(ステップS702)。
中間表現変換部232は、制約式“$0>0”の擬似仮引数$0を、関数呼び出し文802の実引数に置き換えた、式e´として“a>0”を得る(ステップS703)。
関数呼び出し文802の直前の条件式“if(a>5)”から分かるように、関数呼び出し文802の実行時には、式e´が真であることが保障される(ステップS704でYES)。このため、中間表現変換部232は、関数呼び出し文sが呼び出す関数clipを取り出す(ステップS705)。
中間表現変換部232は、制約式“$0>0”の擬似仮引数を、関数clipの仮引数に置き換えた、式e´´として、“b>0”を得る(ステップS706)。
中間表現変換部232は、関数clipの複製関数clip´を生成する(ステップS707)。
中間表現変換部232は、関数clip´を、制約式e´´すなわち“b>0”を用いて最適化する(ステップS708)。この実行例では、“b>0”を評価するif文の条件式が定数“true”に置き換えられるため、条件判定とelse側の処理とを削減でき、関数clip´の処理内容は、文813となる。
ここでは、中間表現データベース141中に、関数clip´と同じ処理を行う関数がないものとする(ステップS709でNO)。このため、中間表現変換部232は、関数clip´を中間表現データベース141に登録する(ステップS711)。
中間表現変換部232は、関数呼び出し文802が呼び出す関数をclip関数からclip´関数に置き換えて、更新した関数呼び出し文812を作成する(ステップS712)。
以上のように、プログラム800をプログラム810に変換することにより、clip関数に含まれる分岐処理を削減することができる。
図10は、関数内の変数、定数および演算子からなる関数内制約式を用いた入力プログラム110の変換処理を示すフローチャートである。
中間表現変換部232は、制約式データベース140内の全ての制約式を順次取り出し、取り出された制約式をeとする(ステップS900)。
中間表現変換部232は、制約式eが関数内制約式であるか否かを判定する(ステップS901)。制約式eが関数内制約式であれば(ステップS901でYES)、中間表現変換部232は、中間表現データベース141から、制約式eが付与された関数pを取り出す(ステップS902)。
中間表現変換部232は、関数pにおける、制約式eの中の全ての変数に共通の生存区間を求め、同区間内に存在する文のリストSを求める(ステップS903)。
中間表現変換部232は、リストSの文を各分岐先に持ち、条件分岐文を制約式eとした、条件分岐文iを生成し、中間表現データベース141に登録する(ステップS904)。
中間表現変換部232は、条件分岐文iの条件式が真となる時に実行される文を、制約式eが真である条件を用いて、最適化し、最適化した結果を中間表現データベース141に格納する(ステップS905)。
次に、図11を用いて関数内制約式を用いたプログラムの変換の実行例について説明する。図11(a)は、入力プログラム110の一例であるプログラム1000を示す図である。図11(b)は、プログラム1000の変換結果であるプログラム1010を示す図である。
中間表現変換部232は、制約式eとして、指示子1001“a+b==10”を、制約式データベース140から取り出したものとする(ステップS900)。
取り出した制約式eが関数内制約式であるため(ステップS901でYES)、中間表現変換部232は、制約式eが付与された関数funcを取り出す(ステップS902)。
中間表現変換部232は、関数funcにおける、制約式eの中の全ての変数に共通の生存区間を求め、同区間内に存在する文のリストSを求める(ステップS903)。この実行例では、制約式e中の全ての変数に共通の生存区間は、文1002の開始から終了までの区間である。このため、文1002のみからなる文のリストがリストSとなる。
中間表現変換部232は、リストS中の文、即ち文1002を、分岐先に持ち、条件分岐文を制約式eとした条件分岐文iを生成する(ステップS904)。実行例では文1011が条件分岐文iと合致する。
中間表現変換部232は、条件分岐文iの条件文、即ち“a+b==10”が真となるものとみなして、条件式が真となる時に実行される文を最適化する(ステップS905)。実行例では、文1002の右辺式“(a+b)*(a+b)”を、制約式“a+b==10”を用いて、“10*10”に変形でき、かつ“10*10”は“100”である事から、“100”に置換される。置換した結果が文1013となる。
以上のようにプログラム1000をプログラム1010に変換する事で、2つの加算と1つの乗算処理を、条件判定処理と分岐処理とに置き換えることができる。
図12は、関数内の変数、定数および演算子からなる関数内制約式を用いた入力プログラム110の変換処理を示すフローチャートである。
中間表現変換部232は、制約式データベース140内の全ての制約式を順次取り出し、取り出された制約式をeとする(ステップS1100)。
中間表現変換部232は、制約式eが関数内制約式であるか否かを判定する(ステップS1101)。制約式eが関数内制約式であれば(ステップS1101でYES)、中間表現変換部232は、制約式eが付与された関数pを取り出す(ステップS1102)。
中間表現変換部232は、関数pから、2つ以上の分岐条件と2つ以上の分岐先と、前記分岐先ごとに排他的処理を持つ分岐文または分岐文の並びsを取得する(ステップS1103)。
分岐文または分岐文の並びsの条件式に、制約式eと同じ式が含まれている場合には(ステップS1104でYES)、中間表現変換部232は、分岐文または分岐文の並びsの条件式の評価順序を、条件式eが先に変換されるよう修正し、中間表現データベース141を更新する(ステップS1105)。
分岐文または分岐文の並びsの条件式に、制約式eと同じ式が含まれていない場合(ステップS1104でNO)、またはS1105の処理の後、中間表現変換部232は、関数pから全ての分岐文または分岐文の並びsを取り出し終えたか否かを判定する(ステップS1106)。取り出し終えていない分岐文または分岐文の並びsが存在する場合には(ステップS1106でNO)、中間表現変換部232は、S1103以降の処理を繰り返し実行する。
全ての分岐文または分岐文の並びsを取り出し終えた場合には(ステップS1106でYES)、中間表現変換部232は、制約式データベース140より全ての制約式eを取り出し終えたか否かを判断する(ステップS1107)。全ての制約式eを取り出し終えていれば(ステップS1107でYES)、中間表現変換部232は、処理を終了する。取り出し終えていない制約式eが存在する場合には(ステップS1107でNO)、中間表現変換部232は、ステップS1100以降の処理を繰り返し実行する。
次に、図13を用いて関数内制約式を用いたプログラムの変換の実行例について説明する。
図13(a)は、入力プログラム110の一例であるプログラム1200を示す図である。図13(b)は、プログラム1200の変換結果であるプログラム1210を示す図である。
中間表現変換部232は、制約式eとして、指示子1201“20<=a&&a<30”を、制約式データベース140から取り出したものとする(ステップS1100)。
取り出した制約式eが関数内制約式であるため(ステップS1101でYES)、中間表現変換部232は、制約式eが付与された関数funcを取り出す(ステップS1102)。
中間表現変換部232は、関数funcにおける、2つ以上の分岐条件と2つ以上の分岐先を持った分岐文の並び(以下、「条件分岐文」という。)1202を取得する(ステップS1103)。
中間表現変換部232は、条件分岐文1202の条件式1203が制約式eと同じであると判定する(ステップS1104でYES)。
このため、中間表現変換部232は、条件式1203を最初に評価するよう、条件分岐文1202を変換する。変換結果は条件分岐文1212となる(ステップS1105)。
以上のようにプログラム1200をプログラム1210に変換することで、制約式eにより指定された条件式の評価を優先させ、プログラムの処理量を削減できる。
以上説明したように、本発明の実施の形態によれば、変数の特徴あるいは変数間の関係を制約式や出現頻度付き制約式として処理系に与えることが可能になり、その結果、多数の最適化が実施可能となる。
なお、上述した制約式における組み込み関数は、引数が定数の場合は真を、定数でない場合に偽を返す定数判定組み込み関数であってもよい。
また、図6および図7を用いて仮引数制約式を用いたプログラムの変換について説明したが、仮引数制約式は、関数の定義ではなく、関数のプロトタイプ宣言(関数宣言)の直前に置かれていてもよい。この場合は、関数宣言に対応する関数の定義について、図6および図7に示したのと同様の方法により最適化を行なう。
つまり、制約式における擬似変数として、入力プログラム中の関数宣言における引数を指定するための変数である擬似宣言部引数を用いる。関数宣言における引数の名前は、関数の仮引数と一致しないので、関数宣言部の引数名と関数定義の仮引数、関数宣言部の引数名と関数呼び出しの実引数とを対応付けるために擬似宣言部引数を用いている。
また、この擬似宣言部引数から仮引数制約式を擬似宣言部引数制約式とする。入力プログラムに関数宣言に対応する関数の定義が存在する場合に、擬似宣言部引数制約式中の擬似宣言部引数を、対応する関数の仮引数変数に置き換えた仮引数制約式を用いて、当該関数の複製を、当該仮引数制約式が真になるとみなして最適化する。また、入力プログラム中に関数宣言に対応する関数呼び出し文が存在する場合に、擬似宣言部引数制約式中の擬似宣言部引数を、対応する関数呼び出しの実引数変数に置き換えた実引数制約式が常に真である場合に、当該関数呼び出し文を、複製される関数への呼び出し文に置き換える。
これにより、関数宣言に関連付けられた制約式を媒介として、関数の複製の生成と、関数呼び出しの置き換えとが、別ファイル上で行われていても、関数を最適化することができる。これにより、分割コンパイルへ対応することが可能となる。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
本発明にかかるプログラム変換装置は、高級言語で記述された入力プログラムから、目的機械に適したプログラムを生成するコンパイラ装置等に適用できる。
プログラム変換装置の外観図である。 プログラム変換装置の機能的な構成を示すブロック図である。 プログラム変換装置が実行するプログラム変換処理を示すフローチャートである。 制約式の記述方法の一例について説明するための図である。 中間表現変換部が実行する中間表現の最適化処理の概要を示すフローチャートである。 関数の仮引数、定数および演算子からなる仮引数制約式を用いた入力プログラムの変換処理を示すフローチャートである。 仮引数制約式を用いたプログラムの変換の実行例について説明するための図である。 関数の実引数、定数および演算子からなる実引数制約式を用いた入力プログラム110の変換処理を示すフローチャートである。 実引数制約式を用いたプログラムの変換の実行例について説明するための図である。 関数内の変数、定数および演算子からなる関数内制約式を用いた入力プログラムの変換処理を示すフローチャートである。 関数内制約式を用いたプログラムの変換の実行例について説明するための図である。 関数内の変数、定数および演算子からなる関数内制約式を用いた入力プログラム110の変換処理を示すフローチャートである。 関数内制約式を用いたプログラムの変換の実行例について説明するための図である。
符号の説明
110 入力プログラム
111 制約式集合
120 目的プログラム
140 制約式データベース
141 中間表現データベース
200 プログラム変換装置
230 中間表現生成部
231 制約式集合解析部
232 中間表現変換部
233 目的プログラム生成部

Claims (13)

  1. コンピュータにより入力プログラムを変換するプログラム変換方法であって、
    入力プログラムに含まれる変数、定数、演算子、擬似変数および組み込み関数のうちの少なくとも1つを含み、かつ結果が真偽値となる制約式を取得する取得ステップと、
    取得された前記制約式に基づいて、前記入力プログラムを最適化することにより、前記入力プログラムを変換する変換ステップとを含む
    ことを特徴とするプログラム変換方法。
  2. 前記変換ステップでは、前記制約式に関連付けられた前記入力プログラムに含まれる関数または文を、前記制約式が真となる場合の条件に基づいて最適化する
    ことを特徴とする請求項1に記載のプログラム変換方法。
  3. 前記制約式における擬似変数として、前記入力プログラム中の関数の仮引数を指定するための変数である擬似仮引数変数を用いる
    ことを特徴とする請求項1または2に記載のプログラム変換方法。
  4. 前記制約式における擬似変数として、前記入力プログラム中の関数宣言における引数を指定するための変数である擬似宣言部引数を用いる
    ことを特徴とする請求項1または2に記載のプログラム変換方法。
  5. 前記制約式における組み込み関数は、引数が定数の場合は真を、定数でない場合に偽を返す定数判定組み込み関数である
    ことを特徴とする請求項1または2に記載のプログラム変換方法。
  6. 前記取得ステップでは、1つの関数定義に関連付けられ、かつ仮引数、定数および演算子からなる制約式である仮引数制約式を取得し、
    前記変換ステップは、
    前記関連付けられた関数定義で示される関数の複製を作成するステップと、
    複製された関数の内部の処理を、前記仮引数制約式が真になるとみなして最適化するステップと、
    前記仮引数制約式に含まれる仮引数を実引数で置き換えた制約式が真となり、かつ前記関連付けられた関数定義で示される関数を呼び出す関数呼び出し文について、当該関数呼び出し文が呼び出す関数を前記複製された関数に置き換えるステップとを含む
    ことを特徴とする請求項1に記載のプログラム変換方法。
  7. 前記取得ステップでは、1つの関数呼び出し文に関連付けられ、かつ前記擬似仮引数変数、定数および演算子からなる制約式である実引数制約式を取得し、
    前記変換ステップは、
    前記実引数制約式中の前記擬似仮引数変数を、前記関数呼び出し文が呼び出す関数の実引数で置き換えた式が常に真である場合に、前記関数呼び出し文が呼び出す関数の複製を作成するステップと、
    複製された関数の内部の処理を、前記実引数制約式中の前記擬似仮引数変数を、前記関数呼び出し文が呼び出す前記関数の仮引数で置き換えた式が真になるとみなして最適化するステップと、
    前記関数呼び出し文が呼び出す関数を前記複製された関数に置き換えるステップとを含む
    ことを特徴とする請求項3に記載のプログラム変換方法。
  8. 前記取得ステップでは、1つの関数宣言に関連付けられ、かつ前記擬似宣言部引数、定数および演算子からなる制約式である擬似宣言部引数制約式を取得し、
    前記変換ステップは、
    前記入力プログラムに前記関数宣言に対応する関数の定義が存在する場合に、前記擬似宣言部引数制約式中の擬似宣言部引数を、対応する関数の仮引数変数に置き換えた仮引数制約式を用いて、当該関数の複製を、当該仮引数制約式が真になるとみなして最適化するステップと、
    前記入力プログラム中に前記関数宣言に対応する関数呼び出し文が存在する場合に、前記擬似宣言部引数制約式中の擬似宣言部引数を、対応する関数呼び出しの実引数変数に置き換えた実引数制約式が常に真である場合に、当該関数呼び出し文を、複製される関数への呼び出し文に置き換えるステップとを含む
    ことを特徴とする請求項4に記載のプログラム変換方法。
  9. 前記取得ステップでは、1つの関数内の変数または大域変数、定数、および演算子からなる関数内制約式を取得し、
    前記変換ステップは、
    前記関数から、前記関数内制約式に含まれる全ての変数について共通する生存区間に含まれる文の並び、または前記生存区間に含まれる文の並びを含む文を最適化対象文として取得するステップと、
    前記関数内制約式を条件式とし、
    当該条件式の結果が真である場合の処理として、前記最適化対象文を前記関数内制約式が真になるとみなして最適化した文を有し、かつ前記条件式の結果が偽である場合の処理として、前記最適化対象文を有する条件分岐文を生成するステップと、
    前記最適化対象文を生成された前記条件分岐文に置き換えるステップとを含む
    ことを特徴とする請求項1に記載のプログラム変換方法。
  10. 前記取得ステップでは、1つの関数内の変数または大域変数、定数、および演算子からなる関数内制約式を取得し、
    前記変換ステップでは、
    前記関数から、2つ以上の分岐条件と2つ以上の分岐先と、前記分岐先毎に排他的処理を持つ分岐文または分岐文の並びとを取得するステップと、
    前記関数内制約式と同じ式が前記2つ以上の分岐条件のいずれかに含まれている場合には、分岐文または分岐文の並びの条件式の評価順序を入れ替えるステップとを含む
    ことを特徴とする請求項1に記載のプログラム変換方法。
  11. 前記変換ステップでは、さらに、変換された前記入力プログラムを目的プログラムに変換する
    ことを特徴とする請求項1〜10のいずれか1項に記載のプログラム変換方法。
  12. 入力プログラムを変換するプログラム変換装置であって、
    入力プログラムに含まれる変数、定数、演算子、擬似変数および組み込み関数のうちの少なくとも1つで構成され、かつ結果が真偽値となる制約式を取得する取得手段と、
    取得された前記制約式に基づいて、前記入力プログラムを最適化することにより、前記入力プログラムを変換する変換手段とを備える
    ことを特徴とするプログラム変換装置。
  13. 入力プログラムを変換するためのプログラムであって、
    入力プログラムに含まれる変数、定数、演算子、擬似変数および組み込み関数のうちの少なくとも1つで構成され、かつ結果が真偽値となる制約式を取得する取得ステップと、
    取得された前記制約式に基づいて、前記入力プログラムを最適化することにより、前記入力プログラムを変換する変換ステップとをコンピュータに実行させる
    ことを特徴とするプログラム。
JP2008026556A 2008-02-06 2008-02-06 プログラム変換方法、プログラム変換装置およびプログラム Withdrawn JP2009187285A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008026556A JP2009187285A (ja) 2008-02-06 2008-02-06 プログラム変換方法、プログラム変換装置およびプログラム
US12/366,237 US20090199168A1 (en) 2008-02-06 2009-02-05 Program conversion method using hint information that indicates association between variables

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008026556A JP2009187285A (ja) 2008-02-06 2008-02-06 プログラム変換方法、プログラム変換装置およびプログラム

Publications (1)

Publication Number Publication Date
JP2009187285A true JP2009187285A (ja) 2009-08-20

Family

ID=40933000

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008026556A Withdrawn JP2009187285A (ja) 2008-02-06 2008-02-06 プログラム変換方法、プログラム変換装置およびプログラム

Country Status (2)

Country Link
US (1) US20090199168A1 (ja)
JP (1) JP2009187285A (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7904887B2 (en) * 2006-02-16 2011-03-08 International Business Machines Corporation Learning and cache management in software defined contexts
US20100199269A1 (en) * 2008-02-05 2010-08-05 Panasonic Corporation Program optimization device and program optimization method
JP5543098B2 (ja) * 2008-11-14 2014-07-09 キヤノン株式会社 撮像装置
US8694978B1 (en) * 2011-03-25 2014-04-08 Google Inc. Function side-effect modeling by prototyping
US9081587B1 (en) * 2012-04-25 2015-07-14 Google Inc. Multiversioned functions
JP6379654B2 (ja) * 2014-05-15 2018-08-29 富士通株式会社 処理実行プログラム、処理実行方法、及び情報処理装置
US10025690B2 (en) 2016-02-23 2018-07-17 International Business Machines Corporation Method of reordering condition checks
US11237943B2 (en) * 2019-03-08 2022-02-01 Fujitsu Limited Generating inputs for computer-program testing
JP7121697B2 (ja) * 2019-07-02 2022-08-18 株式会社デンソー コンテントの提示制御装置、提示制御方法及び提示制御プログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870590A (en) * 1993-07-29 1999-02-09 Kita; Ronald Allen Method and apparatus for generating an extended finite state machine architecture for a software specification
JP2002091762A (ja) * 2000-09-14 2002-03-29 Denso Corp プログラム生成装置
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US7904280B2 (en) * 2003-04-16 2011-03-08 The Mathworks, Inc. Simulation of constrained systems
US7418699B2 (en) * 2004-02-20 2008-08-26 Intel Corporation Method and system for performing link-time code optimization without additional code analysis
US7426725B2 (en) * 2004-02-20 2008-09-16 Hewlett-Packard Development Company, L.P. Cross-module in-lining
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
JP2006260096A (ja) * 2005-03-16 2006-09-28 Matsushita Electric Ind Co Ltd プログラム変換方法およびプログラム変換装置
US7966610B2 (en) * 2005-11-17 2011-06-21 The Mathworks, Inc. Application of optimization techniques to intermediate representations for code generation

Also Published As

Publication number Publication date
US20090199168A1 (en) 2009-08-06

Similar Documents

Publication Publication Date Title
JP2009187285A (ja) プログラム変換方法、プログラム変換装置およびプログラム
JP5827296B2 (ja) ビジネスルールの編集およびコンパイルの、方法、コンピュータプログラム、およびシステム
JPWO2009098739A1 (ja) プログラム最適化装置およびプログラム最適化方法
JP3972323B2 (ja) スキーマ生成装置、データ処理装置及びその方法並びにプログラム
CN107273109A (zh) 对源代码建模的方法和系统以及使用数据模型的方法
JP4978233B2 (ja) シミュレータ開発システム及びシミュレータ開発方法
JP6253521B2 (ja) プログラム可視化装置、プログラム可視化方法、及びプログラム可視化プログラム
JPWO2011115024A1 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
US7624390B2 (en) Optimizing compiling of object oriented source code
JP6651977B2 (ja) 情報処理装置、コンパイル方法、およびコンパイルプログラム
JP2016181228A (ja) ソースコード演算装置およびソースコード演算方法
JP6907703B2 (ja) 解析装置、解析方法、および解析プログラム
JP2008243019A (ja) ソースコード変換装置及びソースコード変換方法
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法
JPH0756745A (ja) 言語処理プログラムのコンパイラ処理方式
JP2006301989A (ja) 計算機言語によるプログラムをブロック図から自動生成する方法と装置とプログラム
US20170344351A1 (en) Information processing apparatus, compiling management method, and recording medium
US20240202522A1 (en) Device and method for generating deep learning model graph and abstract syntax tree for integrated compiler
Solmi Instance modeling assisted by an optional meta level
JP4120879B2 (ja) プログラム生成システム及び方法とそのプログラム
CN112527305A (zh) 一种构建中间表达的方法、编译器和服务器
JP2014099108A (ja) 実行時間算出装置、実行時間算出方法、およびプログラム
Serrano et al. Lightweight soundness for towers of language extensions
JP2009223882A (ja) データ処理装置及びデータ処理方法
JP2012133478A (ja) データベース生成装置およびデータベース生成方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110111

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20120409