17 llvm::Function& function_;
18 llvm::FunctionAnalysisManager& FAM_;
20 bool apply_on_linkonce_odr_;
24 std::unique_ptr<llvm::Region> expand_region(std::unique_ptr<llvm::Region>& R);
27 std::pair<bool, llvm::Value*> can_be_applied();
30 std::pair<bool, llvm::Value*> can_be_applied(llvm::Region& region);
33 std::unique_ptr<sdfg::StructuredSDFG> apply();
36 std::unique_ptr<sdfg::StructuredSDFG> apply(llvm::Region& region);
38 std::unique_ptr<sdfg::StructuredSDFG> simplify(std::unique_ptr<sdfg::StructuredSDFG>&
sdfg);
40 void dump_llvm_function()
const;
42 void dump_sdfg(
const sdfg::SDFG&
sdfg,
const std::string& step)
const;
47 FunctionToSDFG(llvm::Function& function, llvm::FunctionAnalysisManager& FAM,
bool apply_on_linkonce_odr);
49 std::vector<std::unique_ptr<sdfg::StructuredSDFG>>
run();
51 static size_t loop_count(llvm::Function& function, llvm::Region& region, llvm::FunctionAnalysisManager& FAM) {
52 auto& LI = FAM.getResult<llvm::LoopAnalysis>(function);
64 if (!R->contains(L->getHeader())) {
68 for (
const llvm::BasicBlock* BB : L->blocks()) {
69 if (!R->contains(BB)) {