retdec
Public Member Functions | Static Public Member Functions | Private Member Functions | List of all members
retdec::llvmir2hll::CArithmExprEvaluator Class Referencefinal

Evaluates expressions with c language conditions. More...

#include <c_arithm_expr_evaluator.h>

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

Public Member Functions

virtual std::string getId () const override
 Returns the ID of the optimizer. More...
 
- Public Member Functions inherited from retdec::llvmir2hll::ArithmExprEvaluator
virtual std::optional< bool > toBool (ShPtr< Expression > expr, VarConstMap varValues=VarConstMap())
 Evaluate expr and return if result is bool. More...
 
ShPtr< Constantevaluate (ShPtr< Expression > expr)
 Evaluate an expr. More...
 
ShPtr< Constantevaluate (ShPtr< Expression > expr, const VarConstMap &varValues)
 Evaluate an expr. More...
 

Static Public Member Functions

static ShPtr< ArithmExprEvaluatorcreate ()
 Creates a new CArithmExprEvaluator. More...
 
- Static Public Member Functions inherited from retdec::llvmir2hll::ArithmExprEvaluator
template<typename ConstType >
static std::optional< std::pair< ShPtr< ConstType >, ShPtr< ConstType > > > castConstPair (const ConstPair &constPair)
 Casts the constants in constPair to the given type. More...
 

Private Member Functions

 CArithmExprEvaluator ()=default
 
virtual void resolveTypesUnaryOp (ShPtr< Constant > &operand) override
 Resolve type of operand in unary operation. More...
 
virtual void resolveTypesBinaryOp (ConstPair &constPair) override
 Resolve types of operands in binary operations. More...
 
virtual void resolveOpSpecifications (ShPtr< DivOpExpr > expr, ConstPair &constPair) override
 
virtual void resolveOpSpecifications (ShPtr< ModOpExpr > expr, ConstPair &constPair) override
 
virtual void resolveCast (ShPtr< BitCastExpr > expr, ShPtr< Constant > &constant) override
 
virtual void resolveCast (ShPtr< ExtCastExpr > expr, ShPtr< Constant > &constant) override
 
virtual void resolveCast (ShPtr< FPToIntCastExpr > expr, ShPtr< Constant > &constant) override
 
virtual void resolveCast (ShPtr< IntToFPCastExpr > expr, ShPtr< Constant > &constant) override
 
virtual void resolveCast (ShPtr< TruncCastExpr > expr, ShPtr< Constant > &constant) override
 
virtual void resolveOverflowForAPFloat (llvm::APFloat::opStatus opStatus) override
 Resolve overflow specifications for float and double. More...
 

Additional Inherited Members

- Public Types inherited from retdec::llvmir2hll::ArithmExprEvaluator
using APSIntPair = std::pair< llvm::APSInt, llvm::APSInt >
 Pair of llvm::APSInt. More...
 
using APFloatPair = std::pair< llvm::APFloat, llvm::APFloat >
 Pair of llvm::APFloat. More...
 
using ConstIntPair = std::pair< ShPtr< ConstInt >, ShPtr< ConstInt > >
 Pair of integer constants. More...
 
using ConstFloatPair = std::pair< ShPtr< ConstFloat >, ShPtr< ConstFloat > >
 Pair of float constants. More...
 
using ConstBoolPair = std::pair< ShPtr< ConstBool >, ShPtr< ConstBool > >
 Pair of bool constants. More...
 
using ConstPair = std::pair< ShPtr< Constant >, ShPtr< Constant > >
 Pair of constants. More...
 
using ConstStack = std::stack< ShPtr< Constant > >
 Stack of constats. More...
 
using VarConstMap = std::map< ShPtr< Variable >, ShPtr< Constant > >
 Mapping of variables to constants. More...
 
- Protected Member Functions inherited from retdec::llvmir2hll::ArithmExprEvaluator
 ArithmExprEvaluator ()=default
 
- Static Protected Member Functions inherited from retdec::llvmir2hll::ArithmExprEvaluator
static APSIntPair getAPSIntsFromConstants (const std::optional< ConstIntPair > &constIntPair)
 Create APSIntPair from constIntPair and return it. More...
 
static APFloatPair getAPFloatsFromConstants (const std::optional< ConstFloatPair > &ConstFloatPair)
 Create APFloatPair from constFloatPair and return it. More...
 
static bool isConstantZero (ShPtr< Constant > constant)
 Return if constant is a ConstInt or a ConstFloat zero. More...
 
- Protected Attributes inherited from retdec::llvmir2hll::ArithmExprEvaluator
bool canBeEvaluated = true
 Signalizes if evaluation can go on. More...
 

Detailed Description

Evaluates expressions with c language conditions.

Instances of this class have reference object semantics.

This is a concrete sub-evaluator which should not be subclassed.

Constructor & Destructor Documentation

◆ CArithmExprEvaluator()

retdec::llvmir2hll::CArithmExprEvaluator::CArithmExprEvaluator ( )
privatedefault

Member Function Documentation

◆ create()

ShPtr< ArithmExprEvaluator > retdec::llvmir2hll::CArithmExprEvaluator::create ( )
static

Creates a new CArithmExprEvaluator.

◆ getId()

std::string retdec::llvmir2hll::CArithmExprEvaluator::getId ( ) const
overridevirtual

Returns the ID of the optimizer.

Implements retdec::llvmir2hll::ArithmExprEvaluator.

◆ resolveCast() [1/5]

void retdec::llvmir2hll::CArithmExprEvaluator::resolveCast ( ShPtr< BitCastExpr expr,
ShPtr< Constant > &  constant 
)
overrideprivatevirtual

◆ resolveCast() [2/5]

void retdec::llvmir2hll::CArithmExprEvaluator::resolveCast ( ShPtr< ExtCastExpr expr,
ShPtr< Constant > &  constant 
)
overrideprivatevirtual

◆ resolveCast() [3/5]

void retdec::llvmir2hll::CArithmExprEvaluator::resolveCast ( ShPtr< FPToIntCastExpr expr,
ShPtr< Constant > &  constant 
)
overrideprivatevirtual

◆ resolveCast() [4/5]

void retdec::llvmir2hll::CArithmExprEvaluator::resolveCast ( ShPtr< IntToFPCastExpr expr,
ShPtr< Constant > &  constant 
)
overrideprivatevirtual

◆ resolveCast() [5/5]

void retdec::llvmir2hll::CArithmExprEvaluator::resolveCast ( ShPtr< TruncCastExpr expr,
ShPtr< Constant > &  constant 
)
overrideprivatevirtual

◆ resolveOpSpecifications() [1/2]

void retdec::llvmir2hll::CArithmExprEvaluator::resolveOpSpecifications ( ShPtr< DivOpExpr expr,
ConstPair constPair 
)
overrideprivatevirtual

◆ resolveOpSpecifications() [2/2]

void retdec::llvmir2hll::CArithmExprEvaluator::resolveOpSpecifications ( ShPtr< ModOpExpr expr,
ConstPair constPair 
)
overrideprivatevirtual

◆ resolveOverflowForAPFloat()

void retdec::llvmir2hll::CArithmExprEvaluator::resolveOverflowForAPFloat ( llvm::APFloat::opStatus  opStatus)
overrideprivatevirtual

Resolve overflow specifications for float and double.

Parameters
[in]opStatusStatus to check.

Reimplemented from retdec::llvmir2hll::ArithmExprEvaluator.

◆ resolveTypesBinaryOp()

void retdec::llvmir2hll::CArithmExprEvaluator::resolveTypesBinaryOp ( ConstPair constPair)
overrideprivatevirtual

Resolve types of operands in binary operations.

Parameters
[in,out]constPairPair of constants on which is resolved types.

Reimplemented from retdec::llvmir2hll::ArithmExprEvaluator.

◆ resolveTypesUnaryOp()

void retdec::llvmir2hll::CArithmExprEvaluator::resolveTypesUnaryOp ( ShPtr< Constant > &  operand)
overrideprivatevirtual

Resolve type of operand in unary operation.

Parameters
[in,out]operandOperand on which is resolved types correction.

Reimplemented from retdec::llvmir2hll::ArithmExprEvaluator.


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