brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · a635231 Raw
150 lines · plain
1# RUN: llc -mtriple=aarch64 -run-pass=machine-outliner -machine-outliner-reruns=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix TWO-RUNS2# RUN: llc -mtriple=aarch64 -run-pass=machine-outliner -machine-outliner-reruns=0 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix ONE-RUN3# RUN: llc -mtriple=aarch64 -run-pass=machine-outliner -machine-outliner-reruns=3 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix FOUR-RUNS4 5# Example of Repeated Instruction Sequence - Iterative Machine Outlining6#7#; define void @"$s12"(...) {         define i64 @"$s5” (...) {             define void @"$s13"(...) {8#   ...                                ...                                   ...9#   %8 = load i1, ptr %7                                                     %8 = load i1, ptr %710#   %9 = load i4, ptr, %6              %9 = load i4, ptr, %6                 %9 = load i4, ptr, %611#   store i4 %9, ptr %5                store i4 %9, ptr %5                   store i4 %9, ptr %512#   ...                                ...                                   ...13# }                                  }                                     }14#15# After machine outliner (1st time)16#17# define void @"$s12"(...) {         define i64 @"$s5” (...) {             define void @"$s13"(...) {18#   ...                                ...                                   ...19#   %8 = load i1, ptr %7                                                     %8 = load i1, ptr %720#   call void @outlined_function_1_1   call void @outlined_function_1_1      call void @outlined_function_1_121#   ...                                ...                                   ...22# }                                  }                                     }23#24# After machine outliner (2nd time)25#26# define void @"$s12"(...) {         define i64 @"$s5” (...) {             define void @"$s13"(...) {27#   ...                                ...                                   ...28#   call void @outlined_function_2_1   call void @outlined_function_1_1      call void @outlined_function_2_129#   ...                                ...                                   ...30# }                                  }                                     }31#32# Check whether machine outliner can further find the outlining opportunity after machine33# outlining has performed.34#35--- |36  declare void @foo() local_unnamed_addr37 38  declare void @widget() local_unnamed_addr39 40  ; Function Attrs: minsize noredzone optsize41  define void @baz.14() #0 {42    ret void43  }44 45  ; Function Attrs: minsize noredzone optsize46  define void @baz.15() #0 {47    ret void48  }49 50  ; Function Attrs: minsize noredzone optsize51  define void @baz.16() #0 {52    ret void53  }54 55  attributes #0 = { minsize noredzone optsize }56...57---58name:            baz.1459tracksRegLiveness: true60stack:61  - { id: 0, offset: -8, size: 8 }62  - { id: 1, offset: -16, size: 8 }63body:             |64  bb.0:65    liveins: $x0, $x19, $lr66 67    early-clobber $sp = frame-setup STPXpre killed $lr, killed $x19, $sp, -2 :: (store (s64) into %stack.1), (store (s64) into %stack.0)68    frame-setup CFI_INSTRUCTION def_cfa_offset 1669    frame-setup CFI_INSTRUCTION offset $w19, -870    frame-setup CFI_INSTRUCTION offset $w30, -1671    renamable $x19 = COPY $x072    renamable $x0 = nuw ADDXri $x0, 48, 073    $x1 = ADDXri $sp, 0, 074    dead $w2 = MOVi32imm 33, implicit-def $x275    $x3 = COPY $xzr76    BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit killed $x1, implicit killed $x2, implicit killed $x3, implicit-def $sp77    $x0 = COPY killed renamable $x1978    BL @widget, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit-def $sp79    early-clobber $sp, $lr, $x19 = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.1), (load (s64) from %stack.0)80    RET_ReallyLR81 82...83---84name:            baz.1585tracksRegLiveness: true86stack:87  - { id: 0, offset: -8, size: 8 }88  - { id: 1, offset: -16, size: 8 }89body:             |90  bb.0:91    liveins: $x0, $x19, $lr92 93    early-clobber $sp = frame-setup STPXpre killed $lr, killed $x19, $sp, -2 :: (store (s64) into %stack.1), (store (s64) into %stack.0)94    frame-setup CFI_INSTRUCTION def_cfa_offset 1695    frame-setup CFI_INSTRUCTION offset $w19, -896    frame-setup CFI_INSTRUCTION offset $w30, -1697    renamable $x19 = COPY $x098    renamable $x0 = nuw ADDXri killed renamable $x0, 16, 099    $x1 = ADDXri $sp, 0, 0100    dead $w2 = MOVi32imm 33, implicit-def $x2101    $x3 = COPY $xzr102    BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit $x1, implicit killed $x2, implicit killed $x3, implicit-def $sp103    $x0 = COPY killed renamable $x19104    BL @widget, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit-def $sp105    early-clobber $sp, $lr, $x19 = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.1), (load (s64) from %stack.0)106    RET_ReallyLR107 108...109---110name:            baz.16111tracksRegLiveness: true112stack:113  - { id: 0, offset: -8, size: 8 }114  - { id: 1, offset: -16, size: 8 }115body:             |116  bb.0:117    liveins: $x0, $x19, $lr118 119    early-clobber $sp = frame-setup STPXpre killed $lr, killed $x19, $sp, -2 :: (store (s64) into %stack.1), (store (s64) into %stack.0)120    frame-setup CFI_INSTRUCTION def_cfa_offset 16121    frame-setup CFI_INSTRUCTION offset $w19, -8122    frame-setup CFI_INSTRUCTION offset $w30, -16123    renamable $x19 = COPY $x0124    renamable $x0 = nuw ADDXri $x0, 48, 0125    $x1 = ADDXri $sp, 0, 0126    dead $w2 = MOVi32imm 33, implicit-def $x2127    $x3 = COPY $xzr128    BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit killed $x1, implicit killed $x2, implicit killed $x3, implicit-def $sp129    $x0 = COPY killed renamable $x19130    BL @widget, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $x0, implicit-def $sp131    early-clobber $sp, $lr, $x19 = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.1), (load (s64) from %stack.0)132    RET_ReallyLR133 134...135 136# TWO-RUNS: name:            OUTLINED_FUNCTION_2_0137# TWO-RUNS-DAG: bb.0:138# TWO-RUNS-DAG: renamable $x19 = COPY $x0139# TWO-RUNS-NEXT: renamable $x0 = nuw ADDXri $x0, 48, 0140# TWO-RUNS-NEXT: TCRETURNdi @OUTLINED_FUNCTION_0, 0, implicit $sp141#142# The machine outliner is expected to stop at the 1st iteration for case ONE-RUN143# since machine-outline-runs is specified as 1.144# ONE-RUN-NOT: [[OUTLINED:OUTLINED_FUNCTION_2_[0-9]+]]145#146# The machine outliner is expected to stop at the 3rd iteration for case FOUR-RUNS147# since the MIR has no change at the 3rd iteration.148# FOUR-RUNS-NOT: [[OUTLINED:OUTLINED_FUNCTION_3_[0-9]+]]149# FOUR-RUNS-NOT: [[OUTLINED:OUTLINED_FUNCTION_4_[0-9]+]]150