xref: /llvm-project/llvm/test/CodeGen/AArch64/xray-attribute-instrumentation.ll (revision bef8294650f0119238830d73a7527023c7c8a97f)
1; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s -check-prefixes=CHECK,CHECK-LINUX
2; RUN: llc -mtriple=aarch64-apple-darwin      < %s | FileCheck %s -check-prefixes=CHECK,CHECK-MACOS
3
4define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" {
5; CHECK-LABEL: foo:
6; CHECK-LABEL: Lxray_sled_0:
7; CHECK-NEXT:  b  #32
8; CHECK-COUNT-7:  nop
9; CHECK-NEXT:  Ltmp[[#]]:
10  ret i32 0
11; CHECK-LABEL: Lxray_sled_1:
12; CHECK-NEXT:  b  #32
13; CHECK-COUNT-7:  nop
14; CHECK-NEXT:  Ltmp[[#]]:
15; CHECK-NEXT:  ret
16}
17
18; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,foo{{$}}
19; CHECK-LINUX-LABEL: Lxray_sleds_start0:
20; CHECK-LINUX:         .xword .Lxray_sled_0
21; CHECK-LINUX:         .xword .Lxray_sled_1
22; CHECK-LINUX-LABEL: Lxray_sleds_end0:
23
24; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}}
25; CHECK-MACOS-LABEL: lxray_sleds_start0:
26; CHECK-MACOS:         .quad Lxray_sled_0
27; CHECK-MACOS:         .quad Lxray_sled_1
28; CHECK-MACOS-LABEL: Lxray_sleds_end0:
29
30define i32 @bar() nounwind noinline uwtable "function-instrument"="xray-never" "function-instrument"="xray-always" {
31; CHECK-LABEL: bar:
32; CHECK-LABEL: Lxray_sled_2:
33; CHECK-NEXT:  b  #32
34; CHECK-COUNT-7:  nop
35; CHECK-NEXT:  Ltmp[[#]]:
36  ret i32 0
37; CHECK-LABEL: Lxray_sled_3:
38; CHECK-NEXT:  b  #32
39; CHECK-COUNT-7:  nop
40; CHECK-NEXT:  Ltmp[[#]]:
41; CHECK-NEXT:  ret
42}
43
44; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,bar{{$}}
45; CHECK-LINUX-LABEL: Lxray_sleds_start1:
46; CHECK-LINUX:         .xword .Lxray_sled_2
47; CHECK-LINUX:         .xword .Lxray_sled_3
48; CHECK-LINUX-LABEL: Lxray_sleds_end1:
49
50; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}}
51; CHECK-MACOS-LABEL: lxray_sleds_start1:
52; CHECK-MACOS:         .quad Lxray_sled_2
53; CHECK-MACOS:         .quad Lxray_sled_3
54; CHECK-MACOS-LABEL: Lxray_sleds_end1:
55
56define i32 @instrumented() nounwind noinline uwtable "xray-instruction-threshold"="1" {
57; CHECK-LABEL: instrumented:
58; CHECK-LABEL: Lxray_sled_4:
59; CHECK-NEXT:  b  #32
60; CHECK-COUNT-7:  nop
61; CHECK-NEXT:  Ltmp[[#]]:
62  ret i32 0
63; CHECK-LABEL: Lxray_sled_5:
64; CHECK-NEXT:  b  #32
65; CHECK-COUNT-7:  nop
66; CHECK-NEXT:  Ltmp[[#]]:
67; CHECK-NEXT:  ret
68}
69
70; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,instrumented{{$}}
71; CHECK-LINUX-LABEL: Lxray_sleds_start2:
72; CHECK-LINUX:         .xword .Lxray_sled_4
73; CHECK-LINUX:         .xword .Lxray_sled_5
74; CHECK-LINUX-LABEL: Lxray_sleds_end2:
75
76; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}}
77; CHECK-MACOS-LABEL: lxray_sleds_start2:
78; CHECK-MACOS:         .quad Lxray_sled_4
79; CHECK-MACOS:         .quad Lxray_sled_5
80; CHECK-MACOS-LABEL: Lxray_sleds_end2:
81
82define i32 @not_instrumented() nounwind noinline uwtable "xray-instruction-threshold"="1" "function-instrument"="xray-never" {
83; CHECK-LABEL: not_instrumented
84; CHECK-NOT: Lxray_sled_6
85  ret i32 0
86; CHECK:  ret
87}
88