Improve the handling of available_externally and llvm.global_ctors.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 9 Jun 2011 14:38:09 +0000 (14:38 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 9 Jun 2011 14:38:09 +0000 (14:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132775 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/ExtractGV.cpp

index 9d432de9fa7b7fd7704ba3291c735e6e8ff85783..d9911bfb4597e7935d5e7d1595e6c275623d4ff2 100644 (file)
@@ -51,20 +51,32 @@ namespace {
       // Visit the GlobalVariables.
       for (Module::global_iterator I = M.global_begin(), E = M.global_end();
            I != E; ++I) {
+        if (deleteStuff == (bool)Named.count(I) && !I->isDeclaration()) {
+          I->setInitializer(0);
+       } else {
+         if (I->hasAvailableExternallyLinkage())
+           continue;
+         if (I->getName() == "llvm.global_ctors")
+           continue;
+       }
+
         if (I->hasLocalLinkage())
           I->setVisibility(GlobalValue::HiddenVisibility);
         I->setLinkage(GlobalValue::ExternalLinkage);
-        if (deleteStuff == (bool)Named.count(I) && !I->isDeclaration())
-          I->setInitializer(0);
       }
 
       // Visit the Functions.
       for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
+        if (deleteStuff == (bool)Named.count(I) && !I->isDeclaration()) {
+          I->deleteBody();
+       } else {
+         if (I->hasAvailableExternallyLinkage())
+           continue;
+       }
+
         if (I->hasLocalLinkage())
           I->setVisibility(GlobalValue::HiddenVisibility);
         I->setLinkage(GlobalValue::ExternalLinkage);
-        if (deleteStuff == (bool)Named.count(I) && !I->isDeclaration())
-          I->deleteBody();
       }
 
       return true;