1515; sign-return-address.ll tests combinations of -mbranch-protection=none/pac-ret
1616; and whether +pauth-lr is present or not.
1717
18- ; sign-return-address-pauth-lr.ll is identical, with the addition of this module
18+ ; sign-return-address-pauth-lr.ll is identical, with the addition of the function
1919; attribute, which enables -mbranch-protection=pac-ret+pc, and therefore tests
2020; the remaining parameter combinations in the table:
21- !llvm.module.flags = !{!1 }
22- !1 = !{i32 1 , !"branch-protection-pauth-lr" , i32 1 }
2321
2422; RUN: llc -mtriple=aarch64 < %s | FileCheck --check-prefixes=CHECK,COMPAT %s
2523; RUN: llc -mtriple=aarch64 -mattr=v8.3a < %s | FileCheck --check-prefixes=CHECK,V83A %s
2624; RUN: llc -mtriple=aarch64 -mattr=v9a -mattr=pauth-lr < %s | FileCheck --check-prefixes=PAUTHLR %s
2725
28- define i32 @leaf (i32 %x ) {
26+ define i32 @leaf (i32 %x ) "branch-protection-pauth-lr" = "true" {
2927; CHECK-LABEL: leaf:
3028; CHECK: // %bb.0:
3129; CHECK-NEXT: ret
@@ -36,7 +34,7 @@ define i32 @leaf(i32 %x) {
3634 ret i32 %x
3735}
3836
39- define i32 @leaf_sign_none (i32 %x ) "sign-return-address" ="none" {
37+ define i32 @leaf_sign_none (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="none" {
4038; CHECK-LABEL: leaf_sign_none:
4139; CHECK: // %bb.0:
4240; CHECK-NEXT: ret
@@ -47,7 +45,7 @@ define i32 @leaf_sign_none(i32 %x) "sign-return-address"="none" {
4745 ret i32 %x
4846}
4947
50- define i32 @leaf_sign_non_leaf (i32 %x ) "sign-return-address" ="non-leaf" {
48+ define i32 @leaf_sign_non_leaf (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="non-leaf" {
5149; CHECK-LABEL: leaf_sign_non_leaf:
5250; CHECK: // %bb.0:
5351; CHECK-NEXT: ret
@@ -58,7 +56,7 @@ define i32 @leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
5856 ret i32 %x
5957}
6058
61- define i32 @leaf_sign_all (i32 %x ) "sign-return-address" ="all" {
59+ define i32 @leaf_sign_all (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" {
6260; COMPAT-LABEL: leaf_sign_all:
6361; COMPAT: // %bb.0:
6462; COMPAT-NEXT: hint #39
@@ -89,7 +87,7 @@ define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
8987 ret i32 %x
9088}
9189
92- define i64 @leaf_clobbers_lr (i64 %x ) "sign-return-address" ="non-leaf" {
90+ define i64 @leaf_clobbers_lr (i64 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="non-leaf" {
9391; COMPAT-LABEL: leaf_clobbers_lr:
9492; COMPAT: // %bb.0:
9593; COMPAT-NEXT: hint #39
@@ -144,7 +142,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf" {
144142
145143declare i32 @foo (i32 )
146144
147- define i32 @non_leaf_sign_all (i32 %x ) "sign-return-address" ="all" {
145+ define i32 @non_leaf_sign_all (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" {
148146; COMPAT-LABEL: non_leaf_sign_all:
149147; COMPAT: // %bb.0:
150148; COMPAT-NEXT: hint #39
@@ -191,7 +189,7 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
191189 ret i32 %call
192190}
193191
194- define i32 @non_leaf_sign_non_leaf (i32 %x ) "sign-return-address" ="non-leaf" {
192+ define i32 @non_leaf_sign_non_leaf (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="non-leaf" {
195193; COMPAT-LABEL: non_leaf_sign_non_leaf:
196194; COMPAT: // %bb.0:
197195; COMPAT-NEXT: hint #39
@@ -239,7 +237,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
239237}
240238
241239; Should not use the RETAA instruction.
242- define i32 @non_leaf_scs (i32 %x ) "sign-return-address" ="non-leaf" shadowcallstack "target-features" ="+v8.3a,+reserve-x18" {
240+ define i32 @non_leaf_scs (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="non-leaf" shadowcallstack "target-features" ="+v8.3a,+reserve-x18" {
243241; CHECK-LABEL: non_leaf_scs:
244242; CHECK: // %bb.0:
245243; CHECK-NEXT: str x30, [x18], #8
@@ -278,7 +276,7 @@ define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstac
278276 ret i32 %call
279277}
280278
281- define i32 @leaf_sign_all_v83 (i32 %x ) "sign-return-address" ="all" "target-features" ="+v8.3a" {
279+ define i32 @leaf_sign_all_v83 (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" "target-features" ="+v8.3a" {
282280; CHECK-LABEL: leaf_sign_all_v83:
283281; CHECK: // %bb.0:
284282; CHECK-NEXT: hint #39
@@ -300,7 +298,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "sign-return-address"="all" "target-featur
300298
301299declare fastcc i64 @bar (i64 )
302300
303- define fastcc void @spill_lr_and_tail_call (i64 %x ) "sign-return-address" ="all" {
301+ define fastcc void @spill_lr_and_tail_call (i64 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" {
304302; COMPAT-LABEL: spill_lr_and_tail_call:
305303; COMPAT: // %bb.0:
306304; COMPAT-NEXT: hint #39
@@ -356,7 +354,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
356354 ret void
357355}
358356
359- define i32 @leaf_sign_all_a_key (i32 %x ) "sign-return-address" ="all" "sign-return-address-key" ="a_key" {
357+ define i32 @leaf_sign_all_a_key (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" "sign-return-address-key" ="a_key" {
360358; COMPAT-LABEL: leaf_sign_all_a_key:
361359; COMPAT: // %bb.0:
362360; COMPAT-NEXT: hint #39
@@ -387,7 +385,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return
387385 ret i32 %x
388386}
389387
390- define i32 @leaf_sign_all_b_key (i32 %x ) "sign-return-address" ="all" "sign-return-address-key" ="b_key" {
388+ define i32 @leaf_sign_all_b_key (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" "sign-return-address-key" ="b_key" {
391389; COMPAT-LABEL: leaf_sign_all_b_key:
392390; COMPAT: // %bb.0:
393391; COMPAT-NEXT: .cfi_b_key_frame
@@ -421,7 +419,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return
421419 ret i32 %x
422420}
423421
424- define i32 @leaf_sign_all_v83_b_key (i32 %x ) "sign-return-address" ="all" "target-features" ="+v8.3a" "sign-return-address-key" ="b_key" {
422+ define i32 @leaf_sign_all_v83_b_key (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" "target-features" ="+v8.3a" "sign-return-address-key" ="b_key" {
425423; CHECK-LABEL: leaf_sign_all_v83_b_key:
426424; CHECK: // %bb.0:
427425; CHECK-NEXT: .cfi_b_key_frame
@@ -444,7 +442,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-
444442}
445443
446444; Note that BTI instruction is not needed before PACIASP.
447- define i32 @leaf_sign_all_a_key_bti (i32 %x ) "sign-return-address" ="all" "sign-return-address-key" ="a_key" "branch-target-enforcement" ="true" {
445+ define i32 @leaf_sign_all_a_key_bti (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" "sign-return-address-key" ="a_key" "branch-target-enforcement" ="true" {
448446; COMPAT-LABEL: leaf_sign_all_a_key_bti:
449447; COMPAT: // %bb.0:
450448; COMPAT-NEXT: hint #34
@@ -479,7 +477,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-re
479477}
480478
481479; Note that BTI instruction is not needed before PACIBSP.
482- define i32 @leaf_sign_all_b_key_bti (i32 %x ) "sign-return-address" ="all" "sign-return-address-key" ="b_key" "branch-target-enforcement" ="true" {
480+ define i32 @leaf_sign_all_b_key_bti (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" "sign-return-address-key" ="b_key" "branch-target-enforcement" ="true" {
483481; COMPAT-LABEL: leaf_sign_all_b_key_bti:
484482; COMPAT: // %bb.0:
485483; COMPAT-NEXT: hint #34
@@ -517,7 +515,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-re
517515}
518516
519517; Note that BTI instruction is not needed before PACIBSP.
520- define i32 @leaf_sign_all_v83_b_key_bti (i32 %x ) "sign-return-address" ="all" "target-features" ="+v8.3a" "sign-return-address-key" ="b_key" "branch-target-enforcement" ="true" {
518+ define i32 @leaf_sign_all_v83_b_key_bti (i32 %x ) "branch-protection-pauth-lr" = "true" " sign-return-address" ="all" "target-features" ="+v8.3a" "sign-return-address-key" ="b_key" "branch-target-enforcement" ="true" {
521519; CHECK-LABEL: leaf_sign_all_v83_b_key_bti:
522520; CHECK: // %bb.0:
523521; CHECK-NEXT: hint #34
0 commit comments