re PR rtl-optimization/55845 (454.calculix miscompares with -march=btver2 -O3 -ffastmath -fschedule-insns -mvzeroupper for test data run)
PR rtl-optimization/55845 * df-problems.c (can_move_insns_across): Stop scanning at volatile_insn_p source instruction or give up if across_from .. across_to range contains any volatile_insn_p instructions. * gcc.target/i386/pr55845.c: New test. From-SVN: r195028
This commit is contained in:
parent
4369c11e00
commit
c6d851b95a
4 changed files with 60 additions and 2 deletions
|
@ -1,3 +1,12 @@
|
|||
2012-01-08 Jakub Jelinek <jakub@redhat.com>
|
||||
Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR rtl-optimization/55845
|
||||
* df-problems.c (can_move_insns_across): Stop scanning at
|
||||
volatile_insn_p source instruction or give up if
|
||||
across_from .. across_to range contains any volatile_insn_p
|
||||
instructions.
|
||||
|
||||
2013-01-08 Tejas Belagod <tejas.belagod@arm.com>
|
||||
|
||||
* config/aarch64/aarch64-simd.md (vec_init<mode>): New.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Standard problems for dataflow support routines.
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
|
||||
Originally contributed by Michael P. Hayes
|
||||
(m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
|
||||
Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
|
||||
|
@ -3858,6 +3858,8 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
|
|||
}
|
||||
if (NONDEBUG_INSN_P (insn))
|
||||
{
|
||||
if (volatile_insn_p (PATTERN (insn)))
|
||||
return false;
|
||||
memrefs_in_across |= for_each_rtx (&PATTERN (insn), find_memory,
|
||||
NULL);
|
||||
note_stores (PATTERN (insn), find_memory_stores,
|
||||
|
@ -3917,7 +3919,9 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
|
|||
if (NONDEBUG_INSN_P (insn))
|
||||
{
|
||||
if (may_trap_or_fault_p (PATTERN (insn))
|
||||
&& (trapping_insns_in_across || other_branch_live != NULL))
|
||||
&& (trapping_insns_in_across
|
||||
|| other_branch_live != NULL
|
||||
|| volatile_insn_p (PATTERN (insn))))
|
||||
break;
|
||||
|
||||
/* We cannot move memory stores past each other, or move memory
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2012-01-08 Uros Bizjak <ubizjak@gmail.com>
|
||||
Vladimir Yakovlev <vladimir.b.yakovlev@intel.com>
|
||||
|
||||
PR rtl-optimization/55845
|
||||
* gcc.target/i386/pr55845.c: New test.
|
||||
|
||||
2013-01-08 Tejas Belagod <tejas.belagod@arm.com>
|
||||
|
||||
* gcc.target/aarch64/vect-mull-compile.c: Explicitly scan for
|
||||
|
|
39
gcc/testsuite/gcc.target/i386/pr55845.c
Normal file
39
gcc/testsuite/gcc.target/i386/pr55845.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-require-effective-target avx } */
|
||||
/* { dg-options "-O3 -ffast-math -fschedule-insns -mavx -mvzeroupper" } */
|
||||
|
||||
#include "avx-check.h"
|
||||
|
||||
#define N 100
|
||||
|
||||
double
|
||||
__attribute__((noinline))
|
||||
foo (int size, double *y, double *x)
|
||||
{
|
||||
double sum = 0.0;
|
||||
int i;
|
||||
for (i = 0, sum = 0.; i < size; i++)
|
||||
sum += y[i] * x[i];
|
||||
return sum;
|
||||
}
|
||||
|
||||
static void
|
||||
__attribute__ ((noinline))
|
||||
avx_test ()
|
||||
{
|
||||
double x[N];
|
||||
double y[N];
|
||||
double s;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
x[i] = i;
|
||||
y[i] = i;
|
||||
}
|
||||
|
||||
s = foo (N, y, x);
|
||||
|
||||
if (s != 328350.0)
|
||||
abort ();
|
||||
}
|
Loading…
Add table
Reference in a new issue