[llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp
Chris Lattner
lattner at cs.uiuc.edu
Wed Feb 25 17:37:02 PST 2004
Changes in directory llvm/lib/Analysis/DataStructure:
DataStructure.cpp updated: 1.159 -> 1.160
---
Log message:
Two changes:
1. Functions do not make things incomplete, only variables
2. Constant global variables no longer need to be marked incomplete, because
we are guaranteed that the initializer for the global will be in the
graph we are hacking on now. This makes resolution of indirect calls happen
a lot more in the bu pass, supports things like vtables and the C counterparts
(giant constant arrays of function pointers), etc...
Testcase here: test/Regression/Analysis/DSGraph/constant_globals.ll
---
Diffs of the changes: (+4 -1)
Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp
diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.159 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.160
--- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.159 Wed Feb 25 17:08:00 2004
+++ llvm/lib/Analysis/DataStructure/DataStructure.cpp Wed Feb 25 17:36:08 2004
@@ -13,6 +13,7 @@
#include "llvm/Analysis/DSGraph.h"
#include "llvm/Function.h"
+#include "llvm/GlobalVariable.h"
#include "llvm/iOther.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Target/TargetData.h"
@@ -1353,7 +1354,9 @@
if ((Flags & DSGraph::IgnoreGlobals) == 0)
for (DSScalarMap::global_iterator I = ScalarMap.global_begin(),
E = ScalarMap.global_end(); I != E; ++I)
- markIncompleteNode(ScalarMap[*I].getNode());
+ if (GlobalVariable *GV = dyn_cast<GlobalVariable>(*I))
+ if (!GV->isConstant())
+ markIncompleteNode(ScalarMap[GV].getNode());
}
static inline void killIfUselessEdge(DSNodeHandle &Edge) {
More information about the llvm-commits
mailing list