aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-08-18 18:22:34 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-08-22 09:26:18 +0200
commit8e5ef1b17efcef79a75747278d0e8116a85a0908 (patch)
tree288d9d9c6eed242cdf64eadb86a3c6948b1df29c
parente65784bc11f85d5e14693e3686b3e76cd1327103 (diff)
downloadsparse-dev-8e5ef1b17efcef79a75747278d0e8116a85a0908.tar.gz
use an intermediate mask in simplify_shift()
This is to have the code to look as closest as possible to what is done in simplify_mask_or_and() in preparation to some unification. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--simplify.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/simplify.c b/simplify.c
index 2db6f40a..21d78603 100644
--- a/simplify.c
+++ b/simplify.c
@@ -621,7 +621,7 @@ static int simplify_or_lsr(struct instruction *insn, pseudo_t src, pseudo_t othe
static int simplify_shift(struct instruction *insn, pseudo_t pseudo, long long value)
{
struct instruction *def;
- unsigned long long mask;
+ unsigned long long mask, omask;
unsigned long long nval;
unsigned int size;
pseudo_t src2;
@@ -680,13 +680,13 @@ static int simplify_shift(struct instruction *insn, pseudo_t pseudo, long long v
// by (A >> S) & (M >> S)
if (!constant(def->src2))
break;
+ omask = def->src2->value;
if (nbr_users(pseudo) > 1)
break;
- mask = def->src2->value;
def->opcode = OP_LSR;
def->src2 = insn->src2;
insn->opcode = OP_AND;
- insn->src2 = value_pseudo(mask >> value);
+ insn->src2 = value_pseudo(omask >> value);
return REPEAT_CSE;
case OP_LSR:
goto case_shift_shift;