From 888da683ecda500c087776aaa708d74d25a1e55f Mon Sep 17 00:00:00 2001 From: vries Date: Wed, 23 Oct 2013 13:26:45 +0000 Subject: [PATCH] Add missing check in stmt_local_def for tail-merge. 2013-10-22 Tom de Vries PR tree-optimization/58805 * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check. * gcc.dg/pr58805.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203973 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr58805.c | 24 ++++++++++++++++++++++++ gcc/tree-ssa-tail-merge.c | 3 ++- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr58805.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c03246a..0170761 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-23 Tom de Vries + + PR tree-optimization/58805 + * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check. + 2013-10-23 Jakub Jelinek * tree-vect-patterns.c (vect_recog_divmod_pattern): Optimize diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 574fdc0..b498c3a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-23 Tom de Vries + + PR tree-optimization/58805 + * gcc.dg/pr58805.c: New test. + 2013-10-23 Jakub Jelinek * 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 0000000..dda0e4b --- /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 785d986..be5b71e 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); -- 2.7.4