9. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
b. generate()
i. スケジューリング
ii. 最適化
iii. step信号のビット幅の修正
iv. Verilog HDLの出力処理
9
11. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
b. generate()
i. スケジューリング
ii. 最適化
iii. step信号のビット幅の修正
iv. Verilog HDLの出力処理
11
15. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
b. generate()
i. スケジューリング
ii. 最適化
iii. step信号のビット幅の修正
iv. Verilog HDLの出力処理
15
16. 高位合成友の会15/12/08
LLVMのPass
● Pass
○ LLVMにおける処理の単位
○ LLVM IRに対して最適化処理などを行う
○ 再利用可能
● Passの種類
○ ImuutablePass, ModulePass, FunctionPass,
LoopPass, RegionPass, BasicBlockPass
● ModulePass
○ Moduleに対して実行される
○ Module: LLVM IR 全体
16
処理前 LLVM IR
処理後 LLVM IR
Pass A
Pass B
17. 高位合成友の会15/12/08
LLVMのPass
● Pass
○ LLVMにおける処理の単位
○ LLVM IRに対して最適化処理などを行う
○ 再利用可能
● Passの種類
○ ImuutablePass, ModulePass, FunctionPass,
LoopPass, RegionPass, BasicBlockPass
● ModulePass
○ Moduleに対して実行される
○ Module: LLVM IR 全体
17
LLVM IR
Module
Global Variable
Function
BasicBlock
Instruction
19. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
b. generate()
i. スケジューリング
ii. 最適化
iii. step信号のビット幅の修正
iv. Verilog HDLの出力処理
19
21. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
b. generate()
i. スケジューリング
ii. 最適化
iii. step信号のビット幅の修正
iv. Verilog HDLの出力処理
21
28. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
vii. generate()
1. スケジューリング
2. 最適化
3. step信号のビット幅の修正
4. Verilog HDLの出力処理
28
32. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
vii. generate()
1. スケジューリング
2. 最適化
3. step信号のビット幅の修正
4. Verilog HDLの出力処理
32
34. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
vii. generate()
1. スケジューリング
2. 最適化
3. step信号のビット幅の修正
4. Verilog HDLの出力処理
34
36. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
vii. generate()
1. スケジューリング
2. 最適化
3. step信号のビット幅の修正
4. Verilog HDLの出力処理
36
38. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
vii. generate()
1. スケジューリング
2. 最適化
3. step信号のビット幅の修正
4. Verilog HDLの出力処理
38
40. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
vii. generate()
1. スケジューリング
2. 最適化
3. step信号のビット幅の修正
4. Verilog HDLの出力処理
40
42. 高位合成友の会15/12/08
FortRockの処理フロー
1. gfortranとDragonEggを用いてLLVM IRに変換
2. instnamerパスの実行
3. FortRockCoreの処理
a. runOnModule()
i. 演算器のインスタンス化
ii. グローバル変数のインスタンス化
iii. モジュールの入出力のインスタンス化
iv. ラベルのインスタンス化
v. 変数のインスタンス化
vi. 命令のDFG化
vii. generate()
1. スケジューリング
2. 最適化
3. step信号のビット幅の修正
4. Verilog HDLの出力処理
42