This patch changes cc1 option for PGO profile use from
-fprofile-instr-use=<path> to -fprofile-instrument-use-path=<path>.
-fprofile-instr-use=<path> is now a driver only option.
In addition to decouple the cc1 option from the driver level option, this patch
also enables IR level profile use. cc1 option handling now reads the profile
header and sets CodeGenOpt ProfileUse (valid values are {None, Clang, LLVM}
-- this is a common enum for -fprofile-instrument={}, for the profile
instrumentation), and invoke the pipeline to enable the respective PGO use pass.
Reviewers: silvas, davidxl
Differential Revision: http://reviews.llvm.org/D17737
llvm-svn: 262515
60 lines
2.3 KiB
C
60 lines
2.3 KiB
C
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-captured.c %s -o - -emit-llvm -fprofile-instrument=clang | FileCheck -check-prefix=PGOGEN -check-prefix=PGOALL %s
|
|
|
|
// RUN: llvm-profdata merge %S/Inputs/c-captured.proftext -o %t.profdata
|
|
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name c-captured.c %s -o - -emit-llvm -fprofile-instrument-use-path=%t.profdata | FileCheck -check-prefix=PGOUSE -check-prefix=PGOALL %s
|
|
|
|
// PGOGEN: @[[DCC:__profc_debug_captured]] = private global [3 x i64] zeroinitializer
|
|
// PGOGEN: @[[CSC:__profc_c_captured.c___captured_stmt]] = private global [2 x i64] zeroinitializer
|
|
// PGOGEN: @[[C1C:__profc_c_captured.c___captured_stmt.1]] = private global [3 x i64] zeroinitializer
|
|
|
|
// PGOALL-LABEL: define void @debug_captured()
|
|
// PGOGEN: store {{.*}} @[[DCC]], i64 0, i64 0
|
|
void debug_captured() {
|
|
int x = 10;
|
|
|
|
// Check both debug_captured counters, so we can do this all in one pass
|
|
// PGOGEN: store {{.*}} @[[DCC]], i64 0, i64 1
|
|
// PGOUSE: br {{.*}} !prof ![[DC1:[0-9]+]]
|
|
// PGOGEN: store {{.*}} @[[DCC]], i64 0, i64 2
|
|
// PGOUSE: br {{.*}} !prof ![[DC2:[0-9]+]]
|
|
// PGOALL: ret
|
|
|
|
// PGOALL-LABEL: define internal void @__captured_stmt(
|
|
// PGOGEN: store {{.*}} @[[CSC]], i64 0, i64 0
|
|
#pragma clang __debug captured
|
|
{
|
|
// PGOGEN: store {{.*}} @[[CSC]], i64 0, i64 1
|
|
// PGOUSE: br {{.*}} !prof ![[CS1:[0-9]+]]
|
|
if (x) {}
|
|
// PGOALL: ret
|
|
}
|
|
|
|
if (x) {} // This is DC1. Checked above.
|
|
|
|
// PGOALL-LABEL: define internal void @__captured_stmt.1(
|
|
// PGOGEN: store {{.*}} @[[C1C]], i64 0, i64 0
|
|
#pragma clang __debug captured
|
|
{
|
|
// PGOGEN: store {{.*}} @[[C1C]], i64 0, i64 1
|
|
// PGOUSE: br {{.*}} !prof ![[C11:[0-9]+]]
|
|
for (int i = 0; i < x; ++i) {}
|
|
// PGOGEN: store {{.*}} @[[C1C]], i64 0, i64 2
|
|
// PGOUSE: br {{.*}} !prof ![[C12:[0-9]+]]
|
|
if (x) {}
|
|
// PGOALL: ret
|
|
}
|
|
|
|
if (x) {} // This is DC2. Checked above.
|
|
}
|
|
|
|
// PGOUSE-DAG: ![[DC1]] = !{!"branch_weights", i32 2, i32 1}
|
|
// PGOUSE-DAG: ![[DC2]] = !{!"branch_weights", i32 2, i32 1}
|
|
// PGOUSE-DAG: ![[CS1]] = !{!"branch_weights", i32 2, i32 1}
|
|
// PGOUSE-DAG: ![[C11]] = !{!"branch_weights", i32 11, i32 2}
|
|
// PGOUSE-DAG: ![[C12]] = !{!"branch_weights", i32 2, i32 1}
|
|
|
|
int main(int argc, const char *argv[]) {
|
|
debug_captured();
|
|
return 0;
|
|
}
|