Use lowpart_subreg instead of simplify_gen_subreg
authoraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Jul 2015 21:25:29 +0000 (21:25 +0000)
committeraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Jul 2015 21:25:29 +0000 (21:25 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@226417 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfgexpand.c
gcc/combine.c
gcc/emit-rtl.c
gcc/expr.c
gcc/loop-iv.c
gcc/rtl.h
gcc/simplify-rtx.c

index af6b1b4..1eca23d 100644 (file)
@@ -1,3 +1,16 @@
+2015-07-30  Anatoly Sokolov  <aesok@post.ru>
+
+       * rtl.h (lowpart_subreg): Move in file.
+       * loop-iv.c (lowpart_subreg): Move to...
+       * simplify-rtx.c (lowpart_subreg): ...here.
+         (simplify_binary_operation_1): Use lowpart_subreg instead of
+         simplify_gen_subreg.
+       * expr.c (expand_expr_real_2): Ditto.
+       * emit-rtl.c (gen_lowpart_common): Ditto.
+       * combine.c (gen_lowpart_for_combine): Ditto.
+       * cfgexpand.c (convert_debug_memory_address, expand_debug_expr,
+         expand_debug_source_expr): Ditto.
+
 2015-07-30  Richard Sandiford  <richard.sandiford@arm.com>
 
        * builtins.c (HAVE_atomic_clear, gen_atomic_clear): Delete.
index a047632..8ff79ab 100644 (file)
@@ -3632,9 +3632,7 @@ convert_debug_memory_address (machine_mode mode, rtx x,
     return x;
 
   if (GET_MODE_PRECISION (mode) < GET_MODE_PRECISION (xmode))
-    x = simplify_gen_subreg (mode, x, xmode,
-                            subreg_lowpart_offset
-                            (mode, xmode));
+    x = lowpart_subreg (mode, x, xmode);
   else if (POINTERS_EXTEND_UNSIGNED > 0)
     x = gen_rtx_ZERO_EXTEND (mode, x);
   else if (!POINTERS_EXTEND_UNSIGNED)
@@ -3850,9 +3848,7 @@ expand_debug_expr (tree exp)
              if (SCALAR_INT_MODE_P (opmode)
                  && (GET_MODE_PRECISION (opmode)
                      < GET_MODE_PRECISION (inner_mode)))
-               op1 = simplify_gen_subreg (opmode, op1, inner_mode,
-                                          subreg_lowpart_offset (opmode,
-                                                                 inner_mode));
+               op1 = lowpart_subreg (opmode, op1, inner_mode);
            }
          break;
        default:
@@ -4011,9 +4007,7 @@ expand_debug_expr (tree exp)
          }
        else if (CONSTANT_P (op0)
                 || GET_MODE_PRECISION (mode) <= GET_MODE_PRECISION (inner_mode))
-         op0 = simplify_gen_subreg (mode, op0, inner_mode,
-                                    subreg_lowpart_offset (mode,
-                                                           inner_mode));
+         op0 = lowpart_subreg (mode, op0, inner_mode);
        else if (UNARY_CLASS_P (exp)
                 ? TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))
                 : unsignedp)
@@ -4141,9 +4135,7 @@ expand_debug_expr (tree exp)
              offmode = TYPE_MODE (TREE_TYPE (offset));
 
            if (addrmode != offmode)
-             op1 = simplify_gen_subreg (addrmode, op1, offmode,
-                                        subreg_lowpart_offset (addrmode,
-                                                               offmode));
+             op1 = lowpart_subreg (addrmode, op1, offmode);
 
            /* Don't use offset_address here, we don't need a
               recognizable address, and we don't want to generate
@@ -4868,8 +4860,7 @@ expand_debug_source_expr (tree exp)
     }
   else if (CONSTANT_P (op0)
           || GET_MODE_BITSIZE (mode) <= GET_MODE_BITSIZE (inner_mode))
-    op0 = simplify_gen_subreg (mode, op0, inner_mode,
-                              subreg_lowpart_offset (mode, inner_mode));
+    op0 = lowpart_subreg (mode, op0, inner_mode);
   else if (TYPE_UNSIGNED (TREE_TYPE (exp)))
     op0 = simplify_gen_unary (ZERO_EXTEND, mode, op0, inner_mode);
   else
index e47cbc4..4a92f55 100644 (file)
@@ -11194,10 +11194,8 @@ gen_lowpart_for_combine (machine_mode omode, rtx x)
      include an explicit SUBREG or we may simplify it further in combine.  */
   else
     {
-      int offset = 0;
       rtx res;
 
-      offset = subreg_lowpart_offset (omode, imode);
       if (imode == VOIDmode)
        {
          imode = int_mode_for_mode (omode);
@@ -11205,7 +11203,7 @@ gen_lowpart_for_combine (machine_mode omode, rtx x)
          if (x == NULL)
            goto fail;
        }
-      res = simplify_gen_subreg (omode, x, imode, offset);
+      res = lowpart_subreg (omode, x, imode);
       if (res)
        return res;
     }
index caa33b8..d211e6b 100644 (file)
@@ -1377,7 +1377,6 @@ gen_lowpart_common (machine_mode mode, rtx x)
 {
   int msize = GET_MODE_SIZE (mode);
   int xsize;
-  int offset = 0;
   machine_mode innermode;
 
   /* Unfortunately, this routine doesn't take a parameter for the mode of X,
@@ -1405,8 +1404,6 @@ gen_lowpart_common (machine_mode mode, rtx x)
   if (SCALAR_FLOAT_MODE_P (mode) && msize > xsize)
     return 0;
 
-  offset = subreg_lowpart_offset (mode, innermode);
-
   if ((GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND)
       && (GET_MODE_CLASS (mode) == MODE_INT
          || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT))
@@ -1429,7 +1426,7 @@ gen_lowpart_common (machine_mode mode, rtx x)
   else if (GET_CODE (x) == SUBREG || REG_P (x)
           || GET_CODE (x) == CONCAT || GET_CODE (x) == CONST_VECTOR
           || CONST_DOUBLE_AS_FLOAT_P (x) || CONST_SCALAR_INT_P (x))
-    return simplify_gen_subreg (mode, x, innermode, offset);
+    return lowpart_subreg (mode, x, innermode);
 
   /* Otherwise, we can't do this.  */
   return 0;
index 899a42c..46084c2 100644 (file)
@@ -8137,9 +8137,7 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
            inner_mode = TYPE_MODE (inner_type);
 
          if (modifier == EXPAND_INITIALIZER)
-           op0 = simplify_gen_subreg (mode, op0, inner_mode,
-                                      subreg_lowpart_offset (mode,
-                                                             inner_mode));
+           op0 = lowpart_subreg (mode, op0, inner_mode);
          else
            op0=  convert_modes (mode, inner_mode, op0,
                                 TYPE_UNSIGNED (inner_type));
index cafde4a..6e9cc8c 100644 (file)
@@ -205,17 +205,6 @@ dump_iv_info (FILE *file, struct rtx_iv *iv)
     fprintf (file, " (first special)");
 }
 
-/* Generates a subreg to get the least significant part of EXPR (in mode
-   INNER_MODE) to OUTER_MODE.  */
-
-rtx
-lowpart_subreg (machine_mode outer_mode, rtx expr,
-               machine_mode inner_mode)
-{
-  return simplify_gen_subreg (outer_mode, expr, inner_mode,
-                             subreg_lowpart_offset (outer_mode, inner_mode));
-}
-
 static void
 check_iv_ref_table_size (void)
 {
index f363ed4..5e02397 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2731,10 +2731,6 @@ extern rtx immed_double_const (HOST_WIDE_INT, HOST_WIDE_INT,
                               machine_mode);
 #endif
 
-/* In loop-iv.c  */
-
-extern rtx lowpart_subreg (machine_mode, rtx, machine_mode);
-
 /* In varasm.c  */
 extern rtx force_const_mem (machine_mode, rtx);
 
@@ -2866,6 +2862,7 @@ extern rtx simplify_subreg (machine_mode, rtx, machine_mode,
                            unsigned int);
 extern rtx simplify_gen_subreg (machine_mode, rtx, machine_mode,
                                unsigned int);
+extern rtx lowpart_subreg (machine_mode, rtx, machine_mode);
 extern rtx simplify_replace_fn_rtx (rtx, const_rtx,
                                    rtx (*fn) (rtx, const_rtx, void *), void *);
 extern rtx simplify_replace_rtx (rtx, const_rtx, rtx);
index 1f60371..ad003d8 100644 (file)
@@ -3224,9 +3224,7 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode,
                                     GET_MODE (SUBREG_REG (op0)),
                                     XEXP (SUBREG_REG (op0), 0),
                                     tmp);
-         return simplify_gen_subreg (mode, tmp, inner_mode,
-                                     subreg_lowpart_offset (mode,
-                                                            inner_mode));
+         return lowpart_subreg (mode, tmp, inner_mode);
        }
     canonicalize_shift:
       if (SHIFT_COUNT_TRUNCATED && CONST_INT_P (op1))
@@ -6027,6 +6025,17 @@ simplify_gen_subreg (machine_mode outermode, rtx op,
   return NULL_RTX;
 }
 
+/* Generates a subreg to get the least significant part of EXPR (in mode
+   INNER_MODE) to OUTER_MODE.  */
+
+rtx
+lowpart_subreg (machine_mode outer_mode, rtx expr,
+                            machine_mode inner_mode)
+{
+  return simplify_gen_subreg (outer_mode, expr, inner_mode,
+                             subreg_lowpart_offset (outer_mode, inner_mode));
+}
+
 /* Simplify X, an rtx expression.
 
    Return the simplified expression or NULL if no simplifications