xref: /llvm-project/llvm/test/CodeGen/PowerPC/xray-attribute-instrumentation.ll (revision e0a6561ec9ec10f8c0c43b15dfcbbc3c57d37d3f)
1; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -relocation-model=pic < %s | FileCheck %s
3
4define i32 @foo() nounwind noinline uwtable "function-instrument"="xray-always" {
5; CHECK-LABEL: foo:
6; CHECK-NEXT:  .Lfunc_begin0:
7; CHECK:       .Ltmp[[#l:]]:
8; CHECK-NEXT:         b .Ltmp[[#l+1]]
9; CHECK-NEXT:         nop
10; CHECK-NEXT:         std 0, -8(1)
11; CHECK-NEXT:         mflr 0
12; CHECK-NEXT:         bl __xray_FunctionEntry
13; CHECK-NEXT:         nop
14; CHECK-NEXT:         mtlr 0
15; CHECK-NEXT:  .Ltmp[[#l+1]]:
16  ret i32 0
17; CHECK:       .Ltmp[[#l+2]]:
18; CHECK-NEXT:         blr
19; CHECK-NEXT:         nop
20; CHECK-NEXT:         std 0, -8(1)
21; CHECK-NEXT:         mflr 0
22; CHECK-NEXT:         bl __xray_FunctionExit
23; CHECK-NEXT:         nop
24; CHECK-NEXT:         mtlr 0
25}
26; CHECK-LABEL: xray_instr_map,"ao",@progbits,foo{{$}}
27; CHECK:      .Lxray_sleds_start0:
28; CHECK-NEXT: [[TMP:.Ltmp[0-9]+]]:
29; CHECK-NEXT:         .quad   .Ltmp[[#l]]-[[TMP]]
30; CHECK-NEXT:         .quad   .Lfunc_begin0-([[TMP]]+8)
31; CHECK-NEXT:         .byte   0x00
32; CHECK-NEXT:         .byte   0x01
33; CHECK-NEXT:         .byte   0x02
34; CHECK-NEXT:         .space  13
35; CHECK-NEXT: [[TMP:.Ltmp[0-9]+]]:
36; CHECK-NEXT:         .quad   .Ltmp[[#l+2]]-[[TMP]]
37; CHECK-NEXT:         .quad   .Lfunc_begin0-([[TMP]]+8)
38; CHECK-NEXT:         .byte   0x01
39; CHECK-NEXT:         .byte   0x01
40; CHECK-NEXT:         .byte   0x02
41; CHECK-NEXT:         .space  13
42; CHECK-NEXT: .Lxray_sleds_end0:
43; CHECK-LABEL: xray_fn_idx,"ao",@progbits,foo{{$}}
44; CHECK:              .p2align        4
45; CHECK-NEXT: [[IDX:.Lxray_fn_idx[0-9]+]]:
46; CHECK-NEXT:         .quad .Lxray_sleds_start0-[[IDX]]
47; CHECK-NEXT:         .quad 2
48; CHECK-NEXT:         .text
49