mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Change the table datastructure to be a vector<smallvector>, instead of
vector<vector> to avoid allocations. This speeds up bcwriting of 447.dealII from 0.8276 to 0.7637s (8.4%). This concludes this round of proding the bcwriter into submission. Final speedup from 24.4s to 0.7637s (32x). llvm-svn: 34142
This commit is contained in:
parent
6301eb8919
commit
02141c9762
@ -21,6 +21,7 @@
|
||||
#define LLVM_ANALYSIS_SLOTCALCULATOR_H
|
||||
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include <vector>
|
||||
|
||||
namespace llvm {
|
||||
@ -44,9 +45,10 @@ struct ModuleLevelDenseMapKeyInfo {
|
||||
|
||||
class SlotCalculator {
|
||||
const Module *TheModule;
|
||||
|
||||
public:
|
||||
typedef std::vector<const Type*> TypeList;
|
||||
typedef std::vector<const Value*> TypePlane;
|
||||
typedef SmallVector<const Value*, 16> TypePlane;
|
||||
private:
|
||||
std::vector<TypePlane> Table;
|
||||
TypeList Types;
|
||||
typedef DenseMap<const Value*, unsigned> NodeMapType;
|
||||
|
@ -812,21 +812,22 @@ void BytecodeWriter::outputTypes(unsigned TypeNum) {
|
||||
// Helper function for outputConstants().
|
||||
// Writes out all the constants in the plane Plane starting at entry StartNo.
|
||||
//
|
||||
void BytecodeWriter::outputConstantsInPlane(const std::vector<const Value*>
|
||||
&Plane, unsigned StartNo) {
|
||||
void BytecodeWriter::outputConstantsInPlane(const Value *const *Plane,
|
||||
unsigned PlaneSize,
|
||||
unsigned StartNo) {
|
||||
unsigned ValNo = StartNo;
|
||||
|
||||
// Scan through and ignore function arguments, global values, and constant
|
||||
// strings.
|
||||
for (; ValNo < Plane.size() &&
|
||||
for (; ValNo < PlaneSize &&
|
||||
(isa<Argument>(Plane[ValNo]) || isa<GlobalValue>(Plane[ValNo]) ||
|
||||
(isa<ConstantArray>(Plane[ValNo]) &&
|
||||
cast<ConstantArray>(Plane[ValNo])->isString())); ValNo++)
|
||||
/*empty*/;
|
||||
|
||||
unsigned NC = ValNo; // Number of constants
|
||||
for (; NC < Plane.size() && (isa<Constant>(Plane[NC]) ||
|
||||
isa<InlineAsm>(Plane[NC])); NC++)
|
||||
for (; NC < PlaneSize && (isa<Constant>(Plane[NC]) ||
|
||||
isa<InlineAsm>(Plane[NC])); NC++)
|
||||
/*empty*/;
|
||||
NC -= ValNo; // Convert from index into count
|
||||
if (NC == 0) return; // Skip empty type planes...
|
||||
@ -839,7 +840,7 @@ void BytecodeWriter::outputConstantsInPlane(const std::vector<const Value*>
|
||||
output_vbr(NC);
|
||||
|
||||
// Put out the Type ID Number.
|
||||
output_typeid(Table.getTypeSlot(Plane.front()->getType()));
|
||||
output_typeid(Table.getTypeSlot(Plane[0]->getType()));
|
||||
|
||||
for (unsigned i = ValNo; i < ValNo+NC; ++i) {
|
||||
const Value *V = Plane[i];
|
||||
@ -864,7 +865,7 @@ void BytecodeWriter::outputConstants() {
|
||||
outputConstantStrings();
|
||||
|
||||
for (unsigned pno = 0; pno != NumPlanes; pno++) {
|
||||
const std::vector<const Value*> &Plane = Table.getPlane(pno);
|
||||
const SlotCalculator::TypePlane &Plane = Table.getPlane(pno);
|
||||
if (!Plane.empty()) { // Skip empty type planes...
|
||||
unsigned ValNo = 0;
|
||||
if (hasNullValue(Plane[0]->getType())) {
|
||||
@ -873,7 +874,7 @@ void BytecodeWriter::outputConstants() {
|
||||
}
|
||||
|
||||
// Write out constants in the plane
|
||||
outputConstantsInPlane(Plane, ValNo);
|
||||
outputConstantsInPlane(&Plane[0], Plane.size(), ValNo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,11 +35,6 @@ private:
|
||||
void outputConstants();
|
||||
void outputConstantStrings();
|
||||
void outputFunction(const Function *F);
|
||||
void outputCompactionTable();
|
||||
void outputCompactionTypes(unsigned StartNo);
|
||||
void outputCompactionTablePlane(unsigned PlaneNo,
|
||||
const std::vector<const Value*> &TypePlane,
|
||||
unsigned StartNo);
|
||||
void outputInstructions(const Function *F);
|
||||
void outputInstruction(const Instruction &I);
|
||||
void outputInstructionFormat0(const Instruction *I, unsigned Opcode,
|
||||
@ -66,7 +61,7 @@ private:
|
||||
void outputTypeSymbolTable(const TypeSymbolTable &TST);
|
||||
void outputValueSymbolTable(const ValueSymbolTable &ST);
|
||||
void outputTypes(unsigned StartNo);
|
||||
void outputConstantsInPlane(const std::vector<const Value*> &Plane,
|
||||
void outputConstantsInPlane(const Value *const*Plane, unsigned PlaneSize,
|
||||
unsigned StartNo);
|
||||
void outputConstant(const Constant *CPV);
|
||||
void outputInlineAsm(const InlineAsm *IA);
|
||||
|
Loading…
Reference in New Issue
Block a user