aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-04-17 03:24:47 +0000
committerChris Lattner <sabre@nondot.org>2002-04-17 03:24:47 +0000
commita146183c2105911eade774490650389924dae524 (patch)
tree4c437f70c71290f1cc72f0716a96d99e9bfc0475 /include
parent4a94a702508c97f36dfd19eb6ee8e02848007684 (diff)
downloadexternal_llvm-a146183c2105911eade774490650389924dae524.zip
external_llvm-a146183c2105911eade774490650389924dae524.tar.gz
external_llvm-a146183c2105911eade774490650389924dae524.tar.bz2
Make data structure acurately get ALL edges, even loads of null fields of
nodes that are not shadow nodes git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2273 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Analysis/DataStructure.h22
-rw-r--r--include/llvm/Analysis/DataStructure/DataStructure.h22
2 files changed, 24 insertions, 20 deletions
diff --git a/include/llvm/Analysis/DataStructure.h b/include/llvm/Analysis/DataStructure.h
index e619f6b..0474da1 100644
--- a/include/llvm/Analysis/DataStructure.h
+++ b/include/llvm/Analysis/DataStructure.h
@@ -20,6 +20,7 @@ class GlobalValue;
class FunctionDSGraph;
class DataStructure;
class DSNodeIterator;
+class ShadowDSNode;
// FIXME: move this somewhere private
unsigned countPointerFields(const Type *Ty);
@@ -113,6 +114,8 @@ class DSNode {
std::vector<PointerValSet> FieldLinks;
std::vector<Value*> Pointers; // Values pointing to me...
std::vector<PointerValSet*> Referrers;
+
+ std::vector<std::pair<const Type *, ShadowDSNode *> > SynthNodes;
DSNode(const DSNode &); // DO NOT IMPLEMENT
void operator=(const DSNode &); // DO NOT IMPLEMENT
@@ -186,6 +189,10 @@ public:
return New;
}
+ // synthesizeNode - Create a new shadow node that is to be linked into this
+ // chain..
+ //
+ ShadowDSNode *synthesizeNode(const Type *Ty, FunctionRepBuilder *Rep);
virtual void dropAllReferences() {
FieldLinks.clear();
@@ -320,30 +327,25 @@ private:
//
class ShadowDSNode : public DSNode {
friend class FunctionDSGraph;
+ friend class FunctionRepBuilder;
Module *Mod;
- ShadowDSNode *ShadowParent; // Nonnull if this is a synthesized node...
- std::vector<std::pair<const Type *, ShadowDSNode *> > SynthNodes;
+ DSNode *ShadowParent; // Nonnull if this is a synthesized node...
public:
ShadowDSNode(const Type *Ty, Module *M);
virtual std::string getCaption() const;
- // synthesizeNode - Create a new shadow node that is to be linked into this
- // chain..
- //
- ShadowDSNode *synthesizeNode(const Type *Ty, FunctionRepBuilder *Rep);
-
// isEquivalentTo - Return true if the nodes should be merged...
virtual bool isEquivalentTo(DSNode *Node) const;
+ DSNode *getShadowParent() const { return ShadowParent; }
+
// Support type inquiry through isa, cast, and dyn_cast...
static bool classof(const ShadowDSNode *) { return true; }
static bool classof(const DSNode *N) { return N->NodeType == ShadowNode; }
private:
- ShadowDSNode(const Type *Ty, Module *M, ShadowDSNode *ShadParent);
+ ShadowDSNode(const Type *Ty, Module *M, DSNode *ShadParent);
protected:
- virtual void mapNode(std::map<const DSNode*, DSNode*> &NodeMap,
- const DSNode *Old);
virtual ShadowDSNode *cloneImpl() const {
if (ShadowParent)
return new ShadowDSNode(getType(), Mod, ShadowParent);
diff --git a/include/llvm/Analysis/DataStructure/DataStructure.h b/include/llvm/Analysis/DataStructure/DataStructure.h
index e619f6b..0474da1 100644
--- a/include/llvm/Analysis/DataStructure/DataStructure.h
+++ b/include/llvm/Analysis/DataStructure/DataStructure.h
@@ -20,6 +20,7 @@ class GlobalValue;
class FunctionDSGraph;
class DataStructure;
class DSNodeIterator;
+class ShadowDSNode;
// FIXME: move this somewhere private
unsigned countPointerFields(const Type *Ty);
@@ -113,6 +114,8 @@ class DSNode {
std::vector<PointerValSet> FieldLinks;
std::vector<Value*> Pointers; // Values pointing to me...
std::vector<PointerValSet*> Referrers;
+
+ std::vector<std::pair<const Type *, ShadowDSNode *> > SynthNodes;
DSNode(const DSNode &); // DO NOT IMPLEMENT
void operator=(const DSNode &); // DO NOT IMPLEMENT
@@ -186,6 +189,10 @@ public:
return New;
}
+ // synthesizeNode - Create a new shadow node that is to be linked into this
+ // chain..
+ //
+ ShadowDSNode *synthesizeNode(const Type *Ty, FunctionRepBuilder *Rep);
virtual void dropAllReferences() {
FieldLinks.clear();
@@ -320,30 +327,25 @@ private:
//
class ShadowDSNode : public DSNode {
friend class FunctionDSGraph;
+ friend class FunctionRepBuilder;
Module *Mod;
- ShadowDSNode *ShadowParent; // Nonnull if this is a synthesized node...
- std::vector<std::pair<const Type *, ShadowDSNode *> > SynthNodes;
+ DSNode *ShadowParent; // Nonnull if this is a synthesized node...
public:
ShadowDSNode(const Type *Ty, Module *M);
virtual std::string getCaption() const;
- // synthesizeNode - Create a new shadow node that is to be linked into this
- // chain..
- //
- ShadowDSNode *synthesizeNode(const Type *Ty, FunctionRepBuilder *Rep);
-
// isEquivalentTo - Return true if the nodes should be merged...
virtual bool isEquivalentTo(DSNode *Node) const;
+ DSNode *getShadowParent() const { return ShadowParent; }
+
// Support type inquiry through isa, cast, and dyn_cast...
static bool classof(const ShadowDSNode *) { return true; }
static bool classof(const DSNode *N) { return N->NodeType == ShadowNode; }
private:
- ShadowDSNode(const Type *Ty, Module *M, ShadowDSNode *ShadParent);
+ ShadowDSNode(const Type *Ty, Module *M, DSNode *ShadParent);
protected:
- virtual void mapNode(std::map<const DSNode*, DSNode*> &NodeMap,
- const DSNode *Old);
virtual ShadowDSNode *cloneImpl() const {
if (ShadowParent)
return new ShadowDSNode(getType(), Mod, ShadowParent);