25 #ifndef __RULE_ACTION__ 26 #define __RULE_ACTION__ 68 virtual void getOpList(vector<uint4> &oplist)
const;
78 virtual void getOpList(vector<uint4> &oplist)
const;
88 virtual void getOpList(vector<uint4> &oplist)
const;
98 virtual void getOpList(vector<uint4> &oplist)
const;
108 virtual void getOpList(vector<uint4> &oplist)
const;
118 virtual void getOpList(vector<uint4> &oplist)
const;
128 virtual void getOpList(vector<uint4> &oplist)
const;
138 virtual void getOpList(vector<uint4> &oplist)
const;
148 virtual void getOpList(vector<uint4> &oplist)
const;
158 virtual void getOpList(vector<uint4> &oplist)
const;
168 virtual void getOpList(vector<uint4> &oplist)
const;
178 virtual void getOpList(vector<uint4> &oplist)
const;
188 virtual void getOpList(vector<uint4> &oplist)
const;
198 virtual void getOpList(vector<uint4> &oplist)
const;
208 virtual void getOpList(vector<uint4> &oplist)
const;
219 virtual void getOpList(vector<uint4> &oplist)
const;
229 virtual void getOpList(vector<uint4> &oplist)
const;
231 static void minMaxUse(
Varnode *vn,int4 &maxByte,int4 &minByte);
233 static bool acceptableSize(int4
size);
235 static Varnode *findSubpiece(
Varnode *basevn,uint4 outsize,uint4 shift);
244 virtual void getOpList(vector<uint4> &oplist)
const;
255 virtual void getOpList(vector<uint4> &oplist)
const;
265 virtual void getOpList(vector<uint4> &oplist)
const;
275 virtual void getOpList(vector<uint4> &oplist)
const;
285 virtual void getOpList(vector<uint4> &oplist)
const;
295 virtual void getOpList(vector<uint4> &oplist)
const;
305 virtual void getOpList(vector<uint4> &oplist)
const;
315 virtual void getOpList(vector<uint4> &oplist)
const;
325 virtual void getOpList(vector<uint4> &oplist)
const;
335 virtual void getOpList(vector<uint4> &oplist)
const;
345 virtual void getOpList(vector<uint4> &oplist)
const;
355 virtual void getOpList(vector<uint4> &oplist)
const;
365 virtual void getOpList(vector<uint4> &oplist)
const;
375 virtual void getOpList(vector<uint4> &oplist)
const;
385 virtual void getOpList(vector<uint4> &oplist)
const;
395 virtual void getOpList(vector<uint4> &oplist)
const;
405 virtual void getOpList(vector<uint4> &oplist)
const;
425 virtual void getOpList(vector<uint4> &oplist)
const;
435 virtual void getOpList(vector<uint4> &oplist)
const;
445 virtual void getOpList(vector<uint4> &oplist)
const;
455 virtual void getOpList(vector<uint4> &oplist)
const;
465 virtual void getOpList(vector<uint4> &oplist)
const;
475 virtual void getOpList(vector<uint4> &oplist)
const;
485 virtual void getOpList(vector<uint4> &oplist)
const;
495 virtual void getOpList(vector<uint4> &oplist)
const;
505 virtual void getOpList(vector<uint4> &oplist)
const;
515 virtual void getOpList(vector<uint4> &oplist)
const;
525 virtual void getOpList(vector<uint4> &oplist)
const;
535 virtual void getOpList(vector<uint4> &oplist)
const;
545 virtual void getOpList(vector<uint4> &oplist)
const;
555 virtual void getOpList(vector<uint4> &oplist)
const;
565 virtual void getOpList(vector<uint4> &oplist)
const;
575 virtual void getOpList(vector<uint4> &oplist)
const;
579 void findComparisons(
Varnode *vn,vector<PcodeOp *> &res);
586 virtual void getOpList(vector<uint4> &oplist)
const;
596 virtual void getOpList(vector<uint4> &oplist)
const;
606 virtual void getOpList(vector<uint4> &oplist)
const;
616 virtual void getOpList(vector<uint4> &oplist)
const;
636 virtual void getOpList(vector<uint4> &oplist)
const;
656 virtual void getOpList(vector<uint4> &oplist)
const;
666 virtual void getOpList(vector<uint4> &oplist)
const;
676 virtual void getOpList(vector<uint4> &oplist)
const;
686 virtual void getOpList(vector<uint4> &oplist)
const;
696 virtual void getOpList(vector<uint4> &oplist)
const;
720 virtual void getOpList(vector<uint4> &oplist)
const;
730 virtual void getOpList(vector<uint4> &oplist)
const;
750 virtual void getOpList(vector<uint4> &oplist)
const;
760 virtual void getOpList(vector<uint4> &oplist)
const;
771 virtual void getOpList(vector<uint4> &oplist)
const;
791 virtual void getOpList(vector<uint4> &oplist)
const;
801 virtual void getOpList(vector<uint4> &oplist)
const;
811 virtual void getOpList(vector<uint4> &oplist)
const;
821 virtual void getOpList(vector<uint4> &oplist)
const;
831 virtual void getOpList(vector<uint4> &oplist)
const;
841 virtual void getOpList(vector<uint4> &oplist)
const;
851 virtual void getOpList(vector<uint4> &oplist)
const;
861 virtual void getOpList(vector<uint4> &oplist)
const;
871 virtual void getOpList(vector<uint4> &oplist)
const;
881 virtual void getOpList(vector<uint4> &oplist)
const;
891 virtual void getOpList(vector<uint4> &oplist)
const;
901 virtual void getOpList(vector<uint4> &oplist)
const;
911 virtual void getOpList(vector<uint4> &oplist)
const;
921 virtual void getOpList(vector<uint4> &oplist)
const;
931 virtual void getOpList(vector<uint4> &oplist)
const;
941 virtual void getOpList(vector<uint4> &oplist)
const;
951 virtual void getOpList(vector<uint4> &oplist)
const;
961 virtual void getOpList(vector<uint4> &oplist)
const;
972 virtual void getOpList(vector<uint4> &oplist)
const;
982 virtual void getOpList(vector<uint4> &oplist)
const;
992 virtual void getOpList(vector<uint4> &oplist)
const;
1005 virtual void getOpList(vector<uint4> &oplist)
const;
1015 virtual void getOpList(vector<uint4> &oplist)
const;
1025 virtual void getOpList(vector<uint4> &oplist)
const;
1035 virtual void getOpList(vector<uint4> &oplist)
const;
1045 virtual void getOpList(vector<uint4> &oplist)
const;
1057 virtual void getOpList(vector<uint4> &oplist)
const;
1068 virtual void getOpList(vector<uint4> &oplist)
const;
1079 virtual void getOpList(vector<uint4> &oplist)
const;
1090 virtual void getOpList(vector<uint4> &oplist)
const;
1102 virtual void getOpList(vector<uint4> &oplist)
const;
1113 virtual void getOpList(vector<uint4> &oplist)
const;
1135 virtual void getOpList(vector<uint4> &oplist)
const;
1146 virtual void getOpList(vector<uint4> &oplist)
const;
1158 virtual void getOpList(vector<uint4> &oplist)
const;
1163 static uintb calcDivisor(uintb n,uint8 y,int4 xsize);
1171 virtual void getOpList(vector<uint4> &oplist)
const;
1183 virtual void getOpList(vector<uint4> &oplist)
const;
1194 virtual void getOpList(vector<uint4> &oplist)
const;
1205 virtual void getOpList(vector<uint4> &oplist)
const;
1216 virtual void getOpList(vector<uint4> &oplist)
const;
1227 virtual void getOpList(vector<uint4> &oplist)
const;
1238 virtual void getOpList(vector<uint4> &oplist)
const;
1249 virtual void getOpList(vector<uint4> &oplist)
const;
1260 virtual void getOpList(vector<uint4> &oplist)
const;
1266 bool hasTruncations;
1267 bool trialSetPtrFlow(
PcodeOp *op);
1268 bool propagateFlowToDef(
Varnode *vn);
1269 bool propagateFlowToReads(
Varnode *vn);
1277 virtual void getOpList(vector<uint4> &oplist)
const;
1288 virtual void getOpList(vector<uint4> &oplist)
const;
1299 virtual void getOpList(vector<uint4> &oplist)
const;
1310 virtual void getOpList(vector<uint4> &oplist)
const;
1322 virtual void getOpList(vector<uint4> &oplist)
const;
1324 virtual void reset(
Funcdata &data);
1334 virtual void getOpList(vector<uint4> &oplist)
const;
1345 virtual void getOpList(vector<uint4> &oplist)
const;
1358 bool mustreconstruct;
1360 bool isConstant(
void)
const {
return (optype==0); }
1361 uintb getVal(
void)
const {
return val; }
1373 virtual void getOpList(vector<uint4> &oplist)
const;
1384 virtual void getOpList(vector<uint4> &oplist)
const;
1395 virtual void getOpList(vector<uint4> &oplist)
const;
1406 virtual void getOpList(vector<uint4> &oplist)
const;
1417 virtual void getOpList(vector<uint4> &oplist)
const;
1420 static int4 testCompareEquivalence(
PcodeOp *lessop,
PcodeOp *lessequalop);
1430 virtual void getOpList(vector<uint4> &oplist)
const;
1432 static Varnode *getBooleanResult(
Varnode *vn,int4 bitPos,int4 &constRes);
1444 virtual void getOpList(vector<uint4> &oplist)
const;
Propagate constants through a SEGMENTOP.
Definition: ruleaction.hh:1220
RuleTestSign(const string &g)
Constructor.
Definition: ruleaction.hh:581
RuleShift2Mult(const string &g)
Constructor.
Definition: ruleaction.hh:601
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1031
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:937
A region where processor data is stored.
Definition: space.hh:73
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:261
vector< uintb > coeff
Associated constant multiple.
Definition: ruleaction.hh:36
Perform SubfloatFlow analysis triggered by FLOAT_FLOAT2FLOAT.
Definition: ruleaction.hh:1327
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1330
RuleXorCollapse(const string &g)
Constructor.
Definition: ruleaction.hh:681
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:164
Description of a control-flow block containing PcodeOps.
Definition: block.hh:60
Collapse MULTIEQUAL whose inputs all trace to the same value.
Definition: ruleaction.hh:538
Concatenation with sign bits becomes an extension: concat( V s>> #0x1f , V) => sext(V) ...
Definition: ruleaction.hh:91
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:947
Simplify various conditional move situations.
Definition: ruleaction.hh:1349
RuleConditionalMove(const string &g)
Constructor.
Definition: ruleaction.hh:1368
Cleanup: Convert INT_ADD back to INT_SUB: V + -W ==> V - W
Definition: ruleaction.hh:1072
RuleSubvarCompZero(const string &g)
Constructor.
Definition: ruleaction.hh:1283
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:341
RulePopcountBoolXor(const string &g)
Constructor.
Definition: ruleaction.hh:1425
RuleBoolZext(const string &g)
Constructor.
Definition: ruleaction.hh:510
RuleDivOpt(const string &g)
Constructor.
Definition: ruleaction.hh:1166
uintb multsum
Sum of multiple constants.
Definition: ruleaction.hh:38
Look for common sub-expressions (built out of a restricted set of ops)
Definition: ruleaction.hh:71
Cleanup: Convert INT_ADD of constants to INT_SUB: V + 0xff... => V - 0x00...
Definition: ruleaction.hh:1061
RuleLessEqual2Zero(const string &g)
Constructor.
Definition: ruleaction.hh:956
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:225
Simplify join and break apart: sub( concat(V,W), c) => sub(W,c)
Definition: ruleaction.hh:884
OpCode
The op-code defining a specific p-code operation (PcodeOp)
Definition: opcodes.hh:35
RuleDoubleSub(const string &g)
Constructor.
Definition: ruleaction.hh:350
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:551
RuleSubExtComm(const string &g)
Constructor.
Definition: ruleaction.hh:745
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1064
Rule2Comp2Sub(const string &g)
Constructor.
Definition: ruleaction.hh:1074
RuleEqual2Zero(const string &g)
Constructor.
Definition: ruleaction.hh:977
int4 size
Size of ptr type in question.
Definition: ruleaction.hh:34
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:837
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:154
Collapse constants in an additive or multiplicative expression.
Definition: ruleaction.hh:689
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1234
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:501
Simplify INT_RIGHT canceling PIECE: concat(V,W) >> c => zext(V)
Definition: ruleaction.hh:378
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1053
The list of groups defining a root Action.
Definition: action.hh:29
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:94
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:592
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1075
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1179
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1426
Apply a set of identities involving BOOL_NEGATE.
Definition: ruleaction.hh:934
RulePushMulti(const string &g)
Constructor.
Definition: ruleaction.hh:250
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:371
Commute PIECE with INT_AND, INT_OR, and INT_XOR.
Definition: ruleaction.hh:764
RuleShiftCompare(const string &g)
Constructor.
Definition: ruleaction.hh:400
Simplify break and rejoin: concat( sub(V,c), sub(V,0) ) => V
Definition: ruleaction.hh:874
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1318
RuleSegment(const string &g)
Constructor.
Definition: ruleaction.hh:1222
RuleConcatShift(const string &g)
Constructor.
Definition: ruleaction.hh:380
Try to detect and split artificially joined Varnodes.
Definition: ruleaction.hh:1253
Container for data structures associated with a single function.
Definition: funcdata.hh:45
RuleNotDistribute(const string &g)
Constructor.
Definition: ruleaction.hh:260
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:652
Treat FLOAT_NAN as always evaluating to false.
Definition: ruleaction.hh:1388
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:46
RuleCollectTerms(const string &g)
Constructor.
Definition: ruleaction.hh:63
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:978
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:582
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1212
Simplify another expression associated with optimized division.
Definition: ruleaction.hh:1151
RuleSubfloatConvert(const string &g)
Constructor.
Definition: ruleaction.hh:1329
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:291
Simplify INT_LESSEQUAL applied to extremal constants.
Definition: ruleaction.hh:954
Datatype object representing a pointer.
Definition: type.hh:219
Simplify INT_LESSEQUAL && INT_NOTEQUAL: V <= W && V != W => V < W
Definition: ruleaction.hh:428
RuleHighOrderAnd(const string &g)
Constructor.
Definition: ruleaction.hh:270
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:511
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:847
Commute INT_AND with INT_LEFT and INT_RIGHT: (V << W) & d => (V & (W >> c)) << c
Definition: ruleaction.hh:318
Cleanup: Convert truncation to cast: sub(V,c) => sub(V>>c*8,0)
Definition: ruleaction.hh:1083
RuleOrCollapse(const string &g)
Constructor.
Definition: ruleaction.hh:143
Order the inputs to commutative operations.
Definition: ruleaction.hh:212
Eliminate any INT_AND when the bits it zeroes out are discarded by a shift.
Definition: ruleaction.hh:814
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:251
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:907
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:301
RuleBitUndistribute(const string &g)
Constructor.
Definition: ruleaction.hh:490
RuleLogic2Bool(const string &g)
Constructor.
Definition: ruleaction.hh:520
Remove a CPUI_INDIRECT if its blocking PcodeOp is dead.
Definition: ruleaction.hh:528
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1167
RuleSubvarShift(const string &g)
Constructor.
Definition: ruleaction.hh:1294
Commute INT_ZEXT with INT_RIGHT: zext(V) >> W => zext(V >> W)
Definition: ruleaction.hh:794
Simplify INT_SLESS applied to 0 or -1.
Definition: ruleaction.hh:964
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:662
Transform shifts in comparisons: V >> c == d => V == (d << c)
Definition: ruleaction.hh:398
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1440
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:491
bool contains(const string &nm) const
Check if this ActionGroupList contains a given group.
Definition: action.hh:37
RuleConcatLeftShift(const string &g)
Constructor.
Definition: ruleaction.hh:836
RuleDoubleShift(const string &g)
Constructor.
Definition: ruleaction.hh:360
Collapse operations using identity element: V + 0 => V
Definition: ruleaction.hh:589
RuleThreeWayCompare(const string &g)
Constructor.
Definition: ruleaction.hh:1412
RuleOrConsume(const string &g)
Constructor.
Definition: ruleaction.hh:133
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:672
Cleanup: Convert INT_2COMP from INT_MULT: V * -1 => -V
Definition: ruleaction.hh:1050
Convert INT_MULT and shift forms into INT_DIV or INT_SDIV.
Definition: ruleaction.hh:1162
RuleAndOrLump(const string &g)
Constructor.
Definition: ruleaction.hh:153
RuleAndCommute(const string &g)
Constructor.
Definition: ruleaction.hh:320
RuleAndPiece(const string &g)
Constructor.
Definition: ruleaction.hh:330
RulePiecePathology(const string &g)
Constructor.
Definition: ruleaction.hh:1439
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:642
Merge range conditions of the form: V s< c, c s< V, V == c, V != c
Definition: ruleaction.hh:298
Apply INT_NEGATE identities: V & ~V => #0, V | ~V -> #-1
Definition: ruleaction.hh:161
RuleAndCompare(const string &g)
Constructor.
Definition: ruleaction.hh:340
RuleRightShiftAnd(const string &g)
Constructor.
Definition: ruleaction.hh:183
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:622
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:561
Perform SubvariableFlow analysis triggered by INT_ZEXT.
Definition: ruleaction.hh:1303
RuleShiftBitops(const string &g)
Constructor.
Definition: ruleaction.hh:173
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:381
RuleSwitchSingle(const string &g)
Constructor.
Definition: ruleaction.hh:916
Transform pointer arithmetic.
Definition: ruleaction.hh:995
virtual void getOpList(vector< uint4 > &oplist) const
List of op codes this rule operates on.
Definition: ruleaction.cc:3974
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1154
Simplify boolean expressions of the form zext(V) * -1.
Definition: ruleaction.hh:508
RuleOrMask(const string &g)
Constructor.
Definition: ruleaction.hh:113
RuleFloatCast(const string &g)
Constructor.
Definition: ruleaction.hh:1379
Simplify INT_LESS applied to extremal constants.
Definition: ruleaction.hh:944
RuleLessEqual(const string &g)
Constructor.
Definition: ruleaction.hh:420
Simplify PIECE intended as embedding: concat(V, sub(W,0)) => W & 0xff | (zext(W) << 8) ...
Definition: ruleaction.hh:904
RuleAndDistribute(const string &g)
Constructor.
Definition: ruleaction.hh:280
RuleTrivialArith(const string &g)
Constructor.
Definition: ruleaction.hh:440
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1131
RulePushPtr(const string &g)
Constructor.
Definition: ruleaction.hh:1020
RuleHumptyDumpty(const string &g)
Constructor.
Definition: ruleaction.hh:876
RuleZextSless(const string &g)
Constructor.
Definition: ruleaction.hh:480
Simplify 'less than or equal': V < W || V == W => V <= W
Definition: ruleaction.hh:418
RulePositiveDiv(const string &g)
Constructor.
Definition: ruleaction.hh:1130
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:114
RuleSubCancel(const string &g)
Constructor.
Definition: ruleaction.hh:856
Collapse constant expressions.
Definition: ruleaction.hh:619
RuleLeftRight(const string &g)
Constructor.
Definition: ruleaction.hh:390
Collapse INT_EQUAL and INT_NOTEQUAL: f(V,W) == f(V,W) => true
Definition: ruleaction.hh:201
RuleSubvarSext(const string &g)
Constructor.
Definition: ruleaction.hh:1317
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:481
Simplify expressions that optimize INT_REM and INT_SREM.
Definition: ruleaction.hh:1209
RuleSborrow(const string &g)
Constructor.
Definition: ruleaction.hh:550
Concatenation with 0 becomes an extension: V = concat(#0,W) => V = zext(W)
Definition: ruleaction.hh:81
RuleSubZext(const string &g)
Constructor.
Definition: ruleaction.hh:846
RuleIntLessEqual(const string &g)
Constructor.
Definition: ruleaction.hh:193
RuleCondNegate(const string &g)
Constructor.
Definition: ruleaction.hh:926
Search for concatenations with unlikely things to inform return/parameter consumption calculation...
Definition: ruleaction.hh:1435
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1369
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:877
RuleSubvarZext(const string &g)
Constructor.
Definition: ruleaction.hh:1305
RuleDivTermAdd2(const string &g)
Constructor.
Definition: ruleaction.hh:1153
Convert LESSEQUAL to LESS: V <= c => V < (c+1)
Definition: ruleaction.hh:191
RuleDoubleArithShift(const string &g)
Constructor.
Definition: ruleaction.hh:370
Collapse constants in logical expressions: (V & c) & d => V & (c & d)
Definition: ruleaction.hh:151
Convert BRANCHIND with only one computed destination to a BRANCH.
Definition: ruleaction.hh:914
Simply OR with unconsumed input: `V = A | B => V = B if nzm(A) & consume(V) == 0. ...
Definition: ruleaction.hh:131
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:521
Convert INT_SLESS to INT_LESS when comparing positive values.
Definition: ruleaction.hh:468
Convert STORE operations using a constant offset to COPY.
Definition: ruleaction.hh:723
RuleSub2Add(const string &g)
Constructor.
Definition: ruleaction.hh:671
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1391
Lowest level operation of the p-code language.
Definition: op.hh:58
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:767
RuleSignDiv2(const string &g)
Constructor.
Definition: ruleaction.hh:1178
RuleIndirectCollapse(const string &g)
Constructor.
Definition: ruleaction.hh:530
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:271
RuleShiftPiece(const string &g)
Constructor.
Definition: ruleaction.hh:611
Simplify signed comparisons using INT_SBORROW.
Definition: ruleaction.hh:548
Remove PTRSUB operations with mismatched data-type information.
Definition: ruleaction.hh:1038
RuleBxor2NotEqual(const string &g)
Constructor.
Definition: ruleaction.hh:103
Action, Rule, and other associates classes supporting transformations on function data-flow...
RuleSignNearMult(const string &g)
Constructor.
Definition: ruleaction.hh:1200
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:331
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:716
Remove PTRADD operations with mismatched data-type information.
Definition: ruleaction.hh:1028
Transform INT_CARRY using a constant: carry(V,c) => -c <= V
Definition: ruleaction.hh:659
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:726
RuleSubvarSubpiece(const string &g)
Constructor.
Definition: ruleaction.hh:1244
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:917
RuleBoolNegate(const string &g)
Constructor.
Definition: ruleaction.hh:936
RuleLessNotEqual(const string &g)
Constructor.
Definition: ruleaction.hh:430
Simplify INT_RIGHT and INT_SRIGHT ops where an INT_AND mask becomes unnecessary.
Definition: ruleaction.hh:181
RulePtrsubUndo(const string &g)
Constructor.
Definition: ruleaction.hh:1040
Collect terms in a sum: V * c + V * d => V * (c + d)
Definition: ruleaction.hh:59
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:797
RuleZextShiftZext(const string &g)
Constructor.
Definition: ruleaction.hh:806
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1223
Simplify boolean expressions that are combined through POPCOUNT.
Definition: ruleaction.hh:1423
Eliminate ARM/THUMB style masking of the low order bits on function pointers.
Definition: ruleaction.hh:1399
vector< Varnode * > nonmult
Varnodes which are not multiples.
Definition: ruleaction.hh:37
Commute SUBPIECE operations with earlier operations where possible.
Definition: ruleaction.hh:753
RulePtrsubCharConstant(const string &g)
Constructor.
Definition: ruleaction.hh:1097
RuleTrivialBool(const string &g)
Constructor.
Definition: ruleaction.hh:450
RuleAddMultCollapse(const string &g)
Constructor.
Definition: ruleaction.hh:691
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:184
RuleStoreVarnode(const string &g)
Constructor.
Definition: ruleaction.hh:725
RuleFloatRange(const string &g)
Constructor.
Definition: ruleaction.hh:310
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:746
Commute PIECE with INT_ZEXT: concat(zext(V),W) => zext(concat(V,W))
Definition: ruleaction.hh:784
RuleNegateIdentity(const string &g)
Constructor.
Definition: ruleaction.hh:163
RulePiece2Zext(const string &g)
Constructor.
Definition: ruleaction.hh:83
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:174
Simplify expressions associated with optimized division expressions.
Definition: ruleaction.hh:1139
Manager for all the major decompiler subsystems.
Definition: architecture.hh:117
RuleNegateNegate(const string &g)
Constructor.
Definition: ruleaction.hh:1340
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:84
RuleAndMask(const string &g)
Constructor.
Definition: ruleaction.hh:123
Simplify INT_ZEXT and SUBPIECE in masked comparison: zext(V) & c == 0 => V & (c & mask) == 0 ...
Definition: ruleaction.hh:338
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:857
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:927
RuleSignShift(const string &g)
Constructor.
Definition: ruleaction.hh:570
RuleConcatZext(const string &g)
Constructor.
Definition: ruleaction.hh:786
Simplify chained shifts INT_LEFT and INT_RIGHT.
Definition: ruleaction.hh:358
RulePullsubIndirect(const string &g)
Constructor.
Definition: ruleaction.hh:239
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:541
bool valid
Full tree search was performed.
Definition: ruleaction.hh:40
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:471
RuleLess2Zero(const string &g)
Constructor.
Definition: ruleaction.hh:946
Perform SubvariableFlow analysis triggered by INT_SEXT.
Definition: ruleaction.hh:1314
RuleSlessToLess(const string &g)
Constructor.
Definition: ruleaction.hh:470
RuleBooleanNegate(const string &g)
Constructor.
Definition: ruleaction.hh:500
Simplify trivial shifts: V << 0 => V, V << #64 => 0
Definition: ruleaction.hh:558
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:194
Undo distributed operations through INT_AND, INT_OR, and INT_XOR.
Definition: ruleaction.hh:488
Cleanup: Set-up to print string constants.
Definition: ruleaction.hh:1094
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1041
RuleFuncPtrEncoding(const string &g)
Constructor.
Definition: ruleaction.hh:1401
RuleShiftSub(const string &g)
Constructor.
Definition: ruleaction.hh:866
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:421
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:827
RuleTrivialShift(const string &g)
Constructor.
Definition: ruleaction.hh:560
RuleSplitFlow(const string &g)
Constructor.
Definition: ruleaction.hh:1255
A low-level variable or contiguous set of bytes described by an Address and a size.
Definition: varnode.hh:65
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1098
Simplify two sequential INT_SRIGHT: (x s>> #c) s>> #d => x s>> saturate(#c + #d)
Definition: ruleaction.hh:368
A basic block for p-code operations.
Definition: block.hh:363
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:612
RuleTermOrder(const string &g)
Constructor.
Definition: ruleaction.hh:214
Eliminate INT_2COMP: -V => V * -1
Definition: ruleaction.hh:649
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:957
RulePullsubMulti(const string &g)
Constructor.
Definition: ruleaction.hh:224
RuleShiftAnd(const string &g)
Constructor.
Definition: ruleaction.hh:816
RuleSubRight(const string &g)
Constructor.
Definition: ruleaction.hh:1085
RuleEqual2Constant(const string &g)
Constructor.
Definition: ruleaction.hh:987
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:887
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1284
Class for performing a single transformation on a PcodeOp or Varnode.
Definition: action.hh:192
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:281
RuleHumptyOr(const string &g)
Constructor.
Definition: ruleaction.hh:896
RuleModOpt(const string &g)
Constructor.
Definition: ruleaction.hh:1211
Transform INT_LESS of 0 or 1: V < 1 => V == 0, V <= 0 => V == 0
Definition: ruleaction.hh:288
Simplify masked pieces INT_ORed together: (V & ff00) | (V & 00ff) => V
Definition: ruleaction.hh:894
RuleEmbed(const string &g)
Constructor.
Definition: ruleaction.hh:906
Eliminate INT_ZEXT in comparisons: zext(V) == c => V == c
Definition: ruleaction.hh:458
Convert LOAD operations using a constant offset to COPY.
Definition: ruleaction.hh:709
Convert PIECE to INT_ZEXT where appropriate: V & concat(W,X) => zext(X)
Definition: ruleaction.hh:328
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1256
RuleZextEliminate(const string &g)
Constructor.
Definition: ruleaction.hh:460
RuleZextCommute(const string &g)
Constructor.
Definition: ruleaction.hh:796
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:401
Mark Varnode and PcodeOp objects that are carrying or operating on pointers.
Definition: ruleaction.hh:1264
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1086
RuleCarryElim(const string &g)
Constructor.
Definition: ruleaction.hh:661
Distribute BOOL_NEGATE: !(V && W) => !V || !W
Definition: ruleaction.hh:258
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1021
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1402
RuleLessOne(const string &g)
Constructor.
Definition: ruleaction.hh:290
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:897
Pull SUBPIECE back through MULTIEQUAL.
Definition: ruleaction.hh:222
Perform SubVariableFlow analysis triggered by INT_AND.
Definition: ruleaction.hh:1231
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:311
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:104
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1380
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1306
Convert INT_LEFT to INT_MULT: V << 2 => V * 4
Definition: ruleaction.hh:599
Convert sign-bit test to signed comparison: (V s>> 0x1f) != 0 => V s< 0
Definition: ruleaction.hh:578
Simplify expressions involving three-way comparisons.
Definition: ruleaction.hh:1410
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1295
RulePiece2Sext(const string &g)
Constructor.
Definition: ruleaction.hh:93
RuleRangeMeld(const string &g)
Constructor.
Definition: ruleaction.hh:300
Simplify concatenation with zero: concat(V,0) => zext(V) << c
Definition: ruleaction.hh:824
RuleSelectCse(const string &g)
Constructor.
Definition: ruleaction.hh:73
RulePtraddUndo(const string &g)
Constructor.
Definition: ruleaction.hh:1030
Pull-back SUBPIECE through INDIRECT.
Definition: ruleaction.hh:237
virtual int4 applyOp(PcodeOp *op, Funcdata &data)
Attempt to apply this Rule.
Definition: ruleaction.cc:3980
Perform SubVariableFlow analysis triggered by SUBPIECE.
Definition: ruleaction.hh:1242
const string & getGroup(void) const
Return the group this Rule belongs to.
Definition: action.hh:214
RuleDivTermAdd(const string &g)
Constructor.
Definition: ruleaction.hh:1141
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1201
RulePropagateCopy(const string &g)
Constructor.
Definition: ruleaction.hh:641
Simplify INT_NEGATE chains: ~~V => V
Definition: ruleaction.hh:1338
Convert INT_SRIGHT form into INT_SDIV: (V + -1*(V s>> 31)) s>> 1 => V s/ 2
Definition: ruleaction.hh:1176
Propagate the input of a COPY to all the places that read the output.
Definition: ruleaction.hh:639
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:817
Transform canceling INT_RIGHT or INT_SRIGHT of INT_LEFT.
Definition: ruleaction.hh:388
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1001
Simplify boolean expressions when one side is constant.
Definition: ruleaction.hh:448
uintb nonmultsum
Sum of non-multiple constants.
Definition: ruleaction.hh:39
Eliminate INT_XOR in comparisons: (V ^ W) == 0 => V == W
Definition: ruleaction.hh:679
Simplify comparisons with boolean values: V == false => !V, V == true => V
Definition: ruleaction.hh:498
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:807
Simplify MULTIEQUAL operations where the branches hold the same value.
Definition: ruleaction.hh:247
RuleStructOffset0(const string &g)
Constructor.
Definition: ruleaction.hh:1010
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:215
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:867
Convert a LOAD or STORE to the first element of a structure to a PTRSUB.
Definition: ruleaction.hh:1008
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:204
Eliminate BOOL_XOR: V ^^ W => V != W
Definition: ruleaction.hh:101
Transform INT_ZEXT and INT_SLESS: zext(V) s< c => V < c
Definition: ruleaction.hh:478
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:144
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:391
Commute SUBPIECE and INT_ZEXT: sub(zext(V),c) => zext(sub(V,c))
Definition: ruleaction.hh:743
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:64
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:988
Varnode * ptr
The pointer varnode.
Definition: ruleaction.hh:33
RuleEquality(const string &g)
Constructor.
Definition: ruleaction.hh:203
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1011
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:461
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1142
Simplify INT_EQUAL applied to 0: 0 == V + W * -1 => V == W or 0 == V + c => V == -c ...
Definition: ruleaction.hh:975
Distribute INT_AND through INT_OR if result is simpler.
Definition: ruleaction.hh:278
Simplify SUBPIECE applied to INT_LEFT: sub( V << 8*c, c) => sub(V,0)
Definition: ruleaction.hh:864
Simplify INT_EQUAL applied to arithmetic expressions.
Definition: ruleaction.hh:985
Flip conditions to match structuring cues.
Definition: ruleaction.hh:924
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:571
Rule2Comp2Mult(const string &g)
Constructor.
Definition: ruleaction.hh:651
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1273
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:441
Collapse unnecessary INT_AND.
Definition: ruleaction.hh:121
RuleEarlyRemoval(const string &g)
Constructor.
Definition: ruleaction.hh:45
Signed division of positive values is unsigned division.
Definition: ruleaction.hh:1128
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:602
RuleConcatCommute(const string &g)
Constructor.
Definition: ruleaction.hh:766
Collapse unnecessary INT_OR.
Definition: ruleaction.hh:141
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:451
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1413
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:968
RuleDumptyHump(const string &g)
Constructor.
Definition: ruleaction.hh:886
Get rid of unused PcodeOp objects where we can guarantee the output is unused.
Definition: ruleaction.hh:43
Replace (casttosmall)(casttobig)V with identity or with single cast.
Definition: ruleaction.hh:1377
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:240
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1341
Perform SubvariableFlow analysis triggered by INT_RIGHT.
Definition: ruleaction.hh:1292
Simplify composition of SUBPIECE with INT_ZEXT or INT_SEXT.
Definition: ruleaction.hh:854
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:431
RulePtrArith(const string &g)
Constructor.
Definition: ruleaction.hh:1000
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:134
Simplify trivial arithmetic expressions.
Definition: ruleaction.hh:438
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:692
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:124
RuleAddUnsigned(const string &g)
Constructor.
Definition: ruleaction.hh:1063
Simplify concatenation of extended value: concat(V, zext(W) << c) => concat( concat(V,W), 0)
Definition: ruleaction.hh:834
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:682
RuleIgnoreNan(const string &g)
Constructor.
Definition: ruleaction.hh:1390
RuleSubCommute(const string &g)
Constructor.
Definition: ruleaction.hh:755
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:321
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:531
vector< Varnode * > multiple
Varnodes which are multiples of size.
Definition: ruleaction.hh:35
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:787
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:351
Structure for sorting out pointer expression trees.
Definition: ruleaction.hh:31
Convert "shift and add" to PIECE: (zext(V) << 16) + zext(W) => concat(V,W)
Definition: ruleaction.hh:609
RuleCollapseConstants(const string &g)
Constructor.
Definition: ruleaction.hh:621
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1109
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:74
RuleSubNormal(const string &g)
Constructor.
Definition: ruleaction.hh:1108
RuleIdentityEl(const string &g)
Constructor.
Definition: ruleaction.hh:591
Perform SubvariableFlow analysis triggered by testing of a single bit.
Definition: ruleaction.hh:1281
Simplify chained SUBPIECE: sub( sub(V,c), d) => sub(V, c+d)
Definition: ruleaction.hh:348
Push a Varnode with known pointer data-type to the bottom of its additive expression.
Definition: ruleaction.hh:1018
RuleMultiCollapse(const string &g)
Constructor.
Definition: ruleaction.hh:540
Simplify INT_AND when applied to aligned INT_ADD: (V + c) & 0xfff0 => V + (c & 0xfff0) ...
Definition: ruleaction.hh:268
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:361
Eliminate INT_SUB: V - W => V + W * -1
Definition: ruleaction.hh:669
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:756
virtual Rule * clone(const ActionGroupList &grouplist) const
Clone the Rule.
Definition: ruleaction.hh:1245
RuleSubvarAnd(const string &g)
Constructor.
Definition: ruleaction.hh:1233
Normalize sign-bit extraction: V >> 0x1f => (V s>> 0x1f) * -1
Definition: ruleaction.hh:568
Simplify INT_OR with full mask: V = W | 0xffff => V = W
Definition: ruleaction.hh:111
Simplify INT_ZEXT applied to SUBPIECE expressions.
Definition: ruleaction.hh:844
Convert logical to boolean operations: V & W => V && W, V | W => V || W
Definition: ruleaction.hh:518
RuleMultNegOne(const string &g)
Constructor.
Definition: ruleaction.hh:1052
Shifting away all non-zero bits of one-side of a logical/arithmetic op.
Definition: ruleaction.hh:171
Pull-back SUBPIECE through INT_RIGHT and INT_SRIGHT.
Definition: ruleaction.hh:1106
RuleConcatZero(const string &g)
Constructor.
Definition: ruleaction.hh:826
Simplify multiple INT_ZEXT operations: zext( zext(V) << c ) => zext(V) << c
Definition: ruleaction.hh:804
Merge range conditions of the form: V f< c, c f< V, V f== c etc.
Definition: ruleaction.hh:308
RuleLoadVarnode(const string &g)
Constructor.
Definition: ruleaction.hh:715
RuleSLess2Zero(const string &g)
Constructor.
Definition: ruleaction.hh:967
Simplify division form: (V + (V s>> 0x1f)>>(32-n)) & (-1<<n) => (V s/ 2^n) * 2^n
Definition: ruleaction.hh:1198