blob: 67865f666832e2abb6c1e1c7fbaccb15ac817c3b [file] [edit]
;; Per-kernel __profc_* arrays land in section __llvm_prf_cnts with one slot
;; per counter, and a parallel __llvm_prf_unifcnt_* array lands in
;; __llvm_prf_ucnts. Counter increments lower to __llvm_profile_instrument_gpu
;; calls whose first pointer argument is a GEP into the per-kernel counter
;; array and whose second is a GEP into the matching uniform-counter array.
;; Sampling is disabled so the increment lowers to a direct call.
; RUN: opt -S -mtriple=amdgpu-amd-amdhsa -offload-pgo-sampling=0 -passes=instrprof < %s | FileCheck %s
@__profn_kernel1 = private constant [7 x i8] c"kernel1"
@__profn_kernel2 = private constant [7 x i8] c"kernel2"
; CHECK: @__profc_kernel1 = linkonce_odr protected addrspace(1) global [2 x i64] zeroinitializer, section "__llvm_prf_cnts"
; CHECK: @__llvm_prf_unifcnt_kernel1 = linkonce_odr protected addrspace(1) global [2 x i64] zeroinitializer, section "__llvm_prf_ucnts"
; CHECK: @__profc_kernel2 = linkonce_odr protected addrspace(1) global [1 x i64] zeroinitializer, section "__llvm_prf_cnts"
define amdgpu_kernel void @kernel1() {
call void @llvm.instrprof.increment(ptr @__profn_kernel1, i64 12345, i32 2, i32 0)
call void @llvm.instrprof.increment(ptr @__profn_kernel1, i64 12345, i32 2, i32 1)
ret void
}
define amdgpu_kernel void @kernel2() {
call void @llvm.instrprof.increment(ptr @__profn_kernel2, i64 67890, i32 1, i32 0)
ret void
}
declare void @llvm.instrprof.increment(ptr, i64, i32, i32)
;; Second counter slot uses a GEP into the per-kernel counter array and the
;; matching uniform-counter array.
; CHECK: call void @__llvm_profile_instrument_gpu(ptr addrspacecast (ptr addrspace(1) getelementptr inbounds ([2 x i64], ptr addrspace(1) @__profc_kernel1, i32 0, i32 1) to ptr), ptr addrspacecast (ptr addrspace(1) getelementptr inbounds ([2 x i64], ptr addrspace(1) @__llvm_prf_unifcnt_kernel1, i32 0, i32 1) to ptr), i64 1)