Files
clang-p2996/llvm/test/Analysis/CtxProfAnalysis/flatten-zero-path.ll
Mircea Trofin b034905c82 [ctxprof] Capture sampling info for context roots (#131201)
When we collect a contextual profile, we sample the threads entering its root and only collect on one at a time (see `ContextRoot::Taken`). If we want to compare profiles between contextual profiles, and/or flat profiles, we have a problem: we don't know how to compare the counter values relative to each other. To that end, we add `ContextRoot::TotalEntries`, which is incremented every time a root is entered and serves as multiplier for the counter values collected under that root.

We expose this in the profile and leave the normalization to the user of the profile, for a few reasons:

* it's only needed if reasoning about all profiles in aggregate.
* the goal, in compiler_rt, is to flush out the profile as quickly as possible, and performing multiplications adds an overhead that may not even be necessary if the consumer of the profile doesn't care about combining profiles
* the information itself may be interesting as an indication of relative sampling of various contexts.
2025-03-14 21:10:22 -07:00

59 lines
1.5 KiB
LLVM

; Check that flattened profile lowering handles cold subgraphs that end in "unreachable"
; RUN: split-file %s %t
; RUN: llvm-ctxprof-util fromYAML --input=%t/profile.yaml --output=%t/profile.ctxprofdata
; RUN: opt -passes=ctx-prof-flatten %t/example.ll -use-ctx-profile=%t/profile.ctxprofdata -S -o - | FileCheck %s
; CHECK-LABEL: entry:
; CHECK: br i1 %t, label %yes, label %no, !prof ![[C1:[0-9]+]]
; CHECK-LABEL: no:
; CHECK-NOT: !prof
; CHECK-LABEL: no1:
; CHECK-NOT: !prof
; CHECK-LABEL: no2:
; CHECK-NOT: !prof
; CHECK-LABEL: yes:
; CHECK: br i1 %t3, label %yes1, label %yes2, !prof ![[C1]]
; CHECK-NOT: !prof
; CHECK: ![[C1]] = !{!"branch_weights", i32 6, i32 0}
;--- example.ll
define void @f1(i32 %cond) !guid !0 {
entry:
call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 0)
%t = icmp eq i32 %cond, 1
br i1 %t, label %yes, label %no
no:
%t2 = icmp eq i32 %cond, 2
br i1 %t2, label %no1, label %no2
no1:
unreachable
no2:
call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 1)
unreachable
yes:
%t3 = icmp eq i32 %cond, 3
br i1 %t3, label %yes1, label %yes2
yes1:
br label %exit
yes2:
call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 2)
%t4 = icmp eq i32 %cond, 4
br i1 %t4, label %yes3, label %yes4
yes3:
br label %exit
yes4:
call void @llvm.instrprof.increment(ptr @f1, i64 42, i32 42, i32 3)
unreachable
exit:
ret void
}
!0 = !{i64 1234}
;--- profile.yaml
Contexts:
- Guid: 1234
TotalRootEntryCount: 12
Counters: [6,0,0,0]