aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--simplify.c5
-rw-r--r--validation/optim/muldiv-by-one.c3
2 files changed, 8 insertions, 0 deletions
diff --git a/simplify.c b/simplify.c
index df75db9b..38f26cd4 100644
--- a/simplify.c
+++ b/simplify.c
@@ -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]\\.
*/