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