JPH05257708A - コンパイラ - Google Patents

コンパイラ

Info

Publication number
JPH05257708A
JPH05257708A JP8937892A JP8937892A JPH05257708A JP H05257708 A JPH05257708 A JP H05257708A JP 8937892 A JP8937892 A JP 8937892A JP 8937892 A JP8937892 A JP 8937892A JP H05257708 A JPH05257708 A JP H05257708A
Authority
JP
Japan
Prior art keywords
information
programmer
unit
compiler
input
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
JP8937892A
Other languages
English (en)
Inventor
Yushi Fukuchi
雄史 福地
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP8937892A priority Critical patent/JPH05257708A/ja
Publication of JPH05257708A publication Critical patent/JPH05257708A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 コンパイラの最適化部がコンパイル時にプロ
グラマからの情報を受け取ることにより、より効率の良
いオブジェクトコードを出力するようにする。 【構成】 コンパイラ2に、プログラマからの情報をコ
ンパイル時に受け取るためのプログラマ情報入力部26
を設け、コンパイル時にプログラマに対して、プログラ
マ情報の入力を促し、プログラマが情報を入力した場合
は、その情報を取り込み、最適化部23でその情報を利
用して最適化処理を行う。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明はソースプログラムをオ
ブジェクトプログラムにコンパイルするコンパイラに関
するものである。
【0002】
【従来の技術】図3は“プログラミング言語処理系”、
佐々政孝著、1989、岩波書店の16頁に示された構
成等による従来のコンパイラの構成を示すブロック図で
ある。図3において、1はソースプログラム、2はコン
パイラ、3はソースプログラム1をコンパイラ2により
コンパイルされたオブジェクトプログラムのオブジェク
トコードである。コンパイラ2は、ソースプログラム1
の字句及び構文を解析する字句解析・構文解析部21
と、この解析結果により中間語を生成する中間語生成部
22と、この中間語によりベクトル化や並列化などのよ
うな最適化処理を行う最適化部23と、の最適化処理結
果によりオブジェクトコード3を生成するコード生成部
24とを備えている。なお、ベクトル化コンパイラや並
列化コンパイラには、ベクトル化部や並列化部と呼ばれ
るモジュールもあるのだが、ここではそれらも、最適化
部23の一部として扱うこととする。
【0003】次に動作について説明する。コンパイラ2
にソースプログラム1が入力されると、コンパイラ2
は、字句解析・構文解析部21、中間語生成部22、最
適化部23、及びコード生成部24を用いてソースプロ
グラム1をコンパイルし、オブジェクトコード3を出力
する。この場合、コンパイラ2は、ソースプログラム1
に含まれる情報のみから、プログラム解析し、オブジェ
クトコード3を出力する。
【0004】ここで、例えば自動ベクトル化コンパイラ
で下記のlist 1のようなフォートランプログラム
をコンパイルする場合を考えてみる。 DO 10 I=1,100 A(I)=B(I)+C(I) D(I)=A(I−N) 10 CONTINUE list 1 コンパイラ2(自動ベクトル化コンパイラ)中の最適化
部23(ベクトル化部)は、このDOループがベクトル
化できるかどうかを判定して、ベクトル化できる場合は
ベクトル化したオブジェクトコードを出力し、ベクトル
化できなかった場合はスカラ実行用のオブジェクトコー
ドを出力する。list 1のプログラムの場合、変数
Nの値が正の値をとるか負の値をとるかによって、ベク
トル化できるかどうかが決まる。つまりNの値が正か負
かのどちらであるかがわかればベクトル化できると判定
され、ベクトル化されたオブジェクトコードが出力され
る。しかし、この例のように変数Nの値の正負がソース
コードを見ただけではコンパイル時にはわからず、実行
してみないと分からない場合は、コンパイラ2は正負ど
ちらの値も取り得るとしか判定できないため、このDO
ループはベクトル化できないと判定され、ベクトル化さ
れないオブジェクトコードが出力される。
【0005】しかし、変数Nの値の正負がソースコード
を見ただけではコンパイル時にはわからない場合でも、
もし、プログラマが変数Nの値はこのループ中では正の
値しかとらないということを知っていたとすると、何ら
かの方法でその情報をコンパイラに与えることによっ
て、list 1のループはベクトル化できるようにな
る。
【0006】
【発明が解決しようとする課題】従来のコンパイラは以
上のように構成されているため、プログラマからの情報
を得れば、より効率の良いオブジェクトコードを出力で
きる場合でも、プログラマからの情報を受け取る手段が
なかったため、最適化できる範囲が狭められていたとい
う問題点があった。
【0007】この発明は上記のような問題点を解消する
ためになされたもので、コンパイル時にプログラマから
の情報を受け取る手段を設け、より効率のよいオブジェ
クトコードを出力することができるコンパイラを得るこ
とを目的とする。
【0008】
【課題を解決するための手段】この発明に係るコンパイ
ラは、コンパイル時に、プログラマからの情報があれ
ば、より効率の良いオブジェクトコードを出力できる場
合に、プログラマに対して情報入力を促すメッセージを
出力し、これに応答してプログラマから与えられた情報
を入力するプログラマ情報入力部26と、その入力情報
を使用してコンパイル情報の最適化処理を行う最適化部
23と、その入力されたプログラマからの情報をソース
プログラム1のソースコード中にコンパイル情報として
書き込むプログラマ情報書き込み部27と、再コンパイ
ルするときにはそのコンパイル情報を読み出し最適化部
23での最適化処理に利用させるプログラマ情報読み込
み部25とを備えたものである
【0009】
【作用】プログラマ情報入力部26は、コンパイル時
に、プログラマからの情報があれば、より効率の良いオ
ブジェクトコードを出力できる場合に、プログラマに対
して情報入力を促すメッセージを出力し、これに応答し
てプログラマから与えられた情報を入力する。最適化部
23は、その入力情報を使用してコンパイル情報の最適
化処理を行う。プログラマ情報書き込み部27は、その
入力されたプログラムマからの情報をソースプログラム
1のソースコード中にコンパイル情報として書き込む。
プログラマ情報読み込み部25は、再コンパイルすると
きにはそのコンパイル情報を読み出し最適化部23での
最適化処理に利用させる。
【0010】
【実施例】図1はこの発明の一実施例に係るコンパイラ
の構成を示すブロック図である。図1において、図3に
示す構成要素に対応するものには同一の符号を付し、そ
の説明を省略する。図1のコンパイラ2内において、2
6はコンパイル時に、プログラマからの情報があれば、
より効率の良いオブジェクトコードを出力できる場合
に、プログラマに対して情報入力を促すメッセージを出
力し、これに応答してプログラマから与えられた情報を
入力するプログラマ情報入力部、27はその入力された
プログラマからの情報をソースプログラム1のソースコ
ード中にコンパイル情報として書き込むプログラマ情報
書き込み部、25は再コンパイルするときにはそのコン
パイル情報を読み出し最適化部23での最適化処理に利
用させるプログラマ情報読み込み部である。
【0011】ベクトル化コンパイラや並列化コンパイラ
には、ベクトル化部や並列化部と呼ばれるモジュールも
あるのだが、ここではそれらも、最適化部23の一部と
して扱うこととする。プログラマ情報入力部26は、最
適化部23における最適化処理時に、プログラマからの
情報があれば、より良いオブジェクトコードが出力でき
るパターンを判定し、そのパターンにあてはまる場合
は、プログラマに対して情報の入力を促すメッセージを
出力し、これに応答してプログラマが情報を入力した場
合はその情報を受け取り、最適化部23に渡す。プログ
ラマ情報書き込み部27はプログラマ情報入力部26が
受け取ったプログラマ情報をソースプログラム1に書き
出す。プログラマ情報読み込み部25は、プログラマ情
報書き込み部27がソースプログラム1に書き出したプ
ログラマ情報を含むプログラムを再コンパイルする際に
そのプログラマ情報をソースプログラム1から読み込
み、その情報を最適化部23に渡す。
【0012】図2は、プログラマ情報入力部26の構成
を示すブロック図である。図2において261は、最適
化部23での最適化処理時に、プログラマからの情報が
あれば、より良いオブジェクトコードが出力できるパタ
ーンを判定するプログラマ入力情報パターン判定部、2
62は、プログラマ入力情報パターン判定部261でプ
ログラマ情報を受け取るパターンと判定された時に、プ
ログラマに対して情報の入力を促すメッセージを出力す
るプログラマ情報要求部、263は、プログラマ情報要
求部262のプログラマ情報入力要求メッセージに対し
て、プログラマが情報を入力した場合にその情報を受け
取り、最適化部23にその情報を渡すプログラマ情報受
け取り部である。
【0013】次にこの実施例の動作について説明する。
この実施例におけるコンパイラは、プログラマからの情
報があれば、より効率の良いオブジェクトコードが得ら
れる場合には、コンパイル時にプログラマ(ユーザー)
から情報を受け取り、その情報を利用して最適化を行う
ように動作する。ここで、従来例の場合と同じlist
1のフォートランプログラムをコンパイルする場合を
考える。コンパイラ2(自動ベクトル化コンパイラ)
は、このDOループがベクトル化できるかどうかを判定
して、ベクトル化できる場合はベクトル化したコードを
出力し、ベクトル化できなかった場合はスカラ実行用の
コードを出力する。list 1のプログラムの場合、
変数Nの値が正の値を取るか負の値をとるかによって、
ベクトル化できるかどうかが決まる。つまりNの値が正
か負かどちらかがわかればベクトル化できると判定さ
れ、ベクトル化されたコードが出力される。しかし、変
数Nの値の正負がソースコードを見ただけではコンパイ
ル時にはわからず、実行してみないとわからない。しか
し、このプログラムを書いたプログラマは変数Nが正負
どちらかの値しかとらないと知っているかもしれない。
【0014】この場合、プログラムマ情報入力部26内
のプログラマ入力情報パターン判定部261において
は、このDOループはプログラマ情報を受け取れば、よ
り効率の良いオブジェクトコードが出力できるパターン
だと判定する。プログラマ情報要求部262はプログラ
マ情報の入力を促すメッセージ、例えば、次のようなメ
ッセージを出力する。 DO loop 10内のNの値は以下のどれですか? (1)正の値、(2)負の値、(3)正負どちらの値も
取り得る (1),(2),(3)のどれかを入力して下さい。 それに対して、プログラマは(1),(2),(3)の
いずれかの値を入力する。プログラマが(1)を入力し
たとすると、プログラマ情報受け取り部263が、その
情報を受け取り、最適化部(ベクトル化部)23に渡
す。最適化部23では、DOループ10の中では、変数
Nの値は正の値しかとらないということがわかったた
め、ベクトル化可能なループであると判定し、ベクトル
化されたコードを出力する。
【0015】また、プログラマ情報受け取り部263
は、このプログラマ情報を例えば下記のlist 2の
ように、ソースプログラム1中に書き出す。 C PINFO N>0 DO 10 I=1,100 A(I)=B(I)+C(I) D(I)=A(I−N) 10 CONTINUE list 2 フォートランでは最初の文字がCで始まる行はコメント
行としてみられるので、1行目は通常のコンパイラ2で
コンパイルするときは、コメント文になるが、このコン
パイラ2では、C PINFOで始まる行は、プログラ
マ情報として読み込むようにしておく。
【0016】このプログラムを再コンパイルする際に
は、プログラマ情報読み込み部25が、この情報をプロ
グラマ情報として読み込み、最適化部23でこの情報を
利用できるようになる。そのため、2度目のコンパイル
時には、このループに関しては、プログラマ情報を受け
取る必要はなくなる。
【0017】以上説明したように本実施例のコンパイラ
は、最適化部23におけるプログラム解析時に、プログ
ラマ入力情報パターン判定部261が、プログラマから
の情報を受け取れば、より効率の良いオブジェクトコー
ドが出力できると判定した場合は、プログラマ情報要求
部262がプログラマに対して情報の入力を促すメッセ
ージを出力し、プログラマがその要求に対して情報を入
力した場合は、プログラマ情報受け取り部263がその
情報を受け取り、最適化部23にその情報を渡し、最適
化部23はその情報をもとに効率の良いコードを出力
し、またプログラマから入力された情報を、プログラマ
情報書き込み部27が、ソースプログラム1に書き込
み、同じプログラムを再コンパイルする時には、プログ
ラマ情報読み込み部25がその情報を読み込み、最適化
部23がそのプログラマ情報を使用して最適化処理す
る。
【0018】
【発明の効果】以上のように本発明によれば、コンパイ
ル時に、プログラマからの情報があれば、より効率の良
いオブジェクトコードを出力できる場合に、プログラマ
に対して情報の入力を促すメッセージを出力し、プログ
ラマがその要求に対して情報を入力した場合は、その情
報を受け取り、その情報を使用して最適化処理を行い、
また、再コンパイルするときはその情報を利用して最適
化処理するように構成したので、ソースプログラムに含
まれる情報以外に、プログラマからの情報を使用してコ
ンパイルすることができ、より効率の良いオブジェクト
コードを得ることができるという効果がある。
【図面の簡単な説明】
【図1】この発明の一実施例に係るコンパイラの構成を
示すブロック図である。
【図2】図1中のプログラム情報入力部の構成を示すブ
ロック図である。
【図3】従来のコンパイラの構成を示すブロック図であ
る。
【符号の説明】
1 ソースプログラム 2 コンパイラ 3 オブジェクトコード 23 最適化部 25 プログラマ情報読み込み部 26 プログラマ情報入力部 27 プログラマ情報書き込み部

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムをオブジェクトプログ
    ラムにコンパイルするコイパイラにおいて、コンパイル
    時に、プログラマからの情報があれば、より効率の良い
    オブジェクトコードを出力できる場合に、プログラマに
    対して情報入力を促すメッセージを出力し、これに応答
    してプログラマから与えられた情報を入力するプログラ
    マ情報入力部と、その情報を使用してコンパイル情報の
    最適化処理を行う最適化部と、その入力されたプログラ
    マからの情報をソースプログラムのソースコード中にコ
    ンパイル情報として書き込むプログラム情報書き込み部
    と、再コンパイルするときにはそのコンパイル情報を読
    み出し上記最適化部での最適化処理に利用させるプログ
    ラム情報読み込み部とを設けたことを特徴とするコンパ
    イラ。
JP8937892A 1992-03-13 1992-03-13 コンパイラ Pending JPH05257708A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8937892A JPH05257708A (ja) 1992-03-13 1992-03-13 コンパイラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8937892A JPH05257708A (ja) 1992-03-13 1992-03-13 コンパイラ

Publications (1)

Publication Number Publication Date
JPH05257708A true JPH05257708A (ja) 1993-10-08

Family

ID=13969022

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8937892A Pending JPH05257708A (ja) 1992-03-13 1992-03-13 コンパイラ

Country Status (1)

Country Link
JP (1) JPH05257708A (ja)

Similar Documents

Publication Publication Date Title
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US5606697A (en) Compiler system for language processing program
CN104536898B (zh) C程序并行区域的检测方法
US20050028141A1 (en) Compilation of unified parallel C-language programs
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
JP3640081B2 (ja) Mpiプログラムのコンパイルにおける最適化方法
JPH11167492A (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JPH05257708A (ja) コンパイラ
CN118092931A (zh) 基于指导语句的函数向量化方法及系统
JP3018783B2 (ja) コンパイル方式
JP2638278B2 (ja) コンパイル処理方式
JPH02211542A (ja) モジュール管理情報算出方式
Paleri et al. An Environment for automatic generation of code optimizers
JPH10326193A (ja) インライン展開関数の最適化のためのコンパイル方法
JPH0535494A (ja) 高級プログラム言語の対話型最適化コンパイル方式
JP3167386B2 (ja) プログラム自動並列化方法
JPH0795272B2 (ja) コンパイル方法
JPH1139155A (ja) コンパイル時の情報収集による実行時性能の静的解析方法
Azevedo Correct Translation of Imperative Programs to Single Assignment Form
JPH0126091B2 (ja)
JPS63186333A (ja) 局所的分岐命令に対する命令のスケジユ−リング処理方式
JPH03144830A (ja) 並列処理方式
JPH04184540A (ja) 並列化コンパイル方式
JPH04364537A (ja) 並列処理用プログラム最適化方法、装置およびコンパイラ
JPS6398031A (ja) 添字式の値検査方式