JPH05508494A - ソフトウェア開発のためのコンピュータプログラムの統合階層表示 - Google Patents

ソフトウェア開発のためのコンピュータプログラムの統合階層表示

Info

Publication number
JPH05508494A
JPH05508494A JP3512079A JP51207991A JPH05508494A JP H05508494 A JPH05508494 A JP H05508494A JP 3512079 A JP3512079 A JP 3512079A JP 51207991 A JP51207991 A JP 51207991A JP H05508494 A JPH05508494 A JP H05508494A
Authority
JP
Japan
Prior art keywords
program
source code
representation
node
ihr
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
JP3512079A
Other languages
English (en)
Inventor
バン、ダイク,ドン エイ.
クラマー,ティモシー ジェー.
ラスボールド,ジェームズ シー.
オーヘアー,ケリー ティー.
コックス,デイビッド エム.
セバーガー,デイビッド エイ.
オガラ,リンダ ジェー.
マサミツ,ジョン エイ.
ストラウト,ロバート イー.,ザ、セカンド
チャントラモウリ,アショク
Original Assignee
クレイ、リサーチ、インコーポレーテッド
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
Priority claimed from US07/537,466 external-priority patent/US5179702A/en
Application filed by クレイ、リサーチ、インコーポレーテッド filed Critical クレイ、リサーチ、インコーポレーテッド
Publication of JPH05508494A publication Critical patent/JPH05508494A/ja
Pending 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions

Abstract

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

Description

【発明の詳細な説明】 ソフトウェア開発のためのコンピュータプログラムの統合階層表示 技 術 分 野 本発明は一般にコンピュータプログラムのソフトウェアの開発そして特に原始コ ードプログラムからオブジェクトコードファイルを発生するコンパイラおよび、 上記オブジェクトコードファイルがコンピュータシステム、特に高性能マルチプ ロセッサシステムにより実行されるときそれらをデバッグするためのデバッガ− の最適化に関する。
背 景 技 術 最近ソフトウェアの開発はコンピュータプログラムを発生するプロセスにおける 二つの独立したタスク、すなわちコンピュータ処理システムで走行されるべき実 行可能オブジェクトコードファイルへのそのプログラムのコンパイル、およびそ のコンピュータ処理システムでその実行可能なファイルが実行されているときの そのデバッキングに焦点づけられている。一般に、コンパイラの異るバージョン が夫々のプログラム言語および夫々のコンピュータ処理システムについてつくら れる。同様に、別々のデバッガ−が夫々のコンピュータ処理システムにおける実 行可能なオブジェクトコードをデノくラグするためにつくられる。コンノくイラ とデノくツガを別々1;つくることにより、殆んどの従来のソフトウェア開発シ ステムlよ、夫々のツールがそのシステム内のツールにつ0て殆んどあるいは全 く知識を有しない、別々の゛ソールの集合である。
コンパイラの設計と構成は例えばアホ、セチおよびウルマン(^ho、 5et hi and Ullman ) 、コン、(イラズ:原n1ques and  Tools) 、アデイソンーウエズリイ(Addison−Wesley) (198[1) ;およびウェイト他(watte et al )三ンガー7 sルラグ(Sprlnger−Verlag) (1984)のよう1;従来周 知である。コンパイラはFORTRANのような与えられたコンピュータ原始言 語を与えられたコンピュータ処理システム(すなわちターゲット機械)1こより 実行可能なコードに変換する。コンピュータ原始言語のコンパイルは一連の変換 を通じて行われる。まず、原始コードを含む記号ストリングが辞書的に分析され て翻訳用の原子ユニットまたはワードを確認する。次1こ、その言己号ストリン グが構文的に分析されてワード間の文法関係を確認する。一般に、その出力は構 文解析木の形で表現され、そしてこの構文解析木が原始コードの中間言語表現に 変換される。殆んどのコンノくイラは構文解析木を明確な形では発生せず、構文 解析が行われるときに中間コードを形成する。次にこの中間コードに最適化が行 われ、ソノ後、ターゲット機械−実行可能またはオブジェクトコードが発生され る。現在の高性能のコンピュータ処理システムについてのコンパイラの最適化の 例は日立S−810スーパーコンピユータ用のコンパイラ(例えば米国特許第4 773007号、同第4807126号、同第4821181号、同第4833 606号、同第4843545号および同第4853872号)、クレイ−1ス ーパーコンピュータ用コンパイラ(例えばクレイリサーチバブリケーション5R −0018)および18Mメインフレームコンピュータ用コンパイラ(例えば米 国特許第4782444号、同第4791588号および同第4802091号 )を含む。
デバッガの設計と構成も従来周知である。デバッガはオブジェクトコードファイ ルの実行におけるエラーを識別しそして実行可能オブジェクトコードファイル内 で明らかとされたエラーの原因を原始コードプログラムまで追跡するのを助ける ことにより、実行可能コードの発生においてプログラマ−を支援する。殆んどの デバッガは、コンピュータ処理システムのハードウェアの特徴とそのシステムで のオブジェクトコードファイルの実行との間に固有の関係があるため、夫々のコ ンピュータ処理システムに固有のものとなっている。デバッグプロセスは与えら れたコンピュータ処理システムで実行する与えられたプログラミング言語につい て比較的簡単なものでありうるが、現在のデバッガについての問題は最適化コン パイラ、すなわち例えば高性能コンピュータ処理システム用のソフトウェア開発 システムの部分により発生される実行可能コードにおけるエラーの有効な識別を 行うことである。最適化コンパイラにより発生される実行可能コードのデバッグ の困難性は、そのコンパイラがマルチプロセッサシステムにおける2以上のプロ セッサで実行しうるコードを発生するとき更に大きくなる。
最適化はマルチプロセッサシステムを含む高性能コンピュータ処理システムで実 行されるべきプログラムについてしばしば行われる。コンパイラシステムの最適 化部分の目的は、(a)そのプログラムの実行速度を上げること、(b)実行可 能コードのサイズを減少すること、(C)効率のよい資源割り振りにより処理コ ストを最少にすること、である。最適化コンパイラでしばしば用いられる最適化 は一般に“局所“最適化と“大域゛最適化として知られている二つのクラスに分 けることが出来る。
局所最適化は“基本ブロック”のような比較的小さい領域またはわすかに2個の 隣接した機械命令の解析にもとづくものである。入城最適化は2個以上の基本ブ ロックの解析にもとづくものである。その例は“コードモーション° (ループ をはずれて動くコード)および“入城共通部分表現削除(global co■ on 5ubexpressfon elil−nation)”である。コン パイルシステムでは現在多くの形式の局所および入城最適化が用いられているが 、それらのすべてが原始コードプログラムの組織と構造から明らかでなくその結 果プログラムの効率のよいデバッグに関連する問題が大きくなるような形でプロ グラムの実行に影響する。これら問題は、2個以上のプロセッサが与えられたプ ログラムについての実行可能コードファイルの部分を実行中となることのあるマ ルチプロセッサシステムでは更に大きくなる。
一般に、異るプログラム言語についてのコンパイラはコンパイルプロセス中興る 中間表現を用い、デバッガはそのデバッグプロセスにおいて更に他の中間表現を 用いる。デバッガは種々のコンパイラで用いられた中間表現についての知識がな いため、最適化された実行可能コードを元の原始コードに関連づける方法をもた ず、その結果、最適化されたコードのデバッグが非常に困難となる。
また、異る中間表現を用いるコンパイラについては、言語間のインライン処理が 不可能である。殆んどの従来のアラセンブラーは共通の中間表現を用いないため 、アッセンブリ言語プログラムは高レベル言語プログラムについて用いられたも のとは異るデバッガを用いなければならない。更に、これまではアッセンブリ言 語プログラムの最適化は殆んど試みられていない。その理由は部分的には、アッ センブリ言語プログラムがプログラマが書込もうとする様に書込まれるとする仮 定のためであり、そして部分的にはアッセンブリ言語プログラム専用のオブチv  イf (optimizer )を開発するためのコストである。
エイノ(Ada)プログラム言語用のエイダブログラム支援エンバイロンメント (Ada Programs!ng SupportEnvironment  (A P S E ) )のような最近のソフトウェア開発システムは上記問題 のいくっがを解決するためにコンパイルシステム内の要素の多くにより共用され る共通の中間表現(CIR)を用いる。しかしながら、D I ANAと呼ばれ るこの共通中間表現はエイダブログラム言語に専用のものである。かくして、コ ンパイルシステムでの中間レベルでの言語の混用は不可能である。
更に、D IANAはそれ自体、原始プログラムについてオブチマイザにより行 われる変換を表わすことは出来ない。そのため、エイダエンバイロンメントでの 最適化されたプログラムのデバッグは困難である。例えばエイノデバッガは、コ ンパイラが変数をメモリ位置ではなくレジスタに維持することを決定するとすれ ばその変数の値をどこで見い出すかについて知らされない。また、D I AN Aは機械レベルでの命令を表現せず、そのためアッセンブリ言語プログラムの最 適化を支援するためのD I ANAの使用は不可能である。
他の最近のコンパイラシステム(米国特許第4667290号)は同一の共通中 間表現をつくる異ったプログラム言語用の複数の前置装置(multiple  frontends)を限定している。この方法は初期のソフトウェア開発シス テムにおける問題の内のいくつかを解決するものであるが他の問題は解決出来な い。まず、この従来のソフトウェア開発システムでつくられるCIRの順次型特 性は原始プログラムにおいてオブチマイザにより行われる変換を表現出来ない。
第二に、デバッガはこの開発システムと密に統合されていない。そのため、デバ ッガはコンパイラにより行われた変換の種類を知ることが出来ず、それ故最適化 されたコードのデバッグは困難である。第三に、この従来のソフトウェア開発シ ステムにおけるアッセンブリは共通の中間表現ではなく、再配置可能なオブジェ クトコードを発生するから、コンパイラはアッセンブリ言語プログラムを最適化 するためには使用出来ない。このようにビーブホール最適化のような原始的な最 適化のみが機械従属レベルで行えるにすぎず、すなわちコードのレベルでは特定 のターゲット機械で走行しつるのみである。第四に、この従来のソフトウェア開 発システムのデバッガはコンパイラで発生したClR1::ついて動作するよう に設計されているからこれはアッセンブリ言語プログラムの原始レベルのデバッ グには不適当である。他の従来のシステムではこの問題はアッセンブリ言語プロ グラム用の原始的デバッガを設けることにより解決している。しかしながら、こ れにはユーザ・は二つの異るデバッガ、すなわち高レベル言語のデバッグ用とア ッセンブリ言語のデバッグ用のものを学ばなくてはならない。
コンパイラ、アッセンブリおよびデバッガ用の統合されそして単一化された中間 表現が使用可能であるとしても、現在の方法およびシステムは最適化に最も適し た形で情報を表現しない。従来のソフトウェア開発システムで利用される種々の 形式の共通中間表現は原始コードでの実際のプログラミングステートメントにの み関する情報の本質的に単純な線形表現である。従来のソフトウェア開発システ ムの共通中間表現はコンパイルされたプログラムについての重要な文脈および最 適化情報を保存するための機構を有していない。最も重要なことは、現在の共通 中間表現の実際の構造が、原始コードプログラムのコンポーネント間の関係の多 くを露呈しないため効率のよい最適化を可能としないということである。
現在のソフトウェア開発システムは与えられた原始コードプログラムについて効 率のよい効果的な実行可能なオブジェクトコードファイルをつくることが出来る が、原始コードを最適化されたオブジェクトコードプログラムについてのすべて の形の情報の共通表現を可能にする、完全に統合されたソフトウェア開発システ ムは存在しない。その結果、ソフトウェア開発システムのすべてのコンポーネン トにより一つの共通の中間表現が効果的に利用しうるようにすると共に、特に高 性能マルチプロセッサエンバイロメントでの最適化とデバッグ用のプログラムに ついての付加的な情報を表現することの出来る統合ソフトウェア開発システムの 必要性がある。更に、ソフトウェアの開発中、多種の最適化技術を行うより適し た、この共通中間表現を行うためのよりすぐれた方法および構造の必要性がある 。
発明の要約 本発明は1以上の手順プログラム言語で書かれた原始コードプログラムを実行可 能なオブジェクトコードファイルにコンパイルするための共通中間表現として完 全に統合された階層型表現(以下IHRと記す)を利用するモジュラコンパイル システムである。この統合された共通中間表現の構造は機械独立性最適化並びに 機械従属性最適化の両方を支援しそしてまた実行可能オブジェクトコードファイ ルの原始レベルのデバッグを支援する。この統合階層表現(IHR)は言語依存 型であり、デバッガを含むソフトウェア開発システムのコンポーネントのすべて により共用される。本発明においては″言語依存型゛は、IHRが複数の高レベ ル手順コンピュータプログラム言語並びに特定のアッセンブリ言語を表現出来る ことを意味する。すべてのコンポーネントが同一のIHRを共用するのであるか ら、システム内のどのコンポーネントもソフトウェア開発システム内の他のコン ポーネントにより発生されたコンピュータプログラムについての情報を理解出来 る。
個々のプログラムステートメントにのみ関係する従来の共通中間表現は異り、本 発明のIHRは最適化とデバッグのためのコンピュータプログラムについての付 加情報を表現することが出来る。例えば、本発明のコンパイルシステムはIHR で行われた最適化についての情報を含む。これにより、デバッガはユーザに、実 際の最適化されたコードがどのように見えるかについての正確な情報を与えるこ とが出来る。この付加情報をどのように使用するかについての例として、コンパ イラがプログラムの特定の領域にわたりレジスタ内の一つの変数を維持するよう に選ばれた場合を考えてみる。オブチマイザはIHR内のこの情報に気付き、そ れ故、その変数がレジスタに記憶されていたとしてもその変数の値を見い出すこ とが出来る。この付加情報がなければ、ユーザはそのプログラムの特定の領域の 実行中にその変数の真の値を知る方法はない。本発明のIHRに記憶される付加 情報の他の例は命令スケジューリングに関する情報である。命令スケジューリン グ最適化の結果、コンパイラは実行速度の改善のため原始言語ステートメントに 関係する命令を移すかあるいは再配列することになる。命令の移動についての情 報は、元の原始言語ステートメントに対応する実行可能オブジェクトコードファ イルのどこに区切点をセットするかについてデバッガが知るようにIHRの構造 内に効率よく表現される。
本発明のIHRは手順インラインのための新規でより効率の高い手段を可能とす る。手順インラインは、コンパイラが手順呼出しをその呼出された手順のコード の実体と置き代えて呼出された手順コードがプログラムコードの部分として実行 するようにするプロセスである。手順呼出しがプログラムコードにインライン化 されないときにはそれら呼出しはプログラムコードの実行中に行われそしてかな りのオーバヘッドを生じさせることになりうる。一つの手順呼出しのオーバヘッ ドは他の異るコードセクションへのジャンプを行いそしてそのコードセクション からもどるための時間的コストとそれらジャンプについてのレジスタの保存と回 復である。インラインは一つのプログラムの実行中になされる手順呼出しのオー バーヘッドを保存する。本発明のインライン方法は従来のインライン方法に対し 二つの重要な利点を与えるような形でIHRを用いる。まず、本発明は異る言語 間のインラインを可能にするように言語間の制約を除くためにIHRを用いてイ ンラインを行う。第二に、本発明はプログラムの完全な最適化を保証しそしてフ ァイル間にまたがり呼出された手順をインラインするように、コンパイル/最適 化プロセスにおける二つの独立した点で手順的インラインを行う。
従来の共通中間表現に対する他の改善点は、本発明が高レベル言語およびアッセ ンブリ言語の両方を同一のIHRを用いて表現しうるということである。そのた め、高レベル言語についてコンパイラにより行われる多数の最適化がアッセンブ リ言語プログラムでも行いうる。例えば、命令スケジューリングは従来のアッセ ンブラでは行われないが、本発明ではそれを行うことが出来る。アッセンブリ言 語プログラムの原始レベルのデバッグは高レベル言語デバッガと同一のデバッガ を用いて可能である。デバッガはIHRを理解しそしてコンパイラとアッセンブ ラの両方が同一のIHRを発生するがら、アッセンブリ言語プログラムと高レベ ル言語プログラムの両方のデバッグが単一のデバッガを用いて達成出来る。
本発明のIHRは原始コードプログラムに関係するすべての形式の情報の階層的 図形形データ構造表現である。
その広義の形ではこのIHRは手順プログラム言語とターゲット機械に対して独 立したハイフオーム(HiForm(IF))表現およびターゲット機械に従属 するローフオーム(LoFors (L F ) )表現からなる。階層的図形 データ構造を用いてIHRは、夫々がプログラムについての成る情報を図形表示 すると共にIHRの他のノードと成る形式の関係を有する関連ノードセットとし て原始コードプログラムについての異る情報レベルおよびタイプを表現する。一 般に、プログラムについての三種の異る情報がIHRのノード構造に表現されつ る。すなわち文脈情報、実行可能情報および最適化情報である。それらすべての 種類の情報間の種々の相互関係のために、夫々の種類の情報は1以上のノードの すべてまたはその部分として表現されうる。統合ノードセットとしてのこれら三 種の情報のIHRによる図形表現はコンパイル中の多種の最適化技術、特に一つ のプログラム内の種々の関係の図形解析(例えば制御フロー、従属性解析等)に もとづく最適化技術を実施するための効率のよい効果的な機構を与える。
最高レベルではプログラムモジュールは静的プログラムスコープ(有効範囲)ノ ードの集合として表わされる。
スコープノードは一つのプログラムのスコープのHF表現を含む。原始言動プロ グラム内の夫々固有のスコープは一つのHFスコープノードに対応する。各スコ ープノードはスコープのタイプ、関連記号ノード、このスコープ内に限定される 記号についての記号テーブルおよびスコープグラフをつくるために使用出来る他 のスコープノードへの接続(兄弟スコープおよび親および子のスコープ)、に関 する情報を含む。
各スコープノードについて記号ノードとブラグマ(pragma)ノードの関連 セットがある。記号ノードは名前のついたオブジェクトのハイフオーム(HF) 表現である。定数、変数、仮パラメータ、構造的コンポーネント、ラベル、マク ロ、静的データブロック、等についての記号ノードが存在する。一つのスコープ の記号ノードはそのスコープ内で使用しうるすべての記号を限定する。
このレベルにおける変数およびステートメントについての記号ノードは一般に原 始コードプログラムで用いられる実際のプログラム変数に対応する。プラグマノ ードはそのスコープノードについてのコンパイラ指示およびそれら指示(例えば 最適化制御、リスト(listing ) 、制御、等)をつけうる他の付加情 報を表わす。
各スコープノードには一連のステートメントノードが関連づけられる。ステート メントノードはステートメントのハイフオーム(HF)表現を含む。夫々の非構 造化(unstructured)原始言語ステートメントは一つのHFステー トメントノードに対応し、構造化(5tructed)原始言語ステートメント は数個のHFステートメントノードに対応しうる。ステートメントノードは辞書 的順序でリンクされる。これは基本ブロックが含む最初と最後のステートメント ノードの識別を可能にすることによりその基本ブロックの表現を容易にする。
各ステートメントノードは関連する式(expression)ノード群を有す る。弐ノードはHFでの式の表現である。
式は関連するステートメントをつくる一組の演算子(例えばロード、加算、乗算 )とオペランド(すなわち変数または定数)を表わす。概念的には一つの式は関 連するステートメントにより定められた演算の結果であるプログラム内の成る値 の表現である。
式ノードにはリテラルノード、タイプノードおよびLFノードが関連づけられる 。リテラルノードはオブジェクトまたはオペランドにコンパイル一時間定数を付 加したもののHF表現である。タイプノードはオブジェクトのデータのタイプ( 例えば整数、浮動小数点、倍精度)のHF表現である。各式に関連した最低レベ ルにおいて、LFノードはその成用に発生された機械命令の表現である。式の種 類により、1個以上のLFノードが階層木関係における一つの弐ノードに関連す る。
夫々のノードに関係する実際の情報はプログラムに関する三つの一般的な情報の 種類(文脈、実行および最適化)の内の一つ以上を含むことが出来るが、一般に 文脈情報はスコープノードと記号ノード内に表わされそして実行情報はステート メントおよび式ノードに表わされる。
最適化情報は文脈および実行情報の解析からコンパイルシステムにより発生され る情報であり、そして一般に三つの付加的ノード構造ニブロックノード、DUD eノードおよびDarcノードおよびループノードに記憶される。
定義−使用(def 1nit 1on−use)情報は変数定義をその定義に より影響を受けるその変数の使用のすべてに関連づける。使用一定!!、 (u se−defir+ftfoi)情報は一つの変数の使用をその使用に影響する 変数のすべての定義に関連づける。定義一定義(del’1nitions−d efinition)情報は変数定義をその定義により廃棄とされた変数のすべ ての定義に関連づける。本発明は単一および複数のワード変数、等価とされた(  5quivalenced)変数、ポインタおよび手順呼出しくすべての潜在 的な側効果を含む)についての定義−使用、使用一定義および定義一定義の情報 をベクトル化および多重実行についてなされた従属性解析の一体部分である単一 の表現(DUDeノードおよびDARCノード)に組み入れる。各DUDeノー ドは一つの変数の使用または定義を表わす。2個のDUDeノードが、可能なデ ータの従属性が存在するとき、一つのDARCノードに接続する。
最適化を支援する他の構造は構造図である。IHRのこの部分は高レベル言語プ ログラムにおけるループの静的なネストを表わす。この構造図はループノードと ブロックノードを含む。ループノードは高レベル言語におけるループ(例えばF ORTRANにおけるDO小ループCにおけるループについて)を表わす。ブロ ックノードは高レベル言語プログラムでの基本ブロックを表わす。
この構造図はプログラム内のループと基本ブロックの階層を示すように接続され る。
本発明は特にマルチプロセッサコンピュータ処理システムに用いて好適であり、 特に複数の密に結合した、一つの共通のメモリを共用するプロセッサを有する高 度に並列のマルチプロセッサシステムに用いて好適である。
しかしながら、本発明は単一のスカラプロセッサからバイブラインベクトル処理 機構を有する高度並列マルチプロセッサシステムまでのコンピュータシステムに ついても同様に有効である。
好適な実施例では本発明の統合モジュラコンパイルシステムには、プログラム管 理プログラム、コンパイラ、ユーザインターフェースおよび分散デバッガを含む 一群の統合プログラム開発ツールからなる。プログラム管理プログラムはソフト ウェアプログラムを表わす原始コードファイル用の開発エンバイロメントを制御 する。コンパイラは並列実行の可能な多重系からなるオブジェクトコードファイ ルをつくるために原始コードファイルをコンパイルする。実行可能コードファイ ルはこのオブジェクトコードファイルからとり出される。ユーザインターフェー スはマルチプロセッサシステムでの実行可能コードファイルの実行をモニタし制 御するために使用可能な状態、制御および実行オプションの共通の可視表示を与 える。11(Rを用いる分散デバッガはマルチプロセッサー システムでの実行 可能コードファイルの実行の情報および制御をデバッグする。
アッセンブリ原始コードプログラムからオブジェクトコードを発生するアッセン ブラはアッセンブリ言語プログラムの成る種の最適化を自動的に行う。アッセン ブラはLFを発生しそれが2進ジエネレータによりオブジェクトコード(機械命 令)に変換される。このアッセンブラは更にアッセンブリ言語プログラム用のH Fも発生する。これはプログラムのHF表現と本発明の分散デバッガとの間の統 合により、アッセンブリプログラムのデバッグに有用な情報を与える。
この分散デバッガはこのマルチプロセッサシステム用の最適化された多重実行オ ブジェクトコードをデバッグすることが出来る。これはまたマルチプロセッサシ ステムとそのシステムと共にネットワークをつくる1個以上の遠隔システムを含 む全コンピュータネットワークにまたがる分散プログラムもデバッグする。コン パイラによりつくられる最適化された並列オブジェクトコードはユーザの原始コ ードのコンパイルの結果として通常ユーザが期待する非最適化単−プロセッサコ ードとは実質的に異るものである。この種のエンバイロンメントでのデバッグを 行うために、この分散デバッガは本発明のIHHに含まれる情報を用いて原始コ ードファイルをソフトウェアプログラムの最適化された並列オブジェクトコード ファイルにあるいはその逆にマツピングする。
本発明の主目的は言語−独立性および機械−独立性最適化並びに機械−従属性最 適化、および最適化された実行可能オブジェクトコードファイルの原始レベルの デバッグを支持することの出来る統合階層表現を提供することである。
本発明の他の目的はコンパイラ、デバッガ、アッセンブリ、オブチマイザおよび コードジェネレータを含む、統合モジュラソフトウェア開発システムのコンポー ネントのすべてにより共用される統合階層表現を提供することである。
本発明の他の目的は原始コードプログラムと関連する文脈、実行および最適化情 報を表わすために図形的な階層データ構造を用いそしてソフトウェア開発中の種 々の最適化技術、特にプログラム内の種々の関係の解析にもとづく最適化技術を 用いるための効率のよい有効な機構を与える、統合階層表現を提供することであ る。
本発明の他の目的は統合階層表現と、アッセンブリおよびコンパイラにより共用 される共通のオブチマイザを用いることによりアッセンブリ言語プログラムを最 適化する方法を提供することである。
本発明の他の目的は言語−独立性統合階層表現を用いることによりアッセンブリ 言語プログラムの原始レベルでのデパックを行う方法を提供することである。
本発明の他の目的は高度並列マルチプロセッサシステム用の原始コードを発生し デバッグするに特に適した統合モジュラコンパイルシステムを提供することであ る。
本発明の他の目的は言語間インラインおよびコンパイ来る統合モジュラコンパイ ルシステムを提供することである。
本発明の上記および他の目的は図面、好適な実施例の詳細な説明および請求範囲 から明らかとなるものである。
図面の説明 図1aおよび1bは本発明のソフトウェア開発システムのコンポーネントの全体 ブロック図である。
図2a−1,2a−2および2bは本発明の統合階層表現(IHR)の構造を示 す全体ブロック図である。
図3は本発明における式ノードとLFノードの間の関係を示すブロック図である 。
図4aおよび4bは本発明の流れ図であって、高度に最適化されたコード言語間 インラインのデバッグ、アッセンブリ言語プログラムの最適化と原始レベルのデ バッグを可能にするIHRへの原始プログラムの変換方法を示す図である。
図5aおよび5bは最適化されたコードのデバッグのための情報を与えるデバッ ガレジスタマツピングの構造および最適化されたコード内の変数を含むレジスタ を決定する方法を示す図である。
図6は最適化情報を含むループ構造図の構造を示す図である。
図7は本発明のソフトウェアアーキテクチャを実行するための単一マルチプロセ ッサクラスタシステムの好適な実施例のブロック図である。
図8aおよび8bは図7に示すマルチプロセッサクラスタシステムの4個のクラ スタの実行を示すブロック図コンパイラ、アッセンブリおよびデバッガを含むソ フトウェア開発システムは周知である。そのような開発システムに関連する概念 および用語のワーキングの理解は本発明の好適な実施例を説明する上で必要であ 。るコンパイルシステムの技術の現在の状態の詳細な説明につい参照する。
本発明は任意の数のコンピュータ処理システムについて作用することが出来るが 、本発明を実行するためのコンピュータ処理システムの好適な実施例は一つの共 通メモリを共用する複数の密に結合したプロセッサを含む高度に並列のマルチプ ロセッサクラスタシステムである。
図7に示す本発明を実行するためのマルチプロセッサクラスタシステムの好適な 実施例における単一のマルチプロセッサクラスタは共用資源の大きなセット12 (例えば主メモリ14、大域レジスタ16および割込機構18)を共用する複数 の高速プロセッサ10を有する。この実施例ではプロセッサ10はベクトルおよ びスカラーの両方の並列処理が可能であり、そして調停ノード手段20を介して 共用資源12に接続する。プロセッサ10はまたこの調停ノード手段20と複数 の外部インターフェースポート22および入力/出力集線装置(IOC)24を 介して種々の外部データ源26に接続する。外部データ源26は1以上の高速チ ャンネル30を介して入力/出力集線手段24にリンクする2次メモリシステム (SMS)28を含むことが出来る。またこの外部データ源26は1以上の標準 チャンネル34を介して入力/出力集線装置にリンクする種々の他の周辺装置お よびインターフェース 32にも接続しつる。この周辺装置とインターフェース 32はディスメモリシステム、テープメモリシステム、端末およびワークステー ション、プリンタおよび通信ネットワークを含むことが出来る。
図88および8bはこのマルチプロセッサシステムの4クラスタ型バージヨンの ブロック図を示す。各クラスタ40a、40b、40c、40dはそれ自体のプ ロセッサセット10、共用資源12およびそのクラスタに関連する外部インター フェースポート22(図示せス)ヲ物理的に有する。クラスタ40a、40b、 40c、40dは本願の親出願で詳述されているように夫々の調停ノード手段2 0の一体化部分である遠隔クラスタアダプタ手段(図示せず)を介して相互に接 続する。クラスタ40 a、 40 b、 40 c、 40 dは物理的に分 離されているが、それらクラスタの論理構成および遠隔クラスタアダプタ手段を 介しての物理的相互接続は共用資源12のすべてに対する所望の対称形のアクセ スを可能にしている。この実施例のマルチプロセッサクラスタシステムは並列性 が望まれるコンピュータ修理工ンバイロンメントをつくる。そのようなマルチプ ロセッサシステムの並列資源を協調させ同期化する際に本発明を支援するマルチ プロセッサクラスタシステムにおける機構のいくつかは限定的なものではないが 、次のものを含む:信号機構、高速割込機構および大域レジスタおよびそれら大 域レジスタにおいて作用するTAS、FAA、FCAおよび5WAPのような原 子オペレーションを含む分散人力/出力サブシステム;アーク命令、ロード命令 、会計カウンタおよびウォッチポイント(watchpoint)アドレス;お よび命令キャッシユとベクトル命令の分離発行および開始を含む、プロセッサ1 0のバイブラインオペレーションを支援する種々の機構。これら機構は共にそし て個々にこの好適なマルチプロセッサシステムの共用資源への対称的アクセスお よびマルチレベルバイブラインオペレーションを支援する。
図18および1bにより本発明の種々のモジュラコンポーネントを説明する。コ ンパイラ200は種々の使用可能プログラミング言語について本発明の統合階層 表現(IHR)をインターフェースする1個以上の前端モジュールを含む。コン パイラ200のこの好適な実施例はフォートラン前端モジュール(Fortra n front−end )201とC先端モジュール(Cfront−end  ) 202を含む。前端モジュール201と202はハイフオーム(HfFo r−)(HF)で示す高レベル統合階層表現での原始コード表示を発生する。H F表現はオブチマイザ203、コードジェネレータ204、ローフオーム(Lo Forl)オブチマイザ205および2選ジェネレータ206により用いられる 。ローフオーム(LoForl)(L F)で示される低レベル統合階層表現は コードジェネレータ204並びにアッセンブラ210により発生される。LF表 現はローフォームオブチマイザ205と2進ジエネレータ206により用いられ る。IHRのHFおよびLFコンポーネントの好適な実施例およびIHRとソフ トウェア開発システムの種々のコンポーネントとの間の関係は後述する。
前端モジュール201と202の目的は原始コードプログラムの統合階層表現( IHR)の第1段(HF)におけるソフトウェアプログラムについての原始コー ドの表現をつくることである。前端モジュール201と202はその原始コード をハイフオームに分解する。この分解は原始コードの構文的な正確性を決定しそ して原始コードを中間コードに翻訳する。Cおよびフォートラン前端モジュール 201と202はオブチマイザ203とコードジェネレータ204を共用するか ら、プログラマは同一アプリケーションにおいて異るプログラミング言語を容易 に混合することが出来る。付加的な言語についてのコンパイラ前端モジュールを コンパイラ200に付加することが出来、そしてそれは存在する前端モジュール とオブチマイザ203およびコードジェネレータ204を共用する。
好適な実施例においてはCハンバイラ前端モジュール201はANSI X 2 .159−1989 C言語標準にもとづく。Cコンパイラ前端モジュール20 1への拡張はシステムV (System V)のプログラマ−が他のCコンパ イラにおいて慣れているものと同一の機能を与える。コンパイラ指示(Comp iler directive)の形の付加的拡張によりCPU−指導型(CP U−intensive )または大規模技術/科学アプリケーションが得られ る。Cコンパイラ前端モジュール201はマクロ処理を行い、後述するようにI HHの部分としてデバッグのためのマクロの定義を保存する。フォートランコン パイラ前端モジュール202はANS rフォートラン77にもとづいており、 他のユーザ(vendor)のフォートランコンパイラとの原始コード互換性に ついてのいくつかの拡張を含む。
すべての拡張は二つの異るユーザによるそれらにおけるコンフリクトがなければ 一つのプログラムで使用しうる。
また、それら拡張は後述するようにIHHの部分として保存される。IHRの好 適な実施例はCおよびフォートランの両方のプログラム言語を支持しうるHFお よびLF表現で与えられるが、IHRに対する付加および変更がエイゾ、パスカ ル(pascal)のような他のプログラム言語のプログラミング特性を支持す るために必要となりうる。
オブチマイザ203は標準スカラー最適化を行い、そしてベクトル化または自動 的なスレッドが出来るコードのセクションを検出してそれら最適化を行う。オブ チマイザ203は、より高速で走行するオブジェクトフードが数回の言語および 機械−独立性最適化を行うことで生じるようにHFコードを改善しようとする。
オブチマイザ203は積極最適化(aggresstve opti膳1zat 1on )を行う。これら最適化は原始コードの自動的スレッド、原始コードの 自動的ベクトル化、より良い最適化のための手順間解析、および後述するような 手順の自動的インラインを含む。またこのオブチマイザ203は好適なマルチプ ロセッサシステムのベクトル能力を用いるすべての機会を識別するために拡張従 属性解析を行う。この従属技術解析は多重スレッドを行うために用いられ、そし てこれが単一プログラムに複数のプロセッサを同時に適用しうるようにする。ま たこのオブチマイザはスカラーハードウェアを最も効率よく使用するための広い 範囲のスカラー最適化を適用する。強度低下(strength reduct ion) s帰納変数除去(induction variable eli* 1nat1on)および不変式ホイスチング(hoisting)のようなスカ ラーループ最適化は、ベクトル化あるいは自動的多重スレッドが出来ないループ で行われる。大域最適化は手順全体について行われる。これらは次のものを含む :定数の伝播、未到達コードの除去、共通部分式の除去、および構造化ループへ のハンドコード化(hand−coded) I Fループの変換。手順のイン ライン化は手順呼出しオーバーヘッドを除去するために自動的に小さい、しばし ば用いられる手順をインラインに引込む。
最適化は効率のよいアルゴリズムを使用したとしても時間およびスペース−指導 型プロセスである。最適化の選ばれた部分がターンオフされてコストのすべてを 伴わない利点のいくつかを与える。例えば、ベクトル化を行うにはスカラー大域 最適化を行う必要がない。しかしながら、入城変換を行わない場合にはベクトル 化のいくつかの機会が失われることがある。また、高速コンパイル化を行う必要 があり、そして最適比相がすべて飛越されてしまうような状況がありうる。この 実施例では、各オブチマイザすなわちオプチマイザ203とローフォームオブチ マイザ205は所望の最適化を活性または不活性とするために原始コードプログ ラムに適正なコマンドラインステートメントをそう人することでユーザにより選 択的に呼出されうる。
コードジェネレータ204は、必要であればオブチマイザ203を介して、前端 モジュール201と202からHFコードをとり出し、そのHFコードを原始コ ードプログラムの合成されたHFおよびLF表現に翻訳する。
要するに、コードジェネレータ204は原始コードの表現を言語および機械−独 立性高レベル表現(HF)から統合階層表現の部分である機械−従属性の低レベ ル表現(L F)に移す。
中間HFコードのLFコードへの翻訳プロセスが完了してしまうと、機械−従属 性最適化がローフォームオブチマイザ205により行うことが出来る。これら最 適化は、一つの手順全体にわたりレジスタに最も共通して用いられる変数を維持 することのような、レジスタを最適に使用しようとする試みを行わせる。この実 施例で行うことの出来る他の最適化は次のことを含む:特定のターゲット機械の 複数の機能ユニットを同時に使用し命令群を完了するに要する時間を最小にする ための命令スケジニーラ;ファイル間での手順呼出しオーバーヘッドを最少によ るリンケージ調整;メモリロードを出来るだけ早期に元にもどしループのボトム ローディングを行う後スケジューリング(post−scheduling ) プロセス:およびループオーバーヘットを最少にし資源利用を最大にするためル ープの本体を重複するループアンローリング(unrol lfng )。
オブチマイザ203と205の部分として、本発明のこの実施例は手順インライ ン化のための2段手段すなわち第1インライナ221と第2インライナ222を 含む。
手順インライン化は、コンパイラ200が一つの手順呼出しを呼出された手順内 の実際のコード本体と置き代えて呼出された手順がプログラムコードの部分とし て実行するようにするプロセスである。手順呼出しがプログラムコードにインラ イン化されない場合には、それら呼出しはプログラムコードが実行しそしてかな りのオーバーヘッドを生じうる間に行われる。一つの手順呼出しのオーバーヘッ ドとはコードの異ったセクションへのジャンプを行いそしてそれからもどるため の時間的コストとそれらジャンプに関するレジスタの保存と回復である。インラ イン化は一つのプログラムの実行中になされる手順のオーバーヘッドを節約する 。この実施例ではファイル内インライン化はオブチマイザ203と関連して第1 インライナ221によりHFレベルで行われ、ファイル間インライン化はローフ ォームオプチマイザ205と関連して第2インライナ222によりLFベベル行 われる。
実際のインラインプロセスでは手順呼出し側が位置指定されそして整合手段定義 (matching proceduredefinftion)がIHRで見 い出される。インライン化が有利であり経済的であると決定されれば、IHRの 形の手順定義のステートメントの等価物がコピーされて呼出し側でIHRに付加 される。すべての局所変数のコピーもこの手順定義から行われて呼出し側に付加 される。この定義におけるフォーマルなパラメータの使用が、コピーを行う時点 で基準にもどされる。
この実施例ではどの呼出しサイトがインラインされたかの決定はユーザ指示が必 要でないように自動的に行われる。しかしながら、ユーザはインラインする呼出 しについて知ることが出来る゛。プログラムが大きい局所メモリスペースを必要 とする手順を呼び出す場合、ユーザがインライン化を制御しないことがある。そ うでない場合にはコンパイラでのインラインプロセスはそのプログラム内のどの 手順呼出しサイトがインラインされつるかを決定する。本発明の方法ではプログ ラム原始コードのIHRがそのインラインプロセスを通じて利用される。
例えばインラインプロセスはIHRを用いてどの手順呼出しサイトがループ構成 内にあるかを決定しそしてそれら呼出しサイトにインラインの高い可能性を与え る。ループ構成内の手順呼出しにはより高い優先度が与えられそしてより大きく なりつるようにする。成る数のサイズステートメントノードにわたるルーチンは 、大きな手順のインラインの利点は小さいからインラインされない。
IHRは、反復性であるか、大きな局所変数メモリ(スタック)スペースを必要 とするか、あるいはインラインされた手順呼出しが全く非インライン呼出しとし てふるまうことがないようにする特性を有する手順に対する呼出しサイトを検出 すべく検査される。
同一コンパイルユニット(シングルファイル)′内のインラインは第1インライ ナ221によりコンノ寸イル時に行われる。コンパイルユニット間(ファイル間 )のインラインは第2インライナ222によりそのコンノくイルプロセスの終り 近くのリンク時に行われる。0<つ力)の呼出サイトは、すべてのコンパイルユ ニ・ノドの完全な中間データベース表現が使用可能であって潜在的なインライン の問題を検出するに必要なすべての情報が使用可能であるリンク時までインライ ンされえない。第2インライナ22により異るファイル間で手順がインラインさ れる場合には情報がIHRから手順間データベースに集められる。手順間データ ベース内に含まれるこの情報の部分は手順をインラインされるべきものを選択す るため(;本発明のこの実施例で用いられる。
インライナ221と222は手順間解析(IPA)230と関連して動作する。
コンlくビラ200力(一つの手順を処理しているときに他の手順に対する呼出 し力(あることがある。従来のソフトウエアエンノくイロンメントではコンパイ ラ200はそれらの他の(すなわち呼出された)手順の効果についての知識をも たない。そのような知識がないためコンパイラ200は最悪のケースを仮定し、 安全である多くの最適化を禁止するように強制される。手順間解析(IPA)は 手順情報の集合と解析である。この解析の結果によりコンパイラ200は呼出さ れた手順を最適化しうる。IPA情報の使用により、最適化を行いつる時点の数 が増加しなければならない。
IPAによる最適化は次のものを含む:共通部分式除去;前方置換、冗長記憶の 除去、一定の折りたため(constant foldidng)、一定の伝播 、死コード削除(dead code elLsfnation ) 、大域共 通部分式削除、ベクトル化および自動多重スレッド。更に、プログラム内の夫々 の手順についてIPA230は定義されあるいは使用された大域変数のリストを 集めそして夫々の変数が定義されあるいは用いられた回数をカウントする。IP A230は大域変数の定義および使用の回数を加算しそしてそれらを使用頻度順 に区分けする。最も頻繁に使用される変数はLレジスタに割り振られる。一つの 呼出された手順についてのこれらレジスタは呼出し手順からオフセットされて一 つの手順呼出しで保存し回復するレジスタの数を減少させる。
IPA230は、夫々が別々にコンパイルされそしてリンカ(Linker)  214によりリンクされる複数の手順モジュールからなる原始コードプログラム において手順間解析を行う際にリンカ214と関連して動作する。従来、エキゾ ースト(exhaustive)形および増分型の二つのタイプの手順間解析が 知られている。エキゾースト形解析については呼出しグラフがオブジェクトコー ドファイル内の情報から形成されて解析される。これは“スタートフロムスクラ ッチ(start from 5cratch) ”解析である。増分解析につ いては呼出しグラフと解析はそのプログラムの前のリンクから出されるものとし 、そして少数の変更された手順がその呼出しグラフで置き換えられる。これは“ ドウ アズ リトルワーク アズ ポジプル(do as 1ittle wo rk as possible )″解析である。
従来のシステムVエンバイロンメントではプログラマは一つの手順を変更し、コ ンパイルしそして他の手順を再コンパイルする必要のないプログラムをリンクす ることが出来る。その理由は手順間に従属性がないからである。
IPAエンバイロンメントでは、手順は呼出された手順がどのようにふるまうか についての知識にもとづく最適化にもとづくものであるから、手順間には従属性 がある。
従って、一つの呼出された手順が変更されて再コンノくイルされると、呼出し手 順も再コンパイルされねばならない。この問題は、手順の内呼出しを行うものが IPA230で決定された手順量情報の変化を有するとき手順を再コンパイルす ることで解決される。
コンパイルアトバイザ231はプログラマとコンノくイラ200の間のインター フェースとして機能する。実際にこのコンパイルアトバイザ231はオブチマイ ザ203と205がプログラマに最適化についての質問を出しうるようにする。
コンパイラ200は必要な情報を識別しそしてプログラマに対する質問を定型化 する。コンパイラ200はプログラマがコンパイルアトバイザ231によりそれ ら質問をアドレスづけしうるようにそれらを保存する。コンパイルアトバイザ2 31はプログラマの回答をコンパイラ200に中継する。コンノくイルアトバイ ザ231の第2の役割はプログラマが従属性を消そうとすることが出来るように 従属性の情報を表示することである。一つのプログラムにおける大間の従属性は そのプログラムの部分のベクトル化と並列化を禁止する。従属性を消すことによ りコンパイラ200はより効率のよいコードを発生しうるようになる。一つの従 属性を消すためにコンパイラが行うことの出来る変換が存在しない場合にはプロ グラマはそれを消すためにアルゴリズムを変更することが出来る。
デバッガ212は並列ユーザエンバイロンメントの部分として与えられる対話型 、記号型の並列デバッガである。デバッガ212は共通に使用可能なデノくツガ の標準的な特徴を含む。それら特徴はプログラマがデノくツガ212の制御によ り一つのプログラムを実行し、それをそのプログラムにおける指定された位置で 停止し、変数値を表示し、そしてそのプログラムの実行を続けることが出来るよ うにする。本発明のデバッガ212はいくつかの固有の特徴を有する。それら革 新的な能力は他のデバッガには一般にないユーザ機能を与える。デバッガ212 は2個のユーザインターフェースを有する。第1のライン型インターフェースは システムVユーザにとって慣れているコマンドを受ける。第2の、窓からなるイ ンターフェースはデバッガの能力を使用するに必要な学習量を最少とするように 設計される。
本発明のソフトウェアアーキテクチャは多数のエンバイロンメント(例えば機械 (gachlne ) A、 BおよびC)におけるデバッグ中のプログラムの セグメントについて高レベル言語源を表示するに必要な情報を維持する。このコ ンパイルシステムは高レベルプログラム原始コードを機械コードであるいはその 逆のマツピングをつくる。
他のデバッガにはないこのデバッガ212のいくつかの能力の内の一つは最適化 されたコードの原始レベルのデバッグである。適用可能であって原始レベルのデ バッグをまだ維持している最適化はデッドコード消去、コード移行、コードスケ ジューリング、ベクトル化、レジスタ指定および並列化を含む。
デバッガ212は並列コードのデパックを支持する。
プログラムの動的スレッド構造の表示がユーザの並列処理プログラムのデパック を支援する。ユーザは個々のスレッドに呼掛けることが出来そして、スレッドの 同期化コマンドはロック、イベントおよび障害のような標準的な同期化変数の状 態を表示する。デバッガ212は付加的な能力を与える。例えば、プログラマは データおよび通信並びにコードの区切り点をセットすることが出来る。
マクロファシリティが一つのコマンドに対し一連のコマンドを指定する。このコ マンド言語内の制御ステートメントはデバッガコマンドの適用においてより大き なフレキシビリティを与える。分散プロセスについてのサポートにより、プログ ラマは同時に異る機械でコードデバッグすることが出来る。統計的ツールを含む 多数の組込み関数がプログラマによるプログラムデータの解析を支援する。言語 固有の式のデバッガ212のサポートにより慣れた構文を使用しつる。
図1aおよび1bに示す本発明のソフトウェア開発システムのこの実施例の他の オプションとしてのコンポーネントはリンカ214とディスアセンブラ215を 含む。
リンカ214とディスアセンブラ215は共にコンパイラ200でつくられるオ ブジェクトコードファイル(,0f11es)で動作する。リンカ214は、互 いにリンクした、あるいは一つの原始コードプログラムによりアクセスしうる現 存する手順またはルーチンの予コンパイルオブジェクトコードファイルを含む1 以上のライブラリ216に接続しうる。
このソフトウェア開発システムの実施例の種々のコンポーネントを説明したから 、一つのコンビニ−タブログラムの統合階層表現のこの実施例についての構造を 次に説明する。この統計階層表現(IHR)の第1段はハイフオーム(HlFo rm) (HF )と呼ばれる。HFは高レベル言語プログラムの言語独立性の 中間表現である。これはコンパイラの前端モジュール201と202およびアセ ンブラ210によりつくられる。このコンパイラのすべての前端モジュールは同 一のHFをつくり、そして異るプログラム言語のHF表現は原始コードの再コン パイルを行うことなくインラインにより互いに組合わせうる。
HFは高レベルプログラムの意味エレメントを表わすノードでつくられる。これ らノードはテーブルへの指標により意味項目およびデータオブジェクトについて の情報の広いクラスを含むようにするためのリファレンスを含む。このためにポ インタの代りにテーブル−参照を用いることにより、本発明は高度バイブライン ベクトルコンピュータアーキテクチャの利点をとり入れることが出来る。これは また、主メモリ内のプログラムについての実行可能オブジェクトコードファイル を動かしあるいは再配置する際あるいはこの実行可能オブジェクトコードファイ ルを2次メモリに記憶する際により大きなフレキシビリティを与える。
コンパイラの前端モジュール201と202およびアブセンブラ210によりつ くられるプログラムのHF表現はオブチマイザ203と205、インライナ22 1と222、アッセンブラ210、コードジェネレータ204およびデバッガ2 12並びに図形コンパイラ開発ユーティリティ213により使用される。HFの ノード形のテーブル−型構造は原始から2進へのマツピング、レジスタの利用を デバッグするに必要な情報および高度に最適化されたコードのデバッグに必要な 他の情報を効率よく記憶する。
ローフオーム(LoPori) (L F )と呼ばれるIHHの第2の部分は プログラム用に発生された機械命令の円形−構造型表現である。この図形構造は いくつかの機械従属型最適化を機械コードレベルで行いうるようにすると同時に 統合階層表現を維持するためにそのプログラムのHF表現に対する関係を維持し つるようにする。
図2a−1,2a−2および2b並びにテーブルI−Xにより本発明のIHRの 階層構造を説明する。このIHRに含まれる最高レベルの情報はプログラムモジ ュール内の手順の静的ネストを表わすスコープノード100である。スコープノ ード100はそのスコープ101、そのスコープにネストされているスコープ1 02および現在のスコープのレベルの次のスコープ103についての記号に関す る情報を含む。またこのスコープノードにはそのスコープに含まれる第1の高レ ベル言語セグメント104が含まれる。Cで定義されるデータ構造としての一つ のスコープノードの構造はテーブルエに示す。この実施例のIHRの構造は特定 のデータ構造として与えられているが、データ構造に含まれる特定情報およびそ の情報をデータ構造で表わす方法についての多くの変形を本発明の範囲内でつく ることが出来る。
夫々のステートメントノード104はそのノードで表わされるステートメントの 種類(すなわち、指定ステートメント、ifステートメント、ループステートメ ント、等)についての情報を含む。ステートメントノード104はまた辞書の順 での次のステートメント105の情報およびそのステートメントに含まれる式の 表現を含む。デバッガ212が最適化されたコードをデバッグする際の支援とし て、ステートメントノード104はステートメントがインラインされているかど うかのインジケーションを含む。最適化されたコードのデバッグにおいて使用す る他のデバッグ支援はそのステートメントから発生される最初と最後の機械命令 のインジケーションである。この情報を用いてデバッガ212は命令スケジュー リングにより最適化されたコードがあっても区切り点を正確にセットすることが 出来る。ステートメントノードのこの構造をテーブル■に示す。
ステートメントノード104をグループ化したものがブロックノード106であ る。ブロックノードはそのプログラムの基本ブロックを表わす。基本ブロックは 1人力、1出力のステートメント群である。ブロックノード106は生の変数情 報を表わすビットベクトルを含む、種々の最適比相に必要な情報の多くを含む。
ブロックノード106はまたこの最適化情報を含むビットベクトルを指標づける ために用いられるデプス−ファースト(depth−first )番号を含む 。ブロックノードのこの構造はテーブル■に示す。式ノード107は高レベル言 語式を表わすための有向非循環グラフをつくる。これらはその式の演算子とオペ ランド108並びに演算子のデータタイプ■についての情報を含む。式ノードの 構造をテーブルVに示す。多くの場合、式ノードのオペランドはコンパイル時に 即知の値をもつオブジェクトを表わすリテラルノードでありうる。リテラルノー ドの構造をテーブル■に示す。
一つの式のデータタイプはタイプノード■で表わされる。タイプノード■はタイ プのコンポーネント並びにそのタイプのサイズについての情報を含む。タイプに ついての他の情報は表示されるタイプによりきまる。例えば、一つのアレイにつ いてのタイプノード■はそのアレイの番号と次元サイズについての情報を含む。
タイプノードの構造をテーブル■に示す。
記号ノード110は高レベル言語またはアッセンブリ言語プログラムで名前付き の項目を表わす。これらは記号の種類(変数、タイプ、ラベル、手順等)、プロ グラム内の、その記号が定義される位置、およびこの記号のデータタイプを示す タイプノード■のインデクス、についての情報を含む。またこの記号ノードには 最適化されたコード−デパックマツピング109−をデバッグするための情報が 含まれる。本発明のこの特徴の詳細は図58および5bにある。記号ノード11 0は、夫々がプログラム内の夫々のブロックノード106について1個の人力を 含むビットベクトルのアレイ150をポイントする。このアレイはブロックノー ド106のデプス−ファースト番号によりインデクスをつけられる。記号ノード の構造をテーブル■に示す。
図3により本発明のIHRのLF部分の構造を説明する。LFノード112は一 つのプログラムについて発生された機械命令の表現である。LFノード112は コードジェネレータとアラセンプラムよりつくられる。LFノード112はオブ コード、親式ノード107と108のオペランドとインジケーションを含む機械 命令についての情報を含む。LFノード112の構造をテーブル■に示す。
HFのコンポーネントの一つは定義使用従属性(Definltlon Use  Dependencies ) (D U D e )であるO定義−使用情 報は変数の定義をその定義により影響を受けるその変数のすべての使用に関係づ ける。使用一定義情報は一つの変数の使用をその使用に影響する変数のすべての 定義に関係づける。定義一定義情報は変数定義をその定義により消されるその変 数のすべての定義に関係づける。本発明は単一および多ワード変数、同値化変数 、ポインタおよび手順呼出しくすべての潜在的な側効果を含む)についての定義 −使用、使用一定義、定義一定義情報をベクトル化と多重スレッド化についてな された従属性解析の一体部分である単一の表現(DUDeノード)に組み入れる 。DUDeノードの構造をテーブルXに示す。
図4により本発明を用いるアッセンブリ言語プログラムの高度に最適化されたコ ードのデバッグ、言語間インラインおよび最適化および原始レベルのデパックを 与える、原始言語の2進コードへのコンパイルのための方法を説明する。
複数の言語前端モジニール201と202の夫々は周知の分解技術および上記し た他の分解技術を用いて与えられた高レベル原始言語を言語−独立性の中間表現 HF250に翻訳する。HF250は次にオプションとして言語独立性のオブチ マイザ203に送られる。言語独立性オブチマイザ203はHF250により多 くの機械−独立性最適化を行いそしてHF250に、最適化されたプログラムを デバッグしそれにより最適化されたHF251をつくるために必要な情報を加え る。
この時点で、最適化されたHF251はコードジェネレータ204に送られるコ ードジェネレータ204はHF250をLF、すなわちプログラムについて発生 された命令の機械−独立性表現で拡大し、LF252をもつ最適化されたHFを つくる。次にLF252をもつ最適化されたIFは、機械−従属性最適化を行う 他の最適比相205を通る。LF252で最適化されたHFは更にLFオブチマ イザ205により行われる変換を反映するように拡大されて最適化されたHFと LF25Bを発生する。最適化されたHFとLF253は2進ジエネレータ20 6を通されて再配置可能なオブジェクトファイル254をつくる。
独立したコンポーネントであるアセンブラ211はアセンブリ言語プログラム2 72を機械独立性表現HFとLF255に翻訳する。このアセンブラによりつく られるHFとLF255はオプションとして次にLFオブチマイザ205を通さ れる。LFオブチマイザ205は従来のシステムでは行われないアセンブリ言語 プログラムについての最適化を行い、HFおよび最適化LF256をつくる。次 に、2進ジエネレータ206がこのHFと最適化LFを読み、オブジェクトコー ド並びにHFおよび最適化LFを含む再配置可能オブジェクトファイル257を つくる。
このシステムの他の独立したコンポーネントであるデジエクトコードファイル2 54と257を読取る。オブジェクトコードファイル254と257に含まれる 情報を用いてこのデバッガは最適化のある場合の高レベル言語プログラムとアセ ンブリ言語プログラムの両方をデバッグすることが出来る。
図5aおよび5bにより、IHRで表わされる付加情報を用いて最適化コードの デバッグを支援する方法の一例を説明する。並列アレイ151は現在のブロック 内の記号を保持するレジスタ番号を含む。デバッガ212はIHRの部分である この並列アレイ151を用いて次の段階を行うことにより最適化コードブロック 内の変数を保持するレジスタを見い出す: 1、現在のブロックノード106を2進−原始マツピングを用いて決定する。
2、所望の変数用の記号ノード110を決定する。
3、デバッガ212がビットベクトルアレイ150を見渡して現在ブロックノー ド106のデプス−ファースト番号により示されるビットがビットベクトル15 0のいずれかにセットされているかどうかをチェックする。
セットされたビットがあれば、aft sto off’setアレイ151内 の入力をテストする。この入力は現プロ・ツク106についての変数を含むレジ スタ番号を特定する。
図6によりループ構造グラフの実施例の構造を説明する。このループ構造グラフ はループノードとブロックノードからなり、高レベル言語プログラム内のループ の静的なネスティングを表わす、この構造グラフの根600は全プログラムを囲 む擬似ループであり、このループノードの子はそのプログラムを含むブロックお よびループである。ブロックノード602は外側のループについてのループのプ ロローグの基本ブロックを表わす。ループノード603は外側ループそのものを 表わし、ブロックノード604はその外側ループについてのエピローグブロック を表わす。外側ループ603にネストされているのはブロックノード605、内 側ループ用のプロローグブロック並びにループノート606とブロックノード6 07である。ループノード606は内側ループを表わし、ブロックノード607 は内側ループのエピローグを表わす。内側ループ606にはブロックノード60 8と609を含むループの本体が含まれる。このループノードの構造はテーブル ■に示す。
テーブルI スコープノードフィールド: スコープノード記述:5cope kind:  このスコープのクラス。下記の内の一つ:UNDEF SCOPE MODULE 5COPE PROCEDURE 5COPE STRUCTURE 5COPE PROTOTYPE 5COPE Sωpe symbol : このスコープを定義する記号(一つの記号ノード )。
5cope symbol table: このスコープに含まれる記号テーブ ル5eOpe Jarent : このスコープの親(他のスコープノード)。
5cope sibling: このスコープの兄弟(他のスコープノード)。
5cope cMld: このスコープの子(他のスコープノード)。
次のものはMODULE 5COPEにのみ適用:5cope macro s ymbol table: これはこのスコープについて定義されたマクロのテ ーブルである。
次のものはMODULE 5COPEおよびPROCEDURE−5COPEに のみ適用: 5cope first block: これはこのススコープの第1ブロツク 記号ノードである。
次のものはPROCEDURE 5COPEにのみ適用:5cope firs t 5tack sym: スタックからそしてこの手順において割り振られた M41記号ノード。
これはスコープ記号テーブルにそう人されてもよくあるいはそう人されなくても よい。
5cope 1ast 5tack syI: ストックからそしてこの手順に おいて割り振られた最後の記号ノード。
これらはスコープ記号テーブルにそう人されても、されなくてもよい。
5cope d圀−tables 大域定義/使用カウントテーブルのAUX− NODE。
IPA用につくられたものは大堤鴎マ趨己号ノードと、夫々のPROCEDUR E 5COPEについての定義と使用の数のカウントのリストを含む。
テーブル■ ステートメントノードフィールド:ステートメントノー日己小:st op ス テートメント演算子。次の内の一つ:5OPERRORエラーステートメント5 OPCASE CASEステートメントSOPCASECOMP CASEコン ポーネント擬似ステートメント 5OPCYCLE CYCLE (F2O)またはC0NTINUE (C) ステートメント 5OPDEAD DEAD擬似ステートメント5OPENDCASE ENDC ASE擬似ステートメント5OPENDGROUP 5OPGROUPのエンド 5OPENDIF endif’ STATEMENTSOPENDLOOP  ENDLOOP[偏ステートメント5OPENTRY ENTRYステートメン ト5OPEXPRESSION EXPRESSIONステートメント 5OPGOTOGOTOステートメント5DPGROUP GROUPステート メント5OPIP IFステートメント SOPIFCOMP IFコンポーネント擬似ステートメント 5OPLABEL LABEL擬似ステートメント5OPLOOP LOOP擬 似ステートメント5OPNULL NULLステートメントSOPPRAGMA  PRAGMA擬似ステートメント5OPRETURN RETURNステート メント5OPREGI 5TERレジスタスピル/ロード擬似ステートメント st sfa 原始ファイルアドレス st」revfous 辞書順の前のステートメント用ノード。
st next 辞書順の次のステートメント用ノード。
st block このステートメントを含む基本ブロック用ブロックノード。
st 14 5tartこのステートメントに関連した第10−フオームノード 。backendでセットされる。
st !f’ end このステートメントに関連する最後のローフオームノー ド。baekendでセットされる。
st fnlfned Bft set −>このステートメントはその現在位 置にインラインされている。
st !nlinfng root Ifst In1ined OがTRUE 。
thenこれはそのステートメントをインラインさせたステートメント。
st well 5tructured Bit set −>この構造化ステ ートメント(SOPCASE、5OPIF。
5OPLOOP)は良好に形成され る、すなわち外部からそれへあるい はそのコンポーネント間にブランチ がない。出口ブランチは存在する。
大域フロー解析によりセットされる。
st has call Bitset −>このステートメントはその下のど こかにEOPCALLを有する。
テーブル■ ループノードフィールド: ループノード記述:st■t このループに対応す るステートメント。
prologue このループのプロローグであるブロックノード。
hα−このループの見出し部であるブロックノード。
tai I このループの末尾であるブロックノード(これからheade ヘ のbackedgeがある)。
epilogue このループのエピローグであるブロックノード。
cMld 構造グラフ内の子ノード;ループ本体内の第1ブロツs1bling  構想グラフにおける兄弟ノード(常にBLOCKノード)。
guard このループの実行を制御する論理式(成る種の囲み条件に対し相対 的なものでありうる)。
clear bv このループの(再)定義のクリアである記号を表わすビット ベクトルのAUXノード。
exlt bv このループの出口であるブロックノードを表わすビットベクト ル用のAUXノード。
next このループを囲むすべてのループからなる次のループ(すなわち、こ のループはこのネストのNoTI分である)。
iv table このループ内のテーブル■についてのAUXノード。
tv count このループ内の誘導変数の数。
μ5−table ループ内の向上したスカラテーブル用AUXノード。
μs−ωυnt このループ内の向上したスカシの数。
1nvar 5tlt プロローグブロックにホイストされた第1非変ステート メント cos+pleted Bit set −>このループの本体が完了さレテイ ル;SG構成中に使用される。
vectorfzabfe Bft set −>ループはベクトル化可能。
part vectoriaable Bit set −>ループは部分的に ベクトル化可能。
taskable Blt set w)ループはタスク可能。
has unknown catl Bit set −>ル−プ番よ矧の手順 に対する呼出しを含む。
bas exit branch Bit set −>ル−プGt出口分岐を 含む。
has back branch Bit set −>ル−プit後向き分岐 を含む。
has many entries Bit set s++)ル−プlこ2耘 しヒのブレーズで入る。
has −xrfect 5ubnei;t Bit set −>ル−プ(よ その下;こ完全サブネストを有する。)\ザー ドリストにポイントするためのベ クトル解析により一時的に用いら れる。
テーブル■ ブロックノードフィールド: ブロックノード記述:first stmt 基 本ブロック内の第1ステートメントノード。1aststIlt基本ブロック内 の最後のステートメントノード。
pred 11st 制御フローブレデセサ(praiecessor )リス ト。
これはHFノードリストで表わされる。
Pred count 制御フローブレデセサの数。
5ucc 11st 制御フロー後者関数(successor )リスト。こ れはHFノードリストで表わされる。
5uce count 制御フロー後者関数の数。fall throughこ のブロックからの“fall through”エツジのターゲットブロック( このブロックが条件付ぎ分岐で終了するときのみ) previous 辞書順で前の基本ブロック用のノード。
next 辞書順で次の基本ブロック用ノード。
Sibling 構造グラフにおける兄弟ノード。
gLLard このループの実行を制御する論理表現(成る種の囲み、条件に対 し相対的なものでありうる)。
1oopJIark このブロックがループ見出し部であれば5OPLOOPス テートメントに対応;またはループ見出し部または末尾ブロックに対応するルー プノード。フローグラスおよび構造グラフ構成中にセットされて使用される。
1oop tail このブロックがループ見出し部であればループ末尾ブロッ クに対応する。
1oop head このブロックがループ末尾であればループ見出し部ブロッ クに対応。
nest このブロックのある次のループ。
parent 構造グラフ内の親ローブノード(このブロックを直ちに囲むルー プ)。
exit 1evel このブロックから出たループの数。
connect聞 bit set −>このブロックは制御フローグラフに接 続される。
Visited bit Set −>このブロックは訪ねられた(visit ed)。
再帰的にフローグラフを横切るアルゴリズムにより使用される。
呼出しを含む。
has unknown cal I btt set −>このブロックは未 知の手続きに対する呼出しを含む。
hus 1oop stwt Bit set −>このブロックは5OPLO OPステートメントを含む。
1a 1oop heaa sit 5et−>これは一つのループの“見出じ  臥口)ブロックである。このループ内のすべての他のブロックはこのブロック により支配される。
is 1oop tail Bit 5et−>これは一つのループの1J「ブ ロックである。これはそのループの見出しブロックに対する(最終)反復テスト および分岐を含む。
is loopJrologue bat set −>これは一つのループの プロローグブロックである。そ の唯一の後者関数はそのループの 見出し部である。
is 1oop epilogue ber set −>これは一つのル−プ のエピローグブロックである。こ のループからのすべての正規出口 はこのブロックを通る。
テーブルV ブロックノードフィールド: ブロックノード記述:is 1oop exit  Bit set −>制御はこのブロックからそのループまたはそれを含むル ープを流れ出るANDこのブロックはループ末尾ブロックではない。すなわちこ のブロックからの過早ループ出口がある。
has Ind rers Bjt set −>このブロックは間接参照を有 する。
これは付加的解析のための呼出しに対しスケジューラにより用いられる。
dfn デプス−ファースト類に位置を与える数。
ordlnal コンパイルユニット内のブロックの辞書順についての序数値; これはst ordfnal Oと同一歩調でワークする。
in フローグラフ内の、このブロックに到達するブロックを表わすビットベク トルのAuxノード。
αル フローグラフ内のこのブロックから到達するブロックを表わすビットベク トルのAuxノード。
dos フローグラフのこのブロックを支配するブロックを表わすビットベクト ルのAuxノード。
gen det このブロックで発生する定義を表わすビットベクトルのAux ノード◎ kill der このブロックで消される(kill)定義を表わすビットベ クトルのAuxノード。
in dat このブロックの始まりに達する定義を表わすビットベクトルのA uxノード。
out def このブロックの終りに達する定義を表わすビットベクトルのA uxノード。
X def このブロック内の露呈された定義涜数の第1定釦を表わすビットベ クトルのAuxノード。
x use このブロック内での露呈された使用を表わすビットベクトルのAu xノード。
clear このブロック用のクリアベクトルを表わすビットベクトルのAux ノード、(このブロック内に定義された記号NOTについて一つのビットがセッ トされる)。
clear record このブロック内の構造化コンポーネント用のクリア ベクトルを表わすビットベクトルのAuxノード、(このブロック内に定義され たレコードNOTについて一つのビットがセットさされる)。
alt StOこのブロックで用いられる(レジスタ)カラーを表わすビットベ クトルのAuxノード。
first dude このブロックに関連するDUDeノードのリンクされた リストの第1のもの。
pd、Jred ポストドミネータ木におけるこのノードのプレデセサ。
pd 5ucc 1ist ポストドミネータ木におけるこのノードの後者関数 。これらはHFノードリストで表わされる。
cd 1n−11st このノードが制御従属性となるノードのHFノードリス ト。
cd out 1ist このノードに制御従属するノードのHFノードリスト 、ノード構造: テーブル■ 弐ノードフィールド: 式ノード 記述: ex op 次の式演算子の内の一つ:EOPERROR,エラ一式 %式% EOPCALL、 手続(機噸呼出し EOPCONCAT、 ストリング連結EOPCONVERT、オペランドの変 換タイプEOPDIV、 FI算 EOPENTRT、 入カポインド EOPEQ、等 E OP E Q V、 mll的同値EOPEXP、 指数 EOPGE、 以上 EOPGROUP、 代数的グループ化E OP G T、 greater  thanEOPJMP、 無条件ジャンプ EOPJMPA、 指定されたジャンプEOPJMPF、 疑であればジャンプ EOPJMPT、 真であればジャンプEOPJMPX、 インデクスされたジ ャンプ EOPLE、 以下 E OP L I NK、 placeholderEOPLIT、 リテラル EOPLT、 以下 EOPLVAL、 I−値 EOPMOD、 モジュロ EOPMULT、 乗算 EOPNE、 不等 EOPNOT、 論理否定 EOPNULL null (placeholderとして用いられる) EOPOR,包含的論理和 テーブル■ 弐ノードフィールド: 式ノード 記述: EOPRANGE、 離散タイプの値の範囲EOPREM、 残部 EOPRENAME、 タイプ名 EOPRETURN リターン EOPROL、 左回転 EOPROR,右回転 EOPRVAL、 r−値 EOPSELECT、 レコード/和メンバ選択EOPSEQ、 夫qじQ:寵 b2フリEOPSHL、 左シフト EOPSHR,右シフト EOPSUB、 減算 EOPSUBSCRIPT サブスクリプトEOPSUBSTR,サブストリン グ EOPUADD 単項加算 EOPUSUB、 単項減算 EOPXOR,排他的論理和 ex data type この式のデータタイプについてのタイプノード。
ex3rent この式を参照する第1ステートメントについてのステートメン トノード。
ex src offset この式中の第1文字の原始ファイルバイトオフセ ット。
ex lndegree このイードのインディグリ−(in d昭r叩)。
ex value class式の値クラス。共通部分式評価でセットされそし て用いられる。
ex addr kfnd アドレス式により表わされるアドレスの種類(BI T ADDR,BYTE ADDR。
WORD ADDRまたはUNDEF−ADDR)。
ey、rank この式のランク(0−〉スカシ、1−〉ベクトル。
・・・)。
exlf このノード用に発生されたローフオーム(L F)の根ノード。コー ドジェネレータによりセットされる。
8X !f’Jenerated’Bit set −>LHはこのノード用に 発生されている。
eX fortran assign eit set −>この割当て式はフ ォートランASSIGNステートメントを表わす ex call tnline Bit set m>このEOPCALLはイ ンラインされるべき。
exJu aft returns Bit Set −>このEOPCALL は交替リターンを有する(Fortran )。
+13X visjted Bit set −>このEXPRN0DEは成る 種の一時的デブスファースト検索または探索において、訪ねられている。これは それを用いるコードによる一時的な使用後にクリアしなければならない。
テーブル■ タイプノードフィールド二 タイプノード記述:ty op このデータタイプ の根“演算子1゜次の内の−っ;TOPUNDEF TOPERROR TOPNDLL TOPVOID TOPUNTYPED TOPBYTE TOPSBYTE TOPUBYTE TOPMBYTE TOPSHORT INT 0PINT TOPLONG INT TOPSHORT UINT TOPUINT TOPLONG UINT TOPSHORT FLOAT TOPFLOAT TOPLONG FLOAT TOPCOMPLEX TOPLONG COMPLEX TOPCHARACTER TOPSTRING TOPLOG I CAL TOPENUMERATION TOPCONSTRAINT TOPACCESS TOPADDRESS テーブル■ タイプノードフィールド: タイプノード記述:TOPARRAY TOPRECORD 0PSET TOPUNION TOPPROCEDURE TOPFILE ty 5ize このタイプのオブジェクトの正確なビットサイズ。
ty container 5ize このタイプの単一オブジェクトについて 割振られたコンテナのビットサイズ。
ty 1eft justif’ied Bltset −>このタイプのオブ ジェクトはそれらのコンテナー内で左位置調整される。
ty is volatlle Bit set −>このタイプのオブジェク トは揮発性である。
ty Is const Bit set m>このタイプのオブジェクトは読 取専用。
ty basic Bit Set −>これは基本的固定サイズのデータタイ プである。
t)’ is signed Bftset −>このタイプのオブジェクトは 符号付きである。
ty enter聞 Bft set −>このノードはタイプグラフに入れら れる。
ty assui&fsize Bit Set −>このタイプのオブジェク トはそれらサイズを動的に仮定する。
ty visaed Bit set −>このTYPE N0DEは成る種の i時的デプスファースト検索または探索において訪ねられている。これはそれを 用いるコードによる一時的な使用後にクリアされねばならない。
ty hash このタイプノードについて計算されたハツシュ値。
ty next ハツシュ衝突解決用リンクテーブルX リテラルノードフィールド: リテラルノー)′ta:It data typ e リテラルデータタイプ用のタイプノード。
It next ハツシュ衝突解決用リンク。
It vat リテラルの値。これは基本タイプについてのすべての可能なター ゲツト値の和、複雑なタイプについて2個のnocle types cリテラ ルノード)の和または−のstrjng−tYpeまたは集成タイプ(TOPS TRING:1.たG!TOPARRAY(7)ようなもの)を含む。
1rJash このリテラル用ハッシニコード。
It enterde biton−>リテラルはハツシュされている。
テーブル XI 記号ノードフィールド: 記号ノード記述:sy kind 記号のクラス。次 の内の一つ:UNDEF SYM BLOCK SYM COMPONENT SYM CONSTANT SYM ENUMERATION SYM ERRORSYM LABEL SYM MACROSYM MODULE SYM PARAMETERSYM POINTHE SYM PROCEDURE SYM TAG SYM TYPE SYM VARIABLE SYM SY nue 記号名を含むストリングsy data−type 記号用デー タタイプノード。
られるときセットされる。
sy sfa 記号のはじめの発生の原始ファイルアドレス。
5yJash syt enteroまたはSyt Iookup or en terOにより入れられる名前についてのハツシュコード。
sy declarea 記号が明確に宣言されていることを示すフラグ。
sy c defined 記号が制限されたCdet ini ng)宣言を 有することを示すフラグ。
sy tyμ5−daclaracl 記号のデータタイプが明確に宣言されて いることを示すフラグ。
sy redeclareti 記号が2回以上宣言されていることを示すフラ グ。
sy used 変数またはパラメータが使用m>されることを示すフラグ。
sy defined 変数またはパラメータが定義(書囚されることを示すフ ラグ。
5yaliased 記号がアリアス(alIas )を有することを示すフラ グ。オブチマイザによりセットされる。
sy 1nterna! 記号がコンパイラにより内部的に宣言されることを示 すフラグ。
sy 5aved 記号がフォートラン5AVEステートメントに生じることを 示すフラグ。
sr asslgned 1abel 変数がフォートランASSIGNステー トメントに生じることを示すフラグ。
S)’ target 0fJOtO記号がGOTOステートメントのターゲッ トであったことを示すフラグ。
sy use register C“レジスタ割振またはパラメータを示すフ ラグ。
sy associated この記号がとり出されたアドレスを有しているこ とを示すフラグ。
sy visited bit set −>このSYM MODEは成る種の 一時的デブスファースト検索または探索で訪ねられている。これはそれを用いる コードによる一時的な使用後にクリアされねばならない。
sy bf’d used bfdがこの記号の使用を見ていることを示すフラ グ。
sy bfd dertned bfdがこの記号の定義を見ていることを示す フラグ。
sy temp それを用いるものによりクリアされねばならない再使用可能な セクション。
5yJllaceholder bttset −> SYM N0DE用のこ のSYMNODE placeholderが5yJIaceholder−s ys Oに含まれた。
sy bv tndex 従属性グラフの構成中にセットされそしてライブ変数 解析について用いられるクリアおよび露呈使用ビットベクトル(blk cla ar and Blk Xuse )へのこの記号のビットベクトルインデクス 。
sy 1abel depth fd このラベルを含む複合ステートメントの 複合ステートメント深さ1d(Cのみ)。
テーブル X■ ローフオームノードフィールド: ローフオームノード記述:bin addr ess 命令の手順の開始がらのバイトオフセット。
hf このLFノードで発生されたHF式ノード。
offset 2進テーブルジエネレータによりベースに付加されるべきオフセ ット。
word Ifノードのはじめに対するワードのオフセット。
parcel 上のワードのベースからのバーセル(parcel)のopnd L このLFノードのオペランド1゜opnd2 このLFノードのオペランド 2゜opnd3 このLFノードのオペランド3゜opnd4 このLFノード のオペランド4゜neXt LFノードの未スケジュール順。
rdg このぽノードに対応するスケジューラ従属性グラフにおけるノード。
use count レジスタ割振り用の使用カウント。
テーブル X■ DUDeノードフィールド: DUDeノー日己ホ:dude−鴻rent こ のDUDeノードに関連した親戚ノード。
dude next 次のDUDeノード。
dude prevtous 次のDUDeノード。
dude block このDUDeノードを含むプロヴクノード。
dude sym このDUDeノードによりポイントされる記号ノード。
dude In このDUDeノードにポイントするデペンデンスアーク(De pendence^rcs )群。
dtxle out このDUDeノードの外をポイントするデベンデンスアー ク丸 dude」tr 1nd lvl ポインタである場合の参照のインディレクシ ジン(1ndfrecction)レベル。
dude by 1ndex このDUDeノードに対応する定義(LVAL) のビットベクトルインデクス。
bude kind 参照のタイプ、USE、DEF、USE/DEF。
INDIRECT USE、INDIRECTDETまたはCALLをm11す るエニューメレーション(etumeration ) e間接使用はp’のU SEと“*p゛のINDIRECT USEである“i−*p″に似たものであ る。
INDJRECT DEFは同一ラインに沿って続き、そしてCALLは: “ bred (a、b、c)”離散ノードが“a″、 ′b#および“a″用につ くられそしてCALLノードが’fral’用にっくら右、これは定義されたす べての入城変数を表わしそしてIPAが用いられないときにのみ必要とされる。
duie vtsit−このDUDeが訪ねられたがどうかを示すビット。
局所従属性グラフ構成のアリアス解析中にのみ用いられる。
dude upword x use このDUDeが上向きにニキスポーズさ れるかどうかを示すビット。
dude downward x use このDUDeが下向き二キスポーズ 使用であるかどうかを示すピッ ト:dersについてはセットされな い。
dude ty qualifier このDUDeに関連する記号が基本また はアクセスタイプである。ARRAY TYPE−このDUDeに関連する記号 はアレイである。
5TRUCTURE TYPE−このDUDeに関連する記号は構造である。0 THER−TYPE−二のDUDeに関連する記号は何らかの他の(ストレンジ )タイプである。
duie aff by call このDUDeはCALLSに関してグロー バルとして取扱われるべきかどうか、つまり、CALLがそれに作用できるかを 示すビット。
dude is 5ubscrfpted このDUDeがそれに関連したサブ スクリプト演算子を有することを示すビット;ty−qualRlerとの相異 は、 “C゛がサブスクリプト付ポインタを有することが出来るからアレイであ る。
dude 1ultipe alias このDUDeノードに関連する複数ア リアスを示すビット。
d田eJlarueter このDUDeが実際のパラメータに付加されること を示すビット。
dude vector mask この参照のアドレスが変化する(すなわち 値のベクトルを潜在的に形成する)ループを示すビットマスク。
dudeJlointer このDUDeに関連するこの記号がポインタである かどうかを示すビット。
dudeJJtr alias セットされたときこのDUDeが未解決のポイ ンタ参照についてのアリアスでありうることを意味するビット。
dude bound If ptr aliasがセットされる。 then これはDUDeノードについての境界クラスである。
1/eakly−このDUDeは弱境界タイプである。
(例えば“C°整数ポインタは一つの整数または無符号整数にポイント出来る) 。Strongly−DUDeは強境界タイプである。(例えば“C。
構造ポインタは同一構造であるものにのみポイント出来る) Unbound− このDUDeは無境界タイプである。(例えば“C#ボイドポインタは何でもポ イント出来る。〕 duie alias type If’ ptr aliasがセットされれ ば、thenこれはそれがポイントする特定のタイプのものであり、If弱境界 であれば、クラスであり、If強境界であれば、それを記述するタイプノードの ノードインデクスであり、そして1f無境界であれば、0である。
好適な実施例の説明を行ったが、本発明の範囲内で種々の変更が可能である。従 って本発明の範囲はこの好適な実施例の説明ではなく、請求の範囲により限定さ れるものである。
要 約 書 1以上の手続きプログラミング言語(201,202)で記述される原始コード プログラムを一つの実行可能オブジェクトコードファイルにコンパイルするため に共通中間表現として完全に統合された階層表現を利用するモジュラコンパイル システム。この統合された共通中間表現の構造は機械独立性最適化(203)並 びに機械従属性最適化(205)を支援すると共に実行可能オブジェクトコード ファイルの原始レベルのデバッグ(212)を支援する。統合階層表現(IHR )は言語独立性であり、コンパイラ(200)とデバッガ(212)を含むソフ トウェア開発システムのコンポーネントのすべてにより共用される。
国際調査報告

Claims (19)

    【特許請求の範囲】
  1. 1.コンピュータ処理システムで実行されるべきオブジェクトコードファイルを つくるために1以上の高レベルプログラミング言語で書かれた原始コードプログ ラムをコンパイルし最適化するための、下記段階を含む方法: 夫々の高レベルプログラミング言語について原始コードプログラム用の高レベル プログラム言語のハイフォーム(HF)機械独立性、統合階層表現(IHR)を 発生する段階; 夫々の高レベルプログラミング言語についての上記HF表現を上記原始コードプ ログラムの単一のHF表現へと合成する段階; 上記原始コードプログラムの上記単一HF表現にもとづき上記原始コードプログ ラムについての文脈情報とデバッグ情報を発生しそして上記原始コードプログラ ムの上記IHRの部分として上記文脈情報とデバッグ情報を記憶する段階; ユーザ選択オプションに応じて、上記原始コードプログラムの上記単一HF表現 を最適化しそして上記原始コードプログラムの上記IHRの部分として上記HF 最適化情報を記憶する段階; 上記原始コードプログラムの上記HF表現用のローフォーム(LF)機械独立性 階層表現を発生し、上記原始コードプログラム用の上記IHRの部分としてその LF表現を記憶する段階; ユーザ選択オプションに応じて、上記原始コードプログラムの上記LF表現を最 適化しそして上記原始コードプログラムの上記IHRの部分として上記LF最適 化情報を記憶する段階;および 上記原始コードプログラムの上記LF表現にもとづきオブジェクトコードファイ ルを発生する段階。
  2. 2.コンピュータ処理システムで実行されるべきオブジェクトコードファイルを 発生するために一つのプログラミング言語で書かれた1以上のプログラムモジュ ールを含む原始コードプログラムをコンパイルしそして最適化するための、下記 段階を含む方法:夫々のプログラムモジュールについて上記原始コードプログラ ムの統合階層表現(IHR)の部分として上記プログラムモジュールのハイフォ ーム(HF)機械および言語独立性表現を発生する段階; 上記プログラムモジュールのHF表現にもとづき上記原始コードプログラムにつ いての文脈情報とデバッグ情報を発生し、それら情報を上記原始コードプログラ ムのIHRの部分として記憶する段階; ユーザ選択オプションに応じて上記1以上のプログラムモジュールのHF表現を 最適化すると共に、HF最適化情報を発生しそれを上記原始コードプログラムの IHRの部分として記憶する段階; 各プログラムモジュールのHF表現用のローフォーム(LF)機械独立性階層表 現を発生し、それを上記原始コードプログラムについてのIHRの部分として記 憶する段階; ユーザ選択オプションに応じて上記1以上のプログラムモジュールのLF表現を 最適化し、そしてLF最適化情報を発生しそれを上記原始コードプログラムのI HRの部分として記憶する段階; 上記原始コードプログラムの上記LF表現にもとづきオブジェクトコードファイ ルを発生する段階。
  3. 3.前記オブジェクトコードファイルを発生する段階は下記段階を含むごとくな った請求項2の方法:前記プログラムモジュールの夫々についてモジュールオブ ジェクトコードファイルを発生する段階;上記モジュールオブジェクトコードフ ァイルのすべてを単一のオブジェクトコードファイルにリンクさせる段階。
  4. 4.前記プログラムモジュールのHF表現を最適化する段階と前記すべてのモジ ュールオブジェクトコードファイルをリンクさせる段階は共に手続き呼出しをイ ンライン化する段階を含む、請求項3の方法。
  5. 5.前記原始コードプログラムIHRは図形構造として記憶され、前記プログラ ムモジュールのHF表現を最適化する段階および前記プログラムモジュールのL F表現を最適化する段階は前記原始コードプログラムのIHRについて図形還元 を行う段階を含むごとくなった請求項2の方法。
  6. 6.前記プログラミング言語は1以上の高レベル言語とアセンブリ言語を含むご とくなった請求項2の方法。
  7. 7.前記コンピュータ処理システムは高度並列マルチプロセッサシステムである 請求項2の方法。
  8. 8.前記コンピュータ処理システムはネットワークをつくる複数のコンピュータ プロセッサを含むごとくなった請求項2の方法。
  9. 9.1以上のプログラミング言語で記述された1以上のプログラムモジュールか らなる原始コードプログラムを表わしそしてコンピュータ処理システムで実行さ れるべき最適化されたオブジェクトコードファイルの原始レベルのデバッグを行 うための、下記段階を含む方法:夫々のプログラムモジュールについて、上記原 始コードプログラムの統合階層表現(IHR)の部分として上記プログラムモジ ュールのハイフォーム(HF)機械および言語独立性表現を発生する段階; 上記プログラムモジュールのHF表現にもとづき上記原始コードプログラムにつ いての文脈情報とデバッグ情報を発生しそれら情報を上記原始コードプログラム のIHRの部分として記憶する段階; 各プログラムモジュールのHF表現用のローフォーム(LF)機械従属性階層表 現を発生する段階;上記原始コードプログラムのLF表現にもとづきオブジェク トコードファイルを発生する段階;上記オブジェクトコードファイルが上記コン ピュータ処理システムで実行されるときそれをデバッグするために上記原始コー ドプログラム用のIHRを使用する段階。
  10. 10.下記段階を更に含む請求項9の方法:ユーザ選択オプションに応じて前記 1以上のプログラムモジュールのHF表現を最適化しそして、HF最適化情報を 発生してそれを上記原始コードプログラムのIHRの部分として記憶する段階; ユーザ選択オプションに応じて、上記1以上のプログラムモジュールのLF表現 を最適化しそしてLF最適化情報を発生しそれを上記原始コードプログラムのI HRの部分として記憶する段階。
  11. 11.前記オブジェクトコードファイルを発生する段階は下記段階を含むごとく なった請求項9の方法:夫々の前記プログラムモジュールについてのモジュール オブジェクトコードファイルを発生する段階;上記モジュールオブジェクトコー ドファイルのすべてを単一のオブジェクトコードファイルにリンクさせる段階。
  12. 12.前記プログラミング言語は1以上の高レベル言語および一つのアセンブリ 言語を含むごとくなった請求項9の方法。
  13. 13.前記コンピュータ処理システムは高度並列マルチプロセッサシステムであ る請求項9の方法。
  14. 14.前記コンピュータ処理システムはネットワークをつくる複数のコンピュー タプロセッサを含むごとくなった請求項9の方法。
  15. 15.前記オブジェクトコードファイルをデバッグするために前記原始コードプ ログラムのすべてについてのIHRを使用する段階は、1つのコンピュータプロ セッサのユーザが他のコンピュータプロセッサで実行する原始コードプログラム をデパツク出来るように分散型で行われるごとくなった請求項14の方法。
  16. 16.コンピュータ処理システムで実行されるべき原始コードプログラムをコン パイルし、最適化しそしてデバッグするための、下記段階を含む方法:上記原始 コードプログラムの、それに関連した文脈情報および実行情報を含む共通統合階 層表現を発生する段階; 上記原始コードプログラムの共通統合階層表現を最適化する段階; 上記原始コードプログラムの統合階層表現に応じて上記コンピュータ処理システ ムで実行されるべきオブジェクトコードファイルを発生する段階; 上記オブジェクトコードファイルが上記コンピュータ処理システムで実行される とき上記原始コードプログラム用のIHRを用いることにより上記オブジェクト コードファイルをデバッグする段階。
  17. 17.コンピュータ処理システムで実行されるべきオブジェクトコードファイル をつくるために原始コードプログラムをコンパイルし、最適化しそしてデバッグ するためのコンパイルシステムで使用するための統合階層表現用の、下記要件を 含むデータ構造:上記原始コードプログラムに関連する文脈情報を表わすための 第1記憶手段; 上記原始コードプログラムに関連する実行情報を表わすための第2記憶手段; 上記文脈情報と実行情報を解析することにより発生される原始コードプログラム 用の最適化情報を表わすための第3記憶手段であって、 上記第1、第2および第3記憶手段が互いに動作的に関係するごとくなった記憶 手段。
  18. 18.コンピュータ処理システムで実行されるべきオブジェクトコードファイル を発生するために原始コードプログラムをコンパイルし、最適化しそしてデバッ グするためのコンパイルシステムに使用するための統合階層表現用の、下記要件 を含むデータ構造:上記原始コードプログラムに関連する文脈情報を表わすため のスコープノード手段; 上記原始コードプログラムに関連する名前付オブジェクトを表わす記号ノード手 段; 上記原始コードプログラムに関連する定数の値を表わすリテラルノード手段; 上記原始コードプログラムに関連するオブジェクトのデータタイプを表わすタイ プノード手段;上記原始コードプログラムに関連するステートメントを表わすス テートメントノード手段; 上記原始コードプログラムに関連する式を表わす式ノード手段。
  19. 19.下記要件を更に含む請求項18のデータ構造:前記原始コードプログラム 内のステートメントの基本ブロックを表わすブロックノード手段;上記原始コー ドプログラム内の変数間のデータの従属性を表わすDUDeノード手段; 上記原始コード内のループの静的ネスト(nesting)を表わすループノー ド手段。
JP3512079A 1990-06-11 1991-06-10 ソフトウェア開発のためのコンピュータプログラムの統合階層表示 Pending JPH05508494A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US07/537,466 US5179702A (en) 1989-12-29 1990-06-11 System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US537,466 1990-06-11
US07/572,043 US5175856A (en) 1990-06-11 1990-08-23 Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
US572,043 1990-08-23

Publications (1)

Publication Number Publication Date
JPH05508494A true JPH05508494A (ja) 1993-11-25

Family

ID=27065499

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3512079A Pending JPH05508494A (ja) 1990-06-11 1991-06-10 ソフトウェア開発のためのコンピュータプログラムの統合階層表示

Country Status (6)

Country Link
US (1) US5175856A (ja)
EP (1) EP0537257B1 (ja)
JP (1) JPH05508494A (ja)
AU (1) AU8201891A (ja)
DE (1) DE69131832T2 (ja)
WO (1) WO1991020030A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012150830A (ja) * 2004-11-19 2012-08-09 Intel Corp 限定された誤りによる遅延した更新によるソフトウェアキャッシュ処理

Families Citing this family (188)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL100987A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Method and device for encoding
US5659753A (en) * 1991-02-27 1997-08-19 Digital Equipment Corporation Interface for symbol table construction in a multilanguage optimizing compiler
IL100986A (en) * 1991-02-27 1997-01-10 Digital Equipment Corp Method for compiling code
IL100990A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
IL100989A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Analysis of inductive expressions in multilingual mehadoptimization
JP2811990B2 (ja) * 1991-04-19 1998-10-15 三菱電機株式会社 プログラム処理装置及びプログラム処理方法
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5410648A (en) * 1991-08-30 1995-04-25 International Business Machines Corporation Debugging system wherein multiple code views are simultaneously managed
US5826256A (en) * 1991-10-22 1998-10-20 Lucent Technologies Inc. Apparatus and methods for source code discovery
US5355492A (en) * 1991-11-05 1994-10-11 Thinking Machines Corporation System for compiling parallel communications instructions including their embedded data transfer information
US5355494A (en) * 1991-12-12 1994-10-11 Thinking Machines Corporation Compiler for performing incremental live variable analysis for data-parallel programs
US5410701A (en) * 1992-01-29 1995-04-25 Devonrue Ltd. System and method for analyzing programmed equations
US5274818A (en) * 1992-02-03 1993-12-28 Thinking Machines Corporation System and method for compiling a fine-grained array based source program onto a course-grained hardware
CA2061298C (en) * 1992-02-17 1996-12-03 Douglas J. Mortson Method for detecting critical failures during the building of complex computer programs from source code parts
US5448737A (en) * 1992-03-17 1995-09-05 International Business Machines Corporation System and method for optimizing computer code using a compact data flow representation
JPH05274181A (ja) * 1992-03-25 1993-10-22 Nec Corp ブレークポイント設定・解除方式
US5371747A (en) * 1992-06-05 1994-12-06 Convex Computer Corporation Debugger program which includes correlation of computer program source code with optimized object code
US5485615A (en) * 1992-06-10 1996-01-16 Telefonaktiebolaget L M Ericsson System and method of interactively developing desired computer programs by using plurality of tools within a process described in graphical language
US5535392A (en) * 1992-06-26 1996-07-09 Digital Equipment Corporation Using hint generation to cause portions of object files to remain the same
US5625822A (en) * 1992-06-26 1997-04-29 Digital Equipment Corporation Using sorting to do matchup in smart recompilation
US5446899A (en) * 1992-06-26 1995-08-29 Digital Equipment Corporation Hint generation in smart recompilation
US5367683A (en) * 1992-06-26 1994-11-22 Digital Equipment Corporation Smart recompilation of performing matchup/difference after code generation
US5446900A (en) * 1992-07-24 1995-08-29 Microtec Research, Inc. Method and apparatus for statement level debugging of a computer program
US5555419A (en) * 1993-01-06 1996-09-10 Digital Equipment Corporation Correlation system
JP2856663B2 (ja) * 1993-01-15 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション コンパイル・コードに可視境界を定義する最適化方法および装置
WO1994022078A2 (en) * 1993-03-23 1994-09-29 Apple Computer, Inc. Apparatus and method for a relocatable file format
US6219830B1 (en) * 1993-03-23 2001-04-17 Apple Computer, Inc. Relocatable object code format and method for loading same into a computer system
US5495561A (en) * 1993-06-21 1996-02-27 Taligent, Inc. Operating system with object-oriented printing interface
US5519866A (en) * 1993-06-28 1996-05-21 Taligent, Inc. Method and apparatus of incrementally linking components of a modeled computer program
US5325533A (en) * 1993-06-28 1994-06-28 Taligent, Inc. Engineering system for modeling computer programs
US5758160A (en) * 1993-06-28 1998-05-26 Object Technology Licensing Corporation Method and apparatus for building a software program using dependencies derived from software component interfaces
US5375242A (en) * 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization
US5485616A (en) * 1993-10-12 1996-01-16 International Business Machines Corporation Using program call graphs to determine the maximum fixed point solution of interprocedural bidirectional data flow problems in a compiler
US5535394A (en) * 1993-10-20 1996-07-09 International Business Machines Corporation Methods for distinguishing dynamically allocated storage along different call paths and for providing a compact representation of alias analysis
US6064819A (en) * 1993-12-08 2000-05-16 Imec Control flow and memory management optimization
US5581769A (en) * 1993-12-29 1996-12-03 International Business Machines Corporation Multipurpose program object linkage protocol for upward compatibility among different compilers
US5539907A (en) * 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
US5999737A (en) * 1994-03-01 1999-12-07 Digital Equipment Corporation Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis
US5471636A (en) * 1994-06-06 1995-11-28 Hauck; Lane T. Software development system and method of using same
US5822592A (en) * 1994-06-28 1998-10-13 Us West Technologies, Inc. Method and system for determining source code location
US6006033A (en) * 1994-08-15 1999-12-21 International Business Machines Corporation Method and system for reordering the instructions of a computer program to optimize its execution
US6131185A (en) * 1994-12-13 2000-10-10 International Business Machines Corporation Method and system for visually debugging on object in an object oriented system
US5590330A (en) * 1994-12-13 1996-12-31 International Business Machines Corporation Method and system for providing a testing facility in a program development tool
US5581696A (en) * 1995-05-09 1996-12-03 Parasoft Corporation Method using a computer for automatically instrumenting a computer program for dynamic debugging
US5642514A (en) * 1995-05-24 1997-06-24 International Business Machines Corporation Method and system for constructing compact executable files by eliminating redundant debugging strings
US20060206219A1 (en) 1995-05-30 2006-09-14 Brown David W Motion control systems and methods
US7139843B1 (en) 1995-05-30 2006-11-21 Roy-G-Biv Corporation System and methods for generating and communicating motion data through a distributed network
US7137107B1 (en) 2003-04-29 2006-11-14 Roy-G-Biv Corporation Motion control systems and methods
US7024666B1 (en) * 2002-01-28 2006-04-04 Roy-G-Biv Corporation Motion control systems and methods
US20100131081A1 (en) * 1995-05-30 2010-05-27 Brown David W Systems and methods for motion control
US5623696A (en) * 1995-05-30 1997-04-22 International Business Machines Corporation System for formatting a request into a packet which can be read by plurality of operating systems for providing a driver for a storage device
US5691897A (en) * 1995-05-30 1997-11-25 Roy-G-Biv Corporation Motion control systems
CA2224689C (en) * 1995-06-02 2002-10-29 Rational Software Corporation Remote monitoring of computer programs
US5701489A (en) * 1995-06-06 1997-12-23 International Business Machines Corporation System for partial in-line expansion of procedure calls during program compilation
US6311324B1 (en) * 1995-06-07 2001-10-30 Intel Corporation Software profiler which has the ability to display performance data on a computer screen
US5740443A (en) * 1995-08-14 1998-04-14 International Business Machines Corporation Call-site specific selective automatic inlining
US5870588A (en) * 1995-10-23 1999-02-09 Interuniversitair Micro-Elektronica Centrum(Imec Vzw) Design environment and a design method for hardware/software co-design
US5845126A (en) * 1995-12-06 1998-12-01 International Business Machines Corporation Method of, system for, and computer program product for providing inlined nested array constructors using normalized counters
US6135650A (en) * 1995-12-22 2000-10-24 Sun Microsystems, Inc. Method and system for wrapper routine optimization
US5850554A (en) * 1995-12-29 1998-12-15 Intel Corporation Compiler tool set for efficiently generating and easily managing multiple program versions of different types
JP2795244B2 (ja) * 1996-01-17 1998-09-10 日本電気株式会社 プログラムデバッグシステム
US5930509A (en) * 1996-01-29 1999-07-27 Digital Equipment Corporation Method and apparatus for performing binary translation
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
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
US5848274A (en) * 1996-02-29 1998-12-08 Supercede, Inc. Incremental byte code compilation system
US5764989A (en) * 1996-02-29 1998-06-09 Supercede, Inc. Interactive software development system
US5761515A (en) * 1996-03-14 1998-06-02 International Business Machines Corporation Branch on cache hit/miss for compiler-assisted miss delay tolerance
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
US5901317A (en) * 1996-03-25 1999-05-04 Sun Microsystems, Inc. Method and system for register allocation using multiple interference graphs
JP3262493B2 (ja) * 1996-04-12 2002-03-04 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムのデータ構造を表示する方法、及びデータ構造表示装置
US5815719A (en) * 1996-05-07 1998-09-29 Sun Microsystems, Inc. Method and apparatus for easy insertion of assembler code for optimization
US5778212A (en) * 1996-06-03 1998-07-07 Silicon Graphics, Inc. Interprocedural analysis user interface
US5812855A (en) * 1996-06-03 1998-09-22 Silicon Graphics, Inc. System and method for constaint propagation cloning for unknown edges in IPA
US6067413A (en) * 1996-06-13 2000-05-23 Instantations, Inc. Data representation for mixed-language program development
US5987249A (en) * 1996-08-27 1999-11-16 Numega Technologies IR code instrumentation
US6186677B1 (en) 1996-08-27 2001-02-13 Compuware Corporation Byte code instrumentation
JPH1091476A (ja) * 1996-09-17 1998-04-10 Toshiba Corp プログラム実行装置及び機能仕様とコードアドレスとの対応付け方法
US6513154B1 (en) 1996-10-21 2003-01-28 John R. Porterfield System and method for testing of computer programs in programming effort
US6195746B1 (en) 1997-01-31 2001-02-27 International Business Machines Corporation Dynamically typed register architecture
US5857105A (en) * 1997-02-05 1999-01-05 Hewlett-Packard Company Compiler for reducing number of indirect calls in an executable code
US6016398A (en) * 1997-04-01 2000-01-18 Intel Corporation Method for using static single assignment to color out artificial register dependencies
US5812430A (en) * 1997-06-02 1998-09-22 Microsoft Corporation Componentized digital signal processing
US6081801A (en) * 1997-06-30 2000-06-27 International Business Machines Corporation Shared nothing parallel execution of procedural constructs in SQL
AU750332B2 (en) * 1997-07-25 2002-07-18 British Telecommunications Public Limited Company Visualisation in a modular software system
US20010032278A1 (en) 1997-10-07 2001-10-18 Brown Stephen J. Remote generation and distribution of command programs for programmable devices
US6247174B1 (en) * 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
US7089331B1 (en) 1998-05-29 2006-08-08 Oracle International Corporation Method and mechanism for reducing client-side memory footprint of transmitted data
US6446258B1 (en) * 1998-11-03 2002-09-03 Intle Corporation Interactive instruction scheduling and block ordering
US6292938B1 (en) * 1998-12-02 2001-09-18 International Business Machines Corporation Retargeting optimized code by matching tree patterns in directed acyclic graphs
US6314557B1 (en) * 1998-12-14 2001-11-06 Infineon Technologies Development Center Tel Aviv Ltd Hybrid computer programming environment
US6230313B1 (en) * 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US6415433B1 (en) * 1998-12-23 2002-07-02 Cray Inc. Method and system for identifying locations to move portions of the computer program
US6311326B1 (en) * 1999-01-04 2001-10-30 Emc Corporation Online debugging and tracing system and method
US7526468B2 (en) * 1999-01-08 2009-04-28 Computer Associates Think, Inc. System and method for recursive path analysis of DBMS procedures
US6226787B1 (en) * 1999-01-25 2001-05-01 Hewlett-Packard Company Visualization method and system for dynamically displaying operations of a program
JP3658514B2 (ja) * 1999-01-28 2005-06-08 富士通株式会社 帳票プログラム作成装置
US6564372B1 (en) * 1999-02-17 2003-05-13 Elbrus International Limited Critical path optimization-unzipping
GB2348304B (en) * 1999-03-24 2003-07-09 Ibm Optimising Device Driver Debug Tracing
US6665866B1 (en) * 1999-05-28 2003-12-16 Microsoft Corporation Extensible compiler utilizing a plurality of question handlers
JP4118456B2 (ja) * 1999-06-29 2008-07-16 株式会社東芝 プログラム言語処理システム、コード最適化方法、及び機械読み出し可能な記憶媒体
US6802056B1 (en) * 1999-06-30 2004-10-05 Microsoft Corporation Translation and transformation of heterogeneous programs
JP2001034504A (ja) * 1999-07-19 2001-02-09 Mitsubishi Electric Corp ソースレベルデバッガ
US7810069B2 (en) * 1999-10-05 2010-10-05 Borland Software Corporation Methods and systems for relating data structures and object-oriented elements for distributed computing
US8032605B2 (en) 1999-10-27 2011-10-04 Roy-G-Biv Corporation Generation and distribution of motion commands over a distributed network
US20100131078A1 (en) * 1999-10-27 2010-05-27 Brown David W Event driven motion systems
US6885898B1 (en) 2001-05-18 2005-04-26 Roy-G-Biv Corporation Event driven motion systems
US6795963B1 (en) * 1999-11-12 2004-09-21 International Business Machines Corporation Method and system for optimizing systems with enhanced debugging information
US7389284B1 (en) 2000-02-29 2008-06-17 Oracle International Corporation Method and mechanism for efficient processing of remote-mapped queries
AU2001255808A1 (en) * 2000-03-15 2001-09-24 Arc Cores, Inc. Method and apparatus for debugging programs in a distributed environment
US6728954B1 (en) * 2000-06-30 2004-04-27 Motorola, Inc. Method for allowing execution management of optimized code
CA2321016A1 (en) * 2000-09-27 2002-03-27 Ibm Canada Limited-Ibm Canada Limitee Interprocedural dead store elimination
US6820253B1 (en) * 2000-09-27 2004-11-16 Intel Corporation Method and system for interprocedural analysis with separate compilation
US7000227B1 (en) * 2000-09-29 2006-02-14 Intel Corporation Iterative optimizing compiler
US6671873B2 (en) * 2000-12-13 2003-12-30 Intel Corporation Problematic binary isolator
US6748583B2 (en) * 2000-12-27 2004-06-08 International Business Machines Corporation Monitoring execution of an hierarchical visual program such as for debugging a message flow
US20030023950A1 (en) * 2001-01-10 2003-01-30 Wei Ma Methods and apparatus for deep embedded software development
WO2002071241A1 (en) 2001-02-09 2002-09-12 Roy-G-Biv Corporation Event management systems and methods for the distribution of motion control commands
US7904194B2 (en) 2001-02-09 2011-03-08 Roy-G-Biv Corporation Event management systems and methods for motion control systems
US7174536B1 (en) * 2001-02-12 2007-02-06 Iowa State University Research Foundation, Inc. Integrated interactive software visualization environment
US6918110B2 (en) * 2001-04-11 2005-07-12 Hewlett-Packard Development Company, L.P. Dynamic instrumentation of an executable program by means of causing a breakpoint at the entry point of a function and providing instrumentation code
GB0113946D0 (en) * 2001-06-08 2001-11-14 Secr Defence Automatic Development of Software Codes
JP2003050716A (ja) * 2001-08-06 2003-02-21 Matsushita Electric Ind Co Ltd ソフトウエアデバッガとソフトウエア開発支援システム
US7103590B1 (en) * 2001-08-24 2006-09-05 Oracle International Corporation Method and system for pipelined database table functions
AUPR796801A0 (en) * 2001-09-27 2001-10-25 Plugged In Communications Pty Ltd Computer user interface tool for navigation of data stored in directed graphs
CA2359862A1 (en) * 2001-10-24 2003-04-24 Ibm Canada Limited - Ibm Canada Limitee Using identifiers and counters for controlled optimization compilation
JP4272371B2 (ja) * 2001-11-05 2009-06-03 パナソニック株式会社 デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。
US6973457B1 (en) 2002-05-10 2005-12-06 Oracle International Corporation Method and system for scrollable cursors
US7610351B1 (en) 2002-05-10 2009-10-27 Oracle International Corporation Method and mechanism for pipelined prefetching
US7024663B2 (en) * 2002-07-10 2006-04-04 Micron Technology, Inc. Method and system for generating object code to facilitate predictive memory retrieval
US7036112B2 (en) * 2002-08-16 2006-04-25 Sun Microsystems, Inc. Multi-mode specification-driven disassembler
US6983456B2 (en) * 2002-10-31 2006-01-03 Src Computers, Inc. Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms
US7484205B2 (en) * 2002-12-12 2009-01-27 Microsoft Corporation Preprocessor-based source code instrumentation
US7228531B1 (en) * 2003-02-03 2007-06-05 Altera Corporation Methods and apparatus for optimizing a processor core on a programmable chip
US7343600B2 (en) * 2003-08-18 2008-03-11 Lenovo (Singapore) Pte. Ltd. Providing an image of installed software utilizing uninstall code
US8027349B2 (en) * 2003-09-25 2011-09-27 Roy-G-Biv Corporation Database event driven motion systems
US20060064503A1 (en) 2003-09-25 2006-03-23 Brown David W Data routing systems and methods
CA2443049A1 (en) 2003-09-26 2005-03-26 Ali I. Sheikh Method for computer program optimization in a dynamic compiling environment
US7747659B2 (en) * 2004-01-05 2010-06-29 International Business Machines Corporation Garbage collector with eager read barrier
US20100131077A1 (en) * 2004-02-25 2010-05-27 Brown David W Data Collection Systems and Methods for Motion Control
US7836434B1 (en) * 2004-05-04 2010-11-16 Oracle America, Inc. Method and system for analyzing array access to a pointer that is referenced as an array
US7624304B2 (en) * 2004-10-07 2009-11-24 Microsoft Corporation Defect detection for integers
US7707543B2 (en) * 2004-11-24 2010-04-27 Siemens Aktiengesellschaft Architecture for a computer-based development environment with self-contained components and a threading model
JP2006243838A (ja) * 2005-02-28 2006-09-14 Toshiba Corp プログラム開発装置
US20060248466A1 (en) * 2005-04-28 2006-11-02 International Business Machines Corporation Integration of multiple programming/scripting languages into one program unit
US8407206B2 (en) * 2005-05-16 2013-03-26 Microsoft Corporation Storing results related to requests for software development services
US9075596B2 (en) 2005-06-24 2015-07-07 Oracle International Corporation Deployment
US9542175B2 (en) 2005-06-24 2017-01-10 Oracle International Corporation Continuous deployment
US9063725B2 (en) 2005-06-24 2015-06-23 Oracle International Corporation Portable management
US7689979B1 (en) * 2005-08-02 2010-03-30 Adobe Systems Inc. Methods and apparatus to improve application launch time
US20070250828A1 (en) * 2005-11-16 2007-10-25 Tseitlin Ariel D Portable libraries
US7716100B2 (en) * 2005-12-02 2010-05-11 Kuberre Systems, Inc. Methods and systems for computing platform
US7644308B2 (en) * 2006-03-06 2010-01-05 Hewlett-Packard Development Company, L.P. Hierarchical timestamps
US8819641B1 (en) 2006-04-27 2014-08-26 Epic Games, Inc. Program state reversing software development tool
US8250553B2 (en) * 2006-07-27 2012-08-21 International Business Machines Corporation Method and data processing system for finding problems caused by access to uninitialized data storage in assembler programs
US8799871B2 (en) * 2007-01-08 2014-08-05 The Mathworks, Inc. Computation of elementwise expression in parallel
US7636697B1 (en) * 2007-01-29 2009-12-22 Ailive Inc. Method and system for rapid evaluation of logical expressions
US8930927B2 (en) * 2007-06-04 2015-01-06 International Business Machines Corporation Diagnosing aliasing violations in a partial program view
US8245211B2 (en) * 2007-06-05 2012-08-14 International Business Machines Corporation Method and system for finding problems caused by access to partially uninitialized data storage which is accessed using index expressions
US8930909B1 (en) * 2007-07-13 2015-01-06 The Mathworks, Inc. Debugging using presentation layer representations of objects
US9141377B2 (en) * 2008-02-19 2015-09-22 International Business Machines Corporation Visualization of code units across disparate systems
US7530056B1 (en) 2008-03-31 2009-05-05 International Business Machines Corporation Method and system for detecting runtime defects in a program by comparing correct and incorrect runs
US8484630B2 (en) * 2008-12-23 2013-07-09 International Business Machines Corporation Code motion based on live ranges in an optimizing compiler
US8549496B2 (en) * 2009-02-27 2013-10-01 Texas Tech University System Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations
US8448153B1 (en) 2009-10-29 2013-05-21 Ning Wang Encoding data and metadata for run-time checking of computer code and data serialization
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) * 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9262302B2 (en) * 2010-12-16 2016-02-16 International Business Machines Corporation Displaying values of variables in a first thread modified by another thread
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US8713684B2 (en) 2012-02-24 2014-04-29 Appthority, Inc. Quantifying the risks of applications for mobile devices
US8918881B2 (en) 2012-02-24 2014-12-23 Appthority, Inc. Off-device anti-malware protection for mobile devices
US8819772B2 (en) 2012-06-25 2014-08-26 Appthority, Inc. In-line filtering of insecure or unwanted mobile device software components or communications
US9372695B2 (en) * 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9753710B2 (en) * 2013-11-07 2017-09-05 Netronome Systems, Inc. Resource allocation with hierarchical scope
CN104951290B (zh) * 2014-03-31 2018-05-01 国际商业机器公司 优化软件的方法和设备
US9292267B2 (en) 2014-06-27 2016-03-22 International Business Machines Corporation Compiling nested relational algebras with multiple intermediate representations
US10545749B2 (en) 2014-08-20 2020-01-28 Samsung Electronics Co., Ltd. System for cloud computing using web components
US10067750B2 (en) * 2015-02-23 2018-09-04 Qualcomm Incorporated Whole-program optimization using data from previous compilation runs
US9830134B2 (en) * 2015-06-15 2017-11-28 Qualcomm Incorporated Generating object code from intermediate code that includes hierarchical sub-routine information
US9779012B1 (en) * 2016-02-26 2017-10-03 Mbit Wireless, Inc. Dynamic and global in-system debugger
JP2017156937A (ja) * 2016-03-01 2017-09-07 ヤンマー株式会社 端末装置およびソフトウェア書き換えプログラム
US11244090B2 (en) * 2016-06-01 2022-02-08 The Mathworks, Inc. Systems and methods for extracting adjustable attributes of model components
US10073759B2 (en) * 2016-09-29 2018-09-11 International Business Machines Corporation Identification and handling of nested breakpoints during debug session
US11232056B2 (en) * 2016-12-28 2022-01-25 Intel Corporation System and method for vector communication
US11321236B2 (en) * 2018-01-08 2022-05-03 Microsoft Technology Licensing, Llc. Reduced instructions to generate global variable addresses
CN111488140B (zh) * 2019-01-29 2023-10-27 杭州海康威视数字技术股份有限公司 一种支持多编程语言多编程库的方法、装置和计算机设备
US11669613B2 (en) 2020-05-29 2023-06-06 EnSoft Corp. Method for analyzing and verifying software for safety and security
US11714619B2 (en) * 2020-12-17 2023-08-01 Huawei Technologies Co., Ltd. Method and apparatus for retaining optimal width vector operations in arbitrary/flexible vector width architecture

Family Cites Families (4)

* 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
US4734854A (en) * 1985-10-08 1988-03-29 American Telephone And Telegraph Company System for generating software source code components
US4905138A (en) * 1985-10-17 1990-02-27 Westinghouse Electric Corp. Meta-interpreter
EP0243110A3 (en) * 1986-04-21 1991-05-29 Texas Instruments Incorporated Computer system having source code re-creation capability

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012150830A (ja) * 2004-11-19 2012-08-09 Intel Corp 限定された誤りによる遅延した更新によるソフトウェアキャッシュ処理

Also Published As

Publication number Publication date
EP0537257A1 (en) 1993-04-21
EP0537257A4 (en) 1993-11-24
WO1991020030A1 (en) 1991-12-26
EP0537257B1 (en) 1999-12-08
AU8201891A (en) 1992-01-07
DE69131832T2 (de) 2000-06-21
US5175856A (en) 1992-12-29
DE69131832D1 (de) 2000-01-13

Similar Documents

Publication Publication Date Title
JPH05508494A (ja) ソフトウェア開発のためのコンピュータプログラムの統合階層表示
EP0643851B1 (en) Debugger program which includes correlation of computer program source code with optimized objet code
EP0406602B1 (en) Method and apparatus for debugging parallel programs by serialization
Wirth et al. Compiler construction
Börger The ASM refinement method
US5680622A (en) System and methods for quickly detecting shareability of symbol and type information in header files
US6182281B1 (en) Incremental compilation of C++ programs
CN100385399C (zh) 用于多个异常处理模型的中间表示的方法和系统
US6434742B1 (en) Symbol for automatically renaming symbols in files during the compiling of the files
US20080104096A1 (en) Software development system
Closse et al. Saxo–RT: Interpreting Esterel semantic on a sequential execution structure
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
Cann The optimizing SISAL compiler: version 12.0
KR960003138B1 (ko) 다중 언어 최적화 컴파일러의 유도 수식 분석
Carle et al. A Practical Environment for Scientific Programming.
Cordy et al. Practical metaprogramming
JP2001166946A (ja) 階層の平坦化によりソースコードをコンパイルする方法及び装置
Champelovier et al. Reference Manual of the LNT to LOTOS Translator
Lumley et al. Compiling XSLT3, in the browser, in itself
Livadas et al. System dependence graphs based on parse trees and their use in software maintenance
Maliavko et al. The functionally-imperative programming language El and its translator
Auguston RIGAL—a programming language for compiler writing
EP1785848A1 (en) Method and apparatus for semantic checking of program code
Myers Composite design facilities of six programming languages
Maliavko et al. Functionally Imperative Programming Language El and its Implementation