diff options
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 7 | ||||
-rw-r--r-- | clang/test/Profile/Inputs/max-function-count.proftext | 26 | ||||
-rw-r--r-- | clang/test/Profile/max-function-count.c | 24 |
3 files changed, 55 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 3b3fc877bf4..173b0dcba1c 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -375,8 +375,11 @@ void CodeGenModule::Release() { if (llvm::Function *CudaDtorFunction = CUDARuntime->makeModuleDtorFunction()) AddGlobalDtor(CudaDtorFunction); } - if (PGOReader && PGOStats.hasDiagnostics()) - PGOStats.reportDiagnostics(getDiags(), getCodeGenOpts().MainFileName); + if (PGOReader) { + getModule().setMaximumFunctionCount(PGOReader->getMaximumFunctionCount()); + if (PGOStats.hasDiagnostics()) + PGOStats.reportDiagnostics(getDiags(), getCodeGenOpts().MainFileName); + } EmitCtorList(GlobalCtors, "llvm.global_ctors"); EmitCtorList(GlobalDtors, "llvm.global_dtors"); EmitGlobalAnnotations(); diff --git a/clang/test/Profile/Inputs/max-function-count.proftext b/clang/test/Profile/Inputs/max-function-count.proftext new file mode 100644 index 00000000000..c744f7af9d8 --- /dev/null +++ b/clang/test/Profile/Inputs/max-function-count.proftext @@ -0,0 +1,26 @@ +begin +# Func Hash: +10 +# Num Counters: +2 +# Counter Values: +1 +0 + +main +# Func Hash: +0 +# Num Counters: +1 +# Counter Values: +1 + +end +# Func Hash: +10 +# Num Counters: +2 +# Counter Values: +2 +2 + diff --git a/clang/test/Profile/max-function-count.c b/clang/test/Profile/max-function-count.c new file mode 100644 index 00000000000..39490d7b276 --- /dev/null +++ b/clang/test/Profile/max-function-count.c @@ -0,0 +1,24 @@ +// Test that maximum function counts are set correctly. + +// RUN: llvm-profdata merge %S/Inputs/max-function-count.proftext -o %t.profdata +// RUN: %clang %s -o - -mllvm -disable-llvm-optzns -emit-llvm -S -fprofile-instr-use=%t.profdata | FileCheck %s +// +int begin(int i) { + if (i) + return 0; + return 1; +} + +int end(int i) { + if (i) + return 0; + return 1; +} + +int main(int argc, const char *argv[]) { + begin(0); + end(1); + end(1); + return 0; +} +// CHECK: !{{[0-9]+}} = !{i32 1, !"MaxFunctionCount", i32 2} |