From: Marc Glisse Date: Fri, 25 Oct 2013 12:35:51 +0000 (+0200) Subject: tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Look for an ADDR_EXPR in the defini... X-Git-Tag: releases/gcc-4.9.0~3226 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb362135e2d0fa4bf0290d0b403a3c1fc591da9e;p=thirdparty%2Fgcc.git tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Look for an ADDR_EXPR in the defining statement. 2013-10-25 Marc Glisse gcc/ * tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Look for an ADDR_EXPR in the defining statement. gcc/testsuite/ * gcc.dg/tree-ssa/alias-23.c: New file. From-SVN: r204065 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98286d132f3b..bfef03c41157 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-25 Marc Glisse + + * tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Look for an + ADDR_EXPR in the defining statement. + 2013-10-25 Richard Biener PR tree-optimization/58626 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1134e3ba28a3..044b76b316ff 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-10-25 Marc Glisse + + * gcc.dg/tree-ssa/alias-23.c: New file. + 2013-10-25 Richard Biener PR tree-optimization/58626 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/alias-23.c b/gcc/testsuite/gcc.dg/tree-ssa/alias-23.c new file mode 100644 index 000000000000..9d0dd32061f1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/alias-23.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +typedef struct A { int i; double d; } A; + +void f1 (const char *c) +{ + A *s = (A*) __builtin_malloc (sizeof (A)); + double *p = &s->d; + s->i = 42; + __builtin_memcpy (p, c, sizeof (double)); + int j = s->i; + if (j != 42) __builtin_abort(); +} + +/* { dg-final { scan-tree-dump-not "abort" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ + diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 2fdd3d77aebc..5d3c79297392 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -568,6 +568,14 @@ ao_ref_init_from_ptr_and_size (ao_ref *ref, tree ptr, tree size) { HOST_WIDE_INT t1, t2; ref->ref = NULL_TREE; + if (TREE_CODE (ptr) == SSA_NAME) + { + gimple stmt = SSA_NAME_DEF_STMT (ptr); + if (gimple_assign_single_p (stmt) + && gimple_assign_rhs_code (stmt) == ADDR_EXPR) + ptr = gimple_assign_rhs1 (stmt); + } + if (TREE_CODE (ptr) == ADDR_EXPR) ref->base = get_ref_base_and_extent (TREE_OPERAND (ptr, 0), &ref->offset, &t1, &t2);