From 33543a2252dba935b54bd59532623c72fc0bc3d9 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Thu, 13 Sep 2012 14:32:30 +0000 Subject: [PATCH] Use Nick's suggestion of storing a large NULL into the GV instead of memset, which requires TargetData. llvm-svn: 163799 --- .../Instrumentation/GCOVProfiling.cpp | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/lib/Transforms/Instrumentation/GCOVProfiling.cpp b/lib/Transforms/Instrumentation/GCOVProfiling.cpp index 197a329feb7..5d4a1b30f57 100644 --- a/lib/Transforms/Instrumentation/GCOVProfiling.cpp +++ b/lib/Transforms/Instrumentation/GCOVProfiling.cpp @@ -34,7 +34,6 @@ #include "llvm/Support/InstIterator.h" #include "llvm/Support/PathV2.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/Target/TargetData.h" #include "llvm/Transforms/Utils/ModuleUtils.h" #include #include @@ -102,7 +101,6 @@ namespace { Module *M; LLVMContext *Ctx; - const TargetData *TD; }; } @@ -354,7 +352,6 @@ std::string GCOVProfiler::mangleName(DICompileUnit CU, const char *NewStem) { bool GCOVProfiler::runOnModule(Module &M) { this->M = &M; - TD = getAnalysisIfAvailable(); Ctx = &M.getContext(); if (EmitNotes) emitGCNO(); @@ -653,8 +650,8 @@ void GCOVProfiler::insertCounterWriteout( NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu"); if (CU_Nodes) { for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) { - DICompileUnit compile_unit(CU_Nodes->getOperand(i)); - std::string FilenameGcda = mangleName(compile_unit, "gcda"); + DICompileUnit CU(CU_Nodes->getOperand(i)); + std::string FilenameGcda = mangleName(CU, "gcda"); Builder.CreateCall(StartFile, Builder.CreateGlobalStringPtr(FilenameGcda)); for (ArrayRef >::iterator @@ -762,8 +759,6 @@ insertFlush(ArrayRef > CountersBySP) { FlushF->setLinkage(GlobalValue::InternalLinkage); FlushF->setUnnamedAddr(true); - Type *Int8Ty = Type::getInt8Ty(*Ctx); - Type *Int64Ty = Type::getInt64Ty(*Ctx); BasicBlock *Entry = BasicBlock::Create(*Ctx, "entry", FlushF); // Write out the current counters. @@ -773,17 +768,14 @@ insertFlush(ArrayRef > CountersBySP) { IRBuilder<> Builder(Entry); Builder.CreateCall(WriteoutF); - if (TD) - // Zero out the counters. - for (ArrayRef >::iterator - I = CountersBySP.begin(), E = CountersBySP.end(); - I != E; ++I) { - GlobalVariable *GV = I->first; - uint64_t NumBytes = TD->getTypeAllocSize(GV->getType()->getElementType()); - Builder.CreateMemSet(Builder.CreateConstGEP2_64(GV, 0, 0), - ConstantInt::get(Int8Ty, 0), - ConstantInt::get(Int64Ty, NumBytes), false); - } + // Zero out the counters. + for (ArrayRef >::iterator + I = CountersBySP.begin(), E = CountersBySP.end(); + I != E; ++I) { + GlobalVariable *GV = I->first; + Constant *Null = Constant::getNullValue(GV->getType()->getElementType()); + Builder.CreateStore(Null, GV);//Builder.CreateConstGEP2_64(GV, 0, 0)); + } Type *RetTy = FlushF->getReturnType(); if (RetTy == Type::getVoidTy(*Ctx))