aboutsummaryrefslogtreecommitdiff
path: root/lib/Bytecode/Writer/InstructionWriter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-01-14 16:54:21 +0000
committerChris Lattner <sabre@nondot.org>2004-01-14 16:54:21 +0000
commitd6942d76334604f9bbd4118e6b109ecd6ea1326e (patch)
tree0ea8c15cc363dfa032012785aee898f5dffe9833 /lib/Bytecode/Writer/InstructionWriter.cpp
parentc08912f917ff3a007bfc0cfa3fa670c2441279e2 (diff)
Ok, I can't handle it. This is a temporary checkin of a ton of statistics that
i'm using in my work to reduce the bytecode file sizes. These will eventually be removed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10849 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode/Writer/InstructionWriter.cpp')
-rw-r--r--lib/Bytecode/Writer/InstructionWriter.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/Bytecode/Writer/InstructionWriter.cpp b/lib/Bytecode/Writer/InstructionWriter.cpp
index bc5268c943..0bf555d8b5 100644
--- a/lib/Bytecode/Writer/InstructionWriter.cpp
+++ b/lib/Bytecode/Writer/InstructionWriter.cpp
@@ -22,6 +22,23 @@ using namespace llvm;
static Statistic<>
NumInstrs("bytecodewriter", "Number of instructions");
+static Statistic<>
+NumOversizedInstrs("bytecodewriter", "Number of oversized instructions");
+static Statistic<>
+BytesOversizedInstrs("bytecodewriter", "Bytes of oversized instructions");
+
+static Statistic<>
+NumHugeOperandInstrs("bytecodewriter", "Number of instructions with > 3 operands");
+static Statistic<>
+NumOversized1OpInstrs("bytecodewriter", "Number of oversized 1 operand instrs");
+static Statistic<>
+NumOversized2OpInstrs("bytecodewriter", "Number of oversized 2 operand instrs");
+static Statistic<>
+NumOversized3OpInstrs("bytecodewriter", "Number of oversized 3 operand instrs");
+
+static Statistic<>
+NumOversidedBecauseOfTypes("bytecodewriter", "Number of oversized instructions because of their type");
+
typedef unsigned char uchar;
@@ -33,6 +50,9 @@ typedef unsigned char uchar;
static void outputInstructionFormat0(const Instruction *I, unsigned Opcode,
const SlotCalculator &Table,
unsigned Type, std::deque<uchar> &Out) {
+ NumOversizedInstrs++;
+ BytesOversizedInstrs -= Out.size();
+
// Opcode must have top two bits clear...
output_vbr(Opcode << 2, Out); // Instruction Opcode ID
output_vbr(Type, Out); // Result type
@@ -58,6 +78,7 @@ static void outputInstructionFormat0(const Instruction *I, unsigned Opcode,
}
align32(Out); // We must maintain correct alignment!
+ BytesOversizedInstrs += Out.size();
}
@@ -275,6 +296,10 @@ void BytecodeWriter::processInstruction(const Instruction &I) {
outputInstructionFormat1(&I, Opcode, Table, Slots, Type, Out);
return;
}
+ if (Type >= (1 << 12)-1)
+ NumOversidedBecauseOfTypes++;
+
+ NumOversized1OpInstrs++;
break;
case 2:
@@ -282,6 +307,9 @@ void BytecodeWriter::processInstruction(const Instruction &I) {
outputInstructionFormat2(&I, Opcode, Table, Slots, Type, Out);
return;
}
+ if (Type >= (1 << 8))
+ NumOversidedBecauseOfTypes++;
+ NumOversized2OpInstrs++;
break;
case 3:
@@ -289,6 +317,12 @@ void BytecodeWriter::processInstruction(const Instruction &I) {
outputInstructionFormat3(&I, Opcode, Table, Slots, Type, Out);
return;
}
+ if (Type >= (1 << 6))
+ NumOversidedBecauseOfTypes++;
+ NumOversized3OpInstrs++;
+ break;
+ default:
+ ++NumHugeOperandInstrs;
break;
}