public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Use lowpart_subreg instead of simplify_gen_subreg
@ 2015-07-26 22:34 Anatoliy Sokolov
  2015-07-27 16:40 ` Jeff Law
  0 siblings, 1 reply; 2+ messages in thread
From: Anatoliy Sokolov @ 2015-07-26 22:34 UTC (permalink / raw)
  To: gcc-patches

Hello.

   This patch change function call simplify_gen_subreg (omode, x, imode,
subreg_lowpart_offset (omode, imode)) with lowpart_subreg (omode, x, imode)
and move lowpart_subreg function from loop-iv.c to simplify-rtx.c.

Bootstrapped and reg-tested on x86_64-unknown-linux-gnu.

OK for trunk?

Anatoliy.

2015-07-26  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.

Index: gcc/cfgexpand.c
===================================================================
--- gcc/cfgexpand.c	(revision 225722)
+++ gcc/cfgexpand.c	(working copy)
@@ -3632,9 +3632,7 @@
      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 @@
  	      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 @@
  	  }
  	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 @@
  	      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 @@
      }
    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: gcc/combine.c
===================================================================
--- gcc/combine.c	(revision 225722)
+++ gcc/combine.c	(working copy)
@@ -11194,10 +11194,8 @@
       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 @@
  	  if (x == NULL)
  	    goto fail;
  	}
-      res = simplify_gen_subreg (omode, x, imode, offset);
+      res = lowpart_subreg (omode, x, imode);
        if (res)
  	return res;
      }
Index: gcc/emit-rtl.c
===================================================================
--- gcc/emit-rtl.c	(revision 225722)
+++ gcc/emit-rtl.c	(working copy)
@@ -1376,7 +1376,6 @@
  {
    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,
@@ -1404,8 +1403,6 @@
    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))
@@ -1428,7 +1425,7 @@
    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);
  OK for trunk?
    /* Otherwise, we can't do this.  */
    return 0;
Index: gcc/expr.c
===================================================================
--- gcc/expr.c	(revision 225722)
+++ gcc/expr.c	(working copy)
@@ -8137,9 +8137,7 @@
  	    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: gcc/loop-iv.c
===================================================================
--- gcc/loop-iv.c	(revision 225722)
+++ gcc/loop-iv.c	(working copy)
@@ -205,17 +205,6 @@
      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: gcc/rtl.h
===================================================================
--- gcc/rtl.h	(revision 225722)
+++ gcc/rtl.h	(working copy)
@@ -2731,10 +2731,6 @@
  			       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 @@
  			    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: gcc/simplify-rtx.c
===================================================================
--- gcc/simplify-rtx.c	(revision 225722)
+++ gcc/simplify-rtx.c	(working copy)
@@ -3196,9 +3196,7 @@
  				     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))
@@ -5976,6 +5974,17 @@
    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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Use lowpart_subreg instead of simplify_gen_subreg
  2015-07-26 22:34 [PATCH] Use lowpart_subreg instead of simplify_gen_subreg Anatoliy Sokolov
@ 2015-07-27 16:40 ` Jeff Law
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Law @ 2015-07-27 16:40 UTC (permalink / raw)
  To: Anatoliy Sokolov, gcc-patches

On 07/26/2015 02:02 PM, Anatoliy Sokolov wrote:
> Hello.
>
>    This patch change function call simplify_gen_subreg (omode, x, imode,
> subreg_lowpart_offset (omode, imode)) with lowpart_subreg (omode, x, imode)
> and move lowpart_subreg function from loop-iv.c to simplify-rtx.c.
>
> Bootstrapped and reg-tested on x86_64-unknown-linux-gnu.
>
> OK for trunk?
>
> Anatoliy.
>
> 2015-07-26  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.
OK.
jeff

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-07-27 16:36 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-26 22:34 [PATCH] Use lowpart_subreg instead of simplify_gen_subreg Anatoliy Sokolov
2015-07-27 16:40 ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).