diff options
author | Richard Sandiford <rsandifo@redhat.com> | 2003-01-28 22:15:50 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2003-01-28 22:15:50 +0000 |
commit | 6d09ef27d4170193aaf12c291b18b8160f2b9bb2 (patch) | |
tree | 1dfa2c8546c777952456edd8ef924b98d60849b7 /gcc | |
parent | 1e1bd14eb2e457e969b82e4e14e7d4efdc4f3fc8 (diff) | |
download | gcc-6d09ef27d4170193aaf12c291b18b8160f2b9bb2.zip gcc-6d09ef27d4170193aaf12c291b18b8160f2b9bb2.tar.gz gcc-6d09ef27d4170193aaf12c291b18b8160f2b9bb2.tar.bz2 |
* combine.c (nonzero_bits): Fix check for negative divide operands.
From-SVN: r62029
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/combine.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20030128-1.c | 10 |
4 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 60de22d..bc46965 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 4f03d00..90c4482 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 c2f60e6..9e5ea48 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 0000000..ceca322 --- /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); +} |