JPH04287230A - インライン展開の引数結合方法 - Google Patents

インライン展開の引数結合方法

Info

Publication number
JPH04287230A
JPH04287230A JP5220391A JP5220391A JPH04287230A JP H04287230 A JPH04287230 A JP H04287230A JP 5220391 A JP5220391 A JP 5220391A JP 5220391 A JP5220391 A JP 5220391A JP H04287230 A JPH04287230 A JP H04287230A
Authority
JP
Japan
Prior art keywords
argument
array
actual
address
source program
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
JP5220391A
Other languages
English (en)
Inventor
Hiroto Minoura
箕浦 寛人
Ichiro Honma
一朗 本間
Satoaki Kobayashi
小林 里昭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Software Engineering Co Ltd
Hitachi Ltd
Original Assignee
Hitachi Software Engineering Co Ltd
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Software Engineering Co Ltd, Hitachi Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP5220391A priority Critical patent/JPH04287230A/ja
Publication of JPH04287230A publication Critical patent/JPH04287230A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ソース・プログラムを
翻訳し、目的プログラムを生成するコンパイラにおいて
、ソース・プログラムのインライン展開における実引数
と仮引数の引数結合方法に関し、特に実引数の種類が配
列または配列要素名であって、仮引数の種類が整合配列
である場合、もしくは、実引数の種類が配列または配列
要素名であって、仮引数の種類が配列であり、かつ各々
の配列の次元数が異なる場合でもインライン展開された
部分がインライン展開する前より実行性能の良い目的プ
ログラムを生成するインライン展開の引数結合方法に関
する。
【0002】
【従来の技術】従来のインライン展開方式の技術として
は、プリプロセッサによるインライン展開が知られてい
る。この方式については、「プログラムプロダクトVO
S2/VOS3  FORTRAN77  ソース解析
機能  FORT77/SAF」8080−3−272
  頁19及び頁20に記述されている。
【0003】上記従来のインライン展開方式にはインラ
イン展開を施す条件があり、このなかには引数に関する
条件が含まれている。この条件は仮引数が整合配列でな
いこと及び配列を引数として渡す場合は、対応する実引
数と仮引数が同じ次元数の配列として宣言されているこ
とである。これらは整合配列または実引数の次元数と異
なる仮引数の配列を引用した式をインライン展開によっ
て、仮引数に対応する実引数で表現した式にすると、配
列の添字式がインライン展開前の式と比べて複雑になる
ことがあり、目的プログラムの実行時に計算量が大きく
なり、その目的プログラムの実行性能をインライン展開
によって劣化させるからである。
【0004】また、実引数と仮引数の結合方法は実引数
が変数,定数,式または配列要素名の場合、手続き呼出
しを含む手続きに新しい変数を生成し、インライン展開
した手続きの直前に実引数をこの変数に代入する文を生
成し、展開した手続きの仮引数はこの新しい変数で置き
換える方法であった。
【0005】
【発明が解決しようとする課題】インライン展開は上記
従来技術により実引数と仮引数が配列であると、その結
合が置き換え処理で可能な場合だけにインライン展開を
施している。これはインライン展開を可能と考えられる
場合においても、インライン展開によって実行文が増え
ることになると、目的プログラムの実行性能向上が期待
できなくなるからである。
【0006】このため、置き換えによる引数の結合がで
きないという理由からインライン展開しない手続きがあ
り、目的プログラムの実行性能を向上できない問題があ
った。また、インライン展開による変数を結合する場合
においても、新しい変数を生成し、代入文を生成するた
め、手続き呼出しを含む手続きの変数領域及び実行文の
数が増えてしまう問題があった。
【0007】本発明の目的は、実引数の種類が配列また
は配列要素名であり、仮引数の種類が整合配列である場
合、もしくは、実引数の種類が配列または配列要素名で
あって、仮引数の種類が配列であり、かつ前記各々の配
列の次元数が異なる場合でもインライン展開が指定され
ていればインライン展開をし、かつインライン展開され
た部分がインライン展開する前より実行性能の良い目的
プログラムを生成するコンパイラにおけるインライン展
開の引数結合方法を提供することである。
【0008】
【課題を解決するための手段】本発明は上記目的を達成
するために、第1のソース・プログラム中のインライン
展開する呼出し手続きの引数である実引数の種類が配列
または配列要素名であって、呼出されてインライン展開
される第2のソース・プログラム中で定義している引数
である仮引数の種類が整合配列である場合、もしくは、
実引数の種類が配列または配列要素名であって、仮引数
の種類が配列であり、かつ各々の配列の次元数が異なる
場合に、第1のソース・プログラム中の呼出し手続きの
実引数のアドレスを求め、求めた実引数のアドレスを基
底とする配列を生成し、生成した実引数のアドレスを基
底とする配列をインライン展開される第2のソース・プ
ログラム中の仮引数と置き換えることによって引数結合
する。
【0009】
【作用】第1のソース・プログラム中のインライン展開
する呼出し手続きの引数である実引数の種類が配列また
は配列要素名であって、呼出されてインライン展開され
る第2のソース・プログラム中で定義している引数であ
る仮引数の種類が整合配列である場合、もしくは、実引
数の種類が配列または配列要素名であって、仮引数の種
類が配列であり、かつ各々の配列の次元数が異なる場合
に、第1のソース・プログラム中の呼出し手続きの実引
数のアドレスが得られ、得られた実引数のアドレスを基
底とする配列が生成され、生成された実引数のアドレス
を基底とする配列によってインライン展開される第2の
ソース・プログラム中の仮引数と置き換えられることに
よって引数結合される。
【0010】
【実施例】以下、本発明の一実施例について図面を用い
て説明する。
【0011】図1は本発明を適用したインライン展開の
構成例を示す。1は翻訳機構であり、構文解析部10、
インライン展開処理部20、引数結合判定部21、引数
結合処理部22、コード生成処理部30を含む。2はイ
ンライン展開手続きのソース・プログラム及びインライ
ン展開手続きのソース・プログラム記憶部、3はソース
・プログラムを構文解析した結果の中間言語を持つ主記
憶装置、4は目的プログラム記憶部である。
【0012】図1において、利用者がソース・プログラ
ム記憶部2にインライン展開手続き呼出しを含むソース
・プログラム(これ以下ソース・プログラムMAINと
いう)及びインライン展開手続きのソース・プログラム
(これ以下ソース・プログラムSUBという)を用意し
、翻訳機構1の主入力にソース・プログラムMAINを
指定し翻訳機構1を起動する。ソース・プログラムMA
INにはソース・プログラムSUBをインライン展開す
ることを翻訳機構1に連絡する制御文を挿入しておく。 翻訳機構1の構文解析部10はソース・プログラムMA
INを翻訳する前に、ソース・プログラムSUBを先に
翻訳し、中間言語プログラム(これ以下中間言語SUB
という)を主記憶装置3に出力する。ソース・プログラ
ムSUBの構文解析部10による処理が終了すると、次
に構文解析部10はソース・プログラムMAINの翻訳
に戻り、その結果の中間言語プログラム(これ以下中間
言語MAINという)を主記憶装置3に出力する。次に
インライン展開処理部20が起動される。インライン展
開処理部20は中間言語MAIN内の手続き呼出しを検
索し、ソース・プログラムSUBの手続き呼出し場所を
検出すると、その手続き呼出し場所に中間言語SUBを
インライン展開できるかどうかの判定を開始する。この
判定は引数結合判定部21で行われ、インライン展開可
能と判定した場合、引数結合処理部22の処理及び中間
言語SUBを中間言語MAINに展開する処理を実施す
る。インライン展開処理部20が終了すると、次にコー
ド生成処理部30を起動する。コード生成処理部30は
中間言語SUBが展開された中間言語MAINを入力し
、コード生成した目的プログラムを目的プログラム記憶
部4に出力する。以上が図1に示した本発明を実施した
翻訳機構1の概略である。
【0013】以下、引数結合判定部21、引数結合処理
部22について詳細に説明する。
【0014】図2は実引数と仮引数の結合判定を行うた
めに使用する引数結合タイプテーブルの内容例を示し、
図3は引数結合判定部21の処理例をフローチャートに
よって示し、図4は引数結合情報テーブルの内容例を示
す。
【0015】図2に示すように、引数結合タイプテーブ
ルは実引数の種類と仮引数の種類から結合不可または結
合可能を示す結合方法を取り出すことができる。上記結
合方法で置換結合は、インライン展開すべき手続き内で
使用している仮引数をその仮引数に対応する実引数に置
き換えることを示し、代入結合はインライン展開手続き
呼出しがある手続きに変数を生成し、インライン展開し
た手続きの直前に生成した変数に実引数の値を代入する
文を生成し、その生成した変数を仮引数と置き換え、こ
のインライン展開した手続きの直後に生成した変数の内
容を実引数に代入する文を生成することを示し、アドレ
ス結合は、実引数のアドレスを求める文を生成し、求め
たアドレスを基底とする配列を生成し、この生成した配
列を仮引数と置き換えることを示す。
【0016】図4は引数結合判定部21の出力する引数
結合情報テーブルの内容例を示すテーブルであり、引数
結合処理部22の入力となる。
【0017】引数結合判定部21は図3に示す処理を行
う。引数結合判定部21は実引数と仮引数が結合できる
かどうかの結合判定を行う前に、実引数と仮引数の対応
をとる必要があるため、実引数があるかどうかを判定し
(ステップ40)、実引数があればその実引数の種類を
取り出し(ステップ41)、対応する仮引数があるかど
うかを判定し(ステップ42)、この判定で仮引数があ
ればステップ43に進み、仮引数がなければ、実引数と
仮引数の対応がないものとし、引数結合判定部21の結
合判定を不可として(ステップ48)、引数結合判定部
21の処理を終了する。ステップ40で、実引数がない
場合は、仮引数があるかどうかを判定し(ステップ47
)、仮引数があればステップ48に進み、仮引数がなけ
れば、実引数と仮引数の対応が全て取れたものとして、
引数結合判定部21の結合判定を可能として(ステップ
49)、引数結合判定部21の処理を終了する。ステッ
プ43に進んだ場合は、仮引数の種類を取り出し(ステ
ップ43)、取り出した実引数の種類及び仮引数の種類
をキーとして、引数結合タイプテーブルを参照し、引数
結合方法を取り出す(ステップ44)。そして、取り出
した引数結合方法が結合不可ならば、ステップ48に進
み、引数結合判定部21を終了する。結合可能ならば図
4に示す引数結合情報テーブルを作成する(ステップ4
6)。なお、ステップ46では取り出した引数結合方法
に2種類の方法が示されている場合は、仮引数の使われ
方をチェックし、どちらか1つの結合方法を選択する。 例えば、実引数の種類が変数であり、仮引数の種類が値
渡し変数である場合、仮引数が手続き内でその値が変更
されなければ置換結合を選択し、その値が変更されれば
代入結合を選択する。また、実引数及び仮引数の種類が
共に配列の場合、各配列の次元数が同じであれば置換結
合を選択し、次元数が異なればアドレス結合を選択する
【0018】ステップ40からステップ46までは対応
する実引数と仮引数について全て処理し、全ての対応し
た実引数と仮引数が結合可能ならば、引数結合判定部2
1の判定を可能として(ステップ49)、処理を終了す
る。また、実引数及び仮引数が全くない場合は、引数結
合判定部21の結合判定を可能として(ステップ49)
、引数結合判定部21を終了するが、引数結合情報テー
ブルは作成しないため、引数結合処理部22は引数の結
合処理を施さずに終了する。
【0019】図5に引数結合処理部22の処理例をフロ
ーチャートによって示し、図6に引数結合処理部22の
実引数と仮引数とが共に配列である場合のアドレス結合
による結合方法のソース・プログラムイメージの内容例
を示し、図7に実引数の種類が配列であり、仮引数の種
類が整合配列であって、引数結合判定部21で出力した
引数結合情報テーブルの結合方法はアドレス結合を示し
ているが、その整合配列の寸法が判明し、かつ実引数の
配列と同じ次元数である場合に、アドレス結合を置換結
合に変更した引数結合のソース・プログラムイメージの
内容例を示す。
【0020】引数結合処理部22は図5に示す処理を行
う。引数結合処理部22は引数結合判定部21が出力し
た引数結合情報テーブルを入力し、引数結合情報テーブ
ルに従って処理する。初めに置換結合による実引数と仮
引数の結合があるかどうかを判定し(ステップ500)
、なければアドレス結合(ステップ503)に進み、あ
れば置換結合を処理し(ステップ501)、そして次に
処理する置換結合の引数結合情報テーブル・アドレスを
求める(ステップ502)。ステップ500からステッ
プ502により、引数結合情報テーブルに登録している
置換結合による引数結合を全て終えるとアドレス結合(
ステップ503)に進む。次はアドレス結合による引数
結合である。アドレス結合による実引数と仮引数の結合
があるかどうかを判定し(ステップ503)、なければ
代入結合(ステップ509)に進み、あればアドレス結
合による引数結合を開始する。アドレス結合する場合は
実引数及び仮引数の配列の寸法の情報と各配列の次元数
の情報を収集する(ステップ504)。実引数は配列で
あり、仮引数は整合配列である場合に、先に行った置換
結合(ステップ501)により整合配列の寸法が定数に
置き換えられると、整合配列は整合配列としてではなく
、配列として処理することが可能になり、各配列の次元
数が同じであればアドレス結合を置換結合に変更するこ
とができるため、次元数が同じであるかどうかの判定を
行う(ステップ505)。この判定で置換結合をできる
(次元数が同じ)場合は、置換結合を施し(ステップ5
07)、できない(次元数が異なる)場合はアドレス結
合を施す(ステップ506)。そして次に処理するアド
レス結合の引数結合情報テーブル・アドレスを求める(
ステップ508)。ステップ503からステップ508
により、引数結合情報テーブルに登録しているアドレス
結合による引数結合を全て終えると代入結合(ステップ
509)に進む。次は代入結合による引数結合である。 代入結合による実引数と仮引数の結合があるかどうかを
判定し(ステップ509)、なければ引数結合処理部2
2を終了し、あれば代入結合による引数結合を施し(ス
テップ510)、そして次に処理する代入結合の引数結
合情報テーブル・アドレスを求める(ステップ511)
。ステップ509からステップ511により、引数結合
情報テーブルに登録している代入結合による引数結合を
全て終えると引数結合処理部22の処理を終了する。
【0021】図6、図7に本実施例を用いた引数の結合
例を示す。インライン展開処理部20は構文解析部10
が出力した中間言語でインライン展開を行うが、本説明
上ではソース・プログラムイメージで引数の結合方法を
示す。
【0022】図6は実引数が2次元の配列であり、仮引
数は1次元の配列である場合のアドレス結合を施す引数
結合例である。この例では引数結合判定部21において
、実引数は2次元の配列であり、これに対応する仮引数
は1次元の配列であることから、図2に示す引数結合タ
イプテーブルにより結合方法として、置換結合及びアド
レス結合の2種類の結合方法を得る。このため、引数結
合判定部21は2種類の結合方法のどちらか1つの結合
方法を選択するために、実引数及び仮引数の配列の次元
数をチェックし、次元数が異なることからアドレス結合
を選択し、引数結合情報テーブルにアドレス結合である
ことを出力する。次に引数結合処理部22においては、
引数結合判定部21が出力した引数結合情報テーブルを
入力し、アドレス結合を施す。このアドレス結合は実引
数の配列のアドレスを求め、求めた実引数のアドレスを
基底とする配列を生成し、生成した実引数のアドレスを
基底とする配列を仮引数と置き換えることによって引数
結合する例である。
【0023】図7は実引数と仮引数との数がそれぞれ2
個であり、1番目の実引数は1次元の配列、2番目の実
引数は定数100であり、また1番目の仮引数は1次元
の整合配列、2番目の仮引数は値渡し変数である場合の
引数結合例である。この例(図7)では引数結合判定部
21において、1番目の実引数は1次元の配列であり、
これに対応する1番目の仮引数は1次元の整合配列であ
ることから、図2に示す引数結合タイプテーブルにより
結合方法として、アドレス結合を得る。そして、各1番
目の引数の結合方法として引数結合情報テーブルにアド
レス結合であることを出力する。また、2番目の実引数
は定数100であり、これに対応する2番目の仮引数は
値渡し変数であることから、引数結合タイプテーブルに
より結合方法として、置換結合を得る。そして、各2番
目の引数の結合方法として引数結合情報テーブルに置換
結合であることを出力する。次に、引数結合処理部22
においては、引数結合判定部21が出力した引数結合情
報テーブルを入力し、初めに、置換結合による引数の結
合により、2番目の仮引数である値渡し変数は定数10
0に置き換えられる。次に各1番目の引数についてアド
レス結合による引数結合を施すため、1番目の実引数の
配列と1番目の仮引数の整合配列をアドレス結合しよう
とするが、先に各2番目の引数について行った置換結合
により、1番目の仮引数である整合配列の寸法であった
値渡し変数が定数100に置き換えられているため、整
合配列は整合配列としてではなく、配列として処理する
ことが可能になる。このため、1番目の実引数の配列と
1番目の仮引数の整合配列(配列)の各次元数が同じで
あるかどうかの判定を行い、次元数は同じであるためア
ドレス結合から置換結合に変更し、実引数の配列と仮引
数の整合配列は置換結合により引数結合する例である。
【0024】
【発明の効果】以上説明したように、本発明の引数結合
方法によれば、実引数の種類が配列または配列要素名で
あって、仮引数の種類が整合配列である場合、もしくは
、実引数の種類が配列または配列要素名であって、仮引
数の種類が配列であり、かつ各々の配列の次元数が異な
る場合でも、目的プログラムの実行性能を向上させるイ
ンライン展開が可能となる。
【0025】また、インライン展開できる手続きが増え
ることにより、大域的な最適化処理を施すことが可能に
なり、目的プログラムの実行性能をさらに向上されるこ
とができる。
【図面の簡単な説明】
【図1】本発明の方式によるインライン展開の処理例を
示す図である。
【図2】引数結合タイプテーブルの内容例を示す図であ
る。
【図3】引数結合判定部21の処理例を示す図である。
【図4】引数結合情報テーブルの内容例を示す図である
【図5】引数結合処理部22の処理例を示す図である。
【図6】実引数と仮引数とが共に配列である場合のアド
レス結合による結合方法のソース・プログラムイメージ
で内容例を示す図である。
【図7】アドレス結合を置換結合に変更した引数結合の
ソース・プログラムイメージで内容例を示す図である。
【符号の説明】
1…翻訳機構、 2…ソース・プログラム記憶部、 3…主記憶装置、 4…目的プログラム記憶部、 10…構文解析部、 20…インライン展開処理部、 21…引数結合判定部、 22…引数結合処理部、 30…コード生成処理部。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】第1のソース・プログラムを構文解析し、
    構文解析の結果を中間言語として保持し、保持した中間
    言語から目的プログラムを生成するコンパイラにおいて
    、インライン展開する呼出し手続きの引数である実引数
    の種類が配列または配列要素名であって、呼出されてイ
    ンライン展開される第2のソース・プログラム中で定義
    している引数である仮引数の種類が整合配列である場合
    、第1のソース・プログラム中の呼出し手続きの実引数
    のアドレスを求め、求めた実引数のアドレスを基底とす
    る配列を生成し、生成した実引数のアドレスを基底とす
    る配列をインライン展開される第2のソース・プログラ
    ム中の仮引数と置き換えることによって引数結合するこ
    とを特徴とするインライン展開の引数結合方法。
  2. 【請求項2】第1のソース・プログラムを構文解析し、
    構文解析の結果を中間言語として保持し、保持した中間
    言語から目的プログラムを生成するコンパイラにおいて
    、インライン展開する呼出し手続きの引数である実引数
    の種類が配列または配列要素名であって、呼出されてイ
    ンライン展開される第2のソース・プログラム中で定義
    している引数である仮引数の種類が配列であり、かつ各
    々の配列の次元数が異なる場合に、第1のソース・プロ
    グラム中の呼出し手続きの実引数のアドレスを求め、求
    めた実引数のアドレスを基底とする配列を生成し、生成
    した実引数のアドレスを基底とする配列をインライン展
    開される第2のソース・プログラム中の仮引数と置き換
    えることによって引数結合することを特徴とするインラ
    イン展開の引数結合方法。
JP5220391A 1991-03-18 1991-03-18 インライン展開の引数結合方法 Pending JPH04287230A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5220391A JPH04287230A (ja) 1991-03-18 1991-03-18 インライン展開の引数結合方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5220391A JPH04287230A (ja) 1991-03-18 1991-03-18 インライン展開の引数結合方法

Publications (1)

Publication Number Publication Date
JPH04287230A true JPH04287230A (ja) 1992-10-12

Family

ID=12908222

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5220391A Pending JPH04287230A (ja) 1991-03-18 1991-03-18 インライン展開の引数結合方法

Country Status (1)

Country Link
JP (1) JPH04287230A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07152576A (ja) * 1993-11-26 1995-06-16 Ibm Japan Ltd アレイ関数をもつプログラミング言語におけるインライン展開方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07152576A (ja) * 1993-11-26 1995-06-16 Ibm Japan Ltd アレイ関数をもつプログラミング言語におけるインライン展開方法

Similar Documents

Publication Publication Date Title
US6954747B1 (en) Methods for comparing versions of a program
JP2811990B2 (ja) プログラム処理装置及びプログラム処理方法
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US20090089762A1 (en) Function call translation
US20090049434A1 (en) Program translating apparatus and compiler program
US10013244B2 (en) Apparatus and method to compile a variadic template function
JPH04287230A (ja) インライン展開の引数結合方法
JP2010506252A (ja) プログラムコード変換に関して動的にリンクされた関数呼び出しを行うための方法及び装置
US6898787B2 (en) Method and apparatus for ordered predicate phi in static single assignment form
JPH10207738A (ja) 言語処理システム
JPH06274351A (ja) コンパイラの最適化方式
JPH0689187A (ja) インライン展開最適化方法
JP2008071065A (ja) インライン展開を行うコンパイル装置、方法、プログラム、記憶媒体
JPH0573335A (ja) プログラムの自動インライン展開方式
JP2002082811A (ja) コンパイル方法および記録媒体
JPH04243424A (ja) 動的リンク方式
JPS6316334A (ja) 利用者が任意に定義した機械語のインライン展開方式
JPH05298148A (ja) ファイル作成装置
JPH10326193A (ja) インライン展開関数の最適化のためのコンパイル方法
JPH0635714A (ja) プログラムの最適化方式
JPH05204699A (ja) デバッグ時識別子探索方式
JPH0736708A (ja) インライン展開方式
JPH03116241A (ja) コンパイラ
JPS63276128A (ja) ファイル入力による手続き名の判定処理方式
JP2001325110A (ja) コンパイラ装置及びそのインライン展開方式