This patch is like the previous GET_MODE_UNIT_SIZE one,
but for bit rather than byte sizes.

Tested on aarch64-linux-gnu and x86_64-linux-gnu, and by making sure
that there were no differences in testsuite assembly output for one
target per CPU.  OK to install?

Richard


2017-08-23  Richard Sandiford  <richard.sandif...@linaro.org>
            Alan Hayward  <alan.hayw...@arm.com>
            David Sherwood  <david.sherw...@arm.com>

gcc/
        * cfgexpand.c (expand_debug_expr): Use GET_MODE_UNIT_BITSIZE.
        (expand_debug_source_expr): Likewise.
        * combine.c (combine_simplify_rtx): Likewise.
        * cse.c (fold_rtx): Likewise.
        * fwprop.c (canonicalize_address): Likewise.
        * targhooks.c (default_shift_truncation_mask): Likewise.

Index: gcc/cfgexpand.c
===================================================================
--- gcc/cfgexpand.c     2017-08-21 12:14:39.685583530 +0100
+++ gcc/cfgexpand.c     2017-08-23 10:48:32.452867722 +0100
@@ -4331,9 +4331,11 @@ expand_debug_expr (tree exp)
 
        if (FLOAT_MODE_P (mode) && FLOAT_MODE_P (inner_mode))
          {
-           if (GET_MODE_BITSIZE (mode) == GET_MODE_BITSIZE (inner_mode))
+           if (GET_MODE_UNIT_BITSIZE (mode)
+               == GET_MODE_UNIT_BITSIZE (inner_mode))
              op0 = simplify_gen_subreg (mode, op0, inner_mode, 0);
-           else if (GET_MODE_BITSIZE (mode) < GET_MODE_BITSIZE (inner_mode))
+           else if (GET_MODE_UNIT_BITSIZE (mode)
+                    < GET_MODE_UNIT_BITSIZE (inner_mode))
              op0 = simplify_gen_unary (FLOAT_TRUNCATE, mode, op0, inner_mode);
            else
              op0 = simplify_gen_unary (FLOAT_EXTEND, mode, op0, inner_mode);
@@ -5194,9 +5196,11 @@ expand_debug_source_expr (tree exp)
 
   if (FLOAT_MODE_P (mode) && FLOAT_MODE_P (inner_mode))
     {
-      if (GET_MODE_BITSIZE (mode) == GET_MODE_BITSIZE (inner_mode))
+      if (GET_MODE_UNIT_BITSIZE (mode)
+         == GET_MODE_UNIT_BITSIZE (inner_mode))
        op0 = simplify_gen_subreg (mode, op0, inner_mode, 0);
-      else if (GET_MODE_BITSIZE (mode) < GET_MODE_BITSIZE (inner_mode))
+      else if (GET_MODE_UNIT_BITSIZE (mode)
+              < GET_MODE_UNIT_BITSIZE (inner_mode))
        op0 = simplify_gen_unary (FLOAT_TRUNCATE, mode, op0, inner_mode);
       else
        op0 = simplify_gen_unary (FLOAT_EXTEND, mode, op0, inner_mode);
Index: gcc/combine.c
===================================================================
--- gcc/combine.c       2017-08-23 10:47:17.537756580 +0100
+++ gcc/combine.c       2017-08-23 10:48:32.453862693 +0100
@@ -6233,7 +6233,8 @@ combine_simplify_rtx (rtx x, machine_mod
        SUBST (XEXP (x, 1),
               force_to_mode (XEXP (x, 1), GET_MODE (XEXP (x, 1)),
                              (HOST_WIDE_INT_1U
-                              << exact_log2 (GET_MODE_BITSIZE (GET_MODE (x))))
+                              << exact_log2 (GET_MODE_UNIT_BITSIZE
+                                             (GET_MODE (x))))
                              - 1,
                              0));
       break;
Index: gcc/cse.c
===================================================================
--- gcc/cse.c   2017-08-23 10:46:06.552151584 +0100
+++ gcc/cse.c   2017-08-23 10:48:32.454857664 +0100
@@ -3611,7 +3611,7 @@ fold_rtx (rtx x, rtx_insn *insn)
                {
                  if (SHIFT_COUNT_TRUNCATED)
                    canon_const_arg1 = GEN_INT (INTVAL (const_arg1)
-                                               & (GET_MODE_BITSIZE (mode)
+                                               & (GET_MODE_UNIT_BITSIZE (mode)
                                                   - 1));
                  else
                    break;
@@ -3660,7 +3660,8 @@ fold_rtx (rtx x, rtx_insn *insn)
                {
                  if (SHIFT_COUNT_TRUNCATED)
                    inner_const = GEN_INT (INTVAL (inner_const)
-                                          & (GET_MODE_BITSIZE (mode) - 1));
+                                          & (GET_MODE_UNIT_BITSIZE (mode)
+                                             - 1));
                  else
                    break;
                }
@@ -3690,7 +3691,7 @@ fold_rtx (rtx x, rtx_insn *insn)
                  /* As an exception, we can turn an ASHIFTRT of this
                     form into a shift of the number of bits - 1.  */
                  if (code == ASHIFTRT)
-                   new_const = GEN_INT (GET_MODE_BITSIZE (mode) - 1);
+                   new_const = GEN_INT (GET_MODE_UNIT_BITSIZE (mode) - 1);
                  else if (!side_effects_p (XEXP (y, 0)))
                    return CONST0_RTX (mode);
                  else
Index: gcc/fwprop.c
===================================================================
--- gcc/fwprop.c        2017-08-22 17:14:30.336881519 +0100
+++ gcc/fwprop.c        2017-08-23 10:48:32.454857664 +0100
@@ -357,8 +357,8 @@ canonicalize_address (rtx x)
       {
       case ASHIFT:
         if (CONST_INT_P (XEXP (x, 1))
-            && INTVAL (XEXP (x, 1)) < GET_MODE_BITSIZE (GET_MODE (x))
-            && INTVAL (XEXP (x, 1)) >= 0)
+           && INTVAL (XEXP (x, 1)) < GET_MODE_UNIT_BITSIZE (GET_MODE (x))
+           && INTVAL (XEXP (x, 1)) >= 0)
          {
            HOST_WIDE_INT shift = INTVAL (XEXP (x, 1));
            PUT_CODE (x, MULT);
Index: gcc/targhooks.c
===================================================================
--- gcc/targhooks.c     2017-07-27 10:37:54.553030575 +0100
+++ gcc/targhooks.c     2017-08-23 10:48:32.455852635 +0100
@@ -245,7 +245,7 @@ default_unwind_word_mode (void)
 unsigned HOST_WIDE_INT
 default_shift_truncation_mask (machine_mode mode)
 {
-  return SHIFT_COUNT_TRUNCATED ? GET_MODE_BITSIZE (mode) - 1 : 0;
+  return SHIFT_COUNT_TRUNCATED ? GET_MODE_UNIT_BITSIZE (mode) - 1 : 0;
 }
 
 /* The default implementation of TARGET_MIN_DIVISIONS_FOR_RECIP_MUL.  */

Reply via email to