aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-01 00:13:07 +0000
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-01 00:13:07 +0000
commit673748080b9aa1e0367e472e95100a1ac6f47284 (patch)
tree3fd19bde977d95685385a4d951bcbc502b5b3b5c
parent65d26e11e7f386872407f865c77c442ca645040c (diff)
Backport:
2005-08-08 Josh Conner <jconner@apple.com> PR rtl-optimization/23241 * combine.c (simplify_comparison): Fix error in determining whether to lift a subreg from comparison. * gcc.dg/char-compare.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/csl-3_4_3-linux-branch@110456 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog.csl10
-rw-r--r--gcc/combine.c2
-rw-r--r--gcc/testsuite/gcc.dg/char-compare.c23
3 files changed, 34 insertions, 1 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index e2faabeaaf6..92ea8e6f5e6 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,13 @@
+2006-01-31 Joseph Myers <joseph@codesourcery.com>
+
+ Backport:
+ 2005-08-08 Josh Conner <jconner@apple.com>
+
+ PR rtl-optimization/23241
+ * combine.c (simplify_comparison): Fix error in determining
+ whether to lift a subreg from comparison.
+ * gcc.dg/char-compare.c: New test.
+
2006-01-21 Joseph Myers <joseph@codesourcery.com>
* gcc/c-incpath.c (dir_separator_str): New.
diff --git a/gcc/combine.c b/gcc/combine.c
index f6ae431ee70..fec035ee0d4 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -10739,7 +10739,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
/* (A - C1) always sign-extends, like C2. */
&& num_sign_bit_copies (a, inner_mode)
> (unsigned int) (GET_MODE_BITSIZE (inner_mode)
- - mode_width - 1)))
+ - (mode_width - 1))))
{
op0 = SUBREG_REG (op0);
continue;
diff --git a/gcc/testsuite/gcc.dg/char-compare.c b/gcc/testsuite/gcc.dg/char-compare.c
new file mode 100644
index 00000000000..f8b2fb968b0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/char-compare.c
@@ -0,0 +1,23 @@
+/* PR rtl-optimization/23241 */
+/* Origin: Josh Conner <jconner@apple.com> */
+
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort(void);
+
+struct fbs {
+ unsigned char uc;
+} fbs1 = {255};
+
+void fn(struct fbs *fbs_ptr)
+{
+ if ((fbs_ptr->uc != 255) && (fbs_ptr->uc != 0))
+ abort();
+}
+
+int main(void)
+{
+ fn(&fbs1);
+ return 0;
+}