Files
clang-p2996/llvm/test/Analysis/CtxProfAnalysis/load.ll
Mircea Trofin 6329355860 [ctxprof] Move test serialization to yaml (#122545)
We have a textual representation of contextual profiles for test scenarios, mainly. This patch moves that to YAML instead of JSON. YAML is more succinct and readable (some of the .ll tests should be illustrative). In addition, JSON is parse-able by the YAML reader.

A subsequent patch will address deserialization.

(thanks, @kazutakahirata, for showing me how to use the llvm YAML reader/writer APIs, which I incorrectly thought to be more low-level than the JSON ones!)
2025-01-10 18:04:25 -08:00

111 lines
2.8 KiB
LLVM

; REQUIRES: x86_64-linux
;
; RUN: rm -rf %t
; RUN: split-file %s %t
; RUN: llvm-ctxprof-util fromYAML --input=%t/profile.yaml --output=%t/profile.ctxprofdata
; RUN: opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' -ctx-profile-printer-level=everything \
; RUN: %t/example.ll -S 2>&1 | FileCheck %s --check-prefix=NO-CTX
; RUN: not opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' -ctx-profile-printer-level=everything \
; RUN: -use-ctx-profile=does_not_exist.ctxprofdata %t/example.ll -S 2>&1 | FileCheck %s --check-prefix=NO-FILE
; RUN: opt -module-summary -passes='thinlto-pre-link<O2>' \
; RUN: -use-ctx-profile=%t/profile.ctxprofdata %t/example.ll -S -o %t/prelink.ll
; RUN: opt -module-summary -passes='thinlto-pre-link<O2>' -use-ctx-profile=%t/profile.ctxprofdata \
; RUN: %t/example.ll -S -o %t/prelink.ll
; RUN: opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' -ctx-profile-printer-level=everything \
; RUN: -use-ctx-profile=%t/profile.ctxprofdata %t/prelink.ll -S 2> %t/output.txt
; RUN: diff %t/expected-profile-output.txt %t/output.txt
; NO-FILE: error: could not open contextual profile file
; NO-CTX: No contextual profile was provided
;
; This is the reference profile, laid out in the format the json formatter will
; output it from opt.
;--- profile.yaml
- Guid: 12341
Counters: [9]
- Guid: 12074870348631550642
Counters: [5]
- Guid: 11872291593386833696
Counters: [1]
Callsites: -
- Guid: 728453322856651412
Counters: [6, 7]
;--- expected-profile-output.txt
Function Info:
4909520559318251808 : an_entrypoint. MaxCounterID: 2. MaxCallsiteID: 1
11872291593386833696 : foo. MaxCounterID: 1. MaxCallsiteID: 1
12074870348631550642 : another_entrypoint_no_callees. MaxCounterID: 1. MaxCallsiteID: 0
Current Profile:
[
{
"Callsites": [
[
{
"Counters": [
6,
7
],
"Guid": 728453322856651412
}
]
],
"Counters": [
1
],
"Guid": 11872291593386833696
},
{
"Counters": [
5
],
"Guid": 12074870348631550642
}
]
Flat Profile:
728453322856651412 : 6 7
11872291593386833696 : 1
12074870348631550642 : 5
;--- example.ll
declare void @bar()
define private void @foo(i32 %a, ptr %fct) #0 !guid !0 {
%t = icmp eq i32 %a, 0
br i1 %t, label %yes, label %no
yes:
call void %fct(i32 %a)
br label %exit
no:
call void @bar()
br label %exit
exit:
ret void
}
define void @an_entrypoint(i32 %a) {
%t = icmp eq i32 %a, 0
br i1 %t, label %yes, label %no
yes:
call void @foo(i32 1, ptr null)
ret void
no:
ret void
}
define void @another_entrypoint_no_callees(i32 %a) {
%t = icmp eq i32 %a, 0
br i1 %t, label %yes, label %no
yes:
ret void
no:
ret void
}
attributes #0 = { noinline }
!0 = !{ i64 11872291593386833696 }