|
decompiler
1.0.0
|
Simplify various conditional move situations. More...
Classes | |
| class | BoolExpress |
| Class for categorizing and rebuilding a boolean expression. More... | |
Public Member Functions | |
| RuleConditionalMove (const string &g) | |
| Constructor. | |
| virtual Rule * | clone (const ActionGroupList &grouplist) const |
| Clone the Rule. More... | |
| virtual void | getOpList (vector< uint4 > &oplist) const |
| List of op codes this rule operates on. More... | |
| virtual int4 | applyOp (PcodeOp *op, Funcdata &data) |
| Attempt to apply this Rule. More... | |
Public Member Functions inherited from Rule | |
| Rule (const string &g, uint4 fl, const string &nm) | |
| Construct given group, properties name. More... | |
| virtual | ~Rule (void) |
| Destructor. | |
| const string & | getName (void) const |
| Return the name of this Rule. | |
| const string & | getGroup (void) const |
| Return the group this Rule belongs to. | |
| uint4 | getNumTests (void) |
| Get number of attempted applications. | |
| uint4 | getNumApply (void) |
| Get number of successful applications. | |
| void | setBreak (uint4 tp) |
| Set a breakpoint on this Rule. | |
| void | clearBreak (uint4 tp) |
| Clear a breakpoint on this Rule. | |
| void | turnOnWarnings (void) |
| Enable warnings for this Rule. | |
| void | turnOffWarnings (void) |
| Disable warnings for this Rule. | |
| bool | isDisabled (void) const |
| Return true if this Rule is disabled. | |
| void | setDisable (void) |
| Disable this Rule (within its pool) | |
| void | clearDisable (void) |
| Enable this Rule (within its pool) | |
| bool | checkActionBreak (void) |
| Check if an action breakpoint is turned on. More... | |
| uint4 | getBreakPoint (void) const |
| Return breakpoint toggles. | |
| virtual void | reset (Funcdata &data) |
| Reset this Rule. More... | |
| virtual void | resetStats (void) |
| Reset Rule statistics. More... | |
| virtual void | printStatistics (ostream &s) const |
| Print statistics for this Rule. More... | |
Static Private Member Functions | |
| static Varnode * | constructNegate (Varnode *vn, PcodeOp *op, Funcdata &data) |
| Construct the boolean negation of a given boolean Varnode. More... | |
Additional Inherited Members | |
Public Types inherited from Rule | |
| enum | typeflags { type_disable = 1, rule_debug = 2, warnings_on = 4, warnings_given = 8 } |
| Properties associated with a Rule. More... | |
Simplify various conditional move situations.
The simplest situation is when the code looks like
which gets simplified to res = zext(boolcond) The other major variation looks like
which gets simplified to res = boolcond || differentcond
Attempt to apply this Rule.
This method contains the main logic for applying the Rule. It must use a given PcodeOp as the point at which the Rule applies. If it does apply, changes are made directly to the function and 1 (non-zero) is returned, otherwise 0 is returned.
Reimplemented from Rule.
References PcodeOp::code(), RuleConditionalMove::BoolExpress::constructBool(), constructNegate(), CPUI_BOOL_AND, CPUI_BOOL_NEGATE, CPUI_BOOL_OR, CPUI_CBRANCH, CPUI_COPY, CPUI_INT_ZEXT, RuleConditionalMove::BoolExpress::evaluatePropagation(), Varnode::getDef(), PcodeOp::getIn(), FlowBlock::getIn(), PcodeOp::getOut(), PcodeOp::getParent(), Varnode::getSize(), FlowBlock::getTrueOut(), RuleConditionalMove::BoolExpress::getVal(), RuleConditionalMove::BoolExpress::initialize(), PcodeOp::isBooleanFlip(), RuleConditionalMove::BoolExpress::isConstant(), Varnode::isWritten(), FlowBlock::lastOp(), Funcdata::newConstant(), PcodeOp::numInput(), Funcdata::opInsertBegin(), Funcdata::opRemoveInput(), Funcdata::opSetInput(), Funcdata::opSetOpcode(), Funcdata::opUninsert(), FlowBlock::sizeIn(), and FlowBlock::sizeOut().
|
inlinevirtual |
Clone the Rule.
If this Rule is a member of one of the groups in the grouplist, this returns a clone of the Rule, otherwise NULL is returned.
| grouplist | is the list of groups being cloned |
Implements Rule.
References ActionGroupList::contains(), Rule::getGroup(), and RuleConditionalMove().
|
staticprivate |
Construct the boolean negation of a given boolean Varnode.
| vn | is the given Varnode |
| op | is the point at which to insert the BOOL_NEGATE op |
| data | is the function being analyzed |
References CPUI_BOOL_NEGATE, PcodeOp::getAddr(), Funcdata::newOp(), Funcdata::newUniqueOut(), Funcdata::opInsertBefore(), Funcdata::opSetInput(), and Funcdata::opSetOpcode().
Referenced by applyOp().
|
virtual |
List of op codes this rule operates on.
Populate the given array with all possible OpCodes this Rule might apply to. By default, this method returns all possible OpCodes
| oplist | is the array to populate |
Reimplemented from Rule.
References CPUI_MULTIEQUAL.
1.8.15