1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=aarch64 -run-pass=cfi-fixup %s -o - | FileCheck %s 3--- | 4 define i32 @f0(i32 %x) #0 { 5 entry: br label %return 6 if.end: br label %return 7 if.then2: br label %return 8 if.else: br label %return 9 return: 10 ret i32 0 11 } 12 13 define i32 @f1(i32 %x) #0 { 14 entry: br label %return 15 if.end: br label %return 16 if.then2: br label %return 17 if.else: br label %return 18 return: 19 ret i32 0 20 } 21 22 define i32 @f2(i32 %x) #0 { 23 entry: br label %return 24 if.end: br label %return 25 if.then2: br label %return 26 if.else: br label %return 27 return: 28 ret i32 0 29 } 30 31 declare i32 @g(i32) 32 33 attributes #0 = { nounwind shadowcallstack uwtable "sign-return-address"="non-leaf" "target-features"="+reserve-x18" } 34 35... 36--- 37name: f0 38alignment: 4 39exposesReturnsTwice: false 40legalized: false 41regBankSelected: false 42selected: false 43failedISel: false 44tracksRegLiveness: true 45hasWinCFI: false 46failsVerification: false 47registers: [] 48liveins: 49 - { reg: '$w0', virtual-reg: '' } 50frameInfo: 51 isFrameAddressTaken: false 52 isReturnAddressTaken: false 53 hasStackMap: false 54 hasPatchPoint: false 55 stackSize: 16 56 offsetAdjustment: 0 57 maxAlignment: 16 58 adjustsStack: true 59 hasCalls: true 60 stackProtector: '' 61 maxCallFrameSize: 0 62 cvBytesOfCalleeSavedRegisters: 0 63 hasOpaqueSPAdjustment: false 64 hasVAStart: false 65 hasMustTailInVarArgFunc: false 66 hasTailCall: false 67 localFrameSize: 0 68 savePoint: '' 69 restorePoint: '' 70fixedStack: [] 71stack: 72 - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16, 73 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 74 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 75callSites: [] 76debugValueSubstitutions: [] 77constants: [] 78machineFunctionInfo: 79 hasRedZone: false 80body: | 81 ; CHECK-LABEL: name: f0 82 ; CHECK: bb.0.entry: 83 ; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.1(0x50000000) 84 ; CHECK-NEXT: liveins: $w0, $lr, $x18 85 ; CHECK-NEXT: {{ $}} 86 ; CHECK-NEXT: CBZW renamable $w0, %bb.4 87 ; CHECK-NEXT: {{ $}} 88 ; CHECK-NEXT: bb.1.if.end: 89 ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.2(0x50000000) 90 ; CHECK-NEXT: liveins: $w0, $lr, $x18 91 ; CHECK-NEXT: {{ $}} 92 ; CHECK-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8 93 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78 94 ; CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp 95 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state 96 ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0) 97 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 98 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16 99 ; CHECK-NEXT: CFI_INSTRUCTION remember_state 100 ; CHECK-NEXT: TBNZW renamable $w0, 31, %bb.3 101 ; CHECK-NEXT: {{ $}} 102 ; CHECK-NEXT: bb.2.if.else: 103 ; CHECK-NEXT: successors: %bb.5(0x80000000) 104 ; CHECK-NEXT: liveins: $w0 105 ; CHECK-NEXT: {{ $}} 106 ; CHECK-NEXT: renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0 107 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 108 ; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0 109 ; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 110 ; CHECK-NEXT: B %bb.5 111 ; CHECK-NEXT: {{ $}} 112 ; CHECK-NEXT: bb.3.if.then2: 113 ; CHECK-NEXT: successors: %bb.5(0x80000000) 114 ; CHECK-NEXT: liveins: $w0 115 ; CHECK-NEXT: {{ $}} 116 ; CHECK-NEXT: renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0 117 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 118 ; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 119 ; CHECK-NEXT: B %bb.5 120 ; CHECK-NEXT: {{ $}} 121 ; CHECK-NEXT: bb.4.return: 122 ; CHECK-NEXT: liveins: $w0 123 ; CHECK-NEXT: {{ $}} 124 ; CHECK-NEXT: CFI_INSTRUCTION def_cfa $wsp, 0 125 ; CHECK-NEXT: CFI_INSTRUCTION negate_ra_sign_state 126 ; CHECK-NEXT: CFI_INSTRUCTION same_value $w18 127 ; CHECK-NEXT: CFI_INSTRUCTION same_value $w30 128 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 129 ; CHECK-NEXT: {{ $}} 130 ; CHECK-NEXT: bb.5.return: 131 ; CHECK-NEXT: successors: %bb.7(0x80000000) 132 ; CHECK-NEXT: liveins: $w0 133 ; CHECK-NEXT: {{ $}} 134 ; CHECK-NEXT: CFI_INSTRUCTION restore_state 135 ; CHECK-NEXT: CFI_INSTRUCTION remember_state 136 ; CHECK-NEXT: B %bb.7 137 ; CHECK-NEXT: {{ $}} 138 ; CHECK-NEXT: bb.6.return: 139 ; CHECK-NEXT: liveins: $w0 140 ; CHECK-NEXT: {{ $}} 141 ; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0) 142 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 143 ; CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp 144 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state 145 ; CHECK-NEXT: early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8 146 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w18 147 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30 148 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 149 ; CHECK-NEXT: {{ $}} 150 ; CHECK-NEXT: bb.7.return: 151 ; CHECK-NEXT: successors: %bb.6(0x80000000) 152 ; CHECK-NEXT: liveins: $w0 153 ; CHECK-NEXT: {{ $}} 154 ; CHECK-NEXT: CFI_INSTRUCTION restore_state 155 ; CHECK-NEXT: B %bb.6 156 bb.0.entry: 157 successors: %bb.4(0x30000000), %bb.1(0x50000000) 158 liveins: $w0, $lr, $x18 159 160 CBZW renamable $w0, %bb.4 161 162 bb.1.if.end: 163 successors: %bb.3(0x30000000), %bb.2(0x50000000) 164 liveins: $w0, $lr, $x18 165 166 early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8 167 frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78 168 frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp 169 frame-setup CFI_INSTRUCTION negate_ra_sign_state 170 early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0) 171 frame-setup CFI_INSTRUCTION def_cfa_offset 16 172 frame-setup CFI_INSTRUCTION offset $w30, -16 173 TBNZW renamable $w0, 31, %bb.3 174 175 bb.2.if.else: 176 successors: %bb.5(0x80000000) 177 liveins: $w0 178 179 renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0 180 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 181 renamable $w8 = MOVZWi 1, 0 182 $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 183 B %bb.5 184 185 bb.3.if.then2: 186 successors: %bb.5(0x80000000) 187 liveins: $w0 188 189 renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0 190 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 191 renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 192 B %bb.5 193 194 bb.4.return: 195 liveins: $w0 196 RET undef $lr, implicit killed $w0 197 198 bb.5.return: 199 liveins: $w0 200 B %bb.6 201 202 bb.7.return: 203 liveins: $w0 204 early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0) 205 frame-destroy CFI_INSTRUCTION def_cfa_offset 0 206 frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp 207 frame-destroy CFI_INSTRUCTION negate_ra_sign_state 208 early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8 209 frame-destroy CFI_INSTRUCTION restore $w18 210 frame-destroy CFI_INSTRUCTION restore $w30 211 RET undef $lr, implicit killed $w0 212 213 bb.6.return: 214 liveins: $w0 215 B %bb.7 216 217 218... 219--- 220name: f1 221alignment: 4 222exposesReturnsTwice: false 223legalized: false 224regBankSelected: false 225selected: false 226failedISel: false 227tracksRegLiveness: true 228hasWinCFI: false 229failsVerification: false 230registers: [] 231liveins: 232 - { reg: '$w0', virtual-reg: '' } 233frameInfo: 234 isFrameAddressTaken: false 235 isReturnAddressTaken: false 236 hasStackMap: false 237 hasPatchPoint: false 238 stackSize: 16 239 offsetAdjustment: 0 240 maxAlignment: 16 241 adjustsStack: true 242 hasCalls: true 243 stackProtector: '' 244 maxCallFrameSize: 0 245 cvBytesOfCalleeSavedRegisters: 0 246 hasOpaqueSPAdjustment: false 247 hasVAStart: false 248 hasMustTailInVarArgFunc: false 249 hasTailCall: false 250 localFrameSize: 0 251 savePoint: '' 252 restorePoint: '' 253fixedStack: [] 254stack: 255 - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16, 256 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 257 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 258callSites: [] 259debugValueSubstitutions: [] 260constants: [] 261machineFunctionInfo: 262 hasRedZone: false 263body: | 264 ; CHECK-LABEL: name: f1 265 ; CHECK: bb.0.entry: 266 ; CHECK-NEXT: successors: %bb.5(0x30000000), %bb.1(0x50000000) 267 ; CHECK-NEXT: liveins: $w0, $lr, $x18 268 ; CHECK-NEXT: {{ $}} 269 ; CHECK-NEXT: CBZW renamable $w0, %bb.5 270 ; CHECK-NEXT: {{ $}} 271 ; CHECK-NEXT: bb.1.if.end: 272 ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.2(0x50000000) 273 ; CHECK-NEXT: liveins: $w0, $lr, $x18 274 ; CHECK-NEXT: {{ $}} 275 ; CHECK-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8 276 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78 277 ; CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp 278 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state 279 ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0) 280 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 281 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16 282 ; CHECK-NEXT: TBNZW renamable $w0, 31, %bb.3 283 ; CHECK-NEXT: {{ $}} 284 ; CHECK-NEXT: bb.2.if.else: 285 ; CHECK-NEXT: successors: %bb.4(0x80000000) 286 ; CHECK-NEXT: liveins: $w0 287 ; CHECK-NEXT: {{ $}} 288 ; CHECK-NEXT: renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0 289 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 290 ; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0 291 ; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 292 ; CHECK-NEXT: B %bb.4 293 ; CHECK-NEXT: {{ $}} 294 ; CHECK-NEXT: bb.3.if.then2: 295 ; CHECK-NEXT: successors: %bb.4(0x80000000) 296 ; CHECK-NEXT: liveins: $w0 297 ; CHECK-NEXT: {{ $}} 298 ; CHECK-NEXT: renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0 299 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 300 ; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 301 ; CHECK-NEXT: B %bb.4 302 ; CHECK-NEXT: {{ $}} 303 ; CHECK-NEXT: bb.4.return: 304 ; CHECK-NEXT: liveins: $w0 305 ; CHECK-NEXT: {{ $}} 306 ; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0) 307 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 308 ; CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp 309 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state 310 ; CHECK-NEXT: early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8 311 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w18 312 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30 313 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 314 ; CHECK-NEXT: {{ $}} 315 ; CHECK-NEXT: bb.5.return: 316 ; CHECK-NEXT: liveins: $w0 317 ; CHECK-NEXT: {{ $}} 318 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 319 bb.0.entry: 320 successors: %bb.5(0x30000000), %bb.1(0x50000000) 321 liveins: $w0, $lr, $x18 322 323 CBZW renamable $w0, %bb.5 324 325 bb.1.if.end: 326 successors: %bb.3(0x30000000), %bb.2(0x50000000) 327 liveins: $w0, $lr, $x18 328 329 early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8 330 frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78 331 frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp 332 frame-setup CFI_INSTRUCTION negate_ra_sign_state 333 early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0) 334 frame-setup CFI_INSTRUCTION def_cfa_offset 16 335 frame-setup CFI_INSTRUCTION offset $w30, -16 336 TBNZW renamable $w0, 31, %bb.3 337 338 bb.2.if.else: 339 successors: %bb.4(0x80000000) 340 liveins: $w0 341 342 renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0 343 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 344 renamable $w8 = MOVZWi 1, 0 345 $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 346 B %bb.4 347 348 bb.3.if.then2: 349 successors: %bb.4(0x80000000) 350 liveins: $w0 351 352 renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0 353 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 354 renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 355 B %bb.4 356 357 bb.4.return: 358 liveins: $w0 359 360 early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0) 361 frame-destroy CFI_INSTRUCTION def_cfa_offset 0 362 frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp 363 frame-destroy CFI_INSTRUCTION negate_ra_sign_state 364 early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8 365 frame-destroy CFI_INSTRUCTION restore $w18 366 frame-destroy CFI_INSTRUCTION restore $w30 367 RET undef $lr, implicit killed $w0 368 369 bb.5.return: 370 liveins: $w0 371 RET undef $lr, implicit killed $w0 372 373... 374--- 375name: f2 376alignment: 4 377exposesReturnsTwice: false 378legalized: false 379regBankSelected: false 380selected: false 381failedISel: false 382tracksRegLiveness: true 383hasWinCFI: false 384failsVerification: false 385registers: [] 386liveins: 387 - { reg: '$w0', virtual-reg: '' } 388frameInfo: 389 isFrameAddressTaken: false 390 isReturnAddressTaken: false 391 hasStackMap: false 392 hasPatchPoint: false 393 stackSize: 16 394 offsetAdjustment: 0 395 maxAlignment: 16 396 adjustsStack: true 397 hasCalls: true 398 stackProtector: '' 399 maxCallFrameSize: 0 400 cvBytesOfCalleeSavedRegisters: 0 401 hasOpaqueSPAdjustment: false 402 hasVAStart: false 403 hasMustTailInVarArgFunc: false 404 hasTailCall: false 405 localFrameSize: 0 406 savePoint: '' 407 restorePoint: '' 408fixedStack: [] 409stack: 410 - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16, 411 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 412 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 413callSites: [] 414debugValueSubstitutions: [] 415constants: [] 416machineFunctionInfo: 417 hasRedZone: false 418body: | 419 ; CHECK-LABEL: name: f2 420 ; CHECK: bb.0.entry: 421 ; CHECK-NEXT: successors: %bb.5(0x30000000), %bb.1(0x50000000) 422 ; CHECK-NEXT: liveins: $w0, $lr, $x18 423 ; CHECK-NEXT: {{ $}} 424 ; CHECK-NEXT: CBZW renamable $w0, %bb.5 425 ; CHECK-NEXT: {{ $}} 426 ; CHECK-NEXT: bb.1.if.end: 427 ; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.2(0x50000000) 428 ; CHECK-NEXT: liveins: $w0, $lr, $x18 429 ; CHECK-NEXT: {{ $}} 430 ; CHECK-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8 431 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78 432 ; CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp 433 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state 434 ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0) 435 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 436 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16 437 ; CHECK-NEXT: TBNZW renamable $w0, 31, %bb.3 438 ; CHECK-NEXT: {{ $}} 439 ; CHECK-NEXT: bb.2.if.else: 440 ; CHECK-NEXT: successors: %bb.4(0x80000000) 441 ; CHECK-NEXT: liveins: $w0 442 ; CHECK-NEXT: {{ $}} 443 ; CHECK-NEXT: renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0 444 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 445 ; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0 446 ; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 447 ; CHECK-NEXT: B %bb.4 448 ; CHECK-NEXT: {{ $}} 449 ; CHECK-NEXT: bb.3.if.then2: 450 ; CHECK-NEXT: successors: %bb.4(0x80000000) 451 ; CHECK-NEXT: liveins: $w0 452 ; CHECK-NEXT: {{ $}} 453 ; CHECK-NEXT: renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0 454 ; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 455 ; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 456 ; CHECK-NEXT: B %bb.4 457 ; CHECK-NEXT: {{ $}} 458 ; CHECK-NEXT: bb.4.return: 459 ; CHECK-NEXT: liveins: $w0 460 ; CHECK-NEXT: {{ $}} 461 ; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0) 462 ; CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp 463 ; CHECK-NEXT: early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8 464 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 465 ; CHECK-NEXT: {{ $}} 466 ; CHECK-NEXT: bb.5.return: 467 ; CHECK-NEXT: liveins: $w0 468 ; CHECK-NEXT: {{ $}} 469 ; CHECK-NEXT: CFI_INSTRUCTION def_cfa $wsp, 0 470 ; CHECK-NEXT: CFI_INSTRUCTION negate_ra_sign_state 471 ; CHECK-NEXT: CFI_INSTRUCTION same_value $w18 472 ; CHECK-NEXT: CFI_INSTRUCTION same_value $w30 473 ; CHECK-NEXT: RET undef $lr, implicit killed $w0 474 bb.0.entry: 475 successors: %bb.5(0x30000000), %bb.1(0x50000000) 476 liveins: $w0, $lr, $x18 477 478 CBZW renamable $w0, %bb.5 479 480 bb.1.if.end: 481 successors: %bb.3(0x30000000), %bb.2(0x50000000) 482 liveins: $w0, $lr, $x18 483 484 early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8 485 frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78 486 frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp 487 frame-setup CFI_INSTRUCTION negate_ra_sign_state 488 early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0) 489 frame-setup CFI_INSTRUCTION def_cfa_offset 16 490 frame-setup CFI_INSTRUCTION offset $w30, -16 491 TBNZW renamable $w0, 31, %bb.3 492 493 bb.2.if.else: 494 successors: %bb.4(0x80000000) 495 liveins: $w0 496 497 renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0 498 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 499 renamable $w8 = MOVZWi 1, 0 500 $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0 501 B %bb.4 502 503 bb.3.if.then2: 504 successors: %bb.4(0x80000000) 505 liveins: $w0 506 507 renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0 508 BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0 509 renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0 510 B %bb.4 511 512 bb.4.return: 513 liveins: $w0 514 515 early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0) 516 frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp 517 early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8 518 RET undef $lr, implicit killed $w0 519 520 bb.5.return: 521 liveins: $w0 522 RET undef $lr, implicit killed $w0 523 524... 525