31 absl::flat_hash_set<const IR::IDeclaration *, Util::Hash> usedDecls;
34 bool setUsed(
const IR::IDeclaration *decl) {
return usedDecls.emplace(decl).second; }
36 [[nodiscard]]
auto begin()
const {
return usedDecls.begin(); }
38 [[nodiscard]]
auto end()
const {
return usedDecls.end(); }
40 void clear() { usedDecls.clear(); }
42 void dbprint(std::ostream &cout)
const override;
100class RemoveUnusedDeclarations :
public Transform, ResolutionContext {
126 friend class RemoveUnusedPolicy;
127 RemoveUnusedDeclarations(
const UsedDeclSet &used,
bool warn)
128 : used(used),
warned(warn ? new
std::set<const
IR::Node *> : nullptr) {
129 setName(
"RemoveUnusedDeclarations");
133 using Transform::init_apply;
134 using Transform::postorder;
135 using Transform::preorder;
139 const IR::Node *preorder(IR::P4Control *cont)
override;
140 const IR::Node *preorder(IR::P4Parser *cont)
override;
141 const IR::Node *preorder(IR::P4Table *cont)
override;
142 const IR::Node *preorder(IR::ParserState *state)
override;
143 const IR::Node *preorder(IR::Type_Enum *type)
override;
144 const IR::Node *preorder(IR::Type_SerEnum *type)
override;
146 const IR::Node *preorder(IR::Declaration_Instance *decl)
override;
147 const IR::Node *preorder(IR::Method *decl)
override;
150 const IR::Node *preorder(IR::Type_Error *type)
override {
154 const IR::Node *preorder(IR::Declaration_MatchKind *decl)
override {
158 const IR::Node *preorder(IR::Type_StructLike *type)
override {
159 visit(type->typeParameters);
163 const IR::Node *preorder(IR::Type_Extern *type)
override {
164 visit(type->typeParameters);
168 const IR::Node *preorder(IR::Type_Method *type)
override {
169 visit(type->typeParameters);
173 const IR::Node *preorder(IR::Parameter *param)
override;
174 const IR::Node *preorder(IR::NamedExpression *ne)
override {
return ne; }
175 const IR::Node *preorder(IR::Type_Var *p)
override {
177 return warnIfUnused(p);
180 const IR::Node *preorder(IR::Declaration_Variable *decl)
override;
181 const IR::Node *preorder(IR::Declaration *decl)
override {
return process(decl); }
182 const IR::Node *preorder(IR::Type_Declaration *decl)
override {
return process(decl); }
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24