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 }