aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/combine.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20021118-3.c18
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4f18c06..5238683 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-11-20 Jakub Jelinek <jakub@redhat.com>
+
+ * combine.c (force_to_mode): Only replace with (not Y) if all bits in fuller_mask
+ (not just mask) are set in C.
+
2002-11-19 Andreas Jaeger <aj@suse.de>
* loop.c (record_giv): Initialize not_replaceable.
diff --git a/gcc/combine.c b/gcc/combine.c
index 8ce9d10..a0214d1 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -6978,10 +6978,10 @@ force_to_mode (x, mode, mask, reg, just_select)
return force_to_mode (x, mode, mask, reg, next_select);
}
- /* Similarly, if C contains every bit in the mask, then we may
+ /* Similarly, if C contains every bit in the fuller_mask, then we may
replace with (not Y). */
if (GET_CODE (XEXP (x, 0)) == CONST_INT
- && ((INTVAL (XEXP (x, 0)) | (HOST_WIDE_INT) mask)
+ && ((INTVAL (XEXP (x, 0)) | (HOST_WIDE_INT) fuller_mask)
== INTVAL (XEXP (x, 0))))
{
x = simplify_gen_unary (NOT, GET_MODE (x),
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cb13824..a09e7c7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-11-20 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/execute/20021118-3.c: New test.
+
2002-11-19  Eric Botcazou  <ebotcazou@libertysurf.fr>
* gcc.c-torture/compile/20021119-1.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20021118-3.c b/gcc/testsuite/gcc.c-torture/execute/20021118-3.c
new file mode 100644
index 0000000..8ec01ca
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20021118-3.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+extern void exit (int);
+
+int
+foo (int x)
+{
+ if (x == -2 || -x - 100 >= 0)
+ abort ();
+ return 0;
+}
+
+int
+main ()
+{
+ foo (-3);
+ foo (-99);
+ exit (0);
+}