104 lines · plain
1# RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner \2# RUN: -verify-machineinstrs %s -o - | FileCheck %s3 4# Ensure that we can outline candidates with compatible call/frame classes.5#6# - Save/restores that don't impact the stack can be outlined together.7# - Save/restores that impact the stack if the outlined sequence doesn't use8# the stack.9 10--- |11 define void @no-save1() #0 { ret void }12 define void @no-save2() #0 { ret void }13 define void @reg-save() #0 { ret void }14 define void @stack-save() #0 { ret void }15 attributes #0 = { minsize noinline noredzone "frame-pointer"="all" }16...17---18 19name: no-save120tracksRegLiveness: true21body: |22 bb.0:23 liveins: $lr24 $lr = ORRXri $xzr, 125 bb.1:26 ; CHECK-LABEL: name: no-save127 ; CHECK: BL [[FN:@OUTLINED_FUNCTION_[0-9]+]]28 ; CHECK-NOT: STRXpre29 ; CHECK-NOT: $lr =30 ; CHECK-NOT: ORRXrs31 $w11 = ORRWri $wzr, 132 $w11 = ORRWri $wzr, 133 $w11 = ORRWri $wzr, 134 $w11 = ORRWri $wzr, 135 bb.2:36 RET undef $lr37 38...39---40 41name: no-save242tracksRegLiveness: true43body: |44 bb.0:45 liveins: $lr46 $lr = ORRXri $xzr, 147 bb.1:48 ; CHECK-LABEL: name: no-save249 ; CHECK: BL [[FN]]50 ; CHECK-NOT: STRXpre51 ; CHECK-NOT: $lr =52 ; CHECK-NOT: ORRXrs53 $w11 = ORRWri $wzr, 154 $w11 = ORRWri $wzr, 155 $w11 = ORRWri $wzr, 156 $w11 = ORRWri $wzr, 157 bb.2:58 RET undef $lr59...60---61 62name: reg-save63tracksRegLiveness: true64body: |65 bb.0:66 liveins: $lr67 $lr = ORRXri $xzr, 168 bb.1:69 liveins: $lr70 ; CHECK-LABEL: name: reg-save71 ; CHECK: $[[REG:x[0-9]+]] = ORRXrs $xzr, $lr, 072 ; CHECK-NEXT: BL [[FN]]73 ; CHECK-NEXT: $lr = ORRXrs $xzr, $[[REG]], 074 $w11 = ORRWri $wzr, 175 $w11 = ORRWri $wzr, 176 $w11 = ORRWri $wzr, 177 $w11 = ORRWri $wzr, 178 bb.2:79 liveins: $lr80 RET undef $lr81 82...83---84 85name: stack-save86tracksRegLiveness: true87body: |88 bb.0:89 liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp90 $lr = ORRXri $xzr, 191 bb.1:92 liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp93 ; CHECK-LABEL: name: stack-save94 ; CHECK: $sp = STRXpre $lr, $sp, -1695 ; CHECK-NEXT: BL [[FN]]96 ; CHECK-NEXT: $sp, $lr = LDRXpost $sp, 1697 $w11 = ORRWri $wzr, 198 $w11 = ORRWri $wzr, 199 $w11 = ORRWri $wzr, 1100 $w11 = ORRWri $wzr, 1101 bb.2:102 liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp103 RET undef $lr104