JPH0736708A - インライン展開方式 - Google Patents

インライン展開方式

Info

Publication number
JPH0736708A
JPH0736708A JP18235793A JP18235793A JPH0736708A JP H0736708 A JPH0736708 A JP H0736708A JP 18235793 A JP18235793 A JP 18235793A JP 18235793 A JP18235793 A JP 18235793A JP H0736708 A JPH0736708 A JP H0736708A
Authority
JP
Japan
Prior art keywords
statement
sentence
processing unit
loop
expansion
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.)
Withdrawn
Application number
JP18235793A
Other languages
English (en)
Inventor
Shigeru Terauchi
茂 寺内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Solution Innovators Ltd
Original Assignee
NEC Solution Innovators Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Solution Innovators Ltd filed Critical NEC Solution Innovators Ltd
Priority to JP18235793A priority Critical patent/JPH0736708A/ja
Publication of JPH0736708A publication Critical patent/JPH0736708A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】FORTRAN言語のDO WHILE文中で
引用している手続きを自動的にインライン展開ができる
ようにする。 【構成】手続きのインライン展開処理部7にDO WH
ILE文の初回条件式評価のためのインライン展開を行
う初回引用の展開処理部16と、繰返しごとの条件式評
価のためのインライン展開を行う繰返し引用の展開処理
部18とを備えて、DO WHILE文の条件式中での
手続き引用を自動インライン展開可能にする。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はインライン展開方式、特
にFORTRANプログラムのコンパイラにおけるイン
ライン展開方式に関する。
【0002】
【従来の技術】従来のインライン展開方式での手続きの
インライン展開は、引用している手続きが関数副プログ
ラムの場合に、手続きを引用している文の直前にインラ
イン展開し、手続きを引用している文中の手続き引用を
関数値の返却される生成変数名で置換えるという方式の
ため、DO WHILE文のようなループ条件式で手続
きを引用している場合に、従来の方式でインライン展開
すると、ループ条件式中の手続き引用が、本来、ループ
の繰返しごとに評価されるべきものが、一度しか評価さ
れず、プログラムの意味が変ってしまうため、自動的に
インライン展開をしないようになっている。
【0003】
【発明が解決しようとする課題】インライン展開は、プ
ログラム実行時の手続き呼出しによるオーバヘッドをな
くするために行なうが、従来のインライン展開方式では
DO WHILE文のようなループ条件式で手続きを引
用している場合はインライン展開をしない。このため、
プログラムの実行性能の向上を図るためにDO WHI
LE文中の手続き呼出しをインライン展開をする必要が
ある場合には、人間の手作業によるインライン展開を行
なっている。そこで、この場合は人間による手作業のた
め、自動的にインライン展開が行なえた場合と比べ作業
工数が多く掛り、また、判断や作業の誤りが発生し、不
正なインライン展開を行なう可能性が大きいという問題
点がある。
【0004】
【課題を解決するための手段】本発明のインライン展開
方式は、コンパイラの起動時に指定された手続きをイン
ライン展開する手続きのインライン展開処理部を備える
FORTRANプログラムのコンパイラのインライン展
開方式において、手続きのインライン展開処理部に、繰
返し条件部を備え繰返し条件が成立している間ループを
繰返すことを指定する文であるDO WHILE文のイ
ンライン展開処理部を備え、このDOWHILE文のイ
ンライン展開処理部に、DO WHILE文が文番号付
きか否かとDO WHILE文のループが文番号による
ループか否かとを判定するDOWHILE文の形式判定
処理部と、このDO WHILE文の形式判定処理部に
よりDO WHILE文が文番号によるループと判定さ
れたときDO WHILE文の端末文が他のループの端
末文と共用しているか否かを判定し、共用しているなら
ばそのDO WHILE文中のインライン展開を中止す
る端末文共用判定処理部と、この端末文共用判定処理部
で共用していないとしたときDO WHILE文の初回
条件式の評価を行なうためにインライン展開を行なう初
回引用の展開処理部と、この初回引用の展開処理部によ
るインライン展開後のループ制御を行なうために条件式
中の手続き引用を関数値を返す生成変数名に置換え文番
号なしの文番号によらないループのDO WHILE文
に変形する変形処理部と、DO WHILE文の繰返し
ごとの条件式の評価を行なうためのインライン展開を行
なう繰返し引用の展開処理部と、前記変形処理部により
変形したDO WHILE文に対応するループの端末文
を生成する端末文生成処理部と、前記各処理部間で情報
を受渡すための情報記憶部とを備えることにより構成さ
れる。
【0005】
【実施例】次に、本発明について図面を参照して説明す
る。
【0006】図1は本発明の一実施例を含むコンパイラ
のブロック図である。以下コンパイラ3のそれぞれの処
理部について説明する。
【0007】翻訳時オプション入力処理部6は翻訳時オ
プション2を取込み、どの手続きをインライン展開する
かということを決定する。ソースプログラム入力処理部
5はソースユニット1からソースプログラム情報を読込
む。手続きのインライン展開処理部7は被引用側/引用
側手続きの解析を行い、翻訳時オプション2で指定され
た手続きをインランイン展開する。コンパイル処理部8
はインライン展開後のソースプログラムを解析し、オブ
ジェクトプログラム4を生成する。被引用側手続き解析
処理部9は翻訳時オプション2で指定された被引用側手
続きを解析し、被引用側手続きの情報を被引用側手続き
情報記憶部10に記憶する。引用部の文種別判定処理部
11は手続きを呼出している文を検索し、その文の種類
を判定して従来方式のインライン展開処理部12でイン
ライン展開するか、DO WHILE文のインライン展
開処理部13でインライン展開するか決定する。従来方
式のインライン展開処理部12は引用している文の直前
にインライン展開する。DO WHILE文のインライ
ン展開処理部13は、最初の条件式評価用と繰返しごと
の条件式評価用との2個所にインライン展開する。DO
WHILE文の形式判定処理部14は、DO WHI
LE文が文番号付きか否かを判定し、文番号付きのDO
WHILE文ならば、図3に情報記憶部20のテーブ
ル構成を示すように、情報記憶部20の文番号フラグ2
5をONし、文番号領域26にその文番号を記憶する。
文番号なしのDO WHILE文ならば、情報記憶部2
0の文番号フラグ25をOFFにする。また、DO W
HILE文のループが文番号によるループならば、情報
記憶部20の端末文生成スイッチ28をONにし、文番
号によらないループならば情報記憶部20の端末文生成
スイッチ28をOFFにする。端末文共用判定処理部1
5は、情報記憶部20の端末文生成スイッチ28がON
ならば、DO WHILEループの端末文が他のループ
の端末文と共用しているか調べ、共用しているならば、
そのDO WHILE文中のインライン展開処理を中止
し、引用部の文種別判定処理部11に制御を移し、次の
引用部の検索を行う。初回引用の展開処理部16は、D
O WHILE文の初回条件式の評価を行うためにDO
WHILE文の直前にインライン展開し、関数値を返
す生成変数名を情報記憶部20の生成名領域27に記憶
する。変形処理部17は条件式中の手続き引用を情報記
憶部20の生成名領域27にある生成名で置換え、文番
号なしの文番号によらないループのDO WHILE文
に変形する。繰返し引用の展開処理部18は、関数値を
返す生成変数名を情報記憶部20の生成名領域27に記
憶してある生成変数名にして、DO WHILEループ
の最後に実行される文の集まりとしてインライン展開す
る。端末文生成処理部19は情報記憶部20の端末文生
成スイッチ28がONならば、変形したDO WHIL
E文に対応する端末文(END DO文)を生成する。
OFFならば端末文は生成しない。そして、次の引用部
の処理を行うために引用部の文種別判定処理部11に制
御を移す。
【0008】次に、図1のコンパイラ3を基に、翻訳時
オプション2によって関数副プログラムIFUNCをイ
ンライン展開するように指定された場合に、図2に示す
ようなFORTRANプログラムを入力し、手続きのイ
ンライン展開後翻訳する場合について説明する。図3は
前述のようなコンパイラ3の情報記憶部20のテーブル
構成図、図4は図2に示す第1の引用部23のインライ
ン展開時に設定される情報記憶部20のテーブルの内容
を示す図、図5は図2に示す引用部24のインライン展
開時に設定される情報記憶部20のテーブルの内容を示
す図、図6はこのコンパイラの手続きのインライン展開
処理部7が図2のソースプログラムを入力して被引用側
手続き22をインライン展開し、コンパイラ処理部8に
与えるソースプログラムを示す図である。図3中の文番
号フラグ25は、DO WHILE文に文番号が指定さ
れている(DO WHILEの前に文番号が指定されて
いる)ならONになり、文番号領域26にはその文番号
が格納され、文番号が指定されていなければOFFにな
る。図3中の端末文生成スイッチ28は、DO WHI
LEループが文番号によるループ(DOとWHILEと
の間に文番号が指定されている)ならONになり、端末
文文番号領域29にはその文番号が格納され、文番号に
よらないループならOFFになる。図3中の生成名領域
27には、DO WHILE文中で引用している被引用
側手続きの関数値を返却するための生成変数名が格納さ
れる。
【0009】コンパイラ3が起動されると、翻訳時オプ
ション入力処理部6は翻訳時オプション2から関数副プ
ログラムIFUNCをインライン展開する指示を受取
り、手続きのインライン展開処理部7に与える。ソース
プログラム入力処理部5はソースユニット1からソース
プログラムである引用側手続き21および被引用側手続
き22を読込み、手続きのインライン展開処理部7に与
える。手続きのインライン展開処理部7の被引用側手続
き解析処理部9は、与えられた被引用側手続き22(I
FUNC)を解析し、被引用側手続きの情報を被引用側
手続き情報記憶部10に記憶する。引用部の文種別判定
処理部11は与えられた引用側手続き21(SAMPL
E)を解析し、第1の引用部23を検出すると、DO
WHILE文と判定し、DO WHILE文のインライ
ン展開処理部13に制御を移す。DO WHILE文の
インライン展開処理部13のDO WHILE文の形式
判定処理部14は、第1の引用部23のDO WHIL
E文の形式を判定して情報記憶部20の文番号フラグ2
5をONにし、文番号領域26に10を格納して端末文
生成スイッチ28をOFFにする。端末文共用判定処理
部15は、情報記憶部20の端末文生成スイッチを参照
してOFFなので何もしない。初回引用の展開処理部1
6は情報記憶部20の文番号フラグ25を参照し、ON
なのでインライン展開する最初の文に情報記憶部20の
文番号領域26に格納されている文番号10を付加し
て、第1の引用部23の直前に被引用側手続き情報記憶
部10の被引用側手続きの情報を参照しながらインライ
ン展開し、図6に示すようにソースコード41を生成
し、情報記憶部20の生成名領域27にインライン展開
した関数副プログラムの関数値が返却される生成変数名
“I9999”を格納する。この結果、図3に示したテ
ーブルの内容は図4に示す内容になる。次に、変形処理
部17はDO WHILE文を文番号なしのDO WH
ILE文にし、条件式中の関数名を情報記憶部20の生
成名領域27にある“I9999”に置換え、図6に示
すソースコード42に変形する。繰返し引用の展開処理
部18は情報記憶部20の端末文生成スイッチ28を参
照し、OFFなので第1の引用部23のDO WHIL
E文の端末文であるEND DO文を検索し、そのEN
D DO文の直前に被引用側手続き情報記憶部10に記
憶してある被引用側手続きの情報を参照しながら、関数
副プログラムの関数値が返される生成変数名を情報記憶
部20の生成名領域27に格納してある“I9999”
としてインライン展開し、図6に示すソースコード43
を生成する。端末文生成処理部19は情報記憶部20の
端末文生成スイッチ28を参照し、OFFなので端末文
の生成を行わない(変形後のDO WHILE文に対応
する端末文は変形前と同じである)。
【0010】そして、次の引用部を検出するために引用
部の文種別判定処理部11に制御が戻り、引用部の文種
別判定処理部11は第2の引用部24を検出すると、D
OWHILE文と判定し、DO WHILE文のインラ
イン展開処理部13に制御を移す。DO WHILE文
のインライン展開処理部13のDO WHILE文の形
式判定処理部14は、第2の引用部24のDO WHI
LE文の形式を判定し、情報記憶部20の文番号フラグ
25をOFFにして端末文生成スイッチ28をONし、
端末文文番号領域29に20を格納する。端末文共用判
定処理部15は情報記憶部20の端末文生成スイッチ2
8を参照し、ONなのでDO WHILE文の端末文が
他のループの端末文と共用しているか調べ、共用してい
ないので何もしない。初回引用の展開処理部15は情報
記憶部20の文番号フラグ25を参照し、OFFなので
第2の引用部24の直前に被引用側手続き情報記憶部1
0の被引用側手続きの情報を参照しながらインライン展
開し、図6に示すソースコード44を生成し、情報記憶
部20の生成名領域27にインライン展開した関数副プ
ログラムの関数値が返される生成変数名“I9998”
を格納する。この結果、図3に示したテーブルの内容は
図5に示す内容になる。変形処理部17は文番号によら
ないループのDO WHILE文に変形し、条件式中の
関数名を情報記憶部20の生成名領域27にある名前
“I9998”に置換え、図6に示すソースコード45
に変形する。繰返し引用の展開処理部18は情報記憶部
20の端末文生成スイッチ28がONなので、図2の引
用部24のDO WHILE文の端末文として、情報記
憶部20の端末文文番号領域29に格納されている文番
号20のある文CONTINUE文を検索し、その文の
直後に被引用側手続き情報記憶部10に記憶してある被
引用側手続きの情報を参照しながら、関数副プログラム
の関数値が返される生成変数名を情報記憶部20の生成
名領域27に格納してある“I9998”としてインラ
イン展開し、図6に示すソースコード46を生成する。
端末文生成処理部19は情報記憶部20の端末文生成ス
イッチ28を参照し、ONなので繰返し引用の展開処理
部18でインライン展開した文の直後にインライン展開
によって変形されたDO WHILE文に対応する端末
文としてEND DO文を生成し、図6に示すソースコ
ード47とする。この手続きのインライン展開処理部7
の処理により、図6に示すソースプログラム40を生成
し、コンパイル処理部8にインライン展開後のソースプ
ログラム40を与え、コンパイル処理部8は与えられた
ソースプログラム40の翻訳を行い、オブジェクトプロ
グラム4を生成する。
【0011】
【発明の効果】以上説明したように本発明は、コンパイ
ラの手続きのインライン展開処理部においてDO WH
ILE文中で手続きを引用している場合であっても、自
動的にインライン展開を行えるようになる。従って、人
間の手作業によるインライン展開を行った場合と比べ作
業工数の削減が行えるという効果を有し、且つ、コンパ
イラが自動的にインライン展開を行うため、人間の手作
業による作業誤りや判断誤りの介入を抑止できるという
効果を有する。
【図面の簡単な説明】
【図1】本発明の一実施例を含むコンパイラのブロック
図である。
【図2】図1のコンパイラに入力されるソースプログラ
ムの一例を示す図である。
【図3】図1の実施例の情報記憶部のテーブル構成図で
ある。
【図4】図3の情報記憶部のテーブルの内容例を示す図
である。
【図5】図3の情報記憶部のテーブルの内容例を示す図
である。
【図6】図2に示すソースプログラムを図1の実施例に
よりインライン展開したソースプログラムを示す図であ
る。
【符号の説明】
1 ソースユニット 2 翻訳時オプション 3 コンパイラ 4 オブジェクトプログラム 5 ソースプログラム入力処理部 6 翻訳時オプション入力処理部 7 手続きのインライン展開処理部 8 コンパイル処理部 9 被引用側手続き解析処理部 10 被引用側手続き情報記憶部 11 引用部の文種別判定処理部 12 従来方式の展開処理部 13 DO WHILE文のインライン展開処理部 14 DO WHILE文の形式判定処理部 15 端末文共用判定処理部 16 初回引用の展開処理部 17 変形処理部 18 繰返し引用の展開処理部 19 端末文生成処理部 20 情報記憶部

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 コンパイラの起動時に指定された手続き
    をインライン展開する手続きのインライン展開処理部を
    備えるFORTRANプログラムのコンパイラのインラ
    イン展開方式において、手続きのインライン展開処理部
    に、繰返し条件部を備え繰返し条件が成立している間ル
    ープを繰返すことを指定する文であるDO WHILE
    文のインライン展開処理部を備え、このDO WHIL
    E文のインライン展開処理部に、DO WHILE文が
    文番号付きか否かとDO WHILE文のループが文番
    号によるループか否かとを判定するDO WHILE文
    の形式判定処理部と、このDO WHILE文の形式判
    定処理部によりDO WHILE文が文番号によるルー
    プと判定されたときDO WHILE文の端末文が他の
    ループの端末文と共用しているか否かを判定し、共用し
    ているならばそのDO WHILE文中のインライン展
    開を中止する端末文共用判定処理部と、この端末文共用
    判定処理部で共用していないとしたときDO WHIL
    E文の初回条件式の評価を行なうためにインライン展開
    を行なう初回引用の展開処理部と、この初回引用の展開
    処理部によるインライン展開後のループ制御を行なうた
    めに条件式中の手続き引用を関数値を返す生成変数名に
    置換え文番号なしの文番号によらないループのDO W
    HILE文に変形する変形処理部と、DO WHILE
    文の繰返しごとの条件式の評価を行なうためのインライ
    ン展開を行なう繰返し引用の展開処理部と、前記変形処
    理部により変形したDO WHILE文に対応するルー
    プの端末文を生成する端末文生成処理部と、前記各処理
    部間で情報を受渡すための情報記憶部とを備えることを
    特徴とするインライン展開方式。
JP18235793A 1993-07-23 1993-07-23 インライン展開方式 Withdrawn JPH0736708A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP18235793A JPH0736708A (ja) 1993-07-23 1993-07-23 インライン展開方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP18235793A JPH0736708A (ja) 1993-07-23 1993-07-23 インライン展開方式

Publications (1)

Publication Number Publication Date
JPH0736708A true JPH0736708A (ja) 1995-02-07

Family

ID=16116904

Family Applications (1)

Application Number Title Priority Date Filing Date
JP18235793A Withdrawn JPH0736708A (ja) 1993-07-23 1993-07-23 インライン展開方式

Country Status (1)

Country Link
JP (1) JPH0736708A (ja)

Similar Documents

Publication Publication Date Title
US6072951A (en) Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure)
EP0905617B1 (en) Method for generating a java bytecode data flow graph
JPH07105012A (ja) 言語処理プログラムのコンパイル処理方式
US10013244B2 (en) Apparatus and method to compile a variadic template function
US5150474A (en) Method for transferring arguments between object programs by switching address modes according to mode identifying flag
JPH0736708A (ja) インライン展開方式
JPH09128246A (ja) コンパイラ装置
JP2585793B2 (ja) コンパイラシステム
JPS5922140A (ja) 対話型コンパイル方式
JP3226172B2 (ja) インライン展開システム
JPH10326193A (ja) インライン展開関数の最適化のためのコンパイル方法
JP3305767B2 (ja) ソート処理方法及びコンパイル方法
JP2977642B2 (ja) Fortranコンパイル処理装置
JP2002082811A (ja) コンパイル方法および記録媒体
JPH0573335A (ja) プログラムの自動インライン展開方式
JPH04343140A (ja) コンパイラの最適化処理方法
JPH0962512A (ja) 低級言語から高級言語への記述言語変換機能を有するプログラム変換装置及び方法
JP2001290656A (ja) 差分コンパイル方式
JPH10312291A (ja) コンパイラ装置
JPH10207738A (ja) 言語処理システム
JP2002140198A (ja) インライン展開方法
JPH05120025A (ja) ソースプログラムのインライン展開方法
JPH06187165A (ja) プログラムのテールコール最適化システム
JPH0635714A (ja) プログラムの最適化方式
JPH06242942A (ja) ソースコードレベルデバッグ装置

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20001003