P4C
The P4 Compiler
|
Removes unused declarations. More...
#include <unusedDeclarations.h>
Public Member Functions | |
Visitor::profile_t | init_apply (const IR::Node *root) override |
virtual const IR::Node * | postorder (IR::Node *n) |
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 |
virtual const IR::Node * | preorder (IR::Node *n) |
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 |
Public Member Functions inherited from P4::Transform | |
const IR::Node * | apply_visitor (const IR::Node *, const char *name=0) override |
profile_t | init_apply (const IR::Node *root) override |
virtual void | loop_revisit (const IR::Node *) |
void | prune () |
virtual void | revisit (const IR::Node *, const IR::Node *) |
void | revisit_visited () |
bool | visit_in_progress (const IR::Node *) const |
void | visitAgain () const override |
void | visitOnce () const override |
Public Member Functions inherited from P4::Visitor | |
virtual bool | check_global (cstring) |
virtual void | clear_globals () |
virtual Visitor * | clone () const |
virtual ControlFlowVisitor * | controlFlowVisitor () |
virtual void | end_apply () |
virtual void | end_apply (const IR::Node *root) |
virtual void | erase_global (cstring) |
template<class T > | |
const T * | findContext () const |
template<class T > | |
const T * | findContext (const Context *&c) const |
template<class T > | |
const T * | findOrigCtxt () const |
template<class T > | |
const T * | findOrigCtxt (const Context *&c) const |
virtual Visitor & | flow_clone () |
virtual void | flow_merge (Visitor &) |
virtual bool | flow_merge_closure (Visitor &) |
virtual void | flow_merge_global_from (cstring) |
virtual void | flow_merge_global_to (cstring) |
const Context * | getChildContext () const |
int | getChildrenVisited () const |
const Context * | getContext () const |
int | getContextDepth () const |
const IR::Node * | getCurrentNode () const |
template<class T > | |
const T * | getCurrentNode () const |
const IR::Node * | getOriginal () const |
template<class T > | |
const T * | getOriginal () const |
template<class T > | |
const T * | getParent () const |
virtual bool | has_flow_joins () const |
profile_t | init_apply (const IR::Node *root, const Context *parent_context) |
bool | isInContext (const IR::Node *n) const |
virtual const char * | name () const |
template<class T > | |
void | parallel_visit (const IR::Vector< T > &v, const char *name, int cidx) |
template<class T > | |
void | parallel_visit (const IR::Vector< T > &v, const char *name=0) |
template<class T > | |
void | parallel_visit (IR::Vector< T > &v, const char *name, int cidx) |
template<class T > | |
void | parallel_visit (IR::Vector< T > &v, const char *name=0) |
void | print_context () const |
const Visitor & | setCalledBy (const Visitor *visitor) |
void | setName (const char *name) |
void | visit (const IR::Node &n, const char *name, int cidx) |
void | visit (const IR::Node &n, const char *name=0) |
void | visit (const IR::Node *&n, const char *name, int cidx) |
void | visit (const IR::Node *&n, const char *name=0) |
void | visit (const IR::Node *const &n, const char *name, int cidx) |
void | visit (const IR::Node *const &n, const char *name=0) |
void | visit (IR::Node &n, const char *name, int cidx) |
void | visit (IR::Node &n, const char *name=0) |
void | visit (IR::Node *&, const char *=0, int=0) |
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_pointer_v<T>>, class... Args> | |
void | warn (const int kind, const char *format, const T &node, Args &&...args) |
The const ref variant of the above. | |
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T>>, class... Args> | |
void | warn (const int kind, const char *format, const T *node, Args &&...args) |
bool | warning_enabled (int warning_kind) const |
Protected Member Functions | |
RemoveUnusedDeclarations (const UsedDeclSet &used, bool warn) | |
bool | giveWarning (const IR::Node *node) |
const IR::Node * | process (const IR::IDeclaration *decl) |
const IR::Node * | warnIfUnused (const IR::Node *node) |
Protected Member Functions inherited from P4::Transform | |
const IR::Node * | transform_child (const IR::Node *child) |
Protected Member Functions inherited from P4::Visitor | |
virtual void | init_join_flows (const IR::Node *) |
virtual bool | join_flows (const IR::Node *) |
virtual void | post_join_flows (const IR::Node *, const IR::Node *) |
void | visit_children (const IR::Node *, std::function< void()> fn) |
Protected Attributes | |
const UsedDeclSet & | used |
std::set< const IR::Node * > * | warned |
Protected Attributes inherited from P4::Transform | |
bool | forceClone = false |
Protected Attributes inherited from P4::Visitor | |
bool | dontForwardChildrenBeforePreorder = false |
bool | joinFlows = false |
bool | visitDagOnce = true |
Friends | |
class | RemoveUnusedPolicy |
Additional Inherited Members | |
Public Types inherited from P4::Visitor | |
typedef Visitor_Context | Context |
Static Public Member Functions inherited from P4::Visitor | |
static cstring | demangle (const char *) |
static bool | warning_enabled (const Visitor *visitor, int warning_kind) |
Public Attributes inherited from P4::Visitor | |
const Visitor * | called_by = nullptr |
cstring | internalName |
SplitFlowVisit_base *& | split_link |
SplitFlowVisit_base * | split_link_mem = nullptr |
Removes unused declarations.
The following kinds of nodes are not removed even if they are unreferenced:
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.
|
protected |
Stores @node in @warned if:
|
overridevirtual |
Reimplemented from P4::Visitor.
Reimplemented from P4::Transform.
Reimplemented from P4::Transform.
|
protected |
If not null, logs the following unused elements in @warned:
Unused extern instances are not removed but may still trigger warnings. The @warned set keeps track of warnings emitted in previous iterations to avoid emitting duplicate warnings.