[llvm-commits] [llvm] r130835 - /llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp
Nick Lewycky
nicholas at mxc.ca
Tue May 3 21:03:04 PDT 2011
Author: nicholas
Date: Tue May 3 23:03:04 2011
New Revision: 130835
URL: http://llvm.org/viewvc/llvm-project?rev=130835&view=rev
Log:
Emit gcov data files to the directory specified in the metadata produced by the
frontend, if applicable.
Modified:
llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp
Modified: llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp?rev=130835&r1=130834&r2=130835&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp Tue May 3 23:03:04 2011
@@ -40,7 +40,6 @@
namespace {
class GCOVProfiler : public ModulePass {
- bool runOnModule(Module &M);
public:
static char ID;
GCOVProfiler()
@@ -57,6 +56,8 @@
}
private:
+ bool runOnModule(Module &M);
+
// Create the GCNO files for the Module based on DebugInfo.
void emitGCNO(DebugInfoFinder &DIF);
@@ -88,6 +89,8 @@
SmallVector<std::pair<GlobalVariable *,
uint32_t>, 8> &);
+ std::string mangleName(DICompileUnit CU, std::string NewStem);
+
bool EmitNotes;
bool EmitData;
@@ -323,6 +326,22 @@
return (sys::path::stem(OrigFilename) + "." + NewStem).str();
}
+std::string GCOVProfiler::mangleName(DICompileUnit CU, std::string NewStem) {
+ if (NamedMDNode *GCov = M->getNamedMetadata("llvm.gcov")) {
+ for (int i = 0, e = GCov->getNumOperands(); i != e; ++i) {
+ MDNode *N = GCov->getOperand(i);
+ if (N->getNumOperands() != 2) continue;
+ MDString *Path = dyn_cast<MDString>(N->getOperand(0));
+ MDNode *CompileUnit = dyn_cast<MDNode>(N->getOperand(1));
+ if (!Path || !CompileUnit) continue;
+ if (CompileUnit == CU)
+ return (Path->getString() + "/" +
+ replaceStem(CU.getFilename(), NewStem)).str();
+ }
+ }
+ return replaceStem(CU.getFilename(), NewStem);
+}
+
bool GCOVProfiler::runOnModule(Module &M) {
this->M = &M;
Ctx = &M.getContext();
@@ -346,8 +365,8 @@
DICompileUnit CU(*I);
raw_fd_ostream *&out = GcnoFiles[CU];
std::string ErrorInfo;
- out = new raw_fd_ostream(replaceStem(CU.getFilename(), "gcno").c_str(),
- ErrorInfo, raw_fd_ostream::F_Binary);
+ out = new raw_fd_ostream(mangleName(CU, "gcno").c_str(), ErrorInfo,
+ raw_fd_ostream::F_Binary);
out->write("oncg*404MVLL", 12);
}
@@ -615,7 +634,7 @@
for (DebugInfoFinder::iterator CUI = DIF.compile_unit_begin(),
CUE = DIF.compile_unit_end(); CUI != CUE; ++CUI) {
DICompileUnit compile_unit(*CUI);
- std::string FilenameGcda = replaceStem(compile_unit.getFilename(), "gcda");
+ std::string FilenameGcda = mangleName(compile_unit, "gcda");
Builder.CreateCall(StartFile,
Builder.CreateGlobalStringPtr(FilenameGcda));
for (SmallVector<std::pair<GlobalVariable *, uint32_t>, 8>::iterator
More information about the llvm-commits
mailing list