aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/DataStructure/DataStructureStats.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-09-20 16:12:57 +0000
committerChris Lattner <sabre@nondot.org>2003-09-20 16:12:57 +0000
commit192cd9cccd3eb2c030c3a25d636d90b69841868e (patch)
treeebb64342deea2c19f74eaeddf9c726aac31995a1 /lib/Analysis/DataStructure/DataStructureStats.cpp
parent4c6d4d3522e9a26332d66fec4eb38a53aa7bb3bb (diff)
Make this work better for constants that aren't necessarily in ANY graph, such as null pointers
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8628 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure/DataStructureStats.cpp')
-rw-r--r--lib/Analysis/DataStructure/DataStructureStats.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/Analysis/DataStructure/DataStructureStats.cpp b/lib/Analysis/DataStructure/DataStructureStats.cpp
index 887eb7f550..674f689a68 100644
--- a/lib/Analysis/DataStructure/DataStructureStats.cpp
+++ b/lib/Analysis/DataStructure/DataStructureStats.cpp
@@ -33,6 +33,7 @@ namespace {
const DSGraph *TDGraph;
DSNode *getNodeForValue(Value *V);
+ bool isNodeForValueCollapsed(Value *V);
public:
/// Driver functions to compute the Load/Store Dep. Graph per function.
bool runOnFunction(Function& F);
@@ -90,14 +91,24 @@ void DSGraphStats::countCallees(const Function& F) {
DSNode *DSGraphStats::getNodeForValue(Value *V) {
const DSGraph *G = TDGraph;
- if (isa<GlobalValue>(V))
+ if (isa<GlobalValue>(V) || isa<Constant>(V))
G = TDGraph->getGlobalsGraph();
- return G->getNodeForValue(V).getNode();
+ const DSGraph::ScalarMapTy &ScalarMap = G->getScalarMap();
+ DSGraph::ScalarMapTy::const_iterator I = ScalarMap.find(V);
+ if (I != ScalarMap.end())
+ return I->second.getNode();
+ return 0;
+}
+
+bool DSGraphStats::isNodeForValueCollapsed(Value *V) {
+ if (DSNode *N = getNodeForValue(V))
+ return N->isNodeCompletelyFolded();
+ return false;
}
void DSGraphStats::visitLoad(LoadInst &LI) {
- if (getNodeForValue(LI.getOperand(0))->isNodeCompletelyFolded()) {
+ if (isNodeForValueCollapsed(LI.getOperand(0))) {
NumUntypedMemAccesses++;
} else {
NumTypedMemAccesses++;
@@ -105,7 +116,7 @@ void DSGraphStats::visitLoad(LoadInst &LI) {
}
void DSGraphStats::visitStore(StoreInst &SI) {
- if (getNodeForValue(SI.getOperand(1))->isNodeCompletelyFolded()) {
+ if (isNodeForValueCollapsed(SI.getOperand(1))) {
NumUntypedMemAccesses++;
} else {
NumTypedMemAccesses++;