| /* { dg-do compile } */ |
| /* { dg-options "-O2 -ftree-loop-distribute-patterns -fdump-tree-ldist-details" } */ |
| |
| void foo(char *); |
| void my_memcpy (void *q, unsigned int n) |
| { |
| unsigned i; |
| char p[1024]; |
| for (i = 0; i < n; ++i) |
| ((char *)p)[i] = ((char *)q)[i]; |
| foo(p); |
| } |
| |
| struct S { int i; int j; }; |
| |
| void my_memcpy2 (void *q, unsigned int n) |
| { |
| unsigned i; |
| char p[1024]; |
| for (i = 0; i < n; ++i) |
| ((struct S *)p)[i] = ((struct S *)q)[i]; |
| foo(p); |
| } |
| |
| char p[1024]; |
| void my_memmove (unsigned int n) |
| { |
| unsigned i; |
| for (i = 0; i < n; ++i) |
| p[i] = p[i+1]; |
| foo(p); |
| } |
| |
| |
| /* { dg-final { scan-tree-dump-times "generated memcpy" 2 "ldist" } } */ |
| /* { dg-final { scan-tree-dump-times "generated memmove" 1 "ldist" } } */ |
| /* { dg-final { cleanup-tree-dump "ldist" } } */ |