From: Jan Hubicka Date: Fri, 15 May 2009 15:23:06 +0000 (+0200) Subject: flatten-2.c: Disable early inlining; add comment. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=febbad93b1c59994c7bb083a2dae46950af92cb7;p=gcc.git flatten-2.c: Disable early inlining; add comment. * flatten-2.c: Disable early inlining; add comment. * flatten-3.c: New test based on flatten-2.c. From-SVN: r147582 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 63c8e671b8d..1cd470bbe7a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-15 Jan Hubicka + + * flatten-2.c: Disable early inlining; add comment. + * flatten-3.c: New test based on flatten-2.c. + 2009-05-15 Richard Guenther PR tree-optimization/39999 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c b/gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c index 52a865dbd7c..ffed23cf454 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c @@ -1,11 +1,16 @@ /* { dg-do compile } */ -/* { dg-options -O2 } */ +/* { dg-options "-O2 -fno-early-inlining" } */ extern void do_something_usefull(); /* Check that we finish compiling even if instructed to flatten a cyclic callgraph. Verify we correctly flatten with another function marked flatten in the - callgraph. */ + callgraph. + + Main inline is cureful about indirect calls giving + precedence to breaking cycle at indirect call sites. + Early inliner can't do similar analysis, so we need + to disable it if we want cycles to be broken consistently. */ void __attribute__((flatten)) direct(void) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/flatten-3.c b/gcc/testsuite/gcc.dg/tree-ssa/flatten-3.c new file mode 100644 index 00000000000..a1edb910e9d --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/flatten-3.c @@ -0,0 +1,79 @@ +/* { dg-do compile } */ +/* { dg-options -O2 } */ + +extern void do_something_usefull(); +/* Check that we finish compiling even if instructed to + flatten a cyclic callgraph. Verify we correctly + flatten with another function marked flatten in the + callgraph. */ + +void __attribute__((flatten)) direct(void) +{ + direct(); +} + + +void __attribute__((flatten)) indirect(void); +static void indirect1(void) +{ + indirect(); +} +void __attribute__((flatten)) indirect(void) +{ + indirect1(); +} + + +void __attribute__((flatten)) doubleindirect(void); +static void doubleindirect2(void) +{ + doubleindirect(); + do_something_usefull (); +} +static void doubleindirect1(void) +{ + doubleindirect2(); +} +void __attribute__((flatten)) doubleindirect(void) +{ + doubleindirect1(); +} + + +static void subcycle1(void); +static void subcycle2(void) +{ + subcycle1(); + do_something_usefull (); +} +static void subcycle1(void) +{ + subcycle2(); +} +void __attribute__((flatten)) subcycle(void) +{ + subcycle1(); +} + + +static void doublesubcycle1(void); +static void doublesubcycle2(void); +static void doublesubcycle3(void) +{ + doublesubcycle1(); + do_something_usefull (); +} +static void doublesubcycle2(void) +{ + doublesubcycle3(); +} +static void doublesubcycle1(void) +{ + doublesubcycle2(); +} +void __attribute__((flatten)) doublesubcycle(void) +{ + doublesubcycle1(); +} + +/* { dg-final { scan-assembler "cycle\[123\]\[: \t\n\]" } } */