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)
mResources = resources;
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);
return true;
}
......
......@@ -39,9 +39,9 @@ TSymbol::TSymbol(TSymbolTable *symbolTable,
TExtension extension)
: mName(name),
mUniqueId(symbolTable->nextUniqueId()),
mSymbolType(symbolType),
mExtensions(
std::array<TExtension, 3u>{{extension, TExtension::UNDEFINED, TExtension::UNDEFINED}}),
mSymbolType(symbolType),
mSymbolClass(symbolClass)
{
ASSERT(mSymbolType == SymbolType::BuiltIn || extension == TExtension::UNDEFINED);
......@@ -56,8 +56,8 @@ TSymbol::TSymbol(TSymbolTable *symbolTable,
const std::array<TExtension, 3u> &extensions)
: mName(name),
mUniqueId(symbolTable->nextUniqueId()),
mSymbolType(symbolType),
mExtensions(extensions),
mSymbolType(symbolType),
mSymbolClass(symbolClass)
{
ASSERT(mSymbolType == SymbolType::BuiltIn || extensions[0] == TExtension::UNDEFINED);
......@@ -190,9 +190,9 @@ TFunction::TFunction(TSymbolTable *symbolTable,
: TSymbol(symbolTable, name, symbolType, SymbolClass::Function, TExtension::UNDEFINED),
mParametersVector(new TParamVector()),
mParameters(nullptr),
mParamCount(0u),
returnType(retType),
mMangledName(""),
mParamCount(0u),
mOp(EOpNull),
defined(false),
mHasPrototypeDeclaration(false),
......
......@@ -86,8 +86,8 @@ class TSymbol : angle::NonCopyable
SymbolClass symbolClass)
: mName(name),
mUniqueId(id),
mSymbolType(symbolType),
mExtensions(CreateExtensionList(extensions)),
mSymbolType(symbolType),
mSymbolClass(symbolClass)
{}
......@@ -95,12 +95,12 @@ class TSymbol : angle::NonCopyable
private:
const TSymbolUniqueId mUniqueId;
const SymbolType mSymbolType;
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
// constexpr symbols.
const SymbolClass mSymbolClass;
const SymbolClass mSymbolClass : 4;
};
// Variable.
......@@ -343,9 +343,9 @@ class TFunction : public TSymbol
SymbolClass::Function),
mParametersVector(nullptr),
mParameters(parameters),
mParamCount(paramCount),
returnType(retType),
mMangledName(nullptr),
mParamCount(paramCount),
mOp(op),
defined(false),
mHasPrototypeDeclaration(false),
......@@ -364,9 +364,9 @@ class TFunction : public TSymbol
: TSymbol(id, name, SymbolType::BuiltIn, extensions, SymbolClass::Function),
mParametersVector(nullptr),
mParameters(parameters),
mParamCount(paramCount),
returnType(retType),
mMangledName(nullptr),
mParamCount(paramCount),
mOp(op),
defined(false),
mHasPrototypeDeclaration(false),
......@@ -379,13 +379,13 @@ class TFunction : public TSymbol
typedef TVector<const TVariable *> TParamVector;
TParamVector *mParametersVector;
const TVariable *const *mParameters;
size_t mParamCount;
const TType *const returnType;
mutable ImmutableString mMangledName;
const TOperator mOp; // Only set for built-ins
bool defined;
bool mHasPrototypeDeclaration;
bool mKnownToNotHaveSideEffects;
size_t mParamCount : 16;
const TOperator mOp : 8; // Only set for built-ins
bool defined : 1;
bool mHasPrototypeDeclaration : 1;
bool mKnownToNotHaveSideEffects : 1;
};
} // 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