-void partition(Module &M, const ModulePartitionMap &PMap) {
-
- GlobalRenamer Renamer;
-
- for (auto &KVPair : PMap) {
-
- auto ExtractGlobalVars =
- [&](GlobalVariable &New, const GlobalVariable &Orig,
- ValueToValueMapTy &VMap) {
- if (KVPair.second.count(&Orig)) {
- copyGVInitializer(New, Orig, VMap);
- }
- if (New.hasLocalLinkage()) {
- if (Renamer.needsRenaming(New))
- New.setName(Renamer.getRename(Orig));
- New.setLinkage(GlobalValue::ExternalLinkage);
- New.setVisibility(GlobalValue::HiddenVisibility);
- }
- assert(!Renamer.needsRenaming(New) && "Invalid global name.");
- };
-
- auto ExtractFunctions =
- [&](Function &New, const Function &Orig, ValueToValueMapTy &VMap) {
- if (KVPair.second.count(&Orig))
- copyFunctionBody(New, Orig, VMap);
- if (New.hasLocalLinkage()) {
- if (Renamer.needsRenaming(New))
- New.setName(Renamer.getRename(Orig));
- New.setLinkage(GlobalValue::ExternalLinkage);
- New.setVisibility(GlobalValue::HiddenVisibility);
- }
- assert(!Renamer.needsRenaming(New) && "Invalid function name.");
- };
-
- CloneSubModule(*KVPair.first, M, ExtractGlobalVars, ExtractFunctions,
- false);
+static void raiseVisibilityOnValue(GlobalValue &V, GlobalRenamer &R) {
+ if (V.hasLocalLinkage()) {
+ if (R.needsRenaming(V))
+ V.setName(R.getRename(V));
+ V.setLinkage(GlobalValue::ExternalLinkage);
+ V.setVisibility(GlobalValue::HiddenVisibility);