From: Richard Biener Date: Thu, 23 May 2013 08:37:24 +0000 (+0000) Subject: re PR target/57341 (wrong code on x86_64-linux at -O3 in 32-bit mode) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a55757eae4c6711e558143595cbbfad97550b3e0;p=gcc.git re PR target/57341 (wrong code on x86_64-linux at -O3 in 32-bit mode) 2013-05-23 Richard Biener PR rtl-optimization/57341 * ira.c (validate_equiv_mem_from_store): Use anti_dependence instead of true_dependence. * gcc.dg/torture/pr57341.c: New testcase. From-SVN: r199237 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d44ee4ffde2..503215a741e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-05-23 Richard Biener + + PR rtl-optimization/57341 + * ira.c (validate_equiv_mem_from_store): Use anti_dependence + instead of true_dependence. + 2013-05-22 David Malcolm * bb-reorder.c (branch_threshold): make const diff --git a/gcc/ira.c b/gcc/ira.c index a8631c96b4f..ff901aa5d91 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -2520,7 +2520,7 @@ validate_equiv_mem_from_store (rtx dest, const_rtx set ATTRIBUTE_UNUSED, if ((REG_P (dest) && reg_overlap_mentioned_p (dest, equiv_mem)) || (MEM_P (dest) - && true_dependence (dest, VOIDmode, equiv_mem))) + && anti_dependence (equiv_mem, dest))) equiv_mem_modified = 1; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 80657f43c3e..d1c0dda3186 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-05-23 Richard Biener + + PR rtl-optimization/57341 + * gcc.dg/torture/pr57341.c: New testcase. + 2013-05-22 Paolo Carlini PR c++/57352 diff --git a/gcc/testsuite/gcc.dg/torture/pr57341.c b/gcc/testsuite/gcc.dg/torture/pr57341.c new file mode 100644 index 00000000000..3f5cc8dd720 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr57341.c @@ -0,0 +1,22 @@ +/* { dg-do run } */ +/* { dg-additional-options "-msse" { target sse2_runtime } } */ + +int a, d; +int *b = &a, **c; +int +main () +{ + int e; + { + int f[4]; + for (d = 0; d < 4; d++) + f[d] = 1; + e = f[1]; + } + int *g[28] = { }; + *b = e; + c = &g[0]; + if (a != 1) + __builtin_abort (); + return 0; +}