brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 66779ad Raw
170 lines · plain
1# RUN: llc -mtriple=aarch64--- -run-pass=prologepilog -run-pass=machine-outliner -verify-machineinstrs -frame-pointer=non-leaf -outliner-leaf-descendants=false %s -o - | FileCheck %s2--- |3 4  @x = common global i32 0, align 45 6  define void @baz() #0 {7    ret void8  }9 10  define i32 @main() #0 {11    ret i32 012  }13 14  define void @bar(i32 %a) #0 {15    ret void16  }17 18  attributes #0 = { noinline noredzone }19...20---21# This test ensures that we22# - Create outlined functions23# - Don't outline anything to do with LR or W3024# - Save LR when it's not available25# - Functions whose addresses are taken can still be outlined26#27# CHECK-LABEL: main28# CHECK-LABEL: bb.1:29# CHECK-DAG: BL @OUTLINED_FUNCTION_[[F0:[0-9]+]]30# CHECK-NEXT: $lr = ORRXrs $xzr, $x[[REG:[0-9]+]], 031# CHECK-NEXT: STRHHroW $w12, $x9, $w30, 1, 132# CHECK-NEXT: $lr = ORRXri $xzr, 133 34# CHECK-DAG: bb.235# CHECK: BL @OUTLINED_FUNCTION_[[F0]]36# CHECK-NEXT: $lr = ORRXrs $xzr, $x[[REG]], 037# CHECK-NEXT: STRHHroW $w12, $x9, $w30, 1, 138# CHECK-NEXT: $lr = ORRXri $xzr, 139 40# CHECK-DAG: bb.341# CHECK: BL @OUTLINED_FUNCTION_[[F0]]42# CHECK-NEXT: $lr = ORRXrs $xzr, $x[[REG]], 043# CHECK-NEXT: STRHHroW $w12, $x9, $w30, 1, 144# CHECK-NEXT: $lr = ORRXri $xzr, 145name:            main46tracksRegLiveness: true47body:             |48  bb.0:49  liveins: $lr50    $sp = frame-setup SUBXri $sp, 16, 051    renamable $x9 = ADRP target-flags(aarch64-page) @bar52    $x9 = ORRXri $xzr, 153    $w12 = ORRWri $wzr, 154    $w30 = ORRWri $wzr, 155    $lr = ORRXri $xzr, 156  bb.1:57  liveins: $lr58    $x20, $x19 = LDPXi $sp, 1059    $w12 = ORRWri $wzr, 160    $w12 = ORRWri $wzr, 161    $w12 = ORRWri $wzr, 162    $w12 = ORRWri $wzr, 163    $w12 = ORRWri $wzr, 164    $w12 = ORRWri $wzr, 165    renamable $x9 = ADRP target-flags(aarch64-page) @x66    $x12 = ADDXri $sp, 48, 0;67    STRHHroW $w12, $x9, $w30, 1, 168    $lr = ORRXri $xzr, 169  bb.2:70  liveins: $lr71    $x20, $x19 = LDPXi $sp, 1072    $w12 = ORRWri $wzr, 173    $w12 = ORRWri $wzr, 174    $w12 = ORRWri $wzr, 175    $w12 = ORRWri $wzr, 176    $w12 = ORRWri $wzr, 177    $w12 = ORRWri $wzr, 178    renamable $x9 = ADRP target-flags(aarch64-page) @x79    $x12 = ADDXri $sp, 48, 0;80    STRHHroW $w12, $x9, $w30, 1, 181    $lr = ORRXri $xzr, 182  bb.3:83  liveins: $lr84    $x20, $x19 = LDPXi $sp, 1085    $w12 = ORRWri $wzr, 186    $w12 = ORRWri $wzr, 187    $w12 = ORRWri $wzr, 188    $w12 = ORRWri $wzr, 189    $w12 = ORRWri $wzr, 190    $w12 = ORRWri $wzr, 191    renamable $x9 = ADRP target-flags(aarch64-page) @x92    $x12 = ADDXri $sp, 48, 0;93    STRHHroW $w12, $x9, $w30, 1, 194    $lr = ORRXri $xzr, 195    $sp = ADDXri $sp, 16, 096  bb.4:97  liveins: $lr98    RET undef $lr99 100...101---102# This test ensures that we can avoid saving LR when it's available.103# It also makes sure that KILL instructions don't impact outlining.104# CHECK-LABEL: bb.1:105# CHECK-NOT: BL @baz, implicit-def dead $lr, implicit $sp106# CHECK: BL @OUTLINED_FUNCTION_[[F1:[0-9]+]], implicit-def $lr, implicit $sp107# CHECK-NEXT: $w11 = ORRWri $wzr, 2108# CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F1]], implicit-def $lr, implicit $sp109# CHECK-NEXT: $w8 = ORRWri $wzr, 0110# CHECK-NOT: $w11 = KILL renamable $w11, implicit killed $w11111name:            bar112tracksRegLiveness: true113body:             |114  bb.0:115    liveins: $w0, $lr, $w8116    $sp = frame-setup SUBXri $sp, 32, 0117    $fp = frame-setup ADDXri $sp, 16, 0118 119  bb.1:120    BL @baz, implicit-def dead $lr, implicit $sp121    $w11 = ORRWri $wzr, 1122    $w11 = ORRWri $wzr, 1123    $w11 = KILL renamable $w11, implicit killed $w11124    $w11 = ORRWri $wzr, 1125    $w11 = ORRWri $wzr, 1126    BL @baz, implicit-def dead $lr, implicit $sp127    $w11 = ORRWri $wzr, 1128    $w11 = ORRWri $wzr, 1129    $w11 = ORRWri $wzr, 2130    BL @baz, implicit-def dead $lr, implicit $sp131    $w11 = ORRWri $wzr, 1132    $w11 = ORRWri $wzr, 1133    $w11 = ORRWri $wzr, 1134    $w11 = ORRWri $wzr, 1135    BL @baz, implicit-def dead $lr, implicit $sp136    $w11 = ORRWri $wzr, 1137    $w11 = ORRWri $wzr, 1138    $w8 = ORRWri $wzr, 0139 140  bb.2:141    $w15 = ORRWri $wzr, 1142    $w15 = ORRWri $wzr, 1143    $w15 = ORRWri $wzr, 1144    $w15 = ORRWri $wzr, 1145    $x15 = ADDXri $sp, 48, 0;146    $w9 = ORRWri $wzr, 0147    $w15 = ORRWri $wzr, 1148    $w15 = ORRWri $wzr, 1149    $w15 = ORRWri $wzr, 1150    $w15 = ORRWri $wzr, 1151    $x15 = ADDXri $sp, 48, 0;152    $w8 = ORRWri $wzr, 0153 154  bb.3:155    $fp, $lr = LDPXi $sp, 2156    $sp = ADDXri $sp, 32, 0157    RET undef $lr158 159...160---161name:            baz162tracksRegLiveness: true163body:             |164  bb.0:165    liveins: $w0, $lr, $w8166    RET undef $lr167 168# CHECK-LABEL: name:            OUTLINED_FUNCTION_{{[0-9]}}169# CHECK=LABEL: name:            OUTLINED_FUNCTION_{{[1-9]}}170