1; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+pacbti< %s | FileCheck %s 2 3target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" 4target triple = "thumbv8.1m.main-m.main-unknown" 5 6; When PACBTI is enabled, indirect tail-calls must not use R12 that is used 7; to store authentication code. 8 9define void @pacbti_disabled(ptr %p) "sign-return-address"="none" { 10entry: 11 tail call void %p() 12; CHECK: bx {{r0|r1|r2|r3|r12}} 13 ret void 14} 15 16define void @pacbti_enabled(ptr %p) "sign-return-address"="all" { 17entry: 18 tail call void %p() 19; CHECK: bx {{r0|r1|r2|r3}} 20 ret void 21} 22 23define void @pacbti_disabled_force_r12(ptr %p) "sign-return-address"="none" { 24entry: 25 %p_r12 = tail call ptr asm "", "={r12},{r12},~{lr}"(ptr %p) 26 tail call void %p_r12() 27; CHECK: bx r12 28 ret void 29} 30 31define void @pacbti_enabled_force_r12(ptr %p) "sign-return-address"="all" { 32entry: 33 %p_r12 = tail call ptr asm "", "={r12},{r12},~{lr}"(ptr %p) 34 tail call void %p_r12() 35; CHECK: bx {{r0|r1|r2|r3}} 36 ret void 37} 38