Commit a1d43971 by Shahbaz Youssefi Committed by Angle LUCI CQ

Translator: Pack TSymbol and TFunction fields

Shaves ~45KB off of binary size in an ANGLE build on Linux, coming from the built-in TVariable and TFunction variables. Bug: angleproject:4889 Change-Id: I5466c9e26b069a07bf52d00fc2a9c5d49f3c0feb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2958868Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
parent 18ddd131
...@@ -335,6 +335,10 @@ bool TCompiler::Init(const ShBuiltInResources &resources) ...@@ -335,6 +335,10 @@ bool TCompiler::Init(const ShBuiltInResources &resources)
mResources = resources; mResources = resources;
setResourceString(); setResourceString();
// The number of function parameters in TFunction is stored in 15 bits. Validate that no more
// than that is allowed.
ASSERT(mResources.MaxFunctionParameters < (1 << 15));
InitExtensionBehavior(resources, mExtensionBehavior); InitExtensionBehavior(resources, mExtensionBehavior);
return true; return true;
} }
......
...@@ -39,9 +39,9 @@ TSymbol::TSymbol(TSymbolTable *symbolTable, ...@@ -39,9 +39,9 @@ TSymbol::TSymbol(TSymbolTable *symbolTable,
TExtension extension) TExtension extension)
: mName(name), : mName(name),
mUniqueId(symbolTable->nextUniqueId()), mUniqueId(symbolTable->nextUniqueId()),
mSymbolType(symbolType),
mExtensions( mExtensions(
std::array<TExtension, 3u>{{extension, TExtension::UNDEFINED, TExtension::UNDEFINED}}), std::array<TExtension, 3u>{{extension, TExtension::UNDEFINED, TExtension::UNDEFINED}}),
mSymbolType(symbolType),
mSymbolClass(symbolClass) mSymbolClass(symbolClass)
{ {
ASSERT(mSymbolType == SymbolType::BuiltIn || extension == TExtension::UNDEFINED); ASSERT(mSymbolType == SymbolType::BuiltIn || extension == TExtension::UNDEFINED);
...@@ -56,8 +56,8 @@ TSymbol::TSymbol(TSymbolTable *symbolTable, ...@@ -56,8 +56,8 @@ TSymbol::TSymbol(TSymbolTable *symbolTable,
const std::array<TExtension, 3u> &extensions) const std::array<TExtension, 3u> &extensions)
: mName(name), : mName(name),
mUniqueId(symbolTable->nextUniqueId()), mUniqueId(symbolTable->nextUniqueId()),
mSymbolType(symbolType),
mExtensions(extensions), mExtensions(extensions),
mSymbolType(symbolType),
mSymbolClass(symbolClass) mSymbolClass(symbolClass)
{ {
ASSERT(mSymbolType == SymbolType::BuiltIn || extensions[0] == TExtension::UNDEFINED); ASSERT(mSymbolType == SymbolType::BuiltIn || extensions[0] == TExtension::UNDEFINED);
...@@ -190,9 +190,9 @@ TFunction::TFunction(TSymbolTable *symbolTable, ...@@ -190,9 +190,9 @@ TFunction::TFunction(TSymbolTable *symbolTable,
: TSymbol(symbolTable, name, symbolType, SymbolClass::Function, TExtension::UNDEFINED), : TSymbol(symbolTable, name, symbolType, SymbolClass::Function, TExtension::UNDEFINED),
mParametersVector(new TParamVector()), mParametersVector(new TParamVector()),
mParameters(nullptr), mParameters(nullptr),
mParamCount(0u),
returnType(retType), returnType(retType),
mMangledName(""), mMangledName(""),
mParamCount(0u),
mOp(EOpNull), mOp(EOpNull),
defined(false), defined(false),
mHasPrototypeDeclaration(false), mHasPrototypeDeclaration(false),
......
...@@ -86,8 +86,8 @@ class TSymbol : angle::NonCopyable ...@@ -86,8 +86,8 @@ class TSymbol : angle::NonCopyable
SymbolClass symbolClass) SymbolClass symbolClass)
: mName(name), : mName(name),
mUniqueId(id), mUniqueId(id),
mSymbolType(symbolType),
mExtensions(CreateExtensionList(extensions)), mExtensions(CreateExtensionList(extensions)),
mSymbolType(symbolType),
mSymbolClass(symbolClass) mSymbolClass(symbolClass)
{} {}
...@@ -95,12 +95,12 @@ class TSymbol : angle::NonCopyable ...@@ -95,12 +95,12 @@ class TSymbol : angle::NonCopyable
private: private:
const TSymbolUniqueId mUniqueId; const TSymbolUniqueId mUniqueId;
const SymbolType mSymbolType;
const std::array<TExtension, 3u> mExtensions; const std::array<TExtension, 3u> mExtensions;
const SymbolType mSymbolType : 4;
// We use this instead of having virtual functions for querying the class in order to support // We use this instead of having virtual functions for querying the class in order to support
// constexpr symbols. // constexpr symbols.
const SymbolClass mSymbolClass; const SymbolClass mSymbolClass : 4;
}; };
// Variable. // Variable.
...@@ -343,9 +343,9 @@ class TFunction : public TSymbol ...@@ -343,9 +343,9 @@ class TFunction : public TSymbol
SymbolClass::Function), SymbolClass::Function),
mParametersVector(nullptr), mParametersVector(nullptr),
mParameters(parameters), mParameters(parameters),
mParamCount(paramCount),
returnType(retType), returnType(retType),
mMangledName(nullptr), mMangledName(nullptr),
mParamCount(paramCount),
mOp(op), mOp(op),
defined(false), defined(false),
mHasPrototypeDeclaration(false), mHasPrototypeDeclaration(false),
...@@ -364,9 +364,9 @@ class TFunction : public TSymbol ...@@ -364,9 +364,9 @@ class TFunction : public TSymbol
: TSymbol(id, name, SymbolType::BuiltIn, extensions, SymbolClass::Function), : TSymbol(id, name, SymbolType::BuiltIn, extensions, SymbolClass::Function),
mParametersVector(nullptr), mParametersVector(nullptr),
mParameters(parameters), mParameters(parameters),
mParamCount(paramCount),
returnType(retType), returnType(retType),
mMangledName(nullptr), mMangledName(nullptr),
mParamCount(paramCount),
mOp(op), mOp(op),
defined(false), defined(false),
mHasPrototypeDeclaration(false), mHasPrototypeDeclaration(false),
...@@ -379,13 +379,13 @@ class TFunction : public TSymbol ...@@ -379,13 +379,13 @@ class TFunction : public TSymbol
typedef TVector<const TVariable *> TParamVector; typedef TVector<const TVariable *> TParamVector;
TParamVector *mParametersVector; TParamVector *mParametersVector;
const TVariable *const *mParameters; const TVariable *const *mParameters;
size_t mParamCount;
const TType *const returnType; const TType *const returnType;
mutable ImmutableString mMangledName; mutable ImmutableString mMangledName;
const TOperator mOp; // Only set for built-ins size_t mParamCount : 16;
bool defined; const TOperator mOp : 8; // Only set for built-ins
bool mHasPrototypeDeclaration; bool defined : 1;
bool mKnownToNotHaveSideEffects; bool mHasPrototypeDeclaration : 1;
bool mKnownToNotHaveSideEffects : 1;
}; };
} // namespace sh } // namespace sh
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment