JP2011180814A - コンパイラ装置、コンパイル方法及びプログラム - Google Patents

コンパイラ装置、コンパイル方法及びプログラム Download PDF

Info

Publication number
JP2011180814A
JP2011180814A JP2010044011A JP2010044011A JP2011180814A JP 2011180814 A JP2011180814 A JP 2011180814A JP 2010044011 A JP2010044011 A JP 2010044011A JP 2010044011 A JP2010044011 A JP 2010044011A JP 2011180814 A JP2011180814 A JP 2011180814A
Authority
JP
Japan
Prior art keywords
variable
effective range
global
variables
function
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
Application number
JP2010044011A
Other languages
English (en)
Inventor
Jun Takanashi
潤 高梨
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics 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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2010044011A priority Critical patent/JP2011180814A/ja
Publication of JP2011180814A publication Critical patent/JP2011180814A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】グローバル変数領域(RAM使用量)を削減することができるコンパイラ装置、コンパイラ方法及びプログラムを提供する。
【解決手段】コンパイラ8は、グローバル変数の使用範囲を調査して有効範囲を変更する有効範囲変更部84と、有効範囲変更部によって有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を格納する格納部87と、を有する。有効範囲変更部84は、有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てする。
【選択図】図1

Description

本発明は、半導体集積回路用コンパイラ装置、コンパイル方法及びプログラムに関し、特にコンパイラ装置におけるコード生成方法に関する。
近年、製品規模の増大により使用されている組み込み用の半導体集積回路の機能も複雑化してきており、半導体集積回路を動作させるためのプログラム開発用のコンパイラ装置においても大規模化したプログラムをコード効率が良くかつ使用するメモリを少なくすることが望まれている。その流れの中で、プログラムの大規模化により多人数の開発を行なう関係上、グローバル変数等の変数領域増加に伴い、RAM領域の使用効率を向上させ、使用するRAM容量の増大を避ける技術が求められている。
例えば、特許文献1に記載のプログラム変換方法にかかる技術は、関数呼び出しをまたがって存在するグローバル変数の使用における冗長なメモリ参照を削除することを目的としている。
図15は、一般的なコンパイラが稼動する計算機システムの構成図である。図15に示すように、計算機システムはCPU101、主記憶装置104、外部記憶装置105、ディスプレイ装置102、キーボード103より構成されている。外部記憶装置105にはソースプログラム106、オブジェクトプログラム107が格納される。主記憶装置104には、コンパイラ108と、コンパイル処理過程で必要となる中間コード109、変数参照表110および引数変換表111が保持される。コンパイル処理はCPU101がコンパイラプログラム108を実行することにより行われる。キーボード103はユーザからのコマンドをコンパイラ108に与えるのに用いる。ディスプレイ装置102はコンパイルの終了またはエラーをユーザに知らせる。
図16は、コンパイル処理の流れを示したフローチャートである。コンパイラの処理は、まずステップ201で、構文解析を行う。構文解析はソースプログラム106を読み出し、コンパイラ内部で処理可能な中間コード109を作成する。構文解析処理については、たとえばエイホ、セシィ、ウルマン著:コンパイラII(サイエンス社、1990年)(以下、非特許文献という。)の30頁〜74頁に記載されている。次にステップ202で、変数参照解析を行う。
変数参照解析についても非特許文献の741頁〜772頁に記載がある。変数参照解析により、プログラムに含まれる各文において参照される変数の集合および参照の種類(定義、使用)が求められ、これが変数参照表110に記録される。次にステップ203で、未処理の関数があるか調べる。なければステップ206へ進み、オブジェクトコードを生成して終了する。オブジェクトコード生成については、同じく非特許文献の624頁〜707頁に記載がある。未処理の関数があればステップ204で関数を1つ取り出す(nとする)。そしてステップ205で、n中のグローバル変数に対してグローバル変数のローカル変数変換処理を行う。この処理の後はステップ203から繰り返す。
図17は、従来技術のグローバル変数のローカル変数変換の例を示す図である。図16のステップ205でグローバル変数のローカル変数変換処理が行われる。図17(a)のようなプログラムの場合で、trim(文613)に対して引数変換を適用する。
まず、trim(文613)をクローニングした関数trim2(図17(b)の文713)を作成する。図17(a)の引数変換表を見て、trimに対して登録されているグローバル変数のうち未処理のものがあるかを調べ、Gを選択する。Gと同じ型の引数gをtrim2に追加する(図17(b)の文713参照)。図17(b)のtrim2内の文616、617におけるGの使用をローカル変数gに置き換える。図17(b)の変換結果は、trim2に置き換えを行った結果である。
次に図17(a)の引数変換表をもとに引数変換を行った関数に対応するコールサイトを引数変換後の関数呼び出しに置き換える(図17(b)の文716、717)。図17(a)の文608におけるtrimの呼び出しは、trim2への呼び出しに置き換えられ、引数として新しくGが追加される(図17(b)の文708)。図17(b)のmainは、変換した結果である。
最後にグローバル変数のローカル変数変換を行う。変換結果は図17(b)の変換結果のようになる。trim内のグローバル変数Gの使用がmain内に移動した後、グローバル変数のローカル変数変換によってループの外に出されている。これにより、trimの呼び出し毎に生じていたGの使用における冗長なメモリ参照が削除され、ループ入口で一度だけ生じることになる。これによって、プログラムの実行時のメモリ参照量を減少させ、プログラム実行の高速化に効果がある。
特開2002−099425(図1、図2、図6、図7)
しかしながら、上記特許文献1に記載の技術は、グローバル変数を宣言した分のRAM領域サイズが不変であるため、RAM領域が足りなくなるという問題点がある。その理由は以下の通りである。プログラム内で宣言されたグローバル変数に対して引数変換表を用いて、プログラム内で使用しているグローバル変数をローカル変数に置き換えても支障が無い場合に、関数の引数にローカル変数を追加してグローバル変数でのやり取りではなく、ローカル変数でのやり取りに置き換える。この際、グローバル変数を宣言した分だけRAMの領域が確保されるため、RAM容量に制限がある組み込みシステムでは、プログラム量が膨大になると、決められたRAM容量に収まらず、リンクエラーとなるためである。
本発明に係るコンパイラ装置は、グローバル変数の使用範囲を調査して有効範囲を変更する有効範囲変更部と、有効範囲変更部によって有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を格納する格納部と、を有し、前記有効範囲変更部は、有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てするものである。
本発明に係るコンパイル方法は、グローバル変数の使用範囲を調査して有効範囲を変更し、有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を生成し、有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てるものである。
また、本発明に係るプログラムは、上述したコンパイル処理をコンピュータに実行させるものである。
本発明においては、有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てすることにより、同一の領域にグローバル変数を重ねて配置することが可能となり、RAMのグローバル変数領域を削減することができる。
本発明によれば、グローバル変数領域(RAM使用量)を削減することができるコンパイラ装置、コンパイル方法及びプログラムを提供することができる。
本発明の実施の形態にかかるコンパイラ装置のブロック図である。 本発明の実施の形態にかかるコンパイル処理の流れを示したフローチャートである。 本発明の実施の形態にかかるコンパイラの動作を説明するためのソースプログラム例を示す図である。 本発明の実施の形態にかかるコンパイル実行時に出力される関数の呼び出し関連図である。 本発明の実施の形態にかかるコンパイル実行の変数配置時に作成されるグローバル変数一覧表を示す図である。 本発明の実施の形態におけるvolatile修飾変数付きグローバル変数一覧表を示す図である。 本発明の実施の形態における初期値を持つ変数付きグローバル変数一覧表を示す図である。 本発明の実施の形態における関数毎のリード/ライト調査結果付きグローバル変数一覧表を示す図である。 本発明の実施の形態における変数の使用範囲調査結果付きグローバル変数一覧表を示す図である。 本発明の実施の形態における変数の使用範囲の入口調査結果付きグローバル変数一覧表を示す図である。 本発明の実施の形態におけるライトより先にリードが行われる変数であるかの調査結果付きグローバル変数一覧表である。 本発明の実施の形態における有効範囲変更可能と判断されたグローバル変数一覧表を示す図である。 図12で有効範囲変更可能と判断された変数の変更後の有効範囲を示す関数の呼び出し関連図である。 本発明の実施の形態における有効範囲変更変数一覧表を示す図である。 一般的なコンパイラが稼動する計算機システムの構成図である。 従来のコンパイル処理の流れを示したフローチャートである。 従来技術によるグローバル変数をローカル変数に変換する例を示した図である。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。この実施の形態は、本発明を、半導体集積回路用コンパイラ装置に適用したものである。
本実施の形態においては、コンパイラ装置は、グローバル変数の使用範囲を調査して有効範囲を変更する有効範囲変更部と有効範囲変更部によって有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を格納する格納部とを有する。有効範囲変更部は、有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てする。
この有効範囲変更部は、特定の修飾子を指定した変数と初期値を有する変数をグローバル変数一覧より除外する処理を行い、次に、グロ-バル変数のリード/ライト箇所を調査して変数の有効範囲を特定して有効範囲を特定不可能な変数及び有効範囲入口でリードを行う変数をグローバル変数一覧より除外する処理を行う。更に、変数の有効範囲を変更して有効範囲が重ならない変数を同一領域に配置することにより、グローバル変数の有効範囲を狭めてグローバル変数の有効範囲外実行時には領域を確保しないようにできる。これにより、グローバル変数領域(RAM使用量)を削減することができる。
図1は、本発明の実施の形態にかかるコンパイラ装置のブロック図である。コンパイラ装置4は、コンパイラ8とリンカ9とで構成される。
外部記憶装置5は、1つ以上のソースファイルで構成されるソースプログラム6とコンパイルした結果のオブジェクトプログラム7とライブラリ91と実行ファイル10とで構成される。
コンパイラ8は、1つ以上のソースファイルで構成されるソースプログラム6を外部記憶装置5から入力し、コンパイルを実行する。
コンパイラ8は、入力されたソースプログラム6の構文解析を構文解析部81にて行う。
構文解析部81は、入力されたソースプログラム6に記述されたプログラム言語を解析し、以降のコンパイル処理に適した形式の中間コードに変換する。
コールツリー作成部82は、構文解析部81が出力した中間コードを入力として、ソースプログラム6に記述された関数の呼び出し関係を調査し、結果を中間コードに追加して出力する。
変数配置部83は、コールツリー作成部82が出力した中間コードを入力として、ソースプログラム6に記述された変数の定義・使用状況を調査し、結果を中間コードに追加して出力する。
有効範囲変更部84は、変数配置部83が出力した中間コードを入力として、有効範囲変更処理を行い、有効範囲変更変数一覧表87を作成し、中間コードに追加して出力する。
最適化部85は、有効範囲変更部84が出力した中間コードを入力として、冗長な中間コードを削除するなど最適化を行なった中間コードを出力する。
コード生成部86は、最適化部85が出力した中間コードと、中間コードに含まれる有効範囲変更変数一覧表87を入力として、組み込み用の半導体集積回路に適した機械語に変換し、オブジェクトプログラム7を出力する。
リンカ9は、1つ以上のオブジェクトファイルで構成されるオブジェクトプログラム7とライブラリ91を外部記憶装置5から入力し、リンクを実行し、実行ファイル10を出力する。
図2は、本発明のコンパイル処理の流れを示したフローチャートである。図3は、本発明のコンパイラ実行時の動作を説明するためのソースプログラム例であり、各行の":"までが行番号を示し、以降がプログラム部分で構成される。
図4は、本発明のコンパイラ実行時に出力される関数の呼び出し関連図である。図4は、図3のソースプログラムの各関数の呼び出し関係を、5行目のmain()関数部分よりツリー形式にて構成したものである。図3の各関数は、main()関数以外に、10行目のfunc1()関数、14行目のfunc2()関数、17行目のfunc3()関数、22行目のf1()関数、27行目のf2()関数、32行目のf3()関数、35行目のf4()関数、40行目のf5()関数で構成されている。main()関数は、func1()関数、f1()関数、f2()関数を呼び出し、func1()関数はfunc2関数を呼び出し、func2()関数はfunc3()関数を呼び出している。
またf1()関数は、f2()関数を呼び出し、f2()関数はmain()関数から呼び出され、かつf1()関数からも呼び出される。f2()関数は、f3()関数とf4()関数を呼び出し、f4()関数はf5()関数を呼び出している構成になっている。
図5は、本発明のコンパイラ実行時に出力されるグローバル変数一覧表を示す。図5の各行は、グローバルシンボル名、volatile修飾子、初期値指定、リード関数、ライト関数、使用範囲、使用範囲の入口の処理、有効範囲変更可否で構成される。
図6乃至図12は、図5のグローバル変数一覧表に各処理を実行した結果が書き込まれた図であり、構成に関しては図5と同一である。図6は、本発明の実施の形態におけるvolatile修飾変数付きグローバル変数一覧表、図7は、初期値を持つ変数付きグローバル変数一覧表を示す図である。図8は、関数毎のリード/ライト調査結果付きグローバル変数一覧表、図9は、変数の使用範囲調査結果付きグローバル変数一覧表を示す図である。図10は、変数の使用範囲の入口調査結果付きグローバル変数一覧表、図11は、ライトより先にリードが行われる変数であるかの調査結果付きグローバル変数一覧表、図12は、有効範囲変更可能と判断されたグローバル変数一覧表を示す図である。
図13は、図12で有効範囲変更可能と判断された変数の変更後の有効範囲を示す関数の呼び出し関連図である。基本的な関数の構成が図4と同じあり、変数globalの有効範囲400となる関数は、func1()関数からfunc2()関数が呼び出され、func2()関数からfunc3()関数が呼び出される構成になっており、変数var4の有効範囲401となる関数は、f2()関数からf3()関数、f4()関数が呼び出され、f4()関数からf5()関数が呼び出される構成になっている。
図14は、本発明の有効範囲変更変数一覧表を示す。図14の各行は、グローバルシンボル名、有効範囲、有効範囲が重ならない有効範囲変更変数、有効範囲変更変数領域に領域確保、同一アドレスに定義される変数で構成される。
図3乃至図14を参照して、図1の本実施の形態にかかるコンパイラ装置の動作及び図2に示す本実施の形態にかかるコンパイル処理の流れを示したフローチャートについて説明する。
図2に示すように、構文解析部81は、図3のソースプログラムに対して構文解析を行い、従来技術と同様に中間コードを出力する(ステップS1)。
コールツリー作成部82は、構文解析部81の出力した中間コードより図3のソースプログラムの関数の呼び出し関係を調査し、図4のコールツリーを作成し、中間コードに追加して出力する(ステップS2)。
変数配置部83は、コールツリー作成部82の出力した中間コードから、図3のソースプログラムの変数の定義状況を調査し、図5に示すグローバル変数一覧表を作成する(ステップS3)。ここで作成されるグローバル変数一覧表は、ステップS3においてグローバル変数一覧表内のグローバルシンボル名の欄にグローバルシンボル情報が記載される。図3のソースプログラムでは、変数global(1行目)、変数var1(2行目)、変数var2(3行目)、変数var3(4行目)、変数var4(4行目)、変数var5(4行目)が該当する変数となる。
次に、有効範囲変更部84は、図2のフローチャートのステップS5の処理を行なう。図5のグローバル変数一覧よりvolatile修飾された変数が存在するかを判断し(図6)、存在する場合はその変数を除外して図7のグローバル変数一覧を作成する(ステップS101)。図3のソースプログラムでは、2行目の変数var1がvolatile修飾されているため、除外して図7のグローバル変数一覧を作成する。
次に、図7のグローバル変数一覧より、初期値を持つ変数が存在するかを判断し、存在する場合はその変数を除外して図8のグローバル変数一覧を作成する(ステップS102)。図3のソースプログラムでは、3行目の変数var2が初期値10を与えられているため、除外して図8のグローバル変数一覧を作成する。
次に、図8のグローバル変数一覧に登録されている各変数に対し、変数配置部83が出力した中間コードよりリード/ライト箇所を調査して図8のグローバル変数一覧を作成する(ステップS103)。
図3のソースプログラムでは、変数globalはfunc1()関数(図3の11行目)でライトが行われ、func3()関数(図3の19行目)でリードが行われる。変数var3は、f1()関数(図3の25行目、23行目)、f4()関数(図3の36行目)でライトが行われ、f1()関数(図3の25行目)、f2()関数(図3の28行目)、f3()関数(図3の33行目)でリードが行われる。変数var4は、f2()関数(図3の29行目)、f4()関数(図3の37行目)、f5()関数(図3の41行目)でライトが行われ、f2()関数(図3の30行目)でリードが行われる。変数var5は、f5()関数(図3の42行目、43行目)でライトが行われ、f5()関数(図3の42行目)でリードが行われる。
次に、図8のグローバル変数一覧と図4コールツリーより、変数を使用している範囲を特定して図9のグローバル変数一覧を作成する(ステップS104)。図3のソースプログラムでは、図8より変数globalがfunc1()関数でライトが行われ、func3()関数でリードが行われる。図4のコールツリーより、func1()関数からfunc2()関数が呼び出され、func2()関数からfunc3()関数が呼び出される構成になっているため、使用範囲はfunc1()関数、func2()関数、func3()関数となる。
変数var3は、図8よりf1()関数、f2()関数、f3()関数でライトが行われ、f1()関数、f4()関数でリードが行われる。図4のコールツリーより、f1()関数からf2()関数が呼び出され、f2()関数からf3()関数、f4()関数が呼び出され、f4()関数からf5()関数が呼び出される構成になっているため、使用範囲はf1()関数、f2()関数、f3()関数、f4()関数、f5()関数となる。
変数var4は、図8よりf2()関数でライトが行われ、f2()関数、f4()関数、f5()関数でリードが行われる。図4のコールツリーより、f2()関数からf3()関数、f4()関数が呼び出され、f4()関数からf5()関数が呼び出される構成になっているため、使用範囲はf2()関数、f3()関数、f4()関数、f5()関数となる。
変数var5は、図8よりf5()関数でライトが行われ、f5()関数でリードが行われる。図4のコールツリーより、f5()関数から呼び出される関数は存在しないため、使用範囲はf5()関数となる。
次に、グローバル変数を使用している範囲に間接関数呼び出しが存在して静的に呼び出し関数が特定できない場合、使用範囲を特定できないため、その変数を除外する(ステップS105)。図3のソースプログラム例では、間接関数呼び出しが存在しないため、変数の除外は行われない。
次に、図9のグローバル変数一覧と図4コールツリーより、変数を使用している範囲の全ての入口を特定して図10のグローバル変数一覧を作成する(ステップS106)。図3のソースプログラムでは、変数globalがmain()関数から呼び出されるfunc1()関数が使用範囲の入口となり、func1()関数(図3の11行目)で必ず1のライトが行われる。変数var3は、main()関数から呼び出されるf1()関数と、main()関数、f1()関数から呼び出されるf2()関数が使用範囲の入口となる。変数var4は、main()関数、f1()関数から呼び出されるf2()関数が使用範囲の入口となる。変数var5は、f4()関数から呼び出されるf5()関数が使用範囲の入口となる。
次に、図10のグローバル変数一覧と変数配置部83が出力した中間コードより、関数の入口における変数の使用状況を調査して図11のグローバル変数一覧を作成し、前記一覧より、変数のライトより先に変数のリードが行われる変数を判断し、対象の変数を除外して図12のグローバル変数一覧を作成する(ステップS107)。
図3のソースプログラムでは、変数globalがfunc1()関数(図3の11行目)で必ず"1"のライトが行われる。変数var3は、f1()関数(図3の23行目)で必ず"1"のライトが行われ、f2()関数(図3の28行目)で必ずリードが行われる。変数var4は、f2()関数(図3の29行目)で必ず"0"のライトが行われる。変数var5は、f5()関数(図3の42行目)で変数var1の値によりリードが行われる場合がある。変数var3と変数var5が1箇所でも変数のライトより先に変数のリードが行われる変数と判断し、図11のグローバル変数一覧より除外して図12のグローバル変数一覧を作成する。
ステップS101〜S107により、有効範囲変更可能と判断した変数のみのグローバル変数一覧(図12)となり、図12のグローバル変数一覧に登録されている変数の使用範囲を新たな有効範囲(スコープ)として定めることができる(ステップS108)。
図13は、本実施の形態による変数global、変数var4の有効範囲であり、図12のグローバル変数一覧より有効範囲変更変数同士で有効範囲が重ならない変数を判断し、同一領域に配置できる有効範囲変更変数を決定し、図14の有効範囲変更変数一覧表を作成し、有効範囲変更変数一覧表87に出力する(ステップS109)。
コード生成部86は、図14の有効範囲変更変数一覧表の同一領域に定義されている変数に従い、変数var4のリード/ライトコードを変数globalが配置されたアドレスへのリード/ライトと同一領域へのアクセスとするコードを生成し、図14の有効範囲変更変数一覧表の有効範囲変更変数領域の領域確保に従い、有効範囲変更変数領域を確保する(ステップS7)ことで、変数globalと変数var4が同一のアドレスに配置され、RAMの領域を共存する。
本発明は、半導体集積回路用コンパイラ装置において、グローバル変数の使用範囲を調査して有効範囲を変更する有効範囲変更部と有効範囲変更部によって有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を格納する格納部とを有し、有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てする機能を有し、特定の修飾子を指定した変数と初期値を持つ変数をグローバル変数一覧より除外する処理を行い、グロ-バル変数のリード/ライト箇所を調査して変数の有効範囲を特定して有効範囲を特定不可能な変数および有効範囲入口でリードを行う変数をグローバル変数一覧より除外する処理を行い、変数の有効範囲を変更して有効範囲が重ならない変数を同一領域に配置することにより、グローバル変数の有効範囲を狭めてグローバル変数の有効範囲外実行時には領域を確保しないようにできるため、グローバル変数領域(RAM使用量)の削減ができる。
すなわち、本実施の形態にかかる半導体集積回路用コンパイラ装置によれば、グローバル変数領域(RAM使用量)の削減ができる。その理由としては、グローバル変数の有効範囲を狭めることによって有効範囲外実行時には領域を確保せずに、他の有効範囲が重ならないグローバル変数の領域を確保することで同一の領域にグローバル変数を重ねて配置することが可能となり、RAMのグローバル変数領域を削減できるからである。
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
例えば、上述の実施の形態では、ハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、CPU(Central Processing Unit)にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。
4 コンパイラ装置
5 外部記憶装置
6 ソースプログラム
7 オブジェクトプログラム
8 コンパイラ
81 構文解析部
82 コールツリー作成部
83 変数配置部
84 有効範囲変更部
85 最適化部
86 コード生成部
87 有効範囲変更変数一覧表
9 リンカ
91 ライブラリ
10 実行ファイル
400 変数globalの有効範囲
401 変数var4の有効範囲
101 CPU
102 ディスプレイ装置
103 キーボード
104 主記憶装置
105 外部記憶装置
106 ソースプログラム
107 オブジェクトプログラム
108 コンパイラ
109 中間コード
110 変数参照表
111 引数変換表

Claims (13)

  1. グローバル変数の使用範囲を調査して有効範囲を変更する有効範囲変更部と、
    有効範囲変更部によって有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を格納する格納部と、を有し、
    前記有効範囲変更部は、有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てする、コンパイラ装置。
  2. 前記有効範囲変更部は、有効範囲変更可能と判断した変数のみのグローバル変数一覧を生成し、このグローバル変数一覧に基づき、有効範囲変更変数一覧表を生成する、請求項1に記載のコンパイラ装置。
  3. 前記有効範囲変更部は、前記グローバル変数一覧を参照し、有効範囲変更変数同士で有効範囲が重ならない変数を判断し、同一領域に配置できる有効範囲変更変数を決定し、有効範囲変更変数一覧表を作成する、請求項1又は2に記載のコンパイラ装置。
  4. 前記有効範囲変更部は、特定の修飾子を指定した変数を除外した前記グローバル変数一覧を生成する、請求項1乃至3のいずれか1項記載のコンパイラ装置。
  5. 前記有効範囲変更部は、初期値を持つ変数を除外した前記グローバル変数一覧を生成する、請求項1乃至4のいずれか1項記載のコンパイラ装置。
  6. 前記有効範囲変更部は、変数のリード/ライト箇所を調査して変数の有効範囲を特定した前記グローバル変数一覧を生成する、請求項1乃至5のいずれか1項記載のコンパイラ装置。
  7. 前記有効範囲変更部は、有効範囲を特定不可能な変数を除外した前記グローバル変数一覧を生成する、請求項1乃至6のいずれか1項記載のコンパイラ装置。
  8. 前記有効範囲変更部は、有効範囲入口でリードを行う変数を除外した前記グローバル変数一覧を生成する、請求項1乃至7のいずれか1項記載のコンパイラ装置。
  9. 前記有効範囲変更部は、変数の有効範囲を変更した前記グローバル変数一覧を生成する、請求項1乃至8のいずれか1項記載のコンパイラ装置。
  10. 前記有効範囲変更部は、有効範囲が重ならない変数を同一領域に配置した前記グローバル変数一覧を生成する、請求項1乃至9のいずれか1項記載のコンパイラ装置。
  11. ソースプログラムに対して構文解析を行い中間コードを生成する構文解析部と、
    前記中間コードよりソースプログラムの関数の呼び出し関係を調査し、コールツリーを作成し、中間コードに追加して出力するコールツリー作成部と、
    中間コードから、ソースプログラムの変数の定義状況を調査し、前記グローバル変数一覧表を生成する変数配置部とを更に有する、請求項1乃至10のいずれか1項記載のコンパイラ装置。
  12. グローバル変数の使用範囲を調査して有効範囲を変更し、
    有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を生成し、
    有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てる、コンパイル方法。
  13. 半導体集積回路用のコンパイラ装置に所定の動作を実行させるためのプログラムであって、
    グローバル変数の使用範囲を調査して有効範囲を変更し、
    有効範囲を変更した変数情報を保有する有効範囲変更変数一覧表を生成し、
    有効範囲変更変数一覧表より複数のグローバル変数を同一アドレスの領域に配置することが可能な変数を抽出し、変数領域として割り当てる、プログラム。
JP2010044011A 2010-03-01 2010-03-01 コンパイラ装置、コンパイル方法及びプログラム Pending JP2011180814A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010044011A JP2011180814A (ja) 2010-03-01 2010-03-01 コンパイラ装置、コンパイル方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010044011A JP2011180814A (ja) 2010-03-01 2010-03-01 コンパイラ装置、コンパイル方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2011180814A true JP2011180814A (ja) 2011-09-15

Family

ID=44692255

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010044011A Pending JP2011180814A (ja) 2010-03-01 2010-03-01 コンパイラ装置、コンパイル方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2011180814A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114245883A (zh) * 2019-09-04 2022-03-25 欧姆龙株式会社 程序开发装置、工程制作方法以及用于实现程序开发装置的程序
JP7480082B2 (ja) 2021-03-08 2024-05-09 株式会社東芝 ソフトウェア開発支援装置、方法及びプログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114245883A (zh) * 2019-09-04 2022-03-25 欧姆龙株式会社 程序开发装置、工程制作方法以及用于实现程序开发装置的程序
CN114245883B (zh) * 2019-09-04 2023-08-11 欧姆龙株式会社 程序开发装置、工程制作方法以及存储介质
JP7480082B2 (ja) 2021-03-08 2024-05-09 株式会社東芝 ソフトウェア開発支援装置、方法及びプログラム

Similar Documents

Publication Publication Date Title
US9235433B2 (en) Speculative object representation
US10133560B2 (en) Link time program optimization in presence of a linker script
JP2004295398A (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
WO2013079006A1 (en) Systems and Methods for Customizing Optimization/Transformation/ Processing Strategies
US8266416B2 (en) Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system
US20200319867A1 (en) Systems and methods for eager software build
JP6651977B2 (ja) 情報処理装置、コンパイル方法、およびコンパイルプログラム
JP2009169864A (ja) コンパイル方法およびコンパイルプログラム
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
JP2011180814A (ja) コンパイラ装置、コンパイル方法及びプログラム
JP6481515B2 (ja) 情報処理装置、コンパイル方法、及びコンパイラプログラム
Murai et al. Preliminary performance evaluation of Coarray-based implementation of fiber Miniapp suite using XcalableMP PGAS language
JP2008165342A (ja) ソースコード生成方法及び装置並びにプログラム
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP6175306B2 (ja) 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体
JP2017091070A (ja) 実行可能コード生成プログラムおよび実行可能コード生成装置
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法
JP5813600B2 (ja) アプリケーション開発装置及びアプリケーション開発ツール
GB2420638A (en) Method of substituting code fragments in Internal Representation
JP2011181114A (ja) プログラム変換装置、プログラム変換方法及び記録媒体
JP6326838B2 (ja) プログラム処理装置、プログラム処理方法、及びプログラム処理プログラム
JP2019144857A (ja) 情報処理装置、コンパイル方法およびコンパイルプログラム
JP2019179383A (ja) Api処理方法、端末、api処理プログラム
JP5208589B2 (ja) コンパイル装置、コンパイラ、コンパイル方法
JP2007114934A (ja) コンパイラシステム