public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: <apinski@marvell.com>
To: <gcc-patches@gcc.gnu.org>
Cc: Andrew Pinski <apinski@marvell.com>
Subject: [PATCH 4/4] Improve maybe_remove_writeonly_store to do a simple DCE for defining statement
Date: Mon, 18 Oct 2021 21:54:04 -0700	[thread overview]
Message-ID: <1634619244-18969-5-git-send-email-apinski@marvell.com> (raw)
In-Reply-To: <1634619244-18969-1-git-send-email-apinski@marvell.com>

From: Andrew Pinski <apinski@marvell.com>

Instead of putting a full blow DCE after execute_fixup_cfg, it makes sense
to try to remove the defining statement for the store that is being removed.
Right now we only handle PHI node statements as there needs no extra checks
except for it is only used once in the store statement.

gcc/ChangeLog:

	* tree-cfg.c (maybe_remove_writeonly_store): Remove defining
	(PHI) statement of the store if possible.
---
 gcc/tree-cfg.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index dbbf6beb6e4..d9efdc220ca 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -9692,6 +9692,41 @@ maybe_remove_writeonly_store (gimple_stmt_iterator &gsi, gimple *stmt)
       print_gimple_stmt (dump_file, stmt, 0,
 			 TDF_VOPS|TDF_MEMSYMS);
     }
+
+  /* Remove the statement defining the rhs if it was only
+     used by this statement. */
+  if (gimple_assign_single_p (stmt))
+    {
+      tree rhs = gimple_assign_rhs1 (stmt);
+      gimple *use_stmt;
+      use_operand_p use_p;
+      gimple *stmt1;
+
+
+      if (TREE_CODE (rhs) == SSA_NAME
+	  && single_imm_use (rhs, &use_p, &use_stmt)
+	  && (stmt1 = SSA_NAME_DEF_STMT (rhs))
+	  /* For now only handle PHI nodes.
+	     FIXME: this should handle more. */
+	  && gimple_code (stmt1) == GIMPLE_PHI)
+	{
+	  if (dump_file && (dump_flags & TDF_DETAILS))
+	    {
+	      fprintf (dump_file, "Removing defining statement:\n");
+	      print_gimple_stmt (dump_file, stmt1, 0,
+				 TDF_VOPS|TDF_MEMSYMS);
+	    }
+	  gimple_stmt_iterator gsi_for_def;
+	  gsi_for_def = gsi_for_stmt (stmt1);
+	  if (gimple_code (stmt1) == GIMPLE_PHI)
+	    remove_phi_node (&gsi_for_def, true);
+	  else
+	    {
+	      gsi_remove (&gsi_for_def, true);
+	      release_defs (stmt1);
+	    }
+	}
+    }
   unlink_stmt_vdef (stmt);
   gsi_remove (&gsi, true);
   release_defs (stmt);
-- 
2.17.1


  parent reply	other threads:[~2021-10-19  4:54 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-19  4:54 [PATCH 0/4] Fix PR tree-opt/102703 apinski
2021-10-19  4:54 ` [PATCH 1/4] Add dump prints when execute_fixup_cfg removes a write only var store apinski
2021-10-19 23:10   ` Jeff Law
2021-10-19  4:54 ` [PATCH 2/4] Remove outdated comment about execute_fixup_cfg apinski
2021-10-19 23:10   ` Jeff Law
2021-10-19  4:54 ` [PATCH 3/4] Factor out removal of write only stores from execute_fixup_cfg apinski
2021-10-19 23:11   ` Jeff Law
2021-10-19  4:54 ` apinski [this message]
2021-10-19 23:13   ` [PATCH 4/4] Improve maybe_remove_writeonly_store to do a simple DCE for defining statement Jeff Law
2021-10-20  6:58     ` Richard Biener
2021-10-20 19:53       ` Jeff Law
2021-10-20 19:57         ` Andrew Pinski

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=1634619244-18969-5-git-send-email-apinski@marvell.com \
    --to=apinski@marvell.com \
    --cc=gcc-patches@gcc.gnu.org \
    /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).