<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><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">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" class="gmail_signature"><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>