]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
combine.c (reg_nonzero_bits_for_combine): Apply mask transformation as applied to...
authorPaulo Matos <pmatos@broadcom.com>
Sat, 30 Nov 2013 11:13:07 +0000 (11:13 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 30 Nov 2013 11:13:07 +0000 (11:13 +0000)
* combine.c (reg_nonzero_bits_for_combine): Apply mask transformation
as applied to nonzero_sign_valid when last_set_mode has less precision
than mode.

Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com>
From-SVN: r205550

gcc/ChangeLog
gcc/combine.c

index 3e117263db5e88f4b064475f1cbfde83565d13c1..ca7b3e85641eebd7a879f05f774d895a695d2298 100644 (file)
@@ -1,3 +1,10 @@
+2013-11-30  Paulo Matos  <pmatos@broadcom.com>
+           Eric Botcazou  <ebotcazou@adacore.com>
+
+       * combine.c (reg_nonzero_bits_for_combine): Apply mask transformation
+       as applied to nonzero_sign_valid when last_set_mode has less precision
+       than mode.
+
 2013-11-30  Tobias Burnus  <burnus@net-b.de>
 
        PR sanitizer/59275
index d685a7f6a660acb66b4782193bb3a52f4ec0cdeb..25cf273f8080e52a7a477026801462c5112c00cd 100644 (file)
@@ -9472,7 +9472,13 @@ reg_nonzero_bits_for_combine (const_rtx x, enum machine_mode mode,
                  (DF_LR_IN (ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb),
                   REGNO (x)))))
     {
-      *nonzero &= rsp->last_set_nonzero_bits;
+      unsigned HOST_WIDE_INT mask = rsp->last_set_nonzero_bits;
+
+      if (GET_MODE_PRECISION (rsp->last_set_mode) < GET_MODE_PRECISION (mode))
+       /* We don't know anything about the upper bits.  */
+       mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (rsp->last_set_mode);
+
+      *nonzero &= mask;
       return NULL;
     }
 
@@ -9505,6 +9511,7 @@ reg_nonzero_bits_for_combine (const_rtx x, enum machine_mode mode,
       if (GET_MODE_PRECISION (GET_MODE (x)) < GET_MODE_PRECISION (mode))
        /* We don't know anything about the upper bits.  */
        mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (GET_MODE (x));
+
       *nonzero &= mask;
     }