<div dir="ltr">Reverted in r312219.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 31, 2017 at 1:38 AM, Hans Wennborg via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sad buildbot: <a href="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" rel="noreferrer" target="_blank">http://bb.pgr.jp/builders/<wbr>test-llvm-i686-linux-RA/<wbr>builds/6026/steps/test_llvm/<wbr>logs/LLVM%20%3A%3A%20CodeGen__<wbr>AArch64__machine-outliner-<wbr>remarks.ll</a><br>
<div class="HOEnZb"><div class="h5"><br>
On Wed, Aug 30, 2017 at 4:31 PM, Jessica Paquette via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: paquette<br>
> Date: Wed Aug 30 16:31:49 2017<br>
> New Revision: 312194<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=312194&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=312194&view=rev</a><br>
> Log:<br>
> [MachineOutliner] Add missed optimization remarks for the outliner.<br>
><br>
> This adds missed optimization remarks which report viable candidates that<br>
> were not outlined because they would increase code size.<br>
><br>
> Other remarks will come in separate commits.<br>
><br>
> This will help to diagnose code size regressions and changes in outliner<br>
> behaviour in projects using the outliner.<br>
><br>
> <a href="https://reviews.llvm.org/D37085" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D37085</a><br>
><br>
> Added:<br>
>     llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>remarks.ll<br>
> Modified:<br>
>     llvm/trunk/lib/CodeGen/<wbr>MachineOutliner.cpp<br>
><br>
> Modified: llvm/trunk/lib/CodeGen/<wbr>MachineOutliner.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineOutliner.cpp?rev=312194&r1=312193&r2=312194&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>CodeGen/MachineOutliner.cpp?<wbr>rev=312194&r1=312193&r2=<wbr>312194&view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/lib/CodeGen/<wbr>MachineOutliner.cpp (original)<br>
> +++ llvm/trunk/lib/CodeGen/<wbr>MachineOutliner.cpp Wed Aug 30 16:31:49 2017<br>
> @@ -46,6 +46,7 @@<br>
>  #include "llvm/CodeGen/MachineFunction.<wbr>h"<br>
>  #include "llvm/CodeGen/<wbr>MachineInstrBuilder.h"<br>
>  #include "llvm/CodeGen/<wbr>MachineModuleInfo.h"<br>
> +#include "llvm/CodeGen/<wbr>MachineOptimizationRemarkEmitt<wbr>er.h"<br>
>  #include "llvm/CodeGen/Passes.h"<br>
>  #include "llvm/IR/IRBuilder.h"<br>
>  #include "llvm/Support/Allocator.h"<br>
> @@ -64,6 +65,7 @@<br>
>  #define DEBUG_TYPE "machine-outliner"<br>
><br>
>  using namespace llvm;<br>
> +using namespace ore;<br>
><br>
>  STATISTIC(NumOutlined, "Number of candidates outlined");<br>
>  STATISTIC(FunctionsCreated, "Number of functions created");<br>
> @@ -895,8 +897,41 @@ MachineOutliner::<wbr>findCandidates(SuffixTr<br>
>      size_t OutliningCost = CallOverhead + FrameOverhead + SequenceOverhead;<br>
>      size_t NotOutliningCost = SequenceOverhead * Parent.OccurrenceCount;<br>
><br>
> -    if (NotOutliningCost <= OutliningCost)<br>
> +    // Is it better to outline this candidate than not?<br>
> +    if (NotOutliningCost <= OutliningCost) {<br>
> +      // Outlining this candidate would take more instructions than not<br>
> +      // outlining.<br>
> +      // Emit a remark explaining why we didn't outline this candidate.<br>
> +      std::pair<MachineBasicBlock::<wbr>iterator, MachineBasicBlock::iterator> C =<br>
> +          CandidateClass[0];<br>
> +      MachineOptimizationRemarkEmitt<wbr>er MORE(<br>
> +          *(C.first->getParent()-><wbr>getParent()), nullptr);<br>
> +      MachineOptimizationRemarkMisse<wbr>d R(DEBUG_TYPE, "NotOutliningCheaper",<br>
> +                                        C.first->getDebugLoc(),<br>
> +                                        C.first->getParent());<br>
> +      R << "Did not outline " << NV("Length", StringLen) << " instructions"<br>
> +        << " from " << NV("NumOccurrences", CandidateClass.size())<br>
> +        << " locations."<br>
> +        << " Instructions from outlining all occurrences ("<br>
> +        << NV("OutliningCost", OutliningCost) << ")"<br>
> +        << " >= Unoutlined instruction count ("<br>
> +        << NV("NotOutliningCost", NotOutliningCost) << ")"<br>
> +        << " (Also found at: ";<br>
> +<br>
> +      // Tell the user the other places the candidate was found.<br>
> +      for (size_t i = 1, e = CandidateClass.size(); i < e; i++) {<br>
> +        R << NV((Twine("OtherStartLoc") + Twine(i)).str(),<br>
> +                CandidateClass[i].first-><wbr>getDebugLoc());<br>
> +        if (i != e - 1)<br>
> +          R << ", ";<br>
> +      }<br>
> +<br>
> +      R << ")";<br>
> +      MORE.emit(R);<br>
> +<br>
> +      // Move to the next candidate.<br>
>        continue;<br>
> +    }<br>
><br>
>      size_t Benefit = NotOutliningCost - OutliningCost;<br>
><br>
><br>
> Added: llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>remarks.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/machine-outliner-remarks.ll?rev=312194&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/AArch64/machine-<wbr>outliner-remarks.ll?rev=<wbr>312194&view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>remarks.ll (added)<br>
> +++ llvm/trunk/test/CodeGen/<wbr>AArch64/machine-outliner-<wbr>remarks.ll Wed Aug 30 16:31:49 2017<br>
> @@ -0,0 +1,73 @@<br>
> +; RUN: llc %s -enable-machine-outliner -mtriple=aarch64-unknown-<wbr>unknown -pass-remarks-missed=machine-<wbr>outliner -o /dev/null 2>&1 | FileCheck %s<br>
> +; CHECK: machine-outliner-remarks.ll:5:<wbr>9:<br>
> +; CHECK-SAME: Did not outline 2 instructions from 2 locations.<br>
> +; CHECK-SAME: Instructions from outlining all occurrences (9) >=<br>
> +; CHECK-SAME: Unoutlined instruction count (4)<br>
> +; CHECK-SAME: (Also found at: machine-outliner-remarks.ll:<wbr>13:9)<br>
> +; RUN: llc %s -enable-machine-outliner -mtriple=aarch64-unknown-<wbr>unknown -o /dev/null -pass-remarks-missed=machine-<wbr>outliner -pass-remarks-output=%t.yaml<br>
> +; RUN: cat %t.yaml | FileCheck %s -check-prefix=YAML<br>
> +; YAML: --- !Missed<br>
> +; YAML-NEXT: Pass:            machine-outliner<br>
> +; YAML-NEXT: Name:            NotOutliningCheaper<br>
> +; YAML-NEXT: DebugLoc:        { File: machine-outliner-remarks.ll, Line: 5, Column: 9 }<br>
> +; YAML-NEXT: Function:        dog<br>
> +; YAML-NEXT: Args:<br>
> +; YAML-NEXT:   - String:          'Did not outline '<br>
> +; YAML-NEXT:   - Length:          '2'<br>
> +; YAML-NEXT:   - String:          ' instructions'<br>
> +; YAML-NEXT:   - String:          ' from '<br>
> +; YAML-NEXT:   - NumOccurrences:  '2'<br>
> +; YAML-NEXT:   - String:          ' locations.'<br>
> +; YAML-NEXT:   - String:          ' Instructions from outlining all occurrences ('<br>
> +; YAML-NEXT:   - OutliningCost:   '9'<br>
> +; YAML-NEXT:   - String:          ')'<br>
> +; YAML-NEXT:   - String:          ' >= Unoutlined instruction count ('<br>
> +; YAML-NEXT:   - NotOutliningCost: '4'<br>
> +; YAML-NEXT:   - String:          ')'<br>
> +; YAML-NEXT:   - String:          ' (Also found at: '<br>
> +; YAML-NEXT:   - OtherStartLoc1:  'machine-outliner-remarks.ll:<wbr>13:9'<br>
> +; YAML-NEXT:     DebugLoc:        { File: machine-outliner-remarks.ll, Line: 13, Column: 9 }<br>
> +; YAML-NEXT:   - String:          ')'<br>
> +<br>
> +define void @dog() #0 !dbg !8 {<br>
> +entry:<br>
> +  %x = alloca i32, align 4<br>
> +  %y = alloca i32, align 4<br>
> +  store i32 0, i32* %x, align 4, !dbg !11<br>
> +  store i32 1, i32* %y, align 4, !dbg !12<br>
> +  ret void, !dbg !13<br>
> +}<br>
> +<br>
> +define void @cat() #0 !dbg !14 {<br>
> +entry:<br>
> +  %x = alloca i32, align 4<br>
> +  %y = alloca i32, align 4<br>
> +  store i32 0, i32* %x, align 4, !dbg !15<br>
> +  store i32 1, i32* %y, align 4, !dbg !16<br>
> +  ret void, !dbg !17<br>
> +}<br>
> +<br>
> +attributes #0 = { noredzone nounwind ssp uwtable "no-frame-pointer-elim"="<wbr>false" "target-cpu"="cyclone" }<br>
> +<br>
> +!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
> +!llvm.module.flags = !{!3, !4, !5, !6}<br>
> +!llvm.ident = !{!7}<br>
> +<br>
> +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
> +!1 = !DIFile(filename: "machine-outliner-remarks.ll", directory: "/tmp")<br>
> +!2 = !{}<br>
> +!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
> +!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
> +!5 = !{i32 1, !"wchar_size", i32 4}<br>
> +!6 = !{i32 7, !"PIC Level", i32 2}<br>
> +!7 = !{!""}<br>
> +!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)<br>
> +!9 = !DISubroutineType(types: !10)<br>
> +!10 = !{null}<br>
> +!11 = !DILocation(line: 4, column: 9, scope: !8)<br>
> +!12 = !DILocation(line: 5, column: 9, scope: !8)<br>
> +!13 = !DILocation(line: 6, column: 1, scope: !8)<br>
> +!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)<br>
> +!15 = !DILocation(line: 12, column: 9, scope: !14)<br>
> +!16 = !DILocation(line: 13, column: 9, scope: !14)<br>
> +!17 = !DILocation(line: 14, column: 1, scope: !14)<br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>