JPH02236638A - レジスタ割付け管理方式 - Google Patents

レジスタ割付け管理方式

Info

Publication number
JPH02236638A
JPH02236638A JP5642389A JP5642389A JPH02236638A JP H02236638 A JPH02236638 A JP H02236638A JP 5642389 A JP5642389 A JP 5642389A JP 5642389 A JP5642389 A JP 5642389A JP H02236638 A JPH02236638 A JP H02236638A
Authority
JP
Japan
Prior art keywords
register
virtual
real
register allocation
registers
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
JP5642389A
Other languages
English (en)
Inventor
Toshiaki Jinno
神野 俊昭
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP5642389A priority Critical patent/JPH02236638A/ja
Publication of JPH02236638A publication Critical patent/JPH02236638A/ja
Pending legal-status Critical Current

Links

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、高級言語のコンパイラの実現方式に係り,特
に、コンパイラが出力する目的プログラムの実行効率を
高める上で決定的な役割を担うレジスタの割付け方式に
関する。
〔従来の技術〕
従来、レジスタ割付け方式については、コンパイラにお
けるコード生成の一技術分野として研究され、エイホ,
セツテイ,ウルマン著コンパイラズ・プリンシプルズ,
テクニックス アンド ツールズ(アデイソンウエズレ
ー社刊,1986年)の第541頁から第546頁(A
.V.Aho,R.Sethi,and J.D.Ul
lman : Co+apilers−Princip
les,Techniques and Tools,
Addison−Veslsy, 1986,pp.5
41− 546)にその研究成果がまとめられている.
〔発明が解決しようとする課題〕 従来のレジスタ割付け方式では、(1)対象計算機のレ
ジスタ・アーキテクチャに依存する部分と依存しない部
分との分離が明確でなく、そのために、対象計算機が変
更される都度,コンパイラのレジスタ割付け処理部を全
面的に改変しなければならないという問題があった.ま
た、(2)レジス夕割付け対象候補(原始プログラム中
で使用されている変数や、原始プログラムの中間表現中
に現われる計算結果を一時的に格納しておく一時変数)
の中から実際にレジスタを割付ける対象を選択したり,
同じレジスタを割付ける対象を決定するのに、試料錯誤
的なあるいはad−hoe的に手法を用いるために、目
的プログラムの実行効率が十分に向上し得ないという問
題があった.本発明の目的は、かかる問題点を解決し,
対象計算機の依存性が低く、かつ,目的プログラムの実
行効率が高いという2つの条件をともに満たすレジスタ
割付け方式を提示することにある.〔課題を解決するた
めの手段〕 上記目的を達成するために本発明においては次の手段を
用いる。
(1)仮想レジスタ概念の導入。
仮想レジスタは実際のレジスタを抽象化したもので、そ
の個数は無限個あるとする.各データ・アイテムへの仮
想レジスタの割付けの方法については実施例の項で述べ
る. (2)仮想レジスタ結合可能性概念の導入。
任意の仮想レジスタA,Bが結合可能であるとは、Aと
Bに同一の実レジスタを割付けることが可能であること
を示す。これは、原始プログラムを解析することによっ
て求められるもので,具体的な解析方法については実施
例の項で述べる.(3)仮想レジスタのプロフィツト指
数の導入.プロフィツト指数とは、各仮想レジスタに対
してそれを実レジスタに割付けることの望ましさの度合
を定量表現した値である。このプロフィツト指数は、仮
想レジスタの生存区間長く値の定義点から最終参照点ま
での区間長)、それを取り囲むループのネストの深さ等
により近似された使用頻度、それをメモリに割付けた場
合のアクセス・コストをパラメータとして含む計算式に
より求める.〔作用〕 前記の各手段は次の働きをする. (1)特定の対象計算機に依存しない仮想レジスタを導
入することによって、レジスタ割付けの過程は、仮想レ
ジスタ割付け(原始プログラム中のデータ・アイテムと
仮想レジスタの対応づけ)と実レジスタ割付け(仮想レ
ジスタと実レジスタの対応づけ)に分割でき、対象計算
機依存性は実レジスタ割付けのみに閉じ込められるので
,レジスタ割付けの異なる対象計算機向け展開が容易に
なる. (2)仮想レジスタ結合可能性に基づいて仮想レジスタ
への実レジスタ割付けを行うことによって,レジスタ間
あるいはレジスターメモリ間でのデータ転送が必要最小
限のものに限定されるので,目的プログラムの実行効率
の向上に資する.(3)プロフィツト指数は,その値が
大きい仮想レジスタに優先的に実レジスタを割付けるの
に使用される.それによって、仮想レジスタ(一般にそ
の個数は実レジスタの個数を越えるので、一部は実レジ
スタに、一部はメモリに割付けることが必要となる)の
うち、実レジスタに割付けるものと、メモリに割付ける
ものとの取捨選択が、定景的な基準で行えるようになる
ので、目的プログラムの実行時のレジスタの使われ方が
効率上最適化され、もって目的プログラムの実行効率向
上に資する。
〔実施例〕
本発明の実施例として、コンパイラにおけるレジスタ割
付け処理方法を,第1図から第6図までを用いて説明す
る.第1図は、レジスタ割付け処理の処理楕成図、第2
図はコンパイラの一般的な処理構成図である。第3図か
ら第6図までは、レジスタ割付け処理を説明するための
具体例を示した図である。
レジスタ割付け処理は、第2図に示すように、6段階か
ら構成される.第1段M(仮想レジスタ割付け)では、
原始プログラムの中間表現(ここでは木形式中間表現を
採用する)のデータ・ノード(ユーザ変数や計算結果を
一時的に格納するテンボラリ変数を表現するノード)に
対して,以下の条件が満たされるように仮想レジスタを
割付ける.(1)共通式を表現している全てのノードに
対しては同じ仮想レジスタを割付ける.(2)ユーザ変
数に対しては、まず、同じ変数であっても出現ノードが
異なれば異なる仮想レジスタを割付ける.次に、各変数
に対して定義一参照解析を行い、直接または間接の定義
一参照連鎖で結ばれる仮想レジスタ群を同じ仮想レジス
タで割付けし直す。
第4図は第3図に示す原始プログラムの本形式中間表現
である。ここで( )内に与えられた記号は仮想レジス
タ割付けの結果、各データ・ノードに割付けられた仮想
レジスタの記号名称である。
第2段階(結合可能性解析)では、任意の2つの仮想レ
ジスタを同じ実レジスタに割当てることが可能かどうか
を解析する.可能なとき、この2つの仮想レジスタは結
合されているという.解析対象とするのは演算による結
合性と代入による結合性である.前者は演算ノードとそ
の左子ノードに割付けられた仮想レジスタとおしを結合
させる.後者は代入文の両辺に相当するノードに割付け
られた仮想レジスタどおしを結合させる.解析結果は、
仮想レジスタをノード、結合の関係をアークとする無向
グラフ(B I NDグラフとよぶ)に表現する. 第5図は、第4図中の仮想レジスタに対するBINDグ
ラフを示す. 第3段階(生存区間解析)では,各仮想レジスタの生存
区間、すなわちその定義点から最後の参照点までの区間
を求める.定義点(参照点)は定義(参照)操作を行う
中間表現上のノード番号で表現する. 第4段階(干渉解析)では、仮想レジスタの干渉関係を
解析する.2つの仮想レジスタが干渉し合うとは、両者
の生存区間が共通部分を有する場合をいう.干渉し合う
仮想レジスタには同じ実レジスタを割当てることができ
ない.干渉解析の結果は、仮想レジスタをノードとし,
干渉し合うものとおしをアークで結ぶことによって無向
グラフ(INTFグラフとよぶ)に表現する.任意の2
つの仮想レジスタ間に干渉関係と結合関係が同時に存在
する場合は、結合関係を優先し、干渉関係を消滅させる
. 第6図は第4図中の仮想レジスタに対するINTFグラ
フを示す. 第5段階(プロフィツト指数計算)では、各仮想レジス
タのプロフィツト指数を計算する。計算式はコンパイラ
の利用環境によって変わりうるが、標準的には次式に従
って求める。
ここで, p (T) :仮想レジスタTのプロフィツト指数.f
(T):Tをメモリに割付けた場合の1回のアクセスに
要する時間. u(T):Tの使用頻度.実行時の使用頻度をコンパイ
ル時に正確に求めることは できないので,次式で近似する. n(σ):σを囲むループの数 C  :適当な正の整数 Ω(T): Tの生存区間長 第6段階(実レジスタ割付け)では,仮想レジスタから
実レジスタ(対象計算機に備わってぃる実際のレジスタ
)への対応づけを行う.実レジスタ割付けは、実レジス
タに割付けるべき仮想レジスタを選択する処理と、選択
された仮想レジスタに具体的に実レジスタを割当てる処
理に分かれる.前者の処理では、実レジスタの個数をn
としてINTFグラフがn一彩色可能かどうかを判定し
,n彩色可能でなければ、プロフィツト指数の最小の仮
想レジスタをメモリに割付けることとしてINTFグラ
フから当該仮想レジスタを除去する.これをINTFグ
ラフがn一彩色可能になるまで繰り返す.後者の処理で
は、こうして得られたINTFグラフのノード(仮想レ
ジスタ)に対して実レジスタを割当ててゆく.ただし.
 (1) INTFグラフのアームで結ばれているノー
ドどおしに同じ実レジスタを割当てない,(2)BIN
Dグラフのアークで結ばれているノードどおしには同じ
実レジスタを割当てる、という2つの条件を満たすよう
に実レジスタ割当てを行う。
第6図のINTFグラフに対して具体的に実レジスタ割
付けを行ってみる.このINTFグラフは3一彩色可能
で、2一彩色不可能であるから、実レジスタ数が3以上
の場合は、全ての仮想レジスタに実レジスタを割当てる
ことが可能である。
第5図のBINDグラフを考慮して、実レジスタ数3以
上の場合の実際の割当て例を示せば次のようになる. 仮想レジスタA,T.X,Zに対しては実レジスタRl
を.C,Yzに対してはR2をB,Y.に対してはRδ
を割当てる.その結果、第3図の原始プログラムに対す
る目的プログラムは次のようになる. ADD  Rz, RL  −  ’1’←A十C ;
 X←1゛C M P  # O e R a・・・ 
Y=Oか,BNE  L MOV  Rl,Ra  ・”  B←XL : M 
O V  R s p R x  ・・・Y ”− X
 冨Z ←’1・・・ この時点でBはR8 に、YはRzに%Z はRiに格納されて いる. 〔発明の効果〕 本発明によれば,コンパイラのレジスタ割付けを、対象
計算機のレジスタ・アーキテクチャに依存する部分と依
存しない部分とに明確に分離することができ,かつ依存
する部分を実レジスタ割付けの中にのみ閉じ込めること
ができるので、従来方式に比べ、機種非依存性を著しく
向上させることができ,これによって、複数の計算機に
コンパイラを実現する場合の作成労力を軽減させつる効
果がある.さらに、レジスタ割付けに原始プログラムの
特性を反映した定量的な尺度を導入できるので効率のよ
いレジスタ割付けが可能となり,これによって目的プロ
グラムの実行効率を従来方式に比べ大幅に向上させるこ
とができる。
【図面の簡単な説明】
第1図は、本発明の1実施例としてのコンパイラにおけ
るレジスタ割付け処理方法の説明図、第2図は本発明が
適用されるコンパイラの処理構成図,第3図は原始プロ
グラムの一例を示す図,第4図は第3図の中間表現なら
びに仮想レジスタ割付け状況を示す説明図,第5図は第
4図に対するBINDグラフ(仮想レジスタ結合可能性
グラフ)を示す図、第6図は第4図に対するINTFグ
ラフ(仮想レジスタ干渉関係グラフ)を示す図である. 1・・・木形式中間表現におけるノード、2・・・仮想
レジスタ、3・・・結合可能の関係を表すアーク、4・
・・干渉関係を表すアーク. 蕗 図 葛 図 X:二Arc; IF  Y二0 丁HEN  B:二X ゜ノ ’Y’.=X; 2:二A十〇) 纂 図 イ及杷しジヌタ 第2 図 V ■ Z δ 図 A C 寸梗開孫

Claims (1)

  1. 【特許請求の範囲】 1、コンパイラのコード生成処理におけるレジスタ割付
    け方式において、特定の対象計算機には依存しない仮想
    レジスタの概念を導入し、レジスタ割付けの過程を、原
    始プログラムの中間表現中のデータ・アイテムを仮想レ
    ジスタに割当てる仮想レジスタ割付けと、仮想レジスタ
    を対象計算機の実レジスタに割当てる実レジスタ割付け
    とに分離したことを特徴とするレジスタ割付け管理方式
    。 2、任意の2つの仮想レジスタを同一の実レジスタに割
    付けられる可能性を表す仮想レジスタ結合可能性の概念
    を導入し、結合可能な仮想レジスタを同一実レジスタに
    割付けることによつて、実レジスタ間の冗長なデータ転
    送を抑止し、もつて目的プログラム効率を向上させるこ
    とを特徴とする請求項第1項記載のレジスタ割付け管理
    方式。 3、仮想レジスタのプロフイツト指数、すなわち、各仮
    想レジスタに対しそれを実レジスタに割当てることの望
    ましさの度合を定量表現した値を、仮想レジスタの生存
    区間長、近似的使用頻度、メモリに割付けた場合のアク
    セス・コストを含むパラメータを用いて求め、それを用
    いて実レジスタに割当てるべき仮想レジスタの選択を定
    量的に行えるようにしたことを特徴とする請求項第1項
    記載のレジスタ割付け管理方式。 4、レジスタ割付けを、仮想レジスタ割付け、結合可能
    性解析、生存区間解析、干渉解析、プロフイツト指数計
    算、実レジスタ割付けの6つの実行ステップで構成し、
    これらを順次実行してゆくことにより実現できるように
    したことを特徴とする請求項第1項記載のレジスタ割付
    け管理方式。
JP5642389A 1989-03-10 1989-03-10 レジスタ割付け管理方式 Pending JPH02236638A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5642389A JPH02236638A (ja) 1989-03-10 1989-03-10 レジスタ割付け管理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5642389A JPH02236638A (ja) 1989-03-10 1989-03-10 レジスタ割付け管理方式

Publications (1)

Publication Number Publication Date
JPH02236638A true JPH02236638A (ja) 1990-09-19

Family

ID=13026691

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5642389A Pending JPH02236638A (ja) 1989-03-10 1989-03-10 レジスタ割付け管理方式

Country Status (1)

Country Link
JP (1) JPH02236638A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04139578A (ja) * 1990-09-29 1992-05-13 Fujitsu Ltd ベクトルレジスタ割付方式
JPH05108373A (ja) * 1991-10-18 1993-04-30 Matsushita Electric Ind Co Ltd 資源割り付け装置
JP2000284968A (ja) * 1999-03-31 2000-10-13 Toshiba Corp コンパイル方法及びコンパイラ装置
JP2002527815A (ja) * 1998-10-10 2002-08-27 ヴィクトリア・ユニバーシティ・オブ・マンチェスター プログラムコード変換方法

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04139578A (ja) * 1990-09-29 1992-05-13 Fujitsu Ltd ベクトルレジスタ割付方式
JPH05108373A (ja) * 1991-10-18 1993-04-30 Matsushita Electric Ind Co Ltd 資源割り付け装置
JP2002527815A (ja) * 1998-10-10 2002-08-27 ヴィクトリア・ユニバーシティ・オブ・マンチェスター プログラムコード変換方法
JP2010198628A (ja) * 1998-10-10 2010-09-09 Internatl Business Mach Corp <Ibm> プログラムコード変換方法
JP2010198629A (ja) * 1998-10-10 2010-09-09 Internatl Business Mach Corp <Ibm> プログラムコード変換方法
JP2010211816A (ja) * 1998-10-10 2010-09-24 Internatl Business Mach Corp <Ibm> プログラムコード変換方法
JP2010225162A (ja) * 1998-10-10 2010-10-07 Internatl Business Mach Corp <Ibm> プログラムコード変換方法
US8006237B2 (en) 1998-10-10 2011-08-23 International Business Machines Corporation Program code conversion
US8037461B2 (en) 1998-10-10 2011-10-11 International Business Machines Corporation Program code conversion
JP2000284968A (ja) * 1999-03-31 2000-10-13 Toshiba Corp コンパイル方法及びコンパイラ装置

Similar Documents

Publication Publication Date Title
US6173444B1 (en) Optimizing compilation of pointer variables in the presence of indirect function calls
EP0533813B1 (en) Method for representing scalar data dependencies for an optimizing compiler
US5889999A (en) Method and apparatus for sequencing computer instruction execution in a data processing system
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
JP3311462B2 (ja) コンパイル処理装置
Rauchwerger et al. Run-time methods for parallelizing partially parallel loops
US6381739B1 (en) Method and apparatus for hierarchical restructuring of computer code
US6922829B2 (en) Method of generating profile-optimized code
US6072952A (en) Method and apparatus for coalescing variables
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
JP3299611B2 (ja) 資源割付装置
Chiodo Synthesis of software programs for embedded control applications
JPH0776927B2 (ja) コンパイル方法
JPH0814817B2 (ja) 自動ベクトル化方法
JPH03172936A (ja) 手順間レジスタ割付けを伴うコンピュータプログラムのコンパイル方法及び装置
US6117185A (en) Skip list data storage during compilation
JPH02217926A (ja) コード生成方法
US20040243982A1 (en) Data-flow method for optimizing exception-handling instructions in programs
US5923883A (en) Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
JP2015143939A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
Fahringer et al. Advanced symbolic analysis for compilers: new techniques and algorithms for symbolic program analysis and optimization
JPH02236638A (ja) レジスタ割付け管理方式
Sălcianu Pointer analysis and its applications for Java programs
JP3318051B2 (ja) 翻訳処理方法