OSDN Git Service

* cse.c (simplify_relational_operation): If MODE specifies a
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Sep 1997 21:37:39 +0000 (21:37 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Sep 1997 21:37:39 +0000 (21:37 +0000)
        mode wider than HOST_WIDE_INT, then the high word of a CONST_INT
        is derived from the sign bit of the low word.

Brought over from r5900 branch.

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

gcc/ChangeLog
gcc/cse.c

index 7d5badd..f3b148c 100644 (file)
@@ -1,3 +1,9 @@
+Mon Sep 15 15:39:26 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * cse.c (simplify_relational_operation): If MODE specifies a
+       mode wider than HOST_WIDE_INT, then the high word of a CONST_INT
+       is derived from the sign bit of the low word.
+
 1997-09-15  Brendan Kehoe  <brendan@cygnus.com>
 
        * except.c (find_exception_handler_labels): Use xmalloc instead of
index 71bc358..9bcdcc3 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4482,7 +4482,14 @@ simplify_relational_operation (code, mode, op0, op1)
       else
        {
          l0u = l0s = INTVAL (op0);
-         h0u = 0, h0s = l0s < 0 ? -1 : 0;
+         h0s = l0s < 0 ? -1 : 0;
+         /* If WIDTH is nonzero and larger than HOST_BITS_PER_WIDE_INT,
+            then the high word is derived from the sign bit of the low
+            word, else the high word is zero.  */
+         if (width != 0 && width > HOST_BITS_PER_WIDE_INT)
+           h0u = l0s < 0 ? -1 : 0;
+         else
+           h0u = 0;
        }
          
       if (GET_CODE (op1) == CONST_DOUBLE)
@@ -4493,7 +4500,14 @@ simplify_relational_operation (code, mode, op0, op1)
       else
        {
          l1u = l1s = INTVAL (op1);
-         h1u = 0, h1s = l1s < 0 ? -1 : 0;
+         h1s = l1s < 0 ? -1 : 0;
+         /* If WIDTH is nonzero and larger than HOST_BITS_PER_WIDE_INT,
+            then the high word is derived from the sign bit of the low
+            word, else the high word is zero.  */
+         if (width != 0 && width > HOST_BITS_PER_WIDE_INT)
+           h1u = l1s < 0 ? -1 : 0;
+         else
+           h1u = 0;
        }
 
       /* If WIDTH is nonzero and smaller than HOST_BITS_PER_WIDE_INT,