xref: /llvm-project/llvm/test/CodeGen/LoongArch/patchable-function-entry.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
1db5dfec9SWANG Xuerui;; Test the function attribute "patchable-function-entry".
2db5dfec9SWANG Xuerui;; Adapted from the RISCV test case.
3*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefixes=CHECK,LA32
4*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefixes=CHECK,LA64
5db5dfec9SWANG Xuerui
6db5dfec9SWANG Xueruidefine void @f0() "patchable-function-entry"="0" {
7db5dfec9SWANG Xuerui; CHECK-LABEL: f0:
8db5dfec9SWANG Xuerui; CHECK-NEXT:  .Lfunc_begin0:
9db5dfec9SWANG Xuerui; CHECK-NOT:     nop
10db5dfec9SWANG Xuerui; CHECK:         ret
11db5dfec9SWANG Xuerui; CHECK-NOT:   .section __patchable_function_entries
12db5dfec9SWANG Xuerui  ret void
13db5dfec9SWANG Xuerui}
14db5dfec9SWANG Xuerui
15db5dfec9SWANG Xueruidefine void @f1() "patchable-function-entry"="1" {
16db5dfec9SWANG Xuerui; CHECK-LABEL: f1:
17db5dfec9SWANG Xuerui; CHECK-NEXT: .Lfunc_begin1:
18db5dfec9SWANG Xuerui; CHECK:         nop
19db5dfec9SWANG Xuerui; CHECK-NEXT:    ret
20db5dfec9SWANG Xuerui; CHECK:       .section __patchable_function_entries,"awo",@progbits,f1{{$}}
21db5dfec9SWANG Xuerui; LA32:        .p2align 2
22db5dfec9SWANG Xuerui; LA32-NEXT:   .word .Lfunc_begin1
23db5dfec9SWANG Xuerui; LA64:        .p2align 3
24db5dfec9SWANG Xuerui; LA64-NEXT:   .dword .Lfunc_begin1
25db5dfec9SWANG Xuerui  ret void
26db5dfec9SWANG Xuerui}
27db5dfec9SWANG Xuerui
28db5dfec9SWANG Xuerui$f5 = comdat any
29db5dfec9SWANG Xueruidefine void @f5() "patchable-function-entry"="5" comdat {
30db5dfec9SWANG Xuerui; CHECK-LABEL:   f5:
31db5dfec9SWANG Xuerui; CHECK-NEXT:    .Lfunc_begin2:
32db5dfec9SWANG Xuerui; CHECK-COUNT-5:   nop
33db5dfec9SWANG Xuerui; CHECK-NEXT:      ret
347620f03eSFangrui Song; CHECK:         .section __patchable_function_entries,"awoG",@progbits,f5,f5,comdat{{$}}
35db5dfec9SWANG Xuerui; LA32:          .p2align 2
36db5dfec9SWANG Xuerui; LA32-NEXT:     .word .Lfunc_begin2
37db5dfec9SWANG Xuerui; LA64:          .p2align 3
38db5dfec9SWANG Xuerui; LA64-NEXT:     .dword .Lfunc_begin2
39db5dfec9SWANG Xuerui  ret void
40db5dfec9SWANG Xuerui}
41db5dfec9SWANG Xuerui
42db5dfec9SWANG Xuerui;; -fpatchable-function-entry=3,2
43db5dfec9SWANG Xuerui;; "patchable-function-prefix" emits data before the function entry label.
44db5dfec9SWANG Xueruidefine void @f3_2() "patchable-function-entry"="1" "patchable-function-prefix"="2" {
45db5dfec9SWANG Xuerui; CHECK-LABEL:   .type f3_2,@function
46d14460d0SFangrui Song; CHECK-NEXT:    .Ltmp0:
47db5dfec9SWANG Xuerui; CHECK-COUNT-2:   nop
48d14460d0SFangrui Song; CHECK-NEXT:    f3_2:  # @f3_2
49db5dfec9SWANG Xuerui; CHECK:         # %bb.0:
50db5dfec9SWANG Xuerui; CHECK-NEXT:      nop
51db5dfec9SWANG Xuerui; LA32-NEXT:       addi.w $sp, $sp, -16
52db5dfec9SWANG Xuerui; LA64-NEXT:       addi.d $sp, $sp, -16
53db5dfec9SWANG Xuerui;; .size does not include the prefix.
54db5dfec9SWANG Xuerui; CHECK:      .Lfunc_end3:
55db5dfec9SWANG Xuerui; CHECK-NEXT: .size f3_2, .Lfunc_end3-f3_2
56db5dfec9SWANG Xuerui; CHECK:      .section __patchable_function_entries,"awo",@progbits,f3_2{{$}}
57db5dfec9SWANG Xuerui; LA32:       .p2align 2
58db5dfec9SWANG Xuerui; LA32-NEXT:  .word .Ltmp0
59db5dfec9SWANG Xuerui; LA64:       .p2align 3
60db5dfec9SWANG Xuerui; LA64-NEXT:  .dword .Ltmp0
61db5dfec9SWANG Xuerui  %frame = alloca i8, i32 16
62db5dfec9SWANG Xuerui  ret void
63db5dfec9SWANG Xuerui}
64