re PR tree-optimization/51987 (Predictive commoning wrong-code with non-volatile asm)
PR tree-optimization/51987 * tree-data-ref.c (get_references_in_stmt): Handle references in non-volatile GIMPLE_ASM. * gcc.target/i386/pr51987.c: New test. From-SVN: r183524
This commit is contained in:
parent
8bf43909f8
commit
06e1d03dc9
@ -1,3 +1,9 @@
|
|||||||
|
2012-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/51987
|
||||||
|
* tree-data-ref.c (get_references_in_stmt): Handle references in
|
||||||
|
non-volatile GIMPLE_ASM.
|
||||||
|
|
||||||
2012-01-25 Richard Guenther <rguenther@suse.de>
|
2012-01-25 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
* tree-ssa-sccvn.c (vn_reference_eq): Also compare if both
|
* tree-ssa-sccvn.c (vn_reference_eq): Also compare if both
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2012-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/51987
|
||||||
|
* gcc.target/i386/pr51987.c: New test.
|
||||||
|
|
||||||
2012-01-25 Greta Yorsh <Greta.Yorsh@arm.com>
|
2012-01-25 Greta Yorsh <Greta.Yorsh@arm.com>
|
||||||
|
|
||||||
* gcc.dg/tm/lto-1.c: Require lto support in target.
|
* gcc.dg/tm/lto-1.c: Require lto support in target.
|
||||||
|
33
gcc/testsuite/gcc.target/i386/pr51987.c
Normal file
33
gcc/testsuite/gcc.target/i386/pr51987.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/* PR tree-optimization/51987 */
|
||||||
|
/* { dg-do run { target { ! { ia32 } } } } */
|
||||||
|
/* { dg-options "-O3" } */
|
||||||
|
|
||||||
|
extern void abort (void);
|
||||||
|
union U { unsigned long long l; struct { unsigned int l, h; } i; };
|
||||||
|
|
||||||
|
__attribute__((noinline, noclone)) void
|
||||||
|
foo (char *x, char *y)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 64; i++)
|
||||||
|
{
|
||||||
|
union U u;
|
||||||
|
asm ("movl %1, %k0; salq $32, %0" : "=r" (u.l) : "r" (i));
|
||||||
|
x[i] = u.i.h;
|
||||||
|
union U v;
|
||||||
|
asm ("movl %1, %k0; salq $32, %0" : "=r" (v.l) : "r" (i));
|
||||||
|
y[i] = v.i.h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
char a[64], b[64];
|
||||||
|
int i;
|
||||||
|
foo (a, b);
|
||||||
|
for (i = 0; i < 64; i++)
|
||||||
|
if (a[i] != i || b[i] != i)
|
||||||
|
abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/* Data references and dependences detectors.
|
/* Data references and dependences detectors.
|
||||||
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Contributed by Sebastian Pop <pop@cri.ensmp.fr>
|
Contributed by Sebastian Pop <pop@cri.ensmp.fr>
|
||||||
|
|
||||||
@ -4185,7 +4185,7 @@ get_references_in_stmt (gimple stmt, VEC (data_ref_loc, heap) **references)
|
|||||||
if ((stmt_code == GIMPLE_CALL
|
if ((stmt_code == GIMPLE_CALL
|
||||||
&& !(gimple_call_flags (stmt) & (ECF_CONST | ECF_PURE)))
|
&& !(gimple_call_flags (stmt) & (ECF_CONST | ECF_PURE)))
|
||||||
|| (stmt_code == GIMPLE_ASM
|
|| (stmt_code == GIMPLE_ASM
|
||||||
&& gimple_asm_volatile_p (stmt)))
|
&& (gimple_asm_volatile_p (stmt) || gimple_vuse (stmt))))
|
||||||
clobbers_memory = true;
|
clobbers_memory = true;
|
||||||
|
|
||||||
if (!gimple_vuse (stmt))
|
if (!gimple_vuse (stmt))
|
||||||
|
Loading…
Reference in New Issue
Block a user