2 /* { dg-options "-O2 -fdump-tree-strlen" } */
6 __attribute__((noinline
, noclone
)) char *
7 fn1 (int x
, int y
, int z
)
15 /* Prevent cswitch optimization. */
16 asm volatile ("" : : : "memory");
32 strcat (buf
, "ABCDEFG");
34 strcat (buf
, "HIJKLMN");
51 for (i
= 0; i
< 5; i
++)
53 const char *p
= "abcdefghijklmnop" + (i
< 3 ? i
: 3) * 4;
55 fn1 (i
? 0 : 1, 1, 1);
57 if (memcmp (q
, p
+ 1, 3) != 0 || memcmp (q
+ 3, "RST", 4) != 0)
59 fn1 (i
? 0 : 1, 0, 1);
61 if (memcmp (q
, p
, 4) != 0 || memcmp (q
+ 4, "HIJKLMN", 8) != 0)
63 fn1 (i
? 0 : 1, 1, 0);
65 if (memcmp (q
, p
+ 1, 3) != 0 || memcmp (q
+ 3, "OPQ", 4) != 0)
67 fn1 (i
? 0 : 1, 0, 0);
69 if (memcmp (q
, p
, 4) != 0 || memcmp (q
+ 4, "ABCDEFG", 8) != 0)
75 /* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */
76 /* { dg-final { scan-tree-dump-times "memcpy \\(" 6 "strlen" } } */
77 /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
78 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
79 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
80 /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */