summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2003-01-28 22:15:50 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2003-01-28 22:15:50 +0000
commita455589cd089b44cb788a1d9369cee33bf22f264 (patch)
tree1dfa2c8546c777952456edd8ef924b98d60849b7
parent2ee310145edd1b91b9464825cc1aed9c9710ad58 (diff)
downloadppe42-gcc-a455589cd089b44cb788a1d9369cee33bf22f264.tar.gz
ppe42-gcc-a455589cd089b44cb788a1d9369cee33bf22f264.zip
* combine.c (nonzero_bits): Fix check for negative divide operands.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62029 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/combine.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20030128-1.c10
4 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 60de22da4e9..bc469656054 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2003-01-28 Richard Sandiford <rsandifo@redhat.com>
+
+ * combine.c (nonzero_bits): Fix check for negative divide operands.
+
2003-01-28 Richard Henderson <rth@redhat.com>
* config/ia64/ia64.c (ia64_rwreloc_section_type_flags): New.
diff --git a/gcc/combine.c b/gcc/combine.c
index 4f03d008e7e..90c4482e33a 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -8369,14 +8369,15 @@ nonzero_bits (x, mode)
{
unsigned HOST_WIDE_INT nz0 = nonzero_bits (XEXP (x, 0), mode);
unsigned HOST_WIDE_INT nz1 = nonzero_bits (XEXP (x, 1), mode);
+ int sign_index = GET_MODE_BITSIZE (GET_MODE (x)) - 1;
int width0 = floor_log2 (nz0) + 1;
int width1 = floor_log2 (nz1) + 1;
int low0 = floor_log2 (nz0 & -nz0);
int low1 = floor_log2 (nz1 & -nz1);
HOST_WIDE_INT op0_maybe_minusp
- = (nz0 & ((HOST_WIDE_INT) 1 << (mode_width - 1)));
+ = (nz0 & ((HOST_WIDE_INT) 1 << sign_index));
HOST_WIDE_INT op1_maybe_minusp
- = (nz1 & ((HOST_WIDE_INT) 1 << (mode_width - 1)));
+ = (nz1 & ((HOST_WIDE_INT) 1 << sign_index));
unsigned int result_width = mode_width;
int result_low = 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c2f60e6ede7..9e5ea48f89e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-01-28 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.c-torture/execute/20030128-1.c: New test.
+
2003-01-28 Jeffrey D. Oldham <oldham@codesourcery.com>
* g++.dg/lookup/nested1.C: Test moved from ...
diff --git a/gcc/testsuite/gcc.c-torture/execute/20030128-1.c b/gcc/testsuite/gcc.c-torture/execute/20030128-1.c
new file mode 100644
index 00000000000..ceca322ccaf
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20030128-1.c
@@ -0,0 +1,10 @@
+unsigned char x = 50;
+volatile short y = -5;
+
+int main ()
+{
+ x /= y;
+ if (x != (unsigned char) -10)
+ abort ();
+ exit (0);
+}
OpenPOWER on IntegriCloud