summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <sayle@gcc.gnu.org>2006-11-13 00:41:53 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-11-13 00:41:53 +0000
commit3b279c7ae79eff94342d90e7a0d7ebad998500a9 (patch)
tree7188af743013997d2c1de69de33b6cec208746a6
parentd3a6450e36495c1cdcc5294619c999477202cd9d (diff)
downloadgcc-3b279c7ae79eff94342d90e7a0d7ebad998500a9.tar.gz
re PR rtl-optimization/29797 (Miscompiles bit test / set in OpenOffice)
2006-11-12 Michael Matz <matz@suse.de> Roger Sayle <roger@eyesopen.com> PR rtl-optimization/29797 * ifcvt.c (noce_try_bitop): Correct calculation of bitnum on BITS_BIG_ENDIAN targets. * gcc.c-torture/execute/pr29797-1.c: New test case. From-SVN: r118740
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ifcvt.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr29797-1.c14
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0eacd1e7b8b..bf326de9eea 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-12 Michael Matz <matz@suse.de>
+ Roger Sayle <roger@eyesopen.com>
+
+ PR rtl-optimization/29797
+ * ifcvt.c (noce_try_bitop): Correct calculation of bitnum on
+ BITS_BIG_ENDIAN targets.
+
2006-11-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* builtins.c (fold_builtin_cosh): New.
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 4d7341cec88..f2226c402aa 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -1943,7 +1943,9 @@ noce_try_bitop (struct noce_if_info *if_info)
return FALSE;
bitnum = INTVAL (XEXP (cond, 2));
mode = GET_MODE (x);
- if (bitnum >= HOST_BITS_PER_WIDE_INT)
+ if (BITS_BIG_ENDIAN)
+ bitnum = GET_MODE_BITSIZE (mode) - 1 - bitnum;
+ if (bitnum < 0 || bitnum >= HOST_BITS_PER_WIDE_INT)
return FALSE;
}
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7237d4f2b7d..4566f8855b4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-12 Roger Sayle <roger@eyesopen.com>
+
+ PR rtl-optimization/29797
+ * gcc.c-torture/execute/pr29797-1.c: New test case.
+
2006-11-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/torture/builtin-symmetric-1.c: Add more cases.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr29797-1.c b/gcc/testsuite/gcc.c-torture/execute/pr29797-1.c
new file mode 100644
index 00000000000..9bcc2a9c59b
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr29797-1.c
@@ -0,0 +1,14 @@
+extern void abort(void);
+
+unsigned int bar(void) { return 32768; }
+
+int main()
+{
+ unsigned int nStyle = bar ();
+ if (nStyle & 32768)
+ nStyle |= 65536;
+ if (nStyle != (32768 | 65536))
+ abort ();
+ return 0;
+}
+