PP: Non-functional: Only use string <-> atom mapping when needed.
Also, eliminate the 'atom' field of TPpToken. Parsing a real 300 line shader, through to making the AST, is about 10% faster. Memory is slightly reduced (< 1%). The whole google-test suite, inclusive of all testing overhead, SPIR-V generation, etc., runs 3% faster. Since this is a code *simplification* that leads to perf. improvement, I'm not going to invest too much more in measuring the perf. than this. The PP code is simply now in a better state to see how to further rationalize/improve it.
This commit is contained in:
parent
54af2de761
commit
907aabb6b0
7 changed files with 74 additions and 63 deletions
|
|
@ -120,7 +120,6 @@ const struct {
|
|||
{ PpAtomIncrement, "++" },
|
||||
|
||||
{ PpAtomDefine, "define" },
|
||||
{ PpAtomDefined, "defined" },
|
||||
{ PpAtomUndef, "undef" },
|
||||
{ PpAtomIf, "if" },
|
||||
{ PpAtomElif, "elif" },
|
||||
|
|
@ -149,17 +148,29 @@ const struct {
|
|||
|
||||
namespace glslang {
|
||||
|
||||
//
|
||||
// Map an existing string to an atom.
|
||||
//
|
||||
// Return 0 if no existing string.
|
||||
//
|
||||
int TPpContext::LookUpString(const char* s)
|
||||
{
|
||||
auto it = atomMap.find(s);
|
||||
return it == atomMap.end() ? 0 : it->second;
|
||||
}
|
||||
|
||||
//
|
||||
// Map a new or existing string to an atom, inventing a new atom if necessary.
|
||||
//
|
||||
int TPpContext::LookUpAddString(const char* s)
|
||||
{
|
||||
auto it = atomMap.find(s);
|
||||
if (it == atomMap.end()) {
|
||||
AddAtomFixed(s, nextAtom);
|
||||
return nextAtom++;
|
||||
} else
|
||||
return it->second;
|
||||
int atom = LookUpString(s);
|
||||
if (atom == 0) {
|
||||
atom = nextAtom++;
|
||||
AddAtomFixed(s, atom);
|
||||
}
|
||||
|
||||
return atom;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue