
There is a case when branch profile metadata is OK to miss, namely, cold functions. The goal of the RFC (see the referenced issue) is to avoid accidental omission (and, at a later date, corruption) of profile metadata. However, asking cold functions to have all their conditional branches marked with "0" probabilities would be overdoing it. We can just ask cold functions to have an explicit 0 entry count. This patch: - injects an entry count for functions, unless they have one (synthetic or not) - if the entry count is 0, doesn't inject, nor does it verify the rest of the metadata - at verification, if the entry count is missing, it reports an error Issue #147390
24 lines
639 B
LLVM
24 lines
639 B
LLVM
; Test that prof-inject does not modify existing metadata (incl. "unknown")
|
|
|
|
; RUN: opt -passes=prof-verify %s -S --disable-output
|
|
|
|
define void @foo(i32 %i) !prof !0 {
|
|
%c = icmp eq i32 %i, 0
|
|
br i1 %c, label %yes, label %no, !prof !1
|
|
yes:
|
|
br i1 %c, label %yes2, label %no, !prof !2
|
|
yes2:
|
|
ret void
|
|
no:
|
|
ret void
|
|
}
|
|
|
|
!0 = !{!"function_entry_count", i32 1}
|
|
!1 = !{!"branch_weights", i32 1, i32 2}
|
|
!2 = !{!"unknown"}
|
|
; CHECK: define void @foo(i32 %i) !prof !0
|
|
; CHECK: br i1 %c, label %yes, label %no, !prof !1
|
|
; CHECK: !0 = !{!"function_entry_count", i64 1}
|
|
; CHECK: !1 = !{!"branch_weights", i32 1, i32 2}
|
|
; CHECK: !2 = !{!"unknown"}
|