diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-08-18 18:22:34 +0200 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2018-08-22 09:26:18 +0200 |
| commit | 8e5ef1b17efcef79a75747278d0e8116a85a0908 (patch) | |
| tree | 288d9d9c6eed242cdf64eadb86a3c6948b1df29c | |
| parent | e65784bc11f85d5e14693e3686b3e76cd1327103 (diff) | |
| download | sparse-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.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -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; |
