[PATCH] Coverage Mapping: store function's hash in the function's coverage record.
Alex Lorenz
arphaman at gmail.com
Thu Aug 21 12:34:46 PDT 2014
Closed by commit rL216208 (authored by @arphaman).
REPOSITORY
rL LLVM
http://reviews.llvm.org/D4995
Files:
cfe/trunk/lib/CodeGen/CodeGenPGO.cpp
cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
cfe/trunk/lib/CodeGen/CoverageMappingGen.h
cfe/trunk/test/CoverageMapping/ir.c
Index: cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
===================================================================
--- cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
+++ cfe/trunk/lib/CodeGen/CoverageMappingGen.cpp
@@ -1094,20 +1094,22 @@
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));
}
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: cfe/trunk/lib/CodeGen/CoverageMappingGen.h
===================================================================
--- cfe/trunk/lib/CodeGen/CoverageMappingGen.h
+++ cfe/trunk/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: cfe/trunk/lib/CodeGen/CodeGenPGO.cpp
===================================================================
--- cfe/trunk/lib/CodeGen/CodeGenPGO.cpp
+++ cfe/trunk/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: cfe/trunk/test/CoverageMapping/ir.c
===================================================================
--- cfe/trunk/test/CoverageMapping/ir.c
+++ cfe/trunk/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]+}} }]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4995.12796.patch
Type: text/x-patch
Size: 3920 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140821/9139246c/attachment.bin>
More information about the cfe-commits
mailing list