ROSE 0.11.145.192
analysis.h
1#include <featureTests.h>
2#ifdef ROSE_ENABLE_SOURCE_ANALYSIS
3
4#ifndef ANALYSIS_H
5#define ANALYSIS_H
6
7#include "VirtualCFGIterator.h"
8#include "cfgUtils.h"
9#include "CallGraphTraverse.h"
10#include "analysisCommon.h"
11
12class Analysis;
13
14#include "lattice.h"
15#include "nodeState.h"
16#include "variables.h"
17#include "varSets.h"
18#include <vector>
19#include <set>
20#include <map>
21
22extern int analysisDebugLevel;
23
25{
26 public:
27 // a filter function to decide which raw CFG node to show (if return true) or hide (otherwise)
28 // This is required to support custom filters of virtual CFG
29 // Custom filter is set inside the intra-procedural analysis.
30 // Inter-procedural analysis will copy the filter from its intra-procedural analysis during the call to its constructor.
31 bool (*filter) (CFGNode cfgn);
32 Analysis(bool (*f)(CFGNode) = defaultFilter):filter(f) {}
33};
34
36
37class IntraProceduralAnalysis : virtual public Analysis
38{
39 protected:
40 InterProceduralAnalysis* interAnalysis;
41
42 public:
43 void setInterAnalysis(InterProceduralAnalysis* interAnalysis)
44 { this->interAnalysis = interAnalysis; }
45
46 // runs the intra-procedural analysis on the given function, returns true if
47 // the function's NodeState gets modified as a result and false otherwise
48 // state - the function's NodeState
49 virtual bool runAnalysis(const Function& func, NodeState* state)=0;
50
52};
53
54class InterProceduralAnalysis : virtual public Analysis
55{
56 protected:
57 IntraProceduralAnalysis* intraAnalysis;
58
60 {
61 this->intraAnalysis = intraAnalysis;
62 // inform the intra-procedural analysis that this inter-procedural analysis will be running it
63 intraAnalysis->setInterAnalysis(this);
64 }
65
66 virtual void runAnalysis()=0;
67
69};
70
71/********************************
72 *** UnstructuredPassAnalyses ***
73 ********************************/
74
75// A driver class which simply iterates through all CFG nodes of a specified function
77{
78 public:
79 // runs the intra-procedural analysis on the given function, returns true if
80 // the function's NodeState gets modified as a result and false otherwise
81 // state - the function's NodeState
82 bool runAnalysis(const Function& func, NodeState* state);
83
84 virtual void visit(const Function& func, const DataflowNode& n, NodeState& state)=0;
85};
86// A driver class which simply iterates all function definitions one by one and call intra-procedural analysis on each of them.
88{
89 public:
91 { }
92
93 void runAnalysis();
94};
95
96#endif
97#endif
A node in the control flow graph.
Definition virtualCFG.h:70