| Ghidra Decompiler Analysis Engine
    | 
Simplify expressions involving three-way comparisons. More...


| Public Member Functions | |
| 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... | |
| bool | checkActionBreak (void) | 
| Check if an action breakpoint is turned on.  More... | |
| 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 Public Member Functions | |
| static PcodeOp * | detectThreeWay (PcodeOp *op, bool &isPartial) | 
| Detect a three-way calculation.  More... | |
| static int4 | testCompareEquivalence (PcodeOp *lessop, PcodeOp *lessequalop) | 
| Make sure comparisons match properly for a three-way.  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 expressions involving three-way comparisons.
A three-way comparison is the expression
X = zext( V < W ) + ZEXT( V <= W ) - 1 in some permutationThis gives the result (-1, 0, or 1) depending on whether V is less-than, equal, or greater-than W. This Rule looks for secondary comparisons of the three-way, such as
X < 1 which simplifies toV <= W | 
 | inlinevirtual | 
Detect a three-way calculation.
A three-way expression looks like:
zext( V < W ) + zext( V <= W ) - 1 in some permutationThe comparisons can signed, unsigned, or floating-point.
| op | is the putative root INT_ADD of the calculation | 
| isPartial | is set to true if a partial form is detected | 
| 
 | virtual | 
Make sure comparisons match properly for a three-way.
Given zext(V < W) + zext(X <= Y), make sure comparisons match, i.e V matches X and W matches Y. Take into account that the LESSEQUAL may have been converted to a LESS. Return:
 1.8.17
 1.8.17