132 lines · plain
1# RUN: llc -mtriple=aarch64 -run-pass=prologepilog -run-pass=machine-outliner \2# RUN: -verify-machineinstrs -run-pass=aarch64-ptrauth %s -o - | FileCheck %s3 4# Check that we save LR to a callee-saved register when possible.5# foo() should use a callee-saved register. However, bar() should not.6--- |7 8 define void @foo() #0 {9 ret void10 }11 12 define void @bar() #1 {13 ret void14 }15 16 attributes #0 = { nounwind "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" minsize noinline noredzone "frame-pointer"="all" }17 attributes #1 = { nounwind uwtable "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" minsize noinline noredzone "frame-pointer"="all" }18...19---20# CHECK-LABEL: name: foo21# CHECK: bb.0:22# CHECK: frame-setup EMITBKEY23# CHECK-NEXT: frame-setup PACIBSP24# CHECK-NOT: frame-setup CFI_INSTRUCTION negate_ra_sign_state25# CHECK: bb.1:26# CHECK: BL @[[OUTLINED_FUNCTION:OUTLINED_FUNCTION_[0-9]+]]27# CHECK: bb.2:28# CHECK: BL @[[OUTLINED_FUNCTION]]29# CHECK: bb.3:30# CHECK: BL @[[OUTLINED_FUNCTION]]31# CHECK: bb.4:32# CHECK: BL @[[OUTLINED_FUNCTION]]33# CHECK: bb.5:34# CHECK: frame-destroy AUTIBSP35# CHECK-NEXT: RET36name: foo37tracksRegLiveness: true38fixedStack:39body: |40 bb.0:41 $x25 = ORRXri $xzr, 142 $lr = ORRXri $xzr, 143 bb.1:44 liveins: $lr, $w945 $w9 = ORRWri $wzr, 146 $w9 = ORRWri $wzr, 147 $w9 = ORRWri $wzr, 148 $w9 = ORRWri $wzr, 149 $w9 = ORRWri $wzr, 150 $w9 = ORRWri $wzr, 251 bb.2:52 liveins: $lr, $w953 $w9 = ORRWri $wzr, 154 $w9 = ORRWri $wzr, 155 $w9 = ORRWri $wzr, 156 $w9 = ORRWri $wzr, 157 $w9 = ORRWri $wzr, 158 $w9 = ORRWri $wzr, 259 bb.3:60 liveins: $lr, $w961 $w9 = ORRWri $wzr, 162 $w9 = ORRWri $wzr, 163 $w9 = ORRWri $wzr, 164 $w9 = ORRWri $wzr, 165 $w9 = ORRWri $wzr, 166 $w9 = ORRWri $wzr, 267 bb.4:68 liveins: $lr, $w969 $w9 = ORRWri $wzr, 170 $w9 = ORRWri $wzr, 171 $w9 = ORRWri $wzr, 172 $w9 = ORRWri $wzr, 173 $w9 = ORRWri $wzr, 174 $w9 = ORRWri $wzr, 275 bb.5:76 liveins: $w977 RET undef $lr78 79...80---81# CHECK: name: bar82# CHECK: bb.0:83# CHECK: frame-setup EMITBKEY84# CHECK-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp85# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state86# CHECK-NOT: OUTLINED_FUNCTION_87# CHECK: bb.1:88# CHECK-NOT: OUTLINED_FUNCTION_89# CHECK: bb.2:90# CHECK-NOT: OUTLINED_FUNCTION_91# CHECK: bb.3:92# CHECK-NOT: OUTLINED_FUNCTION_93# CHECK: RET94name: bar95tracksRegLiveness: true96body: |97 bb.0:98 liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x2899 $w10 = ORRWri $wzr, 1100 $w10 = ORRWri $wzr, 1101 $w10 = ORRWri $wzr, 1102 $w10 = ORRWri $wzr, 1103 $w10 = ORRWri $wzr, 1104 $w12 = ORRWri $wzr, 2105 bb.1:106 liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28107 $w10 = ORRWri $wzr, 1108 $w10 = ORRWri $wzr, 1109 $w10 = ORRWri $wzr, 1110 $w10 = ORRWri $wzr, 1111 $w10 = ORRWri $wzr, 1112 $w12 = ORRWri $wzr, 2113 bb.2:114 liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28115 $w10 = ORRWri $wzr, 1116 $w10 = ORRWri $wzr, 1117 $w10 = ORRWri $wzr, 1118 $w10 = ORRWri $wzr, 1119 $w10 = ORRWri $wzr, 1120 $w12 = ORRWri $wzr, 2121 bb.3:122 liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28123 RET undef $lr124 125# CHECK: name: [[OUTLINED_FUNCTION]]126# CHECK: body:127# CHECK-NEXT: bb.0:128# CHECK-NOT: frame-setup EMITBKEY129# CHECK-NOT: frame-setup PACI{{[A,B]}}SP130# CHECK-NOT: frame-setup CFI_INSTRUCTION negate_ra_sign_state131# CHECK-NOT: frame-destroy AUTI{{[A,B]}}SP132