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