DeadCodeEliminationPass.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * Copyright (c) 2023, Dan Klishch <danilklishch@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include "Compiler/EnableGraphPointers.h"
  8. #include "Compiler/GenericASTPass.h"
  9. #include "Compiler/StronglyConnectedComponents.h"
  10. namespace JSSpecCompiler {
  11. class DeadCodeEliminationPass
  12. : public IntraproceduralCompilerPass
  13. , private RecursiveASTVisitor
  14. , private EnableGraphPointers<DeadCodeEliminationPass, SSAVariableDeclarationRef> {
  15. public:
  16. inline static constexpr StringView name = "dce"sv;
  17. using IntraproceduralCompilerPass::IntraproceduralCompilerPass;
  18. protected:
  19. void process_function() override;
  20. private:
  21. friend EnableGraphPointers;
  22. static Vertex as_vertex(Variable* variable);
  23. RecursionDecision on_entry(Tree tree) override;
  24. void on_leave(Tree tree) override;
  25. void remove_unused_phi_nodes();
  26. struct NodeData {
  27. Vector<Vertex> outgoing_edges;
  28. Vector<Vertex> incoming_edges;
  29. bool is_referenced = false;
  30. };
  31. Vector<NodeData> m_nodes;
  32. };
  33. }