• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -mtriple aarch64-arm-linux-gnu --enable-machine-outliner \
2; RUN: -verify-machineinstrs %s -o - | FileCheck --check-prefixes CHECK,V8A %s
3; RUN-V83A: llc -mtriple aarch64-arm-none-eabi -enable-machine-outliner \
4; RUN-V83A: -verify-machineinstrs -mattr=+v8.3a %s -o - > %t
5; RUN-V83A: FileCheck --check-prefixes CHECK,V83A < %t %s
6
7declare i32 @thunk_called_fn(i32, i32, i32, i32)
8
9define i32 @a() #0 {
10; CHECK-LABEL:  a:                                      // @a
11; CHECK:        // %bb.0:                               // %entry
12; V8A-NEXT:         hint #25
13; V83A-NEXT:        paciasp
14; V8A:              hint #29
15; V83A:             autiasp
16; CHECK-NEXT:       ret
17entry:
18  %call = tail call i32 @thunk_called_fn(i32 1, i32 2, i32 3, i32 4)
19  %cx = add i32 %call, 8
20  ret i32 %cx
21}
22
23define i32 @b() #0 {
24; CHECK-LABEL:  b:                                      // @b
25; CHECK:        // %bb.0:                               // %entry
26; V8A-NEXT:         hint #25
27; V83A-NEXT:        paciasp
28; CHECK-NEXT:       .cfi_negate_ra_state
29; V8A:              hint #29
30; V83A:             autiasp
31; CHECK-NEXT:       ret
32entry:
33  %call = tail call i32 @thunk_called_fn(i32 1, i32 2, i32 3, i32 4)
34  %cx = add i32 %call, 88
35  ret i32 %cx
36}
37
38define hidden i32 @c(i32 (i32, i32, i32, i32)* %fptr) #0 {
39; CHECK-LABEL:  c:                                      // @c
40; CHECK:        // %bb.0:                               // %entry
41; V8A-NEXT:         hint #25
42; V83A-NEXT:        paciasp
43; CHECK-NEXT:       .cfi_negate_ra_state
44; V8A:              hint #29
45; V83A:             autiasp
46; CHECK-NEXT:       ret
47entry:
48  %call = tail call i32 %fptr(i32 1, i32 2, i32 3, i32 4)
49  %add = add nsw i32 %call, 8
50  ret i32 %add
51}
52
53define hidden i32 @d(i32 (i32, i32, i32, i32)* %fptr) #0 {
54; CHECK-LABEL:  d:                                      // @d
55; CHECK:        // %bb.0:                               // %entry
56; V8A-NEXT:         hint #25
57; V83A-NEXT:        paciasp
58; CHECK-NEXT:       .cfi_negate_ra_state
59; V8A:              hint #29
60; V83A:             autiasp
61; CHECK-NEXT:       ret
62entry:
63  %call = tail call i32 %fptr(i32 1, i32 2, i32 3, i32 4)
64  %add = add nsw i32 %call, 88
65  ret i32 %add
66}
67
68attributes #0 = { "sign-return-address"="non-leaf" }
69
70; CHECK-NOT:        [[OUTLINED_FUNCTION_{{.*}}]]
71; CHECK-NOT:         .cfi_b_key_frame
72; CHECK-NOT:         paci{{[a,b]}}sp
73; CHECK-NOT:         hint #2{{[5,7]}}
74; CHECK-NOT:         .cfi_negate_ra_state
75; CHECK-NOT:         auti{{[a,b]}}sp
76; CHECK-NOT:         hint #{{[29,31]}}
77