xref: /llvm-project/llvm/test/Analysis/CtxProfAnalysis/load.ll (revision b15845c0059b06f406e33f278127d7eb41ff5ab6)
18ccd4208SMircea Trofin; REQUIRES: x86_64-linux
2aca01bffSMircea Trofin;
3aca01bffSMircea Trofin; RUN: rm -rf %t
4dbbf0762SMircea Trofin; RUN: split-file %s %t
563293558SMircea Trofin; RUN: llvm-ctxprof-util fromYAML --input=%t/profile.yaml --output=%t/profile.ctxprofdata
632097666SMircea Trofin; RUN: opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' -ctx-profile-printer-level=everything \
732097666SMircea Trofin; RUN:   %t/example.ll -S 2>&1 | FileCheck %s --check-prefix=NO-CTX
8dbbf0762SMircea Trofin
932097666SMircea Trofin; RUN: not opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' -ctx-profile-printer-level=everything \
10aca01bffSMircea Trofin; RUN:   -use-ctx-profile=does_not_exist.ctxprofdata %t/example.ll -S 2>&1 | FileCheck %s --check-prefix=NO-FILE
11dbbf0762SMircea Trofin
12aca01bffSMircea Trofin; RUN: opt -module-summary -passes='thinlto-pre-link<O2>' \
13aca01bffSMircea Trofin; RUN:   -use-ctx-profile=%t/profile.ctxprofdata %t/example.ll -S -o %t/prelink.ll
14aca01bffSMircea Trofin
15aca01bffSMircea Trofin; RUN: opt -module-summary -passes='thinlto-pre-link<O2>' -use-ctx-profile=%t/profile.ctxprofdata \
16aca01bffSMircea Trofin; RUN:  %t/example.ll -S -o %t/prelink.ll
1732097666SMircea Trofin; RUN: opt -passes='require<ctx-prof-analysis>,print<ctx-prof-analysis>' -ctx-profile-printer-level=everything \
18aca01bffSMircea Trofin; RUN:   -use-ctx-profile=%t/profile.ctxprofdata %t/prelink.ll -S 2> %t/output.txt
19aca01bffSMircea Trofin; RUN: diff %t/expected-profile-output.txt %t/output.txt
20dbbf0762SMircea Trofin
21dbbf0762SMircea Trofin; NO-FILE: error: could not open contextual profile file
2232097666SMircea Trofin; NO-CTX: No contextual profile was provided
23dbbf0762SMircea Trofin;
24dbbf0762SMircea Trofin; This is the reference profile, laid out in the format the json formatter will
25dbbf0762SMircea Trofin; output it from opt.
2663293558SMircea Trofin;--- profile.yaml
2763293558SMircea Trofin- Guid: 12341
2863293558SMircea Trofin  Counters: [9]
2963293558SMircea Trofin- Guid: 12074870348631550642
3063293558SMircea Trofin  Counters: [5]
3163293558SMircea Trofin- Guid: 11872291593386833696
3263293558SMircea Trofin  Counters: [1]
3363293558SMircea Trofin  Callsites:  -
3463293558SMircea Trofin                - Guid: 728453322856651412
3563293558SMircea Trofin                  Counters: [6, 7]
36aca01bffSMircea Trofin;--- expected-profile-output.txt
37aca01bffSMircea TrofinFunction Info:
38aca01bffSMircea Trofin4909520559318251808 : an_entrypoint. MaxCounterID: 2. MaxCallsiteID: 1
39aca01bffSMircea Trofin11872291593386833696 : foo. MaxCounterID: 1. MaxCallsiteID: 1
40644c9020SMircea Trofin12074870348631550642 : another_entrypoint_no_callees. MaxCounterID: 1. MaxCallsiteID: 0
41aca01bffSMircea Trofin
42aca01bffSMircea TrofinCurrent Profile:
43*b15845c0SMircea Trofin
44*b15845c0SMircea Trofin- Guid:            11872291593386833696
45*b15845c0SMircea Trofin  Counters:        [ 1 ]
46*b15845c0SMircea Trofin  Callsites:
47*b15845c0SMircea Trofin    - - Guid:            728453322856651412
48*b15845c0SMircea Trofin        Counters:        [ 6, 7 ]
49*b15845c0SMircea Trofin- Guid:            12074870348631550642
50*b15845c0SMircea Trofin  Counters:        [ 5 ]
5122d3fb18SMircea Trofin
5222d3fb18SMircea TrofinFlat Profile:
5322d3fb18SMircea Trofin728453322856651412 : 6 7
5422d3fb18SMircea Trofin11872291593386833696 : 1
55fe6c0250SMircea Trofin12074870348631550642 : 5
56aca01bffSMircea Trofin;--- example.ll
57aca01bffSMircea Trofindeclare void @bar()
58aca01bffSMircea Trofin
59aca01bffSMircea Trofindefine private void @foo(i32 %a, ptr %fct) #0 !guid !0 {
60aca01bffSMircea Trofin  %t = icmp eq i32 %a, 0
61aca01bffSMircea Trofin  br i1 %t, label %yes, label %no
62aca01bffSMircea Trofinyes:
63aca01bffSMircea Trofin  call void %fct(i32 %a)
64aca01bffSMircea Trofin  br label %exit
65aca01bffSMircea Trofinno:
66aca01bffSMircea Trofin  call void @bar()
67aca01bffSMircea Trofin  br label %exit
68aca01bffSMircea Trofinexit:
69aca01bffSMircea Trofin  ret void
70aca01bffSMircea Trofin}
71aca01bffSMircea Trofin
72aca01bffSMircea Trofindefine void @an_entrypoint(i32 %a) {
73aca01bffSMircea Trofin  %t = icmp eq i32 %a, 0
74aca01bffSMircea Trofin  br i1 %t, label %yes, label %no
75aca01bffSMircea Trofin
76aca01bffSMircea Trofinyes:
77aca01bffSMircea Trofin  call void @foo(i32 1, ptr null)
78aca01bffSMircea Trofin  ret void
79aca01bffSMircea Trofinno:
80aca01bffSMircea Trofin  ret void
81aca01bffSMircea Trofin}
82aca01bffSMircea Trofin
83aca01bffSMircea Trofindefine void @another_entrypoint_no_callees(i32 %a) {
84aca01bffSMircea Trofin  %t = icmp eq i32 %a, 0
85aca01bffSMircea Trofin  br i1 %t, label %yes, label %no
86aca01bffSMircea Trofin
87aca01bffSMircea Trofinyes:
88aca01bffSMircea Trofin  ret void
89aca01bffSMircea Trofinno:
90aca01bffSMircea Trofin  ret void
91aca01bffSMircea Trofin}
92aca01bffSMircea Trofin
93aca01bffSMircea Trofinattributes #0 = { noinline }
94aca01bffSMircea Trofin!0 = !{ i64 11872291593386833696 }