JPH03273340A - ループ内レジスタ割付け方式 - Google Patents

ループ内レジスタ割付け方式

Info

Publication number
JPH03273340A
JPH03273340A JP7276190A JP7276190A JPH03273340A JP H03273340 A JPH03273340 A JP H03273340A JP 7276190 A JP7276190 A JP 7276190A JP 7276190 A JP7276190 A JP 7276190A JP H03273340 A JPH03273340 A JP H03273340A
Authority
JP
Japan
Prior art keywords
loop
resistor
procedure
code
global
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
JP7276190A
Other languages
English (en)
Inventor
Kiyoshi Otaki
大瀧 潔
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP7276190A priority Critical patent/JPH03273340A/ja
Publication of JPH03273340A publication Critical patent/JPH03273340A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は原始プログラムを人力して目的コードを出力す
る言語処理袋2に関し、特に、ループ内の目的コードを
効率的なものとすることにより、目的コード全体の実行
効率を高いものにすることができるループ内レジスタ割
付は方式に関する。
〔従来の技術〕
従来の言語処理装置は、例えば、1977年にアジソン
・ウニスリー・パブリッシング・カンパニーより発行さ
れたエイ・ブイ・エイホ(A、 V。
Ahao)及びジェイ・デイ・ウルマン(J、D。
LJ I 1ma n)著作の[コンパイラ設計の原理
・(Principles  of  Compile
rDesign)Jに記載されているように、予め中間
コードを利用して大域的に固定する大域レジスタの数を
見積っておき、出現回数の多いデータ(定数、変数、ア
ドレス等)から優先的に大域しジスタを割付けるように
している。
〔発明が解決しようとする課題〕
上述したように、従来は出現回数の多いデータから優先
的に大域レジスタを割付けるようにしているため、次の
ような問題点があった。即ち、ループに含まれるデータ
は出現回数が少なくても実行時の使用回数が多くなる場
合があり、このような場合、出現回数に基づいて大域レ
ジスタの割付けを行なったのでは、非効率的な目的コー
ト′を待ったループが多数回実行されることになり、全
体的な実行効率が悪くなるという問題があった。
本発明の目的は、目的コード全体としての実行効率を向
上させることにある。
〔課題を解決するための手段〕
本発明は上記目的を達成するため、 原始プログラムを入力し、目的コードを生成する言語処
理装置に於いて、 前記原始プログラムに含まれるループが重要ループであ
るか否かを判定するループ重要度決定手段と、 該ループ重要度決定手段が重要ループであると判定した
ループ内で参照されるデータを示すループ内要求レジス
タ情報を出力するループ内要求レジスタ見積り手段と、 該ループ内要求レジスタ見積り手段が出力したループ内
要求レジスタ情報と翻訳処理の中間処理で生成される中
間コードとに基づいて大域レジスタの割付けを行なう大
域レジスタ固定手段とを設けたものである。
〔作 用〕
ループ重要度決定手段は原始プログラムに含まれている
ループが重要ループであるか否かを判定する。ループ内
要求レジスタ見積り手段はループ重要度決定手段が重要
ループであると判定したループで参照されるデータを示
すループ内要求レジスタ情報を出力する。大域レジスタ
固定手段はループ内要求レジスタ見積り手段が出力した
ループ内要求レジスタ情報と中間処理で生成される中間
コードとに基づいて大域レジスタの割付けを行なう。
〔実施例〕
次に本発明の実施例について図面を参照して詳細に説明
する。
第1図は本発明の実施例のプロ、り図であり、原始プロ
グラム111を入力として目的コード114を生成する
言語処理装置101は、原始プログラム111を字句要
素に分解する字句解析部102と、字句解析結果に基づ
いて構文解析を行なう構文解析部103と、構文解析結
果に基づいて中間コード112を生成する中間コード生
成部104と、中間コード生成部104が生成した中間
コードを効率が良くなるように修正するコード最適化部
105と、コード最適化部105によって修正された中
間コード112がら機械語命令を生成して目的コード1
14とするコード生成部106とから構成されている。
コード生成部106はループ重要度決定手段107と、
ループ内要求レジスタ見積り手段10Bと、ループ内要
求レジスタ情報による大域レジスタ固定手段109と、
レジスタ割当て手段110とを含んでおり、これらの手
段を用いて従来から行なっている処理の前に以下の処理
を行なう。
先ず、ループ重要度決定手段107を用いて中間コード
112からループ部分を取り出し、取り出したループが
原始プログラム111に於いて重要なループであるか否
かをループ終了条件、ループ回数、ループ構造に基づい
て判定する1次いで、ループ内要求レジスタ見積り手段
108を用いて、ループ重要度決定手段107が重要で
あると判定したループの外部データの参照、定数の参照
を解析し、参照するデータを示すループ内要求レジスタ
情報113を出力する。その後、大域レジスタ固定手段
109を用いて、従来から行なわれている大域レジスタ
の割付は処理を行なうと共に、ループ内要求レジスタ情
報113と中間コード112とを用いた重要なループを
考慮した大域レジスタの割付は処理を行ない、画処理の
処理結果に基づいて大域レジスタの割付けを決定する。
この後、レジスタ割当て手段110により従来から行な
われているレジスタ割当て処理が行なわれ、以後、従来
と同様の処理が行なわれ、目的コード114が生成され
る。
第2図はループ重要度決定手段107の処理例を示す流
れ図、第3図はループ内要求レジスタ見積り手段108
の処理例を示す流れ図、第4図は大域レジスタ固定手段
109の処理例を示す流れ図であり、以下各図を参照し
て各手段の動作を詳細に説明する。
第2図に示すようにループ重要度決定手段107は手続
き201に於いて、中間コード112からループ部分を
1つ取り出し、次の手続き202に於いて、ループ部分
を全て取り出したか否かを判断する。ループ部分を全て
取り出したと判断した場合は、ループ重要度決定手段1
07はその処理を終了し、取り出していないと判断した
場合は手続き203の処理を行なう1手続き203では
手続き201で取り出した中間コードを解析し、その終
了条件を得る処理を行なう。ここで、ループの終了条件
はループの形態により、様々なものが存在する0次の手
続き204では手続き203で得た終了条件が静的であ
るか、即ちループ回数が静的か否かを判断する。そして
、終了条件が静的であると判断した場合は手続き205
の処理を行ない、静的でないと判断した場合は重要ルー
プでないと判定しく手続き209)、手続き201に戻
る。
手続き205では手続き201で取り出したループが目
的コードに大きな影響を及ぼすか否かを判断するために
、ループ回数が所定回数(例えば10回)以上であるか
否かを判断する。そして、所定回数未満であると判断し
た場合はそのループが重要なループでないと判断しく手
続き209)、手続き201に戻る。また、所定回数以
上であると判断した場合は、中間コード112を解析し
て手続き201で取り出したループの構造を得る。
次の手続き207では手続き201で取り出したループ
がその内部にループを含む複雑な構造を有するループか
否かを判断する。そして、手続き207に於いてループ
内にループを有する複雑な構造を有するループであると
判断した場合は、重要ループでないと判定しく手続き2
09)、手続き201に戻る。また、ループ内にループ
を含まないと判断した場合は、重要ループであると判定
しく手続き208)、中間コード112の上記ループの
開始を示す部分を重要ループの開始を示す中間コードに
変更しく手続き210)、その後、手続き201に戻る
ループ内要求レジスタ見積り手段108は第3図に示す
ように、手続き301に於いて、中間コード112から
重要ループ部分を1つ取り出し、部分的な中間コード3
20を作り出す0次の手続き302では全ての重要ルー
プ部分を取り出したか否かを判断し、重要ループ部分を
全て取り出したと判断した場合は、ループ内要求レジス
タ見積り手段108はその処理を終了し、取り出してい
ないと判断した場合は手続き303の処理を行なう0手
続き303では部分的な中間コード320の先頭から中
間コードを1つ取り出し、次の手続き304では取り出
した中間コードが他のプログラム中のデータを参照する
外部データ参照の中間コードか否かを判断する。
そして、手続き304に於いて外部データ参照の中間コ
ードであると判断した場合は、その外部データがループ
内で既に参照されたか否かを判断する(手続き305)
。そして、参照されていないと判断した場合は、上記外
部データを示すループ内要求レジスタ情報(例えば、外
部データを含むプログラム名と外部データのデータ名と
から構成される)113を出力し、その後、中間コード
320から次の中間コードを1つ取り出す(手続き30
6)、また、参照されていると判断した場合は手続き3
10の処理を行なう。
また、手続き304に於いて外部データ参照の中間コー
ドでないと判断された場合は、手続き307に於いて定
数参照の中間コードか否かを判断する。そして、定数参
照の中間コードでないと判断した場合は手続き310の
処理を行ない、定数参照の中間コードであると判断した
場合は、その定数が既にループ内で参照されているか否
かを判断する(手続き308)、そして、参照されてい
ないと判断した場合は上記定数を示すループ内要求レジ
スタ情報(例えば、上記定数の値)113を出力した後
(手続き309)、手続き310の処理を行ない、参照
されていると判断した場合は手続き310の処理を行な
う。
手続き310で次の中間コードを取出すと、ループ内要
求レジスタ見積り手段108は、中間コード320の全
てに対して上述した処理を行なったか否かを判断する(
手続き311)、そして、全てに対して行なっていない
と判断した場合は、手続き304の処理に戻り、全てに
対して行なっていると判断した場合は手続き301の処
理に戻る。
大域レジスタ固定手段109は第4図の流れ図に示すよ
うに、手続き401に於いてループ内要求しジスタ情@
113を取り出し、手続き4.02に於いてループ内要
求レジスタ情報113と中間コード112とから重要ル
ープを考慮した大域レジスタの割付は見積り情報を作成
する。
手続き402の処理の一例を具体的に説明すると、先ず
、ループ内要求レジスタ情報113に値が含まれている
定数、プログラム名及びデータ名が含まれている外部デ
ータの中から原始プログラム111のループ以外の部分
でも使用されている定数、外部データを抽出する0次い
で、抽出した定数、外部データの中から定数或いは外部
データを1つ選び出し、定数を選び出した場合はレジス
タ数を+1し、外部データを選び出した場合はレジスタ
数を+2する。そして、レジスタ数が予め定められてい
る値にならない場合、即ち、割付は可能な大域レジスタ
が残っている場合は再び抽出した定数、外部データの中
から定数或いは外部データを1つ選び出し、前述したと
同様にレジスタ数を更新する。そして、レジスタ数が予
め定められた値になった場合は、それまでに選び出した
定数、外部データを示す大域レジスタ割付は見積り情報
(定数の場合はその値、外部データの場合はそれを含む
プログラムのプログラム名と外部データのデータ名)を
出力する。ここで、外部データを選び出した場合、レジ
スタ数を+2するようにしたが、その理由はデータ接近
を行なうには、外部データの含まれているプログラムの
先頭のアドレスを設定するレジスタと、プログラムの先
頭から上記外部データまでの変位を設定するレジスタが
必要になるからである。
続く、手続き403では中間コード112を利用した従
来から行なわれている大域レジスタの割付は処理を行な
い、続く手続き404では手続き402で作成されたレ
ジスタ割付は見積り情報と手続き403の処理結果とに
基づいて、例えばレジスタ割付は見積り情報に含まれて
いる大域レジスタを割当てるデータと手続き403の処
理結果に含まれている大域レジスタを割当てるデータと
に同一のものがある場合は同一の大域レジスタを割付け
る等の処理を行ない、固定する大域レジスタを決定する
〔発明の効果〕
以上説明したように、本発明は、ループを考慮し、重要
ループ内で参照するデータに大域レジスタの割付けを行
なうようにしたものであるので、多数回実行されるルー
プの内側の目的コードの実行効率がよくなり、結果とし
て目的コード全体の実行効率を良くすることができる効
果がある。
【図面の簡単な説明】
第1図は本発明の実施例のブロック図、第2図はループ
重要度決定手段の処理例を示す流れ図、 第3図はループ内要求レジスタ見積り手段の処理例を示
す流れ図及び、 第4図は大域レジスタ固定手段の処理例を示す流れ図で
ある。 図に於いて、101・・・言語処理装置、102・・・
字句解析部、103・・・構文解析部、104・・・中
間コード生成部、105・・・コード最適化部、10ε
・・・コード生成部、107・・・ループ重要度決定手
段、108・・・ループ内要求レジスタ見積り手段、1
09・・・大域レジスタ固定手段、110・・・レジス
タ割当て手段、111・・・原始プログラム、112,
320・・・中間コード、113・・・ループ内要求レ
ジスタ情報、114・・・目的コード。

Claims (2)

    【特許請求の範囲】
  1. (1)原始プログラムを入力し、目的コードを生成する
    言語処理装置に於いて、 前記原始プログラムに含まれるループが重要ループであ
    るか否かを判定するループ重要度決定手段と、 該ループ重要度決定手段が重要ループであると判定した
    ループ内で参照されるデータを示すループ内要求レジス
    タ情報を出力するループ内要求レジスタ見積り手段と、 該ループ内要求レジスタ見積り手段が出力したループ内
    要求レジスタ情報と翻訳処理の中間処理で生成される中
    間コードとに基づいて大域レジスタの割付けを行なう大
    域レジスタ固定手段とを含むことを特徴とするループ内
    レジスタ割付け方式。
  2. (2)前記ループ重要度決定手段はループ終了条件、ル
    ープ回数及びループ構造に基づいて重要ループか否かを
    判定することを特徴とする請求項1記載のループ内レジ
    スタ割付け方式。
JP7276190A 1990-03-22 1990-03-22 ループ内レジスタ割付け方式 Pending JPH03273340A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7276190A JPH03273340A (ja) 1990-03-22 1990-03-22 ループ内レジスタ割付け方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7276190A JPH03273340A (ja) 1990-03-22 1990-03-22 ループ内レジスタ割付け方式

Publications (1)

Publication Number Publication Date
JPH03273340A true JPH03273340A (ja) 1991-12-04

Family

ID=13498671

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7276190A Pending JPH03273340A (ja) 1990-03-22 1990-03-22 ループ内レジスタ割付け方式

Country Status (1)

Country Link
JP (1) JPH03273340A (ja)

Similar Documents

Publication Publication Date Title
US6249910B1 (en) Apparatus and method for incrementally update static single assignment form for cloned variable name definitions
JP2003196106A (ja) プログラム変換方法、コンピュータ装置及びプログラム
US10013244B2 (en) Apparatus and method to compile a variadic template function
US5404531A (en) Method and apparatus for compiler processing on program related to data transfer and calculation, and method of managing memory
US5815716A (en) Method for supporting multiple call interface conventions for computer programs using directives
JPH08263299A (ja) プログラム変換方法
JPH03273340A (ja) ループ内レジスタ割付け方式
US6898787B2 (en) Method and apparatus for ordered predicate phi in static single assignment form
JPH06202875A (ja) インライン展開による最適化を行うコンパイラ
JPH0667871A (ja) プログラム自動更新方式
JP3082767B2 (ja) 翻訳リスト出力制御装置
JPH0635714A (ja) プログラムの最適化方式
JP3566602B2 (ja) コンパイル方法、および、コンパイル用プログラムを記録した記録媒体
JP3167386B2 (ja) プログラム自動並列化方法
JP2797777B2 (ja) 言語処理装置
JPH0512033A (ja) 並列化コンパイル方式
JPH117380A (ja) マルチプラットフォーム対応プログラム編集方式
CN115373689A (zh) 基于llvm的编译优化方法、装置、设备及介质
JP2001325110A (ja) コンパイラ装置及びそのインライン展開方式
JPH05298117A (ja) 定数を引数とする手続きの最適化方式
JPH05204699A (ja) デバッグ時識別子探索方式
JPH11175350A (ja) ソースプログラム解析装置
JPH03164835A (ja) インタプリタ型言語処理系における大域変数処理のコンパイル方法
JPH0561687A (ja) コンパイラの処理方式
JPH0833824B2 (ja) 翻訳処理装置における番地割付処理方式