aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/simplify.c
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-06-29 18:51:03 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-10-23 17:44:52 +0200
commita80921db90cd8de52b2fa37bf61e6156dd3a6bcd (patch)
tree337f1290bbe99d22f126355768df75916e561a39 /simplify.c
parentcfca7b4c6cb48283cb554fc91dc859ff669f2547 (diff)
downloadsparse-dev-a80921db90cd8de52b2fa37bf61e6156dd3a6bcd.tar.gz
simplify unsigned compares against 0
Some unsigned compares against 0 are always true or always false (x < 0 or x >= 0). Simplify them. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'simplify.c')
-rw-r--r--simplify.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/simplify.c b/simplify.c
index 6caf6cbc..4441b27c 100644
--- a/simplify.c
+++ b/simplify.c
@@ -1173,6 +1173,16 @@ static int simplify_constant_rightside(struct instruction *insn)
case OP_SET_NE:
case OP_SET_EQ:
return simplify_seteq_setne(insn, value);
+ case OP_SET_B:
+ if (!value) { // (x < 0) --> 0
+ return replace_with_pseudo(insn, value_pseudo(0));
+ }
+ break;
+ case OP_SET_AE:
+ if (!value) { // (x >= 0) --> 1
+ return replace_with_pseudo(insn, value_pseudo(1));
+ }
+ break;
}
return 0;
}