diff options
author | Yuchen Wu <yuchenericwu@hotmail.com> | 2013-11-21 04:01:05 +0000 |
---|---|---|
committer | Yuchen Wu <yuchenericwu@hotmail.com> | 2013-11-21 04:01:05 +0000 |
commit | 6431960be37d32ea6c3977f506c4ef938125bb02 (patch) | |
tree | 1af15b261c21cb5dad823c4c27aa93bbe134d386 /lib/Transforms/Instrumentation | |
parent | 7fac06c4233ea2769fc1b6ed4bb1d23ce538a89f (diff) | |
download | llvm-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.cpp | 17 |
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 = |