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.

llvm-svn: 66404
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index fd71ba9..dcfa7a5 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/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;