<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 4, 2021 at 1:15 AM Adrian Kuegel <<a href="mailto:akuegel@google.com">akuegel@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Or at least it was my intention to comment on that change. Looking back, it seems my comment never made it, I guess I didn't press some button or something? I am not very familiar with Phabricator.</div><div>I hope it didn't cause too much trouble to figure out why the revert was needed? At least all the bots with asserts enabled should have been complaining :)</div></div></blockquote><div><br>No big deal for any specific instance - mostly making a point about "next time"/in general. (tracking down buildbots - especially as their logs timeout/get cleaned up/etc can be non-trivial, FWIW)<br><br>- Dave<br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 4, 2021 at 9:54 AM Adrian Kuegel <<a href="mailto:akuegel@google.com" target="_blank">akuegel@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Sorry, forgot to do this in the commit message of the reverts. But I commented on the change I reverted that the tests are failing with asserts enabled.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 3, 2021 at 8:01 PM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Please include information about why a patch is being reverted (eg:<br>
buildbot links and quotes from buildbot logs) in the commit message -<br>
handy for archaeology (seeing that someone else attempted a change and<br>
why it couldn't be done that way) and if someone is wondering if the<br>
failure they're seeing would be addressed by this patch.<br>
<br>
On Tue, Feb 2, 2021 at 2:51 AM Adrian Kuegel via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
><br>
> Author: Adrian Kuegel<br>
> Date: 2021-02-02T11:51:04+01:00<br>
> New Revision: 48ca6da9d2f534752f5a5263a6209257149dba7d<br>
><br>
> URL: <a href="https://github.com/llvm/llvm-project/commit/48ca6da9d2f534752f5a5263a6209257149dba7d" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/48ca6da9d2f534752f5a5263a6209257149dba7d</a><br>
> DIFF: <a href="https://github.com/llvm/llvm-project/commit/48ca6da9d2f534752f5a5263a6209257149dba7d.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/48ca6da9d2f534752f5a5263a6209257149dba7d.diff</a><br>
><br>
> LOG: Revert "[CSSPGO] Factor out common part for CSSPGO inline and AFDO inline"<br>
><br>
> This reverts commit 9a03058d6322edb8abc803ba3e436cc62647d979.<br>
><br>
> Added:<br>
><br>
><br>
> Modified:<br>
> llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
> llvm/test/Transforms/SampleProfile/pseudo-probe-inline.ll<br>
> llvm/test/Transforms/SampleProfile/remarks.ll<br>
><br>
> Removed:<br>
><br>
><br>
><br>
> ################################################################################<br>
> diff --git a/llvm/lib/Transforms/IPO/SampleProfile.cpp b/llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
> index 7865426dff16..665c4078f3ee 100644<br>
> --- a/llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
> +++ b/llvm/lib/Transforms/IPO/SampleProfile.cpp<br>
> @@ -416,18 +416,20 @@ class SampleProfileLoader {<br>
> findIndirectCallFunctionSamples(const Instruction &I, uint64_t &Sum) const;<br>
> mutable DenseMap<const DILocation *, const FunctionSamples *> DILocation2SampleMap;<br>
> const FunctionSamples *findFunctionSamples(const Instruction &I) const;<br>
> - // Attempt to promote indirect call and also inline the promoted call<br>
> - bool tryPromoteAndInlineCandidate(<br>
> - Function &F, InlineCandidate &Candidate, uint64_t &Sum,<br>
> - DenseSet<Instruction *> &PromotedInsns,<br>
> - SmallVector<CallBase *, 8> *InlinedCallSites = nullptr);<br>
> + CallBase *tryPromoteIndirectCall(Function &F, StringRef CalleeName,<br>
> + uint64_t &Sum, uint64_t Count, CallBase *I,<br>
> + const char *&Reason);<br>
> + bool inlineCallInstruction(CallBase &CB,<br>
> + const FunctionSamples *CalleeSamples);<br>
> bool inlineHotFunctions(Function &F,<br>
> DenseSet<GlobalValue::GUID> &InlinedGUIDs);<br>
> + // Helper functions call-site prioritized BFS inliner<br>
> + // Will change the main FDO inliner to be work list based directly in<br>
> + // upstream, then merge this change with that and remove the duplication.<br>
> InlineCost shouldInlineCandidate(InlineCandidate &Candidate);<br>
> bool getInlineCandidate(InlineCandidate *NewCandidate, CallBase *CB);<br>
> - bool<br>
> - tryInlineCandidate(InlineCandidate &Candidate,<br>
> - SmallVector<CallBase *, 8> *InlinedCallSites = nullptr);<br>
> + bool tryInlineCandidate(InlineCandidate &Candidate,<br>
> + SmallVector<CallBase *, 8> &InlinedCallSites);<br>
> bool<br>
> inlineHotFunctionsWithPriority(Function &F,<br>
> DenseSet<GlobalValue::GUID> &InlinedGUIDs);<br>
> @@ -1075,45 +1077,70 @@ SampleProfileLoader::findFunctionSamples(const Instruction &Inst) const {<br>
> return it.first->second;<br>
> }<br>
><br>
> -/// Attempt to promote indirect call and also inline the promoted call.<br>
> -///<br>
> -/// \param F Caller function.<br>
> -/// \param Candidate ICP and inline candidate.<br>
> -/// \param Sum Sum of target counts for indirect call.<br>
> -/// \param PromotedInsns Map to keep track of indirect call already processed.<br>
> -/// \param Candidate ICP and inline candidate.<br>
> -/// \param InlinedCallSite Output vector for new call sites exposed after<br>
> -/// inlining.<br>
> -bool SampleProfileLoader::tryPromoteAndInlineCandidate(<br>
> - Function &F, InlineCandidate &Candidate, uint64_t &Sum,<br>
> - DenseSet<Instruction *> &PromotedInsns,<br>
> - SmallVector<CallBase *, 8> *InlinedCallSite) {<br>
> - const char *Reason = "Callee function not available";<br>
> +CallBase *<br>
> +SampleProfileLoader::tryPromoteIndirectCall(Function &F, StringRef CalleeName,<br>
> + uint64_t &Sum, uint64_t Count,<br>
> + CallBase *I, const char *&Reason) {<br>
> + Reason = "Callee function not available";<br>
> // R->getValue() != &F is to prevent promoting a recursive call.<br>
> // If it is a recursive call, we do not inline it as it could bloat<br>
> // the code exponentially. There is way to better handle this, e.g.<br>
> // clone the caller first, and inline the cloned caller if it is<br>
> // recursive. As llvm does not inline recursive calls, we will<br>
> // simply ignore it instead of handling it explicitly.<br>
> - auto R = SymbolMap.find(Candidate.CalleeSamples->getFuncName());<br>
> + auto R = SymbolMap.find(CalleeName);<br>
> if (R != SymbolMap.end() && R->getValue() &&<br>
> !R->getValue()->isDeclaration() && R->getValue()->getSubprogram() &&<br>
> R->getValue()->hasFnAttribute("use-sample-profile") &&<br>
> - R->getValue() != &F &&<br>
> - isLegalToPromote(*Candidate.CallInstr, R->getValue(), &Reason)) {<br>
> + R->getValue() != &F && isLegalToPromote(*I, R->getValue(), &Reason)) {<br>
> auto *DI =<br>
> - &pgo::promoteIndirectCall(*Candidate.CallInstr, R->getValue(),<br>
> - Candidate.CallsiteCount, Sum, false, ORE);<br>
> - if (DI) {<br>
> - Sum -= Candidate.CallsiteCount;<br>
> - PromotedInsns.insert(Candidate.CallInstr);<br>
> - Candidate.CallInstr = DI;<br>
> - if (isa<CallInst>(DI) || isa<InvokeInst>(DI))<br>
> - return tryInlineCandidate(Candidate, InlinedCallSite);<br>
> + &pgo::promoteIndirectCall(*I, R->getValue(), Count, Sum, false, ORE);<br>
> + Sum -= Count;<br>
> + return DI;<br>
> + }<br>
> + return nullptr;<br>
> +}<br>
> +<br>
> +bool SampleProfileLoader::inlineCallInstruction(<br>
> + CallBase &CB, const FunctionSamples *CalleeSamples) {<br>
> + if (ExternalInlineAdvisor) {<br>
> + auto Advice = ExternalInlineAdvisor->getAdvice(CB);<br>
> + if (!Advice->isInliningRecommended()) {<br>
> + Advice->recordUnattemptedInlining();<br>
> + return false;<br>
> }<br>
> - } else {<br>
> - LLVM_DEBUG(dbgs() << "\nFailed to promote indirect call to "<br>
> - << CalleeFunctionName << " because " << Reason << "\n");<br>
> + // Dummy record, we don't use it for replay.<br>
> + Advice->recordInlining();<br>
> + }<br>
> +<br>
> + Function *CalledFunction = CB.getCalledFunction();<br>
> + assert(CalledFunction);<br>
> + DebugLoc DLoc = CB.getDebugLoc();<br>
> + BasicBlock *BB = CB.getParent();<br>
> + InlineParams Params = getInlineParams();<br>
> + Params.ComputeFullInlineCost = true;<br>
> + // Checks if there is anything in the reachable portion of the callee at<br>
> + // this callsite that makes this inlining potentially illegal. Need to<br>
> + // set ComputeFullInlineCost, otherwise getInlineCost may return early<br>
> + // when cost exceeds threshold without checking all IRs in the callee.<br>
> + // The acutal cost does not matter because we only checks isNever() to<br>
> + // see if it is legal to inline the callsite.<br>
> + InlineCost Cost =<br>
> + getInlineCost(CB, Params, GetTTI(*CalledFunction), GetAC, GetTLI);<br>
> + if (Cost.isNever()) {<br>
> + ORE->emit(OptimizationRemarkAnalysis(CSINLINE_DEBUG, "InlineFail", DLoc, BB)<br>
> + << "incompatible inlining");<br>
> + return false;<br>
> + }<br>
> + InlineFunctionInfo IFI(nullptr, GetAC);<br>
> + if (InlineFunction(CB, IFI).isSuccess()) {<br>
> + // The call to InlineFunction erases I, so we can't pass it here.<br>
> + emitInlinedInto(*ORE, DLoc, BB, *CalledFunction, *BB->getParent(), Cost,<br>
> + true, CSINLINE_DEBUG);<br>
> + if (ProfileIsCS)<br>
> + ContextTracker->markContextSamplesInlined(CalleeSamples);<br>
> + ++NumCSInlined;<br>
> + return true;<br>
> }<br>
> return false;<br>
> }<br>
> @@ -1179,11 +1206,10 @@ bool SampleProfileLoader::inlineHotFunctions(<br>
> "ProfAccForSymsInList should be false when profile-sample-accurate "<br>
> "is enabled");<br>
><br>
> - DenseMap<CallBase *, const FunctionSamples *> LocalNotInlinedCallSites;<br>
> + DenseMap<CallBase *, const FunctionSamples *> localNotInlinedCallSites;<br>
> bool Changed = false;<br>
> - bool LocalChanged = true;<br>
> - while (LocalChanged) {<br>
> - LocalChanged = false;<br>
> + while (true) {<br>
> + bool LocalChanged = false;<br>
> SmallVector<CallBase *, 10> CIS;<br>
> for (auto &BB : F) {<br>
> bool Hot = false;<br>
> @@ -1197,7 +1223,7 @@ bool SampleProfileLoader::inlineHotFunctions(<br>
> "GUIDToFuncNameMap has to be populated");<br>
> AllCandidates.push_back(CB);<br>
> if (FS->getEntrySamples() > 0 || ProfileIsCS)<br>
> - LocalNotInlinedCallSites.try_emplace(CB, FS);<br>
> + localNotInlinedCallSites.try_emplace(CB, FS);<br>
> if (callsiteIsHot(FS, PSI))<br>
> Hot = true;<br>
> else if (shouldInlineColdCallee(*CB))<br>
> @@ -1215,11 +1241,6 @@ bool SampleProfileLoader::inlineHotFunctions(<br>
> }<br>
> for (CallBase *I : CIS) {<br>
> Function *CalledFunction = I->getCalledFunction();<br>
> - InlineCandidate Candidate = {I,<br>
> - LocalNotInlinedCallSites.count(I)<br>
> - ? LocalNotInlinedCallSites[I]<br>
> - : nullptr,<br>
> - 0 /* dummy count */};<br>
> // Do not inline recursive calls.<br>
> if (CalledFunction == &F)<br>
> continue;<br>
> @@ -1236,16 +1257,30 @@ bool SampleProfileLoader::inlineHotFunctions(<br>
> if (!callsiteIsHot(FS, PSI))<br>
> continue;<br>
><br>
> - Candidate = {I, FS, FS->getEntrySamples()};<br>
> - if (tryPromoteAndInlineCandidate(F, Candidate, Sum, PromotedInsns)) {<br>
> - LocalNotInlinedCallSites.erase(I);<br>
> - LocalChanged = true;<br>
> + const char *Reason = nullptr;<br>
> + auto CalleeFunctionName = FS->getFuncName();<br>
> + if (CallBase *DI =<br>
> + tryPromoteIndirectCall(F, CalleeFunctionName, Sum,<br>
> + FS->getEntrySamples(), I, Reason)) {<br>
> + PromotedInsns.insert(I);<br>
> + // If profile mismatches, we should not attempt to inline DI.<br>
> + if ((isa<CallInst>(DI) || isa<InvokeInst>(DI)) &&<br>
> + inlineCallInstruction(cast<CallBase>(*DI), FS)) {<br>
> + localNotInlinedCallSites.erase(I);<br>
> + LocalChanged = true;<br>
> + }<br>
> + } else {<br>
> + LLVM_DEBUG(dbgs()<br>
> + << "\nFailed to promote indirect call to "<br>
> + << CalleeFunctionName << " because " << Reason << "\n");<br>
> }<br>
> }<br>
> } else if (CalledFunction && CalledFunction->getSubprogram() &&<br>
> !CalledFunction->isDeclaration()) {<br>
> - if (tryInlineCandidate(Candidate)) {<br>
> - LocalNotInlinedCallSites.erase(I);<br>
> + if (inlineCallInstruction(*I, localNotInlinedCallSites.count(I)<br>
> + ? localNotInlinedCallSites[I]<br>
> + : nullptr)) {<br>
> + localNotInlinedCallSites.erase(I);<br>
> LocalChanged = true;<br>
> }<br>
> } else if (LTOPhase == ThinOrFullLTOPhase::ThinLTOPreLink) {<br>
> @@ -1253,7 +1288,11 @@ bool SampleProfileLoader::inlineHotFunctions(<br>
> InlinedGUIDs, F.getParent(), PSI->getOrCompHotCountThreshold());<br>
> }<br>
> }<br>
> - Changed |= LocalChanged;<br>
> + if (LocalChanged) {<br>
> + Changed = true;<br>
> + } else {<br>
> + break;<br>
> + }<br>
> }<br>
><br>
> // For CS profile, profile for not inlined context will be merged when<br>
> @@ -1262,7 +1301,7 @@ bool SampleProfileLoader::inlineHotFunctions(<br>
> return Changed;<br>
><br>
> // Accumulate not inlined callsite information into notInlinedSamples<br>
> - for (const auto &Pair : LocalNotInlinedCallSites) {<br>
> + for (const auto &Pair : localNotInlinedCallSites) {<br>
> CallBase *I = Pair.getFirst();<br>
> Function *Callee = I->getCalledFunction();<br>
> if (!Callee || Callee->isDeclaration())<br>
> @@ -1308,7 +1347,7 @@ bool SampleProfileLoader::inlineHotFunctions(<br>
> }<br>
><br>
> bool SampleProfileLoader::tryInlineCandidate(<br>
> - InlineCandidate &Candidate, SmallVector<CallBase *, 8> *InlinedCallSites) {<br>
> + InlineCandidate &Candidate, SmallVector<CallBase *, 8> &InlinedCallSites) {<br>
><br>
> CallBase &CB = *Candidate.CallInstr;<br>
> Function *CalledFunction = CB.getCalledFunction();<br>
> @@ -1333,11 +1372,9 @@ bool SampleProfileLoader::tryInlineCandidate(<br>
> true, CSINLINE_DEBUG);<br>
><br>
> // Now populate the list of newly exposed call sites.<br>
> - if (InlinedCallSites) {<br>
> - InlinedCallSites->clear();<br>
> - for (auto &I : IFI.InlinedCallSites)<br>
> - InlinedCallSites->push_back(I);<br>
> - }<br>
> + InlinedCallSites.clear();<br>
> + for (auto &I : IFI.InlinedCallSites)<br>
> + InlinedCallSites.push_back(I);<br>
><br>
> if (ProfileIsCS)<br>
> ContextTracker->markContextSamplesInlined(Candidate.CalleeSamples);<br>
> @@ -1409,16 +1446,18 @@ SampleProfileLoader::shouldInlineCandidate(InlineCandidate &Candidate) {<br>
> InlineCost Cost = getInlineCost(*Candidate.CallInstr, Callee, Params,<br>
> GetTTI(*Callee), GetAC, GetTLI);<br>
><br>
> - // Honor always inline and never inline from call analyzer<br>
> - if (Cost.isNever() || Cost.isAlways())<br>
> - return Cost;<br>
> -<br>
> // For old FDO inliner, we inline the call site as long as cost is not<br>
> // "Never". The cost-benefit check is done earlier.<br>
> if (!CallsitePrioritizedInline) {<br>
> - return InlineCost::get(Cost.getCost(), INT_MAX);<br>
> + if (Cost.isNever())<br>
> + return Cost;<br>
> + return InlineCost::getAlways("hot callsite previously inlined");<br>
> }<br>
><br>
> + // Honor always inline and never inline from call analyzer<br>
> + if (Cost.isNever() || Cost.isAlways())<br>
> + return Cost;<br>
> +<br>
> // Otherwise only use the cost from call analyzer, but overwite threshold with<br>
> // Sample PGO threshold.<br>
> return InlineCost::get(Cost.getCost(), SampleThreshold);<br>
> @@ -1503,23 +1542,34 @@ bool SampleProfileLoader::inlineHotFunctionsWithPriority(<br>
> // fixed, but we generate<br>
> diff erent types).<br>
> if (!PSI->isHotCount(EntryCountDistributed))<br>
> break;<br>
> - SmallVector<CallBase *, 8> InlinedCallSites;<br>
> - // Attach function profile for promoted indirect callee, and update<br>
> - // call site count for the promoted inline candidate too.<br>
> - Candidate = {I, FS, EntryCountDistributed};<br>
> - if (tryPromoteAndInlineCandidate(F, Candidate, Sum, PromotedInsns,<br>
> - &InlinedCallSites)) {<br>
> - for (auto *CB : InlinedCallSites) {<br>
> - if (getInlineCandidate(&NewCandidate, CB))<br>
> - CQueue.emplace(NewCandidate);<br>
> + const char *Reason = nullptr;<br>
> + auto CalleeFunctionName = FS->getFuncName();<br>
> + if (CallBase *DI = tryPromoteIndirectCall(<br>
> + F, CalleeFunctionName, Sum, EntryCountDistributed, I, Reason)) {<br>
> + // Attach function profile for promoted indirect callee, and update<br>
> + // call site count for the promoted inline candidate too.<br>
> + Candidate = {DI, FS, EntryCountDistributed};<br>
> + PromotedInsns.insert(I);<br>
> + SmallVector<CallBase *, 8> InlinedCallSites;<br>
> + // If profile mismatches, we should not attempt to inline DI.<br>
> + if ((isa<CallInst>(DI) || isa<InvokeInst>(DI)) &&<br>
> + tryInlineCandidate(Candidate, InlinedCallSites)) {<br>
> + for (auto *CB : InlinedCallSites) {<br>
> + if (getInlineCandidate(&NewCandidate, CB))<br>
> + CQueue.emplace(NewCandidate);<br>
> + }<br>
> + Changed = true;<br>
> }<br>
> - Changed = true;<br>
> + } else {<br>
> + LLVM_DEBUG(dbgs()<br>
> + << "\nFailed to promote indirect call to "<br>
> + << CalleeFunctionName << " because " << Reason << "\n");<br>
> }<br>
> }<br>
> } else if (CalledFunction && CalledFunction->getSubprogram() &&<br>
> !CalledFunction->isDeclaration()) {<br>
> SmallVector<CallBase *, 8> InlinedCallSites;<br>
> - if (tryInlineCandidate(Candidate, &InlinedCallSites)) {<br>
> + if (tryInlineCandidate(Candidate, InlinedCallSites)) {<br>
> for (auto *CB : InlinedCallSites) {<br>
> if (getInlineCandidate(&NewCandidate, CB))<br>
> CQueue.emplace(NewCandidate);<br>
><br>
> diff --git a/llvm/test/Transforms/SampleProfile/pseudo-probe-inline.ll b/llvm/test/Transforms/SampleProfile/pseudo-probe-inline.ll<br>
> index 5359fd4da067..d47359fa0b5f 100644<br>
> --- a/llvm/test/Transforms/SampleProfile/pseudo-probe-inline.ll<br>
> +++ b/llvm/test/Transforms/SampleProfile/pseudo-probe-inline.ll<br>
> @@ -89,7 +89,7 @@ if.end:<br>
> ;YAML-NEXT: - String: '(cost='<br>
> ;YAML-NEXT: - Cost: '15'<br>
> ;YAML-NEXT: - String: ', threshold='<br>
> -;YAML-NEXT: - Threshold: '<a href="tel:(214)%20748-3647" value="+12147483647" target="_blank">2147483647</a>'<br>
> +;YAML-NEXT: - Threshold: '225'<br>
> ;YAML-NEXT: - String: ')'<br>
> ;YAML-NEXT: - String: ' at callsite '<br>
> ;YAML-NEXT: - String: foo<br>
><br>
> diff --git a/llvm/test/Transforms/SampleProfile/remarks.ll b/llvm/test/Transforms/SampleProfile/remarks.ll<br>
> index 46f016433b20..3add1e74abaa 100644<br>
> --- a/llvm/test/Transforms/SampleProfile/remarks.ll<br>
> +++ b/llvm/test/Transforms/SampleProfile/remarks.ll<br>
> @@ -21,7 +21,7 @@<br>
><br>
> ; We are expecting foo() to be inlined in main() (almost all the cycles are<br>
> ; spent inside foo).<br>
> -; CHECK: remark: remarks.cc:13:21: _Z3foov inlined into main to match profiling context with (cost=130, threshold=<a href="tel:(214)%20748-3647" value="+12147483647" target="_blank">2147483647</a>) at callsite main:0:21;<br>
> +; CHECK: remark: remarks.cc:13:21: _Z3foov inlined into main to match profiling context with (cost=130, threshold=225) at callsite main:0:21;<br>
> ; CHECK: remark: remarks.cc:9:19: rand inlined into main to match profiling context with (cost=always): always inline attribute at callsite _Z3foov:6:19 @ main:0:21;<br>
><br>
> ; The back edge for the loop is the hottest edge in the loop subgraph.<br>
> @@ -47,7 +47,7 @@<br>
> ;YAML-NEXT: - String: '(cost='<br>
> ;YAML-NEXT: - Cost: '130'<br>
> ;YAML-NEXT: - String: ', threshold='<br>
> -;YAML-NEXT: - Threshold: '<a href="tel:(214)%20748-3647" value="+12147483647" target="_blank">2147483647</a>'<br>
> +;YAML-NEXT: - Threshold: '225'<br>
> ;YAML-NEXT: - String: ')'<br>
> ;YAML-NEXT: - String: ' at callsite '<br>
> ;YAML-NEXT: - String: main<br>
><br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><div><br></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><span><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><img src="https://lh4.googleusercontent.com/tI3sB3YqaUCwaqwKhQNZHIw38fP0nxtBm4sEYjL-7r65mm0qsyQR9Gs9808J0p8qR8Dq3toLlvf4Amm9BKqyOIsTTkEqP4YX8K4pI2hZCVcaTxSvCEVIq8FZwIxhnAud7bg=s1600" width="100px;" height="58px;" style="color: rgb(102, 102, 102); font-family: Arial; font-size: 13.3333px; white-space: pre-wrap; line-height: 1.38; border: none; background-color: transparent;"><br></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:13.3333px;font-family:Arial;color:rgb(102,102,102);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Google Germany GmbH</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="color:rgba(0,0,0,0.75);font-family:sans-serif;font-size:13.2px;line-height:normal">Erika</span><span style="color:rgba(0,0,0,0.75);font-family:sans-serif;font-size:13.2px;line-height:normal">-</span><span style="color:rgba(0,0,0,0.75);font-family:sans-serif;font-size:13.2px;line-height:normal">Mann</span><span style="color:rgba(0,0,0,0.75);font-family:sans-serif;font-size:13.2px;line-height:normal">-</span><span style="color:rgba(0,0,0,0.75);font-family:sans-serif;font-size:13.2px;line-height:normal">Straße</span><span style="color:rgba(0,0,0,0.75);font-family:sans-serif;font-size:13.2px;line-height:normal"> 33</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="color:rgba(0,0,0,0.75);font-family:sans-serif;font-size:13.2px;line-height:normal">80636 München</span><br></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;color:rgb(183,183,183);font-family:Arial;font-size:10.6667px;white-space:pre-wrap">Geschäftsführer: Paul Manicle, Halimah DeLaine Prado</span><br></p></span><span><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10.6667px;font-family:Arial;color:rgb(183,183,183);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Registergericht und -nummer: Hamburg, HRB 86891</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10.6667px;font-family:Arial;color:rgb(183,183,183);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Sitz der Gesellschaft: Hamburg</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10.6667px;font-family:Arial;color:rgb(183,183,183);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind, leiten Sie diese bitte nicht weiter, informieren Sie den Absender und löschen Sie die E-Mail und alle Anhänge. Vielen Dank.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10.6667px;font-family:Arial;color:rgb(183,183,183);vertical-align:baseline;white-space:pre-wrap;background-color:transparent"> </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10.6667px;font-family:Arial;color:rgb(183,183,183);vertical-align:baseline;white-space:pre-wrap;background-color:transparent">This e-mail is confidential. If you are not the right addressee please do not forward it, please inform the sender, and please erase this e-mail including any attachments. Thanks.<br></span></p></span></div></div></div></div></div></div></div></div>
</blockquote></div></div>