Static Value-Flow Analysis
Loading...
Searching...
No Matches
AndersenPWC.h
Go to the documentation of this file.
1//===- AndersenSFR.h -- SFR based field-sensitive Andersen's analysis-------------//
2//
3// SVF: Static Value-Flow Analysis
4//
5// Copyright (C) <2013-2017> <Yulei Sui>
6//
7
8// This program is free software: you can redistribute it and/or modify
9// it under the terms of the GNU Affero General Public License as published by
10// the Free Software Foundation, either version 3 of the License, or
11// (at your option) any later version.
12
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU Affero General Public License for more details.
17
18// You should have received a copy of the GNU Affero General Public License
19// along with this program. If not, see <http://www.gnu.org/licenses/>.
20//
21//===----------------------------------------------------------------------===//
22
23/*
24 * AndersenSFR.h
25 *
26 * Created on: 09, Feb, 2019
27 * Author: Yuxiang Lei
28 */
29
30#ifndef PROJECT_ANDERSENSFR_H
31#define PROJECT_ANDERSENSFR_H
32
33
34#include "WPA/Andersen.h"
35#include "WPA/CSC.h"
36#include "MemoryModel/PTATY.h"
37
38namespace SVF
39{
40
41class PointsTo;
42
46class AndersenSCD : public Andersen
47{
48public:
50
51protected:
55
56public:
61
64 {
65 if (scdAndersen == nullptr)
66 {
67 scdAndersen = new AndersenSCD(_pag);
69 return scdAndersen;
70 }
71 return scdAndersen;
72 }
73
74 static void releaseAndersenSCD()
75 {
76 if (scdAndersen)
77 delete scdAndersen;
78 scdAndersen = nullptr;
79 }
80
81protected:
83 {
85 }
86
87 virtual NodeStack& SCCDetect();
88 virtual void PWCDetect();
89 virtual void solveWorklist();
90 virtual void handleLoadStore(ConstraintNode* node);
91 virtual void processAddr(const AddrCGEdge* addr);
92 virtual bool addCopyEdge(NodeID src, NodeID dst);
94 virtual void processPWC(ConstraintNode* rep);
95 virtual void handleCopyGep(ConstraintNode* node);
96
97};
98
99
100
105{
106public:
110
111private:
113
117
118public:
123
126 {
127 if (sfrAndersen == nullptr)
128 {
129 sfrAndersen = new AndersenSFR(_pag);
131 return sfrAndersen;
132 }
133 return sfrAndersen;
134 }
135
136 static void releaseAndersenSFR()
137 {
138 if (sfrAndersen)
139 delete sfrAndersen;
140 }
141
143 {
144 if (csc != nullptr)
145 {
146 delete(csc);
147 csc = nullptr;
148 }
149 }
150
151protected:
152 void initialize();
153 void PWCDetect();
155 bool processGepPts(const PointsTo& pts, const GepCGEdge* edge);
157
158};
159
160} // End namespace SVF
161
162#endif //PROJECT_ANDERSENSFR_H
newitem type
Definition cJSON.cpp:2739
buffer offset
Definition cJSON.cpp:1113
virtual void analyze() override
Andersen analysis.
Definition Andersen.cpp:135
NodeID sccRepNode(NodeID id) const override
SCC methods.
Definition Andersen.h:129
static AndersenSCD * createAndersenSCD(SVFIR *_pag)
Create an singleton instance directly instead of invoking llvm pass manager.
Definition AndersenPWC.h:63
virtual bool addCopyEdge(NodeID src, NodeID dst)
static AndersenSCD * scdAndersen
Definition AndersenPWC.h:52
virtual bool updateCallGraph(const CallSiteToFunPtrMap &callsites)
virtual void processAddr(const AddrCGEdge *addr)
AndersenSCD(SVFIR *_pag, PTATY type=PTATY::AndersenSCD_WPA)
Definition AndersenPWC.h:57
virtual NodeStack & SCCDetect()
virtual void handleLoadStore(ConstraintNode *node)
Map< NodeID, NodeID > NodeToNodeMap
Definition AndersenPWC.h:49
virtual void solveWorklist()
virtual void handleCopyGep(ConstraintNode *node)
virtual void processPWC(ConstraintNode *rep)
static void releaseAndersenSCD()
Definition AndersenPWC.h:74
NodeToNodeMap pwcReps
Definition AndersenPWC.h:54
void addSccCandidate(NodeID nodeId)
Definition AndersenPWC.h:82
NodeSet sccCandidates
Definition AndersenPWC.h:53
virtual void PWCDetect()
Map< NodeID, std::pair< NodeID, NodeSet > > SFRTrait
void initialize()
Initialize analysis.
static void releaseAndersenSFR()
Map< NodeID, NodeSet > FieldReps
bool processGepPts(const PointsTo &pts, const GepCGEdge *edge)
void fieldExpand(NodeSet &initials, APOffset offset, NodeBS &strides, PointsTo &expandPts)
FieldReps fieldReps
AndersenSFR(SVFIR *_pag, PTATY type=PTATY::AndersenSFR_WPA)
static AndersenSFR * sfrAndersen
bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId)
Map< NodeID, NodeBS > NodeStrides
static AndersenSFR * createAndersenSFR(SVFIR *_pag)
Create an singleton instance directly instead of invoking llvm pass manager.
Definition CSC.h:50
SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap
for isBitcode
Definition BasicTypes.h:70
std::stack< NodeID > NodeStack
Definition GeneralType.h:92
Set< NodeID > NodeSet
Definition GeneralType.h:87
PTATY
Pointer analysis type list.
Definition PTATY.h:9
@ AndersenSFR_WPA
Stride-based field representation.
Definition PTATY.h:14
@ AndersenSCD_WPA
Selective cycle detection andersen-style WPA.
Definition PTATY.h:13
u32_t NodeID
Definition GeneralType.h:76
s64_t APOffset
Definition GeneralType.h:80
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76