Files
revng-revng/lib/RestructureCFGPass/RegionCFGTree.cpp
T
Andrea Gussoni 86f35b6d93 Various Untangle improvements
Introduced various untangle algorithm improvements:
- Improve untangle edge reorganization: improve the criterion used for
  reorganizing the edges between the old postdominator and the cloned
  one, after an inline procedure is attempted during the untangle.
- Untangle counter: introduce two new counters which take into account
  the number of times the untangle procedure is attempted and the actual
  times it is performed.
- Disable not dominated restriction: disable the criterion which
  restricts the untangle opportunities if we do not dominate entirely
  at least one of the two branches. This has likely broken the
  assumption that the postdominators of nodes do not changes after each
  untangle step has been carried out.
- Change dominance criterion: the dominance of the nodes belonging to
  the `then` and `else` nodes is now checked not with respect to the
  conditional node, but to the `then` and `else` edges of the conditional
  node.
- Untangle eager inlining: now, when the untangle procedure finds a
  suitable candidate for the inlining, proceed the complete inlining
  starting from the selected branch. By default new clones of all the
  nodes till the exit are created and attached to the branch, while the
  original nodes are detached. An additional pass which removes eventual
  dandling nodes (nodes which are not reachable from the entry node of
  the graph) is performed after the eager inlining. This means that if
  no other incoming edges to this group of nodes is present the original
  nodes will be purged.
  The post dominator now is updated during the inlining analysis, and
  the paths conducting to inlined exits are not taken into account for
  the post dominator computation.
- Enable untangle for mixed branches: perform the untangle even if the
  `then` and `else` branches share nodes. This was not feasible before
  because without the eager inlining we couldn't decide which edge to
  attach to the new postdominator clone. This problem is not present
  anymore, so we can handle any kind of topology in the untangle.
- Improved also the analysis information serialized by the decompiler.
2020-01-13 12:13:42 +01:00

18 lines
499 B
C++

/// \file RegionCFGTree.cpp
/// \brief FunctionPass that applies the comb to the RegionCFG of a function
//
// This file is distributed under the MIT License. See LICENSE.md for details.
//
// Local libraries includes
#include "revng-c/RestructureCFGPass/RegionCFGTreeImpl.h"
// Explicit instantation for the `RegionCFG` template class.
template class RegionCFG<llvm::BasicBlock *>;
unsigned DuplicationCounter = 0;
unsigned UntangleTentativeCounter = 0;
unsigned UntanglePerformedCounter = 0;