diff options
| -rw-r--r-- | simplify.c | 5 | ||||
| -rw-r--r-- | validation/optim/muldiv-by-one.c | 3 |
2 files changed, 8 insertions, 0 deletions
@@ -388,6 +388,11 @@ static int simplify_constant_rightside(struct instruction *insn) case OP_ASR: return simplify_asr(insn, insn->src1, value); + case OP_MODU: case OP_MODS: + if (value == 1) + return replace_with_pseudo(insn, value_pseudo(0)); + return 0; + case OP_DIVU: case OP_DIVS: case OP_MULU: case OP_MULS: return simplify_mul_div(insn, value); diff --git a/validation/optim/muldiv-by-one.c b/validation/optim/muldiv-by-one.c index f6dd7cb2..5d9b458e 100644 --- a/validation/optim/muldiv-by-one.c +++ b/validation/optim/muldiv-by-one.c @@ -5,6 +5,8 @@ si smul1(si a) { return a * 1; } ui umul1(ui a) { return a * 1; } si sdiv1(si a) { return a / 1; } ui udiv1(ui a) { return a / 1; } +si smod1(si a) { return a % 1; } +ui umod1(ui a) { return a % 1; } /* * check-name: muldiv-by-one @@ -13,4 +15,5 @@ ui udiv1(ui a) { return a / 1; } * * check-output-excludes: mul[us]\\. * check-output-excludes: div[us]\\. + * check-output-excludes: mod[us]\\. */ |
