[llvm] r340619 - Revert [Inliner] Attribute callsites with inline remarks

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 27 15:57:51 PDT 2018


It'd be great to mention in the commit message why a patch is being
reverted (& usually helpful to mention the revision number of the original
commit) to help folks understand what's happening with the patch/why.

On Fri, Aug 24, 2018 at 9:40 AM David Bolvansky via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: xbolva00
> Date: Fri Aug 24 09:39:41 2018
> New Revision: 340619
>
> URL: http://llvm.org/viewvc/llvm-project?rev=340619&view=rev
> Log:
> Revert [Inliner] Attribute callsites with inline remarks
>
> Removed:
>     llvm/trunk/test/Transforms/Inline/inline-remark.ll
> Modified:
>     llvm/trunk/lib/Transforms/IPO/Inliner.cpp
>
> Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=340619&r1=340618&r2=340619&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original)
> +++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Fri Aug 24 09:39:41 2018
> @@ -113,14 +113,6 @@ static cl::opt<InlinerFunctionImportStat
>                            "printing of statistics for each inlined
> function")),
>      cl::Hidden, cl::desc("Enable inliner stats for imported functions"));
>
> -/// Flag to add inline messages as callsite attributes 'inline-remark'.
> -static cl::opt<bool>
> -    InlineRemarkAttribute("inline-remark-attribute", cl::init(false),
> -                          cl::Hidden,
> -                          cl::desc("Enable adding inline-remark attribute
> to"
> -                                   " callsites processed by inliner but
> decided"
> -                                   " to be not inlined"));
> -
>  LegacyInlinerBase::LegacyInlinerBase(char &ID) : CallGraphSCCPass(ID) {}
>
>  LegacyInlinerBase::LegacyInlinerBase(char &ID, bool InsertLifetime)
> @@ -272,7 +264,7 @@ static void mergeInlinedArrayAllocas(
>  /// available from other functions inlined into the caller.  If we are
> able to
>  /// inline this call site we attempt to reuse already available allocas
> or add
>  /// any new allocas to the set if not possible.
> -static InlineResult InlineCallIfPossible(
> +static bool InlineCallIfPossible(
>      CallSite CS, InlineFunctionInfo &IFI,
>      InlinedArrayAllocasTy &InlinedArrayAllocas, int InlineHistory,
>      bool InsertLifetime, function_ref<AAResults &(Function &)> &AARGetter,
> @@ -398,11 +390,13 @@ RemarkT &operator<<(RemarkT &&R, const I
>    return R;
>  }
>
> +#ifndef NDEBUG
>  static std::string inlineCostStr(const InlineCost &IC) {
>    std::stringstream Remark;
>    Remark << IC;
>    return Remark.str();
>  }
> +#endif
>
>  /// Return the cost only if the inliner should attempt to inline at the
> given
>  /// CallSite. If we return the cost, we will emit an optimisation remark
> later
> @@ -508,14 +502,6 @@ static void emit_inlined_into(Optimizati
>    });
>  }
>
> -static void setInlineRemark(CallSite &CS, StringRef message) {
> -  if (!InlineRemarkAttribute)
> -    return;
> -
> -  Attribute attr = Attribute::get(CS->getContext(), "inline-remark",
> message);
> -  CS.addAttribute(AttributeList::FunctionIndex, attr);
> -}
> -
>  static bool
>  inlineCallsImpl(CallGraphSCC &SCC, CallGraph &CG,
>                  std::function<AssumptionCache &(Function &)>
> GetAssumptionCache,
> @@ -565,7 +551,6 @@ inlineCallsImpl(CallGraphSCC &SCC, CallG
>            if (Callee->isDeclaration()) {
>              using namespace ore;
>
> -            setInlineRemark(CS, "unavailable definition");
>              ORE.emit([&]() {
>                return OptimizationRemarkMissed(DEBUG_TYPE, "NoDefinition",
> &I)
>                       << NV("Callee", Callee) << " will not be inlined
> into "
> @@ -629,10 +614,8 @@ inlineCallsImpl(CallGraphSCC &SCC, CallG
>          // infinitely inline.
>          InlineHistoryID = CallSites[CSi].second;
>          if (InlineHistoryID != -1 &&
> -            InlineHistoryIncludes(Callee, InlineHistoryID,
> InlineHistory)) {
> -          setInlineRemark(CS, "recursive");
> +            InlineHistoryIncludes(Callee, InlineHistoryID, InlineHistory))
>            continue;
> -        }
>        }
>
>        // FIXME for new PM: because of the old PM we currently generate
> ORE and
> @@ -643,15 +626,7 @@ inlineCallsImpl(CallGraphSCC &SCC, CallG
>        Optional<InlineCost> OIC = shouldInline(CS, GetInlineCost, ORE);
>        // If the policy determines that we should inline this function,
>        // delete the call instead.
> -      if (!OIC.hasValue()) {
> -        setInlineRemark(CS, "deferred");
> -        continue;
> -      }
> -
> -      if (!OIC.getValue()) {
> -        // shouldInline() call returned a negative inline cost that
> explains
> -        // why this callsite should not be inlined.
> -        setInlineRemark(CS, inlineCostStr(*OIC));
> +      if (!OIC || !*OIC) {
>          continue;
>        }
>
> @@ -662,7 +637,6 @@ inlineCallsImpl(CallGraphSCC &SCC, CallG
>        if (IsTriviallyDead) {
>          LLVM_DEBUG(dbgs() << "    -> Deleting dead call: " << *Instr <<
> "\n");
>          // Update the call graph by deleting the edge from Callee to
> Caller.
> -        setInlineRemark(CS, "trivially dead");
>          CG[Caller]->removeCallEdgeFor(CS);
>          Instr->eraseFromParent();
>          ++NumCallsDeleted;
> @@ -678,7 +652,6 @@ inlineCallsImpl(CallGraphSCC &SCC, CallG
>              CS, InlineInfo, InlinedArrayAllocas, InlineHistoryID,
>              InsertLifetime, AARGetter, ImportedFunctionsStats);
>          if (!IR) {
> -          setInlineRemark(CS, std::string(IR) + "; " +
> inlineCostStr(*OIC));
>            ORE.emit([&]() {
>              return OptimizationRemarkMissed(DEBUG_TYPE, "NotInlined",
> DLoc,
>                                              Block)
> @@ -921,7 +894,6 @@ PreservedAnalyses InlinerPass::run(LazyC
>              Calls.push_back({CS, -1});
>            else if (!isa<IntrinsicInst>(I)) {
>              using namespace ore;
> -            setInlineRemark(CS, "unavailable definition");
>              ORE.emit([&]() {
>                return OptimizationRemarkMissed(DEBUG_TYPE, "NoDefinition",
> &I)
>                       << NV("Callee", Callee) << " will not be inlined
> into "
> @@ -965,10 +937,8 @@ PreservedAnalyses InlinerPass::run(LazyC
>      LazyCallGraph::Node &N = *CG.lookup(F);
>      if (CG.lookupSCC(N) != C)
>        continue;
> -    if (F.hasFnAttribute(Attribute::OptimizeNone)) {
> -      setInlineRemark(Calls[i].first, "optnone attribute");
> +    if (F.hasFnAttribute(Attribute::OptimizeNone))
>        continue;
> -    }
>
>      LLVM_DEBUG(dbgs() << "Inlining calls in: " << F.getName() << "\n");
>
> @@ -1012,10 +982,8 @@ PreservedAnalyses InlinerPass::run(LazyC
>        Function &Callee = *CS.getCalledFunction();
>
>        if (InlineHistoryID != -1 &&
> -          InlineHistoryIncludes(&Callee, InlineHistoryID, InlineHistory))
> {
> -        setInlineRemark(CS, "recursive");
> +          InlineHistoryIncludes(&Callee, InlineHistoryID, InlineHistory))
>          continue;
> -      }
>
>        // Check if this inlining may repeat breaking an SCC apart that has
>        // already been split once before. In that case, inlining here may
> @@ -1027,23 +995,13 @@ PreservedAnalyses InlinerPass::run(LazyC
>          LLVM_DEBUG(dbgs() << "Skipping inlining internal SCC edge from a
> node "
>                               "previously split out of this SCC by
> inlining: "
>                            << F.getName() << " -> " << Callee.getName() <<
> "\n");
> -        setInlineRemark(CS, "recursive SCC split");
>          continue;
>        }
>
>        Optional<InlineCost> OIC = shouldInline(CS, GetInlineCost, ORE);
>        // Check whether we want to inline this callsite.
> -      if (!OIC.hasValue()) {
> -        setInlineRemark(CS, "deferred");
> +      if (!OIC || !*OIC)
>          continue;
> -      }
> -
> -      if (!OIC.getValue()) {
> -        // shouldInline() call returned a negative inline cost that
> explains
> -        // why this callsite should not be inlined.
> -        setInlineRemark(CS, inlineCostStr(*OIC));
> -        continue;
> -      }
>
>        // Setup the data structure used to plumb customization into the
>        // `InlineFunction` routine.
> @@ -1060,7 +1018,6 @@ PreservedAnalyses InlinerPass::run(LazyC
>
>        InlineResult IR = InlineFunction(CS, IFI);
>        if (!IR) {
> -        setInlineRemark(CS, std::string(IR) + "; " + inlineCostStr(*OIC));
>          ORE.emit([&]() {
>            return OptimizationRemarkMissed(DEBUG_TYPE, "NotInlined", DLoc,
> Block)
>                   << NV("Callee", &Callee) << " will not be inlined into "
>
> Removed: llvm/trunk/test/Transforms/Inline/inline-remark.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline-remark.ll?rev=340618&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/Inline/inline-remark.ll (original)
> +++ llvm/trunk/test/Transforms/Inline/inline-remark.ll (removed)
> @@ -1,96 +0,0 @@
> -; RUN: opt < %s -inline -inline-remark-attribute --inline-threshold=-2 -S
> | FileCheck %s
> -
> -; Test that the inliner adds inline remark attributes to non-inlined
> callsites.
> -
> -define void @foo() {
> -  call void @bar(i1 true)
> -  ret void
> -}
> -
> -define void @bar(i1 %p) {
> -  br i1 %p, label %bb1, label %bb2
> -
> -bb1:
> -  call void @foo()
> -  ret void
> -
> -bb2:
> -  call void @bar(i1 true)
> -  ret void
> -}
> -
> -;; Test 1 - Add different inline remarks to similar callsites.
> -define void @test1() {
> -; CHECK-LABEL: @test1
> -; CHECK-NEXT: call void @bar(i1 true) [[ATTR1:#[0-9]+]]
> -; CHECK-NEXT: call void @bar(i1 false) [[ATTR2:#[0-9]+]]
> -  call void @bar(i1 true)
> -  call void @bar(i1 false)
> -  ret void
> -}
> -
> -define void @noop() {
> -  ret void
> -}
> -
> -;; Test 2 - Printed InlineResult messages are followed by InlineCost.
> -define void @test2(i8*) {
> -; CHECK-LABEL: @test2
> -; CHECK-NEXT: call void @noop() [[ATTR3:#[0-9]+]] [
> "CUSTOM_OPERAND_BUNDLE"() ]
> -; CHECK-NEXT: ret void
> -  call void @noop() ; extepected to be inlined
> -  call void @noop() [ "CUSTOM_OPERAND_BUNDLE"() ] ; cannot be inlined
> because of unsupported operand bundle
> -  ret void
> -}
> -
> -; CHECK: attributes [[ATTR1]] = { "inline-remark"="(cost=-5,
> threshold=-6)" }
> -; CHECK: attributes [[ATTR2]] = { "inline-remark"="(cost=never):
> recursive" }
> -; CHECK: attributes [[ATTR3]] = { "inline-remark"="unsupported operand
> bundle; (cost={{.*}}, threshold={{.*}})" }
> -; RUN: opt < %s -inline -inline-remark-attribute --inline-threshold=-2 -S
> | FileCheck %s
> -
> -; Test that the inliner adds inline remark attributes to non-inlined
> callsites.
> -
> -define void @foo() {
> -  call void @bar(i1 true)
> -  ret void
> -}
> -
> -define void @bar(i1 %p) {
> -  br i1 %p, label %bb1, label %bb2
> -
> -bb1:
> -  call void @foo()
> -  ret void
> -
> -bb2:
> -  call void @bar(i1 true)
> -  ret void
> -}
> -
> -;; Test 1 - Add different inline remarks to similar callsites.
> -define void @test1() {
> -; CHECK-LABEL: @test1
> -; CHECK-NEXT: call void @bar(i1 true) [[ATTR1:#[0-9]+]]
> -; CHECK-NEXT: call void @bar(i1 false) [[ATTR2:#[0-9]+]]
> -  call void @bar(i1 true)
> -  call void @bar(i1 false)
> -  ret void
> -}
> -
> -define void @noop() {
> -  ret void
> -}
> -
> -;; Test 2 - Printed InlineResult messages are followed by InlineCost.
> -define void @test2(i8*) {
> -; CHECK-LABEL: @test2
> -; CHECK-NEXT: call void @noop() [[ATTR3:#[0-9]+]] [
> "CUSTOM_OPERAND_BUNDLE"() ]
> -; CHECK-NEXT: ret void
> -  call void @noop() ; extepected to be inlined
> -  call void @noop() [ "CUSTOM_OPERAND_BUNDLE"() ] ; cannot be inlined
> because of unsupported operand bundle
> -  ret void
> -}
> -
> -; CHECK: attributes [[ATTR1]] = { "inline-remark"="(cost=-5,
> threshold=-6)" }
> -; CHECK: attributes [[ATTR2]] = { "inline-remark"="(cost=never):
> recursive" }
> -; CHECK: attributes [[ATTR3]] = { "inline-remark"="unsupported operand
> bundle; (cost={{.*}}, threshold={{.*}})" }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180827/b6294ab6/attachment.html>


More information about the llvm-commits mailing list