Lines Matching defs:GV
435 auto mayPreserveGlobal = [&](GlobalValue &GV) {
436 if (!GV.isDiscardableIfUnused() || GV.isDeclaration() ||
437 !mustPreserveGV(GV))
439 if (GV.hasAvailableExternallyLinkage())
442 GV.getName() + "'").str());
443 if (GV.hasInternalLinkage())
445 GV.getName() + "'").str());
446 Used.push_back(&GV);
448 for (auto &GV : TheModule)
449 mayPreserveGlobal(GV);
450 for (auto &GV : TheModule.globals())
451 mayPreserveGlobal(GV);
452 for (auto &GV : TheModule.aliases())
453 mayPreserveGlobal(GV);
469 auto mustPreserveGV = [&](const GlobalValue &GV) -> bool {
471 if (!GV.hasName())
474 // Need to mangle the GV as the "MustPreserveSymbols" StringSet is filled
478 MangledName.reserve(GV.getName().size() + 1);
479 Mang.getNameWithPrefix(MangledName, &GV, /*CannotUsePrivateLabel=*/false);
493 auto RecordLinkage = [&](const GlobalValue &GV) {
494 if (!GV.hasAvailableExternallyLinkage() && !GV.hasLocalLinkage() &&
495 GV.hasName())
496 ExternalSymbols.insert(std::make_pair(GV.getName(), GV.getLinkage()));
498 for (auto &GV : *MergedModule)
499 RecordLinkage(GV);
500 for (auto &GV : MergedModule->globals())
501 RecordLinkage(GV);
502 for (auto &GV : MergedModule->aliases())
503 RecordLinkage(GV);
526 auto externalize = [this](GlobalValue &GV) {
527 if (!GV.hasLocalLinkage() || !GV.hasName())
530 auto I = ExternalSymbols.find(GV.getName());
534 GV.setLinkage(I->second);