From 5f7ddb1456d5b926e85710da690bf548ef0c9fc8 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sun, 22 Aug 2021 21:00:43 +0200 Subject: Merge llvm-project main llvmorg-13-init-16847-g88e66fa60ae5 This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-13-init-16847-g88e66fa60ae5, the last commit before the upstream release/13.x branch was created. PR: 258209 (cherry picked from commit fe6060f10f634930ff71b7c50291ddc610da2475) --- .../llvm/lib/Analysis/ModuleSummaryAnalysis.cpp | 63 +++++++++++----------- 1 file changed, 30 insertions(+), 33 deletions(-) (limited to 'contrib/llvm-project/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp') diff --git a/contrib/llvm-project/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp b/contrib/llvm-project/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp index 5f7746eeed15..e43553222128 100644 --- a/contrib/llvm-project/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp +++ b/contrib/llvm-project/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp @@ -50,6 +50,7 @@ #include "llvm/Pass.h" #include "llvm/Support/Casting.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/FileSystem.h" #include #include #include @@ -91,14 +92,11 @@ static bool findRefEdges(ModuleSummaryIndex &Index, const User *CurUser, SmallPtrSet &Visited) { bool HasBlockAddress = false; SmallVector Worklist; - Worklist.push_back(CurUser); + if (Visited.insert(CurUser).second) + Worklist.push_back(CurUser); while (!Worklist.empty()) { const User *U = Worklist.pop_back_val(); - - if (!Visited.insert(U).second) - continue; - const auto *CB = dyn_cast(U); for (const auto &OI : U->operands()) { @@ -117,7 +115,8 @@ static bool findRefEdges(ModuleSummaryIndex &Index, const User *CurUser, RefEdges.insert(Index.getOrInsertValueInfo(GV)); continue; } - Worklist.push_back(Operand); + if (Visited.insert(Operand).second) + Worklist.push_back(Operand); } } return HasBlockAddress; @@ -178,11 +177,7 @@ static void addIntrinsicToSummary( // Intrinsics that are assumed are relevant only to the devirtualization // pass, not the type test lowering pass. bool HasNonAssumeUses = llvm::any_of(CI->uses(), [](const Use &CIU) { - auto *AssumeCI = dyn_cast(CIU.getUser()); - if (!AssumeCI) - return true; - Function *F = AssumeCI->getCalledFunction(); - return !F || F->getIntrinsicID() != Intrinsic::assume; + return !isa(CIU.getUser()); }); if (HasNonAssumeUses) TypeTests.insert(Guid); @@ -459,9 +454,10 @@ static void computeFunctionSummary( bool NonRenamableLocal = isNonRenamableLocal(F); bool NotEligibleForImport = NonRenamableLocal || HasInlineAsmMaybeReferencingInternal; - GlobalValueSummary::GVFlags Flags(F.getLinkage(), NotEligibleForImport, - /* Live = */ false, F.isDSOLocal(), - F.hasLinkOnceODRLinkage() && F.hasGlobalUnnamedAddr()); + GlobalValueSummary::GVFlags Flags( + F.getLinkage(), F.getVisibility(), NotEligibleForImport, + /* Live = */ false, F.isDSOLocal(), + F.hasLinkOnceODRLinkage() && F.hasGlobalUnnamedAddr()); FunctionSummary::FFlags FunFlags{ F.hasFnAttribute(Attribute::ReadNone), F.hasFnAttribute(Attribute::ReadOnly), @@ -510,10 +506,8 @@ static void findFuncPointers(const Constant *I, uint64_t StartingOffset, assert(STy); const StructLayout *SL = DL.getStructLayout(C->getType()); - for (StructType::element_iterator EB = STy->element_begin(), EI = EB, - EE = STy->element_end(); - EI != EE; ++EI) { - auto Offset = SL->getElementOffset(EI - EB); + for (auto EI : llvm::enumerate(STy->elements())) { + auto Offset = SL->getElementOffset(EI.index()); unsigned Op = SL->getElementContainingOffset(Offset); findFuncPointers(cast(I->getOperand(Op)), StartingOffset + Offset, M, Index, VTableFuncs); @@ -580,9 +574,10 @@ static void computeVariableSummary(ModuleSummaryIndex &Index, SmallPtrSet Visited; bool HasBlockAddress = findRefEdges(Index, &V, RefEdges, Visited); bool NonRenamableLocal = isNonRenamableLocal(V); - GlobalValueSummary::GVFlags Flags(V.getLinkage(), NonRenamableLocal, - /* Live = */ false, V.isDSOLocal(), - V.hasLinkOnceODRLinkage() && V.hasGlobalUnnamedAddr()); + GlobalValueSummary::GVFlags Flags( + V.getLinkage(), V.getVisibility(), NonRenamableLocal, + /* Live = */ false, V.isDSOLocal(), + V.hasLinkOnceODRLinkage() && V.hasGlobalUnnamedAddr()); VTableFuncList VTableFuncs; // If splitting is not enabled, then we compute the summary information @@ -622,9 +617,10 @@ static void computeAliasSummary(ModuleSummaryIndex &Index, const GlobalAlias &A, DenseSet &CantBePromoted) { bool NonRenamableLocal = isNonRenamableLocal(A); - GlobalValueSummary::GVFlags Flags(A.getLinkage(), NonRenamableLocal, - /* Live = */ false, A.isDSOLocal(), - A.hasLinkOnceODRLinkage() && A.hasGlobalUnnamedAddr()); + GlobalValueSummary::GVFlags Flags( + A.getLinkage(), A.getVisibility(), NonRenamableLocal, + /* Live = */ false, A.isDSOLocal(), + A.hasLinkOnceODRLinkage() && A.hasGlobalUnnamedAddr()); auto AS = std::make_unique(Flags); auto *Aliasee = A.getBaseObject(); auto AliaseeVI = Index.getValueInfo(Aliasee->getGUID()); @@ -661,12 +657,12 @@ ModuleSummaryIndex llvm::buildModuleSummaryIndex( // promotion, but we may have opaque uses e.g. in inline asm. We collect them // here because we use this information to mark functions containing inline // assembly calls as not importable. - SmallPtrSet LocalsUsed; - SmallPtrSet Used; + SmallPtrSet LocalsUsed; + SmallVector Used; // First collect those in the llvm.used set. - collectUsedGlobalVariables(M, Used, /*CompilerUsed*/ false); + collectUsedGlobalVariables(M, Used, /*CompilerUsed=*/false); // Next collect those in the llvm.compiler.used set. - collectUsedGlobalVariables(M, Used, /*CompilerUsed*/ true); + collectUsedGlobalVariables(M, Used, /*CompilerUsed=*/true); DenseSet CantBePromoted; for (auto *V : Used) { if (V->hasLocalLinkage()) { @@ -697,11 +693,12 @@ ModuleSummaryIndex llvm::buildModuleSummaryIndex( if (!GV) return; assert(GV->isDeclaration() && "Def in module asm already has definition"); - GlobalValueSummary::GVFlags GVFlags(GlobalValue::InternalLinkage, - /* NotEligibleToImport = */ true, - /* Live = */ true, - /* Local */ GV->isDSOLocal(), - GV->hasLinkOnceODRLinkage() && GV->hasGlobalUnnamedAddr()); + GlobalValueSummary::GVFlags GVFlags( + GlobalValue::InternalLinkage, GlobalValue::DefaultVisibility, + /* NotEligibleToImport = */ true, + /* Live = */ true, + /* Local */ GV->isDSOLocal(), + GV->hasLinkOnceODRLinkage() && GV->hasGlobalUnnamedAddr()); CantBePromoted.insert(GV->getGUID()); // Create the appropriate summary type. if (Function *F = dyn_cast(GV)) { -- cgit v1.2.3