docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
function_to_sdfg.h
Go to the documentation of this file.
1#pragma once
2
3#include <llvm/Analysis/LoopInfo.h>
4#include <llvm/Analysis/RegionInfo.h>
5
6#include "docc/utils.h"
7
11
12namespace docc {
13namespace lifting {
14
16private:
17 llvm::Function& function_;
18 llvm::FunctionAnalysisManager& FAM_;
19
20 bool apply_on_linkonce_odr_;
21
22 size_t sdfg_counter;
23
24 std::unique_ptr<llvm::Region> expand_region(std::unique_ptr<llvm::Region>& R);
25
26 // Entire function
27 std::pair<bool, llvm::Value*> can_be_applied();
28
29 // Single region
30 std::pair<bool, llvm::Value*> can_be_applied(llvm::Region& region);
31
32 // Entire function
33 std::unique_ptr<sdfg::StructuredSDFG> apply();
34
35 // Single region
36 std::unique_ptr<sdfg::StructuredSDFG> apply(llvm::Region& region);
37
38 std::unique_ptr<sdfg::StructuredSDFG> simplify(std::unique_ptr<sdfg::StructuredSDFG>& sdfg);
39
40 void dump_llvm_function() const;
41
42 void dump_sdfg(const sdfg::SDFG& sdfg, const std::string& step) const;
43
44 void dump_structured_sdfg(const sdfg::StructuredSDFG& sdfg, const std::string& step) const;
45
46public:
47 FunctionToSDFG(llvm::Function& function, llvm::FunctionAnalysisManager& FAM, bool apply_on_linkonce_odr);
48
49 std::vector<std::unique_ptr<sdfg::StructuredSDFG>> run();
50
51 static size_t loop_count(llvm::Function& function, llvm::Region& region, llvm::FunctionAnalysisManager& FAM) {
52 auto& LI = FAM.getResult<llvm::LoopAnalysis>(function);
53 size_t count = 0;
54 for (auto& L : LI) {
55 if (FunctionToSDFG::contains_loop(&region, L)) {
56 count++;
57 }
58 }
59
60 return count;
61 };
62
63 static bool contains_loop(const llvm::Region* R, const llvm::Loop* L) {
64 if (!R->contains(L->getHeader())) {
65 return false;
66 }
67
68 for (const llvm::BasicBlock* BB : L->blocks()) {
69 if (!R->contains(BB)) {
70 return false;
71 }
72 }
73
74 return true;
75 };
76
81 static bool is_blacklisted(llvm::Function& F, bool apply_on_linkonce_odr);
82};
83
84} // namespace lifting
85} // namespace docc
std::vector< std::unique_ptr< sdfg::StructuredSDFG > > run()
static bool is_blacklisted(llvm::Function &F, bool apply_on_linkonce_odr)
Checks whether the entire function should not be checked for lifting Not called as part of [run].
static bool contains_loop(const llvm::Region *R, const llvm::Loop *L)
Definition function_to_sdfg.h:63
FunctionToSDFG(llvm::Function &function, llvm::FunctionAnalysisManager &FAM, bool apply_on_linkonce_odr)
static size_t loop_count(llvm::Function &function, llvm::Region &region, llvm::FunctionAnalysisManager &FAM)
Definition function_to_sdfg.h:51
Definition sdfg.h:34
Definition structured_sdfg.h:30
Definition exceptions.h:9
Definition targets.h:8
Definition analysis.h:7