OSDN Git Service

* rtlanal.c (nonzero_bits1): Use the mode of the value for
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Jun 2005 22:24:12 +0000 (22:24 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Jun 2005 22:24:12 +0000 (22:24 +0000)
        determining integral-ness for comparisons.

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

gcc/ChangeLog
gcc/rtlanal.c

index 34b0960..6332722 100644 (file)
@@ -1,3 +1,8 @@
+2005-06-28  Richard Henderson  <rth@redhat.com>
+
+       * rtlanal.c (nonzero_bits1): Use the mode of the value for
+       determining integral-ness for comparisons.
+
 2005-06-28  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * config/rs6000/rs6000.md (setmemsi): Fix operand 2.
index 25aefd5..6a3be0e 100644 (file)
@@ -3657,12 +3657,14 @@ nonzero_bits1 (rtx x, enum machine_mode mode, rtx known_x,
     case GE:  case GEU:  case UNGE:
     case LE:  case LEU:  case UNLE:
     case UNORDERED: case ORDERED:
-
       /* If this produces an integer result, we know which bits are set.
         Code here used to clear bits outside the mode of X, but that is
         now done above.  */
-
-      if (GET_MODE_CLASS (mode) == MODE_INT
+      /* Mind that MODE is the mode the caller wants to look at this 
+        operation in, and not the actual operation mode.  We can wind 
+        up with (subreg:DI (gt:V4HI x y)), and we don't have anything
+        that describes the results of a vector compare.  */
+      if (GET_MODE_CLASS (GET_MODE (x)) == MODE_INT
          && mode_width <= HOST_BITS_PER_WIDE_INT)
        nonzero = STORE_FLAG_VALUE;
       break;