aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-07-28 10:02:26 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-08-08 09:54:45 +0200
commit52b7cd665eb13098ea8ccd45ccac2bb5b85f423d (patch)
treee2f71a0fd1dbba5edbac13b5b3d58d6c87e6b402
parent80ee1b6fca62dcf9ed7c54fba5cc45b790c11524 (diff)
downloadsparse-dev-52b7cd665eb13098ea8ccd45ccac2bb5b85f423d.tar.gz
reorg code for shift-shift simplification
No functional changes, just moving the code around in preparation for shift-shift simplification. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--simplify.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/simplify.c b/simplify.c
index 9e4a496f..106b3c84 100644
--- a/simplify.c
+++ b/simplify.c
@@ -627,14 +627,19 @@ static int simplify_shift(struct instruction *insn, pseudo_t pseudo, long long v
break;
case OP_LSR:
size = operand_size(insn, pseudo);
- /* fall through */
+ if (value >= size)
+ goto zero;
+ switch(DEF_OPCODE(def, pseudo)) {
+ case OP_LSR:
+ goto case_shift_shift;
+ }
+ break;
case OP_SHL:
if (value >= size)
goto zero;
- if (pseudo->type != PSEUDO_REG)
- break;
- def = pseudo->def;
- if (def->opcode == insn->opcode) {
+ switch(DEF_OPCODE(def, pseudo)) {
+ case OP_SHL:
+ case_shift_shift: // also for LSR - LSR
if (def == insn) // cyclic DAG!
break;
src2 = def->src2;