Make the code generator rip of dead constant expr uses before deciding
authorChris Lattner <sabre@nondot.org>
Mon, 9 Mar 2009 05:52:15 +0000 (05:52 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 9 Mar 2009 05:52:15 +0000 (05:52 +0000)
whether a global is dead or not.  This should fix PR3749 - linker adds
spurious use to appending globals.  I can't reasonably add a testcase
for this, because the bc writer/reader strip dead constant users.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66404 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinter.cpp

index fd71ba971e716e26b98d5e7fa606366d5040eddf..dcfa7a5961d1370b592af6749a91f0c9bb81a4a1 100644 (file)
@@ -418,18 +418,24 @@ bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
   
   const TargetData *TD = TM.getTargetData();
   unsigned Align = Log2_32(TD->getPointerPrefAlignment());
-  if (GV->getName() == "llvm.global_ctors" && GV->use_empty()) {
-    SwitchToDataSection(TAI->getStaticCtorsSection());
-    EmitAlignment(Align, 0);
-    EmitXXStructorList(GV->getInitializer());
-    return true;
+  if (GV->getName() == "llvm.global_ctors") {
+    GV->removeDeadConstantUsers();
+    if (GV->use_empty()) {
+      SwitchToDataSection(TAI->getStaticCtorsSection());
+      EmitAlignment(Align, 0);
+      EmitXXStructorList(GV->getInitializer());
+      return true;
+    }
   } 
   
-  if (GV->getName() == "llvm.global_dtors" && GV->use_empty()) {
-    SwitchToDataSection(TAI->getStaticDtorsSection());
-    EmitAlignment(Align, 0);
-    EmitXXStructorList(GV->getInitializer());
-    return true;
+  if (GV->getName() == "llvm.global_dtors") {
+    GV->removeDeadConstantUsers();
+    if (GV->use_empty()) {
+      SwitchToDataSection(TAI->getStaticDtorsSection());
+      EmitAlignment(Align, 0);
+      EmitXXStructorList(GV->getInitializer());
+      return true;
+    }
   }
   
   return false;