[lld] r182789 - Instrument things.

Michael J. Spencer bigcheesegs at gmail.com
Tue May 28 11:55:40 PDT 2013


Author: mspencer
Date: Tue May 28 13:55:39 2013
New Revision: 182789

URL: http://llvm.org/viewvc/llvm-project?rev=182789&view=rev
Log:
Instrument things.

Modified:
    lld/trunk/include/lld/Core/Instrumentation.h
    lld/trunk/lib/Core/PassManager.cpp
    lld/trunk/lib/Core/Resolver.cpp
    lld/trunk/lib/Driver/Driver.cpp
    lld/trunk/lib/Passes/LayoutPass.cpp
    lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
    lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
    lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp

Modified: lld/trunk/include/lld/Core/Instrumentation.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Instrumentation.h?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Instrumentation.h (original)
+++ lld/trunk/include/lld/Core/Instrumentation.h Tue May 28 13:55:39 2013
@@ -15,6 +15,10 @@
 #ifndef LLD_CORE_INSTRUMENTATION_H
 #define LLD_CORE_INSTRUMENTATION_H
 
+#include "llvm/Support/Compiler.h"
+
+#include <utility>
+
 #ifdef LLD_HAS_VTUNE
 # include <ittnotify.h>
 #endif

Modified: lld/trunk/lib/Core/PassManager.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/PassManager.cpp?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/Core/PassManager.cpp (original)
+++ lld/trunk/lib/Core/PassManager.cpp Tue May 28 13:55:39 2013
@@ -17,7 +17,6 @@
 namespace lld {
 ErrorOr<void> PassManager::runOnFile(MutableFile &mf) {
   for (auto &pass : _passes) {
-    ScopedTask task(getDefaultDomain(), "Pass");
     pass->perform(mf);
   }
   return llvm::error_code::success();

Modified: lld/trunk/lib/Core/Resolver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/Core/Resolver.cpp (original)
+++ lld/trunk/lib/Core/Resolver.cpp Tue May 28 13:55:39 2013
@@ -10,6 +10,7 @@
 #include "lld/Core/Atom.h"
 #include "lld/Core/File.h"
 #include "lld/Core/InputFiles.h"
+#include "lld/Core/Instrumentation.h"
 #include "lld/Core/LLVM.h"
 #include "lld/Core/Resolver.h"
 #include "lld/Core/SymbolTable.h"
@@ -71,6 +72,7 @@ private:
 
 // add all atoms from all initial .o files
 void Resolver::buildInitialAtomList() {
+  ScopedTask task(getDefaultDomain(), "buildInitialAtomList");
  DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "Resolver initial atom list:\n");
 
   // each input files contributes initial atoms
@@ -184,6 +186,7 @@ void Resolver::addAtoms(const std::vecto
 // ask symbol table if any definitionUndefined atoms still exist
 // if so, keep searching libraries until no more atoms being added
 void Resolver::resolveUndefines() {
+  ScopedTask task(getDefaultDomain(), "resolveUndefines");
   const bool searchArchives =
       _targetInfo.searchArchivesToOverrideTentativeDefinitions();
   const bool searchSharedLibs =
@@ -234,6 +237,7 @@ void Resolver::resolveUndefines() {
 // switch all references to undefined or coalesced away atoms
 // to the new defined atom
 void Resolver::updateReferences() {
+  ScopedTask task(getDefaultDomain(), "updateReferences");
   for(const Atom *atom : _atoms) {
     if (const DefinedAtom* defAtom = dyn_cast<DefinedAtom>(atom)) {
       for (const Reference *ref : *defAtom) {
@@ -267,6 +271,7 @@ void Resolver::markLive(const Atom &atom
 
 // remove all atoms not actually used
 void Resolver::deadStripOptimize() {
+  ScopedTask task(getDefaultDomain(), "deadStripOptimize");
   // only do this optimization with -dead_strip
   if (!_targetInfo.deadStrip())
     return;
@@ -354,6 +359,7 @@ bool Resolver::checkUndefines(bool final
 
 // remove from _atoms all coaleseced away atoms
 void Resolver::removeCoalescedAwayAtoms() {
+  ScopedTask task(getDefaultDomain(), "removeCoalescedAwayAtoms");
   _atoms.erase(std::remove_if(_atoms.begin(), _atoms.end(),
                               AtomCoalescedAway(_symbolTable)), _atoms.end());
 }
@@ -361,6 +367,7 @@ void Resolver::removeCoalescedAwayAtoms(
 // check for interactions between symbols defined in this linkage unit
 // and same symbol name in linked dynamic shared libraries
 void Resolver::checkDylibSymbolCollisions() {
+  ScopedTask task(getDefaultDomain(), "checkDylibSymbolCollisions");
   for ( const Atom *atom : _atoms ) {
     const DefinedAtom* defAtom = dyn_cast<DefinedAtom>(atom);
     if (defAtom == nullptr)
@@ -420,6 +427,7 @@ MutableFile::DefinedAtomRange Resolver::
 
 
 void Resolver::MergedFile::addAtoms(std::vector<const Atom*>& all) {
+  ScopedTask task(getDefaultDomain(), "addAtoms");
   DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "Resolver final atom list:\n");
   for ( const Atom *atom : all ) {
     DEBUG_WITH_TYPE("resolver", llvm::dbgs()

Modified: lld/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/Driver.cpp?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/Driver/Driver.cpp (original)
+++ lld/trunk/lib/Driver/Driver.cpp Tue May 28 13:55:39 2013
@@ -11,6 +11,7 @@
 
 #include "lld/Core/LLVM.h"
 #include "lld/Core/InputFiles.h"
+#include "lld/Core/Instrumentation.h"
 #include "lld/Core/PassManager.h"
 #include "lld/Core/Parallel.h"
 #include "lld/Core/Resolver.h"
@@ -41,6 +42,7 @@ bool Driver::link(const TargetInfo &targ
   }
 
   // Read inputs
+  ScopedTask readTask(getDefaultDomain(), "Read Args");
   std::vector<std::vector<std::unique_ptr<File>>> files(
       targetInfo.inputFiles().size());
   size_t index = 0;
@@ -61,6 +63,7 @@ bool Driver::link(const TargetInfo &targ
     ++index;
   }
   tg.sync();
+  readTask.end();
 
   if (fail)
     return true;
@@ -76,19 +79,24 @@ bool Driver::link(const TargetInfo &targ
   inputs.assignFileOrdinals();
 
   // Do core linking.
+  ScopedTask resolveTask(getDefaultDomain(), "Resolve");
   Resolver resolver(targetInfo, inputs);
   if (resolver.resolve()) {
     if (!targetInfo.allowRemainingUndefines())
       return true;
   }
   MutableFile &merged = resolver.resultFile();
+  resolveTask.end();
 
   // Run passes on linked atoms.
+  ScopedTask passTask(getDefaultDomain(), "Passes");
   PassManager pm;
   targetInfo.addPasses(pm);
   pm.runOnFile(merged);
+  passTask.end();
 
   // Give linked atoms to Writer to generate output file.
+  ScopedTask writeTask(getDefaultDomain(), "Write");
   if (error_code ec = targetInfo.writeFile(merged)) {
     diagnostics << "Failed to write file '" << targetInfo.outputPath() 
                 << "': " << ec.message() << "\n";

Modified: lld/trunk/lib/Passes/LayoutPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/LayoutPass.cpp?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/Passes/LayoutPass.cpp (original)
+++ lld/trunk/lib/Passes/LayoutPass.cpp Tue May 28 13:55:39 2013
@@ -397,6 +397,7 @@ void LayoutPass::buildOrdinalOverrideMap
 
 /// Perform the actual pass
 void LayoutPass::perform(MutableFile &mergedFile) {
+  ScopedTask task(getDefaultDomain(), "LayoutPass");
   MutableFile::DefinedAtomRange atomRange = mergedFile.definedAtoms();
 
   // Build follow on tables

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Tue May 28 13:55:39 2013
@@ -16,6 +16,7 @@
 #include "SectionChunks.h"
 #include "SegmentChunks.h"
 
+#include "lld/Core/Instrumentation.h"
 #include "lld/Core/STDExtras.h"
 
 #include "llvm/ADT/ArrayRef.h"
@@ -211,6 +212,7 @@ public:
   }
 
   inline void finalize() {
+    ScopedTask task(getDefaultDomain(), "Finalize layout");
     for (auto &si : _sections)
       si->finalize();
   }
@@ -544,6 +546,7 @@ DefaultLayout<ELFT>::mergeSimiliarSectio
 }
 
 template <class ELFT> void DefaultLayout<ELFT>::assignSectionsToSegments() {
+  ScopedTask task(getDefaultDomain(), "assignSectionsToSegments");
   // TODO: Do we want to give a chance for the targetHandlers
   // to sort segments in an arbitrary order ?
   // sort the sections by their order as defined by the layout

Modified: lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFTargetInfo.cpp Tue May 28 13:55:39 2013
@@ -96,6 +96,7 @@ bool ELFTargetInfo::isRelativeReloc(cons
 error_code
 ELFTargetInfo::parseFile(std::unique_ptr<MemoryBuffer> &mb,
                          std::vector<std::unique_ptr<File> > &result) const {
+  ScopedTask task(getDefaultDomain(), "parseFile");
   error_code ec = _elfReader->parseFile(mb, result);
   if (ec) {
     // Not an ELF file, check file extension to see if it might be yaml

Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Tue May 28 13:55:39 2013
@@ -9,16 +9,16 @@
 #ifndef LLD_READER_WRITER_OUTPUT_ELF_WRITER_H
 #define LLD_READER_WRITER_OUTPUT_ELF_WRITER_H
 
+#include "lld/Core/Instrumentation.h"
+#include "lld/ReaderWriter/ELFTargetInfo.h"
 #include "lld/ReaderWriter/Writer.h"
 
+#include "llvm/ADT/StringSet.h"
+
 #include "DefaultLayout.h"
 #include "TargetLayout.h"
 #include "ExecutableAtoms.h"
 
-#include "lld/ReaderWriter/ELFTargetInfo.h"
-
-#include "llvm/ADT/StringSet.h"
-
 namespace lld {
 namespace elf {
 using namespace llvm;
@@ -125,6 +125,7 @@ OutputELFWriter<ELFT>::OutputELFWriter(c
 
 template <class ELFT>
 void OutputELFWriter<ELFT>::buildChunks(const File &file) {
+  ScopedTask task(getDefaultDomain(), "buildChunks");
   for (const DefinedAtom *definedAtom : file.defined()) {
     _layout->addAtom(definedAtom);
   }
@@ -134,6 +135,7 @@ void OutputELFWriter<ELFT>::buildChunks(
 
 template <class ELFT>
 void OutputELFWriter<ELFT>::buildStaticSymbolTable(const File &file) {
+  ScopedTask task(getDefaultDomain(), "buildStaticSymbolTable");
   for (auto sec : _layout->sections())
     if (auto section = dyn_cast<AtomSection<ELFT>>(sec))
       for (const auto &atom : section->atoms())
@@ -146,6 +148,7 @@ void OutputELFWriter<ELFT>::buildStaticS
 
 template <class ELFT>
 void OutputELFWriter<ELFT>::buildDynamicSymbolTable(const File &file) {
+  ScopedTask task(getDefaultDomain(), "buildDynamicSymbolTable");
   for (const auto sla : file.sharedLibrary()) {
     _dynamicSymbolTable->addSymbol(sla, ELF::SHN_UNDEF);
     _soNeeded.insert(sla->loadName());
@@ -169,6 +172,7 @@ void OutputELFWriter<ELFT>::buildDynamic
 
 template <class ELFT>
 void OutputELFWriter<ELFT>::buildAtomToAddressMap(const File &file) {
+  ScopedTask task(getDefaultDomain(), "buildAtomToAddressMap");
   int64_t totalAbsAtoms = _layout->absoluteAtoms().size();
   int64_t totalUndefinedAtoms = file.undefined().size();
   int64_t totalDefinedAtoms = 0;
@@ -190,6 +194,7 @@ void OutputELFWriter<ELFT>::buildAtomToA
 
 template<class ELFT>
 void OutputELFWriter<ELFT>::buildSectionHeaderTable() {
+  ScopedTask task(getDefaultDomain(), "buildSectionHeaderTable");
   for (auto mergedSec : _layout->mergedSections()) {
     if (mergedSec->kind() != Chunk<ELFT>::K_ELFSection &&
         mergedSec->kind() != Chunk<ELFT>::K_AtomSection)
@@ -201,6 +206,7 @@ void OutputELFWriter<ELFT>::buildSection
 
 template<class ELFT>
 void OutputELFWriter<ELFT>::assignSectionsWithNoSegments() {
+  ScopedTask task(getDefaultDomain(), "assignSectionsWithNoSegments");
   for (auto mergedSec : _layout->mergedSections()) {
     if (mergedSec->kind() != Chunk<ELFT>::K_ELFSection &&
         mergedSec->kind() != Chunk<ELFT>::K_AtomSection)
@@ -321,15 +327,19 @@ error_code OutputELFWriter<ELFT>::buildO
 
 template <class ELFT>
 error_code OutputELFWriter<ELFT>::writeFile(const File &file, StringRef path) {
-
+  ScopedTask buildTask(getDefaultDomain(), "ELF Writer buildOutput");
   buildOutput(file);
+  buildTask.end();
 
   uint64_t totalSize = _shdrtab->fileOffset() + _shdrtab->fileSize();
 
   OwningPtr<FileOutputBuffer> buffer;
+  ScopedTask createOutputTask(getDefaultDomain(), "ELF Writer Create Output");
   error_code ec = FileOutputBuffer::create(path,
                                            totalSize, buffer,
                                            FileOutputBuffer::F_executable);
+  createOutputTask.end();
+
   if (ec)
     return ec;
 
@@ -362,12 +372,15 @@ error_code OutputELFWriter<ELFT>::writeF
   // HACK: We have to write out the header and program header here even though
   // they are a member of a segment because only sections are written in the
   // following loop.
+  ScopedTask writeTask(getDefaultDomain(), "ELF Writer write to memory");
   _Header->write(this, *buffer);
   _programHeader->write(this, *buffer);
 
   for (auto section : _layout->sections())
     section->write(this, *buffer);
+  writeTask.end();
 
+  ScopedTask commitTask(getDefaultDomain(), "ELF Writer commit to disk");
   return buffer->commit();
 }
 } // namespace elf

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp?rev=182789&r1=182788&r2=182789&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp Tue May 28 13:55:39 2013
@@ -11,6 +11,7 @@
 #include "X86_64TargetInfo.h"
 
 #include "lld/Core/File.h"
+#include "lld/Core/Instrumentation.h"
 #include "lld/Core/Pass.h"
 #include "lld/Core/PassManager.h"
 #include "lld/ReaderWriter/Simple.h"
@@ -213,6 +214,7 @@ public:
   /// After all references are handled, the atoms created during that are all
   /// added to mf.
   virtual void perform(MutableFile &mf) {
+    ScopedTask task(getDefaultDomain(), "X86-64 GOT/PLT Pass");
     // Process all references.
     for (const auto &atom : mf.defined())
       for (const auto &ref : *atom)





More information about the llvm-commits mailing list