aboutsummaryrefslogtreecommitdiffstats
path: root/lib/MC/MCAssembler.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-03-23 23:47:14 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-03-23 23:47:14 +0000
commitff54784683591b2cdbdc18690aeac12c8d87f97b (patch)
tree5c33718b21d9c4209c80781f9e44bdb5c5f3bffb /lib/MC/MCAssembler.cpp
parent2d9f5d1d7f7aac13396778ba0d18cf1af8d0d02f (diff)
downloadexternal_llvm-ff54784683591b2cdbdc18690aeac12c8d87f97b.zip
external_llvm-ff54784683591b2cdbdc18690aeac12c8d87f97b.tar.gz
external_llvm-ff54784683591b2cdbdc18690aeac12c8d87f97b.tar.bz2
MC: Sprinkle in some more interesting statistics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99350 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCAssembler.cpp')
-rw-r--r--lib/MC/MCAssembler.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp
index b665cdf..a168abc 100644
--- a/lib/MC/MCAssembler.cpp
+++ b/lib/MC/MCAssembler.cpp
@@ -28,7 +28,15 @@
#include <vector>
using namespace llvm;
+namespace {
+namespace stats {
+STATISTIC(RelaxedInstructions, "Number of relaxed instructions");
+STATISTIC(RelaxationSteps, "Number of assembler layout and relaxation steps");
STATISTIC(EmittedFragments, "Number of emitted assembler fragments");
+STATISTIC(EvaluateFixup, "Number of evaluated fixups");
+STATISTIC(ObjectBytes, "Number of emitted object file bytes");
+}
+}
// FIXME FIXME FIXME: There are number of places in this file where we convert
// what is a 64-bit assembler value used for computation into a value in the
@@ -234,6 +242,8 @@ const MCSymbolData *MCAssembler::getAtom(const MCSymbolData *SD) const {
bool MCAssembler::EvaluateFixup(const MCAsmLayout &Layout,
const MCAsmFixup &Fixup, const MCFragment *DF,
MCValue &Target, uint64_t &Value) const {
+ ++stats::EvaluateFixup;
+
if (!Fixup.Value->EvaluateAsRelocatable(Target, &Layout))
llvm_report_error("expected relocatable expression");
@@ -376,7 +386,7 @@ static void WriteFragmentData(const MCAssembler &Asm, const MCFragment &F,
uint64_t Start = OW->getStream().tell();
(void) Start;
- ++EmittedFragments;
+ ++stats::EmittedFragments;
// FIXME: Embed in fragments instead?
switch (F.getKind()) {
@@ -505,6 +515,7 @@ void MCAssembler::Finish() {
llvm::errs() << "assembler backend - final-layout\n--\n";
dump(); });
+ uint64_t StartOffset = OS.tell();
llvm::OwningPtr<MCObjectWriter> Writer(getBackend().createObjectWriter(OS));
if (!Writer)
llvm_report_error("unable to create object writer!");
@@ -543,6 +554,8 @@ void MCAssembler::Finish() {
// Write the object file.
Writer->WriteObject(*this);
OS.flush();
+
+ stats::ObjectBytes += OS.tell() - StartOffset;
}
bool MCAssembler::FixupNeedsRelaxation(const MCAsmFixup &Fixup,
@@ -575,6 +588,8 @@ bool MCAssembler::FragmentNeedsRelaxation(const MCInstFragment *IF,
}
bool MCAssembler::LayoutOnce(MCAsmLayout &Layout) {
+ ++stats::RelaxationSteps;
+
// Layout the concrete sections and fragments.
uint64_t Address = 0;
MCSectionData *Prev = 0;
@@ -629,6 +644,8 @@ bool MCAssembler::LayoutOnce(MCAsmLayout &Layout) {
if (!IF || !FragmentNeedsRelaxation(IF, Layout))
continue;
+ ++stats::RelaxedInstructions;
+
// FIXME-PERF: We could immediately lower out instructions if we can tell
// they are fully resolved, to avoid retesting on later passes.