JP3280449B2 - コンパイル装置 - Google Patents

コンパイル装置

Info

Publication number
JP3280449B2
JP3280449B2 JP03984193A JP3984193A JP3280449B2 JP 3280449 B2 JP3280449 B2 JP 3280449B2 JP 03984193 A JP03984193 A JP 03984193A JP 3984193 A JP3984193 A JP 3984193A JP 3280449 B2 JP3280449 B2 JP 3280449B2
Authority
JP
Japan
Prior art keywords
optimization
intermediate representation
expression
compiler
phase
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.)
Expired - Fee Related
Application number
JP03984193A
Other languages
English (en)
Other versions
JPH06250846A (ja
Inventor
正和 林
寛 五十嵐
政昭 滝内
耕一郎 堀田
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 JP03984193A priority Critical patent/JP3280449B2/ja
Priority to US08/113,810 priority patent/US5396631A/en
Publication of JPH06250846A publication Critical patent/JPH06250846A/ja
Application granted granted Critical
Publication of JP3280449B2 publication Critical patent/JP3280449B2/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
    • G06F8/44Encoding
    • G06F8/443Optimisation

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)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は最適化機能を持つコンパ
イラの最適化効果を促進させるコンパイル装置に関す
る。
【0002】近年のコンピュータシステムの高速化の要
求に伴い,1サイクルで同時に複数命令を実行できるプ
ロセッサやベクトル演算が可能なマシンが数多く開発さ
れている。それに伴い,最適化コンパイラへの要求が高
まっている。
【0003】コンパイラは,言語A(例えば,C言語,
FORTRAN,COBOL等のプログラミング言語)
から,他の言語B(例えば,アセンブラ言語)へ変換す
るものと考えることができる。一方,コンパイラにおけ
る「最適化」とは,変換後の言語Bが,元の言語Aの意
味を変えずに高機能(実行速度が速い,または必要とす
るメモリ領域を少なくする等)であるように,変換を行
う機能を意味するものとして用いられる。
【0004】一般に,コンパイラの最適化処理は,プロ
グラムを実行するマシン(コンピュータ,ワークステー
ション等)と独立した中間表現(中間言語,中間テキス
ト,内部表現等と同義)ベースで行われる。つまり,必
要のない中間表現を削除したり,効率的な処理のために
移動したり,同様な処理を共通化することによって,実
際の目的コードの最適化が図られる。従って,中間表現
の選択は,最適化処理の能力や,処理自体にかかるスピ
ードに影響する。しかし,最適化にはさまざまな種類が
存在し,それぞれが,最終目的とするものが異なること
が多いので,ある特定の観点から,中間表現の形態や情
報を固定してしまっては,促進できない最適化が存在す
る。
【0005】本発明は,プログラミング言語からアセン
ブラ言語(または機械語)に変換する場合の,一般的に
使用されているコンパイラにおける最適化に関するもの
である。
【0006】
【従来の技術】コンパイルの最適化処理は,上記したよ
うに中間表現を削除したり,移動したり,共通化するこ
とによって実際の目的コードを高速に,またはサイズを
小さくして効率のよいものにすることを目標としてい
る。
【0007】この中間表現は,言語,マシンにできるだ
け独立に設計することにより最適化やコード生成部の共
通化,部品化を図るのが一般的である。例えば,文献
1:A.V.エイホ他著「コンパイラ−原理・技法・ツ
ール」サイエンス社発行,文献2:「中間言語の考え
方」,インタフェース,1989,Mar.p211−
219に記載されている。
【0008】図16は従来の一般的な最適化処理の説明
図である。図中,100はソースプログラムをコンパイ
ルに適用するための中間表現の形式で保持するフロント
エンド部であり,このフロントエンド部の中間表現は,
最適化部101において最適化が施されて,高速化及び
サイズの縮小が行われて,最適化の結果はコード出力部
102に供給されると,コード出力部102はマシンに
依存したプログラム言語(各マシンに対応するマシン語
等)のコード出力を行う。
【0009】上記の最適化部101で行われる最適化処
理は,言語・マシンに独立な中間表現に対して行うよう
に設計されている。なお,途中で中間表現の構造等を変
化させるコンパイラも存在する,例えば,文献3として
S.S.Muchnick,`Optimizing Compilers For SPARC’,
Technology,1988 , 文献4としてGhodssi,Vida, S.S. M
uchnick, Alex Wu, `A Global Optimizer for Sun FOR
TRAN, C and Pascal', USENIX Conference ,1986 に記
載されている。しかし,これらは主として,コンパイル
時のある部分の処理を既存のもので置き換えるために用
いられる。また,これらは,中間表現のデータ構造の物
理的メモリマップ構造が変化している。
【0010】また,従来例として特開平2−81137
号公報に,最適化コンパイラの構造に関して開示され,
その目的として,処理効率のよい最適化処理の実現,
最適化の情報収集の処理効率の向上,最適化項目の
検出時間の短縮,原子プログラムの副作用の要因の排
除,原子プログラムの副作用の排除を挙げ,中間語
(中間表現)の変換や最適化をそれぞれ一回ずつ行って
いる。
【0011】
【発明が解決しようとする課題】上記した従来のよう
に,ある決まった中間表現のまま最適化部を設計し,実
現する方式では,以下のような問題点が存在する。
【0012】(1)マシン命令と中間表現が1対1に対応
するとは限らないので,命令スケジューリングのように
各マシン命令を何処に持って行くかの判断を行う機能を
コンパイルするような場合,1つの中間表現が複数のマ
シン命令に対応するとマシン命令に依存した最適化を中
間表現により効率的に適用できない。
【0013】(2)仮に,フロントエンドの出力として,
全ての中間表現をマシン命令と1対1に対応付けて構成
すると,次のような問題が発生する。 a.フロントエンドは,一般にターゲット(マシン)
に,無依存に中間表現を作成する。もし,そのようにし
ないと,各ターゲット毎に中間表現が変わるため,コン
パイラを作成するたびに,フロントエンド部分を作成す
る必要が出てくるからである。
【0014】b.フロントエンドで,命令と中間表現を
1対1にしてしまうと,最適化処理の実現が難しくな
る。まず,中間表現の数が増えるために,最適化処理の
時間がかかるようになる。さらに,処理自体も複雑にな
る。
【0015】この例として,共通式を認識する場合につ
いて説明する。仮にマシンのアーキテクチュアが,命令
語が32ビットであり,32ビットのアドレスを1回で
ロード・ストアできないような場合,ロードやストアの
命令で32ビットをアドレスする場合,2つの命令を組
み合わせて一つのロードやストアの命令となる。この場
合,フロントエンドで中間表現と命令を1対1に対応さ
せるということは,最適化の処理が,2つの特定の命令
については一つの命令であることを識別する必要があ
る。これは,ロード命令という一つの命令だけを識別す
るだけでは済まないので,処理が複雑になることは明ら
かである。
【0016】(3)個々の最適化処理は, 決まった中間表
現にのみ適用されることにより, 最適化処理の適用の制
限事項(フロントエンドに対する制限等)が大きくな
る。また,上記の文献3,文献4に記載されたような中
間表現の構造等を変化させる手法は,中間表現のデータ
構造の物理的構造が全く異なるため,最適化処理の共通
化を適用することによる効率が悪い。
【0017】本発明は,コンパイラに対する多様化する
最適化処理への要求を満たすために,コンパイラがその
ターゲットアーキテクチャと入力ソース及び,それらの
必要な最適化に応じて,高性能のオブジェクトを出力す
ることができるコンパイラ構成方式を提供することを目
的とする。また,中間表現の変換や最適化処理を共通化
してコンパイラ自身を効率化できるコンパイル装置を提
供することを目的とする。
【0018】
【課題を解決するための手段】図1は本発明の原理的構
成図である。図1において,1はソースプログラム,2
はソースプログラムSに対応する中間表現を出力するフ
ロントエンド部,3は最適化の構造決定を行う通常の処
理ではオン状態であるスイッチ,4は最適化構造決定手
段,5は最適化手段,6は中間表現変換手段,7は判定
手段,8はコード出力手段,9はオブジェクトプログラ
ムである。なお,最適化構造決定手段4は,コンパイラ
内部または外部に設けることができ,決定した内容は最
適化手段5,中間表現変換手段6に指示される。
【0019】また,10は最初のフロントエンドの中間
表現やオブジェクトプログラムを出力するための中間表
現の情報を格納した中間表現データファイル,11は最
適化構造決定に必要なデータや,決定された最適化情報
を格納する最適化処理データファイル,12はフロント
エンドの中間表現構造情報,13は中間表現変換手段6
における変換により発生した中間表現構造情報である。
【0020】本発明は,最適化構造決定手段によりフロ
ントエンド部のソースレベルとターゲット(マシン)を
元に,最適化の項目とその最適化を実行するのに必要な
中間表現の変換回数を決定し,最適化手段及び中間表現
変換手段によるループ動作を決定した回数を実行して最
適化を行い,必要なら同じ最適化を複数回適用すること
により,各ターゲットや入力ソースに対応した高性能の
オブジェクトを得るものである。
【0021】
【作用】図1において,コンバイルの対象となるプログ
ラムがフロントエンド部2によって中間表現に変換され
る。スイッチ3は,最適化構造決定手段4における処理
を省略することができるように選択を行うスイッチであ
り,このスイッチ3のオン・オフは最適化レベルまたは
オプションにより決定することができる。
【0022】このスイッチ3がオフの場合は,入力する
プログラム(ソースプログラム)に対し予め用意された
最適化フェーズ(最適化と中間表現の組み合わせ)の回
数とその処理内容(最適化の内容と中間表現の仕様)
が,最適化手段5と中間表現変換手段6により予め設定
され,その設定された内容により処理を行い,判定手段
7により予め決められた回数の動作後にコード出力手段
8でコード出力が行われてオブジェクトプログラム9が
得られる。
【0023】スイッチ3がオンになっている場合,この
コンパイラの内部または外部に設けられた最適化構造決
定手段4は,予め供給されるフロントエンドの中間表現
とオブジェクトプログラム(ターゲットマシン)の情報
を中間表現データファイル10から得て,要求される最
適化の項目(内容)等の最適化情報を最適化処理データ
ファイル11から得て,最適化と中間表現変換の回数を
決定する。例えば,単純な構造の場合,ソースレベル
(ソースプログラム依存)の最適化と中間表現変換,及
びオブジェクトレベル(ターゲットまたはマシン依存)
の最適化と中間表現変換の合計2回実行するよう決定す
る。
【0024】最適化構造決定手段4により,最適化の項
目と中間表現の変換回数が決まると,最適化手段5,中
間表現変換手段6及び判定手段7に対して指示が行われ
て最適化動作が実行される。最初はフロントエンド部2
からの中間表現構造情報12に対して,ソースレベルで
実行される最適化を最適化手段5において実行し,その
結果を中間表現変換手段6により,中間表現の全部また
は一部を変換して中間表現構造情報13を得る。判定手
段7は最適化構造決定手段4から指示された,回数だけ
ループ動作を実行するよう判断し,最適化手段5,中間
表現変換手段6は各ループにおいてそれぞれ指定された
最適化及び中間表現の変換を行う。
【0025】判定手段7は予め決められた回数に達した
ことを判定すると,最後に得られた中間表現構造情報1
3(マシン依存の中間表現)をコード出力手段8におい
てコード出力に変換し,オブジェクトプログラム(マシ
ン言語)が得られる。なお,この判定手段7は,最適化
手段5及び中間表現変換手段6のそれぞれが,予め指定
された回数の最適化及び中間表現変換を実行したか否か
を判定する機能を備えることにより実現することがで
き,その場合は判定手段7を別に設ける必要がない。
【0026】最適化構造決定手段4は,複数回の変換を
指定して,最初の中間表現に対する最適化では適用でき
なかった最適化を後の中間表現に対して適用でき,また
命令スケジューリングを行う場合にも,マシン命令と中
間表現が1対1に対応する段階で実行して,各最適化の
項目に適した中間表現において最適化を施すことができ
るため,コンパイラの最適化の効果を上げることが期待
できる。
【0027】なお,最適化手段5が,その中に中間表現
変換機能を備える場合は,独立したフェーズとして中間
表現変換手段6を必ずしも別に設ける必要がない。
【0028】
【実施例】図2は最適化構造決定の処理フローである。
図2には最適化構造決定の処理フローと関連するデータ
を示し,20はソースプログラムにより作成したフロン
トエンドから出力される中間表現(入力プログラム言語
に依存)の特性(種別)を表すデータ(図1の10に対
応),21は最適化終了後にオブジェクトのコードを出
力する機能を持つコード出力部が入力すべき中間表現
(マシン依存)の特性(種別)を表すデータ,22は最
適化処理の決定に必要なデータ及び決定された最適化及
び中間表現変換のループの回数,それぞれの内容を含む
最適化処理データ(図1の11に対応)である。
【0029】図2の処理フローを説明すると,最初に最
適化処理のピックアップが行われる(図2のS1),こ
の処理では,最適化コンパイラを作成するためには,そ
のコンパイラが持つべき最適化の項目をピックアップす
る。すなわち,フロントエンドの中間表現,最後のコー
ド出力部へ入力する中間表現を表すデータ20,21に
対応して種々の最適化処理の項目が最適化処理データ2
2に予めリストされており,最適化コンパイラによって
実施すべき最適化の対象となる項目が選択される。この
選択はコンパイラ作成者により選択できる。
【0030】選択された複数の最適化処理の各項目につ
いて,どの段階で実施するかを分類する(図2のS
2)。すなわち,各項目が,フロントエンド出力である
中間表現に対して最適化するか,コード出力の前段階で
ある最後の中間表現に対して最適化するか,それらの中
間の段階で最適化するか,またはスケジューリングの段
階か等に分類分けする。この時,次の,の観点に基
づいて分類を行う。
【0031】最適化を適用する中間表現のデータ構造
の物理的メモリマップ構造の違いに対応して分類する。 適用する最適化が影響するものに対応して分類する。
【0032】このは,その最適化が言語やプログラム
の構造(ループ構造,条件文等)に依存しているもの
か,ターゲットマシンのアーキテクチャ(並列構造か,
レジスタ構造等)に依存しているものか,両方に有効な
ものかを識別してそれぞれに分類する。分類された結果
は,最適化処理データ22の中に設定される。
【0033】次にコンパイラ構造の決定が行われる(図
2のS3)。この処理は,2つの段階で構成され,最初
に中間表現の変換回数の決定が行われる(同S30)。
この場合,原則的には,上記最適化処理の分類により得
られた分類の個数に対応した変換回数に決定されるが,
他に,中間表現の形態や最適化処理の中間表現の依存条
件により中間表現の変換回数が考慮される。
【0034】続いて,最適化適用の決定が行われる(同
S31)。この最適化適用の決定は次の3つの処理によ
り構成される。最初に,中間表現の形態や中間表現依存
条件に対応して各フェーズにおいて適用可能な最適化を
挙げる(同S310)。次に各項目の適用条件に照らし
て,適用可能なものを絞りこむ(同S311)。最後
に,依存関係(フロントエンドの中間表現に依存か,タ
ーゲットの中間表現に依存か等)により,最適化が実行
される順序を決定する(同S312)。
【0035】このようにして最適化構造が決定される
と,その決定結果により最適化及び中間表現変換が実行
されて,各フェーズに応じた最適化が行われると共に,
中間表現が変化して,最後に最適化されたオブジェクト
プログラムがコード出力される。
【0036】次に上記図2に示す最適化構造決定の処理
を図3乃至図6に示す具体例により説明する。この具体
例は,並列RISC(Reduced Instruction Set Comput
er) 向けのコンパイラである。RISCアーキテクチャ
は,一般にメモリの参照はロード・ストア命令のみが行
うことができ,演算は全てレジスタ間で行うことによっ
てハードウェアの高速化を図っている。並列RISCア
ーキテクチャは,RISCアーキテクチャのうち命令を
同時に複数個実行できる機能をもったものであり,その
ようなアーキテクチャ向けのコンパイラの例について説
明するが,他のあらゆるプロセッサに関しても同様に実
施することができる。また, この具体例では,フロント
エンドはターゲットに関係なく言語毎に一つである,と
いう前提条件がある。この前提条件は,対象となるアー
キテクチャが異なっても,言語自体の仕様は変わらない
ので当然の正当な条件である。
【0037】図3はコンパイラの入・出力部における中
間表現のデータの例であり,Aはフロントエンドが出力
する中間表現の集合,Bはコード出力のための中間表現
の集合を表し,Aは入力となるプログラム言語に依存
し,Bはターゲットアーキテクチャに依存する。各集合
は上記図2の各データ20,21として最適化構造決定
のための既知情報として用意される。
【0038】図3のAには,各コード(演算子)に対応
した中間表現の属性が記述され,最初に,フロントエン
ドが出力する中間表現の形態(LINDA という中間表現の
総称名を持つ),次にLOADというコード(演算子) ,
データの型(i1〜i4は1乃至4バイトのサインデータ,u
1 〜u4は1乃至4バイトのアン・サインデータ,r8〜r1
6 は8乃至16バイトの浮動小数点データ,c8〜c32 は
8乃至32バイトの固定小数点データ),オペランド
(1つ持つ型と2つ持つ型がある),条件としてバウン
ダリ(×は保障しないことを表示),アドレス表現(3
つの値でアドレスを表す)が規定され,以下,コード
(演算子)のLOAD,cmove等(他のコードにつ
いては図示省略)について同様なデータが用意される。
【0039】図3のBには,ターゲットアーキテクチャ
に依存するコード出力のための中間表現が,Aと同様の
形式で用意されているが,その内容は必ずしも一致しな
い。例えば,LOADでは,データの型が制限(r16 ,
c8〜c32 は使用できない)され,cmoveのコードが
無くなっている。
【0040】この具体例のコンパイラが実現する最適化
処理をピックアップすると,図4に示すようにこの実施
例で実現すべき最適化の項目が得られる。図4におい
て,NO.1〜NO.22の各番号に対し,最適化の名
称が示され,例えば,NO.1の「CONSTANT FOLDING」
は定数をまとめる最適化(例えば,「1+3」とあった
ら,「4」として扱う)であり,NO.2の「CONSTANT
PROPAGATION」は定数を伝播する最適化である,等の各
項目がある。なお,図4のMPA,MPB,SCHの説
明は後述する。これらの情報も既知情報として,図2の
最適化処理データ22中に入・出力の中間表現に関する
既知情報と共に,適用される最適化に関する情報を格納
したテーブル(データベース)として格納される。
【0041】図5はテーブルに格納された最適化情報の
一部の例である。図5にはエントリ番号(図4のNOに
対応)1,4,14,16,18及び22の各情報だけ
示す。エントリ番号1の場合,最適化名はconstant fol
ding (定数をまとめる) という最適化で, 適用する中間
表現の形態,演算子は「*」と表示され( *はDon'tcar
e,すなわち当該最適化の処理では無関係であることを
表す),オペランドはcnt(定数),中間表現依存条
件,等の各データが設定されている。また,エントリ番
号4の最適化名CSE(Common Sub-expression Elimin
ation:共通部分式を除去する最適化)では,中間表現依
存条件の中に,バウンダリについて「×」と表示されて
いる(×は,保障しないことを意味する)。以下,各最
適化の番号(エントリ番号)14,16,18,22に
関して図5のような情報が作成されている。
【0042】次に上記図3,図5に示すような情報を基
に図2に示す構造決定の処理フローが実行される。な
お,フロントエンドが出力する中間表現の集合aとコー
ド出力のための中間表現の集合bが,全て一致した場合
は,中間表現の変更は不要であるが,図3の例のように
一致しない場合は,図2に示す構造決定の処理が行われ
る。
【0043】この例では,最適化の項目が上記図4のよ
うにピックアップされ(図2のS1の処理),それぞれ
の最適化処理を上記図2の最適化処理の分類(図2のS
2)について説明した,の観点に従って分類する。
この具体例では,後述するように,中間表現のデータ構
造の物理的メモリマップ構造を同じにしているため,上
記の観点での分類は行う必要が無い。については,
言語及びプログラム構造に依存している最適化とは,最
適化が実施される項目が,入力するプログラムの構造や
変数であるようなものである。またアーキテクチャに依
存した最適化とは,実際のターゲットとなるマシンのア
ーキテクチャの仕様を意識した最適化である。
【0044】メモリアドレッシング関連の命令は,レジ
スタ割り付けや,命令スケジューリング等に代表される
が,アーキテクチャによって異なるので,これらの命令
に関する最適化もアーキテクチャ依存の最適化に属す
る。この実施例では,アーキテクチャ依存の最適化を更
に2つに分類した。すなわち,イ.命令数を減らす,よ
り高速の命令に変更する等(例えば,乗算を加算の繰り
返しに変更する等),命令自体を出力するまたは出力し
ないに関する最適化ロ.命令の出力する順序に関する最
適化上記したことを基準にして,図4の番号1〜22の
各最適化の項目について分類すると,図4の右側に示す
MPA,MPB,SCHに分類される。ここで,MPA
は言語依存(ソースプログラム言語に依存)の最適化で
あり,MPAの欄に○が付されている最適化の項目は,
言語依存の最適化として実施されることを示す。
【0045】MPBはアーキテクチャ依存(ターゲット
マシンのマシン命令)の最適化であり,MPBに○が付
された最適化の項目は命令の出力に関連する最適化とし
て実施する。SCHに○が付された最適化は,アーキテ
クチャ依存の最適化の内,命令実行順序に関する最適化
として実行するものである。なお,図4の中で,複数の
分類で○が付された最適化は,同じような最適化を,異
なった中間表現をターゲットとして複数回実行すること
を意味している。
【0046】上記のように,分類が行われると,次にコ
ンパイラ構造の決定が行われる(図2のS3)。ここ
で,最初に中間表現を何回変更するか決定する(図2の
S30),各最適化処理テーブル(図5参照)の中間表
現の形態の種類と中間表現依存条件の場合の数の組み合
わせで求められる。すなわち,中間表現の形態は,「LI
NDA 」という1種類であり,中間表現依存条件の場合の
数は,無関係を表す「*」が付された要素を除外する
と,「バウンダリ」に関して,次の2つのパターンがあ
る。
【0047】 バウンダリ:bxd , axd アドレス 2 (フェー
ズ3とする) バウンダリ:× アドレス 2 (フェー
ズ2とする) これと,フロントエンド時の出力である バウンダリ:× アドレス 3 (フェー
ズ1とする) を合わせて,全部で3形式必要であることが分かる。
【0048】次に,どの最適化をどこで,いつ適用する
か設定する(図2のS31)。ここでは,最適化処理テ
ーブル(図5)の中間表現の形態,及び中間表現依存条
件から,フェーズ1,フェーズ2,フェーズ3で適用可
能な最適化を選ぶ(図2の310)。この図5の各最適
化の項目(エントリ番号)については,次のように選択
できる。なお,1,4,14・・の各数字はエントリ番
号を表す。
【0049】フェーズ1:1,4,14,16 フェーズ2:1,4,14,16,18 フェーズ3:22 次に上記により選択された中から,適用条件に照らし
て,適用を絞りこみ(図2の311),次のようにな
る。
【0050】フェーズ1:1,4,14,16 フェーズ2:1,4,18 フェーズ3:22 次に依存関係から,各最適化の実行順序を決定する(図
2の312)。
【0051】フェーズ1:14,(1,4),16 ;
但し,(1,4)は何れを先に行っても良いことを意味
する。 フェーズ2:(1,4),18 フェーズ3:22 このようにしてこの具体例における,最適化構造が決定
される。この決定による最適化及び中間表現の変更の処
理は自動化される。自動化した場合に備えるデータは次
のようなものである。
【0052】1)各テーブルの項目を要素として持った
データ構造を定義する。 2)各データは,記号化(文字列または番号化)するこ
とにより,コンパイラの内部構造として持つ。
【0053】図6に中間表現の変換を行うためのテーブ
ルと最適化処理のテーブルのデータ構造を示す。A.は
中間表現のテーブルであり,「IML」は中間表現を意
味し,中間表現形態(IML-TYPE) ,演算コード(CODE-TY
PE),型のリスト, オペランドのリスト等の各項目が定義
される。B.は最適化処理のテーブルの構造であり,最
適化番号,最適化名,中間表現の形態,適用演算子リス
ト等の各項目が定義される。なお,これらのデータは,
図1に示す構成において,最適化処理データファイル1
1に格納される。
【0054】次に本発明の実施例を図7乃至図15を用
いて説明する。図7は実施例のコンパイラの構成図であ
る。このコンパイラの構成は,上記,図2に示す最適化
構造決定のフローにより以下のように決定された結果得
られる。
【0055】上記図3乃至図6に示す並列RISC向け
のプログラムに関するコンパイラの最適化構造が決定さ
れることにより,最適化コンパイラの構造が決定され,
これに基づいて,図7に示す実施例の最適化コンパイラ
の構成が得られる。
【0056】図7の構成では,最適化の数はフェーズ1
乃至フェーズ3(各フェーズは上記図4のMPA,MP
B及びSCHの各分類に対応する)の3回であり,中間
表現の変換が3回行われる。但し,最初の変換は,ソー
スプログラムからフロントエンドにより最初の中間表現
に変換することであるから,その後2回の中間表現の変
換が行われる。
【0057】図7において,フロントエンド70の後に
はソースプログラムレベルの中間表現(これを1回目の
中間表現とする)が格納されている。このフロントエン
ド70の後の中間表現に対し,71で示す最適化Aが実
行される。この最適化処理Aは図4の分類MPA(フェ
ーズ1)に属する各最適化の項目について実行される。
この後,IE (Interface Expansion)1で示す中間表現
変換72で2回目の中間表現の変換が行われる。この変
換でターゲット命令レベルの最適化用の中間表現に変換
され,この中間表現に対し73で示す最適化Bが実行さ
れる。
【0058】この最適化Bでは,図4の分類MPB(フ
ェーズ2)に属する各最適化が実行され,その結果に対
し次にIE2で示す3回目の中間表現変換74が行われ
る。この変換で命令スケジューリング用の中間表現が得
られ,この中間表現に対し命令スケジューリング75が
実行される。この命令スケジューリング75では,上記
図4の分類SCH(フェーズ3)の最適化(図4の番号
22)が実行され,その結果はコード出力76の処理が
実行される。
【0059】この実施例では,フロントエンドの出力を
上記に示したように第1回目の中間表現とした。フロン
トエンドは,一般にターゲットに無依存に中間表現を作
成する。もし,そのようにしないと,各ターゲット毎に
中間表現が変わるため,コンパイラを作成するたびに,
フロントエンド部分を作成する必要があるからである。
【0060】図7の構成に対し,新規に最適化の項目を
追加する場合,または最適化の仕様が変更になった時
は,図2に示す最適化構造決定の処理フローのS1〜S
3で示すステップを繰り返して,コンパイラの構造を決
定すればよい。これにより,最適化の分類が増加する場
合には,新たに,中間表現を変更する部分を設けること
により高性能なオブジェクトを出力するためのコンパイ
ラの構造を得ることができる。
【0061】上記図2による最適化構造決定は,外部か
ら選択等の入力設定により実現することもできるが,上
記図6のように最適化処理の仕様をテーブルに登録して
おくことにより,条件に合う最適化処理を取り出すよう
にして自動化することができる。この場合,最適化構造
決定の処理が不用となり,コンパイラの構成は,図1の
構成においてスイッチ3がオフに設定された状態に対応
する。
【0062】また,最適化処理の決定において,複数の
候補を選び,それぞれについて最適化処理を独立して行
い,その中から最適なものを選ぶことによって,高性能
オブジェクトを得ることができる。
【0063】また,複数の最適化構成候補に対してそれ
ぞれ独立に最適化効果処理を行う場合は,プロセッサ
が複数ある時は,各プロセッサにそれぞれの最適化処理
をアサインする。一つのプロセッサで行う時は,コー
ド出力の直前から,最適化にループする。ループの回数
は候補の数でもある。各候補について,結果の中間表現
列をリストにして格納しておく。
【0064】上記のリスト要素(各場合の中間表現列)
に対して,実行時間を見積もり,最短のものをコード化
する。実行時間の見積もりは,各中間テキストに対応す
る命令が分かるのでその命令の実行時間がわかる(これ
は,命令スケジューリング時に必要なアーキテクチャ情
報である)。ループに関しては,ループの数が静的に分
かっている場合は,その数だけ掛け算をする。分からな
い場合は,同じ定数を掛ければ,どのコードも条件は同
じなので,大きく誤ることはない。
【0065】また,図2の処理を一つのコンパイラフェ
ーズとして,コンパイラ内部に持つことにより,入力プ
ログラムに応じて最適化処理の適用を制御することがで
きる。
【0066】上記実施例(図7)に対する付加機能につ
いて説明する。上記図7の実施例では,フロントエンド
の出力は,最適化及び中間表現変換の各処理を通過する
ようになっているが,各フェーズにおける各最適化処理
を実行するか否かを切替える選択スイッチ(図1のスイ
ッチ3と異なる)を,各最適化処理及び中間表現変換処
理の前段に設ける。この選択スイッチは,コンパイラの
外部から操作することにより任意のフェーズの任意の最
適化を止めるように切替えられる。このような,機能を
コンパイラのオプションとして備え,そのオプションが
立っていると,その最適化をパスする(リターンす
る)。これにより,翻訳時間の短縮や,コンパイラ作成
時のデバッグを効率的化する。
【0067】更に,上記実施例(図7)の構成に対し,
中間表現をプリントする処理を付加することができる。
すなわち,各フェーズにおける中間表現をプリント機能
に対し出力してプリントアウトするか否かを選択する選
択スイッチを設ける。この選択スイッチは,上記各フェ
ーズにおける最適化処理を実行するか否かを選択する選
択スイッチと異なる。この中間表現のプリント機能を,
プログラムのデバッグまたはコンパイラの処理中に,オ
プション制御により呼び出すことにより,任意のフェー
ズの任意の場所における中間表現を出力することがで
き,デバッグ効率を向上することができる。
【0068】次に上記,図7に示すコンパイラの構成を
用いた具体的なプログラムの例に対する各最適化のフェ
ーズにおける中間表現の例を図8乃至図15に示す。図
8は実施例のコンパイラの動作を説明するためのプログ
ラム例,図9は実施例のプログラム例に対するフロント
エンドの出力,図10は実施例のプログラム例に対する
最適化A後の出力,図11及び図12は実施例のプログ
ラム例に対する中間表現変換(IE1)後の中間表現,
図13及び図14は実施例のプログラム例に対する最適
化B後の出力である。
【0069】ここで,図9乃至図15に記述された幾つ
かの主要な符号について説明する。Slabel-n(0<=n)
は,基本ブロックを示し,そのブロックを構成する中間
テキストが,それ以下に羅列される。
【0070】各中間テキストは,「演算子(オペレー
タ) オペランドの並び」というように表現され,オペ
ランドとオペレータの間は空白で区切られている。各オ
ペランドに関して説明すると,以下の通りである。
【0071】var :変数 std,prg :コンパイラが生成する一時変数 axd,bxd :配列,構造体データ cnt :定数 図8に示すプログラム(ソースプログラム)例に対して
フロントエンド終了後に,中間表現として図9に示すよ
うなフロントエンド出力が発生する。このフロントエン
ドの出力は,完全に命令と中間表現が1対1に対応して
なく,この状態では最適化処理が不十分な状態である。
【0072】このフロントエンドの出力に対して,最適
化A(図7の71)において,図4のMPAの欄に○が
付された各項目の最適化が実行される。この最適化A後
の出力は図10のようになる。図9と図10を参照する
と最適化の効果が分かる。すなわち,この中間表現形態
では,例えば,変数XXや,配列要素dd(i) 等は,それら
を一まとまりとして扱うことができることが分かる。ま
た,構造体の代入に関しては,1つの中間表現で実現さ
れている。
【0073】次に,最適化Aの出力(図10)は次にI
E1(図7の72)において,中間表現が変換されて図
11,図12に示す中間表現が得られる。このIE1で
は,最適化Aの結果得られる中間表現をターゲットの命
令セット及び次に行われる最適化B(図7の73)の最
適化機能に応じて変換し,IE1の目的は,最適化Bの
対象となるものを,中間表現として明確に表すことであ
る。
【0074】図11,図12に示すように,それまで,
XXとかdd(i)というように表現されていたもの
が,そのアドレッシングに応じて,中間表現の数が増え
たり,オペランドの表現が変換していることが示されて
いる。また,構造体の代入文は,ループ構造になってい
ることも示されている。さらに,IE1の変換の実現に
関しては,入力された中間表現のコードとオペランドが
決まれば,出力は一意に決まるので,テーブル分岐の手
法を用いることによって実現できる。これ以外の方法を
利用しても良い。
【0075】次に図11,図12に示す,IE1の出力
に対して最適化B(図7の73)が実行される。この最
適化Bで行う最適化の対象は,ソース上では直接現れな
かったり,フロントエンドでは解析しなかったターゲッ
トに依存した部分であるが,図4に示すように上記最適
化Aと重なる部分が含まれている。また,この実施例で
は,例えば,以下の項目も最適化Bの対象となる。
【0076】1.アドレス計算に関する最適化 2.構造体の代入のループ処理 この実施例では,基本的には最適化Bの機能は,最適化
Aと同じである。従って,最適化Bは最適化Aで仕様し
た同じ関数をできる限り呼ぶようにして実現する。その
ためには,中間表現の形態について考慮し,また,最適
化を繰り返し施すことについての説明は後述する。
【0077】以上のことから,従来例のように,最適化
Bのフェーズが存在しない場合,上記の各項目に関する
最適化が行われないことになり,ターゲットがRISC
アーキテクチャのような場合は,高性能なオブジェクト
を得られないことになる。従って,IE1(図7の7
2)及び最適化Bのフェーズは,必須の処理である。最
適化Bによって,最適化された結果を図13,図14に
示す。図11,12のIE1の中間表現の出力と図1
3,図14の最適化Bの出力を参照すると,基本的な最
適化がIE1の後に施されたことが分かる。
【0078】他の実施例:上記の実施例(図7)の構成
では最適化Aの各関数と最適化Bの各関数の共通化を図
っているが,それぞれ別個のものとして実現する他の実
施例を構成することができる。
【0079】図7の実施例では,IE1(図7の72)
の中間表現変換のフェーズにおいて,完全に命令と中間
表現を1対1にしていない。これは,IE1のフェーズ
以降の処理を,その機能や利用する情報によって,次の
ように大きく2つに分けることができるからである。
【0080】 最適化B,レジスタ割り付け 命令スケジューリング は,次に示すように,その目的が命令の出力に関する
ものである。
【0081】a.余分な命令を消去する。b.重複して
いるものをまとめる。c.より高速な命令に変更する。 これにより,は命令が出る/出ないということより
も,1つ1つの命令の順序を意識して,ハードウェアの
効率化を図ることを主たる目的にしている。従って,次
に示すように,IE1の中間表現変換の直後で,命令を
1対1にしない方が,コンパイラの構成上,優れてい
る。
【0082】すなわち,命令スケジューリングでは,例
えば,倍精度の load/store を2つの単精度命令に分け
ることが必要である。なぜならば,これらの load/stor
e を並列に実行できるために,連続させて実行させるよ
りも,離して実行させた方が,早く命令が終了するから
である。しかし,レジスタ割り付けや最適化を考えた場
合,もともとこのデータは1つの実体を指しているた
め,これを分離して扱うことは,最適化Aに関して上記
したようにコンパイラの処理を複雑にするだけである。
その上,レジスタ割り付けを考えると,連続したレジス
タを割り当てる必要のあるデータが2つに分離されてし
まうことになり,レジスタ割り付けのために「データが
連続している」という何らかの情報を持つ必要が出てく
る。
【0083】一方,IE2(図7の中間表現変換74)
は,命令スケジューリングに対応するために,中間表現
と実際の命令を1対1に分解する。この実現方式はIE
1(図7の72)と同じである。
【0084】この実施例における命令スケジューリング
は,レジスタ割り付け後に,命令スケジューリングを行
う。命令スケジューリングの技法は,公知の方法を用い
る。また,この他の実施例では,命令スケジューリング
をレジスタ割り付け後に位置付けたが,次の1〜4のよ
うに配置しても良い。なお,これらのどの場合も,命令
スケジューリングの前に,命令と中間表現を1対1に対
応させることを意識することにより,中間表現をどのよ
うに変換するか(命令スケジューリングをどのタイミン
グで行うか)を決定することができる。
【0085】 1.レジスタ割り付けの前に命令スケジューリング 2.命令スケジューリングとレジスタ割り付けを同時に
行う。 3.レジスタ割り付けと命令スケジューリングを任意の
順序で繰り返す。
【0086】4.レジスタ割り付けと命令スケジューリ
ングを任意の順序で繰り返し,その間に最適化を行う。 次に中間表現の形態について説明する。この実施例では
中間表現は図15に示すようなデータ構造を持つ。図1
5を実際にプログラム化する時は,構造体宣言を次のよ
うにすることにより, この部分を可変化することがで
き, オペランドの数は, 演算子によって可変にすること
ができる。
【0087】struct OperandType operand[1]; 以上によって,中間表現の物理的メモリマップ構造をコ
ンパイラのフェーズ間で固定して扱うことが可能とな
る。
【0088】この実施例では,中間表現の変換は,次の
1.〜3.のような内容を意味する。なお,以下の説明
において,「言(げん)」という表現を用いるが,
「言」とは中間表現のうち命令に相当するものを意味す
る。例えば,図9の#label-2において, move var:("1") cnt: 0 bqe #label-9 var:("1") var:("n") という部分があるが,「move var:("1") cnt: 0 」が1
つの言を表す。ここで,moveは演算子(または,言コー
ド)といい,var:("1") はオペランド1(第1オペラン
ド),cnt: 0はオペランド2(第2オペランド)とい
う。
【0089】1.中間表現がポイントしているオペラン
ドを変更する。この例は,図8〜図14において,言の
オペランドの変化により示されている。これはポインタ
の付け換えだけの処理により行われる。上記,図9の例
により言のオペランドの変更を説明すると,図9(フロ
ントエンド後の出力)のラベル2(#label-2)の「move
var:("1") cnt: 0 」が,図10(最適化A後の出
力)の#label-2では,「move prg:#17cddc("1") cnt:0
」と変化している。
【0090】2.中間表現のオペレータを変更する。 3.中間表現の出力方法を変える。これは1つの言から
複数の言になったり,ループ構造になったりすることで
ある。この例は, 図9,図10までは cmoveで表すされ
た部分が,図11(IE1後の中間表現),図13(最
適化B後の出力)では,ラベル14(#label-14) のルー
プになっている。
【0091】以上を行うことによって,中間表現のデー
タ構造を変化させることなく,しかし意図している意味
の変更を行うことが可能となる。次に最適化の繰り返し
について説明する。
【0092】この実施例では,最適化フェーズで,同じ
ような最適化を行うことができるようにするため,上記
したように,最適化の対象となる中間表現の物理表現を
統一させる。そして,現在の処理フェーズを覚えておく
ための変数を使用することにより,個々の最適化ルーチ
ンの共通化を実現する。
【0093】また,これらの最適化は,同一フェーズの
中でも,これらの各最適化を繰り返し呼び出すことがで
きる。この呼び出しに関しては,以下の方法が考えられ
る。 1.コンパイラ作成者がコンパイラ作成時に判断する。
【0094】2.中間表現の変更があったか否かのフラ
グ(初期値はオフ)を設け,最適化処理において,中間
表現の変更があった場合は,これをオンにする。このフ
ラグがオンである間,フラグを初期化して最適化処理を
トライする。
【0095】3.回数を決めて(コンパイラ作成者が決
定するか,オプションで外から与える),最適化を繰り
返す。 4.以上1〜3の方式を組み合わせる。
【0096】という方法を用いることができる。この実
施例では,上記1の方法を用いているが,最適化レベル
に応じて,上記1〜4の最適化繰り返しを実現するよう
にし,ユーザが最適化レベルで切り分けることができる
ようにしても良い。
【0097】
【発明の効果】あるアーキテクチャに対して本発明によ
る最適化コンパイラにより,コンパイラの構造を決め
て,その構成に従って最適化を行うようにすれば,ソー
スプログラムの特性や,アーキテクチャの特徴を意識し
た最適化を,好適な位置で適用できるので,高性能のオ
ブジェクトを得ることができる。
【0098】また,最適化をコンパイラのフェーズの流
れの中で繰り返し適用することが可能となり,高性能の
オブジェクトを得ることができる。さらに,同じ最適化
処理や,中間表現変換処理を,各部で適用するのでコン
パイラ自身の処理効率が向上する。
【図面の簡単な説明】
【図1】本発明の原理構成図である。
【図2】最適化構造決定の処理フローである。
【図3】コンパイラの入・出力部における中間表現のデ
ータ例である。
【図4】実施例で実現すべき最適化の項目と分類を示す
図である。
【図5】テーブルに格納された最適化情報の一部の例で
ある。
【図6】中間表現の変換を行うためのテーブルと最適化
処理のテーブルのデータ構造を示す図である。
【図7】実施例のコンパイラの構成図である。
【図8】実施例のコンパイラの動作を説明するためのプ
ログラム例である。
【図9】実施例のプログラム例に対するフロントエンド
の出力である。
【図10】実施例のプログラム例に対する最適化A後の
出力である。
【図11】実施例のプログラム例に対する中間表現変換
(IE1)後の中間表現(その1)である。
【図12】実施例のプログラム例に対する中間表現変換
(IE1)後の中間表現(その2)である。
【図13】実施例のプログラム例に対する最適化B後の
出力(その1)である。
【図14】実施例のプログラム例に対する最適化B後の
出力(その2)である。
【図15】中間表現のデータ構造の説明図である。
【図16】従来例の一般的な最適化処理の説明図であ
る。
【符号の説明】
1 ソースプログラム 2 フロントエンド部 3 スイッチ 4 最適化構造決定手段 5 最適化手段 6 中間表現変換手段 7 判定手段 8 コード出力手段 9 オブジェクトプログラム 10 中間表現データファイル 11 最適化処理データファイル 12,13 中間表現構造情報
───────────────────────────────────────────────────── フロントページの続き (72)発明者 堀田 耕一郎 神奈川県川崎市中原区上小田中1015番地 富士通株式会社内 (56)参考文献 特開 昭62−163146(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 9/45

Claims (3)

    (57)【特許請求の範囲】
  1. 【請求項1】 ソースプログラムに基づき中間表現を出
    力するフロントエンド部と, 中間表現に対し最適化を施す最適化手段と, 最適化により得られた結果に対し中間表現の形式を変換
    する一段以上の中間表現変換手段と, 最後に得られた中間表現をコード出力するコード出力手
    と, 前記最適化手段と中間表現変換手段による最適化フェー
    ズの繰り返し回数と各フェーズにおける最適化の処理内
    容を決定する最適化構造決定手段とを有し, 前記最適化構造決定手段により決定された内容に基づい
    て各最適化フェーズと共に中間表現の形式を変更して最
    適化を行うことを特徴とするコンパイル装置。
  2. 【請求項2】 請求項1において, 上記最適化構造決定手段は,フロントエンド部の出力す
    るプログラムに依存する中間表現及び対象となるアーキ
    テクチャに依存する中間表現及び適用される最適化の項
    目に基づいて,中間表現の形式を変化させる回数及び各
    フェーズで適用する最適化処理を決定することを特徴と
    するコンパイル装置。
  3. 【請求項3】 請求項1または2において, 前記最適化処理及び中間表現変換における中間表現を管
    理するためのデータの主要部分についてはメモリ上のデ
    ータ構造を固定的なものとし, 該データ構造により 中間表現の変換処理及び最適化を共
    通化することを特徴とするコンパイル装置。
JP03984193A 1993-03-01 1993-03-01 コンパイル装置 Expired - Fee Related JP3280449B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP03984193A JP3280449B2 (ja) 1993-03-01 1993-03-01 コンパイル装置
US08/113,810 US5396631A (en) 1993-03-01 1993-08-31 Compiling apparatus and a compiling method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP03984193A JP3280449B2 (ja) 1993-03-01 1993-03-01 コンパイル装置

Publications (2)

Publication Number Publication Date
JPH06250846A JPH06250846A (ja) 1994-09-09
JP3280449B2 true JP3280449B2 (ja) 2002-05-13

Family

ID=12564196

Family Applications (1)

Application Number Title Priority Date Filing Date
JP03984193A Expired - Fee Related JP3280449B2 (ja) 1993-03-01 1993-03-01 コンパイル装置

Country Status (2)

Country Link
US (1) US5396631A (ja)
JP (1) JP3280449B2 (ja)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3190773B2 (ja) * 1993-09-30 2001-07-23 日本電気株式会社 言語処理プログラムのコンパイル処理方法
JPH07110800A (ja) * 1993-10-13 1995-04-25 Matsushita Electric Ind Co Ltd 最適化並列コンパイル装置及び最適化並列コンパイル方法
US5706503A (en) * 1994-05-18 1998-01-06 Etak Inc Method of clustering multi-dimensional related data in a computer database by combining the two verticles of a graph connected by an edge having the highest score
US6397380B1 (en) * 1994-10-21 2002-05-28 International Business Machines Corporation Computer-program compilers comprising a program augmentation capability
US5659754A (en) * 1995-03-31 1997-08-19 Sun Microsystems, Inc. Method and apparatus for an improved optimizing compiler
US5819082A (en) * 1995-06-07 1998-10-06 Sierra On-Line, Inc. Data storage optimization using an access order resource list
JP3650649B2 (ja) * 1995-06-16 2005-05-25 松下電器産業株式会社 最適化装置
US6074433A (en) * 1995-08-25 2000-06-13 Fujitsu Limited Optimization control apparatus and optimization control method for array descriptions
US6035123A (en) * 1995-11-08 2000-03-07 Digital Equipment Corporation Determining hardware complexity of software operations
US6535903B2 (en) 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
US5930509A (en) * 1996-01-29 1999-07-27 Digital Equipment Corporation Method and apparatus for performing binary translation
US6091897A (en) 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US5812854A (en) * 1996-03-18 1998-09-22 International Business Machines Corporation Mechanism for integrating user-defined instructions with compiler-generated instructions and for optimizing the integrated instruction stream
US5940620A (en) * 1997-03-07 1999-08-17 Ncr Corporation Compiler with intermediate compiling mechanism
US6059840A (en) * 1997-03-17 2000-05-09 Motorola, Inc. Automatic scheduling of instructions to reduce code size
EP0988591A1 (en) 1997-06-09 2000-03-29 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US5903761A (en) * 1997-10-31 1999-05-11 Preemptive Solutions, Inc. Method of reducing the number of instructions in a program code sequence
US6223337B1 (en) * 1997-12-12 2001-04-24 Hewlett-Packard Company Random test generation for compiler optimization
JP4027482B2 (ja) * 1997-12-24 2007-12-26 富士通株式会社 暗号復元を行う翻訳装置およびその方法
US6247174B1 (en) * 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
US6158048A (en) * 1998-05-29 2000-12-05 Intel Corporation Method for eliminating common subexpressions from java byte codes
US6389590B1 (en) * 1999-06-22 2002-05-14 Microsoft Corporation Indefinite-size variables within an intermediate language
JP4462676B2 (ja) * 1999-10-27 2010-05-12 富士通株式会社 プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US20020038453A1 (en) * 2000-08-09 2002-03-28 Andrew Riddle Method and system for software optimization
US7000227B1 (en) * 2000-09-29 2006-02-14 Intel Corporation Iterative optimizing compiler
GB2411990B (en) * 2003-05-02 2005-11-09 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
US7367023B2 (en) * 2003-07-10 2008-04-29 International Business Machines Corporation Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability
US7765539B1 (en) 2004-05-19 2010-07-27 Nintendo Co., Ltd. System and method for trans-compiling video games
JP4983801B2 (ja) * 2006-09-28 2012-07-25 富士通株式会社 プログラム性能解析装置
US20080092113A1 (en) * 2006-10-12 2008-04-17 Weinstein Randall K System and method for configuring a programmable electronic device to include an execution engine
US8813057B2 (en) * 2007-03-31 2014-08-19 Intel Corporation Branch pruning in architectures with speculation support
US20090193400A1 (en) * 2008-01-30 2009-07-30 Ivan Baev Interprocedural register allocation for global variables
US9207921B2 (en) * 2009-06-22 2015-12-08 Oracle America, Inc. Fault tolerant compilation with automatic optimization adjustment
JP6201788B2 (ja) 2014-01-29 2017-09-27 富士通株式会社 ループ分割検出プログラム及びループ分割検出方法
WO2016116132A1 (en) * 2015-01-19 2016-07-28 Huawei Technologies Co., Ltd. Systems and methods for execution of algorithms on parallel heterogeneous systems
US10156825B2 (en) 2016-02-29 2018-12-18 Canon Kabushiki Kaisha Developing apparatus with independently rotatable members supporting a developing frame body, process cartridge, and image forming apparatus

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
US4763255A (en) * 1984-10-31 1988-08-09 International Business Machines Corporation Method for generating short form instructions in an optimizing compiler
JP2749039B2 (ja) * 1987-11-06 1998-05-13 株式会社日立製作所 オブジェクト生成方法
JPH0281137A (ja) * 1988-09-19 1990-03-22 Hitachi Ltd 最適化コンパイラ及びコンパイル方法
US5193190A (en) * 1989-06-26 1993-03-09 International Business Machines Corporation Partitioning optimizations in an optimizing compiler
US5212794A (en) * 1990-06-01 1993-05-18 Hewlett-Packard Company Method for optimizing computer code to provide more efficient execution on computers having cache memories
US5293631A (en) * 1991-08-06 1994-03-08 Hewlett-Packard Company Analysis and optimization of array variables in compiler for instruction level parallel processor

Also Published As

Publication number Publication date
US5396631A (en) 1995-03-07
JPH06250846A (ja) 1994-09-09

Similar Documents

Publication Publication Date Title
JP3280449B2 (ja) コンパイル装置
WO2021114530A1 (en) Hardware platform specific operator fusion in machine learning
JP3896087B2 (ja) コンパイラ装置およびコンパイル方法
US5293631A (en) Analysis and optimization of array variables in compiler for instruction level parallel processor
JP2755154B2 (ja) プログラム変換処理装置およびプログラム変換処理方法
CN100465895C (zh) 编译器、编译方法
US20080141229A1 (en) Processor, program conversion apparatus, program conversion method, and computer program
KR100325658B1 (ko) 프로세서
US5339420A (en) Partitioning case statements for optimal execution performance
EP0743599A2 (en) Method of generating code for programmable processor, code generator and application thereof
EP0843257A2 (en) Improved code optimiser for pipelined computers
JPH08507889A (ja) スーパースカラマイクロプロセッサ用のプログラムから並行的に処理可能な命令グループを機械的に生成する方法
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
JP2002024011A (ja) プロセッサにおける命令の叙述された実行
JPH1173325A (ja) プログラム変換装置及び記録媒体
US20020083423A1 (en) List scheduling algorithm for a cycle-driven instruction scheduler
EP0795821A1 (en) Optimization apparatus using global analysis to remove redundant transfer instructions
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
US5781777A (en) Optimization method for computation partitioning oriented to a distributed memory
US7979853B2 (en) Compiler device, method, program and recording medium
Kessler Compiling for VLIW DSPs
EP0096574B1 (en) System and method of renaming data items for dependency free code
Huang et al. ASIA: Automatic synthesis of instruction-set architectures
JP4721975B2 (ja) コンパイラ装置およびコンパイル方法
JPH02176938A (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: 20020205

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080222

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090222

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090222

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100222

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110222

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees