xref: /llvm-project/llvm/test/CodeGen/AArch64/xray-tail-call-sled.ll (revision bef8294650f0119238830d73a7527023c7c8a97f)
1; RUN: llc -mtriple=aarch64-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 @callee() nounwind noinline uwtable "function-instrument"="xray-always" {
5; CHECK:       .p2align	2
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-NEXT:  mov	w0, wzr
12; CHECK-NEXT:  .p2align	2
13; CHECK-LABEL: Lxray_sled_1:
14; CHECK-NEXT:  b	#32
15; CHECK-COUNT-7:  nop
16; CHECK-NEXT:  Ltmp[[#]]:
17; CHECK-NEXT:  ret
18}
19
20; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,callee{{$}}
21; CHECK-LINUX-LABEL: .Lxray_sleds_start0:
22; CHECK-LINUX-NEXT:  [[TMP:.Ltmp[0-9]+]]:
23; CHECK-LINUX:         .xword .Lxray_sled_0-[[TMP]]
24; CHECK-LINUX:       [[TMP:.Ltmp[0-9]+]]:
25; CHECK-LINUX-NEXT:    .xword .Lxray_sled_1-[[TMP]]
26; CHECK-LINUX-LABEL: Lxray_sleds_end0:
27; CHECK-LINUX-LABEL: .section xray_fn_idx,"ao",@progbits,callee{{$}}
28; CHECK-LINUX:         .xword .Lxray_sleds_start0
29; CHECK-LINUX-NEXT:    .xword 2
30
31; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}}
32; CHECK-MACOS-LABEL: lxray_sleds_start0:
33; CHECK-MACOS-NEXT:  [[TMP:Ltmp[0-9]+]]:
34; CHECK-MACOS:         .quad Lxray_sled_0-[[TMP]]
35; CHECK-MACOS:       [[TMP:Ltmp[0-9]+]]:
36; CHECK-MACOS-NEXT:    .quad Lxray_sled_1-[[TMP]]
37; CHECK-MACOS-LABEL: Lxray_sleds_end0:
38; CHECK-MACOS-LABEL: .section __DATA,xray_fn_idx,regular,live_support{{$}}
39; CHECK-MACOS:       [[IDX:lxray_fn_idx[0-9]+]]:
40; CHECK-MACOS-NEXT:    .quad lxray_sleds_start0-[[IDX]]
41; CHECK-MACOS-NEXT:    .quad 2
42
43define i32 @caller() nounwind noinline uwtable "function-instrument"="xray-always" {
44; CHECK:       .p2align	2
45; CHECK-LABEL: Lxray_sled_2:
46; CHECK-NEXT:  b	#32
47; CHECK-COUNT-7:  nop
48; CHECK-NEXT:  Ltmp[[#]]:
49; CHECK:       .p2align	2
50; CHECK-LABEL: Lxray_sled_3:
51; CHECK-NEXT:  b	#32
52; CHECK-COUNT-7:  nop
53; CHECK-NEXT:  Ltmp[[#]]:
54  %retval = tail call i32 @callee()
55; CHECK-LINUX: b	callee
56; CHECK-MACOS: b	_callee
57  ret i32 %retval
58}
59
60; CHECK-LINUX-LABEL: .section xray_instr_map,"ao",@progbits,caller{{$}}
61; CHECK-LINUX-LABEL: Lxray_sleds_start1:
62; CHECK-LINUX:         .xword .Lxray_sled_2
63; CHECK-LINUX:         .xword .Lxray_sled_3
64; CHECK-LINUX-LABEL: Lxray_sleds_end1:
65; CHECK-LINUX-LABEL: .section xray_fn_idx,"ao",@progbits,caller{{$}}
66; CHECK-LINUX:       [[IDX:\.Lxray_fn_idx[0-9]+]]:
67; CHECK-LINUX-NEXT:    .xword .Lxray_sleds_start1-[[IDX]]
68; CHECK-LINUX-NEXT:    .xword 2
69
70; CHECK-MACOS-LABEL: .section __DATA,xray_instr_map,regular,live_support{{$}}
71; CHECK-MACOS-LABEL: lxray_sleds_start1:
72; CHECK-MACOS:         .quad Lxray_sled_2
73; CHECK-MACOS:         .quad Lxray_sled_3
74; CHECK-MACOS-LABEL: Lxray_sleds_end1:
75; CHECK-MACOS-LABEL: .section __DATA,xray_fn_idx,regular,live_support{{$}}
76; CHECK-MACOS:       [[IDX:lxray_fn_idx[0-9]+]]:
77; CHECK-MACOS-NEXT:    .quad lxray_sleds_start1-[[IDX]]
78; CHECK-MACOS-NEXT:    .quad 2
79