diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c03246ad8a637e417b4b951e35d860bf0023d5bd..017076187f1cd4aa074e69a9dd87a6328ef297ad 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-23 Tom de Vries <tom@codesourcery.com> + + PR tree-optimization/58805 + * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check. + 2013-10-23 Jakub Jelinek <jakub@redhat.com> * tree-vect-patterns.c (vect_recog_divmod_pattern): Optimize diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 574fdc0f617369e33d6e950a7af3bf12aa23b30d..b498c3a8312771b1a9b2dac00b604992aea9974b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-23 Tom de Vries <tom@codesourcery.com> + + PR tree-optimization/58805 + * gcc.dg/pr58805.c: New test. + 2013-10-23 Jakub Jelinek <jakub@redhat.com> * gcc.target/i386/vect-div-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr58805.c b/gcc/testsuite/gcc.dg/pr58805.c new file mode 100644 index 0000000000000000000000000000000000000000..dda0e4bdf4bd0af77c20ade2ab5994e042f158c9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr58805.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */ + +/* Type that matches the 'p' constraint. */ +#define TYPE void * + +static inline +void bar (TYPE *r) +{ + TYPE t; + __asm__ ("" : "=&p" (t), "=p" (*r)); +} + +void +foo (int n, TYPE *x, TYPE *y) +{ + if (n == 0) + bar (x); + else + bar (y); +} + +/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */ +/* { dg-final { cleanup-tree-dump "pre" } } */ diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c index 785d986c65d805fde60621209187bffa343b5b29..be5b71e58a8fb3f407be9290a92fa62df8004b1b 100644 --- a/gcc/tree-ssa-tail-merge.c +++ b/gcc/tree-ssa-tail-merge.c @@ -304,7 +304,8 @@ stmt_local_def (gimple stmt) tree val; def_operand_p def_p; - if (gimple_has_side_effects (stmt)) + if (gimple_has_side_effects (stmt) + || gimple_vdef (stmt) != NULL_TREE) return false; def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);