public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Andrew Stubbs <ams@codesourcery.com>
To: Jeff Law <law@redhat.com>, <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH 09/25] Elide repeated RTL elements.
Date: Thu, 20 Sep 2018 11:42:00 -0000	[thread overview]
Message-ID: <518b13b1-febb-8ea3-1f54-497d7299938c@codesourcery.com> (raw)
In-Reply-To: <c841ea09-4d4e-172d-1ce6-44d4e6c4c69d@codesourcery.com>

[-- Attachment #1: Type: text/plain, Size: 389 bytes --]

On 19/09/18 17:38, Andrew Stubbs wrote:
> Here's an updated patch incorporating the RTL front-end changes. I had 
> to change from "repeated 2x" to "repeated x2" because the former is not 
> a valid C token, and apparently that's important.

Here's a patch with self tests added, for both reading and writing.

It also fixes a bug when the repeat was the last item in a list.

OK?

Andrew

[-- Attachment #2: 180920-elide-repeated-RTL-elements.patch --]
[-- Type: text/x-patch, Size: 5451 bytes --]

Elide repeated RTL elements.

GCN's 64-lane vectors tend to make RTL dumps very long.  This patch makes them
far more bearable by eliding long sequences of the same element into "repeated"
messages.

This also takes care of reading repeated sequences in the RTL front-end.

There are self tests for both reading and writing.

2018-09-20  Andrew Stubbs  <ams@codesourcery.com>
	    Jan Hubicka  <jh@suse.cz>
	    Martin Jambor  <mjambor@suse.cz>

	gcc/
	* print-rtl.c (print_rtx_operand_codes_E_and_V): Print how many times
	the same elements are repeated rather than printing all of them.
	* read-rtl.c (rtx_reader::read_rtx_operand): Recognize and expand
	"repeated" elements.
	* read-rtl-function.c (test_loading_repeat): New function.
	(read_rtl_function_c_tests): Call test_loading_repeat.
	* rtl-tests.c (test_dumping_repeat): New function.
	(rtl_tests_c_tests): Call test_dumping_repeat.

	gcc/testsuite/
	* selftests/repeat.rtl: New file.

diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index 5dd2e31..1228483 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -370,7 +370,20 @@ rtx_writer::print_rtx_operand_codes_E_and_V (const_rtx in_rtx, int idx)
 	m_sawclose = 1;
 
       for (int j = 0; j < XVECLEN (in_rtx, idx); j++)
-	print_rtx (XVECEXP (in_rtx, idx, j));
+	{
+	  int j1;
+
+	  print_rtx (XVECEXP (in_rtx, idx, j));
+	  for (j1 = j + 1; j1 < XVECLEN (in_rtx, idx); j1++)
+	    if (XVECEXP (in_rtx, idx, j) != XVECEXP (in_rtx, idx, j1))
+	      break;
+
+	  if (j1 != j + 1)
+	    {
+	      fprintf (m_outfile, " repeated x%i", j1 - j);
+	      j = j1 - 1;
+	    }
+	}
 
       m_indent -= 2;
     }
diff --git a/gcc/read-rtl-function.c b/gcc/read-rtl-function.c
index cde9d3e..8746f70 100644
--- a/gcc/read-rtl-function.c
+++ b/gcc/read-rtl-function.c
@@ -2166,6 +2166,20 @@ test_loading_mem ()
   ASSERT_EQ (6, MEM_ADDR_SPACE (mem2));
 }
 
+/* Verify that "repeated xN" is read correctly.  */
+
+static void
+test_loading_repeat ()
+{
+  rtl_dump_test t (SELFTEST_LOCATION, locate_file ("repeat.rtl"));
+
+  rtx_insn *insn_1 = get_insn_by_uid (1);
+  ASSERT_EQ (PARALLEL, GET_CODE (PATTERN (insn_1)));
+  ASSERT_EQ (64, XVECLEN (PATTERN (insn_1), 0));
+  for (int i = 0; i < 64; i++)
+    ASSERT_EQ (const0_rtx, XVECEXP (PATTERN (insn_1), 0, i));
+}
+
 /* Run all of the selftests within this file.  */
 
 void
@@ -2187,6 +2201,7 @@ read_rtl_function_c_tests ()
   test_loading_cfg ();
   test_loading_bb_index ();
   test_loading_mem ();
+  test_loading_repeat ();
 }
 
 } // namespace selftest
diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c
index 723c3e1..d698dd4 100644
--- a/gcc/read-rtl.c
+++ b/gcc/read-rtl.c
@@ -1690,6 +1690,7 @@ rtx_reader::read_rtx_operand (rtx return_rtx, int idx)
 	struct obstack vector_stack;
 	int list_counter = 0;
 	rtvec return_vec = NULL_RTVEC;
+	rtx saved_rtx = NULL_RTX;
 
 	require_char_ws ('[');
 
@@ -1700,8 +1701,34 @@ rtx_reader::read_rtx_operand (rtx return_rtx, int idx)
 	    if (c == EOF)
 	      fatal_expected_char (']', c);
 	    unread_char (c);
-	    list_counter++;
-	    obstack_ptr_grow (&vector_stack, read_nested_rtx ());
+
+	    rtx value;
+	    int repeat_count = 1;
+	    if (c == 'r')
+	      {
+		/* Process "repeated xN" directive.  */
+		read_name (&name);
+		if (strcmp (name.string, "repeated"))
+		  fatal_with_file_and_line ("invalid directive \"%s\"\n",
+					    name.string);
+		read_name (&name);
+		if (!sscanf (name.string, "x%d", &repeat_count))
+		  fatal_with_file_and_line ("invalid repeat count \"%s\"\n",
+					    name.string);
+
+		/* We already saw one of the instances.  */
+		repeat_count--;
+		value = saved_rtx;
+	      }
+	    else
+	      value = read_nested_rtx ();
+
+	    for (; repeat_count > 0; repeat_count--)
+	      {
+		list_counter++;
+		obstack_ptr_grow (&vector_stack, value);
+	      }
+	    saved_rtx = value;
 	  }
 	if (list_counter > 0)
 	  {
diff --git a/gcc/rtl-tests.c b/gcc/rtl-tests.c
index f67f2a3..c684f8e 100644
--- a/gcc/rtl-tests.c
+++ b/gcc/rtl-tests.c
@@ -284,6 +284,29 @@ const_poly_int_tests<N>::run ()
 	     gen_int_mode (poly_int64 (5, -1), QImode));
 }
 
+/* Check dumping of repeated RTL vectors.  */
+
+static void
+test_dumping_repeat ()
+{
+  rtx p = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (3));
+  XVECEXP (p, 0, 0) = const0_rtx;
+  XVECEXP (p, 0, 1) = const0_rtx;
+  XVECEXP (p, 0, 2) = const0_rtx;
+  ASSERT_RTL_DUMP_EQ ("(parallel [\n"
+		      "        (const_int 0) repeated x3\n"
+		      "    ])",
+		      p);
+
+  XVECEXP (p, 0, 1) = const1_rtx;
+  ASSERT_RTL_DUMP_EQ ("(parallel [\n"
+		      "        (const_int 0)\n"
+		      "        (const_int 1)\n"
+		      "        (const_int 0)\n"
+		      "    ])",
+		      p);
+}
+
 /* Run all of the selftests within this file.  */
 
 void
@@ -295,6 +318,7 @@ rtl_tests_c_tests ()
   test_single_set ();
   test_uncond_jump ();
   const_poly_int_tests<NUM_POLY_INT_COEFFS>::run ();
+  test_dumping_repeat ();
 
   /* Purge state.  */
   set_first_insn (NULL);
diff --git a/gcc/testsuite/selftests/repeat.rtl b/gcc/testsuite/selftests/repeat.rtl
new file mode 100644
index 0000000..5507d33
--- /dev/null
+++ b/gcc/testsuite/selftests/repeat.rtl
@@ -0,0 +1,11 @@
+(function "repeat_examples"
+  (insn-chain
+    (block 2
+      (edge-from entry (flags "FALLTHRU"))
+      (cinsn 1
+        (parallel [(const_int 0) repeated x64])
+        "test.c":2 (nil))
+      (edge-to exit (flags "FALLTHRU"))
+    ) ;; block 2
+  ) ;; insn-chain
+) ;; function

  reply	other threads:[~2018-09-20 10:53 UTC|newest]

Thread overview: 187+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-05 11:49 [PATCH 00/25] AMD GCN Port ams
2018-09-05 11:49 ` [PATCH 04/25] SPECIAL_REGNO_P ams
2018-09-05 12:21   ` Joseph Myers
2018-09-11 22:42   ` Jeff Law
2018-09-12 11:30     ` Andrew Stubbs
2018-09-13 10:03       ` Andrew Stubbs
2018-09-13 14:14         ` Andrew Stubbs
2018-09-13 14:39           ` Paul Koning
2018-09-13 14:49             ` Andrew Stubbs
2018-09-13 14:58               ` Paul Koning
2018-09-13 15:22                 ` Andrew Stubbs
2018-09-13 17:13                   ` Paul Koning
2018-09-17 22:59           ` Jeff Law
2018-10-04 19:13         ` Jeff Law
2018-09-12 15:31   ` Richard Henderson
2018-09-12 16:14     ` Andrew Stubbs
2018-09-05 11:49 ` [PATCH 02/25] Propagate address spaces to builtins ams
2018-09-20 13:09   ` Richard Biener
2018-09-22 19:22   ` Andreas Schwab
2018-09-24 16:53     ` Andrew Stubbs
2018-09-24 17:40       ` Andreas Schwab
2018-09-25 14:27     ` [patch] Fix AArch64 ILP ICE Andrew Stubbs
2018-09-26  8:55       ` Andreas Schwab
2018-09-26 13:39       ` Richard Biener
2018-09-26 16:17         ` Andrew Stubbs
2019-09-03 14:01   ` [PATCH 02/25] Propagate address spaces to builtins Kyrill Tkachov
2019-09-03 15:00     ` Jeff Law
2019-09-04 14:21       ` Kyrill Tkachov
2019-09-04 15:29         ` Kyrill Tkachov
2019-09-03 15:43     ` Andrew Stubbs
2018-09-05 11:49 ` [PATCH 05/25] Add sorry_at diagnostic function ams
2018-09-05 13:39   ` David Malcolm
2018-09-05 13:41     ` David Malcolm
2018-09-11 10:30       ` Andrew Stubbs
2018-09-05 11:49 ` [PATCH 01/25] Handle vectors that don't fit in an integer ams
2018-09-05 11:54   ` Jakub Jelinek
2018-09-14 16:03   ` Richard Sandiford
2018-11-15 17:20     ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 09/25] Elide repeated RTL elements ams
2018-09-11 22:46   ` Jeff Law
2018-09-12  8:47     ` Andrew Stubbs
2018-09-12 15:14       ` Jeff Law
2018-09-19 17:25     ` Andrew Stubbs
2018-09-20 11:42       ` Andrew Stubbs [this message]
2018-09-26 16:23         ` Andrew Stubbs
2018-10-04 18:24         ` Jeff Law
2018-10-11 14:28           ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 06/25] Remove constant vec_select restriction ams
2018-09-11 22:44   ` Jeff Law
2018-09-05 11:50 ` [PATCH 08/25] Fix co-array allocation ams
     [not found]   ` <7f5064c3-afc6-b7b5-cade-f03af5b86331@moene.org>
2018-09-05 18:07     ` Janne Blomqvist
2018-09-19 16:38       ` Andrew Stubbs
2018-09-19 22:27         ` Damian Rouson
2018-09-19 22:55           ` Andrew Stubbs
2018-09-20  1:21             ` Damian Rouson
2018-09-20 20:49           ` Thomas Koenig
2018-09-20 20:59             ` Damian Rouson
2018-09-21  7:38             ` Toon Moene
2018-09-23 11:57               ` Janne Blomqvist
2018-09-21 16:37             ` OpenCoarrays integration with gfortran Jerry DeLisle
2018-09-21 19:37               ` Janne Blomqvist
2018-09-21 19:44               ` Richard Biener
2018-09-21 20:25               ` Damian Rouson
2018-09-22  3:47                 ` Jerry DeLisle
2018-09-23 10:41                   ` Toon Moene
2018-09-23 18:03                     ` Bernhard Reutner-Fischer
2018-09-24 11:14                     ` Alastair McKinstry
2018-09-27 12:51                       ` Richard Biener
2018-09-20 15:59         ` [PATCH 08/25] Fix co-array allocation Janne Blomqvist
2018-09-20 16:37           ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 07/25] [pr82089] Don't sign-extend SFV 1 in BImode ams
2018-09-17  8:46   ` Richard Sandiford
2018-09-26 15:52     ` Andrew Stubbs
2018-09-26 16:49       ` Richard Sandiford
2018-09-27 12:20         ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 12/25] Make default_static_chain return NULL in non-static functions ams
2018-09-17 18:55   ` Richard Sandiford
2018-09-28 14:23     ` Andrew Stubbs
2018-09-05 11:50 ` [PATCH 03/25] Improve TARGET_MANGLE_DECL_ASSEMBLER_NAME ams
2018-09-11 22:56   ` Jeff Law
2018-09-12 14:43     ` Richard Biener
2018-09-12 15:07       ` Jeff Law
2018-09-12 15:16         ` Richard Biener
2018-09-12 16:32           ` Andrew Stubbs
2018-09-12 17:39             ` Julian Brown
2018-09-15  6:01               ` Julian Brown
2018-09-19 15:23                 ` Julian Brown
2018-09-20 12:36                   ` Richard Biener
2018-09-05 11:50 ` [PATCH 10/25] Convert BImode vectors ams
2018-09-05 11:56   ` Jakub Jelinek
2018-09-05 12:05   ` Richard Biener
2018-09-05 12:40     ` Andrew Stubbs
2018-09-05 12:44       ` Richard Biener
2018-09-11 14:36         ` Andrew Stubbs
2018-09-12 14:37           ` Richard Biener
2018-09-17  8:51   ` Richard Sandiford
2018-09-05 11:51 ` [PATCH 17/25] Fix Fortran STOP ams
     [not found]   ` <c0630914-1252-1391-9bf9-f03434d46f5a@moene.org>
2018-09-05 18:09     ` Janne Blomqvist
2018-09-12 13:56       ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 14/25] Disable inefficient vectorization of elementwise loads/stores ams
2018-09-17  9:16   ` Richard Sandiford
2018-09-17  9:54     ` Andrew Stubbs
2018-09-17 12:40       ` Richard Sandiford
2018-09-17 12:46         ` Andrew Stubbs
2018-09-20 13:01           ` Richard Biener
2018-09-20 13:51             ` Richard Sandiford
2018-09-20 14:14               ` Richard Biener
2018-09-20 14:22                 ` Richard Sandiford
2018-09-05 11:51 ` [PATCH 13/25] Create TARGET_DISABLE_CURRENT_VECTOR_SIZE ams
2018-09-17 19:31   ` Richard Sandiford
2018-09-18  9:02     ` Andrew Stubbs
2018-09-18 11:30       ` Richard Sandiford
2018-09-18 20:27         ` Andrew Stubbs
2018-09-19 13:46           ` Richard Biener
2018-09-28 12:48             ` Andrew Stubbs
2018-10-01  8:05               ` Richard Biener
2018-09-05 11:51 ` [PATCH 16/25] Fix IRA ICE ams
2018-09-17  9:36   ` Richard Sandiford
2018-09-18 22:00     ` Andrew Stubbs
2018-09-20 12:47       ` Richard Sandiford
2018-09-20 13:36         ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 11/25] Simplify vec_merge according to the mask ams
2018-09-17  9:08   ` Richard Sandiford
2018-09-20 15:44     ` Andrew Stubbs
2018-09-26 16:26       ` Andrew Stubbs
2018-09-26 16:50       ` Richard Sandiford
2018-09-26 17:06         ` Andrew Stubbs
2018-09-27  7:28           ` Richard Sandiford
2018-09-27 14:13             ` Andrew Stubbs
2018-09-27 16:28               ` Richard Sandiford
2018-09-27 21:14                 ` Andrew Stubbs
2018-09-28  8:42                   ` Richard Sandiford
2018-09-28 13:50                     ` Andrew Stubbs
2019-02-22  3:40                       ` H.J. Lu
2018-09-05 11:51 ` [PATCH 15/25] Don't double-count early-clobber matches ams
2018-09-17  9:22   ` Richard Sandiford
2018-09-27 22:54     ` Andrew Stubbs
2018-10-04 22:43       ` Richard Sandiford
2018-10-22 15:36         ` Andrew Stubbs
2018-09-05 11:51 ` [PATCH 18/25] Fix interleaving of Fortran stop messages ams
     [not found]   ` <994a9ec6-2494-9a83-cc84-bd8a551142c5@moene.org>
2018-09-05 18:11     ` Janne Blomqvist
2018-09-12 13:55       ` Andrew Stubbs
2018-09-05 11:52 ` [PATCH 20/25] GCN libgcc ams
2018-09-05 12:32   ` Joseph Myers
2018-11-09 18:49   ` Jeff Law
2018-11-12 12:01     ` Andrew Stubbs
2018-09-05 11:52 ` [PATCH 24/25] Ignore LLVM's blank lines ams
2018-09-14 16:19   ` Jeff Law
2020-03-23 15:29     ` Thomas Schwinge
2020-03-24 21:05       ` Thomas Schwinge
2018-09-05 11:52 ` [PATCH 22/25] Add dg-require-effective-target exceptions ams
2018-09-17  9:40   ` Richard Sandiford
2018-09-17 17:53   ` Mike Stump
2018-09-20 16:10     ` Andrew Stubbs
2018-09-05 11:52 ` [PATCH 23/25] Testsuite: GCN is always PIE ams
2018-09-14 16:39   ` Jeff Law
2018-09-05 11:52 ` [PATCH 19/25] GCN libgfortran ams
     [not found]   ` <41281e27-ad85-e50c-8fed-6f4f6f18289c@moene.org>
2018-09-05 18:14     ` Janne Blomqvist
2018-09-06 12:37       ` Andrew Stubbs
2018-09-11 22:47   ` Jeff Law
2018-09-05 11:53 ` [PATCH 25/25] Port testsuite to GCN ams
2018-09-05 13:40 ` [PATCH 21/25] GCN Back-end (part 1/2) Andrew Stubbs
2018-11-09 19:11   ` Jeff Law
2018-11-12 12:13     ` Andrew Stubbs
2018-09-05 13:43 ` [PATCH 21/25] GCN Back-end (part 2/2) Andrew Stubbs
2018-09-05 14:22   ` Joseph Myers
2018-09-05 14:35     ` Andrew Stubbs
2018-09-05 14:44       ` Joseph Myers
2018-09-11 16:25         ` Andrew Stubbs
2018-09-11 16:41           ` Joseph Myers
2018-09-12 13:42     ` Andrew Stubbs
2018-09-12 15:32       ` Joseph Myers
2018-09-12 16:46         ` Andrew Stubbs
2018-09-12 16:50           ` Joseph Myers
2018-11-09 19:40   ` Jeff Law
2018-11-12 12:53     ` Andrew Stubbs
2018-11-12 17:20       ` Segher Boessenkool
2018-11-12 17:52         ` Andrew Stubbs
2018-11-12 18:33           ` Segher Boessenkool
2018-11-12 18:55           ` Jeff Law
2018-11-13 10:23             ` Andrew Stubbs
2018-11-13 10:33               ` Segher Boessenkool
2018-11-16 16:10             ` Segher Boessenkool
2018-11-17 14:07               ` Segher Boessenkool
2018-11-14 22:31       ` Jeff Law
2018-11-15  9:55         ` Andrew Stubbs
2018-11-16 13:33           ` Andrew Stubbs

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=518b13b1-febb-8ea3-1f54-497d7299938c@codesourcery.com \
    --to=ams@codesourcery.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=law@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).