Lines Matching defs:GV
439 auto mayPreserveGlobal = [&](GlobalValue &GV) {
440 if (!GV.isDiscardableIfUnused() || GV.isDeclaration() ||
441 !mustPreserveGV(GV))
443 if (GV.hasAvailableExternallyLinkage())
446 GV.getName() + "'").str());
447 if (GV.hasInternalLinkage())
449 GV.getName() + "'").str());
450 Used.push_back(&GV);
452 for (auto &GV : TheModule)
453 mayPreserveGlobal(GV);
454 for (auto &GV : TheModule.globals())
455 mayPreserveGlobal(GV);
456 for (auto &GV : TheModule.aliases())
457 mayPreserveGlobal(GV);
473 auto mustPreserveGV = [&](const GlobalValue &GV) -> bool {
475 if (!GV.hasName())
478 // Need to mangle the GV as the "MustPreserveSymbols" StringSet is filled
482 MangledName.reserve(GV.getName().size() + 1);
483 Mang.getNameWithPrefix(MangledName, &GV, /*CannotUsePrivateLabel=*/false);
497 auto RecordLinkage = [&](const GlobalValue &GV) {
498 if (!GV.hasAvailableExternallyLinkage() && !GV.hasLocalLinkage() &&
499 GV.hasName())
500 ExternalSymbols.insert(std::make_pair(GV.getName(), GV.getLinkage()));
502 for (auto &GV : *MergedModule)
503 RecordLinkage(GV);
504 for (auto &GV : MergedModule->globals())
505 RecordLinkage(GV);
506 for (auto &GV : MergedModule->aliases())
507 RecordLinkage(GV);
530 auto externalize = [this](GlobalValue &GV) {
531 if (!GV.hasLocalLinkage() || !GV.hasName())
534 auto I = ExternalSymbols.find(GV.getName());
538 GV.setLinkage(I->second);