355 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=arm-- -run-pass=prologepilog -run-pass=machine-outliner \3# RUN: -verify-machineinstrs %s -o - | FileCheck %s4 5--- |6 define void @outline_call_arm() #0 { ret void }7 define void @outline_call_thumb() #1 { ret void }8 define void @outline_call_tailcall_arm() #0 { ret void }9 define void @outline_call_tailcall_thumb() #1 { ret void }10 define void @outline_call_KO_mcount() #0 { ret void }11 define void @bar() #0 { ret void }12 declare void @"\01mcount"()13 14 attributes #0 = { minsize optsize }15 attributes #1 = { minsize optsize "target-features"="+armv7-a,+thumb-mode" }16...17---18 19name: outline_call_arm20tracksRegLiveness: true21body: |22 ; CHECK-LABEL: name: outline_call_arm23 ; CHECK: bb.0:24 ; CHECK: liveins: $r4, $lr25 ; CHECK: $sp = frame-setup STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $lr26 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 827 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -428 ; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -829 ; CHECK: BL @OUTLINED_FUNCTION_230 ; CHECK: bb.1:31 ; CHECK: BL @OUTLINED_FUNCTION_232 ; CHECK: bb.2:33 ; CHECK: BL @OUTLINED_FUNCTION_234 ; CHECK: bb.3:35 ; CHECK: BL @OUTLINED_FUNCTION_236 ; CHECK: bb.4:37 ; CHECK: BL @OUTLINED_FUNCTION_238 ; CHECK: bb.5:39 ; CHECK: $sp = frame-destroy LDMIA_UPD $sp, 14 /* CC::al */, $noreg, def $r4, def $lr40 ; CHECK: BX_RET 14 /* CC::al */, $noreg41 bb.0:42 BL @bar, implicit-def dead $lr, implicit $sp43 $r0 = MOVi 1, 14, $noreg, $noreg44 $r1 = MOVi 1, 14, $noreg, $noreg45 $r2 = MOVi 1, 14, $noreg, $noreg46 $r3 = MOVi 1, 14, $noreg, $noreg47 $r4 = MOVi 1, 14, $noreg, $noreg48 bb.1:49 BL @bar, implicit-def dead $lr, implicit $sp50 $r0 = MOVi 1, 14, $noreg, $noreg51 $r1 = MOVi 1, 14, $noreg, $noreg52 $r2 = MOVi 1, 14, $noreg, $noreg53 $r3 = MOVi 1, 14, $noreg, $noreg54 $r4 = MOVi 1, 14, $noreg, $noreg55 bb.2:56 BL @bar, implicit-def dead $lr, implicit $sp57 $r0 = MOVi 1, 14, $noreg, $noreg58 $r1 = MOVi 1, 14, $noreg, $noreg59 $r2 = MOVi 1, 14, $noreg, $noreg60 $r3 = MOVi 1, 14, $noreg, $noreg61 $r4 = MOVi 1, 14, $noreg, $noreg62 bb.3:63 BL @bar, implicit-def dead $lr, implicit $sp64 $r0 = MOVi 1, 14, $noreg, $noreg65 $r1 = MOVi 1, 14, $noreg, $noreg66 $r2 = MOVi 1, 14, $noreg, $noreg67 $r3 = MOVi 1, 14, $noreg, $noreg68 $r4 = MOVi 1, 14, $noreg, $noreg69 bb.4:70 BL @bar, implicit-def dead $lr, implicit $sp71 $r0 = MOVi 1, 14, $noreg, $noreg72 $r1 = MOVi 1, 14, $noreg, $noreg73 $r2 = MOVi 1, 14, $noreg, $noreg74 $r3 = MOVi 1, 14, $noreg, $noreg75 $r4 = MOVi 1, 14, $noreg, $noreg76 bb.5:77 BX_RET 14, $noreg78...79---80 81name: outline_call_thumb82tracksRegLiveness: true83body: |84 ; CHECK-LABEL: name: outline_call_thumb85 ; CHECK: bb.0:86 ; CHECK: liveins: $r7, $lr87 ; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r7, killed $lr88 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 889 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -490 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -891 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_492 ; CHECK: bb.1:93 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_494 ; CHECK: bb.2:95 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_496 ; CHECK: bb.3:97 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_498 ; CHECK: bb.4:99 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_4100 ; CHECK: bb.5:101 ; CHECK: $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r7, def $pc102 bb.0:103 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp104 $r0 = t2MOVi 1, 14, $noreg, $noreg105 $r1 = t2MOVi 1, 14, $noreg, $noreg106 $r2 = t2MOVi 1, 14, $noreg, $noreg107 bb.1:108 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp109 $r0 = t2MOVi 1, 14, $noreg, $noreg110 $r1 = t2MOVi 1, 14, $noreg, $noreg111 $r2 = t2MOVi 1, 14, $noreg, $noreg112 bb.2:113 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp114 $r0 = t2MOVi 1, 14, $noreg, $noreg115 $r1 = t2MOVi 1, 14, $noreg, $noreg116 $r2 = t2MOVi 1, 14, $noreg, $noreg117 bb.3:118 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp119 $r0 = t2MOVi 1, 14, $noreg, $noreg120 $r1 = t2MOVi 1, 14, $noreg, $noreg121 $r2 = t2MOVi 1, 14, $noreg, $noreg122 bb.4:123 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp124 $r0 = t2MOVi 1, 14, $noreg, $noreg125 $r1 = t2MOVi 1, 14, $noreg, $noreg126 $r2 = t2MOVi 1, 14, $noreg, $noreg127 bb.5:128 tBX_RET 14, $noreg129...130---131 132name: outline_call_tailcall_arm133tracksRegLiveness: true134body: |135 ; CHECK-LABEL: name: outline_call_tailcall_arm136 ; CHECK: bb.0:137 ; CHECK: liveins: $r4, $lr138 ; CHECK: $sp = frame-setup STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $lr139 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8140 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4141 ; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -8142 ; CHECK: BL @OUTLINED_FUNCTION_0143 ; CHECK: bb.1:144 ; CHECK: BL @OUTLINED_FUNCTION_0145 ; CHECK: bb.2:146 ; CHECK: BL @OUTLINED_FUNCTION_0147 ; CHECK: bb.3:148 ; CHECK: BL @OUTLINED_FUNCTION_0149 ; CHECK: bb.4:150 ; CHECK: $sp = frame-destroy LDMIA_UPD $sp, 14 /* CC::al */, $noreg, def $r4, def $lr151 ; CHECK: BX_RET 14 /* CC::al */, $noreg152 bb.0:153 BL @bar, implicit-def dead $lr, implicit $sp154 $r0 = MOVi 2, 14, $noreg, $noreg155 $r1 = MOVi 2, 14, $noreg, $noreg156 $r2 = MOVi 2, 14, $noreg, $noreg157 $r3 = MOVi 2, 14, $noreg, $noreg158 $r4 = MOVi 2, 14, $noreg, $noreg159 BL @bar, implicit-def dead $lr, implicit $sp160 bb.1:161 BL @bar, implicit-def dead $lr, implicit $sp162 $r0 = MOVi 2, 14, $noreg, $noreg163 $r1 = MOVi 2, 14, $noreg, $noreg164 $r2 = MOVi 2, 14, $noreg, $noreg165 $r3 = MOVi 2, 14, $noreg, $noreg166 $r4 = MOVi 2, 14, $noreg, $noreg167 BL @bar, implicit-def dead $lr, implicit $sp168 bb.2:169 BL @bar, implicit-def dead $lr, implicit $sp170 $r0 = MOVi 2, 14, $noreg, $noreg171 $r1 = MOVi 2, 14, $noreg, $noreg172 $r2 = MOVi 2, 14, $noreg, $noreg173 $r3 = MOVi 2, 14, $noreg, $noreg174 $r4 = MOVi 2, 14, $noreg, $noreg175 BL @bar, implicit-def dead $lr, implicit $sp176 bb.3:177 BL @bar, implicit-def dead $lr, implicit $sp178 $r0 = MOVi 2, 14, $noreg, $noreg179 $r1 = MOVi 2, 14, $noreg, $noreg180 $r2 = MOVi 2, 14, $noreg, $noreg181 $r3 = MOVi 2, 14, $noreg, $noreg182 $r4 = MOVi 2, 14, $noreg, $noreg183 BL @bar, implicit-def dead $lr, implicit $sp184 bb.4:185 BX_RET 14, $noreg186...187---188 189name: outline_call_tailcall_thumb190tracksRegLiveness: true191body: |192 ; CHECK-LABEL: name: outline_call_tailcall_thumb193 ; CHECK: bb.0:194 ; CHECK: liveins: $r7, $lr195 ; CHECK: $sp = frame-setup t2STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r7, killed $lr196 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8197 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4198 ; CHECK: frame-setup CFI_INSTRUCTION offset $r7, -8199 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_3200 ; CHECK: bb.1:201 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_3202 ; CHECK: bb.2:203 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_3204 ; CHECK: bb.3:205 ; CHECK: tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_3206 ; CHECK: bb.4:207 ; CHECK: $sp = frame-destroy t2LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r7, def $pc208 bb.0:209 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp210 $r0 = t2MOVi 2, 14, $noreg, $noreg211 $r1 = t2MOVi 2, 14, $noreg, $noreg212 $r2 = t2MOVi 2, 14, $noreg, $noreg213 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp214 bb.1:215 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp216 $r0 = t2MOVi 2, 14, $noreg, $noreg217 $r1 = t2MOVi 2, 14, $noreg, $noreg218 $r2 = t2MOVi 2, 14, $noreg, $noreg219 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp220 bb.2:221 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp222 $r0 = t2MOVi 2, 14, $noreg, $noreg223 $r1 = t2MOVi 2, 14, $noreg, $noreg224 $r2 = t2MOVi 2, 14, $noreg, $noreg225 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp226 bb.3:227 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp228 $r0 = t2MOVi 2, 14, $noreg, $noreg229 $r1 = t2MOVi 2, 14, $noreg, $noreg230 $r2 = t2MOVi 2, 14, $noreg, $noreg231 tBL 14, $noreg, @bar, implicit-def dead $lr, implicit $sp232 bb.4:233 tBX_RET 14, $noreg234...235---236 237name: outline_call_KO_mcount238tracksRegLiveness: true239body: |240 ; CHECK-LABEL: name: outline_call_KO_mcount241 ; CHECK: bb.0:242 ; CHECK: liveins: $r4, $lr243 ; CHECK: $sp = frame-setup STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r4, killed $lr244 ; CHECK: frame-setup CFI_INSTRUCTION def_cfa_offset 8245 ; CHECK: frame-setup CFI_INSTRUCTION offset $lr, -4246 ; CHECK: frame-setup CFI_INSTRUCTION offset $r4, -8247 ; CHECK: BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp248 ; CHECK: BL @OUTLINED_FUNCTION_1249 ; CHECK: bb.1:250 ; CHECK: BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp251 ; CHECK: BL @OUTLINED_FUNCTION_1252 ; CHECK: bb.2:253 ; CHECK: BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp254 ; CHECK: BL @OUTLINED_FUNCTION_1255 ; CHECK: bb.3:256 ; CHECK: BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp257 ; CHECK: BL @OUTLINED_FUNCTION_1258 ; CHECK: bb.4:259 ; CHECK: BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp260 ; CHECK: BL @OUTLINED_FUNCTION_1261 ; CHECK: bb.5:262 ; CHECK: $sp = frame-destroy LDMIA_UPD $sp, 14 /* CC::al */, $noreg, def $r4, def $lr263 ; CHECK: BX_RET 14 /* CC::al */, $noreg264 bb.0:265 BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp266 $r0 = MOVi 3, 14, $noreg, $noreg267 $r1 = MOVi 3, 14, $noreg, $noreg268 $r2 = MOVi 3, 14, $noreg, $noreg269 $r3 = MOVi 3, 14, $noreg, $noreg270 $r4 = MOVi 3, 14, $noreg, $noreg271 bb.1:272 BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp273 $r0 = MOVi 3, 14, $noreg, $noreg274 $r1 = MOVi 3, 14, $noreg, $noreg275 $r2 = MOVi 3, 14, $noreg, $noreg276 $r3 = MOVi 3, 14, $noreg, $noreg277 $r4 = MOVi 3, 14, $noreg, $noreg278 bb.2:279 BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp280 $r0 = MOVi 3, 14, $noreg, $noreg281 $r1 = MOVi 3, 14, $noreg, $noreg282 $r2 = MOVi 3, 14, $noreg, $noreg283 $r3 = MOVi 3, 14, $noreg, $noreg284 $r4 = MOVi 3, 14, $noreg, $noreg285 bb.3:286 BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp287 $r0 = MOVi 3, 14, $noreg, $noreg288 $r1 = MOVi 3, 14, $noreg, $noreg289 $r2 = MOVi 3, 14, $noreg, $noreg290 $r3 = MOVi 3, 14, $noreg, $noreg291 $r4 = MOVi 3, 14, $noreg, $noreg292 bb.4:293 BL @"\01mcount", csr_aapcs, implicit-def dead $lr, implicit $sp294 $r0 = MOVi 3, 14, $noreg, $noreg295 $r1 = MOVi 3, 14, $noreg, $noreg296 $r2 = MOVi 3, 14, $noreg, $noreg297 $r3 = MOVi 3, 14, $noreg, $noreg298 $r4 = MOVi 3, 14, $noreg, $noreg299 bb.5:300 BX_RET 14, $noreg301...302---303 304name: bar305tracksRegLiveness: true306body: |307 bb.0:308 BX_RET 14, $noreg309 310 ; CHECK-LABEL: name: OUTLINED_FUNCTION_0311 ; CHECK: bb.0:312 ; CHECK: liveins: $r11, $r10, $r9, $r8, $r7, $r6, $r5, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8313 ; CHECK: $r0 = MOVi 2, 14 /* CC::al */, $noreg, $noreg314 ; CHECK: $r1 = MOVi 2, 14 /* CC::al */, $noreg, $noreg315 ; CHECK: $r2 = MOVi 2, 14 /* CC::al */, $noreg, $noreg316 ; CHECK: $r3 = MOVi 2, 14 /* CC::al */, $noreg, $noreg317 ; CHECK: $r4 = MOVi 2, 14 /* CC::al */, $noreg, $noreg318 ; CHECK: TAILJMPd @bar, implicit $sp319 320 ; CHECK-LABEL: name: OUTLINED_FUNCTION_1321 ; CHECK: bb.0:322 ; CHECK: liveins: $r11, $r10, $r9, $r8, $r7, $r6, $r5, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8323 ; CHECK: $r0 = MOVi 3, 14 /* CC::al */, $noreg, $noreg324 ; CHECK: $r1 = MOVi 3, 14 /* CC::al */, $noreg, $noreg325 ; CHECK: $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg326 ; CHECK: $r3 = MOVi 3, 14 /* CC::al */, $noreg, $noreg327 ; CHECK: $r4 = MOVi 3, 14 /* CC::al */, $noreg, $noreg328 ; CHECK: MOVPCLR 14 /* CC::al */, $noreg329 330 ; CHECK-LABEL: name: OUTLINED_FUNCTION_2331 ; CHECK: bb.0:332 ; CHECK: liveins: $r11, $r10, $r9, $r8, $r7, $r6, $r5, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8333 ; CHECK: $r0 = MOVi 1, 14 /* CC::al */, $noreg, $noreg334 ; CHECK: $r1 = MOVi 1, 14 /* CC::al */, $noreg, $noreg335 ; CHECK: $r2 = MOVi 1, 14 /* CC::al */, $noreg, $noreg336 ; CHECK: $r3 = MOVi 1, 14 /* CC::al */, $noreg, $noreg337 ; CHECK: $r4 = MOVi 1, 14 /* CC::al */, $noreg, $noreg338 ; CHECK: MOVPCLR 14 /* CC::al */, $noreg339 340 ; CHECK-LABEL: name: OUTLINED_FUNCTION_3341 ; CHECK: bb.0:342 ; CHECK: liveins: $r11, $r10, $r9, $r8, $r6, $r5, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8343 ; CHECK: $r0 = t2MOVi 2, 14 /* CC::al */, $noreg, $noreg344 ; CHECK: $r1 = t2MOVi 2, 14 /* CC::al */, $noreg, $noreg345 ; CHECK: $r2 = t2MOVi 2, 14 /* CC::al */, $noreg, $noreg346 ; CHECK: tTAILJMPdND @bar, 14 /* CC::al */, $noreg, implicit $sp347 348 ; CHECK-LABEL: name: OUTLINED_FUNCTION_4349 ; CHECK: bb.0:350 ; CHECK: liveins: $r11, $r10, $r9, $r8, $r6, $r5, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8351 ; CHECK: $r0 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg352 ; CHECK: $r1 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg353 ; CHECK: $r2 = t2MOVi 1, 14 /* CC::al */, $noreg, $noreg354 ; CHECK: tBX_RET 14 /* CC::al */, $noreg355