On October 2, 2017 3:51:04 PM GMT+02:00, Jakub Jelinek <ja...@redhat.com> wrote: >Hi! > >live_bytes is non-NULL always, m_live_bytes is auto_sbitmap that is >constructed in dse_dom_walker ctor: > dse_dom_walker (cdi_direction direction) > : dom_walker (direction), > m_live_bytes (PARAM_VALUE (PARAM_DSE_MAX_OBJECT_SIZE)), > m_byte_tracking_enabled (false) {} >Whether live_bytes tracks anything right now or not is determined by >byte_tracking_enabled flag. > >Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok >for >trunk?
OK. Richard. >2017-10-02 Jakub Jelinek <ja...@redhat.com> > > PR tree-optimization/82387 > PR tree-optimization/82388 > PR tree-optimization/82389 > * tree-ssa-dse.c (dse_classify_store): Test byte_tracking_enabled > instead of live_bytes non-NULL. > > * gcc.c-torture/compile/pr82389.c: New test. > * gcc.c-torture/execute/pr82387.c: New test. > * gcc.c-torture/execute/pr82388.c: New test. > >--- gcc/tree-ssa-dse.c.jj 2017-09-29 23:05:40.000000000 +0200 >+++ gcc/tree-ssa-dse.c 2017-10-02 11:04:56.231304016 +0200 >@@ -577,10 +577,10 @@ dse_classify_store (ao_ref *ref, gimple > /* If the statement is a use the store is not dead. */ > else if (ref_maybe_used_by_stmt_p (use_stmt, ref)) > { >- /* Handle common cases where we can easily build a ao_ref >+ /* Handle common cases where we can easily build an ao_ref > structure for USE_STMT and in doing so we find that the > references hit non-live bytes and thus can be ignored. */ >- if (live_bytes && (!gimple_vdef (use_stmt) || !temp)) >+ if (byte_tracking_enabled && (!gimple_vdef (use_stmt) || >!temp)) > { > if (is_gimple_assign (use_stmt)) > { >--- gcc/testsuite/gcc.c-torture/compile/pr82389.c.jj 2017-10-02 >12:46:39.921427169 +0200 >+++ gcc/testsuite/gcc.c-torture/compile/pr82389.c 2017-10-02 >12:44:43.000000000 +0200 >@@ -0,0 +1,13 @@ >+/* PR tree-optimization/82389 */ >+ >+void bar (short); >+ >+void >+foo (void) >+{ >+ short a[5]; >+ int b; >+ for (b = -1290603998; b < 5; b++) >+ a[b] = 0; >+ bar (a[3]); >+} >--- gcc/testsuite/gcc.c-torture/execute/pr82387.c.jj 2017-10-02 >12:46:18.474690151 +0200 >+++ gcc/testsuite/gcc.c-torture/execute/pr82387.c 2017-10-02 >12:46:03.000000000 +0200 >@@ -0,0 +1,27 @@ >+/* PR tree-optimization/82387 */ >+ >+struct A { int b; }; >+int f = 1; >+ >+struct A >+foo (void) >+{ >+ struct A h[] = { >+ {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, >+ {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, >+ {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, >+ {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, >+ {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, >+ {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, >+ {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, >+ }; >+ return h[24]; >+} >+ >+int >+main () >+{ >+ struct A i = foo (), j = i; >+ j.b && (f = 0); >+ return f; >+} >--- gcc/testsuite/gcc.c-torture/execute/pr82388.c.jj 2017-10-02 >12:46:22.675638638 +0200 >+++ gcc/testsuite/gcc.c-torture/execute/pr82388.c 2017-10-02 >12:45:14.000000000 +0200 >@@ -0,0 +1,17 @@ >+/* PR tree-optimization/82388 */ >+ >+struct A { int b; int c; int d; } e; >+ >+struct A >+foo (void) >+{ >+ struct A h[30] = {{0,0,0}}; >+ return h[29]; >+} >+ >+int >+main () >+{ >+ e = foo (); >+ return e.b; >+} > > Jakub