aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--simplify.c2
-rw-r--r--validation/optim/bits-not-zero.c7
2 files changed, 9 insertions, 0 deletions
diff --git a/simplify.c b/simplify.c
index 25e2a41c..09cbe16d 100644
--- a/simplify.c
+++ b/simplify.c
@@ -668,6 +668,8 @@ static int simplify_constant_rightside(struct instruction *insn)
case OP_AND:
if (!value)
return replace_with_pseudo(insn, insn->src2);
+ if ((value & bits) == bits)
+ return replace_with_pseudo(insn, insn->src1);
return 0;
case OP_SET_NE:
diff --git a/validation/optim/bits-not-zero.c b/validation/optim/bits-not-zero.c
index 9872794b..ce74705e 100644
--- a/validation/optim/bits-not-zero.c
+++ b/validation/optim/bits-not-zero.c
@@ -1,4 +1,5 @@
int or_not0(int a) { return a | ~0; }
+int and_not0(int a) { return a & ~0; }
/*
* check-name: bool-not-zero
@@ -11,5 +12,11 @@ or_not0:
ret.32 $0xffffffff
+and_not0:
+.L2:
+ <entry-point>
+ ret.32 %arg1
+
+
* check-output-end
*/