public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/wschmidt/heads/sibfix)] tree-optimization/96565 - improve DSE with paths ending in noreturn
@ 2020-08-28 13:42 William Schmidt
0 siblings, 0 replies; only message in thread
From: William Schmidt @ 2020-08-28 13:42 UTC (permalink / raw)
To: gcc-cvs
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-08-28 13:42 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-28 13:42 [gcc(refs/users/wschmidt/heads/sibfix)] tree-optimization/96565 - improve DSE with paths ending in noreturn William Schmidt
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).