sammccall created this revision. sammccall added a reviewer: ilya-biryukov. Herald added subscribers: usaxena95, kadircet. Herald added a project: All. sammccall requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
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) Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D124250 Files: clang/lib/Serialization/ASTReaderStmt.cpp clang/lib/Serialization/ASTWriterDecl.cpp clang/lib/Serialization/ASTWriterStmt.cpp
Index: clang/lib/Serialization/ASTWriterStmt.cpp =================================================================== --- clang/lib/Serialization/ASTWriterStmt.cpp +++ clang/lib/Serialization/ASTWriterStmt.cpp @@ -543,11 +543,7 @@ 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()); } Index: clang/lib/Serialization/ASTWriterDecl.cpp =================================================================== --- clang/lib/Serialization/ASTWriterDecl.cpp +++ clang/lib/Serialization/ASTWriterDecl.cpp @@ -2294,11 +2294,7 @@ //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, 5)); // Dependence Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind //DeclRefExpr @@ -2318,11 +2314,7 @@ //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, 5)); // Dependence Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind //Integer Literal @@ -2337,11 +2329,7 @@ //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, 5)); // Dependence Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind //Character Literal @@ -2356,11 +2344,7 @@ // 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, 5)); // Dependence Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetValueKind Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3)); //GetObjectKind // CastExpr Index: clang/lib/Serialization/ASTReaderStmt.cpp =================================================================== --- clang/lib/Serialization/ASTReaderStmt.cpp +++ clang/lib/Serialization/ASTReaderStmt.cpp @@ -107,8 +107,7 @@ /// 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::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 &&
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits