[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