Index: lib/CodeGen/CodeGenModule.cpp =================================================================== --- lib/CodeGen/CodeGenModule.cpp +++ lib/CodeGen/CodeGenModule.cpp @@ -374,8 +374,11 @@ 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(); Index: test/Profile/Inputs/max-function-count.proftext =================================================================== --- /dev/null +++ test/Profile/Inputs/max-function-count.proftext @@ -0,0 +1,7 @@ +main +# Func Hash: +0 +# Num Counters: +1 +# Counter Values: +1 Index: test/Profile/max-function-count.c =================================================================== --- /dev/null +++ test/Profile/max-function-count.c @@ -0,0 +1,9 @@ +// 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 main() { + return 0; +} +// CHECK: !{{[0-9]+}} = !{i32 1, !"MaxFunctionCount", i32 1}