gcc:
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jan 2006 14:58:05 +0000 (14:58 +0000)
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jan 2006 14:58:05 +0000 (14:58 +0000)
2006-01-03  Paolo Bonzini  <bonzini@gnu.org>

PR rtl-optimization/25578
* combine.c (combine_simplify_rtx, force_to_mode): Don't
pass a parameter to simplify_shift_const if changing ASHIFTRT
to LSHIFTRT.

gcc/testsuite:
2006-01-03  Paolo Bonzini  <bonzini@gnu.org>

PR rtl-optimization/25578
* gcc.c-torture/execute/20060102-1.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109281 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20060102-1.c [new file with mode: 0644]

index 1e9a27b..b0aa2ab 100644 (file)
@@ -1,3 +1,10 @@
+2006-01-03  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR rtl-optimization/25578
+       * combine.c (combine_simplify_rtx, force_to_mode): Don't
+       pass a parameter to simplify_shift_const if changing ASHIFTRT
+       to LSHIFTRT.
+
 2006-01-03  Adrian Straetling  <straetling@de.ibm.com>
 
        * gcc/builtins.c (get_builtin_sync_mem): New function.
index 29ee191..ab91989 100644 (file)
@@ -1,6 +1,6 @@
 /* Optimize by combining instructions for GNU compiler.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -4321,7 +4321,7 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest)
       if (GET_CODE (temp) == ASHIFTRT
          && GET_CODE (XEXP (temp, 1)) == CONST_INT
          && INTVAL (XEXP (temp, 1)) == GET_MODE_BITSIZE (mode) - 1)
-       return simplify_shift_const (temp, LSHIFTRT, mode, XEXP (temp, 0),
+       return simplify_shift_const (NULL_RTX, LSHIFTRT, mode, XEXP (temp, 0),
                                     INTVAL (XEXP (temp, 1)));
 
       /* If X has only a single bit that might be nonzero, say, bit I, convert
@@ -7103,7 +7103,7 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask,
 
          if ((mask & ~nonzero) == 0)
            {
-             x = simplify_shift_const (x, LSHIFTRT, GET_MODE (x),
+             x = simplify_shift_const (NULL_RTX, LSHIFTRT, GET_MODE (x),
                                        XEXP (x, 0), INTVAL (XEXP (x, 1)));
              if (GET_CODE (x) != ASHIFTRT)
                return force_to_mode (x, mode, mask, next_select);
index 4199859..ec5497d 100644 (file)
@@ -1,3 +1,8 @@
+2006-01-03  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR rtl-optimization/25578
+       * gcc.c-torture/execute/20060102-1.c: New testcase.
+
 2006-01-03  Richard Guenther  <rguenther@suse.de>
 
        PR c/25183
diff --git a/gcc/testsuite/gcc.c-torture/execute/20060102-1.c b/gcc/testsuite/gcc.c-torture/execute/20060102-1.c
new file mode 100644 (file)
index 0000000..def1300
--- /dev/null
@@ -0,0 +1,16 @@
+extern void abort ();
+
+int f(int x)
+{
+  return (x >> 31) ? -1 : 1;
+}
+
+int main (int argc)
+{
+  /* Test that the function above returns different values for
+     different signs.  */
+  if (f(argc) == f(-argc))
+    abort ();
+  return 0;
+}
+