OSDN Git Service

2008-12-02 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Dec 2008 14:49:00 +0000 (14:49 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Dec 2008 14:49:00 +0000 (14:49 +0000)
PR tree-optimization/38359
* fold-const.c (fold_binary): Fold -1 >> x to -1 only for
non-negative x.

* gcc.c-torture/compile/pr38359.c: New testcase.
* gcc.c-torture/execute/shiftopt-1.c: Adjust.

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

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/shiftopt-1.c

index 33b5cfd..843b221 100644 (file)
@@ -1,3 +1,9 @@
+2008-12-02  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/38359
+       * fold-const.c (fold_binary): Fold -1 >> x to -1 only for
+       non-negative x.
+
 2008-12-02  Martin Jambor  <mjambor@suse.cz>
 
        PR middle-end/37861
index 8dddca1..93415d8 100644 (file)
@@ -11457,7 +11457,8 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
 
     case RSHIFT_EXPR:
       /* Optimize -1 >> x for arithmetic right shifts.  */
-      if (integer_all_onesp (arg0) && !TYPE_UNSIGNED (type))
+      if (integer_all_onesp (arg0) && !TYPE_UNSIGNED (type)
+         && tree_expr_nonnegative_p (arg1))
        return omit_one_operand (type, arg0, arg1);
       /* ... fall through ...  */
 
index f64db4d..33d0f86 100644 (file)
@@ -1,3 +1,9 @@
+2008-12-02  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/38359
+       * gcc.c-torture/compile/pr38359.c: New testcase.
+       * gcc.c-torture/execute/shiftopt-1.c: Adjust.
+
 2008-12-02  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/36704
index fa9517a..8c855b8 100644 (file)
@@ -43,12 +43,6 @@ stest (int x)
 
   if (0 >> x != 0)
     link_error ();
-
-  if (-1 >> x != -1)
-    link_error ();
-
-  if (~0 >> x != ~0)
-    link_error ();
 }
 
 int