On Fri, Apr 29, 2011 at 4:16 PM, Jan Hubicka <hubi...@ucw.cz> wrote: > Hi, > It seems that majority of testcases are independent of lipo. We could probably > enjoy more of testing on mainline, so could you please take those working on > mainline and make mainline patch and let me know what of the tests are not > working > there?
Actually those test cases are cloned from tree-prof directory into the lipo sub-directory. The difference is that lipo.exp file passes additional -fripa flag. The missing tests for LIPO are ones with multiple source with non trivial module group testing -- I have not added those yet. > > We probably ought to fix the pass name... We already have "ipa-profile" for > profile > propagation. What about "gcov", unless we could come with something better? Yes -- tree_profile_ipa and ipa_profile confuses many people. >> +int a[1000]; >> +int b[1000]; >> +int size=1; >> +int max=10000; >> +main() >> +{ >> + int i; >> + for (i=0;i<max; i++) >> + { >> + __builtin_memcpy (a, b, size * sizeof (a[0])); >> + asm(""); >> + } >> + return 0; >> +} >> +/* { dg-final-use { scan-ipa-dump "Single value 4 stringop" >> "tree_profile_ipa"} } */ >> +/* Really this ought to simplify into assignment, but we are not there yet. >> */ >> +/* a[0] = b[0] is what we fold the resulting memcpy into. */ >> +/* { dg-final-use { scan-tree-dump " = MEM.*&b" "optimized"} } */ >> +/* { dg-final-use { scan-tree-dump "MEM.*&a\\\] = " "optimized"} } */ >> +/* { dg-final-use { cleanup-tree-dump "optimized" } } */ >> +/* { dg-final-use { cleanup-ipa-dump "tree_profile_ipa" } } */ >> Index: testsuite/gcc.dg/tree-prof/lipo/pr34999.c >> =================================================================== >> --- testsuite/gcc.dg/tree-prof/lipo/pr34999.c (revision 0) >> +++ testsuite/gcc.dg/tree-prof/lipo/pr34999.c (revision 0) >> @@ -0,0 +1,45 @@ >> +/* Same test as built-in-setjmp.c. Includes the case where >> + the source block of a crossing fallthru edge ends with a call. */ >> +/* { dg-require-effective-target freorder } */ >> +/* { dg-options "-O2 -freorder-blocks-and-partition" } */ >> + >> +extern int strcmp(const char *, const char *); >> +extern char *strcpy(char *, const char *); >> +extern void abort(void); >> +extern void exit(int); >> + >> +void *buf[20]; >> + >> +void __attribute__((noinline)) >> +sub2 (void) >> +{ >> + __builtin_longjmp (buf, 1); >> +} >> + >> +int >> +main () >> +{ >> + char *p = (char *) __builtin_alloca (20); >> + >> + strcpy (p, "test"); >> + >> + if (__builtin_setjmp (buf)) >> + { >> + if (strcmp (p, "test") != 0) >> + abort (); >> + >> + exit (0); >> + } >> + >> + { >> + int *q = (int *) __builtin_alloca (p[2] * sizeof (int)); >> + int i; >> + >> + for (i = 0; i < p[2]; i++) >> + q[i] = 0; >> + >> + while (1) >> + sub2 (); >> + } >> +} >> + >> Index: testsuite/gcc.dg/tree-prof/lipo/stringop-2.c >> =================================================================== >> --- testsuite/gcc.dg/tree-prof/lipo/stringop-2.c (revision 0) >> +++ testsuite/gcc.dg/tree-prof/lipo/stringop-2.c (revision 0) >> @@ -0,0 +1,20 @@ >> +/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-tree_profile_ipa" } */ >> +int a[1000]; >> +int b[1000]; >> +int size=1; >> +int max=10000; >> +main() >> +{ >> + int i; >> + for (i=0;i<max; i++) >> + { >> + __builtin_memset (a, 10, size * sizeof (a[0])); >> + asm(""); >> + } >> + return 0; >> +} >> +/* { dg-final-use { scan-ipa-dump "Single value 4 stringop" >> "tree_profile_ipa"} } */ >> +/* The versioned memset of size 4 should be optimized to an assignment. */ >> +/* { dg-final-use { scan-tree-dump "a\\\[0\\\] = 168430090" "optimized"} } >> */ >> +/* { dg-final-use { cleanup-tree-dump "optimized" } } */ >> +/* { dg-final-use { cleanup-ipa-dump "tree_profile_ipa" } } */ >> Index: testsuite/gcc.dg/tree-prof/lipo/update-loopch.c >> =================================================================== >> --- testsuite/gcc.dg/tree-prof/lipo/update-loopch.c (revision 0) >> +++ testsuite/gcc.dg/tree-prof/lipo/update-loopch.c (revision 0) >> @@ -0,0 +1,21 @@ >> +/* { dg-options "-O2 -fdump-ipa-tree_profile_ipa-blocks >> -fdump-tree-optimized-blocks" } */ >> +int max = 33333; >> +int a[8]; >> +int >> +main () >> +{ >> + int i; >> + for (i = 0; i < max; i++) >> + { >> + a[i % 8]++; >> + } >> + return 0; >> +} >> +/* Loop header copying will peel away the initial conditional, so the loop >> body >> + is once reached directly from entry point of function, rest via loopback >> + edge. */ >> +/* { dg-final-use { scan-ipa-dump "count:33333" "tree_profile_ipa"} } */ >> +/* { dg-final-use { scan-tree-dump "count:33332" "optimized"} } */ >> +/* { dg-final-use { scan-tree-dump-not "Invalid sum" "optimized"} } */ >> +/* { dg-final-use { cleanup-ipa-dump "tree_profile_ipa" } } */ >> +/* { dg-final-use { cleanup-tree-dump "optimized" } } */ >> Index: >> testsuite/gcc.dg/tree-prof/lipo/indir-call-prof.c.040i.tree_profile_ipa >> =================================================================== >> --- testsuite/gcc.dg/tree-prof/lipo/indir-call-prof.c.040i.tree_profile_ipa >> (revision 0) >> +++ testsuite/gcc.dg/tree-prof/lipo/indir-call-prof.c.040i.tree_profile_ipa >> (revision 0) > > Suprious add? > Right. Thanks, David > Thanks, > Honza >