combine.c (force_to_mode): Set fuller_mask based only on mask, not op_mode.
authorIan Lance Taylor <ian@wasabisystems.com>
Thu, 11 Sep 2003 04:44:23 +0000 (04:44 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 11 Sep 2003 04:44:23 +0000 (04:44 +0000)
* combine.c (force_to_mode): Set fuller_mask based only on mask,
not op_mode.

From-SVN: r71292

gcc/ChangeLog
gcc/combine.c

index 3a68a05..f6e1b35 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-10  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * combine.c (force_to_mode): Set fuller_mask based only on mask,
+       not op_mode.
+
 Thu Sep 11 01:21:05 CEST 2003  Jan Hubicka  <jh@suse.cz>
 
        * c-objc-common.c (c_cannot_inline_tree_fn): Warn
index 0853a2c..5f005e4 100644 (file)
@@ -6833,15 +6833,13 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask,
     mask &= GET_MODE_MASK (op_mode);
 
   /* When we have an arithmetic operation, or a shift whose count we
-     do not know, we need to assume that all bit the up to the highest-order
+     do not know, we need to assume that all bits up to the highest-order
      bit in MASK will be needed.  This is how we form such a mask.  */
-  if (op_mode)
-    fuller_mask = (GET_MODE_BITSIZE (op_mode) >= HOST_BITS_PER_WIDE_INT
-                  ? GET_MODE_MASK (op_mode)
-                  : (((unsigned HOST_WIDE_INT) 1 << (floor_log2 (mask) + 1))
-                     - 1));
+  if (mask & ((unsigned HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT - 1)))
+    fuller_mask = ~(unsigned HOST_WIDE_INT) 0;
   else
-    fuller_mask = ~(HOST_WIDE_INT) 0;
+    fuller_mask = (((unsigned HOST_WIDE_INT) 1 << (floor_log2 (mask) + 1))
+                  - 1);
 
   /* Determine what bits of X are guaranteed to be (non)zero.  */
   nonzero = nonzero_bits (x, mode);