Mercurial > hg > Members > tobaru > cbc > CbC_llvm
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 } |