retdec
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
retdec::llvmir2hll::ExprTypesAnalysis Class Referencefinal

A visitor for analyzing the types in BIR. More...

#include <expr_types_analysis.h>

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

Public Types

enum class  ExprTag { Signed , Unsigned }
 
using TagVector = std::vector< ExprTag >
 
using ExprTagsMap = std::map< ShPtr< Expression >, TagVector >
 

Public Member Functions

std::size_t getCountOfTag (ShPtr< Expression > expr, ExprTag tag)
 Gets count of found tags of expression expr. More...
 
ExprTagsMap analyzeExprTypes (ShPtr< Module > module)
 Fixes some types to correct type. More...
 

Static Public Member Functions

static ShPtr< ExprTypesAnalysiscreate ()
 Creates a new analysis of integer types. More...
 

Private Member Functions

 ExprTypesAnalysis ()
 Constructs a new visitor. More...
 
void addTagToExpr (ShPtr< Expression > expr, ExprTag tag)
 Adds tag to the expression and puts it into exprTagsMap. More...
 
Visitor Interface
virtual void visit (ShPtr< ExtCastExpr > expr) override
 
virtual void visit (ShPtr< IntToFPCastExpr > expr) override
 
virtual void visit (ShPtr< DivOpExpr > expr) override
 
virtual void visit (ShPtr< ModOpExpr > expr) override
 
virtual void visit (ShPtr< AssignStmt > stmt) override
 
virtual void visit (ShPtr< VarDefStmt > stmt) override
 
virtual void visit (ShPtr< LtEqOpExpr > expr) override
 
virtual void visit (ShPtr< GtEqOpExpr > expr) override
 
virtual void visit (ShPtr< LtOpExpr > expr) override
 
virtual void visit (ShPtr< GtOpExpr > expr) override
 
virtual void visit (ShPtr< BitShlOpExpr > expr) override
 
virtual void visit (ShPtr< BitShrOpExpr > expr) 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< AndOpExpr > expr) override
 
virtual void visit (ShPtr< ArrayIndexOpExpr > expr) override
 
virtual void visit (ShPtr< AssignOpExpr > 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::OrderedAllVisitor
virtual void visit (ShPtr< GlobalVarDef > varDef) override
 
virtual void visit (ShPtr< Function > func) 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< WhileLoopStmt > stmt) override
 
virtual void visit (ShPtr< AddOpExpr > expr) override
 
virtual void visit (ShPtr< AddressOpExpr > expr) override
 
virtual void visit (ShPtr< AndOpExpr > expr) override
 
virtual void visit (ShPtr< ArrayIndexOpExpr > expr) override
 
virtual void visit (ShPtr< AssignOpExpr > expr) override
 
virtual void visit (ShPtr< BitAndOpExpr > expr) override
 
virtual void visit (ShPtr< BitOrOpExpr > 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< EqOpExpr > 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< FPToIntCastExpr > 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
 
 OrderedAllVisitor (bool visitSuccessors=true, bool visitNestedStmts=true)
 Constructs a new visitor. More...
 
virtual void visitStmt (ShPtr< Statement > stmt, bool visitSuccessors=true, bool visitNestedStmts=true)
 Visits the given statement, and possibly its successors or nested statements. More...
 
void restart (bool visitSuccessors=true, bool visitNestedStmts=true)
 "Restarts" the visitor so it is in the state like it was when it was created. More...
 
bool makeAccessedAndCheckIfAccessed (ShPtr< Type > type)
 Makes the given type accessed. More...
 
- Private Member Functions inherited from retdec::llvmir2hll::Visitor
virtual ~Visitor ()=default
 
 Visitor ()=default
 
- Private Member Functions inherited from retdec::utils::NonCopyable
 NonCopyable (const NonCopyable &)=delete
 
NonCopyableoperator= (const NonCopyable &)=delete
 
 NonCopyable ()=default
 
 ~NonCopyable ()=default
 

Private Attributes

ExprTagsMap exprTagsMap
 Map of all analyzed expressions and tags for every expression. More...
 
- Private Attributes inherited from retdec::llvmir2hll::OrderedAllVisitor
ShPtr< StatementlastStmt
 Statement that has been accessed as the last one. More...
 
StmtUSet accessedStmts
 A set of all accessed statements. More...
 
TypeUSet accessedTypes
 A set of all accessed types. More...
 
bool visitSuccessors
 Should statements' successor be accessed? More...
 
bool visitNestedStmts
 Should nested statements be accessed? More...
 

Detailed Description

A visitor for analyzing the types in BIR.

This class is a visitor. It visits expressions in which is information about signed/unsigned types. From this information, the analysis creates statistics. These statistics are later used in fixing of signed/unsigned types.

We need apply the analysis on the backend IR (BIR). The analyzeTypes() function is called in ExprTypesFixer.cpp.

This analysis has to be used in every place where we work with signed or unsigned types in the fixer.

For example, the following code

uint32_t a = -33;
if (a < 0) { // if icmp instruction was signed
...
}

gets the following statistics

var | signed | unsigned
a 1 0

To create an instance, use create(). Instances of this class have reference object semantics.

This is a concrete visitor which should not be subclassed.

Member Typedef Documentation

◆ ExprTagsMap

◆ TagVector

Member Enumeration Documentation

◆ ExprTag

Mapping of a expression into a vector of signed/unsigned information. Possible tags about expressions.

Enumerator
Signed 
Unsigned 

Signed type.

Unsigned Type.

Constructor & Destructor Documentation

◆ ExprTypesAnalysis()

retdec::llvmir2hll::ExprTypesAnalysis::ExprTypesAnalysis ( )
private

Constructs a new visitor.

Member Function Documentation

◆ addTagToExpr()

void retdec::llvmir2hll::ExprTypesAnalysis::addTagToExpr ( ShPtr< Expression expr,
ExprTag  tag 
)
private

Adds tag to the expression and puts it into exprTagsMap.

Parameters
[in]exprTagged expression.
[in]tagTag is Signed or Unsigned.

◆ analyzeExprTypes()

ExprTypesAnalysis::ExprTagsMap retdec::llvmir2hll::ExprTypesAnalysis::analyzeExprTypes ( ShPtr< Module module)

Fixes some types to correct type.

Parameters
[in]moduleSearched module.

◆ create()

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

Creates a new analysis of integer types.

◆ getCountOfTag()

std::size_t retdec::llvmir2hll::ExprTypesAnalysis::getCountOfTag ( ShPtr< Expression expr,
ExprTag  tag 
)

Gets count of found tags of expression expr.

Parameters
[in]exprExpression.
[in]tagCounted tag (Signed or Unsigned).

◆ visit() [1/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [2/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [3/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [4/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [5/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [6/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [7/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [8/81]

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

◆ visit() [9/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [10/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [11/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [12/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [13/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< BitShlOpExpr expr)
overrideprivatevirtual

◆ visit() [14/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [15/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< BitShrOpExpr expr)
overrideprivatevirtual

◆ visit() [16/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [17/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [18/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [19/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [20/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [21/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [22/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [23/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [24/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [25/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [26/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [27/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [28/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [29/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [30/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [31/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [32/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< DivOpExpr expr)
overrideprivatevirtual

◆ visit() [33/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [34/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [35/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [36/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< ExtCastExpr expr)
overrideprivatevirtual

◆ visit() [37/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [38/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [39/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [40/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [41/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [42/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [43/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [44/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [45/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< GtEqOpExpr expr)
overrideprivatevirtual

◆ visit() [46/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [47/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< GtOpExpr expr)
overrideprivatevirtual

◆ visit() [48/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [49/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [50/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< IntToFPCastExpr expr)
overrideprivatevirtual

◆ visit() [51/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [52/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [53/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [54/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< LtEqOpExpr expr)
overrideprivatevirtual

◆ visit() [55/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [56/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< LtOpExpr expr)
overrideprivatevirtual

◆ visit() [57/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [58/81]

void retdec::llvmir2hll::ExprTypesAnalysis::visit ( ShPtr< ModOpExpr expr)
overrideprivatevirtual

◆ visit() [59/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [60/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [61/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [62/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [63/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [64/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [65/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [66/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [67/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [68/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [69/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [70/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [71/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [72/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [73/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [74/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [75/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [76/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [77/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [78/81]

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

◆ visit() [79/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [80/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [81/81]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

Member Data Documentation

◆ exprTagsMap

ExprTagsMap retdec::llvmir2hll::ExprTypesAnalysis::exprTagsMap
private

Map of all analyzed expressions and tags for every expression.


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