
`TotalRootEntryCount` captures how many times that root was entered - regardless if a profile was also collected or not (profile collection for a given root happens on only one thread at a time). We don't do this in compiler_rt because the goal there is to flush out the data as fast as possible, so traversing and multiplying vectors is punted to the profile user. We really just need to do this when flattening the profile so that the values across roots and flat profiles match. We could do it earlier, too - like when loading the profile - but it seems beneficial (at least for debugging) to keep the counter values the same as the loaded ones. We can revisit this later.
59 lines
1.5 KiB
LLVM
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/1234.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 72, i32 0}
|
|
|
|
;--- 1234.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]
|