diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-11-22 17:09:34 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-11-22 17:09:34 +0000 |
commit | 4be5f33f6558438e6b104f9c74bf035bb77bdc10 (patch) | |
tree | 53dbc725b9c52bf64916f8150d088ca256ee5e89 /lib | |
parent | 0f778794c84e7c350f4f84f0b448c1e10618dc74 (diff) | |
download | llvm-4be5f33f6558438e6b104f9c74bf035bb77bdc10.tar.gz llvm-4be5f33f6558438e6b104f9c74bf035bb77bdc10.tar.bz2 llvm-4be5f33f6558438e6b104f9c74bf035bb77bdc10.tar.xz |
Revert "Convert linkonce* to weak* instead of strong."
This reverts commit r195470.
Debugging failure in some bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195472 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/IPO/ExtractGV.cpp | 54 |
1 files changed, 17 insertions, 37 deletions
diff --git a/lib/Transforms/IPO/ExtractGV.cpp b/lib/Transforms/IPO/ExtractGV.cpp index 07b05ee38a..fa3d72ddcf 100644 --- a/lib/Transforms/IPO/ExtractGV.cpp +++ b/lib/Transforms/IPO/ExtractGV.cpp @@ -21,38 +21,6 @@ #include <algorithm> using namespace llvm; -/// Make sure GV is visible from both modules. Delete is true if it is -/// being deleted from this module. -/// This also makes sure GV cannot be dropped so that references from -/// the split module remain valid. -static void makeVisible(GlobalValue &GV, bool Delete) { - bool Local = GV.hasLocalLinkage(); - if (Local) - GV.setVisibility(GlobalValue::HiddenVisibility); - - if (Local || Delete) { - GV.setLinkage(GlobalValue::ExternalLinkage); - return; - } - - if (!GV.hasLinkOnceLinkage()) { - assert(!GV.isDiscardableIfUnused()); - return; - } - - // Map linkonce* to weak* so that llvm doesn't drop this GV. - switch(GV.getLinkage()) { - default: - llvm_unreachable("Unexpected linkage"); - case GlobalValue::LinkOnceAnyLinkage: - GV.setLinkage(GlobalValue::WeakAnyLinkage); - return; - case GlobalValue::LinkOnceODRLinkage: - GV.setLinkage(GlobalValue::WeakODRLinkage); - return; - } -} - namespace { /// @brief A pass to extract specific functions and their dependencies. class GVExtractorPass : public ModulePass { @@ -92,7 +60,12 @@ namespace { continue; } - makeVisible(*I, Delete); + bool Local = I->isDiscardableIfUnused(); + if (Local) + I->setVisibility(GlobalValue::HiddenVisibility); + + if (Local || Delete) + I->setLinkage(GlobalValue::ExternalLinkage); if (Delete) I->setInitializer(0); @@ -107,7 +80,12 @@ namespace { continue; } - makeVisible(*I, Delete); + bool Local = I->isDiscardableIfUnused(); + if (Local) + I->setVisibility(GlobalValue::HiddenVisibility); + + if (Local || Delete) + I->setLinkage(GlobalValue::ExternalLinkage); if (Delete) I->deleteBody(); @@ -119,10 +97,12 @@ namespace { Module::alias_iterator CurI = I; ++I; - bool Delete = deleteStuff == (bool)Named.count(CurI); - makeVisible(*I, Delete); + if (CurI->isDiscardableIfUnused()) { + CurI->setVisibility(GlobalValue::HiddenVisibility); + CurI->setLinkage(GlobalValue::ExternalLinkage); + } - if (Delete) { + if (deleteStuff == (bool)Named.count(CurI)) { Type *Ty = CurI->getType()->getElementType(); CurI->removeFromParent(); |