rename sNames -> StmtClassInfo. Make lookups constant time.

llvm-svn: 41390
This commit is contained in:
Chris Lattner 2007-08-25 01:42:24 +00:00
parent c1ef32ef3d
commit 4d15a0dbc0
1 changed files with 33 additions and 24 deletions

View File

@ -18,56 +18,65 @@
using namespace clang;
static struct StmtClassNameTable {
int enumValue;
const char *className;
unsigned counter;
unsigned size;
} sNames[] = {
#define STMT(N, CLASS, PARENT) { N, #CLASS, 0, sizeof(CLASS) },
const char *Name;
unsigned Counter;
unsigned Size;
} StmtClassInfo[Stmt::lastExprConstant];
static StmtClassNameTable &getStmtInfoTableEntry(Stmt::StmtClass E) {
static bool Initialized = false;
if (Initialized)
return StmtClassInfo[E];
// Intialize the table on the first use.
Initialized = true;
#define STMT(N, CLASS, PARENT) \
StmtClassInfo[N].Name = #CLASS; \
StmtClassInfo[N].Size = sizeof(CLASS);
#include "clang/AST/StmtNodes.def"
{ 0, 0, 0, 0 }
};
return StmtClassInfo[E];
}
const char *Stmt::getStmtClassName() const {
for (int i = 0; sNames[i].className; i++) {
if (sClass == sNames[i].enumValue)
return sNames[i].className;
}
return 0; // should never happen....
return getStmtInfoTableEntry(sClass).Name;
}
void Stmt::PrintStats() {
// Ensure the table is primed.
getStmtInfoTableEntry(Stmt::NullStmtClass);
unsigned sum = 0;
fprintf(stderr, "*** Stmt/Expr Stats:\n");
for (int i = 0; sNames[i].className; i++) {
sum += sNames[i].counter;
for (int i = 0; i != Stmt::lastExprConstant; i++) {
if (StmtClassInfo[i].Name == 0) continue;
sum += StmtClassInfo[i].Counter;
}
fprintf(stderr, " %d stmts/exprs total.\n", sum);
sum = 0;
for (int i = 0; sNames[i].className; i++) {
for (int i = 0; i != Stmt::lastExprConstant; i++) {
if (StmtClassInfo[i].Name == 0) continue;
fprintf(stderr, " %d %s, %d each (%d bytes)\n",
sNames[i].counter, sNames[i].className, sNames[i].size, sNames[i].counter*sNames[i].size);
sum += sNames[i].counter*sNames[i].size;
StmtClassInfo[i].Counter, StmtClassInfo[i].Name,
StmtClassInfo[i].Size,
StmtClassInfo[i].Counter*StmtClassInfo[i].Size);
sum += StmtClassInfo[i].Counter*StmtClassInfo[i].Size;
}
fprintf(stderr, "Total bytes = %d\n", sum);
}
void Stmt::addStmtClass(StmtClass s) {
for (int i = 0; sNames[i].className; i++) {
if (s == sNames[i].enumValue)
sNames[i].counter++;
}
++getStmtInfoTableEntry(s).Counter;
}
static bool StatSwitch = false;
bool Stmt::CollectingStats(bool enable) {
if (enable) StatSwitch = true;
return StatSwitch;
return StatSwitch;
}
const char *LabelStmt::getName() const {
return getID()->getName();
}