米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 計算機;電気通信 -> 松下電器産業株式会社

発明の名称 値定義場所決定装置
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開平7−73043
公開日 平成7年(1995)3月17日
出願番号 特願平5−219681
出願日 平成5年(1993)9月3日
代理人 【弁理士】
【氏名又は名称】中島 司朗
発明者 富永 宣輝 / 田中 旭 / 入交 旬子
要約 目的
一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを生成できる値定義場所決定装置を提供する。

構成
定数値使用箇所検出部1は、ソースコードや内部コード中で同一の値を持つ定数が使用される箇所を検出する。定数値置き換え部2は、定数値使用箇所検出部1により検出された定数の使用箇所のうち最初の使用箇所の前に定数から一時変数への乗せ換えを発生し、定数の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する。定数値再置き換え部4は、レジスタ割り付け部3によるレジスタ割り付けの結果、定数値再置き換え部4により置き換えられた一時変数がレジスタに割り付けられなかった場合に、定数値置き換え部2により発生された定数から一時変数への乗せ換えを除去し、定数値置き換え部2により置き換えられた一時変数の使用を定数の使用に戻す。
特許請求の範囲
【請求項1】 命令セット中に定数演算を有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一の値を持つ定数が使用される箇所を検出する定数値使用箇所検出部と、前記定数値使用箇所検出部により検出された定数の使用箇所のうち最初の使用箇所の前に定数から一時変数への乗せ換えを発生し、定数の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する定数値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、前記レジスタ割り付け部によるレジスタ割り付けの結果、前記定数値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、前記定数値置き換え部により発生された定数から一時変数への乗せ換えを除去し、前記定数値置き換え部により置き換えられた一時変数の使用を定数の使用に戻す定数値再置き換え部と、を備えたことを特徴とする値定義場所決定装置。
【請求項2】 命令セット中に、2本のレジスタをベースとオフセットとするアドレシングモードと、1本のレジスタをベースとし定数をオフセットとするアドレシングモードとを有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のオフセット値が使用される箇所を検出するオフセット値使用箇所検出部と、前記オフセット値使用箇所検出部により検出されたオフセット値の使用箇所のうち最初の使用箇所の前にオフセット値から一時変数への乗せ換えを発生し、オフセット値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録するオフセット値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、前記レジスタ割り付け部によるレジスタ割り付けの結果、前記オフセット値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、前記オフセット値置き換え部により発生されたオフセット値から一時変数への乗せ換えを除去し、前記オフセット値置き換え部により置き換えられた一時変数の使用をオフセット値の使用に戻すオフセット値再置き換え部と、を備えたことを特徴とする値定義場所決定装置。
【請求項3】 命令セット中に、2本のレジスタをベースとオフセットとするアドレシングモードと、アドレス即値をベースとし、1本のレジスタをオフセットとするアドレシングモードとを有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のアドレス即値が使用される箇所を検出するアドレス即値使用箇所検出部と、前記アドレス即値使用箇所検出部により検出されたアドレス即値の使用箇所のうち最初の使用箇所の前にアドレス即値から一時変数への乗せ換えを発生し、アドレス即値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録するアドレス即値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、前記レジスタ割り付け部によるレジスタ割り付けの結果、前記アドレス即値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、前記アドレス即値置き換え部により発生されたアドレス即値から一時変数への乗せ換えを除去し、前記アドレス即値置き換え部により置き換えられた一時変数の使用をアドレス即値の使用に戻すアドレス即値再置き換え部と、を備えたことを特徴とする値定義場所決定装置。
【請求項4】 高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のスタック上にある変数が使用される箇所を検出するスタック変数使用箇所検出部と、前記スタック変数使用箇所検出部により検出された使用箇所のうち最初の使用箇所の前にスタック変数から一時変数への乗せ換えを発生し、スタック変数の使用を一時変数の使用に置き換えると共に、乗せ換えおよび置き換えを行なった箇所を記録するスタック変数置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、前記レジスタ割り付け部によるレジスタ割り付けの結果、前記スタック変数置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、前記スタック変数置き換え部により発生されたスタック変数から一時変数への乗せ換えを除去し、前記スタック変数置き換え部により置き換えられた一時変数の使用をスタック変数の使用に戻すスタック変数再置き換え部と、を備えたことを特徴とする値定義場所決定装置。
発明の詳細な説明
【0001】
【産業上の利用分野】本発明は、コンパイラが、ソースコードや、ソースコードをコンパイラが処理し易いように変換した内部コードを、目的コードに翻訳する際に、より高速な目的コードとなるように、特定の値を定義する場所を決定する値定義場所決定装置に関するものである。
【0002】
【従来の技術】従来の値定義場所決定装置は、図6のように、定数値使用箇所検出部31と、定数値置き換え部32とを備えていた。この値定義場所決定装置は、定数の値をレジスタ上におき、以降でその値が使用される際にはそのレジスタを用いることによってプログラムの高速化を図るものであり、定数値使用箇所検出部31は、ソースコードまたは内部コードE中の同じ値を持つ定数を使用する箇所を検出する。定数値置き換え部32は、定数値使用箇所検出部31により検出された使用箇所のうち最初の使用箇所の前に、定数から一時変数への乗せ換えを発生し、定数の使用を一時変数の使用に置き換え、ソースコードまたは内部コードFのようにする。
【0003】なお上記従来の値定義場所決定装置は、定数の値をレジスタ上におくことによってプログラムの高速化を図るものであるが、同様の手法により、オフセットやアドレス即値の値をレジスタ上におくことによってプログラムの高速化を図る値定義場所決定装置も従来知られている。このような従来の値定義場所決定装置は、一時変数が必ずレジスタに割り付けられる場合、もしくはほぼ必ずレジスタに割り付けられると近似できる場合には、より高速な目的コードを得るのに有効である。これは、レジスタ間演算は定数演算より高速である、あるいは、レジスタ2本を使うアドレシングモードは、レジスタ1本とオフセットまたはアドレス即値とレジスタ1本を使うアドレシングモードより高速である、という性質を持つ対象CPUにおいて成立する。
【0004】
【発明が解決しようとする課題】しかし上記従来の値定義場所決定装置では、一時変数の数に対してレジスタの数が十分でないときには、一時変数がスタックに割り付けられる場合があり、このような場合には、目的コードをもとのソースコードまたは内部コードをそのまま翻訳した場合に比べて低速になってしまうという問題があった。これは、スタック間演算は定数演算より低速である、もしくはスタック間演算が存在しない、あるいは、レジスタ1本とスタックとを使うアドレシングモードは、レジスタ1本とオフセット、またはアドレス即値とレジスタ1本とを使うアドレシングモードより低速である、もしくはレジスタ1本とスタックとを使うアドレシングモードが存在しない、という性質を持つ対象CPUにおいて成立する。
【0005】本発明はかかる事情に鑑みて成されたものであり、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを生成できる値定義場所決定装置を提供することを目的とする。
【0006】
【課題を解決するための手段】請求項1の発明は、命令セット中に定数演算を有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一の値を持つ定数が使用される箇所を検出する定数値使用箇所検出部と、定数値使用箇所検出部により検出された定数の使用箇所のうち最初の使用箇所の前に定数から一時変数への乗せ換えを発生し、定数の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する定数値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、定数値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、定数値置き換え部により発生された定数から一時変数への乗せ換えを除去し、定数値置き換え部により置き換えられた一時変数の使用を定数の使用に戻す定数値再置き換え部と、を備えたことを特徴としている。
【0007】請求項2の発明は、命令セット中に、2本のレジスタをベースとオフセットとするアドレシングモードと、1本のレジスタをベースとし定数をオフセットとするアドレシングモードとを有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のオフセット値が使用される箇所を検出するオフセット値使用箇所検出部と、オフセット値使用箇所検出部により検出されたオフセット値の使用箇所のうち最初の使用箇所の前にオフセット値から一時変数への乗せ換えを発生し、オフセット値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録するオフセット値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、オフセット値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、オフセット値置き換え部により発生されたオフセット値から一時変数への乗せ換えを除去し、オフセット値置き換え部により置き換えられた一時変数の使用をオフセット値の使用に戻すオフセット値再置き換え部と、を備えたことを特徴としている。
【0008】請求項3の発明は、命令セット中に、2本のレジスタをベースとオフセットとするアドレシングモードと、アドレス即値をベースとし、1本のレジスタをオフセットとするアドレシングモードとを有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のアドレス即値が使用される箇所を検出するアドレス即値使用箇所検出部と、アドレス即値使用箇所検出部により検出されたアドレス即値の使用箇所のうち最初の使用箇所の前にアドレス即値から一時変数への乗せ換えを発生し、アドレス即値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録するアドレス即値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、アドレス即値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、アドレス即値置き換え部により発生されたアドレス即値から一時変数への乗せ換えを除去し、アドレス即値置き換え部により置き換えられた一時変数の使用をアドレス即値の使用に戻すアドレス即値再置き換え部と、を備えたことを特徴としている。
【0009】請求項4の発明は、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のスタック上にある変数が使用される箇所を検出するスタック変数使用箇所検出部と、スタック変数使用箇所検出部により検出された使用箇所のうち最初の使用箇所の前にスタック変数から一時変数への乗せ換えを発生し、スタック変数の使用を一時変数の使用に置き換えると共に、乗せ換えおよび置き換えを行なった箇所を記録するスタック変数置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、スタック変数置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、スタック変数置き換え部により発生されたスタック変数から一時変数への乗せ換えを除去し、スタック変数置き換え部により置き換えられた一時変数の使用をスタック変数の使用に戻すスタック変数再置き換え部と、を備えたことを特徴としている。
【0010】
【作用】請求項1の発明において、定数値使用箇所検出部は、ソースコードや内部コード中で同一の値を持つ定数が使用される箇所を検出する。定数値置き換え部は、定数値使用箇所検出部により検出された定数の使用箇所のうち最初の使用箇所の前に定数から一時変数への乗せ換えを発生し、定数の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する。レジスタ割り付け部は、変数をレジスタに割り付ける。定数値再置き換え部は、レジスタ割り付け部によるレジスタ割り付けの結果、定数値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、定数値置き換え部により発生された定数から一時変数への乗せ換えを除去し、定数値置き換え部により置き換えられた一時変数の使用を定数の使用に戻す。
【0011】請求項2の発明において、オフセット値使用箇所検出部は、ソースコードや内部コード中で同一のオフセット値が使用される箇所を検出する。オフセット値置き換え部は、オフセット値使用箇所検出部により検出されたオフセット値の使用箇所のうち最初の使用箇所の前にオフセット値から一時変数への乗せ換えを発生し、オフセット値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する。レジスタ割り付け部は、変数をレジスタに割り付ける。オフセット値再置き換え部は、レジスタ割り付け部によるレジスタ割り付けの結果、オフセット値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、オフセット値置き換え部により発生されたオフセット値から一時変数への乗せ換えを除去し、オフセット値置き換え部により置き換えられた一時変数の使用をオフセット値の使用に戻す。
【0012】請求項3の発明において、アドレス即値使用箇所検出部は、ソースコードや内部コード中で同一のアドレス即値が使用される箇所を検出する。アドレス即値置き換え部は、アドレス即値使用箇所検出部により検出されたアドレス即値の使用箇所のうち最初の使用箇所の前にアドレス即値から一時変数への乗せ換えを発生し、アドレス即値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する。レジスタ割り付け部は、変数をレジスタに割り付ける。アドレス即値再置き換え部は、レジスタ割り付け部によるレジスタ割り付けの結果、アドレス即値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、アドレス即値置き換え部により発生されたアドレス即値から一時変数への乗せ換えを除去し、アドレス即値置き換え部により置き換えられた一時変数の使用をアドレス即値の使用に戻す。
【0013】請求項4の発明において、スタック変数使用箇所検出部は、ソースコードや内部コード中で同一のスタック上にある変数が使用される箇所を検出する。スタック変数置き換え部は、スタック変数使用箇所検出部により検出された使用箇所のうち最初の使用箇所の前にスタック変数から一時変数への乗せ換えを発生し、スタック変数の使用を一時変数の使用に置き換えると共に、乗せ換えおよび置き換えを行なった箇所を記録する。レジスタ割り付け部は、変数をレジスタに割り付ける。スタック変数再置き換え部は、レジスタ割り付け部によるレジスタ割り付けの結果、スタック変数置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、スタック変数置き換え部により発生されたスタック変数から一時変数への乗せ換えを除去し、スタック変数置き換え部により置き換えられた一時変数の使用をスタック変数の使用に戻す。
【0014】
【実施例】以下、本発明の実施例を図面を用いて詳細に説明する。
(実施例1)図1は本発明の実施例1における値定義場所決定装置の構成図で、この値定義場所決定装置は、定数値使用箇所検出部1と、定数値置き換え部2と、レジスタ割り付け部3と、定数値再置き換え部4とを備えている。定数値使用箇所検出部1は、ソースコードまたは内部コードA中の同じ値を持つ定数を使用する箇所を検出する。定数値置き換え部2は、定数値使用箇所検出部1により検出された使用箇所のうち最初の使用箇所の前に定数から一時変数への乗せ換えを発生し、定数の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する。Bは、定数値置き換え部2により置き換えられたソースコードまたは内部コードである。レジスタ割り付け部3は、変数をレジスタに割り付ける。定数値再置き換え部4は、レジスタ割り付け部3によるレジスタ割り付けの結果、定数値置き換え部2により置き換えられた一時変数がレジスタに割り付けられなかった場合に、定数値置き換え部2により発生された定数から一時変数への乗せ換えを除去し、定数値置き換え部2により置き換えられた一時変数の使用を定数の使用に戻す。Cは、定数値再置き換え部4により置き換えられたソースコードまたは内部コードである。
【0015】次に上記値定義場所決定装置の動作について、図2のフローチャートを参照しながら説明する。まず定数値使用箇所検出部1が、ソースコードまたは内部コードA中から、同一の値を持つ定数を検出する(ステップS1)。図1の例では100が同一の値を持つ定数である。そして定数値使用箇所検出部1が、ソースコードまたは内部コードA中の同一の値を持つ定数を検出した出現箇所を定数値置き換え部2に渡す。これにより定数値置き換え部2が、ソースコードまたは内部コードAの、定数値使用箇所検出部1から渡された定数の使用箇所のうち最初の使用箇所の前に、定数から一時変数への代入式を挿入し、定数の使用を一時変数の使用で置き換え(ステップS2)、挿入した箇所および置き換えた箇所を記録して、定数値再置き換え部4に渡す。これによりソースコードまたは内部コードはBのようになる。図1の例では、定数100から一時変数tへの代入式を挿入し、定数100の使用をtの使用で置き換えている。次にレジスタ割り付け部3が、変数をレジスタに割り付け(ステップS3)、その結果を定数値再置き換え部4に渡す。レジスタ割り付けの方法には、例えばレジスタカラーリングを用いる方法や、変数の生存期間の長さや使用回数で重み付けをして決定する方法等があるが、本発明の要旨とは直接関係ないので、詳しい説明は省略する。次に定数値再置き換え部4が、レジスタ割り付け部3によるレジスタ割り付けが可能であったか否かを判断し(ステップS4)、定数値置き換え部2により置き換えられた一時変数がレジスタに割り付けられなかった場合、定数値置き換え部2の記録に基づいて、定数から一時変数への代入を削除し、一時変数の使用を定数の使用に再置換する(ステップS5)。これによりソースコードまたは内部コードはCのようになる。図1の例では、t=100という代入を除去し、tの使用を100の使用に再度置き換えている。
【0016】このように、一時変数がレジスタに割り付けられなかった場合、一時変数の使用を定数の使用に再置換するので、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを生成できる。なお、一時変数のうちレジスタに割り付けられなかった一時変数のみを定数に再置換することは勿論である。
(実施例2)図3は本発明の実施例2における値定義場所決定装置の構成図で、この値定義場所決定装置は、オフセット値使用箇所検出部6と、オフセット値置き換え部7と、レジスタ割り付け部8と、オフセット値再置き換え部9とを備えている。オフセット値使用箇所検出部6は、ソースコードや内部コード中で同一のオフセット値が使用される箇所を検出する。オフセット値置き換え部7は、オフセット値使用箇所検出部6により検出されたオフセット値の使用箇所のうち最初の使用箇所の前にオフセット値から一時変数への乗せ換えを発生し、オフセット値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する。レジスタ割り付け部8は、変数をレジスタに割り付ける。オフセット値再置き換え部9は、レジスタ割り付け部8によるレジスタ割り付けの結果、オフセット値置き換え部7により置き換えられた一時変数がレジスタに割り付けられなかった場合に、オフセット値置き換え部7により発生されたオフセット値から一時変数への乗せ換えを除去し、オフセット値置き換え部7により置き換えられた一時変数の使用をオフセット値の使用に戻す。
【0017】次に動作を説明する。まずオフセット値使用箇所検出部6が、ソースコードまたは内部コードから、同一の値を持つオフセット値を検出する。そしてオフセット値使用箇所検出部6が、ソースコードまたは内部コードの同一の値を持つオフセット値を検出した出現箇所をオフセット値置き換え部7に渡す。これによりオフセット値置き換え部7が、ソースコードまたは内部コードの、オフセット値使用箇所検出部6から渡されたオフセット値の使用箇所のうち最初の使用箇所の前に、オフセット値から一時変数への代入式を挿入し、オフセット値の使用を一時変数の使用で置き換え、挿入した箇所および置き換えた箇所を記録して、オフセット値再置き換え部9に渡す。次にレジスタ割り付け部8が、変数をレジスタに割り付け、その結果をオフセット値再置き換え部9に渡す。次にオフセット値再置き換え部9が、レジスタ割り付け部8によるレジスタ割り付けの結果、オフセット値置き換え部7により置き換えられた一時変数がレジスタに割り付けられなかった場合、オフセット値置き換え部7の記録に基づいて、オフセット値から一時変数への代入を削除し、一時変数の使用をオフセット値の使用に再置換する。
【0018】このように、一時変数がレジスタに割り付けられなかった場合、一時変数の使用をオフセット値の使用に再置換するので、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを生成できる。
(実施例3)図4は本発明の実施例3における値定義場所決定装置の構成図で、この値定義場所決定装置は、アドレス即値使用箇所検出部11と、アドレス即値置き換え部12と、レジスタ割り付け部13と、アドレス即値再置き換え部14とを備えている。アドレス即値使用箇所検出部11は、ソースコードや内部コード中で同一のアドレス即値が使用される箇所を検出する。アドレス即値置き換え部12は、アドレス即値使用箇所検出部11により検出されたアドレス即値の使用箇所のうち最初の使用箇所の前にアドレス即値から一時変数への乗せ換えを発生し、アドレス即値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する。レジスタ割り付け部13は、変数をレジスタに割り付ける。アドレス即値再置き換え部14は、レジスタ割り付け部13によるレジスタ割り付けの結果、アドレス即値置き換え部12により置き換えられた一時変数がレジスタに割り付けられなかった場合に、アドレス即値置き換え部12により発生されたアドレス即値から一時変数への乗せ換えを除去し、アドレス即値置き換え部12により置き換えられた一時変数の使用をアドレス即値の使用に戻す。
【0019】次に動作を説明する。まずアドレス即値使用箇所検出部11が、ソースコードまたは内部コードから、同一の値を持つアドレス即値を検出する。そしてアドレス即値使用箇所検出部11が、ソースコードまたは内部コード中の同一の値を持つアドレス即値を検出した出現箇所をアドレス即値置き換え部12に渡す。これによりアドレス即値置き換え部12が、ソースコードまたは内部コードの、アドレス即値使用箇所検出部11から渡されたアドレス即値の使用箇所のうち最初の使用箇所の前に、アドレス即値から一時変数への代入式を挿入し、アドレス即値の使用を一時変数の使用で置き換え、挿入した箇所および置き換えた箇所を記録して、アドレス即値再置き換え部14に渡す。次にレジスタ割り付け部13が、変数をレジスタに割り付け、その結果をアドレス即値再置き換え部14に渡す。次にアドレス即値再置き換え部14が、レジスタ割り付け部13によるレジスタ割り付けの結果、アドレス即値置き換え部12により置き換えられた一時変数がレジスタに割り付けられなかった場合、アドレス即値置き換え部12の記録に基づいて、アドレス即値から一時変数への代入を削除し、一時変数の使用をアドレス即値の使用に再置換する。
【0020】このように、一時変数がレジスタに割り付けられなかった場合、一時変数の使用をアドレス即値の使用に再置換するので、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを生成できる。
(実施例4)図5は本発明の実施例4における値定義場所決定装置の構成図で、この値定義場所決定装置は、スタック変数使用箇所検出部16と、スタック変数置き換え部17と、レジスタ割り付け部18と、スタック変数再置き換え部19とを備えている。スタック変数使用箇所検出部16は、ソースコードや内部コード中で同一のスタック上にある変数が使用される箇所を検出する。スタック変数置き換え部17は、スタック変数使用箇所検出部16により検出された使用箇所のうち最初の使用箇所の前にスタック変数から一時変数への乗せ換えを発生し、スタック変数の使用を一時変数の使用に置き換えると共に、乗せ換えおよび置き換えを行なった箇所を記録する。レジスタ割り付け部18は、変数をレジスタに割り付ける。スタック変数再置き換え部19は、レジスタ割り付け部18によるレジスタ割り付けの結果、スタック変数置き換え部17により置き換えられた一時変数がレジスタに割り付けられなかった場合に、スタック変数置き換え部17により発生されたスタック変数から一時変数への乗せ換えを除去し、スタック変数置き換え部17により置き換えられた一時変数の使用をスタック変数の使用に戻す。
【0021】次に動作を説明する。まずスタック変数使用箇所検出部16が、ソースコードまたは内部コード中から、同一のスタック上にある変数を検出する。そしてスタック変数使用箇所検出部16が、ソースコードまたは内部コード中の同一のスタック変数を検出した出現箇所をスタック変数置き換え部17に渡す。これによりスタック変数置き換え部17が、ソースコードまたは内部コードの、スタック変数使用箇所検出部16から渡されたスタック変数の使用箇所のうち最初の使用箇所の前に、スタック変数から一時変数への代入式を挿入し、スタック変数の使用を一時変数の使用で置き換え、挿入した箇所および置き換えた箇所を記録して、スタック変数再置き換え部19に渡す。次にレジスタ割り付け部18が、変数をレジスタに割り付け、その結果をスタック変数再置き換え部19に渡す。次にスタック変数再置き換え部19が、レジスタ割り付け部18によるレジスタ割り付けの結果、スタック変数置き換え部17により置き換えられた一時変数がレジスタに割り付けられなかった場合、スタック変数置き換え部17の記録に基づいて、スタック変数から一時変数への代入を削除し、一時変数の使用をスタック変数の使用に再置換する。このように、一時変数がレジスタに割り付けられなかった場合、一時変数の使用をスタック変数の使用に再置換するので、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを生成できる。
【0022】
【発明の効果】以上説明したように本発明によれば、命令セット中に定数演算を有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一の値を持つ定数が使用される箇所を検出する定数値使用箇所検出部と、定数値使用箇所検出部により検出された定数の使用箇所のうち最初の使用箇所の前に定数から一時変数への乗せ換えを発生し、定数の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録する定数値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、定数値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、定数値置き換え部により発生された定数から一時変数への乗せ換えを除去し、定数値置き換え部により置き換えられた一時変数の使用を定数の使用に戻す定数値再置き換え部と、を備えたので、一時変数がレジスタに割り付けられなかった場合、一時変数の使用を定数の使用に再置換することから、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを得ることができる。
【0023】また、命令セット中に、2本のレジスタをベースとオフセットとするアドレシングモードと、1本のレジスタをベースとし定数をオフセットとするアドレシングモードとを有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のオフセット値が使用される箇所を検出するオフセット値使用箇所検出部と、オフセット値使用箇所検出部により検出されたオフセット値の使用箇所のうち最初の使用箇所の前にオフセット値から一時変数への乗せ換えを発生し、オフセット値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録するオフセット値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、オフセット値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、オフセット値置き換え部により発生されたオフセット値から一時変数への乗せ換えを除去し、オフセット値置き換え部により置き換えられた一時変数の使用をオフセット値の使用に戻すオフセット値再置き換え部と、を備えれば、一時変数がレジスタに割り付けられなかった場合、一時変数の使用をオフセット値の使用に再置換することから、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを得ることができる。
【0024】また、命令セット中に、2本のレジスタをベースとオフセットとするアドレシングモードと、アドレス即値をベースとし、1本のレジスタをオフセットとするアドレシングモードとを有するようなCPUを対象として、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のアドレス即値が使用される箇所を検出するアドレス即値使用箇所検出部と、アドレス即値使用箇所検出部により検出されたアドレス即値の使用箇所のうち最初の使用箇所の前にアドレス即値から一時変数への乗せ換えを発生し、アドレス即値の使用を一時変数の使用に置き換え、乗せ換えおよび置き換えを行なった箇所を記録するアドレス即値置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、アドレス即値置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、アドレス即値置き換え部により発生されたアドレス即値から一時変数への乗せ換えを除去し、アドレス即値置き換え部により置き換えられた一時変数の使用をアドレス即値の使用に戻すアドレス即値再置き換え部と、を備えれば、一時変数がレジスタに割り付けられなかった場合、一時変数の使用をアドレス即値の使用に再置換することから、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを得ることができる。
【0025】また、高級言語を目的コードに変換するコンパイラに用いる値定義場所決定装置であって、ソースコードや内部コード中で同一のスタック上にある変数が使用される箇所を検出するスタック変数使用箇所検出部と、スタック変数使用箇所検出部により検出された使用箇所のうち最初の使用箇所の前にスタック変数から一時変数への乗せ換えを発生し、スタック変数の使用を一時変数の使用に置き換えると共に、乗せ換えおよび置き換えを行なった箇所を記録するスタック変数置き換え部と、変数をレジスタに割り付けるレジスタ割り付け部と、レジスタ割り付け部によるレジスタ割り付けの結果、スタック変数置き換え部により置き換えられた一時変数がレジスタに割り付けられなかった場合に、スタック変数置き換え部により発生されたスタック変数から一時変数への乗せ換えを除去し、スタック変数置き換え部により置き換えられた一時変数の使用をスタック変数の使用に戻すスタック変数再置き換え部と、を備えれば、一時変数がレジスタに割り付けられなかった場合、一時変数の使用をスタック変数の使用に再置換することから、一時変数の数に対してレジスタの数が十分でないような場合にも高速な目的コードを得ることができる。




 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013