comparison lib/Transforms/IPO/ExtractGV.cpp @ 80:67baa08a3894

update to LLVM 3.6
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Thu, 25 Sep 2014 16:56:18 +0900
parents 54457678186b
children 60c9769439b8
comparison
equal deleted inserted replaced
76:9e74acfe8c42 80:67baa08a3894
25 /// being deleted from this module. 25 /// being deleted from this module.
26 /// This also makes sure GV cannot be dropped so that references from 26 /// This also makes sure GV cannot be dropped so that references from
27 /// the split module remain valid. 27 /// the split module remain valid.
28 static void makeVisible(GlobalValue &GV, bool Delete) { 28 static void makeVisible(GlobalValue &GV, bool Delete) {
29 bool Local = GV.hasLocalLinkage(); 29 bool Local = GV.hasLocalLinkage();
30 if (Local)
31 GV.setVisibility(GlobalValue::HiddenVisibility);
32
33 if (Local || Delete) { 30 if (Local || Delete) {
34 GV.setLinkage(GlobalValue::ExternalLinkage); 31 GV.setLinkage(GlobalValue::ExternalLinkage);
32 if (Local)
33 GV.setVisibility(GlobalValue::HiddenVisibility);
35 return; 34 return;
36 } 35 }
37 36
38 if (!GV.hasLinkOnceLinkage()) { 37 if (!GV.hasLinkOnceLinkage()) {
39 assert(!GV.isDiscardableIfUnused()); 38 assert(!GV.isDiscardableIfUnused());
66 /// possible, except for the function specified. 65 /// possible, except for the function specified.
67 /// 66 ///
68 explicit GVExtractorPass(std::vector<GlobalValue*>& GVs, bool deleteS = true) 67 explicit GVExtractorPass(std::vector<GlobalValue*>& GVs, bool deleteS = true)
69 : ModulePass(ID), Named(GVs.begin(), GVs.end()), deleteStuff(deleteS) {} 68 : ModulePass(ID), Named(GVs.begin(), GVs.end()), deleteStuff(deleteS) {}
70 69
71 bool runOnModule(Module &M) { 70 bool runOnModule(Module &M) override {
72 // Visit the global inline asm. 71 // Visit the global inline asm.
73 if (!deleteStuff) 72 if (!deleteStuff)
74 M.setModuleInlineAsm(""); 73 M.setModuleInlineAsm("");
75 74
76 // For simplicity, just give all GlobalValues ExternalLinkage. A trickier 75 // For simplicity, just give all GlobalValues ExternalLinkage. A trickier
93 } 92 }
94 93
95 makeVisible(*I, Delete); 94 makeVisible(*I, Delete);
96 95
97 if (Delete) 96 if (Delete)
98 I->setInitializer(0); 97 I->setInitializer(nullptr);
99 } 98 }
100 99
101 // Visit the Functions. 100 // Visit the Functions.
102 for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) { 101 for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
103 bool Delete = 102 bool Delete =
132 CurI->getName(), &M); 131 CurI->getName(), &M);
133 132
134 } else { 133 } else {
135 Declaration = 134 Declaration =
136 new GlobalVariable(M, Ty, false, GlobalValue::ExternalLinkage, 135 new GlobalVariable(M, Ty, false, GlobalValue::ExternalLinkage,
137 0, CurI->getName()); 136 nullptr, CurI->getName());
138 137
139 } 138 }
140 CurI->replaceAllUsesWith(Declaration); 139 CurI->replaceAllUsesWith(Declaration);
141 delete CurI; 140 delete CurI;
142 } 141 }