X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTransforms%2FIPO%2FExtractGV.cpp;h=b9462f2ffc722d118d1f466e49700a6f648f20e4;hp=4211f122383a8c3e2f05765a72f85ea72013f69b;hb=848219ca612e5488982f23c37c7459aeedff77e3;hpb=7b62be28cbc6cce31852831570a87d9699fbcecd diff --git a/lib/Transforms/IPO/ExtractGV.cpp b/lib/Transforms/IPO/ExtractGV.cpp index 4211f122383..b9462f2ffc7 100644 --- a/lib/Transforms/IPO/ExtractGV.cpp +++ b/lib/Transforms/IPO/ExtractGV.cpp @@ -27,11 +27,10 @@ using namespace llvm; /// 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); + if (Local) + GV.setVisibility(GlobalValue::HiddenVisibility); return; } @@ -92,10 +91,13 @@ namespace { continue; } - makeVisible(*I, Delete); + makeVisible(*I, Delete); - if (Delete) - I->setInitializer(0); + if (Delete) { + // Make this a declaration and drop it's comdat. + I->setInitializer(nullptr); + I->setComdat(nullptr); + } } // Visit the Functions. @@ -107,10 +109,13 @@ namespace { continue; } - makeVisible(*I, Delete); + makeVisible(*I, Delete); - if (Delete) + if (Delete) { + // Make this a declaration and drop it's comdat. I->deleteBody(); + I->setComdat(nullptr); + } } // Visit the Aliases. @@ -119,8 +124,8 @@ namespace { Module::alias_iterator CurI = I; ++I; - bool Delete = deleteStuff == (bool)Named.count(CurI); - makeVisible(*CurI, Delete); + bool Delete = deleteStuff == (bool)Named.count(CurI); + makeVisible(*CurI, Delete); if (Delete) { Type *Ty = CurI->getType()->getElementType(); @@ -134,7 +139,7 @@ namespace { } else { Declaration = new GlobalVariable(M, Ty, false, GlobalValue::ExternalLinkage, - 0, CurI->getName()); + nullptr, CurI->getName()); } CurI->replaceAllUsesWith(Declaration); @@ -149,7 +154,7 @@ namespace { char GVExtractorPass::ID = 0; } -ModulePass *llvm::createGVExtractionPass(std::vector& GVs, +ModulePass *llvm::createGVExtractionPass(std::vector &GVs, bool deleteFn) { return new GVExtractorPass(GVs, deleteFn); }