3#include <llvm/ADT/StringRef.h>
4#include <llvm/IR/Module.h>
5#include <llvm/IR/ModuleSummaryIndex.h>
6#include <llvm/Support/raw_ostream.h>
8#include <boost/graph/adjacency_list.hpp>
16using Graph = boost::adjacency_list<boost::listS, boost::listS, boost::bidirectionalS>;
17using Vertex = boost::graph_traits<Graph>::vertex_descriptor;
18using Edge = boost::graph_traits<Graph>::edge_descriptor;
30 void print(llvm::raw_ostream& OS);
36 llvm::GlobalValue::GUID
Id_ = 0;
41 llvm::BasicBlock*
BB_ =
nullptr;
47 llvm::Instruction*
Inst_ =
nullptr;
73 return "CallInternal";
75 return "CallExternal";
77 return "CallCrossModule";
85 return "CallIndirect";
98 int32_t fromEvtIdx = -1,
100 int32_t toEvtIdx = -1
127 return *Edges_.at(
E);
130 return *Nodes_.at(V);
133 return findNodeExternallyVisible(Name);
135 const std::vector<GlobalCFGNode*>*
getExitPoints(llvm::GlobalValue::GUID
id)
const;
136 const std::vector<GlobalCFGNode*>*
getExitPoints(llvm::StringRef name)
const;
141 std::map<Vertex, std::unique_ptr<GlobalCFGNode>> Nodes_;
142 std::map<Edge, std::unique_ptr<GlobalCFGEdge>> Edges_;
143 std::unordered_map<llvm::GlobalValue::GUID, GlobalCFGNode*> EntryPoints_;
144 std::unordered_map<llvm::GlobalValue::GUID, std::vector<GlobalCFGNode*>> ExitPoints_;
145 llvm::LLVMContext Ctx_;
146 std::vector<std::unique_ptr<llvm::Module>> Modules_;
147 llvm::StringMap<uint32_t> moduleIds_;
148 int64_t next_func_id_ = 0;
150 void addEntryPoint(llvm::GlobalValue::GUID Id,
GlobalCFGNode* Node);
151 GlobalCFGNode* findNodeExternallyVisible(llvm::StringRef Name)
const;
153 uint32_t getModuleId(llvm::StringRef modPath);
friend class AnalysisManager
Definition analysis.h:15
Definition global_cfg_analysis.h:114
const std::vector< GlobalCFGNode * > * getExitPoints(llvm::StringRef name) const
const GlobalCFGEdge & getEdge(Edge E) const
Definition global_cfg_analysis.h:126
const GlobalCFGNode & getNode(Vertex V) const
Definition global_cfg_analysis.h:129
void run(AnalysisManager &AM) override
const Graph & getGraph() const
Definition global_cfg_analysis.h:123
const GlobalCFGNode * getEntryPoint(llvm::StringRef Name) const
Definition global_cfg_analysis.h:132
static bool available(AnalysisManager &am)
friend class SDFGCfgVisitor
Definition global_cfg_analysis.h:116
const std::vector< GlobalCFGNode * > * getExitPoints(llvm::GlobalValue::GUID id) const
friend class GlobalCFGBuilder
Definition global_cfg_analysis.h:115
This a wrapper around 1 SDFG (may include historic versions of the same SDFG in the future).
Definition sdfg_registry.h:40
Base class for all structured control flow nodes in a StructuredSDFG.
Definition control_flow_node.h:44
Represents a return statement that exits the function with a value.
Definition return.h:32
A sequential container of control flow nodes.
Definition sequence.h:52
EdgeType
Definition global_cfg_analysis.h:53
@ CallIndirect
Definition global_cfg_analysis.h:62
@ CallCrossModule
Definition global_cfg_analysis.h:58
@ CallExternal
Definition global_cfg_analysis.h:57
@ Sequence
Definition global_cfg_analysis.h:55
@ Return
Definition global_cfg_analysis.h:63
@ CallInternal
Definition global_cfg_analysis.h:56
@ Branch
Definition global_cfg_analysis.h:54
CfgSpecialType
Definition global_cfg_analysis.h:24
@ D2H
Definition global_cfg_analysis.h:24
@ H2D
Definition global_cfg_analysis.h:24
@ None
Definition global_cfg_analysis.h:24
@ ErrorHandling
Definition global_cfg_analysis.h:24
static uint32_t next_node_id
Definition global_cfg_analysis.h:20
boost::graph_traits< Graph >::vertex_descriptor Vertex
Definition global_cfg_analysis.h:17
boost::adjacency_list< boost::listS, boost::listS, boost::bidirectionalS > Graph
Definition global_cfg_analysis.h:16
boost::graph_traits< Graph >::edge_descriptor Edge
Definition global_cfg_analysis.h:18
const char * getEdgeTypeName(EdgeType Type)
Definition global_cfg_analysis.h:66
@ E
Definition reduce.h:45
Definition global_cfg_analysis.h:92
bool incRet_
Definition global_cfg_analysis.h:111
GlobalCFGNode * From_
Definition global_cfg_analysis.h:107
int32_t toEvtIdx_
Definition global_cfg_analysis.h:110
EdgeType Type_
Definition global_cfg_analysis.h:106
Edge Edge_
Definition global_cfg_analysis.h:105
GlobalCFGNode * To_
Definition global_cfg_analysis.h:108
int32_t fromEvtIdx_
Definition global_cfg_analysis.h:109
GlobalCFGEdge(Edge E, EdgeType type, GlobalCFGNode *from, GlobalCFGNode *to, int32_t fromEvtIdx=-1, bool incRet=false, int32_t toEvtIdx=-1)
Definition global_cfg_analysis.h:93
Definition global_cfg_analysis.h:26
CfgSpecialType specialType_
Definition global_cfg_analysis.h:50
uint32_t modId_
Definition global_cfg_analysis.h:34
int32_t last_bb_insn_idx_
Definition global_cfg_analysis.h:44
std::string Name_
Definition global_cfg_analysis.h:37
void print(llvm::raw_ostream &OS)
llvm::Instruction * Inst_
Definition global_cfg_analysis.h:47
llvm::GlobalValue::GUID Id_
Definition global_cfg_analysis.h:36
const sdfg::structured_control_flow::ControlFlowNode * sdfg_node_
Definition global_cfg_analysis.h:40
int64_t funcId_
Definition global_cfg_analysis.h:35
llvm::BasicBlock * BB_
Definition global_cfg_analysis.h:41
uint16_t evtSteps_
Definition global_cfg_analysis.h:48
GlobalCFGNode(Vertex V, uint32_t modId, int64_t funcId)
Definition global_cfg_analysis.h:27
Vertex Vertex_
Definition global_cfg_analysis.h:32
int32_t first_bb_insn_idx_
Definition global_cfg_analysis.h:43
bool suppress_
Definition global_cfg_analysis.h:49
docc::analysis::SDFGHolder * sdfg_
Definition global_cfg_analysis.h:39
llvm::BasicBlock * fused_bb_last_
Definition global_cfg_analysis.h:42
uint32_t node_id_
Definition global_cfg_analysis.h:33
bool last_insn_interesting_
Definition global_cfg_analysis.h:45