[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