OSDN Git Service

Fix a bug in the safety analysis routine
authorChris Lattner <sabre@nondot.org>
Thu, 7 Oct 2004 06:01:25 +0000 (06:01 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 7 Oct 2004 06:01:25 +0000 (06:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16804 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/GlobalOpt.cpp

index 8e563cb..74e5649 100644 (file)
@@ -69,6 +69,9 @@ static bool AnalyzeGlobal(Value *V, GlobalStatus &GS,
       if (isa<LoadInst>(I)) {
         GS.isLoaded = true;
       } else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
+        // Don't allow a store OF the address, only stores TO the address.
+        if (SI->getOperand(0) == V) return true;
+
         // If this store is just storing the initializer into a global (i.e. not
         // changing the value), ignore it.  For now we just handle direct
         // stores, no stores to fields of aggregates.
@@ -239,9 +242,6 @@ bool GlobalOpt::runOnModule(Module &M) {
           
           ++NumMarked;
           Changed = true;
-        } else if (!GS.isNotSuitableForSRA &&
-                   !GV->getInitializer()->getType()->isFirstClassType()) {
-          //std::cerr << "COULD SRA: " << *GV;
         }
       }
     }