re PR tree-optimization/82387 (wrong code at -O1 and -Os on x86_64-linux-gnu in 64-bit mode)

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.

From-SVN: r253356
This commit is contained in:
Jakub Jelinek 2017-10-02 17:44:10 +02:00 committed by Jakub Jelinek
parent 804b7cc438
commit f240a23075
6 changed files with 76 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2017-10-02 Jakub Jelinek <jakub@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.
2017-10-02 Georg-Johann Lay <avr@gjlay.de>
PR target/41076

View File

@ -1,3 +1,12 @@
2017-10-02 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/82387
PR tree-optimization/82388
PR tree-optimization/82389
* gcc.c-torture/compile/pr82389.c: New test.
* gcc.c-torture/execute/pr82387.c: New test.
* gcc.c-torture/execute/pr82388.c: New test.
2017-10-02 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/79180

View File

@ -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]);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -577,10 +577,10 @@ dse_classify_store (ao_ref *ref, gimple *stmt, gimple **use_stmt,
/* 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))
{