Joos1W Compiler Framework
All Classes Functions Typedefs Pages
PrintCFG.cc
1 #include "../IRContextPass.h"
2 #include "tir/Constant.h"
3 #include "utils/PassManager.h"
4 
5 using std::string_view;
6 using utils::Pass;
7 using utils::PassManager;
8 
9 class PrintCFG final : public Pass {
10 public:
11  PrintCFG(PassManager& PM) noexcept : Pass(PM) {}
12  void Run() override {
13  tir::CompilationUnit& CU = GetPass<IRContextPass>().CU();
14  for(auto fn : CU.functions()) {
15  if(!fn->hasBody()) continue;
16  std::ofstream file(std::to_string(number) + "." + std::string{fn->name()} + ".dot");
17  fn->printDot(file);
18  file.close();
19  }
20  number++;
21  }
22  string_view Name() const override { return "printcfg"; }
23  string_view Desc() const override { return "Dump CFG DOT per Function"; }
24 
25 private:
26  void computeDependencies() override {
27  ComputeDependency(GetPass<IRContextPass>());
28  }
29  int number = 0;
30 };
31 
32 REGISTER_PASS(PrintCFG);