aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/DataStructure/NodeImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Analysis/DataStructure/NodeImpl.cpp')
-rw-r--r--lib/Analysis/DataStructure/NodeImpl.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/Analysis/DataStructure/NodeImpl.cpp b/lib/Analysis/DataStructure/NodeImpl.cpp
index 30bc9d21df..967c67eea0 100644
--- a/lib/Analysis/DataStructure/NodeImpl.cpp
+++ b/lib/Analysis/DataStructure/NodeImpl.cpp
@@ -65,6 +65,13 @@ void DSNode::removeReferrer(PointerValSet *PVS) {
}
+// removeAllIncomingEdges - Erase all edges in the graph that point to this node
+void DSNode::removeAllIncomingEdges() {
+ while (!Referrers.empty())
+ Referrers.back()->removePointerTo(this);
+}
+
+
static void replaceIn(std::string &S, char From, const std::string &To) {
for (unsigned i = 0; i < S.size(); )
if (S[i] == From) {
@@ -145,12 +152,14 @@ NewDSNode::NewDSNode(AllocationInst *V)
: DSNode(NewNode, V->getType()->getElementType()), Allocation(V) {
}
+bool NewDSNode::isAllocaNode() const {
+ return isa<AllocaInst>(Allocation);
+}
+
+
string NewDSNode::getCaption() const {
stringstream OS;
- if (isa<MallocInst>(Allocation))
- OS << "new ";
- else
- OS << "alloca ";
+ OS << (isMallocNode() ? "new " : "alloca ");
WriteTypeSymbolic(OS, getType(),
Allocation->getParent()->getParent()->getParent());
@@ -170,11 +179,12 @@ string GlobalDSNode::getCaption() const {
}
-ShadowDSNode::ShadowDSNode(DSNode *P, Module *M)
+ShadowDSNode::ShadowDSNode(DSNode *P, Module *M, bool C = false)
: DSNode(ShadowNode, cast<PointerType>(P->getType())->getElementType()) {
Parent = P;
Mod = M;
ShadowParent = 0;
+ CriticalNode = C;
}
ShadowDSNode::ShadowDSNode(const Type *Ty, Module *M, ShadowDSNode *ShadParent)
@@ -182,12 +192,16 @@ ShadowDSNode::ShadowDSNode(const Type *Ty, Module *M, ShadowDSNode *ShadParent)
Parent = 0;
Mod = M;
ShadowParent = ShadParent;
+ CriticalNode = false;
}
std::string ShadowDSNode::getCaption() const {
stringstream OS;
+ if (CriticalNode) OS << "# ";
+ OS << "shadow ";
WriteTypeSymbolic(OS, getType(), Mod);
- return "shadow " + OS.str();
+ if (CriticalNode) OS << " #";
+ return OS.str();
}
void ShadowDSNode::mapNode(map<const DSNode*, DSNode*> &NodeMap,