P4C
The P4 Compiler
Loading...
Searching...
No Matches
metricsPassManager.h
1/*
2Adds code metric collection passes to the frontend pipeline,
3based on the "selectedMetrics" option. If any metrics were
4selected by the user, the pass which exports them is added
5as well.
6*/
7
8#ifndef FRONTENDS_P4_METRICS_METRICSPASSMANAGER_H_
9#define FRONTENDS_P4_METRICS_METRICSPASSMANAGER_H_
10
11#include <filesystem>
12
13#include "frontends/common/options.h"
14#include "frontends/p4/metrics/cyclomaticComplexity.h"
15#include "frontends/p4/metrics/exportMetrics.h"
16#include "frontends/p4/metrics/externalObjectsMetric.h"
17#include "frontends/p4/metrics/halsteadMetrics.h"
18#include "frontends/p4/metrics/headerMetrics.h"
19#include "frontends/p4/metrics/headerPacketMetrics.h"
20#include "frontends/p4/metrics/inlinedActionsMetric.h"
21#include "frontends/p4/metrics/linesOfCodeMetric.h"
22#include "frontends/p4/metrics/matchActionTableMetrics.h"
23#include "frontends/p4/metrics/metricsStructure.h"
24#include "frontends/p4/metrics/nestingDepthMetric.h"
25#include "frontends/p4/metrics/parserMetrics.h"
26#include "frontends/p4/metrics/unusedCodeMetric.h"
27#include "ir/ir.h"
28
29using namespace P4::literals;
30
31namespace P4 {
32
33class PassManager;
34
35class MetricsPassManager {
36 private:
37 const std::set<cstring> &selectedMetrics;
38 TypeMap *typeMap;
39 Metrics &metrics;
40 std::filesystem::path fileName;
41
42 public:
43 MetricsPassManager(const CompilerOptions &options, TypeMap *typeMap, Metrics &metricsRef)
44 : selectedMetrics(options.selectedMetrics),
45 typeMap(typeMap),
46 metrics(metricsRef),
47 fileName(options.file) {}
48
49 Metrics &getMetrics() { return metrics; }
50 void addInlined(PassManager &pm);
51 void addUnusedCode(PassManager &pm, bool isBefore);
52 void addMetricPasses(PassManager &pm);
53};
54
55} // namespace P4
56
57#endif /* FRONTENDS_P4_METRICS_METRICSPASSMANAGER_H_ */
Definition frontends/common/options.h:31
Definition ir/pass_manager.h:40
Definition typeMap.h:41
Definition cstring.h:80
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24
Definition metricsStructure.h:119