ROSE
0.9.6a
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
analysis.h
Go to the documentation of this file.
1
#ifndef ANALYSIS_H
2
#define ANALYSIS_H
3
4
#include "
VirtualCFGIterator.h
"
5
#include "
cfgUtils.h
"
6
#include "
CallGraphTraverse.h
"
7
#include "
analysisCommon.h
"
8
9
class
Analysis
;
10
11
#include "
lattice.h
"
12
#include "
nodeState.h
"
13
#include "
variables.h
"
14
#include "
varSets.h
"
15
#include <vector>
16
#include <set>
17
#include <map>
18
19
extern
int
analysisDebugLevel
;
20
21
class
Analysis
22
{
23
public
:
24
// a filter function to decide which raw CFG node to show (if return true) or hide (otherwise)
25
// This is required to support custom filters of virtual CFG
26
// Custom filter is set inside the intra-procedural analysis.
27
// Inter-procedural analysis will copy the filter from its intra-procedural analysis during the call to its constructor.
28
bool (*
filter
) (
CFGNode
cfgn);
29
Analysis
(
bool
(*f)(
CFGNode
) =
defaultFilter
):
filter
(f) {}
30
};
31
32
class
InterProceduralAnalysis
;
33
34
class
IntraProceduralAnalysis
:
virtual
public
Analysis
35
{
36
protected
:
37
InterProceduralAnalysis
*
interAnalysis
;
38
39
public
:
40
void
setInterAnalysis
(
InterProceduralAnalysis
*
interAnalysis
)
41
{ this->interAnalysis =
interAnalysis
; }
42
43
// runs the intra-procedural analysis on the given function, returns true if
44
// the function's NodeState gets modified as a result and false otherwise
45
// state - the function's NodeState
46
virtual
bool
runAnalysis
(
const
Function
& func,
NodeState
* state)=0;
47
48
virtual
~IntraProceduralAnalysis
();
49
};
50
51
class
InterProceduralAnalysis
:
virtual
public
Analysis
52
{
53
protected
:
54
IntraProceduralAnalysis
*
intraAnalysis
;
55
56
InterProceduralAnalysis
(
IntraProceduralAnalysis
*
intraAnalysis
)
57
{
58
this->intraAnalysis =
intraAnalysis
;
59
// inform the intra-procedural analysis that this inter-procedural analysis will be running it
60
intraAnalysis->
setInterAnalysis
(
this
);
61
}
62
63
virtual
void
runAnalysis
()=0;
64
65
virtual
~InterProceduralAnalysis
();
66
};
67
68
/********************************
69
*** UnstructuredPassAnalyses ***
70
********************************/
71
72
// A driver class which simply iterates through all CFG nodes of a specified function
73
class
UnstructuredPassIntraAnalysis
:
virtual
public
IntraProceduralAnalysis
74
{
75
public
:
76
// runs the intra-procedural analysis on the given function, returns true if
77
// the function's NodeState gets modified as a result and false otherwise
78
// state - the function's NodeState
79
bool
runAnalysis
(
const
Function
& func,
NodeState
* state);
80
81
virtual
void
visit
(
const
Function
& func,
const
DataflowNode
& n,
NodeState
& state)=0;
82
};
83
// A driver class which simply iterates all function definitions one by one and call intra-procedural analysis on each of them.
84
class
UnstructuredPassInterAnalysis
:
virtual
public
InterProceduralAnalysis
85
{
86
public
:
87
UnstructuredPassInterAnalysis
(
IntraProceduralAnalysis
&
intraAnalysis
) :
InterProceduralAnalysis
(&intraAnalysis)
88
{ }
89
90
void
runAnalysis
();
91
};
92
93
#endif
rose-edg4x
src
midend
programAnalysis
genericDataflow
analysis
analysis.h
Generated on Mon May 5 2014 17:28:48 for ROSE by
1.8.4