Author: Aviral Goel Date: 2026-01-29T09:19:07-08:00 New Revision: 69c0f929e06535effb368fa237eabafa51f50158
URL: https://github.com/llvm/llvm-project/commit/69c0f929e06535effb368fa237eabafa51f50158 DIFF: https://github.com/llvm/llvm-project/commit/69c0f929e06535effb368fa237eabafa51f50158.diff LOG: [SSAF] Add SerializationFormat Interface (#177719) To support multiple serialization formats in SSAF this PR adds a common serialization format interface. We will separately implement a serialization format registry similar to [this](https://github.com/llvm/llvm-project/pull/173290) PR, followed by a JSON-based serialization format. Added: clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp Modified: clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h clang/lib/Analysis/Scalable/CMakeLists.txt Removed: ################################################################################ diff --git a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h new file mode 100644 index 0000000000000..a53a315f461df --- /dev/null +++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h @@ -0,0 +1,61 @@ +//===- SerializationFormat.h ------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Abstract SerializationFormat interface for reading and writing +// TUSummary and LinkUnitResolution data. +// +//===----------------------------------------------------------------------===// + +#ifndef CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H +#define CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H + +#include "clang/Analysis/Scalable/Model/BuildNamespace.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/ADT/StringRef.h" +#include <vector> + +namespace clang::ssaf { + +class EntityId; +class EntityIdTable; +class EntityName; +class TUSummary; +class TUSummaryData; + +/// Abstract base class for serialization formats. +class SerializationFormat { +protected: + // Helpers providing access to implementation details of basic data structures + // for efficient serialization/deserialization. + static EntityIdTable &getIdTableForDeserialization(TUSummary &S); + static BuildNamespace &getTUNamespaceForDeserialization(TUSummary &S); + static const EntityIdTable &getIdTable(const TUSummary &S); + static const BuildNamespace &getTUNamespace(const TUSummary &S); + + static BuildNamespaceKind getBuildNamespaceKind(const BuildNamespace &BN); + static llvm::StringRef getBuildNamespaceName(const BuildNamespace &BN); + static const std::vector<BuildNamespace> & + getNestedBuildNamespaces(const NestedBuildNamespace &NBN); + + static llvm::StringRef getEntityNameUSR(const EntityName &EN); + static const llvm::SmallString<16> &getEntityNameSuffix(const EntityName &EN); + static const NestedBuildNamespace & + getEntityNameNamespace(const EntityName &EN); + +public: + virtual ~SerializationFormat() = default; + + virtual TUSummary readTUSummary(llvm::StringRef Path) = 0; + + virtual void writeTUSummary(const TUSummary &Summary, + llvm::StringRef OutputDir) = 0; +}; + +} // namespace clang::ssaf + +#endif // CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H diff --git a/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h b/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h index 928d285fa764e..4af1c70e1a488 100644 --- a/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h +++ b/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h @@ -30,6 +30,8 @@ class TUSummary { public: TUSummary(BuildNamespace TUNamespace) : TUNamespace(std::move(TUNamespace)) {} + + friend class SerializationFormat; }; } // namespace clang::ssaf diff --git a/clang/lib/Analysis/Scalable/CMakeLists.txt b/clang/lib/Analysis/Scalable/CMakeLists.txt index 566edca552388..36365b1fb87e1 100644 --- a/clang/lib/Analysis/Scalable/CMakeLists.txt +++ b/clang/lib/Analysis/Scalable/CMakeLists.txt @@ -7,6 +7,7 @@ add_clang_library(clangAnalysisScalable Model/BuildNamespace.cpp Model/EntityIdTable.cpp Model/EntityName.cpp + Serialization/SerializationFormat.cpp TUSummary/ExtractorRegistry.cpp LINK_LIBS diff --git a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp new file mode 100644 index 0000000000000..ee155d22afa9b --- /dev/null +++ b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp @@ -0,0 +1,61 @@ +//===- SerializationFormat.cpp ----------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "clang/Analysis/Scalable/Serialization/SerializationFormat.h" +#include "clang/Analysis/Scalable/Model/BuildNamespace.h" +#include "clang/Analysis/Scalable/Model/EntityId.h" +#include "clang/Analysis/Scalable/Model/EntityName.h" +#include "clang/Analysis/Scalable/TUSummary/TUSummary.h" + +using namespace clang::ssaf; + +EntityIdTable &SerializationFormat::getIdTableForDeserialization(TUSummary &S) { + return S.IdTable; +} + +BuildNamespace & +SerializationFormat::getTUNamespaceForDeserialization(TUSummary &S) { + return S.TUNamespace; +} + +const EntityIdTable &SerializationFormat::getIdTable(const TUSummary &S) { + return S.IdTable; +} + +const BuildNamespace &SerializationFormat::getTUNamespace(const TUSummary &S) { + return S.TUNamespace; +} + +BuildNamespaceKind +SerializationFormat::getBuildNamespaceKind(const BuildNamespace &BN) { + return BN.Kind; +} + +llvm::StringRef +SerializationFormat::getBuildNamespaceName(const BuildNamespace &BN) { + return BN.Name; +} + +const std::vector<BuildNamespace> & +SerializationFormat::getNestedBuildNamespaces(const NestedBuildNamespace &NBN) { + return NBN.Namespaces; +} + +llvm::StringRef SerializationFormat::getEntityNameUSR(const EntityName &EN) { + return EN.USR; +} + +const llvm::SmallString<16> & +SerializationFormat::getEntityNameSuffix(const EntityName &EN) { + return EN.Suffix; +} + +const NestedBuildNamespace & +SerializationFormat::getEntityNameNamespace(const EntityName &EN) { + return EN.Namespace; +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
