Make the code generator rip of dead constant expr uses before deciding
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
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index fd71ba9..dcfa7a5 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -418,18 +418,24 @@
   
   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;