We will subsequently treat the whole profile as "flat" in the frontend, (i.e flatten and combine with the flat profile section), so we can have a profile for ThinLTO for parts of the application that don't come under the contextual profile. After ThinLTO, we will treat the module(s) containing contextual trees differently: they'll have only the contextual profile pertinent to them. The rest of the modules (non-contextual) will proceed "as usual", off the flattened profile. This patch implements pruning of the contextual profile to enable the above.
70 lines
1.9 KiB
LLVM
70 lines
1.9 KiB
LLVM
; REQUIRES: x86_64-linux
|
|
;
|
|
; Check that we don't prune the contextual profile, unless the module name
|
|
; matches the guid of the root.
|
|
;
|
|
; RUN: rm -rf %t
|
|
; RUN: split-file %s %t
|
|
; RUN: llvm-ctxprof-util fromYAML --input=%t/profile.yaml --output=%t/profile.ctxprofdata
|
|
;
|
|
; RUN: cp %t/example.ll %t/1234.ll
|
|
; RUN: cp %t/example.ll %t/0x4d2.ll
|
|
;
|
|
; RUN: opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' \
|
|
; RUN: -use-ctx-profile=%t/profile.ctxprofdata \
|
|
; RUN: -ctx-profile-printer-level=everything \
|
|
; RUN: %t/example.ll -S 2>&1 | FileCheck %s
|
|
|
|
; RUN: opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' \
|
|
; RUN: -use-ctx-profile=%t/profile.ctxprofdata \
|
|
; RUN: -ctx-profile-printer-level=everything \
|
|
; RUN: %t/not-matching.ll -S 2>&1 | FileCheck %s
|
|
|
|
; RUN: opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' \
|
|
; RUN: -use-ctx-profile=%t/profile.ctxprofdata \
|
|
; RUN: -ctx-profile-printer-level=everything \
|
|
; RUN: %t/0x4d2.ll -S 2>&1 | FileCheck %s --check-prefix=PRUNED
|
|
|
|
; CHECK: Contexts:
|
|
; CHECK: - Guid: 1234
|
|
; CHECK: - Guid: 5678
|
|
; CHECK: FlatProfiles:
|
|
; PRUNED-NOT: - Guid: 5678
|
|
; PRUNED-NOT: FlatProfiles
|
|
;
|
|
; pick a large GUID that would be negative, if signed, to test a few ways the
|
|
; file name may be formatted.
|
|
;--- profile.yaml
|
|
Contexts:
|
|
- Guid: 1234
|
|
TotalRootEntryCount: 24
|
|
Counters: [9]
|
|
Callsites: -
|
|
- Guid: 1000
|
|
Counters: [6, 7]
|
|
|
|
- Guid: 5678
|
|
TotalRootEntryCount: 24
|
|
Counters: [9]
|
|
Callsites: -
|
|
- Guid: 1000
|
|
Counters: [6, 7]
|
|
FlatProfiles:
|
|
- Guid: 777
|
|
Counters: [2]
|
|
;--- example.ll
|
|
define void @an_entrypoint(i32 %a) !guid !0 {
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { noinline }
|
|
!0 = !{ i64 1234 }
|
|
|
|
;--- not-matching.ll
|
|
define void @an_entrypoint(i32 %a) !guid !0 {
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { noinline }
|
|
!0 = !{ i64 1000 }
|