13#include "llvm/Support/Error.h"
14#include "llvm/Support/JSON.h"
15#include "llvm/Support/Registry.h"
35 static AnalysisName analysisName() {
36 return AnalysisName(
"TagsPairsAnalysisResult");
39 int UniqueTagCount = 0;
41 int TotalPairCount = 0;
42 int MaxPairsPerEntity = 0;
45json::Object serializeTagsPairsAnalysisResult(
const TagsPairsAnalysisResult &R,
47 return json::Object{{
"unique_tag_count",
R.UniqueTagCount},
48 {
"entity_count",
R.EntityCount},
49 {
"total_pair_count",
R.TotalPairCount},
50 {
"max_pairs_per_entity",
R.MaxPairsPerEntity}};
54deserializeTagsPairsAnalysisResult(
const json::Object &Obj,
56 auto R = std::make_unique<TagsPairsAnalysisResult>();
58 auto UTC = Obj.getInteger(
"unique_tag_count");
60 return createStringError(inconvertibleErrorCode(),
61 "missing or invalid 'unique_tag_count'");
63 R->UniqueTagCount =
static_cast<int>(*UTC);
65 auto EC = Obj.getInteger(
"entity_count");
67 return createStringError(inconvertibleErrorCode(),
68 "missing or invalid 'entity_count'");
70 R->EntityCount =
static_cast<int>(*EC);
72 auto TPC = Obj.getInteger(
"total_pair_count");
74 return createStringError(inconvertibleErrorCode(),
75 "missing or invalid 'total_pair_count'");
77 R->TotalPairCount =
static_cast<int>(*TPC);
79 auto MPE = Obj.getInteger(
"max_pairs_per_entity");
81 return createStringError(inconvertibleErrorCode(),
82 "missing or invalid 'max_pairs_per_entity'");
84 R->MaxPairsPerEntity =
static_cast<int>(*MPE);
89JSONFormat::AnalysisResultRegistry::Add<TagsPairsAnalysisResult>
90 RegisterSummaryResultForJSON(serializeTagsPairsAnalysisResult,
91 deserializeTagsPairsAnalysisResult);
104class TagsPairsAnalysis final
106 PairsAnalysisResult> {
108 using ResultType = TagsPairsAnalysisResult;
110 llvm::Error
initialize(
const TagsAnalysisResult &Tags,
111 const PairsAnalysisResult &Pairs)
override {
112 result().UniqueTagCount =
static_cast<int>(Tags.
Tags.size());
113 result().EntityCount =
static_cast<int>(Pairs.
PairCounts.size());
117 for (
const auto &[Id, Count] : Pairs.
PairCounts) {
122 result().TotalPairCount = Total;
123 result().MaxPairsPerEntity =
Max;
125 return llvm::Error::success();
128 llvm::Expected<bool>
step()
override {
134 RegisterTagsPairsAnalysis(
"Aggregate tag and pair statistics");
Base class for whole-program analysis results.
Typed intermediate that concrete derived analyses inherit from.
void initialize(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema)
Diagnostic wrappers for TextAPI types for error reporting.
float __ovld __cnfn step(float, float)
Returns 0.0 if x < edge, otherwise it returns 1.0.
Registers AnalysisT with the unified registry.
std::vector< std::pair< clang::ssaf::EntityId, int > > PairCounts