[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / machine-outliner-retaddr-sign-cfi.ll
blob3b61588f41ed9935b58b508d52bd6a19cec00592
1 ; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple \
2 ; RUN: aarch64-arm-none-eabi %s -o - | FileCheck %s --check-prefixes CHECK,V8A
3 ; RUN-V83A: llc -verify-machineinstrs -enable-machine-outliner -mtriple \
4 ; RUN-V83A: aarch64-arm-none-eabi -mattr=+v8.3a %s -o - > %t
5 ; RUN-V83A: FileCheck --check-prefixes CHECK,V83A < %t %s
7 ; Function a's outlining candidate contains a sp modifying add without a
8 ; corresponsing sub, so we shouldn't outline it.
9 define void @a() "sign-return-address"="all" "sign-return-address-key"="b_key" {
10 ; CHECK-LABEL:         a:                     // @a
11 ; CHECK:               // %bb.0:
12 ; CHECK-NEXT:          .cfi_b_key_frame
13 ; V8A-NEXT:            hint #27
14 ; V83A-NEXT:           pacibsp
15 ; V8A-NEXT, V83A-NEXT: .cfi_negate_ra_state
16   %1 = alloca i32, align 4
17   %2 = alloca i32, align 4
18   %3 = alloca i32, align 4
19   %4 = alloca i32, align 4
20   %5 = alloca i32, align 4
21   %6 = alloca i32, align 4
22   store i32 1, i32* %1, align 4
23   store i32 2, i32* %2, align 4
24   store i32 3, i32* %3, align 4
25   store i32 4, i32* %4, align 4
26   store i32 5, i32* %5, align 4
27   store i32 6, i32* %6, align 4
28 ; CHECK-NOT:          bl OUTLINED_FUNCTION_{{[0-9]+}}
29 ; V8A:                hint #31
30 ; V83A:               autibsp
31 ; CHECK-NEXT:         ret
32   ret void
35 define void @b() "sign-return-address"="all" "sign-return-address-key"="b_key" nounwind {
36 ; CHECK-LABEL:      b:                                     // @b
37 ; CHECK-NEXT:       // %bb.0:
38 ; V8A-NEXT:         hint #27
39 ; V83A-NEXT:        pacibsp
40   %1 = alloca i32, align 4
41   %2 = alloca i32, align 4
42   %3 = alloca i32, align 4
43   %4 = alloca i32, align 4
44   %5 = alloca i32, align 4
45   %6 = alloca i32, align 4
46   store i32 1, i32* %1, align 4
47   store i32 2, i32* %2, align 4
48   store i32 3, i32* %3, align 4
49   store i32 4, i32* %4, align 4
50   store i32 5, i32* %5, align 4
51   store i32 6, i32* %6, align 4
52 ; CHECK:                bl [[OUTLINED_FUNC:OUTLINED_FUNCTION_[0-9]+]]
53 ; V8A:                  hint #31
54 ; V83A:                 autibsp
55 ; V8A-NEXT, V83A-NEXT:  ret
56   ret void
59 define void @c() "sign-return-address"="all" "sign-return-address-key"="b_key" nounwind {
60 ; CHECK-LABEL:      c:                                     // @c
61 ; CHECK-NEXT:       // %bb.0:
62 ; V8A-NEXT:         hint #27
63 ; V83A-NEXT:        pacibsp
64   %1 = alloca i32, align 4
65   %2 = alloca i32, align 4
66   %3 = alloca i32, align 4
67   %4 = alloca i32, align 4
68   %5 = alloca i32, align 4
69   %6 = alloca i32, align 4
70   store i32 1, i32* %1, align 4
71   store i32 2, i32* %2, align 4
72   store i32 3, i32* %3, align 4
73   store i32 4, i32* %4, align 4
74   store i32 5, i32* %5, align 4
75   store i32 6, i32* %6, align 4
76 ; CHECK:                bl [[OUTLINED_FUNC]]
77 ; V8A:                  hint #31
78 ; V83A:                 autibsp
79 ; V8A-NEXT, V83A-NEXT:  ret
80   ret void
83 ; CHECK:            [[OUTLINED_FUNC]]
84 ; CHECK:            // %bb.0:
85 ; V8A-NEXT:             hint #27
86 ; V83A-NEXT:            pacibsp
87 ; V8A:                  hint #31
88 ; V83A:                 autibsp
89 ; V8A-NEXT, V83A-NEXT:  ret