P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
P4::RemoveUnusedDeclarations Class Reference

Removes unused declarations. More...

Inheritance diagram for P4::RemoveUnusedDeclarations:

Public Member Functions

cstring ifSystemFile (const IR::Node *node)
 
Visitor::profile_t init_apply (const IR::Node *root) override
 
const IR::Node * preorder (IR::Declaration *decl) override
 
const IR::Node * preorder (IR::Declaration_Instance *decl) override
 
const IR::Node * preorder (IR::Declaration_MatchKind *decl) override
 
const IR::Node * preorder (IR::Declaration_Variable *decl) override
 
const IR::Node * preorder (IR::Method *decl) override
 
const IR::Node * preorder (IR::NamedExpression *ne) override
 
const IR::Node * preorder (IR::P4Control *cont) override
 
const IR::Node * preorder (IR::P4Parser *cont) override
 
const IR::Node * preorder (IR::P4Table *cont) override
 
const IR::Node * preorder (IR::Parameter *param) override
 
const IR::Node * preorder (IR::ParserState *state) override
 
const IR::Node * preorder (IR::Type_Declaration *decl) override
 
const IR::Node * preorder (IR::Type_Enum *type) override
 
const IR::Node * preorder (IR::Type_Error *type) override
 
const IR::Node * preorder (IR::Type_Extern *type) override
 
const IR::Node * preorder (IR::Type_Method *type) override
 
const IR::Node * preorder (IR::Type_SerEnum *type) override
 
const IR::Node * preorder (IR::Type_StructLike *type) override
 
const IR::Node * preorder (IR::Type_Var *p) override
 

Protected Member Functions

 RemoveUnusedDeclarations (const ReferenceMap *refMap, bool warn)
 

Friends

class RemoveUnusedPolicy
 

Detailed Description

Removes unused declarations.

The following kinds of nodes are not removed even if they are unreferenced:

  • IR::Declaration_MatchKind
  • IR::Parameter
  • IR::Type_Error
  • IR::Type_Extern
  • IR::Type_Method
  • IR::Type_StructLike
  • IR::TypeParameters
  • IR::Method if declared in system headers

Additionally, IR::Declaration_Instance nodes for extern instances are not removed but still trigger warnings.

If @warned is non-null, unused IR::P4Table and IR::Declaration_Instance nodes are stored in @warned if they are unused and removed by this pass. A compilation warning is emitted when a new node is added to @warned, preventing duplicate warnings per node.

Precondition
Requires an up-to-date ReferenceMap.