summaryrefslogtreecommitdiff
path: root/lib/Transforms/Instrumentation
diff options
context:
space:
mode:
authorYuchen Wu <yuchenericwu@hotmail.com>2013-11-21 04:01:05 +0000
committerYuchen Wu <yuchenericwu@hotmail.com>2013-11-21 04:01:05 +0000
commit6431960be37d32ea6c3977f506c4ef938125bb02 (patch)
tree1af15b261c21cb5dad823c4c27aa93bbe134d386 /lib/Transforms/Instrumentation
parent7fac06c4233ea2769fc1b6ed4bb1d23ce538a89f (diff)
downloadllvm-6431960be37d32ea6c3977f506c4ef938125bb02.tar.gz
llvm-6431960be37d32ea6c3977f506c4ef938125bb02.tar.bz2
llvm-6431960be37d32ea6c3977f506c4ef938125bb02.tar.xz
llvm-cov: Fixed some bugs related to file checksum.
Added call to update CfgChecksum. Made FileChecksum a vector, separate for each source file. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195309 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Instrumentation')
-rw-r--r--lib/Transforms/Instrumentation/GCOVProfiling.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/Transforms/Instrumentation/GCOVProfiling.cpp b/lib/Transforms/Instrumentation/GCOVProfiling.cpp
index 03c63557bc..63227f9972 100644
--- a/lib/Transforms/Instrumentation/GCOVProfiling.cpp
+++ b/lib/Transforms/Instrumentation/GCOVProfiling.cpp
@@ -136,7 +136,7 @@ namespace {
// Reversed, NUL-terminated copy of Options.Version.
char ReversedVersion[5];
// Checksum, produced by hash of EdgeDestinations
- uint32_t FileChecksum;
+ SmallVector<uint32_t, 4> FileChecksums;
Module *M;
LLVMContext *Ctx;
@@ -498,14 +498,17 @@ void GCOVProfiler::emitProfileNotes() {
EdgeDestinations += Func->getEdgeDestinations();
}
- FileChecksum = hash_value(EdgeDestinations);
+ FileChecksums.push_back(hash_value(EdgeDestinations));
out.write("oncg", 4);
out.write(ReversedVersion, 4);
- out.write(reinterpret_cast<char*>(&FileChecksum), 4);
+ out.write(reinterpret_cast<char*>(&FileChecksums.back()), 4);
for (SmallVectorImpl<GCOVFunction *>::iterator I = Funcs.begin(),
- E = Funcs.end(); I != E; ++I)
- (*I)->writeOut();
+ E = Funcs.end(); I != E; ++I) {
+ GCOVFunction *Func = *I;
+ Func->setCfgChecksum(FileChecksums.back());
+ Func->writeOut();
+ }
out.write("\0\0\0\0\0\0\0\0", 8); // EOF
out.close();
@@ -803,7 +806,7 @@ Function *GCOVProfiler::insertCounterWriteout(
Builder.CreateCall3(StartFile,
Builder.CreateGlobalStringPtr(FilenameGcda),
Builder.CreateGlobalStringPtr(ReversedVersion),
- Builder.getInt32(FileChecksum));
+ Builder.getInt32(FileChecksums[i]));
for (unsigned j = 0, e = CountersBySP.size(); j != e; ++j) {
DISubprogram SP(CountersBySP[j].second);
Builder.CreateCall4(
@@ -812,7 +815,7 @@ Function *GCOVProfiler::insertCounterWriteout(
Builder.CreateGlobalStringPtr(getFunctionName(SP)) :
Constant::getNullValue(Builder.getInt8PtrTy()),
Builder.getInt8(Options.UseCfgChecksum),
- Builder.getInt32(FileChecksum));
+ Builder.getInt32(FileChecksums[i]));
GlobalVariable *GV = CountersBySP[j].first;
unsigned Arcs =