JP4884297B2 - コンパイラ装置、コンパイル方法およびコンパイラプログラム - Google Patents
コンパイラ装置、コンパイル方法およびコンパイラプログラム Download PDFInfo
- Publication number
- JP4884297B2 JP4884297B2 JP2007131506A JP2007131506A JP4884297B2 JP 4884297 B2 JP4884297 B2 JP 4884297B2 JP 2007131506 A JP2007131506 A JP 2007131506A JP 2007131506 A JP2007131506 A JP 2007131506A JP 4884297 B2 JP4884297 B2 JP 4884297B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- execution path
- variable
- execution
- branch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 67
- 238000004458 analytical method Methods 0.000 claims description 77
- 238000012545 processing Methods 0.000 claims description 72
- 238000006243 chemical reaction Methods 0.000 claims description 56
- 238000005457 optimization Methods 0.000 claims description 34
- 230000004083 survival effect Effects 0.000 claims description 30
- 238000006467 substitution reaction Methods 0.000 claims description 20
- 239000000543 intermediate Substances 0.000 description 594
- 230000004048 modification Effects 0.000 description 56
- 238000012986 modification Methods 0.000 description 56
- 230000008569 process Effects 0.000 description 39
- 238000004364 calculation method Methods 0.000 description 33
- 238000005206 flow analysis Methods 0.000 description 14
- 238000004519 manufacturing process Methods 0.000 description 10
- 238000012217 deletion Methods 0.000 description 9
- 230000037430 deletion Effects 0.000 description 9
- 238000013468 resource allocation Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 230000007704 transition Effects 0.000 description 6
- 230000001133 acceleration Effects 0.000 description 5
- 239000000284 extract Substances 0.000 description 5
- 230000015654 memory Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 238000004904 shortening Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 239000000047 product Substances 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
Description
実行経路指定器と、第1の実行経路コード生成器と、保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第1の依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成するものであり、
前記保証コード生成器は、前記第1の実行経路コード生成器によって置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
前記第1の分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成するものであり、
前記第1の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加するものであり、
前記並列化器は、前記第1の依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである。
前記ループ単位処理器は、前記実行経路指定器と前記第1の実行経路コード生成器と前記保証コード生成器と前記第1の分岐コード生成器と前記第1の依存解析器と前記並列化器とを、前記ループの最内ループより外側のループに向かって起動するものである、という態様がある。
前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、という態様がある。
前記第2の実行経路変換判定器は、
前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記並列化器を実行した後の前記指定される実行経路における前記目的コードの実行時間と前記実行確率とに基づいて、前記指定される実行経路の平均実行時間を算定し、
前記部分コードの平均実行時間と前記指定される実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、という態様がある。
前記戻り場所設定命令コード生成器は、前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加するものであり、
前記第2の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加するものであり、
かつ、前記第2の依存解析器は、前記第1の依存解析器が実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
これは、例外時の戻り場所を設定するようにし、例外発生しないようにするための、依存を設定しない構成である。これについては、後述する実施の形態での変形例1を参照することができる。
前記割り込み発生時処理ルーチン付加器は、例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加するものである、という態様がある。これは、例外発生時の処理を割り込みルーチン(ソフト的に)で実施することで、プログラムの実行を継続するものである。これについては、後述する実施の形態での変形例1を参照することができる。このように構成すれば、依存に起因して生じる可能性のある指定された実行経路での高速実行の障害を回避し、指定された実行経路上にある例外を発生する可能性のある命令も制限なく指定された実行経路上を移動させることができるようになる。これにより、命令の並列実行化がさらに促進されて実行速度が向上する。
前記第3の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記並列化器を実行した後の実行経路上で例外が発生する確率とに基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、という態様がある。
前記第4の実行経路変換判定器は、
前記指定される実行経路の実行確率と、前記指定される実行経路上で例外が発生する確率と、前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記指定される実行経路の実行確率と、前記例外が発生する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間と、前記割り込み発生時処理ルーチン付加器が付加する前記処理ルーチンにおける前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間とを算定し、
前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、という態様がある。
前記第2の実行経路コード生成器は、前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該変数を当該変数が保持する値に置き換え、当該変数が前記置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を前記指定される実行経路中の先頭に挿入してなる第2の実行経路コードを生成するものであり、
当該コンパイラ装置は、前記第2の実行経路コード生成器が起動した後に、定数値に関する冗長性の削除最適化を行う、という態様がある。
前記第5の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率とに基づいて、前記第2の実行経路コード生成器を実行するか否かを判定するものである、という態様がある。
前記第6の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
前記並列化器を実行した後の実行経路の平均実行時間と前記部分コードの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、という態様がある。
前記第3の実行経路コード生成器は、
前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該指定される実行経路中の命令を複製したうえで、当該複製した実行経路において前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記指定される実行経路上で参照される変数が前記置き換えた値と異なる値を保持する場合には、当該指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該指定される実行経路中の先頭に挿入してなる第3の実行経路コードを生成するものであり、
前記第2の分岐コード生成器は、前記指定される実行経路中の条件分岐命令に前記複製した実行経路上の条件分岐命令の条件が成立しない場合には、前記複製した実行経路上の条件分岐命令に、前記指定される実行経路コードの始点に分岐する第2の分岐コードを生成するものである、という態様がある。
前記第7の実行経路変換判定器は、
前記指定される実行経路上で参照される変数が特定の値を保持する確率に基づいて、または前記指定される実行経路の実行確率と前記指定される実行経路上で参照される変数が特定の値を保持する確率とに基づいて変形後のプログラムの平均実行時間を算出したうえで、
算出する前記変形後のプログラムの平均実行時間に基づいて、前記第3の実行経路コード生成器と前記第2の分岐コード生成器とを実行するか否かを判定するものである、という態様がある。
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
実行経路指定器と、実行経路コード生成器と、保証コード生成器と、部分コード生成器と、分岐コード生成器と、依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列に含まれる複数の実行経路から一つを指定するものであり、
前記実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる実行経路コードを生成するものであり、
前記保証コード生成器は、前記実行経路コード生成器によって置き換えられた前記その他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
前記分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令の分岐先が前記部分コード中の当該分岐条件が成立しない場合の分岐先になるように、分岐コードを生成するものであり、
前記依存解析器は、前記指定される実行経路中の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記指定される実行経路中の命令であって制御が合流する基本ブロック中に存在する命令から、前記実行経路の終点方向に向かって最初に見つかる前記条件分岐命令を越えて処理移動ができないように、当該基本ブロック中に存在する命令と前記条件分岐命令との間に依存を付加し、かつ、前記指定される実行経路中の命令であって前記基本ブロック中に存在しない命令から、前記条件分岐命令を越えて処理移動できないように、当該命令と前記条件分岐命令との間に依存を付加するものであり、
前記並列化器は、前記依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである。
前記合流定義変数置換器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列において、制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とをその他の変数に置き換えるものであり、
前記合流定義変数保証コード生成器は、前記合流定義変数置換器によって置き換えられたその他の変数であって前記一部命令列の出口で生存が必要とされるその他の変数を元の変数に復元する保証コードを、一部命令列の出口に生成するものである、という態様がある。
前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、という態様がある。
前記第2の実行経路変換判定器は、
前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記指定される実行経路の実行確率と前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
前記部分コードの平均実行時間と前記並列化器を実行した後の実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、
ものである、という態様がある。
実行経路指定器と、第1の実行経路コード生成器と、第1の保証コード生成器と、第2の実行経路コード生成器と、合流定義変数置換器と、合流定義変数保証コード生成器と、第3の実行経路コード生成器と、第2の保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第2の分岐コード生成器と、第3の分岐コード生成器と、依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成するものであり、
前記第1の保証コード生成器は、前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成するものであり、
第2の実行経路コード生成器は、前記第1の実行経路コード生成器と前記第1の保証コード生成器とによって生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成するものであり、
前記合流定義変数置換器は、前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換えるものであり、
前記合流定義変数保証コード生成器は、前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成するものであり、
前記第3の実行経路コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成するものであり、
前記第2の保証コード生成器は、前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成するものであり、
前記部分コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記一部命令列に対応する部分コードを生成するものであり、
前記第1の分岐コード生成器は、前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成するものであり、
前記第2の分岐コード生成器は、前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成するものであり、
前記第3の分岐コード生成器は、前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成するものであり、
前記依存解析器は、前記第1の実行経路コード生成器と、前記第1の保証コード生成器と、前記第2の実行経路コード生成器と、前記第3の実行経路コード生成器と、前記第2の保証コード生成器とで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出するものであり、
前記並列化器は、前記依存解析器が算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行うものである。
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイル方法であって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
を含む。
前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
をさらに含み、
前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、という態様がある。これは、上記(5)のコンパイラ装置に対応するものである。
さらに含む、という態様がある。これは、上記(6)のコンパイラ装置に対応するものである。
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ方法であって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する第2の保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
を含む。これは、上記(18)のコンパイラ装置に対応したものである。
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
をコンピュータに実行させるためのコンパイラプログラムである。
前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加する戻り場所設定命令コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
をさらに含み、
前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、という態様がある。これは、上記(20)のコンパイル方法に対応したものである。
例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加する割り込み発生時処理ルーチン付加ステップを、
さらに含む、という態様がある。これは、上記(21)のコンパイル方法に対応したものである。
分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する第2の保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記定される実行経路中の命令の並び替えを行う並列化ステップと、
をコンピュータに実行させるためのコンパイラプログラム。これは、上記(21)のコンパイル方法に対応したものである。
本発明の実施の形態におけるコンパイラ装置は、ソースプログラムを読み込み、プログラムを字句列に分解する字句解析を行い、字句の列に基づいてプログラミング言語の構文木を構築する構文解析を行い、構文解析によって構築された構文木に基づいて装置内部の中間コードで記述された中間プログラムを生成し、中間プログラムについて命令スケジューリング等の最適化を行い、変数についてレジスタ等の資源割付を行った後の中間プログラムを実行形式プログラムに変換する。
図1は、本発明の実施の形態におけるコンパイラ装置Aの全体構成を示す機能ブロック図である。コンパイラ装置Aは、構文解析部1,最適化部2,資源割付部3,および実行コード生成部4を備える。コンパイラ装置Aは、具体的には、マイクロプロセッサ,ROM(Read Only Memory),RAM(Random Access Memory),ハードディスク装置等を用いて実現されるコンピュータシステムである。ROMまたはハードディスク装置は、コンピュータプログラムを記憶している。図1に示したコンパイラ装置Aの各部の機能は、マイクロプロセッサがコンピュータプログラムを実行することにより実現される。また、情報の記憶および各部間での受け渡しは、RAMおよびハードディスク装置を用いて実現される。
本実施の形態のコンパイラ装置Aで用いるデータについて説明する。図9Aは、変数情報算出部2aが、図5Bに示す制御フローグラフの基本ブロック毎に、変数の生存情報であるIN12,OUT14と、定義情報であるDEF13とを算出した結果を示す。図9Bは、変数情報算出部2aが図9Aの算出結果に基づいて、パス入力変数X1,パス出力変数X2,パス置換対象変数X3,およびパス保証変数X4を算出した結果を示す。図9Cは、実行経路中間コード生成部2bが図5Bに示す制御フローグラフの各基本ブロックにおいて、パス置換対象変数X3と置き換えた変数のペアの生成履歴を示す。図10に示す制御フローグラフは、実行経路中間コード生成部2bが、図5BのホットパスHPの中間コードを複写し複写した中間コードについて変数置換処理を行うことで新たに生成する実行経路を示す。
次に、本発明の特徴部分である最適化部2の内部の動作を中心に、図2に示す動作フローを説明する。まず、構文解析部1は、ソースプログラムF1が入力されると構文解析を行い、中間プログラムを生成し、コンパイラ装置Aの内部に格納する(ステップn11)。
S32:If(t1>0)goto S4
S92:If(f>0)goto S10
に相当する。
S202:If(t1<=0)goto S1
S203:If(f<=0)goto S1
に相当する。
次に、変数情報算出処理について図3を参照して説明する。これは、図2のステップn13,n14に相当する。ステップn31において、最適化部2は部分中間コードの制御フロー解析およびデータフロー解析を行う。次いでステップn32において、変数情報算出部2aは、制御フロー解析およびデータフロー解析の結果に基づいて部分プログラムの変数の生存情報(IN,OUT)、定義情報(DEF)を算出する。
実行経路中間コード生成部2bは、変数情報算出部2aから送出されたパス置換対象変数X3のデータを受け取ると、部分中間コードとホットパス情報F2とを読み出し、部分中間コードのホットパスHPに対応する中間コードを複製し、複製した中間コードのパス置換対象変数X3に変数置換処理を繰り返し実施する。以上の処理を行うことで、実行経路中間コード生成部2bは、パス置換対象変数X3と、変数置換処理により得られる置換後変数とのペア(以下「変数のペア」という)を生成する。これは、図2のステップn15に対応する。
次に、図5AのソースプログラムF1の一部である部分プログラムを例にして、図2に示す動作フローの具体的な動作例を、図5,図9〜図12を参照して説明する。なお、この例における中間コードは、ソースプログラムF1に近い中間コードで表したものとする。
上述した実施の形態では、中間コード依存解析部2fが不正に例外が発生しないように、図12において判定中間コードS203から例外発生中間コードS102へ依存を生成したが、変形例1では、このような依存の生成は行われない。すなわち、実行経路中間コード生成部2bは、図14のプログラムに示すように中間コードS401を新規に生成したうえで、図15のプログラムに示すように中間コードS401から例外発生中間コードS102への依存を生成する。
・割り込みルーチンから復帰する際の復帰先アドレスを保持する特別な変数である復帰先保持変数を生成し、
・復帰先保持変数へ復帰先アドレスを格納させる中間コードである復帰用途中間コードを生成し(戻り場所設定命令コード生成器)、
これら生成した変数とコードとを実行経路中間コード列の先頭に挿入する。
・例外発生の確率が低い、
・図12のプログラム等によって生成される判定中間コードS203から例外発生中間コードS102への依存が生成される、
という条件の基では、高速化ブロックH1において更なる高速実行の障害が発生する場合がある。
上述した実施の形態では、ホットパス情報F2(図1参照)は、ユーザによって予め定められた実行経路を表す情報の他に、ホットパスHP中で参照される変数が保持する値の情報である変数保持情報をホットパス情報F2としてユーザによって入力されてもよい。変数保持情報中の変数の値は、変数が保持する可能性が高い値のことである。
上述した変形例2では、分岐中間コード生成部2eは、高速化ブロックH1に、定数値への置換処理と、定数値判定条件分岐中間コードの生成処理とを実施した。しかしながら分岐中間コード生成部2eは、高速化ブロックH1を複製したうえで、複製した高速化ブロックH1に、定数値への置換処理と定数値判定条件分岐中間コードの生成処理とを実施してもよい。さらに、分岐中間コード生成部2eは、複製前の高速化ブロックH1の始点の直前に、ラベルのみのダミーの中間コードを生成したうえで、定数値判定条件分岐中間コードの分岐先をダミーの中間コードにしてもよい。またさらに、複製前の高速化ブロックH1の終了点の直後に、部分中間コードの終了点の直後の中間コードへ分岐する分岐中間コードを挿入してもよい。
上述した<動作例>では、図11の条件分岐中間コードS202,S203に示すように高速化ブロックH1から部分中間コード列の始点である中間コードS1に分岐するように分岐中間コードを設定した。しかしながら、部分中間コード列の途中箇所へ分岐するように高速化ブロックを構成することで、部分中間コード列の一部の実行を省略し、これによって部分プログラムの実行手順の短縮や部分中間コード列の削減を図ってもよい。
・中間コードS1から基本ブロックB2,基本ブロックB4,および基本ブロックB6を経て基本ブロックB7の出口に至る区間と、
・中間コードS6から、基本ブロックB4と基本ブロックB6とを経て基本ブロックB7の出口に至る区間と、
・中間コードS10から基本ブロックB7の出口に至る区間と
は、それぞれ変数aの同一の生存区間を構成するものとなる。
・中間コードS8から基本ブロックB7の入口に至る生存区間中に存在する変数fの定義箇所と参照箇所とを、新たに発生する識別子t12に置き換える、
・中間コードS15から基本ブロックB7の出口に至る生存区間中に存在する定義箇所を新たに発生する識別子t13に置き換える、
という処理を実施する。
という処理を実施する。
・中間コードS12から条件分岐中間コードS202への依存と、
・中間コードS22から条件分岐中間コードS202への依存と、
・中間コードS82から条件分岐中間コードS203への依存とが、
それぞれ生成される。
・条件分岐中間コードS202から中間コードS42への依存と、
・条件分岐中間コードS202から中間コードS52への依存と、
・中間コードS42から条件分岐中間コードS203への依存と、
・中間コードS52から条件分岐中間コードS203への依存とが、
それぞれ生成される。なお、中間コードS52から条件分岐中間コードS203には変数t3に関連するデータ依存も存在する。
上述した実施の形態において、最適化部2は、ホットパスHP上の条件分岐中間コードの判定条件の成立の確率または非成立の確率や、例外が発生する確率、特定の変数が特定の値を保持する確率を基にして、変換の仕方を制御してもよい。なお、確率自体は、ホットパス情報F2より得られる。
上述7した実施の形態において、最適化部2は、実行時間の平均時間を使用して、最終的に出力する中間コードを決定してもよい。例えば5A,図5Bにおいて、まず、条件分岐中間コードS3が真となるときの確率がp1であり、条件分岐中間コードS9が真となるときの確率がp2であるとすると、これらの確率は、ホットパス情報F2より得られる。
・基本ブロックB1,基本ブロックB2,基本ブロックB4,基本ブロックB5,および基本ブロックB7を連続して実行する実行時間がT51である、
・基本ブロックB1,基本ブロックB2,基本ブロックB4,基本ブロックB6,および基本ブロックB7を連続して実行する実行時間がT52である、
・基本ブロックB1,基本ブロックB3,基本ブロックB4,基本ブロックB5,および基本ブロックB7を連続して実行する実行時間がT53である、
・基本ブロックB1,基本ブロックB3,基本ブロックB4,基本ブロックB6,および基本ブロックB7を連続して実行する実行時間がT54である、
とする。
このとき、図5A,図5Bに示すプログラムの平均実行時間は、
ET1=T51*p1*p2+T52*p1*(1-p2)+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)…(式1)
となる。
・図13における中間コードS52から中間コードS112までの実行時間がT131である、
・中間コードS52から中間コードS203までの実行時間がT132である、
・中間コードS52から中間コードS202までの実行時間がT133である、
とする。
ET2 = T131*p1*p2+T132*(1-p2)+T52*p1*(1-p2)+T54*(1-p1)*(1-p2)
+T133*(1-p1)*p2+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)…(式2)
となる。
・中間コードS12から中間コードS112までの実行時間がT161である、
・中間コードS12から中間コードS202までの実行時間がT162である、
・中間コードS12から中間コードS203までの実行時間がT163である、
・図5A,図5Bに示す中間コードS10において例外が発生する確率がp3である、
とする。
ET3= [T161*p1*p2+T162*(1-p1)*p2+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)
+T163*(1-p2)+T52*p1*(1-p2)+T54*(1-p1)*(1-p2)]*(1-p3)
+[T162+T52*p1*(1-p2)+T54*(1-p1)*(1-p2)]*p3…(式3)
となる(第4の実行経路変換判定器)。
・中間コードS121から中間コードS152までの実行時間がT201である、
・中間コードS121から中間コードS411までの実行時間がT202である、
・中間コードS121から中間コードS412までの実行時間がT203である、
・中間コードS121から中間コードS202までの実行時間がT204である、
・図5の基本ブロックB1の入口において、変数b,変数eが保持する値がそれぞれ「5」,「8」である確率がそれぞれp4,p5である、
とする。
ET4=T201*p1*p4*p5+(T202+ET1)*(1-p4)+(T203+ET1)*p4*(1-p5)
+[T204+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)]*(1-p1)*p4*p5…(式4)
となる。
・中間コードS121から中間コードS152までの実行時間がT221である、
・中間コードS121から中間コードS413までの実行時間がT222である、
・中間コードS121から中間コードS414までの実行時間がT223である、
・中間コードS121から中間コードS202までの実行時間がT224である、
・図5の基本ブロックB1の入口において、変数b,変数eが保持する値が、それぞれ、「5」,「8」である確率がそれぞれp4,p5である、
とする。
ET5= T221*p1*p4*p5+(T222+ET2)*(1-p4)+(T223+ET2)*p4*(1-p5)
+[T224+T53*(1-p1)*p2+T54*(1-p1)*(1-p2)]*(1-p1)*p4*p5…(式5)
となる(第6の実行経路変換判定器)。
・図32における基本ブロックB31,基本ブロックB41,基本ブロックB51,および基本ブロックB71を連続して実行する実行時間がT321である、
・基本ブロックB31,基本ブロックB41,基本ブロックB61,および基本ブロックB71を連続して実行する実行時間がT322である、
・基本ブロックB61,および基本ブロックB71を連続して実行する実行時間がT323である、
・中間コードS12から中間コードS151までの実行時間がT324である、
・中間コードS12から中間コードS202までの実行時間がT325である、
・中間コードS12から中間コードS203までの実行時間がT326である、とする。
ET6=T324*p1*p2+T325*(1-p1)+T321*p2+T322*(1-p2)+
(T326+T322)*p1*(1-p2)…(式6)
となる。
以上、本発明におけるコンパイラ装置について、実施の形態および変形例に基づいて説明したが、本発明は実施の形態および変形例に限られないことは勿論である。
1 構文解析部
2 最適化部
3 資源割付部
4 実行コード生成部
2A プログラム変換部
2B 中間コードスケジューリング部
2a 変数情報算出部
2b 実行経路中間コード生成部
2c 判定中間コード生成部
2d 保証中間コード生成部
2e 分岐中間コード生成部
2f 中間コード依存解析部
2g 中間コード並列化部
2h 合流ブロック定義置換部
F1 ソースプログラム
F2 ホットパス情報
F3 実行プログラム
H1〜H7 高速化ブロック
Claims (26)
- 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
実行経路指定器と、第1の実行経路コード生成器と、保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第1の依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成するものであり、
前記保証コード生成器は、前記第1の実行経路コード生成器によって置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
前記第1の分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成するものであり、
前記第1の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加するものであり、
前記並列化器は、前記第1の依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである、
コンパイラ装置。 - 当該コンパイラ装置は、前記ソースプログラムが有するループを一つの命令として扱うものであって、ループ単位処理器をさらに備え、
前記ループ単位処理器は、前記実行経路指定器と前記第1の実行経路コード生成器と前記保証コード生成器と前記第1の分岐コード生成器と前記第1の依存解析器と前記並列化器とを、前記ループの最内ループより外側のループに向かって起動するものである、
請求項1のコンパイラ装置。 - 第1の実行経路変換判定器をさらに備え、
前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、
請求項1のコンパイラ装置。 - 第2の実行経路変換判定器をさらに備え、
前記第2の実行経路変換判定器は、
前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記並列化器を実行した後の前記指定される実行経路における前記目的コードの実行時間と前記実行確率とに基づいて、前記指定される実行経路の平均実行時間を算定し、
前記部分コードの平均実行時間と前記指定される実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、
ものである、
請求項1のコンパイラ装置。 - 戻り場所設定命令コード生成器と第2の依存解析器とをさらに備え、
前記戻り場所設定命令コード生成器は、前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加するものであり、
前記第2の依存解析器は、前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加するものであり、
かつ、前記第2の依存解析器は、前記第1の依存解析器が実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
請求項1のコンパイラ装置。 - 割り込み発生時処理ルーチン付加器をさらに備え、
前記割り込み発生時処理ルーチン付加器は、例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加するものである、
請求項5のコンパイラ装置。 - 第3の実行経路変換判定器をさらに備え、
前記第3の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記並列化器を実行した後の実行経路上で例外が発生する確率とに基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、
請求項6のコンパイラ装置。 - 第4の実行経路変換判定器をさらに備え、
前記第4の実行経路変換判定器は、
前記指定される実行経路の実行確率と、前記指定される実行経路上で例外が発生する確率と、前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記指定される実行経路の実行確率と、前記例外が発生する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間と、前記割り込み発生時処理ルーチン付加器が付加する前記処理ルーチンにおける前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間とを算定し、
前記並列化器を実行した後の実行経路の平均実行時間と前記処理ルーチンの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、
請求項7のコンパイラ装置。 - 第2の実行経路コード生成器をさらに備え、
前記第2の実行経路コード生成器は、前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該変数を当該変数が保持する値に置き換え、当該変数が前記置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を前記指定される実行経路中の先頭に挿入してなる第2の実行経路コードを生成するものであり、
当該コンパイラ装置は、前記第2の実行経路コード生成器が起動した後に、定数値に関する冗長性の削除最適化を行う、
請求項8のコンパイラ装置。 - 第5の実行経路変換判定器をさらに備え、
前記第5の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率とに基づいて、前記第2の実行経路コード生成器を実行するか否かを判定するものである、
請求項9のコンパイラ装置。 - 第6の実行経路変換判定器をさらに備え、
前記第6の実行経路変換判定器は、前記指定される実行経路の実行確率と、前記指定される実行経路上の変数が特定の値を保持する確率と、前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
前記並列化器を実行した後の実行経路の平均実行時間と前記部分コードの平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードとするか否かを判定するものである、
請求項10のコンパイラ装置。 - 第3の実行経路コード生成器と第2の分岐コード生成器とをさらに備え、
前記第3の実行経路コード生成器は、
前記指定される実行経路上で参照される変数が特定の値を保持することが多い場合には、当該指定される実行経路中の命令を複製したうえで、当該複製した実行経路において前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記指定される実行経路上で参照される変数が前記置き換えた値と異なる値を保持する場合には、当該指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該指定される実行経路中の先頭に挿入してなる第3の実行経路コードを生成するものであり、
前記第2の分岐コード生成器は、前記指定される実行経路中の条件分岐命令に前記複製した実行経路上の条件分岐命令の条件が成立しない場合には、前記複製した実行経路上の条件分岐命令に、前記指定される実行経路コードの始点に分岐する第2の分岐コードを生成するものである、
請求項11のコンパイラ装置。 - 第7の実行経路変換判定器をさらに備え、
前記第7の実行経路変換判定器は、
前記指定される実行経路上で参照される変数が特定の値を保持する確率に基づいて、または前記指定される実行経路の実行確率と前記指定される実行経路上で参照される変数が特定の値を保持する確率とに基づいて変形後のプログラムの平均実行時間を算出したうえで、
算出する前記変形後のプログラムの平均実行時間に基づいて、前記第3の実行経路コード生成器と前記第2の分岐コード生成器とを実行するか否かを判定するものである、
請求項12のコンパイラ装置。 - 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
実行経路指定器と、実行経路コード生成器と、保証コード生成器と、部分コード生成器と、分岐コード生成器と、依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列に含まれる複数の実行経路から一つを指定するものであり、
前記実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる実行経路コードを生成するものであり、
前記保証コード生成器は、前記実行経路コード生成器によって置き換えられた前記その他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成するものであり、
前記部分コード生成器は、前記一部命令列に対応する部分コードを生成するものであり、
前記分岐コード生成器は、前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令の分岐先が前記部分コード中の当該分岐条件が成立しない場合の分岐先になるように、分岐コードを生成するものであり、
前記依存解析器は、前記指定される実行経路中の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記指定される実行経路中の命令であって制御が合流する基本ブロック中に存在する命令から、前記実行経路の終点方向に向かって最初に見つかる前記条件分岐命令を越えて処理移動ができないように、当該基本ブロック中に存在する命令と前記条件分岐命令との間に依存を付加し、かつ、前記指定される実行経路中の命令であって前記基本ブロック中に存在しない命令から、前記条件分岐命令を越えて処理移動できないように、当該命令と前記条件分岐命令との間に依存を付加するものであり、
前記並列化器は、前記依存解析器が付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行うものである、
コンパイラ装置。 - 合流定義変数置換器と、合流定義変数保証コード生成器とをさらに備え、
前記合流定義変数置換器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列において、制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とをその他の変数に置き換えるものであり、
前記合流定義変数保証コード生成器は、前記合流定義変数置換器によって置き換えられたその他の変数であって前記一部命令列の出口で生存が必要とされるその他の変数を元の変数に復元する保証コードを、一部命令列の出口に生成するものである、
請求項14のコンパイラ装置。 - 第1の実行経路変換判定器をさらに備え、
前記第1の実行経路変換判定器は、前記指定される実行経路の実行確率に基づいて、前記並列化器を実行した後のプログラムを目的コードとするか否かを判定するものである、
請求項15のコンパイラ装置。 - 第2の実行経路変換判定器をさらに備え、
前記第2の実行経路変換判定器は、
前記指定される実行経路の実行確率と前記部分コードの実行時間とに基づいて、前記部分コードの平均実行時間を算定し、
前記指定される実行経路の実行確率と前記並列化器を実行した後の実行経路における前記目的コードの実行時間とに基づいて、前記並列化器を実行した後の実行経路の平均実行時間を算定し、
前記部分コードの平均実行時間と前記並列化器を実行した後の実行経路の平均実行時間との比較に基づいて、前記並列化器を実行した後のプログラムを前記目的コードの列とするか否かを判定する、
ものである、
請求項16のコンパイラ装置。 - 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ装置であって、
実行経路指定器と、第1の実行経路コード生成器と、第1の保証コード生成器と、第2の実行経路コード生成器と、合流定義変数置換器と、合流定義変数保証コード生成器と、第3の実行経路コード生成器と、第2の保証コード生成器と、部分コード生成器と、第1の分岐コード生成器と、第2の分岐コード生成器と、第3の分岐コード生成器と、依存解析器と、並列化器とを備え、
前記実行経路指定器は、前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定するものであり、
前記第1の実行経路コード生成器は、前記実行経路指定器によって指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成するものであり、
前記第1の保証コード生成器は、前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成するものであり、
第2の実行経路コード生成器は、前記第1の実行経路コード生成器と前記第1の保証コード生成器とによって生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成するものであり、
前記合流定義変数置換器は、前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換えるものであり、
前記合流定義変数保証コード生成器は、前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成するものであり、
前記第3の実行経路コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成するものであり、
前記第2の保証コード生成器は、前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成するものであり、
前記部分コード生成器は、前記合流定義変数置換器と前記合流定義変数保証コード生成器とを実施した後の、前記一部命令列に対応する部分コードを生成するものであり、
前記第1の分岐コード生成器は、前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成するものであり、
前記第2の分岐コード生成器は、前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成するものであり、
前記第3の分岐コード生成器は、前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成するものであり、
前記依存解析器は、前記第1の実行経路コード生成器と、前記第1の保証コード生成器と、前記第2の実行経路コード生成器と、前記第3の実行経路コード生成器と、前記第2の保証コード生成器とで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出するものであり、
前記並列化器は、前記依存解析器が算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行うものである、
コンパイラ装置。 - 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイル方法であって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
を含むコンパイル方法。 - 前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加する戻り場所設定命令コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
をさらに含み、
前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
請求項19のコンパイル方法。 - 例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加する割り込み発生時処理ルーチン付加ステップを、
さらに含む、
請求項20のコンパイル方法。 - 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラ方法であって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する 第2の保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
を含むコンパイル方法。 - 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上で定義されている変数であって当該指定される実行経路の入口において生存が必要とされる変数をその他の変数に置き換えてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1の実行経路コード生成ステップにおいて置き換えられたその他の変数であって前記指定される実行経路の出口においても生存が必要とされるその他の変数を元の変数に復元する保証コードを生成する保証コード生成ステップと、
前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記指定される実行経路上の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記指定される実行経路上の条件分岐命令に、前記部分コードの始点に分岐する第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、命令間の依存関係を算出するとともに、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する前記分岐コードとの間に依存を追加し、かつ、例外が発生しないように命令間の依存を付加する第1の依存解析ステップと、
前記第1の依存解析ステップにおいて付加する前記命令間の依存に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
をコンピュータに実行させるためのコンパイラプログラム。 - コンピュータに実行させるためのステップとして、
前記指定される実行経路の実行中に例外が発生した際の戻り場所を特定する命令コードを前記指定される実行経路上に追加する戻り場所設定命令コード生成ステップと、
前記指定される実行経路上の命令間の依存関係の解析に基づいて、前記保証コードが前記指定される実行経路上の条件分岐命令より後に実行されるように、前記保証コードと前記指定される実行経路上の条件分岐命令に対応する分岐コードとの間に依存を追加する第2の依存解析ステップと、
をさらに含み、
前記第2の依存解析ステップでは、前記第1の依存解析ステップが実施する、例外が発生しないように命令間に付加する依存については、それを付加しない、
請求項23のコンパイラプログラム。 - コンピュータに実行させるためのステップとして、
例外が発生した際に、前記命令コードで指定する前記戻り場所に戻る処理ルーチンを前記目的コードに追加する割り込み発生時処理ルーチン付加ステップを、
さらに含む、
請求項24のコンパイラプログラム。 - 分岐命令を含むソースプログラムを目的コードの列である目的プログラムに変換するコンパイラプログラムであって、
前記ソースプログラムを構成する、途中に分岐命令を含む一部命令列における複数の実行経路から一つを指定する実行経路指定ステップと、
前記実行経路指定ステップにおいて指定される実行経路上における全命令列に対応する目的コードであって、前記指定される実行経路の入口において生存が必要とされかつ前記指定される実行経路上で定義されている変数が第1のその他の変数に置き換えられてなる第1の実行経路コードを生成する第1の実行経路コード生成ステップと、
前記第1のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第1のその他の変数を元の変数に復元する第1の保証コードを生成する第1の保証コード生成ステップと、
前記第1の実行経路コード生成ステップと前記第1の保証コード生成ステップとにおいて生成されるコード列で参照される変数が特定の値を保持することが多い場合には、当該コード列を複製したうえで、当該複製したコード列における前記特定の値を保持することが多い変数を当該変数が保持する値に置き換え、前記コード列で参照される変数が置き換えた値と異なる値を保持する場合には、前記指定される実行経路の外へ分岐するように条件を設定した条件分岐命令を当該コード列の先頭に挿入してなる第2の実行経路コードを生成する第2の実行経路コード生成ステップと、
前記一部命令列において制御が合流する基本ブロック中で定義される変数が存在する場合には、当該変数の定義箇所と参照箇所とを第2のその他の変数に置き換える合流定義変数置換ステップと、
前記第2のその他の変数であって前記一部命令列の出口で生存が必要とされる第2のその他の変数については、当該第2のその他の変数を元の変数に復元する変数保証コードを一部命令列の出口に生成する合流定義変数保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記指定される実行経路上における全命令列に対応する目的コードであって前記指定される実行経路の入口で生存が必要とされかつ当該指定される実行経路上で定義されている変数を第3のその他の変数に置き換えてなる第3の実行経路コードを生成する第3の実行経路コード生成ステップと、
前記第3のその他の変数であって前記指定される実行経路の出口で生存が必要とされる第3のその他の変数を元の変数に復元する第2の保証コードを生成する 第2の保証コード生成ステップと、
前記合流定義変数置換ステップと前記合流定義変数保証コード生成ステップとを実施した後の、前記一部命令列に対応する部分コードを生成する部分コード生成ステップと、
前記第3の実行経路コードの条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第3の実行経路コード中の条件分岐命令の分岐先を、前記部分コード中の当該分岐条件が成立しない場合における分岐先になるように第1の分岐コードを生成する第1の分岐コード生成ステップと、
前記第1の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第1の実行経路コード中の分岐命令に、前記第3の実行経路コードの始点に分岐する第2の分岐コードを生成する第2の分岐コード生成ステップと、
前記第2の実行経路コード中の条件分岐命令の条件に基づいて、前記指定される実行経路を実行するための分岐条件が成立しない場合には、前記第2の実行経路コード中の分岐命令に、前記第1の実行経路コードの始点に分岐する第3の分岐コードを生成する第3の分岐コード生成ステップと、
前記第1の実行経路コード生成ステップと、前記第1の保証コード生成ステップと、前記第2の実行経路コード生成ステップと、前記第3の実行経路コード生成ステップと、前記第2の保証コード生成ステップとで生成される各コード列中の命令間の依存関係を解析して、当該命令間の依存関係を算出する依存解析ステップと、
前記依存解析ステップが算出する前記命令間の依存関係に基づいて前記指定される実行経路中の命令の並び替えを行う並列化ステップと、
をコンピュータに実行させるためのコンパイラプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007131506A JP4884297B2 (ja) | 2006-05-26 | 2007-05-17 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
US11/802,636 US20070277162A1 (en) | 2006-05-26 | 2007-05-24 | Compiler apparatus, compiler method, and compiler program |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006146713 | 2006-05-26 | ||
JP2006146713 | 2006-05-26 | ||
JP2007131506A JP4884297B2 (ja) | 2006-05-26 | 2007-05-17 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2008004082A JP2008004082A (ja) | 2008-01-10 |
JP4884297B2 true JP4884297B2 (ja) | 2012-02-29 |
Family
ID=38750936
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007131506A Expired - Fee Related JP4884297B2 (ja) | 2006-05-26 | 2007-05-17 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20070277162A1 (ja) |
JP (1) | JP4884297B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11868912B2 (en) | 2020-02-06 | 2024-01-09 | Samsung Electronics Co., Ltd. | Multi-device based inference method and apparatus |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8225295B2 (en) * | 2007-09-21 | 2012-07-17 | Jens Palsberg | Register allocation by puzzle solving |
WO2009098739A1 (ja) * | 2008-02-05 | 2009-08-13 | Panasonic Corporation | プログラム最適化装置およびプログラム最適化方法 |
US7493610B1 (en) | 2008-03-27 | 2009-02-17 | International Business Machines Corporation | Versioning optimization for dynamically-typed languages |
JP2010039536A (ja) * | 2008-07-31 | 2010-02-18 | Panasonic Corp | プログラム変換装置、プログラム変換方法およびプログラム変換プログラム |
CA2675692C (en) * | 2009-08-28 | 2012-03-13 | Ibm Canada Limited - Ibm Canada Limitee | Compiler-assisted program source code filter |
CA2684441C (en) * | 2009-09-22 | 2012-06-05 | Ibm Canada Limited - Ibm Canada Limitee | May-constant propagation |
CN102893255A (zh) * | 2010-02-22 | 2013-01-23 | 美国亚德诺半导体公司 | 用于概率计算机的超标量控制 |
US8656364B1 (en) * | 2010-04-12 | 2014-02-18 | Parasoft Corporation | System and method for enforcement of business rules using static analysis |
US8407322B1 (en) * | 2010-08-24 | 2013-03-26 | Adobe Systems Incorporated | Runtime negotiation of execution blocks between computers |
US8881124B2 (en) * | 2010-12-21 | 2014-11-04 | Panasonic Corporation | Compiler device, compiler program, and loop parallelization method |
US9575777B2 (en) * | 2011-03-08 | 2017-02-21 | Sony Corporation | Information processing device for performing contactless communication with an external device using multiple communication standards |
US8615745B2 (en) | 2011-10-03 | 2013-12-24 | International Business Machines Corporation | Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization |
US8756591B2 (en) | 2011-10-03 | 2014-06-17 | International Business Machines Corporation | Generating compiled code that indicates register liveness |
US8612959B2 (en) | 2011-10-03 | 2013-12-17 | International Business Machines Corporation | Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization |
US9239926B2 (en) * | 2012-06-29 | 2016-01-19 | International Business Machines Corporation | Static analysis for discovery of timing attack vulnerabilities in a computer software application |
US9250879B2 (en) | 2012-07-02 | 2016-02-02 | International Business Machines Corporation | Strength reduction compiler optimizations |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
US8997060B2 (en) * | 2013-07-31 | 2015-03-31 | International Business Machines Corporation | Parallel program analysis and branch prediction |
US9652208B2 (en) | 2013-08-01 | 2017-05-16 | Futurewei Technologies, Inc. | Compiler and method for global-scope basic-block reordering |
CN104077140B (zh) * | 2014-07-04 | 2017-11-07 | 用友网络科技股份有限公司 | 用于持续集成的自动化编译方法和编译装置 |
EP3177990B1 (en) * | 2014-08-29 | 2021-03-17 | Huawei Technologies Co., Ltd. | Method for compiling a source code |
EP3086226A1 (en) * | 2015-04-23 | 2016-10-26 | Thomson Licensing | Device and method for providing code blocks to a client during execution of software code |
JP2019179417A (ja) * | 2018-03-30 | 2019-10-17 | 株式会社デンソー | スケジューリング方法、スケジューリング装置 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5437034A (en) * | 1991-04-19 | 1995-07-25 | Hitachi, Ltd. | Method of generating from source program object program by which final values of variables for parallel execution are guaranteed |
JPH06259262A (ja) * | 1993-03-08 | 1994-09-16 | Fujitsu Ltd | 分岐確率を設定するコンパイラの処理方法および処理装置 |
JP3494489B2 (ja) * | 1994-11-30 | 2004-02-09 | 株式会社ルネサステクノロジ | 命令処理装置 |
US6170083B1 (en) * | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
US6070009A (en) * | 1997-11-26 | 2000-05-30 | Digital Equipment Corporation | Method for estimating execution rates of program execution paths |
US6092180A (en) * | 1997-11-26 | 2000-07-18 | Digital Equipment Corporation | Method for measuring latencies by randomly selected sampling of the instructions while the instruction are executed |
US6463582B1 (en) * | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6968542B2 (en) * | 2000-06-16 | 2005-11-22 | Hewlett-Packard Development Company, L.P. | Method for dynamically identifying pseudo-invariant instructions and their most common output values on frequently executing program paths |
GB2366879B (en) * | 2000-09-16 | 2005-02-16 | Ibm | Tracing the execution path of a computer program |
JP3870112B2 (ja) * | 2002-03-13 | 2007-01-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、コンパイル装置、及びコンパイル用プログラム |
US6986131B2 (en) * | 2002-06-18 | 2006-01-10 | Hewlett-Packard Development Company, L.P. | Method and apparatus for efficient code generation for modulo scheduled uncounted loops |
US7784039B2 (en) * | 2004-09-22 | 2010-08-24 | Panasonic Corporation | Compiler, compilation method, and compilation program |
JP4754909B2 (ja) * | 2004-09-22 | 2011-08-24 | パナソニック株式会社 | コンパイラ装置、コンパイル方法、コンパイラプログラム |
US7603546B2 (en) * | 2004-09-28 | 2009-10-13 | Intel Corporation | System, method and apparatus for dependency chain processing |
-
2007
- 2007-05-17 JP JP2007131506A patent/JP4884297B2/ja not_active Expired - Fee Related
- 2007-05-24 US US11/802,636 patent/US20070277162A1/en not_active Abandoned
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11868912B2 (en) | 2020-02-06 | 2024-01-09 | Samsung Electronics Co., Ltd. | Multi-device based inference method and apparatus |
Also Published As
Publication number | Publication date |
---|---|
JP2008004082A (ja) | 2008-01-10 |
US20070277162A1 (en) | 2007-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4884297B2 (ja) | コンパイラ装置、コンパイル方法およびコンパイラプログラム | |
US9733913B2 (en) | Methods and systems to vectorize scalar computer program loops having loop-carried dependences | |
Karrenberg et al. | Whole-function vectorization | |
US6243864B1 (en) | Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths | |
US8555266B2 (en) | Managing variable assignments in a program | |
US6289507B1 (en) | Optimization apparatus and computer-readable storage medium storing optimization program | |
US20110119660A1 (en) | Program conversion apparatus and program conversion method | |
US20020095667A1 (en) | Optimizing compilation by forward store movement | |
JP6398725B2 (ja) | コンパイルプログラム、コンパイル方法およびコンパイラ装置 | |
US10698670B2 (en) | Parallel program generating method and parallelization compiling apparatus | |
JP2005216177A (ja) | コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 | |
JP2009187285A (ja) | プログラム変換方法、プログラム変換装置およびプログラム | |
US10013244B2 (en) | Apparatus and method to compile a variadic template function | |
JP3539613B2 (ja) | ループ飛び出し文を含むループに対する配列サマリ解析方法 | |
JPH04213118A (ja) | プログラム翻訳装置およびプログラム翻訳方法 | |
US10545741B2 (en) | Information processing apparatus, method of compiling, and storage medium | |
JP4754909B2 (ja) | コンパイラ装置、コンパイル方法、コンパイラプログラム | |
JP4719415B2 (ja) | 情報処理システム及びコード生成方法 | |
Saraiva et al. | Data structure free compilation | |
US10108405B2 (en) | Compiling apparatus and compiling method | |
JPWO2017204139A1 (ja) | データ処理装置、データ処理方法、およびプログラム記録媒体 | |
JPH0756745A (ja) | 言語処理プログラムのコンパイラ処理方式 | |
JP2008015665A (ja) | プログラム解析方法及びプログラム解析装置 | |
KR102207775B1 (ko) | 네트워크 스위치 병렬화를 위한 데이터 의존성 기반의 데이터 평면 정적 분석 방법 및 이를 이용한 병렬화 장치 | |
JP6600888B2 (ja) | 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20091217 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20111026 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20111129 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20111206 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20141216 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |