JP2001166949A - シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 - Google Patents

シンボリック実行を用いてソースコードをコンパイルするための方法及び装置

Info

Publication number
JP2001166949A
JP2001166949A JP2000361619A JP2000361619A JP2001166949A JP 2001166949 A JP2001166949 A JP 2001166949A JP 2000361619 A JP2000361619 A JP 2000361619A JP 2000361619 A JP2000361619 A JP 2000361619A JP 2001166949 A JP2001166949 A JP 2001166949A
Authority
JP
Japan
Prior art keywords
index
data structure
question
computer program
memory access
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
JP2000361619A
Other languages
English (en)
Inventor
Jan Guffens
ヤン・グッフェンス
Pont Kurt Du
クルト・ドュ・ポン
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.)
ARM Belgium NV
Original Assignee
Frontier Design BVBA
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 Frontier Design BVBA filed Critical Frontier Design BVBA
Publication of JP2001166949A publication Critical patent/JP2001166949A/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
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/49Partial evaluation

Abstract

(57)【要約】 【課題】 並列化によりコンピュータプログラムのコン
パイルを最適化するための方法及び装置を提供するこ
と。 【解決手段】 プログラム中のオペレーション及びそれ
らのシーケンスを記載する情報が、抽出されてデータ構
造にて記憶される。指標表現を伴うプログラム中のオペ
レーションが、識別されシンボリック実行され、プログ
ラムによるメモリアクセスを記載する情報を作成する。
並列に実行できるオペレーションが、メモリアクセスを
記載する情報に基づいて識別される。プログラムは、プ
ログラムがどのようにメモリにアクセスするかに関して
の疑問データ構造における疑問により問合せが為され
る。これらの疑問に対する解答は、指標セットに蓄積さ
れ、後注釈が付けられて疑問データ構造に入れられる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータソフ
トウエアのエンジニアリング分野に関する。特に、本発
明は、並列化(parallelism) によりソースコードをコン
パイルするための方法及び装置に関し、それによりさら
に効率的なコンパイルコードを発生することができ、よ
り並列な命令を作ることを可能にしてプロセッサー資源
をよりよく利用できる。
【0002】
【従来の技術】コンピュータプログラムをコンパイルす
ることは、高水準言語コード(ソースコード)をコンピ
ュータのプロセッサーが理解できる命令(目的コード)
に変換することを伴う。コンパイラの目標の一つは、ソ
ースコードの効率的な実施である。1つより多い命令を
並列に実行できるプロセッサーの場合、コンパイラの目
的は、出来るだけ多くの命令を並列に実行できるように
コードをコンパイルすることである。
【0003】
【発明が解決しようとする課題】本発明の目的は、コー
ドの並列化によりそのコードを効率的にコンパイルする
ための方法及び装置を提供することである。本発明は、
複数の機能ユニットを有するどんなコンピュータアーキ
テクチャにも適用でき、例えば、デジタル信号処理
(「DSP」)アプリケーションのリアルタイム実行を
実現するための超長命令語(「VLIW」)アーキテク
チャにも適用できる。本発明の別のさらに特定の目的
は、ソースプログラムにおける各メモリアクセスの依存
性を求めて表すことである。これは、コンパイラが並列
性を最大限利用できるように、プログラム中の実行経路
を調べる。VLIWアーキテクチャの場合には、並列性
を正確に検出できないと、より少ない命令がVLIW命
令語に取り込まれ、それによりプロセッサーの性能がそ
の能力より低くなり得る。
【0004】指標表現はコンパイラに特別な問題を提示
する。次の疑似コードを考える。
【数1】 「double a=A[0] 」で始まるブロックコードは、「doub
le d=A[2] 」で始まるコードと並列に実行できる。とい
うのは、それらは配列A内の同じメモリ位置をアクセス
しないからである。
【0005】今度は、さらに複雑な並列化の次の例を考
える。
【数2】 配列Aの指標は、今度はループ反復子(iterator)の線形
指標表現である(線形表現はi、i+1及びループ反復
子i)。指標表現に適用される用語「線形」は、指標表
現が反復子プラス定数の定数回の組み合わせで得られる
ことを示す。この情報は、ループの複数回の反復が並列
に実行できるか否か(「配列プライベート化」(array p
rivatization) )という)を決めるのに使用できる。こ
の例では、コンパイラは、配列の値は前の反復で作られ
ることを知ることができる。従って、次の反復の読み出
しの後まで書き込みオペレーションを延期することはで
きない。
【0006】次に、再帰変数を伴う次の例を考える(こ
れは挙動的には前の例と等しい)。
【数3】 この表現では、変数はループの前に初期化される。ルー
プ内で使用され更新される値は、再帰変数(induction v
ariable)と言われる。いくつかの場合には、再帰変数
は、線形指標表現に変換でき、そのように表現されたコ
ードに並列化が為される。これはそのケースである。と
いうのは、コードが前の例のコードと完全に等価である
からである。
【0007】コンパイラ最適化の公知の方法は、線形指
標表現のみを考慮し、非線形表現に対しては非並列性の
最悪の場合を仮定する。再帰変数は、線形指標表現に変
換して扱う。従来技術のたいていのシステムは、発見的
なアプローチを用いてこのような表現からメモリアクセ
ス情報を得ている。従来技術のアルゴリズムは、線形指
標表現及び特定のデータフロー分析問題を整数線形計画
の問題の解法が存在する証明として定式化する。整数線
形プログラミング問題を簡単にするための別の公知の方
法は、フーリエ−モツキン(Fourier-Motzkin) 変数除去
であり、これは問題の次元の数を減らす。本発明は、線
形指標表示に限定されず、整数線形計画にも限定されな
い。代わりに、ソースプログラムの関連部分をシンボリ
ック実行に適したデータ構造に変換し、シンボリック実
行を行い、シンボリック実行中に発生されたデータから
指標値の関連の組み合わせを抽出する。すなわち、特定
の指標表現が取り得る正しい範囲は、シンボリック実行
により計算されるが、整数線形計画により定義されな
い。従って、本発明はとりわけルックアップ表や条件更
新だけでなく、非線形指標表現を伴うコードの最適化を
扱うことができる。本発明のこれら及びその他の利点
は、以下の説明及び特許請求の範囲から明らかとなる。
【0008】
【課題を解決するための手段】本発明は、シーケンスを
有する複数のオペレーションからなるコンピュータプロ
グラムをコンパイルする方法に関する。本方法は、オペ
レーション及びオペレーションのシーケンスを記載する
情報をコンピュータプログラムから抽出し、抽出された
情報をデータ構造として記憶することを伴う。指標表現
を伴うコンピュータプログラム中のオペレーションが識
別され、それらのオペレーションが実行され、メモリア
クセスを記載する情報を作成する。メモリアクセスを記
載する情報に基づいて、並列に実行できるオペレーショ
ンが識別される。別の実施態様では、本方法は、メモリ
アクセス及び指標表現を伴うコンピュータプログラム中
のオペレーションの表現を含むシンボリック実行データ
構造を発生するステップを含む。シンボリック実行デー
タ構造は、データフロー問題グラフとし得る。さらに別
の実施態様では、本発明の方法は、シンボリック実行デ
ータ構造を実行すること、及びコンピュータプログラム
によりアドレス指定されたメモリ位置に注を付ける(not
ing)ことによりオペレーションを実行することを伴う。
コンピュータプログラムがどのようにメモリにアクセス
するかに関する疑問を含んだ疑問データ構造が発生され
る。コンピュータプログラムは、これらの疑問によりコ
ンピュータプログラムに問合せを行うことで分析され
る。疑問に対する解答は、後注釈が付けられ疑問データ
構造に入れられる。別の実施態様では、指標表現を伴う
プログラムのオペレーションによるメモリアクセスに関
する指標セットが発生される。疑問に対する解答が、シ
ンボリック実行ステップ中に指標セットに蓄積された情
報に基づいて計算される。よって、指標セットはシンボ
リック実行ステップにおいて満たされる。本発明はさら
にコンピュータコードをコンパイルするための装置を包
含し、これは第1信号フロー分析モジュールを有し、該
モジュールはコンピュータコードにより使用される指標
表現に対する信号フローデータ構造を作る。信号フロー
分析モジュールは、コンピュータコード中の指標経路を
識別するモジュールを含む。指標経路は、指標表現によ
るメモリアクセスで使用される指標を計算する際に伴う
オペレーションから構成される。シンボリック実行モジ
ュールは、指標経路を実行し、それにより指標表現メモ
リアクセスに関する情報を抽出する。別の実施態様で
は、本装置は、指標表現によるメモリアクセスに関する
疑問を含んだ疑問データベースを含む。あるモジュール
は疑問データベース中の疑問に対する応答から成る指標
セットを発生する。あるモジュールは指標セットの内容
に基づいて疑問データベース中の疑問に対する解答を発
生する。
【0009】
【発明の実施の形態】以下は好ましい実施態様の詳細な
説明であり、当業者が本発明を構成し使用するのを可能
にするであろう。この記載は本発明を限定するというよ
りむしろ説明することを意図しており、本発明の全範囲
は特許請求の範囲及びその等価物を参照することにより
決められるべきである。当業者ならば、本発明の広範囲
の代替実施態様が本発明に包含されることを認識するで
あろう。
【0010】本発明は、コンピュータアーキテクチャに
おいて使用するためのソースコードプログラムの効率的
なコンパイルを行うための方法及び装置を提供し、これ
は効率的なコンパイルコードを作り、例えば超長命令語
(「VLIW」)アーキテクチャにおいてオペレーショ
ンが並列に実行されることを可能にする。本発明の狙い
は、信号フローグラフ(「SFG」)を作り、入力ソー
スコード中にて出来るだけ十分な並行化を行うことであ
る。SFGは、アルゴリズムを表すデータ構造であり、
コードのコンパイルを助けるのに使用される。SFG
は、プログラムを通じてデータエッジ(オペレーション
間でデータをルート指定する)及びシーケンスエッジ
(オペレーション間に順序関係を与える)によりプログ
ラム中の依存性を表す慣用かつ便利な方法である。SF
Gデータ構造の使用例は、「DSPステーションSFG
コンセプト及び手順インターフェース(ソフトウエア版
8.6.1)」(Frontier Design 、ベルギー、ルーベ
ンのb.v.b.a.)に記載されている。当業者ならば、デー
タ及びシーケンス情報の代替表現などの他の手段により
同じ結果が達成できることを認識するであろう。用語S
FGはこのような表現ならどんなものをも意味する。
【0011】以下の記載では、ソースコードはメモリオ
ペレーションの指標の計算に伴うオペレーションから成
る指標経路だけでなく、スカラー及び配列変数を伴うオ
ペレーションを含むことが仮定される。データフロー分
析における基本ステップは図1に示されており、以下に
まとめる。 1. プログラムオペレーション及びそれらのオペレー
ションのシーケンスに関する情報をソースコードから抽
出する(S1)。 2. スカラー変数に対するオペレーション間の制御及
びデータエッジをルート指定する(S2)。スカラー変
数にアクセス(すなわち読み出し又は書き込み)する
と、変数全体を使用し(読み出し)又は作成する(書き
込む)。古典的なデータフロー分析はこの状況は扱うこ
とができる。しかしながら、古典的なデータフロー分析
は、配列に関する場合、特に非線形指標を含む場合には
最適化を寄与しない。 3. 指標経路中の全てのオペレーションにフラグを立
てる(S3)。 4. 「展開文脈」を発生する(S4)。もし関数がス
テップ2でフラグが立てられた関数呼出しを有するなら
ば、データ構造が発生される。このデータ構造は、まる
で関数内のオペレーションが呼出し関数の文脈にて「イ
ンライン」になっているようにアルゴリズムの次の段階
がその関数のオペレーションを「見なす」ことを可能に
する。
【0012】5. DFA問題グラフを構築する(S
5)。これは、例えば指標変数を伴う関数呼出しゆえに
指標経路における階層を除去し平坦化する。DFA問題
グラフは、メモリアクセス及び指標経路中のオペレーシ
ョンに関係するノードを有する。 6. 次の段階におけるデータ及びシーケンスフロール
ーターにより所有され得るメモリアクセスに関する疑問
の1セット(「DFA疑問」)を作る(S6)。これら
の疑問は、ループ、メモリアクセス1及びメモリアクセ
ス2から成る関連の組(triplet) に対して発生される。
これらの疑問はDFA疑問データベースに記憶される。 7.シンボリック実行データ構造を作る(S7)。これ
は、全てのメモリアクセスに関する情報を蓄積又は保持
するのに必要なデータ構造を含む。 8. ソースコードのシンボリック実行を行う(S
8)。 9. DFA疑問データベースに対するシンボリック実
行により作られたデータに後注釈を付ける(S9)。展
開された関数呼出しの場合、この段階は全ての関数呼出
しにより発生されたシンボリック実行データをマージす
る。 10. DFA疑問に対する解答を用いて配列変数に対
するオペレーション間で制御及びデータエッジをルート
指定する(S10)。
【0013】次に、これらのステップは、図2及び本発
明の説明に資する例たる以下の疑似コードを特に参照し
て詳細に説明される。
【数4】
【0014】以下の記載はこのコード及びこのコードに
関係するデータ構造の表現を参照する。図5、6及び8
〜16は、当業者ならば十分理解するであろう方法にて
本発明を用いて、上記コードの分析のグラフ表現を与え
る。フロントエンド2は、ソースコード10を入力とし
て受け取り、パーザ(parser)12により語彙分析を行
い、注釈付き構文トリー14の形式にてソースコードの
中間水準言語表現を作る。注釈付き構文トリー14は信
号フローグラフ発生器4に入力される。信号フローグラ
フ発生器4は、まずソースコードを調べて、それが合成
可能か否かを決める。もしそうなら、構文トリーをトラ
バース(traverse)し(図1のS1とS2)、SFGデー
タ構造を作る。SFG発生器4は次の出力を作る。すな
わち、ベア(bare)SFG16、シーケンス情報18及び
呼出しグラフ20である。ベアSFG16は、ソースコ
ード10における全てのオペレーションを表すけれども
これらのオペレーションを連結するどんなデータ又はシ
ーケンスエッジをも含まないSFGである。従って、ベ
アSFGは、予定のないオペレーションセットを含む。
ベアSFGの例を図3に見いだすことができる。シーケ
ンス情報18は、語彙の順番及びベアSFGにおける異
なるオペレーションの排他性に関する情報を含むリスト
である。排他性は、ソースコード中の条件文から引き出
される。Cのような言語では、これらはif−then
−else文、case文及び?演算子である。次のも
のは、上記疑似コード例で図3に示したベアSFGのシ
ーケンス情報である。
【0015】
【数5】
【0016】関数呼出しグラフ20は、ソースコード1
0中の関数呼出しを表す呼出し木(call tree) である。
それは「平坦化」段階で使用され、ソースコード中の全
ての関数呼出しに対し情報をキャッシュ(cache) する。
ソースコード中のすべての関数は、木の中のノードによ
り表され、すべての関数呼出しはエッジにより表され
る。図3に示された上記例でのベアSFGでは、「fib
o」が唯一の関数呼出しである。次のものは、さらに複
雑な関数呼出しの例である。
【数6】
【0017】図4は、上記コードに対する関数呼出しグ
ラフである。これは、主プログラム200が関数「foo
」202(エッジ201により表される)を呼出し、
次にこれが「bar 」205を2回呼出す(エッジ203
と204により表される)。ベアSFG16とシーケン
ス情報18は、スカラールーター22に送られる。スカ
ラールーターは、シーケンス情報18を用いてベアSF
G内の1つのノードから別のノードへエッジのルート指
定を与える。これはスカラー変数に対してのみ行われ
る。この例に対するスカラールーター22の動作の結果
が図5に示される。図5では、データ及びシーケンスエ
ッジが加えられてスカラー変数に関係する全てのオペレ
ーションをリンクしているのが分かる。結果として得ら
れるスカラールートSFGは24にて作られる。次に非
スカラー変数がアドレス指定される。次に、指標経路中
の全てのオペレーションにフラグが立てられ(図1のS
3参照)、関数階層の「平坦化」の準備をする。「指標
経路」は、グラフ上の指標ポートに寄与するSFG中の
ノード、すなわち、メモリアクセスオペレーション(フ
ェッチ又はストア)で使用される指標の計算に含まれる
全てのオペレーションから構成され、又はもし結果が指
標経路中にある別のオペレーションにおいて使用される
ならばである。この例では、指標ポートは指標「i 」で
マークされる。a[i+j]のような場合には、「+」
オペレーションはiとjを定義するオペレーションと共
に、指標経路の一部であるとしてタグが付けられる。図
6に示された陰影付きのオペレーションを参照のこと。
【0018】各オペレーションは、それが指標経路中に
あるか否かを示すフラグを有する。フラグの初期値は
「偽」である。全てのメモリアクセスオペレーション
(フェッチ及びストア)の指標ポートからデータエッジ
を越えての後戻りは、適当なフラグを設定する。このス
テップの結果は図6の例に示される。次の疑似コード
は、指標経路のマーキングに含まれるステップを示す。
【数7】
【0019】次のステップは、手順間最適化(すなわ
ち、関数呼出し間で共通の変数に関する最適化)であ
る。これは、フラグの立てられたオペレーションに対す
る展開文脈の発生を伴う(S4参照)。その結果、関数
呼出しグラフデータ構造20中のすべての関数は、「展
開文脈」26のリストを含む。これらは次の様に発生さ
れる。すなわち、もし関数が前のステップでフラグ立て
された関数呼出しを有するならば(すなわち指標経路の
マーキング)、「平坦」形状の、すなわち主プログラム
中で展開された関数を表すべく準備したデータ構造が発
生される(「展開文脈」)。これは「インライン」関数
のC++概念に類似する。その結果は、関数呼出しの階
層が除去されることである。すなわち、指標経路を伴う
関数呼出しの階層は平坦化される。関数における各引き
数は、その関数の各呼出しに対して調べられる。しかし
ながら、引き数としての指標入力を有する関数のみが調
べられることに留意されたい。このことは、各々の展開
文脈を作る次の情報(1)〜(3)を生じる。すなわ
ち、(1)関数の親、(2)関数を呼出すエッジ及び
(3)関数に対する唯一の識別子。その結果は、プログ
ラムが関数呼出しにより導入される階層を参照すること
なく表されることである。DFA問題分析は、どんな関
数階層を用いることもなく、平坦なデータ構造上にて実
行できる。
【0020】次の疑似コードは、展開文脈の発生を説明
するものである。
【数8】
【0021】次のステップは、「DFA問題グラフ」の
構築であり(図1のS5参照)、これは非スカラー変数
に対するメモリアクセスに伴うソースコードを記載す
る。これは、DFA抽出器28により行われる。DFA
抽出器28への入力は、スカラールート指定されたSF
G24及び展開文脈26の発生から得られる展開文脈で
ある。別の実施態様では、DFA抽出器は、シーケンス
情報データ構造18及びベアSFGデータ構造16にお
ける情報を利用する。DFA問題グラフ30は、階層が
取り除かれた「平坦な」表現を与える。DFA問題グラ
フ30は、メモリアクセス及び指標経路中のオペレーシ
ョンに関連するノードを有するグラフである。DFA問
題グラフの構築における開始ポイントは、指標経路中の
読み出しメモリアクセス(フェッチ)及び書き込みメモ
リアクセス(ストア)である。これらのノードから、デ
ータフローはシンボリック実行エンジンによりサポート
されたそれらのノードを介して後方にトレースされる。
サポートされた指標経路オペレーションは次の通りであ
る。
【0022】・ 算術演算子:モジュロ(%)、左シフ
ト(<<)、右シフト(>>)、割る(/)、加える
(+)、キャスト(casts) (型変換/プロモーショ
ン)、引く(−)、掛ける(*)、ビット論理積
(&)、ビット論理和(|)、ビット排他的論理和
(^)、補数演算子(〜)、単項マイナス(−)、単項
プラス(+)。 ・ 論理演算子:以下(<=)、より小(<)、等しい
(==)、等しくない(!=)、以上(>=)、より大
(>)、論理積(&&)、論理和(||)、論理否定
(!)。 ・ ループ反復子。 ・ 定数。 ・ ビット演算子:スライス(所与のワードからビット
の範囲を選択する)、セットスライス(ワード中にビッ
トの範囲をセットする)、concat(ビットを付加し新ワ
ードを形成する)。 ・ 表を調べる(定数表からフェッチする)。 ・ 再帰変数:ループの実行中に等差数列を形成する値
を有する変数。
【0023】もしノードがサポートされていないなら
ば、DFA問題グラフ中に表されないであろうし、サポ
ートされないノードに依存する全てのノードは無効にさ
れるであろう。このことの結果は、後でのみ分かる。す
なわち、サポートされていないノードに依存するメモリ
アクセスに対しては、最悪の場合の仮定が為されて場合
により並列性の大きさを制限する。DFA問題グラフが
図7に示される。図7のグラフは次の疑似コード例に対
するDFA問題グラフである。
【数9】
【0024】DFA問題を表すデータ構造は、図7に示
される以下の構成要素を含む。 ・ 定数ノード102、104: これらは単一の出力
を有し内部は定数であるノードである。 ・ 算術及び論理ノード106、108: これらは、
1以上の入力と1つの出力を有し、上記算術及び論理演
算子を表す。 ・ トップループ110: プログラム自身である。 ・ ループノード112: これらは、下方及び上方の
境界、及びループ反復子のためのステップ値を有する。
このループは、(トップループにおいて入れ子にされた
ループに対し)入れ子エッジ114を有し、これは、ル
ープ階層及び再帰ループエッジ116により表されたそ
のループの再帰変数のリストを表す(すなわち、ループ
は変数を制御する)。 ・ ルックアップ表: これは、定数表及びそれらの定
数表からのメモリ読み出し(フェッチ)を表すノードで
ある(図7には図示せず)。 ・ セレクター: これらは、if then else文の対応物
である。それらはブールセレクター値に依存して2つの
入力のうち1つを選択するハードウエアマルチプレクサ
ーに類似する(これらは図8には図示せず)。 ・ 再帰変数: 再帰変数は、再帰ソースノード120
(これはループ反復の開始時に値を保持する)及び再帰
シンク(induction sink)122(これは次のループ反復
において続いて使用するためにループ反復の終了時に値
を保持する)により表される。 ・ メモリアクセス124: これは変数に対する読み
出し/書き込みメモリアクセス(フェッチ/ストア)を
表す。 ・ データエッジ126: これらはノード間のデータ
の転送を表す。
【0025】コード例に対するDFA問題グラフが図8
に示される。次の疑似コードは、DFA問題グラフの発
生を表す。
【数10】
【0026】
【数11】
【0027】
【数12】
【0028】次のステップは、DFA疑問の生成である
(図1のS6参照)。これらは、ベアSFG16により
与えられる情報及びシーケンス情報18に基づいてDF
A疑問発生器36により発生され、指標経路中のフェッ
チ、ストア及びループからなる関連の組が求められる。
DFA疑問は疑問データベース32に記憶される。これ
らの疑問は、1つのオペレーションが別のものを与える
か否か(よって、他のオペレーションと並列に実行でき
るか否か)を確かめることを狙いとする。一旦疑問が解
答されると、ベアSFGはデータ及びシーケンスエッジ
を用いて完成され得る。次の疑問が尋ねられる。 ・ 「定義は特定ポイントに到達したか?」: 消す定
義に到達したポイントに対し消される定義からデータフ
ローが無い場合には、その定義は別のものにより消され
る。次の例を考える。
【数13】
【0029】例えばa=1及びa=2(a=1はそれが
再定義されるので消される)の場合には、消される定義
とは「消されるスカラー定義」である。次のものは、消
されないスカラー定義の例である。
【数14】
【0030】例えばスカラーが条件的に更新された場合
に、「消されないスカラー定義」が生じる。同じこと
が、「消される配列定義」に当てはまり、例えば次のコ
ードにおいてa[i]=2が続くならばa[i]=1は
消される。
【数15】
【0031】・ 「定義は単一定義であるか?」: も
しアクセスがループ内(ループの全ての反復に亘って)
1回より多く定義されているならば、定義はループ内の
前の反復からのデータを上書きするかもしれず、フィー
ドバックシーケンスエッジは、ループ本体に加えられな
ければならない。将来の反復からのアクセスは、現在の
反復のアクセスの後に実行されなければならない。次の
ものは単一定義を伴う例である。
【数16】
【0032】・ 「メモリアクセスは共通元をもたない
か(disjoint)?」: もしオペレーションがメモリの異
なる部分に作用するならば、それらは共通元をもたな
い。シーケンス又はデータフローエッジが作られる必要
はない。これは、メモリアクセスが並列に実行できるこ
とを意味する。次のものは共通元をもたないメモリアク
セスを伴う例である。
【数17】
【0033】・ 「データは1つの反復から次の反復に
流れるか?」: もし1つの反復において作られたデー
タが次の反復で使用されるならば、フィードバックデー
タエッジが作られなければならない。現在の反復での作
成は、次の反復(1つ又は複数)で使用される前に、実
行されなければならない。次のものは、1つの反復に対
するフィードバックの例である。
【数18】
【0034】・ 「データは現在の反復からn番目の反
復に流れますか?」: もし現在の反復にて作られたデ
ータがn番目の反復においてのみ使用されるならば、フ
ィードバックソースで始まるデータ(ここではn=1)
も、対応するフィードバックシンクに送出しなければな
らない。この送出は、データが次のいくつかの反復で使
用されることを示し、現在の反復での作成は、将来の反
復のどれかにおいて使用され得る前に実行されなければ
ならない。次のものは、n=2の場合におけるn回の反
復に亘ってのフィードバックを示す例である。
【数19】
【0035】以下は、疑問データベースのデータベース
構造についての記載である。疑問に対する解答は、ブー
ル肯定(yes) 又は否定(no)、又はメモリ位置を含んだビ
ットベクトル若しくは指標セットのどちらかとし得る。
配列ルーターは、これらの疑問に対する解答を使用し、
データ及びシーケンスエッジを与え、それによりコード
中の並行度を示す。解答が存在しない場合には、最悪の
場合が想定される(すなわち、オペレーションは並列に
実行できない)。図3、5及び6に示された例でのSfg
_fetchOp 中のfibo[i-1] を求める疑問のスナップショ
ットが図9に示される。 dfaqSet : これは単一のメモリアクセスに対しアクセ
スされる全ての位置を与える。 dfaqKillSet : これは書き込みメモリアクセスに対し
常に定義される配列要素を与える。dfaqKillSet はルー
プに対して計算される。プログラム全体に亘って、A[i]
に対するkillset は、ループに対するkillset が空であ
るのに対し、完全な配列である。これはループ入れ子に
おける定義を決めるのに重要である。次の例を考える。
【0036】
【数20】 この例では、ライン5(A[i])のストアオペレーション
がAの全ての要素を無条件に定義する。ライン3(A
[0])で記憶された値はアクセスできない。というの
は、それはライン5(A[i])での記憶により消される
(上書きされる)からである。この例ではライン3は最
適化される。
【0037】dfaqDirectSetIsEmpty: これは、ループ
における特定の1反復中に2つのメモリアクセスが同じ
メモリ位置をアクセスしないならば、「真」(true)を返
す。そうでなければ、「偽」(false) を返す。次の例を
考える。
【数21】 ライン7(A[i])での書き込みを伴うライン6(A[i-
1])での読み出しの直接セットは空である。というの
は、同じメモリ位置は、ループ反復子iの値に対しては
決してアクセスされないからである。ライン7での書き
込みとライン8での読み出しの間の直接セットは空では
ない。 dfaqFeedbackSetIsEmpty: これは、メモリアクセス
(フェッチ/ストア)がループにおける前の反復で別の
メモリアクセスにより使用又は定義された値を使用又は
定義するならば、「真」を返す。 dfaqFeedbackSetLoopingDegreeGT1IsEmpty: これは、
メモリアクセスがループにおける1反復より前の反復に
おいて別のメモリアクセスによりアクセスされた値を使
用するならば、「真」を返す。 dfaqIsSingleDefinition: これは、ループ中のメモリ
アクセスがただ1回だけメモリをアクセスするならば、
「真」を返す。それ以外では「偽」を返す。次の疑似コ
ードはDFA疑問を発生するためのアルゴリズムを示
す。
【0038】
【数22】
【0039】
【数23】
【0040】指標経路に関する疑問が発生されたなら、
次のステップは、それらの疑問に対する解答を与える
「シンボリック実行」である(S8参照)。しかしなが
ら、シンボリック実行の前に、疑問データベースを調べ
ることによりシンボリック実行データ構造を作るのが好
ましい(S7参照)。データ構造は次の2つの部分から
作られる。 ・ DFA問題グラフにリンクし同じ階層を有する実行
構造(「シンボリック実行構造」)。 ・ シンボリック実行中にデータを蓄積するのに使用さ
れるセット。シンボリック実行データ構造(指標セット
データベース34)に対して次の2つの部分が存在す
る。すなわち、DFA問題グラフにリンクし同じ階層を
有する実行構造、及び実行中に指標セットデータを蓄積
するのに使用されるセットである。データ構造は、メモ
リアクセスと指標セットに対するポインタ、及びDFA
問題グラフとDFA疑問に対する後ポインタ(back poin
ter)を含んだオブジェクトのセットを含む。
【0041】symExecTopLoop: この構造はアルゴリズ
ムの実行を表す。これはsymExecMemoryAccesses 及びsy
mExecLoopsのリストを含む(下記参照)。 symExecLoop : この構造はループの実行を表す。これ
はsymExecMemoryAccesses 及びsymExecLoopsのリストを
有する。これは更新されるべき再帰(induction) ソース
のリスト及び異なるセットを含むリストをも有し、これ
らの各々はループ反復の実行中の特定段階にて更新され
なければならない。 symExecMemoryAccess : この構造は、メモリアクセス
を表し、メモリアクセスが発生する際に更新されなけれ
ばならないセットのリストを有する。 symExecFeedback : この構造は、DFA問題グラフか
らの再帰変数を表す。セットは次の通りである。 symExecSet: これはアクセスされた要素を集めるのに
使用されるセットである。 symExecIntegratedSet: これは2つのセットから作ら
れたセットであり、そのうちの1つは、特定のsymExec
オブジェクトの実行に亘って発生した全てのメモリアク
セス、例えば特定のループの実行中に発生した全てのメ
モリアクセスを蓄積する。もう一方のセットは類似する
が、前の反復からアクセスされた要素を含まない。
【0042】他のセットは、疑問の解決に関係し、疑問
を解決すべくsymExecSets 、symExecIntegratedSets 及
び他の論理を利用する。これらのセットは次の通りであ
る。 symExecAccessedSet: dfaqSet を解決(resolve) す
る。 symExecDirectSet: dfaqDirectSetIsEmptyを解決す
る。 symExecFeedbackSet: dfaqFeedbackSetIsEmptyを解決
する。 symExecLoopDegreeGT1Set : dfaqFeedbackSetLoopDeg
reeGT1IsEmpty を解決する。 symExecKillSet: dfaqKillSet を解決する。
【0043】図10〜14は、この詳細な説明を通して
使用されている例において、DFA問題グラフの文脈中
のDFA疑問、DFA疑問データベース、及びシンボリ
ック実行データ構造のセットを示す。次の疑似コード
は、シンボリック実行データ構造の作成を説明する。
【0044】
【数24】
【0045】
【数25】
【0046】次のステップはプログラムの「シンボリッ
ク実行」である(S8参照)。図15はこの手順のスナ
ップショットであり、シンボリック実行データ構造、及
びDFA疑問データベース32に対する結果の後注釈付
けを含む(後に説明)。ループ及び指標表現を含むプロ
グラムのそれらの部分のみが実行される。すなわち、指
標表現の表現が実行される。これは上記指標セットを満
たす。この実行は、DFA問題グラフ中のデータノード
を評価するDFA分析器38により実行される(すなわ
ち、プログラムの指標経路を実行し、それにより指標セ
ットを満たす)。次の疑似コードは、プログラムのシン
ボリック実行のアルゴリズムを示す。
【0047】
【数26】
【0048】
【数27】
【0049】最後に、シンボリック実行により集められ
た情報は、疑問データベース32に送られる。このステ
ップは、疑問データベースの「後注釈」(back annotati
on)と称される(S9参照)。非手順間データフロー分
析の場合には、これはデータの単なる転送により行われ
る。手順間データフロー分析の場合には、異なるsymExe
c オブジェクトにおけるデータは解答を得るべくマージ
される。これは図15に説明されており、上記疑似コー
ド例の数列(progression) 、指標セットの充てん、及び
疑問データベースに対する指標セットの後注釈を示す。
図16に示された最後のSFGは、データ及びシーケン
スエッジをスカラールート指定されたSFG24に加え
る配列ルーター40により完成される(S10参照)。
非スカラー変数の場合、配列ルーターは、上記データフ
ロー分析により発生されたデータを使用するか又は、非
スカラー変数に対するメモリアクセスについて最悪の場
合のシナリオを取る。
【0050】最悪の場合の状況に対する基本的なアルゴ
リズムは次の通りである。
【数28】 これは、DFA問題グラフの構築の上記説明において言
及した最悪の場合のシナリオ仮定である。最悪の場合の
シナリオでは、DATA[i] 及びDATA[j] オペレーション
は、それらの定義(すなわち最悪の場合)セットが重な
るのでシーケンス化されなければならない。もしデータ
フロー分析からのデータが考慮されるならば、ルーター
は2つのオペレーションをシーケンス化せず、よって並
行度を増す(なぜならそれらの定義セットは互いに共通
元をもたないからである)。配列ルーターのアルゴリズ
ムは次の通りである。
【0051】
【数29】
【0052】
【数30】
【0053】
【数31】
【0054】図16に示されるように、配列ルーター4
0の出力は十全にルート指定されたSFG42である。
さらなる最適化がピープホール最適化器44により行わ
れ、結局最終のSFG46となる。最終のSFG46
(及び十分にルート指定されたSFG42)は、並列に
実行できるソースコード10中のオペレーションを反映
する。このようにソースコード10の実行が最適化され
る。
【0055】以上は本発明の好ましい実施態様の説明で
ある。当業者ならば、本発明の精神及び範囲を逸脱する
ことなく上記記載により本発明の広範囲の代替及び等価
な実現が可能なことが分かるであろう。
【図面の簡単な説明】
【図1】本発明の基本的な方法を示すフローチャートで
ある。
【図2】本発明の基本的な構成要素、及びそれらの間の
相互作用を示すブロック図である。
【図3】発明の詳細な説明における疑似コード例でのオ
ペレーションを表すノードの信号フローグラフ(「SF
G」)である。
【図4】発明の詳細な説明における例での関数呼出しグ
ラフである。
【図5】発明の詳細な説明における例でのスカラー変数
に対するデータのルート指定及びシーケンスエッジを示
す信号フローグラフである。
【図6】発明の詳細な説明における例でのプログラムの
指標経路のマーキングを示す信号フローグラフである。
【図7】本発明で使用されるDFA問題グラフの例であ
る。
【図8】発明の詳細な説明における例でのDFA問題グ
ラフである。
【図9】発明の詳細な説明における例での1つの関数呼
出しに対するDFA疑問のスナップショットである。
【図10】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図11】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図12】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図13】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図14】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図15】発明の詳細な説明における例に関し、図8に
示されたDFA問題グラフの関するDFA疑問の1セッ
ト、DFA疑問データベース、及びシンボリック実行デ
ータ構造を示すグラフ表現である。
【図16】発明の詳細な説明における例での結果として
得られる信号フローグラフであり、データ及びシーケン
スエッジでルート指定されており、並行化を行うのに用
いられる。
【符合の説明】
4 SFG発生器 10 ソースコード 12 パーザ 14 注釈付き構文トリー 16 ベアSFG 18 シーケンス情報 20 呼出しグラフ 22 スカラールーター 24 スカラールート指定されたSFG 26 展開文脈 28 DFA抽出器 30 DFA問題グラフ 32 疑問データベース 34 指標セットデータベース 36 DFA疑問を発生 38 DFA分析器 40 配列ルーター 42 ルート指定されたSFG 44 ピープホール最適化器 46 最終SFG
───────────────────────────────────────────────────── フロントページの続き (72)発明者 クルト・ドュ・ポン ベルギー国 2220 ハイスト−オープ−デ ン−ベルク アウデ リーアセバーン 125 デー

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 シーケンスをなす複数のオペレーション
    を含むコンピュータ プログラムをコンパイルする方法であって、前記オペレ
    ーション及び該オペレーションのシーケンスを記載する
    情報をコンピュータプログラムから抽出し、抽出された
    情報をデータ構造として記憶し;指標表現を伴うコンピ
    ュータプログラム中のオペレーションを識別し;指標表
    現を伴うコンピュータプログラム中のオペレーションを
    実行し、それによりメモリアクセスを記載する情報を作
    り;メモリアクセスを記載する情報に基づいて並列に実
    行できるオペレーションを識別する、ステップを含む上
    記方法。
  2. 【請求項2】 シンボリック実行データ構造を発生する
    ステップをさらに含み、該シンボリック実行データ構造
    はメモリアクセスと指標表現を伴うコンピュータプログ
    ラム中のオペレーションの表現を含む、請求項1記載の
    方法。
  3. 【請求項3】 シンボリック実行データ構造がデータフ
    ロー問題グラフを含む、請求項2記載の方法。
  4. 【請求項4】 オペレーションを実行するステップが、
    シンボリック実行データ構造を実行すること、及びコン
    ピュータプログラムによりアドレス指定されたメモリ位
    置に注を付けることを含む、請求項2記載の方法。
  5. 【請求項5】 疑問データ構造を発生するステップが、
    コンピュータプログラムがどのようにメモリをアクセス
    するかについての疑問をさらに含む、請求項1記載の方
    法。
  6. 【請求項6】 前記疑問によりコンピュータプログラム
    に問合せを行うことによりコンピュータプログラムを分
    析し、それにより、疑問に対する解答を得、解答に後注
    釈を付けて疑問データ構造に入れるステップをさらに含
    む、請求項5記載の方法。
  7. 【請求項7】 シンボリック実行データ構造が、データ
    フロー問題グラフを含み、また、疑問によりコンピュー
    タプログラムに問合せを行うことによってデータフロー
    問題グラフを分析し、それにより疑問に対する解答を
    得、解答に後注釈を付けて疑問データ構造に入れるステ
    ップをさらに含む、請求項5記載の方法。
  8. 【請求項8】 指標表現を伴うプログラムのオペレーシ
    ョンによるメモリアクセスに関する指標セットを発生す
    るステップをさらに含み、指標表現を伴うコンピュータ
    プログラム中のオペレーションを実行するステップが指
    標セットを満たすことを含む、請求項1記載の方法。
  9. 【請求項9】 コンピュータコードをコンパイルするた
    めの装置であって、該装置は、 コンピュータコードにより使用される指標表現に対し信
    号フローデータ構造を作るための第1信号フロー分析手
    段を含み、該第1信号フロー分析手段は、 コンピュータコード中の指標経路を識別するための手段
    であって、前記指標経路が指標表現によるメモリアクセ
    スにおいて使用される指標を計算する際に伴うオペレー
    ションを含む前記手段;指標経路を実行し、それにより
    指標表現メモリアクセスに関する情報を抽出するための
    シンボリック実行手段、を含む上記装置。
  10. 【請求項10】 指標表現によるメモリアクセスに関す
    る疑問を含む疑問データベースをさらに含む、請求項9
    記載の装置。
  11. 【請求項11】 疑問データベース中の疑問に対する応
    答を含む指標セットを発生するための手段をさらに含
    む、請求項10記載の装置。
  12. 【請求項12】 コンピュータコードにより使用される
    スカラー変数に対し信号フローデータ構造を作るための
    第2信号フロー分析手段をさらに含む、請求項9記載の
    装置。
  13. 【請求項13】 信号フローデータ構造が信号フローグ
    ラフである、請求項9記載の装置。
JP2000361619A 1999-11-29 2000-11-28 シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 Pending JP2001166949A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/450,325 US6588009B1 (en) 1999-11-29 1999-11-29 Method and apparatus for compiling source code using symbolic execution
US09/450325 1999-11-29

Publications (1)

Publication Number Publication Date
JP2001166949A true JP2001166949A (ja) 2001-06-22

Family

ID=23787646

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000361619A Pending JP2001166949A (ja) 1999-11-29 2000-11-28 シンボリック実行を用いてソースコードをコンパイルするための方法及び装置

Country Status (3)

Country Link
US (1) US6588009B1 (ja)
EP (1) EP1107116A3 (ja)
JP (1) JP2001166949A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014186728A (ja) * 2013-03-15 2014-10-02 Fujitsu Ltd ソフトウェアプログラムの効率を高める方法及びプロセッサ

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020100031A1 (en) * 2000-01-14 2002-07-25 Miguel Miranda System and method for optimizing source code
US6542862B1 (en) * 2000-02-18 2003-04-01 Hewlett-Packard Development Company, L.P. Determining register dependency in multiple architecture systems
JP3641997B2 (ja) * 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
US6938046B2 (en) * 2001-03-02 2005-08-30 Dow Jones Reuters Business Interactive, Llp Polyarchical data indexing and automatically generated hierarchical data indexing paths
US6966055B2 (en) * 2001-03-02 2005-11-15 International Business Machines Corporation Optimizing post-link code
US7036116B2 (en) * 2001-03-23 2006-04-25 International Business Machines Corporation Percolating hot function store/restores to colder calling functions
US7036114B2 (en) * 2001-08-17 2006-04-25 Sun Microsystems, Inc. Method and apparatus for cycle-based computation
US7080365B2 (en) 2001-08-17 2006-07-18 Sun Microsystems, Inc. Method and apparatus for simulation system compiler
US7043596B2 (en) 2001-08-17 2006-05-09 Sun Microsystems, Inc. Method and apparatus for simulation processor
US7140019B2 (en) * 2002-06-28 2006-11-21 Motorola, Inc. Scheduler of program instructions for streaming vector processor having interconnected functional units
US6934938B2 (en) * 2002-06-28 2005-08-23 Motorola, Inc. Method of programming linear graphs for streaming vector computation
US7415601B2 (en) * 2002-06-28 2008-08-19 Motorola, Inc. Method and apparatus for elimination of prolog and epilog instructions in a vector processor using data validity tags and sink counters
US7159099B2 (en) * 2002-06-28 2007-01-02 Motorola, Inc. Streaming vector processor with reconfigurable interconnection switch
US7296010B2 (en) * 2003-03-04 2007-11-13 International Business Machines Corporation Methods, systems and program products for classifying and storing a data handling method and for associating a data handling method with a data item
US7290122B2 (en) * 2003-08-29 2007-10-30 Motorola, Inc. Dataflow graph compression for power reduction in a vector processor
US7464375B2 (en) * 2004-06-24 2008-12-09 International Business Machines Corporation Method for flattening hierarchically structured flows
US7487497B2 (en) * 2004-08-26 2009-02-03 International Business Machines Corporation Method and system for auto parallelization of zero-trip loops through induction variable substitution
US7797690B2 (en) * 2005-03-15 2010-09-14 International Business Machines Corporation System, method and program product to optimize code during run time
US8341612B2 (en) * 2007-05-16 2012-12-25 International Business Machines Corporation Method and apparatus for run-time statistics dependent program execution using source-coding
US8060870B2 (en) * 2007-09-26 2011-11-15 International Business Machines Corporation System and method for advanced polyhedral loop transformations of source code in a compiler
US8056065B2 (en) * 2007-09-26 2011-11-08 International Business Machines Corporation Stable transitions in the presence of conditionals for an advanced dual-representation polyhedral loop transformation framework
US8087010B2 (en) * 2007-09-26 2011-12-27 International Business Machines Corporation Selective code generation optimization for an advanced dual-representation polyhedral loop transformation framework
US8087011B2 (en) * 2007-09-26 2011-12-27 International Business Machines Corporation Domain stretching for an advanced dual-representation polyhedral loop transformation framework
US7945768B2 (en) 2008-06-05 2011-05-17 Motorola Mobility, Inc. Method and apparatus for nested instruction looping using implicit predicates
US7681182B1 (en) * 2008-11-06 2010-03-16 International Business Machines Corporation Including function call graphs (FCG) generated from trace analysis data within a searchable problem determination knowledge base
US8549490B2 (en) * 2009-09-29 2013-10-01 International Business Machines Corporation Static code analysis for packaged application customization
US9355175B2 (en) * 2010-10-29 2016-05-31 Google Inc. Triggering answer boxes
US8943487B2 (en) * 2011-01-20 2015-01-27 Fujitsu Limited Optimizing libraries for validating C++ programs using symbolic execution
US8645924B2 (en) * 2011-06-06 2014-02-04 Fujitsu Limited Lossless path reduction for efficient symbolic execution and automatic test generation

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5491823A (en) * 1994-01-25 1996-02-13 Silicon Graphics, Inc. Loop scheduler
US5537620A (en) * 1994-09-16 1996-07-16 International Business Machines Corporation Redundant load elimination on optimizing compilers
JP3317825B2 (ja) * 1995-09-28 2002-08-26 富士通株式会社 ループ最適化翻訳処理方法
US6101488A (en) * 1996-09-04 2000-08-08 Fujitsu Limited Intelligent information program generation and retrieval system
US6351845B1 (en) * 1999-02-04 2002-02-26 Sun Microsystems, Inc. Methods, apparatus, and articles of manufacture for analyzing memory use
US6393423B1 (en) * 1999-04-08 2002-05-21 James Francis Goedken Apparatus and methods for electronic information exchange
US6374403B1 (en) * 1999-08-20 2002-04-16 Hewlett-Packard Company Programmatic method for reducing cost of control in parallel processes

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014186728A (ja) * 2013-03-15 2014-10-02 Fujitsu Ltd ソフトウェアプログラムの効率を高める方法及びプロセッサ

Also Published As

Publication number Publication date
EP1107116A3 (en) 2003-09-03
US6588009B1 (en) 2003-07-01
EP1107116A2 (en) 2001-06-13

Similar Documents

Publication Publication Date Title
JP2001166949A (ja) シンボリック実行を用いてソースコードをコンパイルするための方法及び装置
US6662354B1 (en) Determining destinations of a dynamic branch
JP4105264B2 (ja) コンパイラ
US8024718B2 (en) System and method for optimizing source code
EP0643851B1 (en) Debugger program which includes correlation of computer program source code with optimized objet code
US5142681A (en) APL-to-Fortran translators
US5577253A (en) Analyzing inductive expressions in a multilanguage optimizing compiler
US5355494A (en) Compiler for performing incremental live variable analysis for data-parallel programs
US5146594A (en) Method of producing object program based on interprocedural dataflow analysis of a source program
US20080178149A1 (en) Inferencing types of variables in a dynamically typed language
Peralta et al. Analysis of imperative programs through analysis of constraint logic programs
US5812855A (en) System and method for constaint propagation cloning for unknown edges in IPA
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US5396627A (en) Method of producing object program based on interprocedural dataflow analysis of a source program
JP2001166946A (ja) 階層の平坦化によりソースコードをコンパイルする方法及び装置
KR950006607B1 (ko) 다중 언어 최적화 컴파일러내의 표시 효과용 인터페이스
Horváth et al. Generic search plans for matching advanced graph patterns
Hartel et al. Compilation of functional languages using flow graph analysis
JP2002527816A (ja) プログラム最適化装置および方法
Campbell et al. Refining and defining the program dependence web
Tolmach Combining closure conversion with closure analysis using algebraic types
Zima et al. Automatic Restructuring for Parallel and Vector Computers
JPH02176938A (ja) 機械語命令最適化方式
Ulle Source Code Analysis and Type Inference for R
Saarikivi et al. Translating C# to Branching Symbolic Transducers.