COINS の各機能とその使い方
目次
- +/-
1. 概要
- 1.1 目的
- 1.2 COINSの構成
- 1.3 コンパイラ・ドライバ
- 1.4 マシン記述によるコード生成
- 1.5 最適化・並列化機能
- 1.6 オブジェクト性能
- 1.7 コンパイル過程の可視化
- 1.8 テスト・スーツ
- +/-
2. コンパイラ・ドライバ
- 2.1 ドライバの設計
- 2.2 ドライバの使い方
- 2.2.1 コマンド文法
- 2.2.2 基本オプション
- 2.2.3 COINS オプション
- ターゲット指定
- HIRでの最適化
- 粗粒度並列化
- ループ並列化
- SSA最適化
- SIMD並列化
- バックエンドの拡張
- コンパイル過程の情報出力
- その他
- オプションの追加
- 2.2.4 入力ファイル
- 2.2.5 終了ステータス
- 2.2.6 ターゲットの指定
- 2.2.7 使い方の例
- 2.3 ドライバ API の使い方
- 2.3.1 ドライバ U/I
- 2.3.2 ドライバの実装
- 2.3.3 コンパイル仕様
- 2.3.4 トレース API
- 2.3.5 警告 API
- 2.3.6 ライブラリ・ディレクトリ
- 2.3.7 プロパティ・ファイル
- 2.3.8 サフィクス規則
- 2.3.9 settings ファイル
- 2.4 制限事項
- 2.5 ドライバの実現
- +/-
3. 高水準中間表現HIRの仕様
- 3.1 HIRの論理構造
- 3.2 プログラムのHIR表現
- 3.3 記号表の構成
- 3.3.1 全体構成
- 3.3.2 HIRやフロー情報との関連
- 3.3.3 記号のクラス階層
- 3.3.4 主要な記載内容
- 3.4 記号表の使い方
- 3.4.1 記号表の作り方
- 3.4.2 記号表の初期化
- 3.4.3 記号の作り方
- 3.4.4 Iterator
- 3.5 参考ドキュメント
- 3.5.1 HIRと記号表の簡易インタフェース
- 3.5.2 HIRと記号表の詳細仕様
- +/-
4. 低水準中間表現LIRの仕様
- 4.1 概要
- 4.2 設計目標
- 4.3 実現方針
- 4.4 他の中間言語との比較
- 4.5 構文と意味
- 4.6 LIRの読み方
- 4.7 詳細仕様
- +/-
5. フロントエンド
- 5.1 Cフロントエンド
- 5.1.1 C言語仕様
- 5.1.2 プラグマ
- 5.1.3 asm文
- asm文の仕様
- HIRレベルのasm文の仕様
- LIRレベルのasm文の仕様
- 5.1.4 Cフロントエンドの使い方
- 5.1.5 Cフロントエンドの構成
- 5.2 Fortranフロントエンド
- 5.2.1 Fortran言語仕様
- 5.2.2 Fortranフロントエンドの使い方
- 5.2.3 Fortranフロントエンドの構成
- 5.3 新しいフロントエンドの作り方
- 5.3.1 JavaCC(LLパーサ生成系)を使った例
- 5.3.2 LRパーサ生成系を使った例
- +/-
6. HIRでの最適化
- 6.1 HIR最適化の概要
- 6.2 基本最適化
- 6.2.1 基本最適化の概要
- 6.2.2 基本最適化の諸項目
- 定数畳み込み
- 定数伝播
- 無用命令削除
- 局所的共通部分式削除
- 大域変数の一時変数化
- 6.2.3 基本最適化の呼び出し方
- 6.3 拡張最適化
- 6.3.1 拡張最適化の概要
- 6.3.2 拡張最適化の諸項目
- ループ展開
- if文のループ外移動
- インライン展開
- 部分冗長性削除
- 6.4 Cフロントでの最適化
- 6.5 HIRフロー解析
- 6.5.1 HIRフロー解析の概要
- 6.5.2 coins.flowパッケージでのフロー解析
- 制御フロー解析
- データフロー解析
- データフロー情報
- データ構造
- 使い方
- 拡張仕方
- 6.5.3 coins.aflowパッケージでのフロー解析(旧版)
- 6.6 別名解析
- 6.7 参考文献
- -/- 7. HIRでの並列化
- +/-
7.1 ループ並列化
- 7.1.1 ループ並列化の概要
- 7.1.2 ループの解析と並列化変換
- 解析と並列化変換の方針
- データの参照領域の解析
- 基本インダクション変数の検出と変換
- 参照領域情報の解析
- 並列化可否の判定
- 解析とソースプログラム生成の実行例
- 解析・変換の実現方法とツールとしてのモジュール化
- 7.1.3 OpenMPコンパイラとの連携
-
7.1.4 並列マシン用の目的コード生成
- 並列マシン用コード生成の概要
- 並列化のフレームワーク
- 並列化の実装環境
- 並列化向けのHIR変換
- ループの選択
- ループの副プログラム化
- データ受け渡し
- 使い方
- ヘッダファイル
- 例
- +/-
7.2 粗粒度並列化コンパイラCoCo
- 7.2.1 CoCoの概要
- 7.2.2 CoCoの使い方
- 7.2.3 設計方針と制約事項
- 7.2.4 CoCoの処理の流れ
- 並列実行プログラムへの変換
- OpenMP指示文の挿入
- 粗粒度タスクスケジューラ
- 7.2.5 CoCoの評価
- -/- 8. LIRでの最適化
- +/-
8.1 SSA最適化
- 8.1.1 SSA形式最適化部
- SSA最適化部の流れ
- SSA形式への変換
- SSA形式からの逆変換
- SSA形式上のデータフロー解析と最適化
- 8.1.2 SSA最適化部の評価
- 8.1.3 参考ドキュメント
- +/-
8.2 SIMD並列化
- 8.2.1 SIMD並列化の設計方針
- 8.2.2 SIMD拡張命令セットの調査
- 8.2.3 命令の意味の詳細な記述
- 8.2.4 プロトタイプの実装
- 8.2.5 SIMD並列化の使い方
- 8.2.6 SIMDベンチマークの設計と試験実装
- 8.2.7 参考ドキュメント
- -/- 9. バックエンド
- +/-
9.1 バックエンドの構成
- 9.1.1 リターゲッタブルなコード生成
- 9.1.2 マシン記述TMD
- データ型とレジスタの定義
- データ型
- レジスタリスト
- レジスタ集合
- レジスタ非終端記号
- 変数のレジスタ集合
- 被呼側保存レジスタ集合
- LIRとマシン命令の対応
- 開始記号の定義
- 還元規則とコード生成例
- foreachマクロ
- 還元規則defrule
- 書き換え規則defrewrite
- Javaによる記述
- CodeGeneratorのメソッド
- %defbuildと%defemit
- LIR のJavaによる表現
- リスト表現アセンブラ
- 9.1.3 レジスタ割付
- 9.1.4 バックエンドの使い方
- 9.1.5 バックエンドの最近の拡張版
- TMDの拡張
- マクロ機能
- 速度優先・スペース優先
- 共通TMD
- rewriteCall等の標準化
- リテラルとブランチの変換
- リテラルとブランチの生成
- 変換のためのTMDでの記述
- 文の実行頻度プロファイラ
- LIRシミュレータ
- 9.1.6 参考ドキュメント
- +/-
9.2 バックエンドの付加機能
- 9.2.1 バックエンドの呼び出しかた
- 9.2.2 バックエンドの機能追加の仕方
- 9.2.3 命令スケジューラ
- 9.2.4 ソフトウェア・パイプライニング
- 9.2.5 レジスタ・プロモーション
- +/-
10. 可視化ツール
- 10.1 中間プログラム表現可視化ツール CoVis
- 10.2 コード生成過程のトレース情報表示ツール