[llvm] r312194 - [MachineOutliner] Add missed optimization remarks for the outliner.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 31 09:45:53 PDT 2017


It reproduces locally for me as well, on a regular x86 Linux build.

Attaching the machine-outliner-remarks.ll.tmp.yaml file.

On Thu, Aug 31, 2017 at 9:32 AM, Jessica Paquette <jpaquette at apple.com> wrote:
> Sorry for getting back to this so late. I didn’t see this until now.
>
> Is the output YAML from this bot lying around anywhere? Also, what’s the
> configuration for this bot? Just x86 linux? The test passes on my Apple
> machine, so this is kind of curious, considering it’s failing on the YAML.
>
> Thanks!
>
> - Jessica
>
> On Aug 30, 2017, at 11:23 PM, Daniel Jasper <djasper at google.com> wrote:
>
> Reverted in r312219.
>
> On Thu, Aug 31, 2017 at 1:38 AM, Hans Wennborg via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>>
>> Sad buildbot:
>> http://bb.pgr.jp/builders/test-llvm-i686-linux-RA/builds/6026/steps/test_llvm/logs/LLVM%20%3A%3A%20CodeGen__AArch64__machine-outliner-remarks.ll
>>
>> On Wed, Aug 30, 2017 at 4:31 PM, Jessica Paquette via llvm-commits
>> <llvm-commits at lists.llvm.org> wrote:
>> > Author: paquette
>> > Date: Wed Aug 30 16:31:49 2017
>> > New Revision: 312194
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=312194&view=rev
>> > Log:
>> > [MachineOutliner] Add missed optimization remarks for the outliner.
>> >
>> > This adds missed optimization remarks which report viable candidates
>> > that
>> > were not outlined because they would increase code size.
>> >
>> > Other remarks will come in separate commits.
>> >
>> > This will help to diagnose code size regressions and changes in outliner
>> > behaviour in projects using the outliner.
>> >
>> > https://reviews.llvm.org/D37085
>> >
>> > Added:
>> >     llvm/trunk/test/CodeGen/AArch64/machine-outliner-remarks.ll
>> > Modified:
>> >     llvm/trunk/lib/CodeGen/MachineOutliner.cpp
>> >
>> > Modified: llvm/trunk/lib/CodeGen/MachineOutliner.cpp
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineOutliner.cpp?rev=312194&r1=312193&r2=312194&view=diff
>> >
>> > ==============================================================================
>> > --- llvm/trunk/lib/CodeGen/MachineOutliner.cpp (original)
>> > +++ llvm/trunk/lib/CodeGen/MachineOutliner.cpp Wed Aug 30 16:31:49 2017
>> > @@ -46,6 +46,7 @@
>> >  #include "llvm/CodeGen/MachineFunction.h"
>> >  #include "llvm/CodeGen/MachineInstrBuilder.h"
>> >  #include "llvm/CodeGen/MachineModuleInfo.h"
>> > +#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
>> >  #include "llvm/CodeGen/Passes.h"
>> >  #include "llvm/IR/IRBuilder.h"
>> >  #include "llvm/Support/Allocator.h"
>> > @@ -64,6 +65,7 @@
>> >  #define DEBUG_TYPE "machine-outliner"
>> >
>> >  using namespace llvm;
>> > +using namespace ore;
>> >
>> >  STATISTIC(NumOutlined, "Number of candidates outlined");
>> >  STATISTIC(FunctionsCreated, "Number of functions created");
>> > @@ -895,8 +897,41 @@ MachineOutliner::findCandidates(SuffixTr
>> >      size_t OutliningCost = CallOverhead + FrameOverhead +
>> > SequenceOverhead;
>> >      size_t NotOutliningCost = SequenceOverhead *
>> > Parent.OccurrenceCount;
>> >
>> > -    if (NotOutliningCost <= OutliningCost)
>> > +    // Is it better to outline this candidate than not?
>> > +    if (NotOutliningCost <= OutliningCost) {
>> > +      // Outlining this candidate would take more instructions than not
>> > +      // outlining.
>> > +      // Emit a remark explaining why we didn't outline this candidate.
>> > +      std::pair<MachineBasicBlock::iterator,
>> > MachineBasicBlock::iterator> C =
>> > +          CandidateClass[0];
>> > +      MachineOptimizationRemarkEmitter MORE(
>> > +          *(C.first->getParent()->getParent()), nullptr);
>> > +      MachineOptimizationRemarkMissed R(DEBUG_TYPE,
>> > "NotOutliningCheaper",
>> > +                                        C.first->getDebugLoc(),
>> > +                                        C.first->getParent());
>> > +      R << "Did not outline " << NV("Length", StringLen) << "
>> > instructions"
>> > +        << " from " << NV("NumOccurrences", CandidateClass.size())
>> > +        << " locations."
>> > +        << " Instructions from outlining all occurrences ("
>> > +        << NV("OutliningCost", OutliningCost) << ")"
>> > +        << " >= Unoutlined instruction count ("
>> > +        << NV("NotOutliningCost", NotOutliningCost) << ")"
>> > +        << " (Also found at: ";
>> > +
>> > +      // Tell the user the other places the candidate was found.
>> > +      for (size_t i = 1, e = CandidateClass.size(); i < e; i++) {
>> > +        R << NV((Twine("OtherStartLoc") + Twine(i)).str(),
>> > +                CandidateClass[i].first->getDebugLoc());
>> > +        if (i != e - 1)
>> > +          R << ", ";
>> > +      }
>> > +
>> > +      R << ")";
>> > +      MORE.emit(R);
>> > +
>> > +      // Move to the next candidate.
>> >        continue;
>> > +    }
>> >
>> >      size_t Benefit = NotOutliningCost - OutliningCost;
>> >
>> >
>> > Added: llvm/trunk/test/CodeGen/AArch64/machine-outliner-remarks.ll
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/machine-outliner-remarks.ll?rev=312194&view=auto
>> >
>> > ==============================================================================
>> > --- llvm/trunk/test/CodeGen/AArch64/machine-outliner-remarks.ll (added)
>> > +++ llvm/trunk/test/CodeGen/AArch64/machine-outliner-remarks.ll Wed Aug
>> > 30 16:31:49 2017
>> > @@ -0,0 +1,73 @@
>> > +; RUN: llc %s -enable-machine-outliner -mtriple=aarch64-unknown-unknown
>> > -pass-remarks-missed=machine-outliner -o /dev/null 2>&1 | FileCheck %s
>> > +; CHECK: machine-outliner-remarks.ll:5:9:
>> > +; CHECK-SAME: Did not outline 2 instructions from 2 locations.
>> > +; CHECK-SAME: Instructions from outlining all occurrences (9) >=
>> > +; CHECK-SAME: Unoutlined instruction count (4)
>> > +; CHECK-SAME: (Also found at: machine-outliner-remarks.ll:13:9)
>> > +; RUN: llc %s -enable-machine-outliner -mtriple=aarch64-unknown-unknown
>> > -o /dev/null -pass-remarks-missed=machine-outliner
>> > -pass-remarks-output=%t.yaml
>> > +; RUN: cat %t.yaml | FileCheck %s -check-prefix=YAML
>> > +; YAML: --- !Missed
>> > +; YAML-NEXT: Pass:            machine-outliner
>> > +; YAML-NEXT: Name:            NotOutliningCheaper
>> > +; YAML-NEXT: DebugLoc:        { File: machine-outliner-remarks.ll,
>> > Line: 5, Column: 9 }
>> > +; YAML-NEXT: Function:        dog
>> > +; YAML-NEXT: Args:
>> > +; YAML-NEXT:   - String:          'Did not outline '
>> > +; YAML-NEXT:   - Length:          '2'
>> > +; YAML-NEXT:   - String:          ' instructions'
>> > +; YAML-NEXT:   - String:          ' from '
>> > +; YAML-NEXT:   - NumOccurrences:  '2'
>> > +; YAML-NEXT:   - String:          ' locations.'
>> > +; YAML-NEXT:   - String:          ' Instructions from outlining all
>> > occurrences ('
>> > +; YAML-NEXT:   - OutliningCost:   '9'
>> > +; YAML-NEXT:   - String:          ')'
>> > +; YAML-NEXT:   - String:          ' >= Unoutlined instruction count ('
>> > +; YAML-NEXT:   - NotOutliningCost: '4'
>> > +; YAML-NEXT:   - String:          ')'
>> > +; YAML-NEXT:   - String:          ' (Also found at: '
>> > +; YAML-NEXT:   - OtherStartLoc1:  'machine-outliner-remarks.ll:13:9'
>> > +; YAML-NEXT:     DebugLoc:        { File: machine-outliner-remarks.ll,
>> > Line: 13, Column: 9 }
>> > +; YAML-NEXT:   - String:          ')'
>> > +
>> > +define void @dog() #0 !dbg !8 {
>> > +entry:
>> > +  %x = alloca i32, align 4
>> > +  %y = alloca i32, align 4
>> > +  store i32 0, i32* %x, align 4, !dbg !11
>> > +  store i32 1, i32* %y, align 4, !dbg !12
>> > +  ret void, !dbg !13
>> > +}
>> > +
>> > +define void @cat() #0 !dbg !14 {
>> > +entry:
>> > +  %x = alloca i32, align 4
>> > +  %y = alloca i32, align 4
>> > +  store i32 0, i32* %x, align 4, !dbg !15
>> > +  store i32 1, i32* %y, align 4, !dbg !16
>> > +  ret void, !dbg !17
>> > +}
>> > +
>> > +attributes #0 = { noredzone nounwind ssp uwtable
>> > "no-frame-pointer-elim"="false" "target-cpu"="cyclone" }
>> > +
>> > +!llvm.dbg.cu = !{!0}
>> > +!llvm.module.flags = !{!3, !4, !5, !6}
>> > +!llvm.ident = !{!7}
>> > +
>> > +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1,
>> > isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
>> > +!1 = !DIFile(filename: "machine-outliner-remarks.ll", directory:
>> > "/tmp")
>> > +!2 = !{}
>> > +!3 = !{i32 2, !"Dwarf Version", i32 4}
>> > +!4 = !{i32 2, !"Debug Info Version", i32 3}
>> > +!5 = !{i32 1, !"wchar_size", i32 4}
>> > +!6 = !{i32 7, !"PIC Level", i32 2}
>> > +!7 = !{!""}
>> > +!8 = distinct !DISubprogram(name: "dog", scope: !1, file: !1, line: 2,
>> > type: !9, isLocal: false, isDefinition: true, scopeLine: 3, flags:
>> > DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
>> > +!9 = !DISubroutineType(types: !10)
>> > +!10 = !{null}
>> > +!11 = !DILocation(line: 4, column: 9, scope: !8)
>> > +!12 = !DILocation(line: 5, column: 9, scope: !8)
>> > +!13 = !DILocation(line: 6, column: 1, scope: !8)
>> > +!14 = distinct !DISubprogram(name: "cat", scope: !1, file: !1, line:
>> > 10, type: !9, isLocal: false, isDefinition: true, scopeLine: 11, flags:
>> > DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
>> > +!15 = !DILocation(line: 12, column: 9, scope: !14)
>> > +!16 = !DILocation(line: 13, column: 9, scope: !14)
>> > +!17 = !DILocation(line: 14, column: 1, scope: !14)
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: machine-outliner-remarks.ll.tmp.yaml
Type: application/x-yaml
Size: 1890 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170831/972461ae/attachment.bin>


More information about the llvm-commits mailing list