forked from OSchip/llvm-project
[Serialization] write expr dependence bits as a single integer
When exprs are written unabbreviated: - these were encoded as 5 x vbr6 = 30 bits - now they fit exactly into a one-chunk vbr = 6 bits clangd --check=clangd/AST.cpp reports ~1% reduction in PCH size (42826720->42474460) Differential Revision: https://reviews.llvm.org/D124250
This commit is contained in:
parent
4c807f2f57
commit
0cd5cd19af
|
@ -107,8 +107,7 @@ namespace clang {
|
|||
|
||||
/// The number of record fields required for the Expr class
|
||||
/// itself.
|
||||
static const unsigned NumExprFields =
|
||||
NumStmtFields + llvm::BitWidth<ExprDependence> + 3;
|
||||
static const unsigned NumExprFields = NumStmtFields + 4;
|
||||
|
||||
/// Read and initialize a ExplicitTemplateArgumentList structure.
|
||||
void ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args,
|
||||
|
@ -521,26 +520,7 @@ void ASTStmtReader::VisitCapturedStmt(CapturedStmt *S) {
|
|||
void ASTStmtReader::VisitExpr(Expr *E) {
|
||||
VisitStmt(E);
|
||||
E->setType(Record.readType());
|
||||
|
||||
// FIXME: write and read all DependentFlags with a single call.
|
||||
bool TypeDependent = Record.readInt();
|
||||
bool ValueDependent = Record.readInt();
|
||||
bool InstantiationDependent = Record.readInt();
|
||||
bool ContainsUnexpandedTemplateParameters = Record.readInt();
|
||||
bool ContainsErrors = Record.readInt();
|
||||
auto Deps = ExprDependence::None;
|
||||
if (TypeDependent)
|
||||
Deps |= ExprDependence::Type;
|
||||
if (ValueDependent)
|
||||
Deps |= ExprDependence::Value;
|
||||
if (InstantiationDependent)
|
||||
Deps |= ExprDependence::Instantiation;
|
||||
if (ContainsUnexpandedTemplateParameters)
|
||||
Deps |= ExprDependence::UnexpandedPack;
|
||||
if (ContainsErrors)
|
||||
Deps |= ExprDependence::Error;
|
||||
E->setDependence(Deps);
|
||||
|
||||
E->setDependence(static_cast<ExprDependence>(Record.readInt()));
|
||||
E->setValueKind(static_cast<ExprValueKind>(Record.readInt()));
|
||||
E->setObjectKind(static_cast<ExprObjectKind>(Record.readInt()));
|
||||
assert(Record.getIdx() == NumExprFields &&
|
||||
|
|
|
@ -2288,17 +2288,14 @@ void ASTWriter::WriteDeclAbbrevs() {
|
|||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
|
||||
DeclCXXMethodAbbrev = Stream.EmitAbbrev(std::move(Abv));
|
||||
|
||||
unsigned ExprDependenceBits = llvm::BitWidth<ExprDependence>;
|
||||
// Abbreviation for EXPR_DECL_REF
|
||||
Abv = std::make_shared<BitCodeAbbrev>();
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::EXPR_DECL_REF));
|
||||
//Stmt
|
||||
// Expr
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //TypeDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ValueDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //InstantiationDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //UnexpandedParamPack
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ContainsErrors
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind
|
||||
//DeclRefExpr
|
||||
|
@ -2318,11 +2315,7 @@ void ASTWriter::WriteDeclAbbrevs() {
|
|||
//Stmt
|
||||
// Expr
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //TypeDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ValueDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //InstantiationDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //UnexpandedParamPack
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ContainsErrors
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind
|
||||
//Integer Literal
|
||||
|
@ -2337,11 +2330,7 @@ void ASTWriter::WriteDeclAbbrevs() {
|
|||
//Stmt
|
||||
// Expr
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //TypeDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ValueDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //InstantiationDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //UnexpandedParamPack
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ContainsErrors
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind
|
||||
//Character Literal
|
||||
|
@ -2356,11 +2345,7 @@ void ASTWriter::WriteDeclAbbrevs() {
|
|||
// Stmt
|
||||
// Expr
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Type
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //TypeDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ValueDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //InstantiationDependent
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //UnexpandedParamPack
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //ContainsErrors
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, ExprDependenceBits));
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind
|
||||
Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind
|
||||
// CastExpr
|
||||
|
|
|
@ -543,11 +543,7 @@ void ASTStmtWriter::VisitCapturedStmt(CapturedStmt *S) {
|
|||
void ASTStmtWriter::VisitExpr(Expr *E) {
|
||||
VisitStmt(E);
|
||||
Record.AddTypeRef(E->getType());
|
||||
Record.push_back(E->isTypeDependent());
|
||||
Record.push_back(E->isValueDependent());
|
||||
Record.push_back(E->isInstantiationDependent());
|
||||
Record.push_back(E->containsUnexpandedParameterPack());
|
||||
Record.push_back(E->containsErrors());
|
||||
Record.push_back(E->getDependence());
|
||||
Record.push_back(E->getValueKind());
|
||||
Record.push_back(E->getObjectKind());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue