On 22/10/13 20:50, Jeff Law wrote: > On 10/22/13 03:58, Tom de Vries wrote: >> Richard, >> >> This patch adds a missing check for gimple_vdef in stmt_local_def for the >> tail-merge pass. >> >> Bootstrapped and reg-tested on x86_64. >> >> OK for trunk, gcc-4_8-branch? >> >> Thanks, >> - Tom >> >> 2013-10-22 Tom de Vries <t...@codesourcery.com> >> >> PR tree-optimization/58805 >> * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check. >> >> * gcc.dg/pr58805.c: New test. > Doesn't this test belong in an architecture specific directory? >
Jeff, The test-case has i386 assembly inside the asm string, but since the test-case only compiles, the assembly string is never used. I've made the string empty to make that clear. AFAIU the only requirement for this test-case is that the constraint matches the operand. I'm not sure whether 'unsigned long' always matches 'r'. I've changed this into 'void *' and 'p', which I think should always be true. Committed as below. Thanks, - Tom > jeff > +++ 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" } } */