aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/DataStructure/DataStructure.cpp
diff options
context:
space:
mode:
authorAndrew Lenharth <andrewl@lenharth.org>2006-03-15 05:43:41 +0000
committerAndrew Lenharth <andrewl@lenharth.org>2006-03-15 05:43:41 +0000
commitfb4df2055fbe81ffb8b9902c04070bc2f9640515 (patch)
tree2c2936a0dd0d607cb146f6c15c8d0a79e2bf9480 /llvm/lib/Analysis/DataStructure/DataStructure.cpp
parent2e1fde7c5cbd52e97c394a5099e43548a0d087e4 (diff)
downloadllvm-fb4df2055fbe81ffb8b9902c04070bc2f9640515.zip
llvm-fb4df2055fbe81ffb8b9902c04070bc2f9640515.tar.gz
llvm-fb4df2055fbe81ffb8b9902c04070bc2f9640515.tar.bz2
allow field sensitivity to be a tunable parameter
llvm-svn: 26777
Diffstat (limited to 'llvm/lib/Analysis/DataStructure/DataStructure.cpp')
-rw-r--r--llvm/lib/Analysis/DataStructure/DataStructure.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/DataStructure/DataStructure.cpp b/llvm/lib/Analysis/DataStructure/DataStructure.cpp
index bd1757d..7fabdf2 100644
--- a/llvm/lib/Analysis/DataStructure/DataStructure.cpp
+++ b/llvm/lib/Analysis/DataStructure/DataStructure.cpp
@@ -39,6 +39,10 @@ namespace {
Statistic<> NumDNE ("dsa", "Number of nodes removed by reachability");
Statistic<> NumTrivialDNE ("dsa", "Number of nodes trivially removed");
Statistic<> NumTrivialGlobalDNE("dsa", "Number of globals trivially removed");
+ static cl::opt<unsigned>
+ DSAFieldLimit("dsa-field-limit", cl::Hidden,
+ cl::desc("Number of fields to track before collapsing a node"),
+ cl::init(256));
};
#if 0
@@ -468,7 +472,7 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
// collapse it. This can occur for fortran common blocks, which have stupid
// things like { [100000000 x double], [1000000 x double] }.
unsigned NumFields = (NewTySize+DS::PointerSize-1) >> DS::PointerShift;
- if (NumFields > 256) {
+ if (NumFields > DSAFieldLimit) {
foldNodeCompletely();
return true;
}
@@ -496,7 +500,7 @@ bool DSNode::mergeTypeInfo(const Type *NewTy, unsigned Offset,
// collapse it. This can occur for fortran common blocks, which have stupid
// things like { [100000000 x double], [1000000 x double] }.
unsigned NumFields = (NewTySize+Offset+DS::PointerSize-1) >> DS::PointerShift;
- if (NumFields > 256) {
+ if (NumFields > DSAFieldLimit) {
foldNodeCompletely();
return true;
}