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:
Andrew Pinski 2005-02-26 16:15:25 +00:00 committed by Andrew Pinski
parent 54ff999a48
commit c529e0fe2e
6 changed files with 89 additions and 2 deletions

View File

@ -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.

View File

@ -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.

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

View 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"} } */

View 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"} } */

View File

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