[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