mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 10:20:29 +08:00
re PR tree-optimization/20188 (asm and memory operands does not add a V_MAY_DEF)
2005-02-26 Andrew Pinski <pinskia@physics.uc.edu> PR tree-opt/20188 * gcc.dg/tree-ssa/inline_asm-1.c: New test. * gcc.dg/tree-ssa/inline_asm-2.c: New test. * gcc.dg/asm-b.c: New test. 2005-02-26 Andrew Pinski <pinskia@physics.uc.edu> PR tree-opt/20188 * tree-ssa-alias.c (count_uses_and_derefs): If we have TREE_LIST for the lhs, also walk over the tree. Likewise for rhs. From-SVN: r95586
This commit is contained in:
parent
54ff999a48
commit
c529e0fe2e
gcc
@ -1,3 +1,9 @@
|
||||
2005-02-26 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
PR tree-opt/20188
|
||||
* tree-ssa-alias.c (count_uses_and_derefs): If we have TREE_LIST
|
||||
for the lhs, also walk over the tree. Likewise for rhs.
|
||||
|
||||
2005-02-26 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
* tree-ssa-dom.c (simple_iv_increment_p): New function.
|
||||
|
@ -1,3 +1,10 @@
|
||||
2005-02-26 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
PR tree-opt/20188
|
||||
* gcc.dg/tree-ssa/inline_asm-1.c: New test.
|
||||
* gcc.dg/tree-ssa/inline_asm-2.c: New test.
|
||||
* gcc.dg/asm-b.c: New test.
|
||||
|
||||
2005-02-26 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* gcc.c-torture/execute/ieee/mul-subnormal-single-1.x: New file.
|
||||
|
39
gcc/testsuite/gcc.dg/asm-b.c
Normal file
39
gcc/testsuite/gcc.dg/asm-b.c
Normal file
@ -0,0 +1,39 @@
|
||||
/* { dg-do run { target powerpc-*-* i?386-*-* x86_64-*-* } } */
|
||||
/* { dg-options "-O1" } */
|
||||
/* Test to make sure that inline-asm causes the tree optimizators get the
|
||||
V_MAY_DEFs and clober memory. */
|
||||
/* Test from Jakub Jelinek, modified by Andrew Pinski to work on all powerpc targets. */
|
||||
extern void abort (void);
|
||||
|
||||
unsigned short v = 0x0300;
|
||||
|
||||
void
|
||||
foo (unsigned short *p)
|
||||
{
|
||||
*p = v;
|
||||
}
|
||||
|
||||
int
|
||||
bar (void)
|
||||
{
|
||||
unsigned short x;
|
||||
volatile unsigned short *z;
|
||||
foo (&x);
|
||||
const unsigned int y = x;
|
||||
z = &x;
|
||||
#if defined (__powerpc__) || defined (__PPC__) || defined (__ppc__) || defined (_POWER)
|
||||
__asm __volatile ("sthbrx %1,0,%2" : "=m" (*z) : "r" (y), "r" (z));
|
||||
#elif defined __i386__ || defined __x86_64__
|
||||
__asm __volatile ("movb %b1,1(%2); movb %h1,(%2)" : "=m" (*z) : "r" (y), "r"
|
||||
(z));
|
||||
#endif
|
||||
return (x & 1) == 0;
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
if (bar ())
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
18
gcc/testsuite/gcc.dg/tree-ssa/inline_asm-1.c
Normal file
18
gcc/testsuite/gcc.dg/tree-ssa/inline_asm-1.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1 -fdump-tree-optimized -fdump-tree-alias1-vops" } */
|
||||
/* Test to make sure that inline-asm causes a V_MAY_DEF and that we call test_function twice. */
|
||||
|
||||
char test_function(void ) __attribute__((__pure__));
|
||||
char f(char *a)
|
||||
{
|
||||
char b = test_function();
|
||||
asm("":"=m"(*a):"r"(b));
|
||||
b = test_function();
|
||||
return b;
|
||||
}
|
||||
|
||||
/* test_function should be called twice as the inline-asm changes memory. */
|
||||
/* { dg-final { scan-tree-dump-times "test_function" 2 "optimized"} } */
|
||||
|
||||
/* There should a V_MAY_DEF for the inline-asm. */
|
||||
/* { dg-final { scan-tree-dump-times "V_MAY_DEF" 1 "alias1"} } */
|
17
gcc/testsuite/gcc.dg/tree-ssa/inline_asm-2.c
Normal file
17
gcc/testsuite/gcc.dg/tree-ssa/inline_asm-2.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O1 -fdump-tree-alias1-vops" } */
|
||||
/* Test to make sure that inline-asm causes a V_MAY_DEF. */
|
||||
|
||||
|
||||
void link_error();
|
||||
void f(char *a)
|
||||
{
|
||||
int *a1 = (int *)a;
|
||||
if (*a == 0)
|
||||
asm("":"=m"(*a1));
|
||||
if (*a == 0)
|
||||
link_error ();
|
||||
}
|
||||
|
||||
/* There should a V_MAY_DEF for the inline-asm. */
|
||||
/* { dg-final { scan-tree-dump-times "V_MAY_DEF" 1 "alias1"} } */
|
@ -446,7 +446,7 @@ count_uses_and_derefs (tree ptr, tree stmt, unsigned *num_uses_p,
|
||||
rhs = stmt;
|
||||
}
|
||||
|
||||
if (lhs && EXPR_P (lhs))
|
||||
if (lhs && (TREE_CODE (lhs) == TREE_LIST || EXPR_P (lhs)))
|
||||
{
|
||||
struct count_ptr_d count;
|
||||
count.ptr = ptr;
|
||||
@ -456,7 +456,7 @@ count_uses_and_derefs (tree ptr, tree stmt, unsigned *num_uses_p,
|
||||
*num_derefs_p = count.count;
|
||||
}
|
||||
|
||||
if (rhs && EXPR_P (rhs))
|
||||
if (rhs && (TREE_CODE (rhs) == TREE_LIST || EXPR_P (rhs)))
|
||||
{
|
||||
struct count_ptr_d count;
|
||||
count.ptr = ptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user