decompiler  1.0.0
Public Member Functions | Private Attributes | List of all members
ghidra::WidenerFull Class Reference

Class for doing normal widening. More...

#include <rangeutil.hh>

Inheritance diagram for ghidra::WidenerFull:
ghidra::Widener

Public Member Functions

 WidenerFull (void)
 Constructor with default iterations.
 
 WidenerFull (int4 wide, int4 full)
 Constructor specifying iterations.
 
virtual int4 determineIterationReset (const ValueSet &valueSet)
 Upon entering a fresh partition, determine how the given ValueSet count should be reset. More...
 
virtual bool checkFreeze (const ValueSet &valueSet)
 Check if the given value set has been frozen for the remainder of the iteration process. More...
 
virtual bool doWidening (const ValueSet &valueSet, CircleRange &range, const CircleRange &newRange)
 For an iteration that isn't stabilizing attempt to widen the given ValueSet. More...
 
- Public Member Functions inherited from ghidra::Widener
virtual ~Widener (void)
 Destructor.
 

Private Attributes

int4 widenIteration
 The iteration at which widening is attempted.
 
int4 fullIteration
 The iteration at which a full range is produced.
 

Detailed Description

Class for doing normal widening.

Widening is attempted at a specific iteration. If a landmark is available, it is used to do a controlled widening, holding the stable range boundary constant. Otherwise a full range is produced. At a later iteration, a full range is produced automatically.

Member Function Documentation

◆ checkFreeze()

bool ghidra::WidenerFull::checkFreeze ( const ValueSet valueSet)
virtual

Check if the given value set has been frozen for the remainder of the iteration process.

Parameters
valueSetis the given value set
Returns
true if the valueSet will no longer change

Implements ghidra::Widener.

References ghidra::ValueSet::getRange(), and ghidra::CircleRange::isFull().

◆ determineIterationReset()

int4 ghidra::WidenerFull::determineIterationReset ( const ValueSet valueSet)
virtual

Upon entering a fresh partition, determine how the given ValueSet count should be reset.

Parameters
valueSetis the given value set
Returns
the value of the iteration counter to reset to

Implements ghidra::Widener.

References ghidra::ValueSet::getCount().

◆ doWidening()

bool ghidra::WidenerFull::doWidening ( const ValueSet valueSet,
CircleRange range,
const CircleRange newRange 
)
virtual

For an iteration that isn't stabilizing attempt to widen the given ValueSet.

Change the given range based on its previous iteration so that it stabilizes more rapidly on future iterations.

Parameters
valueSetis the given value set
rangeis the previous form of the given range (and storage for the widening result)
newRangeis the current iteration of the given range
Returns
true if widening succeeded

Implements ghidra::Widener.

References ghidra::CircleRange::contains(), ghidra::ValueSet::getCount(), ghidra::ValueSet::getLandMark(), ghidra::CircleRange::getMin(), ghidra::CircleRange::invert(), and ghidra::CircleRange::widen().


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