| ; RUN: opt < %s -passes=instrprof -S | FileCheck %s | |
| ; Test that weak functions on GPU targets get weak linkage for their | |
| ; __profd_ aliases to allow linker deduplication across TUs. | |
| ; Non-weak functions get external linkage (default for aliases). | |
| target triple = "amdgpu7-amd-amdhsa" | |
| @__hip_cuid_abc123 = addrspace(1) global i8 0 | |
| ; AMDGPU GPU profiling lowers to per-function comdat globals (not aliases). | |
| ; CHECK: @__profd_weak_func = linkonce_odr protected addrspace(1) global | |
| @__profn_weak_func = private constant [9 x i8] c"weak_func" | |
| define weak void @weak_func() { | |
| call void @llvm.instrprof.increment(ptr @__profn_weak_func, i64 0, i32 1, i32 0) | |
| ret void | |
| } | |
| ; CHECK: @__profd_weak_odr_func = linkonce_odr protected addrspace(1) global | |
| @__profn_weak_odr_func = private constant [13 x i8] c"weak_odr_func" | |
| define weak_odr void @weak_odr_func() { | |
| call void @llvm.instrprof.increment(ptr @__profn_weak_odr_func, i64 0, i32 1, i32 0) | |
| ret void | |
| } | |
| ; CHECK: @__profd_normal_func = linkonce_odr protected addrspace(1) global | |
| @__profn_normal_func = private constant [11 x i8] c"normal_func" | |
| define void @normal_func() { | |
| call void @llvm.instrprof.increment(ptr @__profn_normal_func, i64 0, i32 1, i32 0) | |
| ret void | |
| } | |
| declare void @llvm.instrprof.increment(ptr, i64, i32, i32) |