# RUN: llc --run-pass=arm-branch-targets %s -o - | FileCheck %s --- | target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" target triple = "thumbv8.1m.main-arm-unknown-eabi" define hidden i32 @_Z1fi(i32 %x) { entry: %add = add nsw i32 %x, 1 %call = tail call i32 @_Z1gi(i32 %add) %sub = add nsw i32 %call, -1 ret i32 %sub } declare dso_local i32 @_Z1gi(i32) !llvm.module.flags = !{!0, !1, !2} !0 = !{i32 8, !"branch-target-enforcement", i32 1} !1 = !{i32 8, !"sign-return-address", i32 1} !2 = !{i32 8, !"sign-return-address-all", i32 0} ... --- name: _Z1fi alignment: 4 exposesReturnsTwice: false legalized: false regBankSelected: false selected: false failedISel: false tracksRegLiveness: true hasWinCFI: false registers: [] liveins: - { reg: '$r0', virtual-reg: '' } frameInfo: isFrameAddressTaken: false isReturnAddressTaken: false hasStackMap: false hasPatchPoint: false stackSize: 16 offsetAdjustment: 0 maxAlignment: 4 adjustsStack: true hasCalls: true stackProtector: '' maxCallFrameSize: 0 cvBytesOfCalleeSavedRegisters: 0 hasOpaqueSPAdjustment: false hasVAStart: false hasMustTailInVarArgFunc: false localFrameSize: 0 savePoint: '' restorePoint: '' fixedStack: [] stack: - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, stack-id: default, callee-saved-register: '$r7', callee-saved-restored: true, debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } - { id: 2, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4, stack-id: default, callee-saved-register: '$r12', callee-saved-restored: true, debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } callSites: [] debugValueSubstitutions: [] constants: [] machineFunctionInfo: {} body: | bb.0.entry: liveins: $r0, $r7, $lr, $r12 frame-setup t2PAC implicit-def $r12, implicit $lr, implicit $sp frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr, implicit-def $sp, implicit $sp frame-setup CFI_INSTRUCTION def_cfa_offset 8 frame-setup CFI_INSTRUCTION offset $lr, -4 frame-setup CFI_INSTRUCTION offset $r7, -8 early-clobber $sp = frame-setup t2STR_PRE killed $r12, $sp, -4, 14 /* CC::al */, $noreg frame-setup CFI_INSTRUCTION def_cfa_offset 12 frame-setup CFI_INSTRUCTION offset $ra_auth_code, -12 $sp = frame-setup tSUBspi $sp, 1, 14 /* CC::al */, $noreg frame-setup CFI_INSTRUCTION def_cfa_offset 16 renamable $r0, dead $cpsr = nsw tADDi8 killed renamable $r0, 1, 14 /* CC::al */, $noreg tBL 14 /* CC::al */, $noreg, @_Z1gi, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit-def $sp, implicit-def $r0 renamable $r0, dead $cpsr = nsw tSUBi8 killed renamable $r0, 1, 14 /* CC::al */, $noreg $sp = frame-destroy tADDspi $sp, 1, 14 /* CC::al */, $noreg $r12, $sp = frame-destroy t2LDR_POST $sp, 4, 14 /* CC::al */, $noreg $sp = frame-destroy t2LDMIA_UPD $sp, 14 /* CC::al */, $noreg, def $r7, def $lr t2AUT implicit $r12, implicit $lr, implicit $sp tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0 ... # Check PAC is replaces with PACBTI and it has the frame-setup flag # CHECK-LABEL: bb.0.entry: # CHECK: frame-setup t2PACBTI