retdec
Classes | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
retdec::llvmir2hll::NonRecursiveCFGBuilder Class Reference

A non-recursive creator of control-flow graphs (CFGs) from functions. More...

#include <non_recursive_cfg_builder.h>

Inheritance diagram for retdec::llvmir2hll::NonRecursiveCFGBuilder:
Inheritance graph
[legend]
Collaboration diagram for retdec::llvmir2hll::NonRecursiveCFGBuilder:
Collaboration graph
[legend]

Classes

struct  EdgeToAdd
 Structure for edges that will be added to CFG. More...
 
struct  Job
 Structure for jobs that have to be performed. More...
 

Public Member Functions

virtual void buildCFG () override
 Builds cfg. More...
 
- Public Member Functions inherited from retdec::llvmir2hll::CFGBuilder
ShPtr< CFGgetCFG (ShPtr< Function > func)
 Returns a CFG of the given function func. More...
 

Static Public Member Functions

static ShPtr< NonRecursiveCFGBuildercreate ()
 Creates and returns a new NonRecursiveCFGBuilder. More...
 

Private Types

using JobQueue = std::queue< Job >
 Queue of jobs. More...
 
using EdgesToAdd = std::vector< EdgeToAdd >
 Vector of edges. More...
 
using StmtNodeMapping = std::unordered_map< ShPtr< Statement >, ShPtr< CFG::Node > >
 Mapping of a statement into its corresponding node. More...
 

Private Member Functions

 NonRecursiveCFGBuilder ()
 Constructs a new builder. More...
 
void addEdgeFromCurrNodeToSuccNode (ShPtr< Statement > stmt, EdgesToAdd &edgesToAdd, ShPtr< Expression > edgeCond=nullptr)
 Finds successor and add edges to edgesToAdd for stmt. More...
 
void addEdgeFromVector (const EdgeToAdd &edge)
 Add edge to CFG. More...
 
void addJobToQueue (ShPtr< CFG::Node > pred, ShPtr< Expression > cond, ShPtr< Statement > stmt)
 Creates new job and add new job to queue of jobs. More...
 
void addEdgesFromVector (const EdgesToAdd &edgesToAdd)
 Adds edges from edgesToAdd. More...
 
void addStatement (ShPtr< Statement > stmt)
 Adds a statement to the current node and to map of statements to node, and adds a forward or backward edge from the current node to the successor/parent of stmt. More...
 
void addStmtToNodeAndToMapOfStmtToNode (ShPtr< Statement > stmt)
 Adds stmt to currNode and to stmtNodeMapping. More...
 
void resolveGotoTargets (ShPtr< Statement > stmt)
 Resolve goto targets. More...
 
void createAndAddNode ()
 Creates new node and set it to current node. More...
 
void createEdgesToBeAdded ()
 Creates connecting edges for all nodes. More...
 
void createEntryNode ()
 Creates entry node. More...
 
void createExitNode ()
 Creates exit node. More...
 
void createNewNodeAndConnectWithPredNode (ShPtr< Statement > stmt)
 Creates new node and add it. Also save edge from this new node to previous node. More...
 
void createNewNodeForIfSwitchForWhileStmtAndAddStmtToNode (ShPtr< Statement > stmt)
 Creates new node if is needed for if, while, for, switch statements and also add statement to node. More...
 
void createNewNodeIfStmtHasSucc (ShPtr< Statement > stmt)
 Creates a new node for stmt if it has a successor. More...
 
void createOtherNodes ()
 Creates other nodes. More...
 
void doJob (const Job &job)
 Performs the given job. More...
 
void doJobs ()
 Tops and pop one job from queue and starts doing of job. More...
 
void initializeCFGBuild ()
 Initializes all the needed data so the CFG can be built. More...
 
void purgeCFG ()
 Purges the CFG by removing useless nodes. More...
 
void validateCFG ()
 Validates the created CFG. More...
 
void visitForOrUForLoop (ShPtr< Statement > loop, ShPtr< Statement > body)
 Implementation of visit() for for loops. More...
 
Visitor Interface
virtual void visit (ShPtr< AssignStmt > stmt) override
 
virtual void visit (ShPtr< BreakStmt > stmt) override
 
virtual void visit (ShPtr< CallStmt > stmt) override
 
virtual void visit (ShPtr< ContinueStmt > stmt) override
 
virtual void visit (ShPtr< EmptyStmt > stmt) override
 
virtual void visit (ShPtr< ForLoopStmt > stmt) override
 
virtual void visit (ShPtr< UForLoopStmt > stmt) override
 
virtual void visit (ShPtr< GotoStmt > stmt) override
 
virtual void visit (ShPtr< IfStmt > stmt) override
 
virtual void visit (ShPtr< ReturnStmt > stmt) override
 
virtual void visit (ShPtr< SwitchStmt > stmt) override
 
virtual void visit (ShPtr< UnreachableStmt > stmt) override
 
virtual void visit (ShPtr< VarDefStmt > stmt) override
 
virtual void visit (ShPtr< WhileLoopStmt > stmt) override
 
virtual void visit (ShPtr< GlobalVarDef > varDef) override
 
virtual void visit (ShPtr< Function > func) override
 
virtual void visit (ShPtr< AssignStmt > stmt) override
 
virtual void visit (ShPtr< BreakStmt > stmt) override
 
virtual void visit (ShPtr< CallStmt > stmt) override
 
virtual void visit (ShPtr< ContinueStmt > stmt) override
 
virtual void visit (ShPtr< EmptyStmt > stmt) override
 
virtual void visit (ShPtr< ForLoopStmt > stmt) override
 
virtual void visit (ShPtr< UForLoopStmt > stmt) override
 
virtual void visit (ShPtr< GotoStmt > stmt) override
 
virtual void visit (ShPtr< IfStmt > stmt) override
 
virtual void visit (ShPtr< ReturnStmt > stmt) override
 
virtual void visit (ShPtr< SwitchStmt > stmt) override
 
virtual void visit (ShPtr< UnreachableStmt > stmt) override
 
virtual void visit (ShPtr< VarDefStmt > stmt) override
 
virtual void visit (ShPtr< WhileLoopStmt > stmt) override
 
virtual void visit (ShPtr< AddOpExpr > expr) override
 
virtual void visit (ShPtr< AddressOpExpr > expr) override
 
virtual void visit (ShPtr< AssignOpExpr > expr) override
 
virtual void visit (ShPtr< AndOpExpr > expr) override
 
virtual void visit (ShPtr< ArrayIndexOpExpr > expr) override
 
virtual void visit (ShPtr< BitAndOpExpr > expr) override
 
virtual void visit (ShPtr< BitOrOpExpr > expr) override
 
virtual void visit (ShPtr< BitShlOpExpr > expr) override
 
virtual void visit (ShPtr< BitShrOpExpr > expr) override
 
virtual void visit (ShPtr< BitXorOpExpr > expr) override
 
virtual void visit (ShPtr< CallExpr > expr) override
 
virtual void visit (ShPtr< CommaOpExpr > expr) override
 
virtual void visit (ShPtr< DerefOpExpr > expr) override
 
virtual void visit (ShPtr< DivOpExpr > expr) override
 
virtual void visit (ShPtr< EqOpExpr > expr) override
 
virtual void visit (ShPtr< GtEqOpExpr > expr) override
 
virtual void visit (ShPtr< GtOpExpr > expr) override
 
virtual void visit (ShPtr< LtEqOpExpr > expr) override
 
virtual void visit (ShPtr< LtOpExpr > expr) override
 
virtual void visit (ShPtr< ModOpExpr > expr) override
 
virtual void visit (ShPtr< MulOpExpr > expr) override
 
virtual void visit (ShPtr< NegOpExpr > expr) override
 
virtual void visit (ShPtr< NeqOpExpr > expr) override
 
virtual void visit (ShPtr< NotOpExpr > expr) override
 
virtual void visit (ShPtr< OrOpExpr > expr) override
 
virtual void visit (ShPtr< StructIndexOpExpr > expr) override
 
virtual void visit (ShPtr< SubOpExpr > expr) override
 
virtual void visit (ShPtr< TernaryOpExpr > expr) override
 
virtual void visit (ShPtr< Variable > var) override
 
virtual void visit (ShPtr< BitCastExpr > expr) override
 
virtual void visit (ShPtr< ExtCastExpr > expr) override
 
virtual void visit (ShPtr< FPToIntCastExpr > expr) override
 
virtual void visit (ShPtr< IntToFPCastExpr > expr) override
 
virtual void visit (ShPtr< IntToPtrCastExpr > expr) override
 
virtual void visit (ShPtr< PtrToIntCastExpr > expr) override
 
virtual void visit (ShPtr< TruncCastExpr > expr) override
 
virtual void visit (ShPtr< ConstArray > constant) override
 
virtual void visit (ShPtr< ConstBool > constant) override
 
virtual void visit (ShPtr< ConstFloat > constant) override
 
virtual void visit (ShPtr< ConstInt > constant) override
 
virtual void visit (ShPtr< ConstNullPointer > constant) override
 
virtual void visit (ShPtr< ConstString > constant) override
 
virtual void visit (ShPtr< ConstStruct > constant) override
 
virtual void visit (ShPtr< ConstSymbol > constant) override
 
virtual void visit (ShPtr< ArrayType > type) override
 
virtual void visit (ShPtr< FloatType > type) override
 
virtual void visit (ShPtr< IntType > type) override
 
virtual void visit (ShPtr< PointerType > type) override
 
virtual void visit (ShPtr< StringType > type) override
 
virtual void visit (ShPtr< StructType > type) override
 
virtual void visit (ShPtr< FunctionType > type) override
 
virtual void visit (ShPtr< VoidType > type) override
 
virtual void visit (ShPtr< UnknownType > type) override
 
- Private Member Functions inherited from retdec::llvmir2hll::VisitorAdapter
virtual void visit (ShPtr< GlobalVarDef > varDef) override
 
virtual void visit (ShPtr< Function > func) override
 
virtual void visit (ShPtr< AddOpExpr > expr) override
 
virtual void visit (ShPtr< AddressOpExpr > expr) override
 
virtual void visit (ShPtr< AssignOpExpr > expr) override
 
virtual void visit (ShPtr< AndOpExpr > expr) override
 
virtual void visit (ShPtr< ArrayIndexOpExpr > expr) override
 
virtual void visit (ShPtr< BitAndOpExpr > expr) override
 
virtual void visit (ShPtr< BitOrOpExpr > expr) override
 
virtual void visit (ShPtr< BitShlOpExpr > expr) override
 
virtual void visit (ShPtr< BitShrOpExpr > expr) override
 
virtual void visit (ShPtr< BitXorOpExpr > expr) override
 
virtual void visit (ShPtr< CallExpr > expr) override
 
virtual void visit (ShPtr< CommaOpExpr > expr) override
 
virtual void visit (ShPtr< DerefOpExpr > expr) override
 
virtual void visit (ShPtr< DivOpExpr > expr) override
 
virtual void visit (ShPtr< EqOpExpr > expr) override
 
virtual void visit (ShPtr< GtEqOpExpr > expr) override
 
virtual void visit (ShPtr< GtOpExpr > expr) override
 
virtual void visit (ShPtr< LtEqOpExpr > expr) override
 
virtual void visit (ShPtr< LtOpExpr > expr) override
 
virtual void visit (ShPtr< ModOpExpr > expr) override
 
virtual void visit (ShPtr< MulOpExpr > expr) override
 
virtual void visit (ShPtr< NegOpExpr > expr) override
 
virtual void visit (ShPtr< NeqOpExpr > expr) override
 
virtual void visit (ShPtr< NotOpExpr > expr) override
 
virtual void visit (ShPtr< OrOpExpr > expr) override
 
virtual void visit (ShPtr< StructIndexOpExpr > expr) override
 
virtual void visit (ShPtr< SubOpExpr > expr) override
 
virtual void visit (ShPtr< TernaryOpExpr > expr) override
 
virtual void visit (ShPtr< Variable > var) override
 
virtual void visit (ShPtr< BitCastExpr > expr) override
 
virtual void visit (ShPtr< ExtCastExpr > expr) override
 
virtual void visit (ShPtr< FPToIntCastExpr > expr) override
 
virtual void visit (ShPtr< IntToFPCastExpr > expr) override
 
virtual void visit (ShPtr< IntToPtrCastExpr > expr) override
 
virtual void visit (ShPtr< PtrToIntCastExpr > expr) override
 
virtual void visit (ShPtr< TruncCastExpr > expr) override
 
virtual void visit (ShPtr< ConstArray > constant) override
 
virtual void visit (ShPtr< ConstBool > constant) override
 
virtual void visit (ShPtr< ConstFloat > constant) override
 
virtual void visit (ShPtr< ConstInt > constant) override
 
virtual void visit (ShPtr< ConstNullPointer > constant) override
 
virtual void visit (ShPtr< ConstString > constant) override
 
virtual void visit (ShPtr< ConstStruct > constant) override
 
virtual void visit (ShPtr< ConstSymbol > constant) override
 
virtual void visit (ShPtr< ArrayType > type) override
 
virtual void visit (ShPtr< FloatType > type) override
 
virtual void visit (ShPtr< IntType > type) override
 
virtual void visit (ShPtr< PointerType > type) override
 
virtual void visit (ShPtr< StringType > type) override
 
virtual void visit (ShPtr< StructType > type) override
 
virtual void visit (ShPtr< FunctionType > type) override
 
virtual void visit (ShPtr< VoidType > type) override
 
virtual void visit (ShPtr< UnknownType > type) override
 
- Private Member Functions inherited from retdec::llvmir2hll::Visitor
virtual ~Visitor ()=default
 
 Visitor ()=default
 

Private Attributes

JobQueue jobQueue
 Queue of all jobs. More...
 
EdgesToAdd edgesToAddFirst
 Vector of saved edges for nodes that will be added first. More...
 
EdgesToAdd edgesToAddLast
 Vector of saved edges that have to be added at the end. More...
 
ShPtr< CFG::NodecurrNode
 Currently generated node. More...
 
StmtNodeMapping emptyStmtToNodeMap
 Mapping of an empty statement to its node. More...
 
bool stopIterNextStmts
 Signalizes if we want to iterate through statements or not. More...
 

Additional Inherited Members

- Protected Member Functions inherited from retdec::llvmir2hll::CFGBuilder
 CFGBuilder ()=default
 
- Protected Attributes inherited from retdec::llvmir2hll::CFGBuilder
ShPtr< CFGcfg
 A CFG that is currently being built. More...
 
ShPtr< Functionfunc
 A function from which the CFG is being built. More...
 

Detailed Description

A non-recursive creator of control-flow graphs (CFGs) from functions.

Member Typedef Documentation

◆ EdgesToAdd

Vector of edges.

◆ JobQueue

Queue of jobs.

◆ StmtNodeMapping

Mapping of a statement into its corresponding node.

Constructor & Destructor Documentation

◆ NonRecursiveCFGBuilder()

retdec::llvmir2hll::NonRecursiveCFGBuilder::NonRecursiveCFGBuilder ( )
private

Constructs a new builder.

Member Function Documentation

◆ addEdgeFromCurrNodeToSuccNode()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::addEdgeFromCurrNodeToSuccNode ( ShPtr< Statement stmt,
EdgesToAdd edgesToAdd,
ShPtr< Expression edgeCond = nullptr 
)
private

Finds successor and add edges to edgesToAdd for stmt.

Parameters
[in]stmtFinds successor for this statement.
[out]edgesToAddPlace to save edge.
[in]edgeCondCondition of edge.

◆ addEdgeFromVector()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::addEdgeFromVector ( const EdgeToAdd edge)
private

Add edge to CFG.

Parameters
[in]edgeEdge to add.

◆ addEdgesFromVector()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::addEdgesFromVector ( const EdgesToAdd edgesToAdd)
private

Adds edges from edgesToAdd.

Parameters
[in]edgesToAddEdges to add.

◆ addJobToQueue()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::addJobToQueue ( ShPtr< CFG::Node pred,
ShPtr< Expression cond,
ShPtr< Statement stmt 
)
private

Creates new job and add new job to queue of jobs.

Parameters
[in]predPredecessor of node where is a stmt.
[in]condCondition for the edge from node where is a stmt and pred node.
[in]stmtFirst statement of new node.

◆ addStatement()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::addStatement ( ShPtr< Statement stmt)
private

Adds a statement to the current node and to map of statements to node, and adds a forward or backward edge from the current node to the successor/parent of stmt.

Parameters
[in]stmtStatement to add.

◆ addStmtToNodeAndToMapOfStmtToNode()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::addStmtToNodeAndToMapOfStmtToNode ( ShPtr< Statement stmt)
private

Adds stmt to currNode and to stmtNodeMapping.

Parameters
[in]stmtStatement to add.

◆ buildCFG()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::buildCFG ( )
overridevirtual

Builds cfg.

When this function is called, cfg and func are correctly initialized.

Implements retdec::llvmir2hll::CFGBuilder.

◆ create()

ShPtr< NonRecursiveCFGBuilder > retdec::llvmir2hll::NonRecursiveCFGBuilder::create ( )
static

Creates and returns a new NonRecursiveCFGBuilder.

◆ createAndAddNode()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createAndAddNode ( )
private

Creates new node and set it to current node.

◆ createEdgesToBeAdded()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createEdgesToBeAdded ( )
private

Creates connecting edges for all nodes.

This function add edges from two vectors of edges. It is needed because we want to have ordered edges like for example

if (a < b) {}

We want to have first edge the true condition and second edge the false condition. The edgesToAddLast contains edges that have to be last edges for its node.

◆ createEntryNode()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createEntryNode ( )
private

Creates entry node.

◆ createExitNode()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createExitNode ( )
private

Creates exit node.

◆ createNewNodeAndConnectWithPredNode()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createNewNodeAndConnectWithPredNode ( ShPtr< Statement stmt)
private

Creates new node and add it. Also save edge from this new node to previous node.

Parameters
[in]stmtStatement of new node.

◆ createNewNodeForIfSwitchForWhileStmtAndAddStmtToNode()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createNewNodeForIfSwitchForWhileStmtAndAddStmtToNode ( ShPtr< Statement stmt)
private

Creates new node if is needed for if, while, for, switch statements and also add statement to node.

Parameters
[in]stmtStatement to add.

◆ createNewNodeIfStmtHasSucc()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createNewNodeIfStmtHasSucc ( ShPtr< Statement stmt)
private

Creates a new node for stmt if it has a successor.

Parameters
[in]stmtStatement to check if has a successor.

◆ createOtherNodes()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::createOtherNodes ( )
private

Creates other nodes.

◆ doJob()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::doJob ( const Job job)
private

Performs the given job.

Iterates through one nested level from statement which is saved in job. Also create new node for job and add backward edge from this new node to predecessor node.

Parameters
[in]jobA job to perform.

◆ doJobs()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::doJobs ( )
private

Tops and pop one job from queue and starts doing of job.

◆ initializeCFGBuild()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::initializeCFGBuild ( )
private

Initializes all the needed data so the CFG can be built.

◆ purgeCFG()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::purgeCFG ( )
private

Purges the CFG by removing useless nodes.

◆ resolveGotoTargets()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::resolveGotoTargets ( ShPtr< Statement stmt)
private

Resolve goto targets.

When the statement is a goto target and there are some statements in the current node, we have to add the statement into a new node. Otherwise do nothing.

Parameters
[in]stmtStatement to check.

◆ validateCFG()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::validateCFG ( )
private

Validates the created CFG.

◆ visit() [1/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [2/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [3/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [4/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [5/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [6/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [7/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [8/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< AssignStmt stmt)
overrideprivatevirtual

◆ visit() [9/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [10/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [11/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [12/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [13/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [14/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [15/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [16/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< BreakStmt stmt)
overrideprivatevirtual

◆ visit() [17/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [18/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [19/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< CallStmt stmt)
overrideprivatevirtual

◆ visit() [20/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [21/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [22/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [23/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [24/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [25/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [26/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [27/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [28/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [29/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [30/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< ContinueStmt stmt)
overrideprivatevirtual

◆ visit() [31/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [32/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [33/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [34/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< EmptyStmt stmt)
overrideprivatevirtual

◆ visit() [35/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [36/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [37/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [38/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [39/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< ForLoopStmt stmt)
overrideprivatevirtual

◆ visit() [40/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [41/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [42/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [43/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [44/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [45/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< GotoStmt stmt)
overrideprivatevirtual

◆ visit() [46/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [47/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [48/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [49/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< IfStmt stmt)
overrideprivatevirtual

◆ visit() [50/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [51/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [52/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [53/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [54/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [55/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [56/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [57/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [58/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [59/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [60/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [61/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [62/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [63/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [64/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< ReturnStmt stmt)
overrideprivatevirtual

◆ visit() [65/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [66/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [67/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [68/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [69/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [70/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< SwitchStmt stmt)
overrideprivatevirtual

◆ visit() [71/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [72/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [73/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [74/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< UForLoopStmt stmt)
overrideprivatevirtual

◆ visit() [75/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [76/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [77/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< UnreachableStmt stmt)
overrideprivatevirtual

◆ visit() [78/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [79/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< VarDefStmt stmt)
overrideprivatevirtual

◆ visit() [80/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [81/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [82/83]

virtual void retdec::llvmir2hll::VisitorAdapter::visit
inlineoverrideprivate

◆ visit() [83/83]

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visit ( ShPtr< WhileLoopStmt stmt)
overrideprivatevirtual

◆ visitForOrUForLoop()

void retdec::llvmir2hll::NonRecursiveCFGBuilder::visitForOrUForLoop ( ShPtr< Statement loop,
ShPtr< Statement body 
)
private

Implementation of visit() for for loops.

Member Data Documentation

◆ currNode

ShPtr<CFG::Node> retdec::llvmir2hll::NonRecursiveCFGBuilder::currNode
private

Currently generated node.

◆ edgesToAddFirst

EdgesToAdd retdec::llvmir2hll::NonRecursiveCFGBuilder::edgesToAddFirst
private

Vector of saved edges for nodes that will be added first.

◆ edgesToAddLast

EdgesToAdd retdec::llvmir2hll::NonRecursiveCFGBuilder::edgesToAddLast
private

Vector of saved edges that have to be added at the end.

◆ emptyStmtToNodeMap

StmtNodeMapping retdec::llvmir2hll::NonRecursiveCFGBuilder::emptyStmtToNodeMap
private

Mapping of an empty statement to its node.

◆ jobQueue

JobQueue retdec::llvmir2hll::NonRecursiveCFGBuilder::jobQueue
private

Queue of all jobs.

◆ stopIterNextStmts

bool retdec::llvmir2hll::NonRecursiveCFGBuilder::stopIterNextStmts
private

Signalizes if we want to iterate through statements or not.


The documentation for this class was generated from the following files: