JPH07141192A - 翻訳処理方法 - Google Patents

翻訳処理方法

Info

Publication number
JPH07141192A
JPH07141192A JP5145845A JP14584593A JPH07141192A JP H07141192 A JPH07141192 A JP H07141192A JP 5145845 A JP5145845 A JP 5145845A JP 14584593 A JP14584593 A JP 14584593A JP H07141192 A JPH07141192 A JP H07141192A
Authority
JP
Japan
Prior art keywords
intermediate text
instruction
state
operand
command
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.)
Granted
Application number
JP5145845A
Other languages
English (en)
Other versions
JP3318051B2 (ja
Inventor
Manabu Matsuyama
学 松山
Hiroshi Igarashi
寛 五十嵐
Koichiro Hotta
耕一郎 堀田
Masakazu Hayashi
正和 林
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP14584593A priority Critical patent/JP3318051B2/ja
Publication of JPH07141192A publication Critical patent/JPH07141192A/ja
Priority to US08/748,064 priority patent/US6233732B1/en
Application granted granted Critical
Publication of JP3318051B2 publication Critical patent/JP3318051B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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

(57)【要約】 【目的】 翻訳時間を短縮し、スケジューリングの効率
を高めるとともに、条件コードを複数持つアーキテクチ
ャのCPUに対しても効率よく使用することができる翻
訳処理方法を提供すること。 【構成】 原始プログラムから、原始プログラムの命令
に対応付けて中間テキスト命令1を生成する(ステップ
S1)。生成される中間テキスト命令1はコンピュータ
の状態変化およびリンケージ規約を個々の中間テキスト
命令1の定義オペランド1aとして明示できる構造を備
えており、リストあるいは動的配列などにより定義オペ
ランドに複数の値を保持することができる。ついで、生
成された上記構造を持つ中間テキストに対して最適化処
理が施され(ステップS2)、機械語が生成される(ス
テップS3)。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、原始プログラムを中間
テキストに変換して機械語を生成する翻訳処理方法に関
する。原始プログラムから機械語を生成するコンパイラ
においては、原始プログラムから中間テキスト命令列か
らなる中間テキストを生成しコンパイラ内部でプログラ
ムの構造、状態を表現しているが、本発明は、上記中間
テキストの操作に関し、特に本発明は、中間テキストの
操作にかかる時間の短縮と、最適化効果を促進させるこ
とができる翻訳処理方法に関するものである。
【0002】近年、半導体テクノロジーの進歩により、
さまざまなアーキテクチャが提案されている。特に、V
LIWや、スーパースケーラなど命令の並列・同時実行
に関する提案が顕著である。近代的なコンパイラはこれ
らのアーキテクチャの特性を活かした新しい最適化技法
を駆使して、効率の良い命令を生成できなくてはならな
い。このためにハードウェアの持つ資源を的確に表現で
きる表現方法が要望されている。本発明は上記したコン
パイラの中間テキストにおける新しい表現手法に関する
ものであり、産業上の利用分野な広い。
【0003】
【従来の技術】コンパイラにおいては、通常、原始プロ
グラムの構造解析を行って中間テキストを生成し、生成
された中間テキストに対して最適化処理をおこない、機
械語を生成している。上記した中間テキストにおいて、
従来においては、一つの中間テキスト命令で複数の値を
定義する方法はなかった。
【0004】また、コンピュータの状態の変化はその各
々に対して設けられた状態記述子によって記録されてお
り、例えば、変数Aから変数Bを引き算した結果が、0
もしくは負であることを示す条件コードは上記のような
状態記述子によって記録される。従来、これらの状態記
述子には、状態を設定した最後の中間テキスト命令、あ
るいは、最後に定義・参照した識別子が記録されてお
り、この記録は処理が進むにつれ、次々と更新されてい
き、常に最新の情報だけが残されていた。
【0005】さらに、変数の生死の判定をするために
は、通常の中間テキスト命令による変数の定義・参照の
他にも、関数呼び出しによるレジスタの内容の破壊など
を考慮する必要があったが、従来においては、上記レジ
スタの規約等を中間テキストの中に明示的に表現するこ
とがきなかった。
【0006】
【発明が解決しようとする課題】上記のように、従来技
術においては次のような問題点があった。 (1)一つの中間テキスト命令で、複数の値を定義する
方法がなかった。このため、原始プログラム上の一つの
演算を複数の中間テキスト命令に分解して表現する必要
があり、下記の問題が生じていた。 一つの動作を表現するのに、複数の中間テキスト命
令を組み合わせる必要があり、特に、複素数に対する演
算を、翻訳処理の早期の時点で実数部と虚数部に分解し
て表現する必要が生じていた。
【0007】すなわち、複素数の演算を行うには、実数
部と虚数部のそれぞれについて演算を行い、実数部の演
算の結果生じた条件コードと虚数部の演算によって生じ
た条件コードをそれぞれ記録する必要があったが、従来
においては、上記のように一つの中間テキスト命令で、
複数の値を定義する方法がなかったため、複素数の演算
において、中間テキスト命令は実数部と虚数部に分解し
て表現する必要があった。 最適化処理の一環として、ある中間テキスト命令に
移動、複写、削除などの処理を施してよいか否かの条件
が、その中間テキスト命令だけでなく、同じ動作を共有
する他の中間テキスト命令をも検査しなければ決定でき
なかった。また、実際に処理を施すときには、それらの
中間テキスト命令にも、同じ処理を施す必要があった。
【0008】例えば、上記した複素数の演算のように、
一つの動作が実数部と虚数部に分解して表現されている
場合に、実数部の中間テキスト命令の条件のみでは、そ
の命令の移動、複写、削除などを施してよいか否かは判
断できず、虚数部の中間テキスト命令も検査する必要が
あり、また、実数部の中間テキスト命令に処理を施す場
合には、虚数部の中間テキスト命令についても、処理を
施す必要があった。 変数の生死を検査するときに、ある中間テキスト命
令で定義された変数と同じ定義点を持つ変数が別の中間
テキスト命令の上で定義されている可能性を考慮する必
要があった。
【0009】例えば、上記したように実数部と虚数部に
中間テキスト命令が分解されている場合、複素数の演算
結果のうち、虚数部の演算結果を後で使用する必要がな
い場合であっても、実数部の演算結果を後で使用する場
合には複素数の演算結果を生かしておく必要があり、変
数の生死の検査においては、他の中間テキスト命令をも
考慮する必要があった。 例えば、関数の呼び出し処理を行う場合、パラメー
タをどのレジスタに設定するか等のプログラム作成上の
規約があり、変数の生死を検査するときには、上記特定
のレジスタに関する規約を考慮する必要があるが、従来
技術においては、一つの中間テキスト命令で、複数の値
を定義する方法がなかったため、上記規約を中間テキス
ト命令で明示的に表現することができなかった。
【0010】以上のように、従来においては、原始プロ
グラム上の一つの演算を複数の中間テキスト命令に分解
して表現しなければならない場合があり、コンパイラの
構造が複雑になるとともに、翻訳時間を増大させるとい
う問題点が生じていた。 (2)スケジューリング技法のように、一度生成された
命令列の間で中間テキスト命令を移動させる最適化で
は、移動先でのコンピュータの状態を復元する必要があ
るが、従来技術において状態記述子が記憶しているのは
最後に状態を設定した中間テキスト命令や変数なので、
命令の移動先でのコンピュータの状態を復元することが
困難であり、スケジューリングの効率を低下させてい
た。
【0011】すなわち、原始プログラムの順番をコンピ
ュータの処理とって都合の良い順番に並べかえるスケジ
ューリング技法においては、作成者の意図とは異なる順
番に命令がならびかえられるため、命令の移動先におい
て、元の順番のコンピュータの状態が復元される必要が
あったが、従来技術においては、命令の移動先でのコン
ピュータの状態を復元することが簡単にできなかった。 (3)複数の条件コードを持つアーキテクチャのCPU
において、演算の結果設定される条件コードを、制御構
造(処理の順序)とは独立して決定することができなか
った。すなわち、従来においては、条件コードを変数と
してあつかえず、条件コードの設定は、中間テキスト命
令を生成する時に決定しなければならず、後から変更す
ることができなかった。このため、スケジューリングの
可能性が限定されていた。
【0012】本発明は上記した従来技術の問題点を考慮
してなされたものであって、一つの中間テキスト命令で
複数の値を定義できるようにすることにより、複素数の
処理の効率化、変数の生死の判断、スケジューリングの
容易化を図り翻訳時間を短縮するとともに、スケジュー
リングの効率を高めて生成される機械語の実行速度を増
加させることができ、さらに、条件コードを複数持つよ
うなアーキテクチャのCPUに対しても効率よく使用す
ることができる翻訳処理方法を提供することを目的とす
る。
【0013】
【課題を解決するための手段】図1は本発明の原理図で
あり、1は中間テキスト命令、1aは定義オペランド、
1bはコンピュータの変化した状態を表現する識別子を
指すポインタ(状態変数)、1cは中間テキスト命令の
表す演算がコンピュータの状態を変化させたかどうかを
表す状態属性、2は状態変化を表現する識別子、3は複
数の定義オペランドを保持するためのリスト、4は複数
の定義オペランドを保持するための配列である。
【0014】上記課題を解決するため、同図に示すよう
に、本発明の請求項1の発明は、原始プログラムを中間
テキストに変換し、変換した中間テキストに対して最適
化処理を行い機械語を生成する翻訳処理方法において、
演算の主作用として定義されるオペランド、および、副
作用として定義されるコンピュータの状態変化、リンケ
ージ規約を、中間テキストの個々の中間テキスト命令1
の定義オペランド1aとして明示できるようにし、上記
中間テキスト命令1を用いて原始プログラムを中間テキ
ストに変換し機械語を生成するようにしたものである。
【0015】本発明の請求項2の発明は、請求項1の発
明において、複数の値を一つの中間テキスト命令1で定
義できるようにしたものである。本発明の請求項3の発
明は、請求項2の発明において、コンピュータの状態変
化およびリンケージ規約を中間テキスト命令1の定義オ
ペランド1aとして明示したものである。
【0016】本発明の請求項4の発明は、請求項3の発
明において、コンピュータの状態変化およびリンケージ
規約を識別子2として表現したものである。本発明の請
求項5の発明は、請求項2または請求項3の発明におい
て、中間テキスト命令が定義する複数の定義オペランド
の全てをリスト3でつなぐことにより、複数の値を一つ
の中間テキスト命令1で定義できるようにしたものであ
る。
【0017】本発明の請求項6の発明は、請求項2また
は請求項3の発明において、中間テキスト命令が定義す
る複数の定義オペランドを配列3で保持することによ
り、複数の値を一つの中間テキスト命令で定義できるよ
うにしたものである。本発明の請求項7の発明は、原始
プログラムを中間テキストに変換し、変換した中間テキ
ストに対して最適化処理を行い機械語を生成する翻訳処
理方法において、個々の中間テキスト命令に、その中間
テキスト命令の表す演算がコンピュータの状態を変化さ
せたかどうかを表す状態属性1cと、変化した状態を表
現する識別子を指すポインタ1bを設けて個々の中間テ
キスト命令1によりコンピュータの状態変化を明示でき
るようにし、上記中間テキスト命令1を用いて原始プロ
グラムを中間テキストに変換し機械語を生成するように
したものである。
【0018】本発明の請求項8の発明は、請求項7の発
明において、状態属性1cと、変化した状態を表現する
識別子へのポインタ1bとを兼用したものである。
【0019】
【作用】図1において、原始プログラムから、原始プロ
グラムの命令に対応付けて中間テキスト命令1を生成す
る(ステップS1)。生成される中間テキスト命令1は
同図に示すように、コンピュータの状態変化およびリン
ケージ規約を個々の中間テキスト命令1の定義オペラン
ド1aとして明示できる構造を備えており、リストある
いは動的配列などにより定義オペランドに複数の値を保
持することができる。
【0020】ついで、生成された上記構造を持つ中間テ
キストに対して最適化処理を施し(ステップS2)、機
械語を生成する(ステップS3)。本発明の請求項1の
発明においては、上記のように、コンピュータの状態変
化、リンケージ規約を個々の中間テキスト命令1の定義
オペランド1aとして明示できる中間テキスト命令1を
用いて、原始プログラムから、原始プログラムの命令に
対応付けて中間テキストを生成しているので、演算の結
果起こる状態変化を一つの中間テキスト命令だけで表現
することができる。
【0021】これにより、ある中間テキスト命令に最適
化処理を施してよいかどうかの判断を、その中間テキス
ト命令を検査するだけで決定することができ、また、あ
る中間テキスト命令に対する処理が必然的に他の中間テ
キスト命令に対する処理の必要性を引き起こすことがな
いので、スケジューリング処理の効率化を図ることがで
きる。また、プログラムの任意の時点におけるコンピュ
ータの状態、あるいは、状態を変化させた中間テキスト
命令を簡単に知ることができるので、スケジューリン処
理を単純化することができる。
【0022】その結果、コンパイラの構造が単純化さ
れ、翻訳時間を短縮させることができ、さらに生成され
る機械語命令の効率を高めて実行速度を向上させること
が可能となる。本発明の請求項2ないし請求項6の発明
においては、複数の値を一つの中間テキスト命令1で定
義できるようにしたので、請求項1の発明の効果に加
え、複素数の演算など、複数の変数を定義する演算を一
つの中間テキスト命令だけで表現することができ、演算
と中間テキスト命令を1対1に対応付けることができ
る。このため、ある変数と定義点を同じくする変数が必
ず同じ中間テキスト命令に記載されるようになる。
【0023】また、複数の条件コードを持つアーキテク
チャのCPUで、演算に対する状態の割り当てを一般の
レジスタの割り当てと同じような手法で解決でき、制御
構造(処理の流れ)から独立して決定することができる
ので、スケジューリング処理の可能性を高めることがで
きる。その結果、請求項1の発明と同様、コンパイラの
構造が単純化され、翻訳時間を短縮させることができ、
さらに生成される機械語命令の効率を高めて実行速度を
向上させることが可能となる。
【0024】本発明の請求項7の発明においては、個々
の中間テキスト命令に、その中間テキスト命令の表す演
算がコンピュータの状態を変化させたかどうかを表す状
態属性1cと、変化した状態を表現する識別子を指すポ
インタ1bを設けて個々の中間テキスト命令1によりコ
ンピュータの状態変化を明示できるようにしたので、請
求項1ないし請求項6の発明と同様の効果を得ることが
できる。
【0025】本発明の請求項8の発明においては、請求
項7の発明において、状態属性1cと、変化した状態を
表現する識別子へのポインタ1bとを兼用したので、請
求項7の発明と同様な効果を得ることができるととも
に、中間テキスト命令の構造を簡単にすることができ
る。
【0026】
【実施例】図2は本発明が適用されるコンパイラの構成
を示す図であり、同図において、21は原始プログラム
の構造を解析する構造解析部、22は原始プログラムよ
り中間テキストを生成する中間テキスト生成部、23は
中間テキストを生成する際に参照される中間テキスト命
令生成表である。また、24は生成された中間テキスト
命令の順番をコンピュータの処理とって都合の良い順番
に並べかえたり、命令を融合する等の最適化処理を行う
最適化処理部、25は最適化された命令から機械語を生
成する機械語生成部である。
【0027】同図において、構造解析部21において解
析された原始プログラム中の命令文は、中間テキスト生
成部22でそれぞれに対応する中間テキスト命令に翻訳
される。この時、中間テキスト生成部22は中間テキス
ト命令生成表23を参照して、該中間テキスト命令が参
照・定義する変数の個数、変化させるコンピュータの状
態、命令の実施にともなうリンケージ規約を知る。そし
て、参照する変数は参照オペランドに割り当て、定義す
る変数、変化させる状態、リンケージ規約に関する情報
は定義オペランドに割り当てる。
【0028】最適化処理部24は上記のようにして生成
された中間テキスト命令を検査して検査結果に基づき最
適化処理を施す。機械語生成部25は最適化処理が施さ
れた命令より機械語を生成する。次に、上記した中間テ
キスト生成部22において、演算の結果起こる状態変化
を中間テキスト命令を用いて表現する本発明の実施例に
ついて説明する。
【0029】図3は本発明の第1の実施例を示す図であ
り、本実施例は複数の定義オペランドをリストをつない
で保持する実施例を示している。同図において、31は
中間テキスト命令、31aは中間テキスト命令における
定義オペランド、31bは参照オペランドであり、参照
オペランド31bには識別子32a,32bの格納位置
を示すポインタが格納され、また、定義オペランド31
aにはリスト・セル33の格納位置を示すポインタが格
納される。さらに、リスト・セル33のセル33aには
次のリスト・セル34の格納位置を示すポインタが格納
され、リスト・セル33,34のセル33b,34bに
はそれぞれ、識別子35,36の格納位置を示すポイン
タが格納される。
【0030】そして、例えば、参照オペランド31bが
指す識別子32a,32bには変数が格納され、定義オ
ペランド31aが指す識別子35および識別子36には
それぞれ上記変数の演算結果および演算の結果起こる状
態変化が格納される。また、同様にリストをつないでい
けば、さらに多くの定義オペランドを保持することがで
きる。
【0031】本実施例においては、上記のようにリスト
をつないで複数の定義オペランドを保持しているので、
定義する変数、変化させる状態、リンケージ規約などの
複数の情報を定義オペランドが保持することができる。
図4は本発明の第2の実施例を示す図であり、本実施例
は動的配列を用意し、複数の定義オペランドを配列内に
保持する実施例を示している。
【0032】同図において、31は中間テキスト命令、
31aは中間テキスト命令における定義オペランド、3
1bは参照オペランドであり、参照オペランド31bに
は識別子32a,32bの格納位置を示すポインタが格
納され、定義オペランド31aには配列41の格納位置
を示すポインタが格納されている。また、配列41の要
素41aには識別子35の格納位置を示すポインタが格
納され、配列41の要素41bには、識別子36の格納
位置を示すポインタが格納される。
【0033】そして、第1の実施例と同様に、定義オペ
ランド31aが指す識別子35には、例えば、参照オペ
ランド31bが指す変数の演算結果が格納され、識別子
36には演算の結果起こる状態変化が格納される。ま
た、配列の要素は定義オペランドの数に応じて動的に確
保され、定義オペランドの数が多くなれば、それに応じ
た配列が確保される。
【0034】本実施例においては、上記のように定義オ
ペランドの値が一つ以上であるときに、その個数に合わ
せて必要な配列を動的に確保し、そこに定義オペランド
を格納するので、第1の実施例と同様、定義する変数、
変化させる状態、リンケージ規約などの複数の情報を定
義オペランドが保持することができる。図5は本発明の
第3の実施例を示す図であり、本実施例は特定の個数の
識別子を保持できる構造体を用いて定義オペランドを保
持する実施例を示している。すなわち、本実施例におい
ては、上記構造体を用意し、中間テキスト命令のポイン
タが識別子を指すのではなく、その構造体を指すように
することにより複数の定義オペランドを保持する。
【0035】同図において、31は中間テキスト命令、
31aは中間テキスト命令における定義オペランド、3
1bは参照オペランドであり、参照オペランド31bに
は識別子32a,32bの格納位置を示すポインタが格
納され、また、定義オペランド31aには構造体51の
格納位置を示すポインタが格納されている。また、構造
体51の主要素51aには識別子35の格納位置を示す
ポインタが格納され、副要素51bには、識別子36の
格納位置を示すポインタが格納される。
【0036】そして、第1、第2の実施例と同様に、定
義オペランド31aが指す識別子35には、例えば、参
照オペランド31bが指す変数の演算結果が格納され、
識別子36には演算の結果起こる状態変化が格納され
る。本実施例においては、上記のように複数の定義オペ
ランドを保持する構造体を用いて複数の定義オペランド
を保持しているので、第1、第2の実施例と同様、定義
する変数、変化させる状態、リンケージ規約などの複数
の情報を定義オペランドが保持することができる。
【0037】図6は本発明の第4の実施例を示す図であ
り、本実施例は状態変化を中間テキスト命令の定義オペ
ランドに記録する実施例を示している。同図において、
31は中間テキスト命令、31aは中間テキスト命令に
おける定義オペランド、31bは参照オペランドであ
り、参照オペランド31bには識別子32a,32bの
格納位置を示すポインタが格納され、定義オペランド3
1aには状態を表す識別子61の格納位置を示すポイン
タが格納されている。
【0038】そして、本実施例においては、識別子61
の型を示す属性の属性値の集合に「コンピュータの状態
を表す属性値」を加えている。すなわち、識別子61が
表すデータの型として、変数、定数、アドレスなどの他
に、コンピュータの状態を表す型を追加し、前記した条
件コードのようなコンピュータの状態を識別子61で表
現できるようにする。
【0039】本実施例においては、上記のように識別子
の型にコンピュータの状態を表す型を追加しているの
で、状態変化を識別子で表現することができる。これに
より、上記「コンピュータの状態を表す属性」を持つ変
数が通常のレジスタに割り付けることができないような
アーキテクチャを持つハードウェアを、そのような制限
を持たないアーキテクチャと同様の手段で取り扱うこと
ができる。
【0040】図7は本発明の第5の実施例を示す図であ
り、本実施例は中間テキスト命令に状態属性と状態変数
を持たせた実施例を示している。同図において、31は
中間テキスト命令、31aは中間テキスト命令における
定義オペランド、31bは参照オペランドであり、参照
オペランド31bには識別子32a,32bの格納位置
を示すポインタが格納され、定義オペランド31aには
識別子35の格納位置を示すポインタが格納されてい
る。
【0041】また、31cは状態変数であり、状態変数
31cには状態を表す識別子71が格納された位置を示
すポインタが格納され、識別子71には条件コードのよ
うなコンピュータの状態を記録することができる。31
dは中間テキスト命令が状態を変化させたかどうかを表
す状態属性であり、識別子71にコンピュータの状態の
変化が記録されているか否かが上記状態属性を参照する
ことにより判別することができる。
【0042】本実施例においては、上記のように、中間
テキスト命令に、定義オペランドとは別にその中間テキ
スト命令が状態を変化させたか否かを示す状態属性を持
たせ、また、識別子の型にコンピュータの状態を表す型
を追加しているので、中間テキスト命令にコンピュータ
の状態の変化を記録することができる。図8は本発明の
第6の実施例を示す図であり、本実施例は中間テキスト
命令に状態属性兼用状態変数を持たせた実施例を示して
いる。
【0043】同図において、31は中間テキスト命令、
31aは中間テキスト命令における定義オペランド、3
1bは参照オペランドであり、参照オペランド31bに
は識別子32a,32bの格納位置を示すポインタが格
納され、定義オペランド31aには識別子35の格納位
置を示すポインタが格納されている。また、31cは状
態属性の表示を兼用した状態変数であり、状態変数31
cには、コンピュータの状態の変化が無い場合にはポイ
ンタ値として使われることのない例えば0などの所定の
値が記録され、コンピュータの状態変化がある場合には
識別子81の格納位置を示すポインタが格納される。
【0044】本実施例においては、上記のように、中間
テキスト命令に、定義オペランドとは別に、その中間テ
キスト命令が状態を変化させたか否かの属性表示を兼ね
た、状態を表現する識別子を指すポインタを設けたの
で、第5の実施例と同様、中間テキスト命令にコンピュ
ータの状態の変化を記録することができる。図9は本発
明の第7の実施例を示す図であり、本実施例は中間テキ
スト命令に複数の定義オペランドを持たせた実施例を示
している。
【0045】同図において、31は中間テキスト命令、
31a−1ないし31a−nは中間テキスト命令におけ
る定義オペランド、31bは参照オペランドであり、参
照オペランド31bには識別子32a,32bの格納位
置を示すポインタが格納され、定義オペランド31a−
1ないし31a−nには状態を表す識別子35−1ない
し35−nの格納位置を示すポインタが格納されてい
る。
【0046】また、31eは定義オペランドの個数表示
部、31fは参照オペランドの個数表示部である。本実
施例においては、上記のように、中間テキスト命令が持
つ定義オペランドの個数に対する制限をなくし、一つの
中間テキスト命令が幾つの定義・参照オペランドを持つ
かを中間テキスト命令の中に表示しているので、定義す
る変数、変化させる状態、リンケージ規約などの複数の
情報を定義オペランドが保持することができる。
【0047】図10は本発明の中間テキスト生成部にお
ける処理を示すフローチャートであり、同図は条件コー
ドを表す識別子を生成し定義オペランドとして中間命令
に与える処理を示しており、同図により中間テキスト生
成部における処理を説明する。ステップS1において、
構造解析部21で構造解析された原始プログラム中の命
令文について、中間テキスト命令生成表23を検索して
生成すべき中間命令を得る。ステップS2において、上
記のようにして得た命令が参照するオペランドを検索す
る。
【0048】ステップS3において、命令が条件コード
を変化させるか否かを判別し、条件コードを変化させる
場合には、ステップS4に行き、条件コードを表す識別
子を作り、定義オペランドとして命令に与える。すなわ
ち、第1ないし第7の実施例に示した手法により、中間
テキスト命令の定義オペランドに条件コードを表す識別
子を作る。
【0049】また、命令が条件コードを変化させない場
合には、ステップS5に行き、テンポラリ変数を表す識
別子を作り、定義オペランドとして命令に与える。図1
1は本発明の中間テキスト生成部において生成された中
間テキスト命令に対する最適化処理の一例を示す図であ
り、同図は、減算命令と比較命令を融合させる最適化処
理を示している。
【0050】同図のステップR1において、中間テキス
ト命令が減算命令か否かを判別し、演算命令でない場合
には、終了する。また減算命令の場合には、ステップR
2に行き、当該オペランドと同じ参照オペランドを持つ
比較命令を探索する。ステップR3において、そのよう
な比較命令があったか否かを判別し、無い場合には終了
する。また、そのような比較命令がある場合には、ステ
ップR4に行き、特定の個数の識別子を保持できる構造
体を作り、減算命令の定義オペランドを第1要素、比較
命令の定義オペランドを第2要素とする。ついで、ステ
ップR5において、減算比較命令を新たに生成する。新
たに生成された命令の参照オペランドは元の減算・比較
命令と同じであり、定義オペランドは特定の個数の識別
子を保持できる構造体である。そして、新たに生成され
た減算比較命令の定義オペランドには、減算命令による
減算結果と、比較命令における比較結果が記録される。
【0051】図12は、図11と同様、本発明の中間テ
キスト生成部において生成された中間テキスト命令に対
する最適化処理の他の例を示す図であり、同図は加減・
論理演算命令と比較命令を融合させる最適化処理を示し
ている。同図のステップT1において、中間テキスト命
令が加減・論理演算命令か否かを判別し、加減・論理演
算命令でない場合には終了する。また加減・論理演算命
令の場合には、ステップT2に行き、演算命令の定義オ
ペランドと0を比較する命令を検索する。
【0052】ステップT3において、そのような比較命
令があったか否かを判別し、無い場合には終了する。ま
た、そのような比較命令がある場合には、ステップT4
に行き、特定の個数の識別子を保持できる構造体を作
り、演算命令の定義オペランドを第1要素、比較命令の
定義オペランドを第2要素とする。ついで、ステップT
5において、減算比較命令を新たに生成する。新たに生
成された命令の参照オペランドは元の演算命令と同じで
あり、定義オペランドは特定の個数の識別子を保持でき
る構造体である。
【0053】本発明においては、前記した実施例に示し
たように中間テキスト命令の定義オペランドに複数の値
を定義することができるので、図11、図12に示すよ
うに減算命令あるいは加減・論理演算命令と比較命令を
融合する最適化処理を行うことができ、最適化効果を促
進させることができる。なお、上記フローチャートにお
いては、特定の個数の識別子を保持できる構造体を用い
る実施例を示したが、第1ないし第7の実施例のうち中
間テキスト命令に複数の値を定義できる他の方法を用い
ることもできる。
【0054】図13は複素数を演算する中間テキスト命
令を示す図であり、同図(a)は従来の中間テキスト命
令を示し、(b)は本発明における中間テキスト命令を
示しており、31aないし31c,31a−1ないし3
1a−3は識別子である。従来においては、中間テキス
ト命令で複数の値を定義することができなかったので、
同図(a)に示すように、複素数に対する演算を実数
部、虚数部に分解して表現する必要があった。また、条
件コードを各中間テキスト命令に割り当てることができ
なかったので、前記したように、中間テキスト命令を移
動、複写あるいは削除してよいかを一つの中間テキスト
命令の検査だけで決定することができず、さらに、変数
の生死の検査は一つの中間テキスト命令の検査だけでな
く、同じ定義点を持つ中間命令をも考慮する必要があっ
た。
【0055】一方、本発明においては、中間テキスト命
令で複数の値を定義することができるので、同図(b)
に示すように、複素数演算の定義オペランドの識別子3
1a−1,31a−2,31a−3に、それぞれ実数
部、虚数部、および条件コードを割り当てることがで
き、複素数に対する演算を1命令で表現することができ
る。
【0056】
【発明の効果】以上説明したように、本発明は、中間テ
キスト命令の構造を、コンピュータの状態変化およびリ
ンケージ規約を個々の中間テキスト命令の定義オペラン
ド1aとして明示できるようにし、また、定義オペラン
ドに複数の値を保持することができるようにしたので次
の効果を得ることができる。 複素数の演算など、複数の変数を定義する演算を一
つの中間テキスト命令だけで表現することができるの
で、翻訳時間を短縮することができる。 原始プログラムにおける変数の定義点を中間テキス
ト命令が保持することができるので、テンポラリ変数の
生死の判断が容易となり、翻訳時間を短縮することがで
きる。 コンピュータの状態、リンケージ規約を中間テキス
トの中で明示的に表現することができるので、スケジュ
ーリングを容易にすることができ、翻訳時間を短縮する
ことができる。また、スケジューリング効率を向上させ
ることができるので、生成される機械語の実行速度を増
加させることができる。 条件コードを複数持つアーキテクチャのCPUに対
して、条件コードを一般のレジスタと同様の手段で効率
よく使用することができ、スケジューリング処理の可能
性を高めることができる。
【図面の簡単な説明】
【図1】本発明の原理図である。
【図2】本発明が適用されるコンパイラの構成を示す図
である。
【図3】本発明の第1の実施例を示す図である。
【図4】本発明の第2の実施例を示す図である。
【図5】本発明の第3の実施例を示す図である。
【図6】本発明の第4の実施例を示す図である。
【図7】本発明の第5の実施例を示す図である。
【図8】本発明の第6の実施例を示す図である。
【図9】本発明の第7の実施例を示す図である。
【図10】本発明における中間テキスト生成処理のフロ
ーチャートである。
【図11】減算命令と比較命令を融合させる最適化処理
のフローチャートである。
【図12】加減・論理演算と比較命令を融合させる最適
化処理のフローチャートである。
【図13】複素数を演算する中間テキスト命令を示す図
である。
【符号の説明】
1,31 中間テキスト
命令 1a,31a 定義オペラン
ド 1b,31c 状態変数 1c,31d 状態属性 2,32a,32b,35,36,61,71,81
識別子 21 構造解析部 22 中間テキスト
生成部 23 中間テキスト
命令生成表 24 最適化処理部 25 機械語生成部 3 リスト 31b 参照オペラン
ド 31e 定義オペラン
ド個数表示部 31f 参照オペラン
ド個数表示部 33,34 リスト・セル 4,41 配列 51 構造体
───────────────────────────────────────────────────── フロントページの続き (72)発明者 林 正和 神奈川県川崎市中原区上小田中1015番地 富士通株式会社内

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 原始プログラムを中間テキストに変換
    し、変換した中間テキストに対して最適化処理を行い機
    械語を生成する翻訳処理方法において、 演算の主作用として定義されるオペランド、および、副
    作用として定義されるコンピュータの状態変化、リンケ
    ージ規約を、中間テキストの個々の中間テキスト命令
    (1) の定義オペランドとして明示できるようにし、 上記中間テキスト命令(1) を用いて原始プログラムを中
    間テキストに変換することを特徴とする翻訳処理方法。
  2. 【請求項2】 複数の値を一つの中間テキスト命令(1)
    で定義できるようにしたことを特徴とする請求項1の翻
    訳処理方法。
  3. 【請求項3】 コンピュータの状態変化およびリンケー
    ジ規約を中間テキスト命令(1) の定義オペランドとして
    明示したことを特徴とする請求項2の翻訳処理方法。
  4. 【請求項4】 コンピュータの状態変化およびリンケー
    ジ規約を識別子(2)として表現したことを特徴とする請
    求項3の翻訳処理方式。
  5. 【請求項5】 中間テキスト命令(1) が定義する複数の
    定義オペランドの全てをリスト(3) でつなぐことによ
    り、複数の値を一つの中間テキスト命令(1) で定義でき
    るようにしたことを特徴とする請求項2または請求項3
    の翻訳処理方法。
  6. 【請求項6】 中間テキスト命令(1) が定義する複数の
    定義オペランドを配列(4) で保持することにより、複数
    の値を一つの中間テキスト命令(1) で定義できるように
    したことを特徴とする請求項2または請求項3の翻訳処
    理方法。
  7. 【請求項7】 原始プログラムを中間テキストに変換
    し、変換した中間テキストに対して最適化処理を行い機
    械語を生成する翻訳処理方法において、 個々の中間テキスト命令(1) に、その中間テキスト命令
    (1) の表す演算がコンピュータの状態を変化させたかど
    うかを表す状態属性(1c)と、変化した状態を表現する識
    別子を指すポインタ(1b)を設けて個々の中間テキスト命
    令(1) によりコンピュータの状態変化を明示できるよう
    にし、 上記中間テキスト命令(1) を用いて原始プログラムを中
    間テキストに変換することを特徴とする翻訳処理方法。
  8. 【請求項8】状態属性(1c)と、変化した状態を表現する
    識別子へのポインタ(1b)とを兼用したことを特徴とする
    請求項7の翻訳処理方法。
JP14584593A 1993-06-17 1993-06-17 翻訳処理方法 Expired - Fee Related JP3318051B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP14584593A JP3318051B2 (ja) 1993-06-17 1993-06-17 翻訳処理方法
US08/748,064 US6233732B1 (en) 1993-06-17 1996-11-12 Compiling system using intermediate codes to store a plurality of values

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP14584593A JP3318051B2 (ja) 1993-06-17 1993-06-17 翻訳処理方法

Publications (2)

Publication Number Publication Date
JPH07141192A true JPH07141192A (ja) 1995-06-02
JP3318051B2 JP3318051B2 (ja) 2002-08-26

Family

ID=15394434

Family Applications (1)

Application Number Title Priority Date Filing Date
JP14584593A Expired - Fee Related JP3318051B2 (ja) 1993-06-17 1993-06-17 翻訳処理方法

Country Status (2)

Country Link
US (1) US6233732B1 (ja)
JP (1) JP3318051B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3246438B2 (ja) * 1998-04-01 2002-01-15 日本電気株式会社 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体
US6523173B1 (en) * 2000-01-11 2003-02-18 International Business Machines Corporation Method and apparatus for allocating registers during code compilation using different spill strategies to evaluate spill cost
US6708288B1 (en) * 2000-10-31 2004-03-16 Hewlett-Packard Development Company, L.P. Compiler-based checkpointing for support of error recovery
US7810067B2 (en) * 2002-08-30 2010-10-05 Sap Aktiengesellschaft Development processes representation and management
US8079023B2 (en) * 2007-03-22 2011-12-13 Microsoft Corporation Typed intermediate language support for existing compilers
US8407680B2 (en) * 2008-12-16 2013-03-26 International Business Machines Corporation Operand data structure for block computation
JP5576605B2 (ja) * 2008-12-25 2014-08-20 パナソニック株式会社 プログラム変換装置およびプログラム変換方法
JP7163697B2 (ja) * 2018-09-28 2022-11-01 富士通株式会社 生成プログラム,情報処理装置及び生成方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4571678A (en) * 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
JPS62221037A (ja) 1986-03-20 1987-09-29 Fujitsu Ltd コンパイル方法
US4951195A (en) * 1988-02-01 1990-08-21 International Business Machines Corporation Condition code graph analysis for simulating a CPU processor
JPH0281137A (ja) 1988-09-19 1990-03-22 Hitachi Ltd 最適化コンパイラ及びコンパイル方法
US5313614A (en) * 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
IL100986A (en) * 1991-02-27 1997-01-10 Digital Equipment Corp Method for compiling code
US5339238A (en) * 1991-03-07 1994-08-16 Benson Thomas R Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph
US5307492A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation Mapping assembly language argument list references in translating code for different machine architectures
US5339428A (en) * 1991-09-04 1994-08-16 Digital Equipment Corporation Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register

Also Published As

Publication number Publication date
US6233732B1 (en) 2001-05-15
JP3318051B2 (ja) 2002-08-26

Similar Documents

Publication Publication Date Title
US6243864B1 (en) Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
US7571427B2 (en) Methods for comparing versions of a program
JP3318051B2 (ja) 翻訳処理方法
JP2801931B2 (ja) 論理設計処理装置および回路変換ルール翻訳装置ならびに回路変換ルール翻訳方法
US20060253271A1 (en) Method for facilitating transformation of multi-threaded process-oriented object code to event-based object code
EP3997593B1 (en) A streaming compiler for automatic adjoint differentiation
US10310823B2 (en) Program development support system and program development support software
JPH04205423A (ja) プログラム作成装置
JP2000122876A (ja) 情報処理装置
JPH03135630A (ja) 命令スケジューリング方式
JPH0561687A (ja) コンパイラの処理方式
JPH064348A (ja) プログラムデバッグ方式
JPH0128414B2 (ja)
JPS63132335A (ja) 計算機言語処理系の実行方式
Gebrewahid et al. Programming real-time image processing for manycores in a high-level language
JPH05120025A (ja) ソースプログラムのインライン展開方法
JPS62202264A (ja) ベクトル演算処理方式
JPH11238012A (ja) メモリアクセス一括化方法および記憶媒体
JPH0612259A (ja) コンパイラ処理方式
JPH04149738A (ja) プログラム最適化装置
JPH0950429A (ja) コンパイラにおけるポインタベクトル化システム
JPH0728691A (ja) ガーベージコレクション効率化方法
JPH02220181A (ja) 定型グラフィック作画最適化処理方法
JPH02308333A (ja) 論理型言語のコーディング方式
JPH04128936A (ja) プログラム実行環境切換え方式

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20020604

LAPS Cancellation because of no payment of annual fees