public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: William Schmidt <wschmidt@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc(refs/users/wschmidt/heads/builtins3)] tree-optimization/96565 - improve DSE with paths ending in noreturn
Date: Fri, 28 Aug 2020 20:03:54 +0000 (GMT)	[thread overview]
Message-ID: <20200828200354.B03C23950CB9@sourceware.org> (raw)

https://gcc.gnu.org/g:989bc4ca2f2978baecff00f6d0532994b82897ef

commit 989bc4ca2f2978baecff00f6d0532994b82897ef
Author: Richard Biener <rguenther@suse.de>
Date:   Wed Aug 26 08:44:59 2020 +0200

    tree-optimization/96565 - improve DSE with paths ending in noreturn
    
    This improves DSEs stmt walking by not considering a DEF without
    uses for further processing (and thus giving up when there's two
    paths to follow).
    
    2020-08-26  Richard Biener  <rguenther@suse.de>
    
            PR tree-optimization/96565
            * tree-ssa-dse.c (dse_classify_store): Remove defs with
            no uses from further processing.
    
            * gcc.dg/tree-ssa/ssa-dse-40.c: New testcase.
            * gcc.dg/builtin-object-size-4.c: Adjust.

Diff:
---
 gcc/testsuite/gcc.dg/builtin-object-size-4.c |  3 +++
 gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-40.c   | 16 ++++++++++++++++
 gcc/tree-ssa-dse.c                           | 11 +++++++++++
 3 files changed, 30 insertions(+)

diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-4.c b/gcc/testsuite/gcc.dg/builtin-object-size-4.c
index c22654dea2a..9f159e36a0f 100644
--- a/gcc/testsuite/gcc.dg/builtin-object-size-4.c
+++ b/gcc/testsuite/gcc.dg/builtin-object-size-4.c
@@ -170,6 +170,9 @@ test1 (void *q, int x)
   r = (char *) L"abcd\0efg";
   if (__builtin_object_size (r + 2, 3) != sizeof (L"abcd\0efg") - 2)
     abort ();
+  /* Prevent DSE from removing calls that prevent bad combining of
+     addresses and offsets.  */
+  asm volatile ("" : : "g" (&a));
 }
 
 size_t l1 = 1;
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-40.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-40.c
new file mode 100644
index 00000000000..36f69c05d5b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-40.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-dse1-details" } */
+
+_Bool g(void);
+
+void f(int x)
+{
+  char arr[x];
+
+  arr[0] = 0;
+
+  if (g())
+    __builtin_abort();
+}
+
+/* { dg-final { scan-tree-dump "Deleted dead store" "dse1" } } */
diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
index cc93f559286..76eed06f17f 100644
--- a/gcc/tree-ssa-dse.c
+++ b/gcc/tree-ssa-dse.c
@@ -898,6 +898,17 @@ dse_classify_store (ao_ref *ref, gimple *stmt,
 		*by_clobber_p = false;
 	      defs.unordered_remove (i);
 	    }
+	  /* If the path ends here we do not need to process it further.
+	     This for example happens with calls to noreturn functions.  */
+	  else if (gimple_code (def) != GIMPLE_PHI
+		   && has_zero_uses (gimple_vdef (def)))
+	    {
+	      /* But if the store is to global memory it is definitely
+		 not dead.  */
+	      if (ref_may_alias_global_p (ref))
+		return DSE_STORE_LIVE;
+	      defs.unordered_remove (i);
+	    }
 	  /* In addition to kills we can remove defs whose only use
 	     is another def in defs.  That can only ever be PHIs of which
 	     we track a single for simplicity reasons (we fail for multiple


                 reply	other threads:[~2020-08-28 20:03 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20200828200354.B03C23950CB9@sourceware.org \
    --to=wschmidt@gcc.gnu.org \
    --cc=gcc-cvs@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).