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 | 664dc7678bc57f533932c715502fa019ff53e8ac (patch) | |
tree | e06212d90878f01b983a88d2f8fd2807880a5d39 /llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp | |
parent | db2f51e5f18650cd0b5e91886bd78db1da441e35 (diff) | |
download | bcm5719-llvm-664dc7678bc57f533932c715502fa019ff53e8ac.tar.gz bcm5719-llvm-664dc7678bc57f533932c715502fa019ff53e8ac.zip |
llvm-cov: Fixed some bugs related to file checksum.
Added call to update CfgChecksum. Made FileChecksum a vector, separate
for each source file.
llvm-svn: 195309
Diffstat (limited to 'llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp')
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp b/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp index 03c63557bce..63227f99723 100644 --- a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp +++ b/llvm/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 = |