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

Evaluates expressions with strict conditions. More...

#include <strict_arithm_expr_evaluator.h>

Inheritance diagram for retdec::llvmir2hll::StrictArithmExprEvaluator:
Inheritance graph
[legend]
Collaboration diagram for retdec::llvmir2hll::StrictArithmExprEvaluator:
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 StrictArithmExprEvaluator. 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

 StrictArithmExprEvaluator ()=default
 
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 resolveOpSpecifications (ShPtr< NegOpExpr > expr, ShPtr< Constant > &constant) 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 resolveOverflowForAPInt (bool overflow) override
 Stop evaluation if overflow occurred. More...
 
virtual void resolveOverflowForAPFloat (llvm::APFloat::opStatus opStatus) override
 Stop evaluation if overflow occurred. 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 strict conditions.

Instances of this class have reference object semantics.

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

Constructor & Destructor Documentation

◆ StrictArithmExprEvaluator()

retdec::llvmir2hll::StrictArithmExprEvaluator::StrictArithmExprEvaluator ( )
privatedefault

Member Function Documentation

◆ create()

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

Creates a new StrictArithmExprEvaluator.

◆ getId()

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

Returns the ID of the optimizer.

Implements retdec::llvmir2hll::ArithmExprEvaluator.

◆ resolveCast() [1/5]

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

◆ resolveCast() [2/5]

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

◆ resolveCast() [3/5]

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

◆ resolveCast() [4/5]

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

◆ resolveCast() [5/5]

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

◆ resolveOpSpecifications() [1/3]

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

◆ resolveOpSpecifications() [2/3]

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

◆ resolveOpSpecifications() [3/3]

void retdec::llvmir2hll::StrictArithmExprEvaluator::resolveOpSpecifications ( ShPtr< NegOpExpr expr,
ShPtr< Constant > &  constant 
)
overrideprivatevirtual

◆ resolveOverflowForAPFloat()

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

Stop evaluation if overflow occurred.

Parameters
[in]opStatusStatus.

Reimplemented from retdec::llvmir2hll::ArithmExprEvaluator.

◆ resolveOverflowForAPInt()

void retdec::llvmir2hll::StrictArithmExprEvaluator::resolveOverflowForAPInt ( bool  overflow)
overrideprivatevirtual

Stop evaluation if overflow occurred.

Parameters
[in]overflowOverflow.

Reimplemented from retdec::llvmir2hll::ArithmExprEvaluator.

◆ resolveTypesBinaryOp()

void retdec::llvmir2hll::StrictArithmExprEvaluator::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.


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