LGTM.
Alex Lorenz <[email protected]> writes: > Hi bogner, bob.wilson, > > Recently, the profile data format was updated to allow for multiple > functions with the same name. The updated indexing api requires the > code coverage tool to know the function's hash as well as the > function's name to get the execution counts for a function. This patch > updates clang which now also stores function hashes in function's > coverage records. > > http://reviews.llvm.org/D4995 > > Files: > lib/CodeGen/CodeGenPGO.cpp > lib/CodeGen/CoverageMappingGen.cpp > lib/CodeGen/CoverageMappingGen.h > test/CoverageMapping/ir.c > > Index: lib/CodeGen/CodeGenPGO.cpp > =================================================================== > --- lib/CodeGen/CodeGenPGO.cpp > +++ lib/CodeGen/CodeGenPGO.cpp > @@ -168,8 +168,8 @@ > > // Create coverage mapping data variable. > if (!CoverageMapping.empty()) > - CGM.getCoverageMapping()->addFunctionMappingRecord(Name, > - getFuncName(), > + CGM.getCoverageMapping()->addFunctionMappingRecord(Name, getFuncName(), > + FunctionHash, > CoverageMapping); > > // Hide all these symbols so that we correctly get a copy for each > Index: lib/CodeGen/CoverageMappingGen.cpp > =================================================================== > --- lib/CodeGen/CoverageMappingGen.cpp > +++ lib/CodeGen/CoverageMappingGen.cpp > @@ -1094,12 +1094,13 @@ > > void CoverageMappingModuleGen::addFunctionMappingRecord( > llvm::GlobalVariable *FunctionName, StringRef FunctionNameValue, > - const std::string &CoverageMapping) { > + uint64_t FunctionHash, const std::string &CoverageMapping) { > llvm::LLVMContext &Ctx = CGM.getLLVMContext(); > auto *Int32Ty = llvm::Type::getInt32Ty(Ctx); > + auto *Int64Ty = llvm::Type::getInt64Ty(Ctx); > auto *Int8PtrTy = llvm::Type::getInt8PtrTy(Ctx); > if (!FunctionRecordTy) { > - llvm::Type *FunctionRecordTypes[] = {Int8PtrTy, Int32Ty, Int32Ty}; > + llvm::Type *FunctionRecordTypes[] = {Int8PtrTy, Int32Ty, Int32Ty, > Int64Ty}; > FunctionRecordTy = > llvm::StructType::get(Ctx, makeArrayRef(FunctionRecordTypes)); > } > @@ -1107,7 +1108,8 @@ > llvm::Constant *FunctionRecordVals[] = { > llvm::ConstantExpr::getBitCast(FunctionName, Int8PtrTy), > llvm::ConstantInt::get(Int32Ty, FunctionNameValue.size()), > - llvm::ConstantInt::get(Int32Ty, CoverageMapping.size())}; > + llvm::ConstantInt::get(Int32Ty, CoverageMapping.size()), > + llvm::ConstantInt::get(Int64Ty, FunctionHash)}; > FunctionRecords.push_back(llvm::ConstantStruct::get( > FunctionRecordTy, makeArrayRef(FunctionRecordVals))); > CoverageMappings += CoverageMapping; > Index: lib/CodeGen/CoverageMappingGen.h > =================================================================== > --- lib/CodeGen/CoverageMappingGen.h > +++ lib/CodeGen/CoverageMappingGen.h > @@ -69,6 +69,7 @@ > /// function mapping records. > void addFunctionMappingRecord(llvm::GlobalVariable *FunctionName, > StringRef FunctionNameValue, > + uint64_t FunctionHash, > const std::string &CoverageMapping); > > /// \brief Emit the coverage mapping data for a translation unit. > Index: test/CoverageMapping/ir.c > =================================================================== > --- test/CoverageMapping/ir.c > +++ test/CoverageMapping/ir.c > @@ -9,4 +9,4 @@ > return 0; > } > > -// CHECK: @__llvm_coverage_mapping = internal constant { i32, i32, i32, i32, > [2 x { i8*, i32, i32 }], [{{[0-9]+}} x i8] } { i32 2, i32 {{[0-9]+}}, i32 > {{[0-9]+}}, i32 0, [2 x { i8*, i32, i32 }] [{ i8*, i32, i32 } { i8* > getelementptr inbounds ([3 x i8]* @__llvm_profile_name_foo, i32 0, i32 0), > i32 3, i32 9 }, { i8*, i32, i32 } { i8* getelementptr inbounds ([4 x i8]* > @__llvm_profile_name_main, i32 0, i32 0), i32 4, i32 9 }] > +// CHECK: @__llvm_coverage_mapping = internal constant { i32, i32, i32, i32, > [2 x { i8*, i32, i32, i64 }], [{{[0-9]+}} x i8] } { i32 2, i32 {{[0-9]+}}, > i32 {{[0-9]+}}, i32 0, [2 x { i8*, i32, i32, i64 }] [{ i8*, i32, i32, i64 } { > i8* getelementptr inbounds ([3 x i8]* @__llvm_profile_name_foo, i32 0, i32 > 0), i32 3, i32 9, i64 {{[0-9]+}} }, { i8*, i32, i32, i64 } { i8* > getelementptr inbounds ([4 x i8]* @__llvm_profile_name_main, i32 0, i32 0), > i32 4, i32 9, i64 {{[0-9]+}} }] _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
