388 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64 -run-pass=cfi-fixup %s -o - | FileCheck %s3--- |4 define i32 @f0(i32 %x) #0 {5 entry: br label %return6 if.end: br label %return7 if.then2: br label %return8 if.else: br label %return9 return:10 ret i32 011 }12 13 define i32 @f1(i32 %x) #1 {14 entry: br label %return15 if.end: br label %return16 if.then2: br label %return17 if.else: br label %return18 return:19 ret i32 020 }21 22 declare i32 @g(i32)23 24 attributes #0 = { nounwind shadowcallstack uwtable "sign-return-address"="non-leaf" "target-features"="+reserve-x18" }25 attributes #1 = { nounwind shadowcallstack uwtable(sync) "sign-return-address"="non-leaf" "target-features"="+reserve-x18" }26 27...28---29name: f030alignment: 431exposesReturnsTwice: false32legalized: false33regBankSelected: false34selected: false35failedISel: false36tracksRegLiveness: true37hasWinCFI: false38failsVerification: false39registers: []40liveins:41 - { reg: '$w0', virtual-reg: '' }42frameInfo:43 isFrameAddressTaken: false44 isReturnAddressTaken: false45 hasStackMap: false46 hasPatchPoint: false47 stackSize: 1648 offsetAdjustment: 049 maxAlignment: 1650 adjustsStack: true51 hasCalls: true52 stackProtector: ''53 maxCallFrameSize: 054 cvBytesOfCalleeSavedRegisters: 055 hasOpaqueSPAdjustment: false56 hasVAStart: false57 hasMustTailInVarArgFunc: false58 hasTailCall: false59 localFrameSize: 060 savePoint: []61 restorePoint: []62fixedStack: []63stack:64 - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16,65 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,66 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }67callSites: []68debugValueSubstitutions: []69constants: []70machineFunctionInfo:71 hasRedZone: false72body: |73 ; CHECK-LABEL: name: f074 ; CHECK: bb.0.entry:75 ; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.1(0x50000000)76 ; CHECK-NEXT: liveins: $w0, $lr, $x1877 ; CHECK-NEXT: {{ $}}78 ; CHECK-NEXT: CBZW renamable $w0, %bb.479 ; CHECK-NEXT: {{ $}}80 ; CHECK-NEXT: bb.1.if.end:81 ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.2(0x50000000)82 ; CHECK-NEXT: liveins: $w0, $lr, $x1883 ; CHECK-NEXT: {{ $}}84 ; CHECK-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 885 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x7886 ; CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp87 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state88 ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)89 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 1690 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -1691 ; CHECK-NEXT: CFI_INSTRUCTION remember_state92 ; CHECK-NEXT: TBNZW renamable $w0, 31, %bb.393 ; CHECK-NEXT: {{ $}}94 ; CHECK-NEXT: bb.2.if.else:95 ; CHECK-NEXT: successors: %bb.5(0x80000000)96 ; CHECK-NEXT: liveins: $w097 ; CHECK-NEXT: {{ $}}98 ; CHECK-NEXT: renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 099 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0100 ; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0101 ; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0102 ; CHECK-NEXT: B %bb.5103 ; CHECK-NEXT: {{ $}}104 ; CHECK-NEXT: bb.3.if.then2 (bbsections 1):105 ; CHECK-NEXT: successors: %bb.5(0x80000000)106 ; CHECK-NEXT: liveins: $w0107 ; CHECK-NEXT: {{ $}}108 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78109 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state110 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16111 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16112 ; CHECK-NEXT: renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0113 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0114 ; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0115 ; CHECK-NEXT: B %bb.5116 ; CHECK-NEXT: {{ $}}117 ; CHECK-NEXT: bb.4.return:118 ; CHECK-NEXT: liveins: $w0119 ; CHECK-NEXT: {{ $}}120 ; CHECK-NEXT: RET undef $lr, implicit killed $w0121 ; CHECK-NEXT: {{ $}}122 ; CHECK-NEXT: bb.5.return:123 ; CHECK-NEXT: successors: %bb.7(0x80000000)124 ; CHECK-NEXT: liveins: $w0125 ; CHECK-NEXT: {{ $}}126 ; CHECK-NEXT: CFI_INSTRUCTION restore_state127 ; CHECK-NEXT: CFI_INSTRUCTION remember_state128 ; CHECK-NEXT: B %bb.7129 ; CHECK-NEXT: {{ $}}130 ; CHECK-NEXT: bb.6.return:131 ; CHECK-NEXT: liveins: $w0132 ; CHECK-NEXT: {{ $}}133 ; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)134 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0135 ; CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp136 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state137 ; CHECK-NEXT: early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8138 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w18139 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30140 ; CHECK-NEXT: RET undef $lr, implicit killed $w0141 ; CHECK-NEXT: {{ $}}142 ; CHECK-NEXT: bb.7.return:143 ; CHECK-NEXT: successors: %bb.6(0x80000000)144 ; CHECK-NEXT: liveins: $w0145 ; CHECK-NEXT: {{ $}}146 ; CHECK-NEXT: CFI_INSTRUCTION restore_state147 ; CHECK-NEXT: B %bb.6148 bb.0.entry:149 successors: %bb.4(0x30000000), %bb.1(0x50000000)150 liveins: $w0, $lr, $x18151 152 CBZW renamable $w0, %bb.4153 154 bb.1.if.end:155 successors: %bb.3(0x30000000), %bb.2(0x50000000)156 liveins: $w0, $lr, $x18157 158 early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8159 frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78160 frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp161 frame-setup CFI_INSTRUCTION negate_ra_sign_state162 early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)163 frame-setup CFI_INSTRUCTION def_cfa_offset 16164 frame-setup CFI_INSTRUCTION offset $w30, -16165 TBNZW renamable $w0, 31, %bb.3166 167 bb.2.if.else:168 successors: %bb.5(0x80000000)169 liveins: $w0170 171 renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0172 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0173 renamable $w8 = MOVZWi 1, 0174 $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0175 B %bb.5176 177 bb.3.if.then2 (bbsections 1):178 successors: %bb.5(0x80000000)179 liveins: $w0180 181 renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0182 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0183 renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0184 B %bb.5185 186 bb.4.return:187 liveins: $w0188 RET undef $lr, implicit killed $w0189 190 bb.5.return:191 liveins: $w0192 B %bb.6193 194 bb.7.return:195 liveins: $w0196 early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)197 frame-destroy CFI_INSTRUCTION def_cfa_offset 0198 frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp199 frame-destroy CFI_INSTRUCTION negate_ra_sign_state200 early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8201 frame-destroy CFI_INSTRUCTION restore $w18202 frame-destroy CFI_INSTRUCTION restore $w30203 RET undef $lr, implicit killed $w0204 205 bb.6.return:206 liveins: $w0207 B %bb.7208 209 210...211---212name: f1213alignment: 4214exposesReturnsTwice: false215legalized: false216regBankSelected: false217selected: false218failedISel: false219tracksRegLiveness: true220hasWinCFI: false221failsVerification: false222registers: []223liveins:224 - { reg: '$w0', virtual-reg: '' }225frameInfo:226 isFrameAddressTaken: false227 isReturnAddressTaken: false228 hasStackMap: false229 hasPatchPoint: false230 stackSize: 16231 offsetAdjustment: 0232 maxAlignment: 16233 adjustsStack: true234 hasCalls: true235 stackProtector: ''236 maxCallFrameSize: 0237 cvBytesOfCalleeSavedRegisters: 0238 hasOpaqueSPAdjustment: false239 hasVAStart: false240 hasMustTailInVarArgFunc: false241 hasTailCall: false242 localFrameSize: 0243 savePoint: []244 restorePoint: []245fixedStack: []246stack:247 - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16,248 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,249 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }250callSites: []251debugValueSubstitutions: []252constants: []253body: |254 ; CHECK-LABEL: name: f1255 ; CHECK: bb.0.entry:256 ; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.1(0x50000000)257 ; CHECK-NEXT: liveins: $w0, $lr, $x18258 ; CHECK-NEXT: {{ $}}259 ; CHECK-NEXT: CBZW renamable $w0, %bb.4260 ; CHECK-NEXT: {{ $}}261 ; CHECK-NEXT: bb.1.if.end:262 ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.2(0x50000000)263 ; CHECK-NEXT: liveins: $w0, $lr, $x18264 ; CHECK-NEXT: {{ $}}265 ; CHECK-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8266 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78267 ; CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp268 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state269 ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)270 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16271 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16272 ; CHECK-NEXT: TBNZW renamable $w0, 31, %bb.3273 ; CHECK-NEXT: {{ $}}274 ; CHECK-NEXT: bb.2.if.else:275 ; CHECK-NEXT: successors: %bb.5(0x80000000)276 ; CHECK-NEXT: liveins: $w0277 ; CHECK-NEXT: {{ $}}278 ; CHECK-NEXT: renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0279 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0280 ; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0281 ; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0282 ; CHECK-NEXT: B %bb.5283 ; CHECK-NEXT: {{ $}}284 ; CHECK-NEXT: bb.3.if.then2 (bbsections 1):285 ; CHECK-NEXT: successors: %bb.5(0x80000000)286 ; CHECK-NEXT: liveins: $w0287 ; CHECK-NEXT: {{ $}}288 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78289 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state290 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16291 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16292 ; CHECK-NEXT: renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0293 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0294 ; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0295 ; CHECK-NEXT: B %bb.5296 ; CHECK-NEXT: {{ $}}297 ; CHECK-NEXT: bb.4.return:298 ; CHECK-NEXT: liveins: $w0299 ; CHECK-NEXT: {{ $}}300 ; CHECK-NEXT: RET undef $lr, implicit killed $w0301 ; CHECK-NEXT: {{ $}}302 ; CHECK-NEXT: bb.5.return:303 ; CHECK-NEXT: successors: %bb.7(0x80000000)304 ; CHECK-NEXT: liveins: $w0305 ; CHECK-NEXT: {{ $}}306 ; CHECK-NEXT: B %bb.7307 ; CHECK-NEXT: {{ $}}308 ; CHECK-NEXT: bb.6.return:309 ; CHECK-NEXT: liveins: $w0310 ; CHECK-NEXT: {{ $}}311 ; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)312 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0313 ; CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp314 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state315 ; CHECK-NEXT: early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8316 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w18317 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30318 ; CHECK-NEXT: RET undef $lr, implicit killed $w0319 ; CHECK-NEXT: {{ $}}320 ; CHECK-NEXT: bb.7.return:321 ; CHECK-NEXT: successors: %bb.6(0x80000000)322 ; CHECK-NEXT: liveins: $w0323 ; CHECK-NEXT: {{ $}}324 ; CHECK-NEXT: B %bb.6325 bb.0.entry:326 successors: %bb.4(0x30000000), %bb.1(0x50000000)327 liveins: $w0, $lr, $x18328 329 CBZW renamable $w0, %bb.4330 331 bb.1.if.end:332 successors: %bb.3(0x30000000), %bb.2(0x50000000)333 liveins: $w0, $lr, $x18334 335 early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8336 frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78337 frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp338 frame-setup CFI_INSTRUCTION negate_ra_sign_state339 early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)340 frame-setup CFI_INSTRUCTION def_cfa_offset 16341 frame-setup CFI_INSTRUCTION offset $w30, -16342 TBNZW renamable $w0, 31, %bb.3343 344 bb.2.if.else:345 successors: %bb.5(0x80000000)346 liveins: $w0347 348 renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0349 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0350 renamable $w8 = MOVZWi 1, 0351 $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0352 B %bb.5353 354 bb.3.if.then2 (bbsections 1):355 successors: %bb.5(0x80000000)356 liveins: $w0357 358 renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0359 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0360 renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0361 B %bb.5362 363 bb.4.return:364 liveins: $w0365 RET undef $lr, implicit killed $w0366 367 bb.5.return:368 liveins: $w0369 B %bb.6370 371 bb.7.return:372 liveins: $w0373 early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)374 frame-destroy CFI_INSTRUCTION def_cfa_offset 0375 frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp376 frame-destroy CFI_INSTRUCTION negate_ra_sign_state377 early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8378 frame-destroy CFI_INSTRUCTION restore $w18379 frame-destroy CFI_INSTRUCTION restore $w30380 RET undef $lr, implicit killed $w0381 382 bb.6.return:383 liveins: $w0384 B %bb.7385 386 387...388