Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc %s -enable-machine-outliner -mtriple=aarch64-unknown-unknown -pass-remarks=machine-outliner -pass-remarks-missed=machine-outliner -o /dev/null 2>&1 | FileCheck %s
      2 ; CHECK: <unknown>:0:0:
      3 ; CHECK-SAME: Did not outline 2 instructions from 2 locations.
      4 ; CHECK-SAME: Bytes from outlining all occurrences (36) >=
      5 ; CHECK-SAME: Unoutlined instruction bytes (16)
      6 ; CHECK-SAME: (Also found at: <UNKNOWN LOCATION>)
      7 ; CHECK: remark: <unknown>:0:0: Saved 20 bytes by outlining 12 instructions
      8 ; CHECK-SAME: from 2 locations. (Found at: <UNKNOWN LOCATION>,
      9 ; CHECK-SAME: <UNKNOWN LOCATION>)
     10 ; RUN: llc %s -enable-machine-outliner -mtriple=aarch64-unknown-unknown -o /dev/null -pass-remarks-missed=machine-outliner -pass-remarks-output=%t.yaml
     11 ; RUN: cat %t.yaml | FileCheck %s -check-prefix=YAML
     12 ; YAML: --- !Missed
     13 ; YAML-NEXT: Pass:            machine-outliner
     14 ; YAML-NEXT: Name:            NotOutliningCheaper
     15 ; YAML-NEXT: Function:        dog
     16 ; YAML-NEXT: Args:            
     17 ; YAML-NEXT:   - String:          'Did not outline '
     18 ; YAML-NEXT:   - Length:          '2'
     19 ; YAML-NEXT:   - String:          ' instructions'
     20 ; YAML-NEXT:   - String:          ' from '
     21 ; YAML-NEXT:   - NumOccurrences:  '2'
     22 ; YAML-NEXT:   - String:          ' locations.'
     23 ; YAML-NEXT:   - String:          ' Bytes from outlining all occurrences ('
     24 ; YAML-NEXT:   - OutliningCost:   '36'
     25 ; YAML-NEXT:   - String:          ')'
     26 ; YAML-NEXT:   - String:          ' >= Unoutlined instruction bytes ('
     27 ; YAML-NEXT:   - NotOutliningCost: '16'
     28 ; YAML-NEXT:   - String:          ')'
     29 ; YAML-NEXT:   - String:          ' (Also found at: '
     30 ; YAML-NEXT:   - OtherStartLoc1:  '<UNKNOWN LOCATION>'
     31 ; YAML-NEXT:   - String:          ')'
     32 ; YAML: --- !Passed
     33 ; YAML-NEXT: Pass:            machine-outliner
     34 ; YAML-NEXT: Name:            OutlinedFunction
     35 ; YAML-NEXT: Function:        OUTLINED_FUNCTION_0
     36 ; YAML-NEXT: Args:            
     37 ; YAML-NEXT:   - String:          'Saved '
     38 ; YAML-NEXT:   - OutliningBenefit: '20'
     39 ; YAML-NEXT:   - String:          ' bytes by '
     40 ; YAML-NEXT:   - String:          'outlining '
     41 ; YAML-NEXT:   - Length:          '12'
     42 ; YAML-NEXT:   - String:          ' instructions '
     43 ; YAML-NEXT:   - String:          'from '
     44 ; YAML-NEXT:   - NumOccurrences:  '2'
     45 ; YAML-NEXT:   - String:          ' locations. '
     46 ; YAML-NEXT:   - String:          '(Found at: '
     47 ; YAML-NEXT:   - StartLoc0:       '<UNKNOWN LOCATION>'
     48 ; YAML-NEXT:   - String:          ', '
     49 ; YAML-NEXT:   - StartLoc1:       '<UNKNOWN LOCATION>'
     50 ; YAML-NEXT:   - String:          ')'
     51 
     52 define void @dog() #0 !dbg !8 {
     53 entry:
     54   %x = alloca i32, align 4
     55   %y = alloca i32, align 4
     56   store i32 0, i32* %x, align 4
     57   store i32 1, i32* %y, align 4, !dbg !12
     58   ret void
     59 }
     60 
     61 define void @cat() #0 !dbg !14 {
     62 entry:
     63   %x = alloca i32, align 4
     64   %y = alloca i32, align 4
     65   store i32 0, i32* %x, align 4
     66   store i32 1, i32* %y, align 4, !dbg !16
     67   ret void
     68 }
     69 
     70 define void @foo() #0 !dbg !18 {
     71   %1 = alloca i32, align 4
     72   %2 = alloca i32, align 4
     73   %3 = alloca i32, align 4
     74   %4 = alloca i32, align 4
     75   %5 = alloca i32, align 4
     76   %6 = alloca i32, align 4
     77   store i32 1, i32* %1, align 4, !dbg !24
     78   store i32 2, i32* %2, align 4
     79   store i32 3, i32* %3, align 4
     80   store i32 4, i32* %4, align 4
     81   store i32 5, i32* %5, align 4
     82   store i32 6, i32* %6, align 4, !dbg !26
     83   ret void
     84 }
     85 
     86 define void @bar() #0 !dbg !27 {
     87   %1 = alloca i32, align 4
     88   %2 = alloca i32, align 4
     89   %3 = alloca i32, align 4
     90   %4 = alloca i32, align 4
     91   %5 = alloca i32, align 4
     92   %6 = alloca i32, align 4
     93   store i32 1, i32* %1, align 4, !dbg !33
     94   store i32 2, i32* %2, align 4
     95   store i32 3, i32* %3, align 4
     96   store i32 4, i32* %4, align 4
     97   store i32 5, i32* %5, align 4
     98   store i32 6, i32* %6, align 4, !dbg !35
     99   ret void
    100 }
    101 
    102 attributes #0 = { noredzone nounwind ssp uwtable "no-frame-pointer-elim"="false" "target-cpu"="cyclone" }
    103 
    104 !llvm.dbg.cu = !{!0}
    105 !llvm.module.flags = !{!3, !4, !5, !6}
    106 !llvm.ident = !{!7}
    107 
    108 !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
    109 !1 = !DIFile(filename: "machine-outliner-remarks.ll", directory: "/tmp")
    110 !2 = !{}
    111 !3 = !{i32 2, !"Dwarf Version", i32 4}
    112 !4 = !{i32 2, !"Debug Info Version", i32 3}
    113 !5 = !{i32 1, !"wchar_size", i32 4}
    114 !6 = !{i32 7, !"PIC Level", i32 2}
    115 !7 = !{!""}
    116 !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, retainedNodes: !2)
    117 !9 = !DISubroutineType(types: !10)
    118 !10 = !{null}
    119 !12 = !DILocation(line: 5, column: 9, scope: !8)
    120 !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, retainedNodes: !2)
    121 !16 = !DILocation(line: 13, column: 9, scope: !14)
    122 !18 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 26, type: !9, isLocal: false, isDefinition: true, scopeLine: 26, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
    123 !24 = !DILocation(line: 27, column: 9, scope: !18)
    124 !26 = !DILocation(line: 29, column: 9, scope: !18)
    125 !27 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 35, type: !9, isLocal: false, isDefinition: true, scopeLine: 35, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
    126 !33 = !DILocation(line: 36, column: 1, scope: !27)
    127 !35 = !DILocation(line: 38, column: 1, scope: !27)
    128