diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-09-27 16:45:08 +0200 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-10-20 22:35:43 +0200 |
| commit | dbe0117ce6246725eaacc6ed3cb2b2c3ee14d1cc (patch) | |
| tree | c90142b50bfc532a8e9f34881e72cb70ea749e07 /simplify.c | |
| parent | 43a7dfa578c3ce08e636866220ac9142772e0dd9 (diff) | |
| download | sparse-dev-dbe0117ce6246725eaacc6ed3cb2b2c3ee14d1cc.tar.gz | |
sub: simplify x - (x + y) --> -y
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'simplify.c')
| -rw-r--r-- | simplify.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -1396,6 +1396,10 @@ static int simplify_sub(struct instruction *insn) } switch (DEF_OPCODE(def, src2)) { + case OP_ADD: + if (src1 == def->src1) // x - (x + z) --> -z + return replace_with_unop(insn, OP_NEG, def->src2); + break; case OP_NEG: // (x - -y) --> (x + y) insn->opcode = OP_ADD; return replace_pseudo(insn, &insn->src2, def->src); |
