brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 90e48fe Raw
191 lines · plain
1; RUN: llc -mtriple=aarch64 -asm-verbose=0 < %s | FileCheck -DAUTIASP="hint #29" --check-prefixes=COMMON %s2; RUN: llc -mtriple=aarch64 -asm-verbose=0 -aarch64-authenticated-lr-check-method=load                   < %s | FileCheck -DAUTIASP="hint #29" --check-prefixes=COMMON,LDR %s3; RUN: llc -mtriple=aarch64 -asm-verbose=0 -aarch64-authenticated-lr-check-method=high-bits-notbi        < %s | FileCheck -DAUTIASP="hint #29" --check-prefixes=COMMON,BITS-NOTBI,BRK %s4; RUN: llc -mtriple=aarch64 -asm-verbose=0 -aarch64-authenticated-lr-check-method=xpac-hint              < %s | FileCheck -DAUTIASP="hint #29" -DXPACLRI="hint #7" --check-prefixes=COMMON,XPAC,BRK %s5; RUN: llc -mtriple=aarch64 -asm-verbose=0 -aarch64-authenticated-lr-check-method=xpac-hint -mattr=v8.3a < %s | FileCheck -DAUTIASP="autiasp"  -DXPACLRI="xpaclri" --check-prefixes=COMMON,XPAC,BRK %s6; RUN: llc -mtriple=aarch64 -asm-verbose=0 -aarch64-authenticated-lr-check-method=xpac      -mattr=v8.3a < %s | FileCheck -DAUTIASP="autiasp"  --check-prefixes=COMMON,XPAC83,BRK %s7 8define i32 @tailcall_direct() "sign-return-address"="non-leaf" {9; COMMON-LABEL: tailcall_direct:10; COMMON:         str x30, [sp, #-16]!11; COMMON:         ldr x30, [sp], #1612;13; COMMON-NEXT:    [[AUTIASP]]14;15; LDR-NEXT:       ldr w16, [x30]16;17; BITS-NOTBI-NEXT: eor x16, x30, x30, lsl #118; BITS-NOTBI-NEXT: tbz x16, #62, .[[GOOD:Lauth_success[_0-9]+]]19;20; XPAC-NEXT:      mov x16, x3021; XPAC-NEXT:      [[XPACLRI]]22; XPAC-NEXT:      cmp x30, x1623; XPAC-NEXT:      b.eq .[[GOOD:Lauth_success[_0-9]+]]24;25; XPAC83-NEXT:    mov x16, x3026; XPAC83-NEXT:    xpaci x1627; XPAC83-NEXT:    cmp x30, x1628; XPAC83-NEXT:    b.eq .[[GOOD:Lauth_success[_0-9]+]]29;30; BRK-NEXT:       brk #0xc47031; BRK-NEXT:     .[[GOOD]]:32; COMMON-NEXT:    b callee33  tail call void asm sideeffect "", "~{lr}"()34  %call = tail call i32 @callee()35  ret i32 %call36}37 38define i32 @tailcall_indirect(ptr %fptr) "sign-return-address"="non-leaf" {39; COMMON-LABEL: tailcall_indirect:40; COMMON:         str x30, [sp, #-16]!41; COMMON:         ldr x30, [sp], #1642;43; COMMON-NEXT:    [[AUTIASP]]44;45; LDR-NEXT:       ldr w16, [x30]46;47; BITS-NOTBI-NEXT: eor x16, x30, x30, lsl #148; BITS-NOTBI-NEXT: tbz x16, #62, .[[GOOD:Lauth_success[_0-9]+]]49;50; XPAC-NEXT:      mov x16, x3051; XPAC-NEXT:      [[XPACLRI]]52; XPAC-NEXT:      cmp x30, x1653; XPAC-NEXT:      b.eq .[[GOOD:Lauth_success[_0-9]+]]54;55; XPAC83-NEXT:    mov x16, x3056; XPAC83-NEXT:    xpaci x1657; XPAC83-NEXT:    cmp x30, x1658; XPAC83-NEXT:    b.eq .[[GOOD:Lauth_success[_0-9]+]]59;60; BRK-NEXT:       brk #0xc47061; BRK-NEXT:     .[[GOOD]]:62; COMMON-NEXT:    br x063  tail call void asm sideeffect "", "~{lr}"()64  %call = tail call i32 %fptr()65  ret i32 %call66}67 68define i32 @tailcall_direct_noframe() "sign-return-address"="non-leaf" {69; COMMON-LABEL: tailcall_direct_noframe:70; COMMON-NEXT:    .cfi_startproc71; COMMON-NEXT:    b callee72  %call = tail call i32 @callee()73  ret i32 %call74}75 76define i32 @tailcall_indirect_noframe(ptr %fptr) "sign-return-address"="non-leaf" {77; COMMON-LABEL: tailcall_indirect_noframe:78; COMMON-NEXT:    .cfi_startproc79; COMMON-NEXT:    br x080  %call = tail call i32 %fptr()81  ret i32 %call82}83 84define i32 @tailcall_direct_noframe_sign_all() "sign-return-address"="all" {85; COMMON-LABEL: tailcall_direct_noframe_sign_all:86; COMMON-NOT:     str{{.*}}x3087; COMMON-NOT:     ldr{{.*}}x3088;89; COMMON:         [[AUTIASP]]90;91; LDR-NEXT:       ldr w16, [x30]92;93; BITS-NOTBI-NEXT: eor x16, x30, x30, lsl #194; BITS-NOTBI-NEXT: tbz x16, #62, .[[GOOD:Lauth_success[_0-9]+]]95;96; XPAC-NEXT:      mov x16, x3097; XPAC-NEXT:      [[XPACLRI]]98; XPAC-NEXT:      cmp x30, x1699; XPAC-NEXT:      b.eq .[[GOOD:Lauth_success[_0-9]+]]100;101; XPAC83-NEXT:    mov x16, x30102; XPAC83-NEXT:    xpaci x16103; XPAC83-NEXT:    cmp x30, x16104; XPAC83-NEXT:    b.eq .[[GOOD:Lauth_success[_0-9]+]]105;106; BRK-NEXT:       brk #0xc470107; BRK-NEXT:     .[[GOOD]]:108; COMMON-NEXT:    b callee109  %call = tail call i32 @callee()110  ret i32 %call111}112 113define i32 @tailcall_indirect_noframe_sign_all(ptr %fptr) "sign-return-address"="all" {114; COMMON-LABEL: tailcall_indirect_noframe_sign_all:115; COMMON-NOT:     str{{.*}}x30116; COMMON-NOT:     ldr{{.*}}x30117;118; COMMON:         [[AUTIASP]]119;120; LDR-NEXT:       ldr w16, [x30]121;122; BITS-NOTBI-NEXT: eor x16, x30, x30, lsl #1123; BITS-NOTBI-NEXT: tbz x16, #62, .[[GOOD:Lauth_success[_0-9]+]]124;125; XPAC-NEXT:      mov x16, x30126; XPAC-NEXT:      [[XPACLRI]]127; XPAC-NEXT:      cmp x30, x16128; XPAC-NEXT:      b.eq .[[GOOD:Lauth_success[_0-9]+]]129;130; XPAC83-NEXT:    mov x16, x30131; XPAC83-NEXT:    xpaci x16132; XPAC83-NEXT:    cmp x30, x16133; XPAC83-NEXT:    b.eq .[[GOOD:Lauth_success[_0-9]+]]134;135; BRK-NEXT:       brk #0xc470136; BRK-NEXT:     .[[GOOD]]:137; COMMON-NEXT:    br x0138  %call = tail call i32 %fptr()139  ret i32 %call140}141 142define i32 @tailcall_ib_key() "sign-return-address"="all" "sign-return-address-key"="b_key" {143; COMMON-LABEL: tailcall_ib_key:144;145; BRK:            brk #0xc471146; BRK-NEXT:     .{{Lauth_success.*}}:147; COMMON:         b callee148  tail call void asm sideeffect "", "~{lr}"()149  %call = tail call i32 @callee()150  ret i32 %call151}152 153define i32 @tailcall_two_branches(i1 %0) "sign-return-address"="all" {154; COMMON-LABEL:    tailcall_two_branches:155; COMMON:            tbz w0, #0, .[[ELSE:LBB[_0-9]+]]156; COMMON:            str x30, [sp, #-16]!157; COMMON:            bl callee2158; COMMON:            ldr x30, [sp], #16159; COMMON-NEXT:     .[[ELSE]]:160; COMMON-NEXT:       [[AUTIASP]]161 162; LDR-NEXT:          ldr w16, [x30]163;164; BITS-NOTBI-NEXT:   eor x16, x30, x30, lsl #1165; BITS-NOTBI-NEXT:   tbz x16, #62, .[[GOOD:Lauth_success[_0-9]+]]166;167; XPAC-NEXT:         mov x16, x30168; XPAC-NEXT:         [[XPACLRI]]169; XPAC-NEXT:         cmp x30, x16170; XPAC-NEXT:         b.eq .[[GOOD:Lauth_success[_0-9]+]]171;172; XPAC83-NEXT:       mov x16, x30173; XPAC83-NEXT:       xpaci x16174; XPAC83-NEXT:       cmp x30, x16175; XPAC83-NEXT:       b.eq .[[GOOD:Lauth_success[_0-9]+]]176;177; BRK-NEXT:          brk #0xc470178; BRK-NEXT:        .[[GOOD]]:179; COMMON-NEXT:       b callee180  br i1 %0, label %2, label %31812:182  call void @callee2()183  br label %31843:185  %call = tail call i32 @callee()186  ret i32 %call187}188 189declare i32 @callee()190declare void @callee2()191