OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [strlenopt-19.c] - Blame information for rev 695

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 689 jeremybenn
/* { dg-do run } */
2
/* { dg-options "-O2 -fdump-tree-strlen" } */
3
 
4
#include "strlenopt.h"
5
 
6
__attribute__((noinline, noclone)) char *
7
fn1 (int x, int y, int z)
8
{
9
  static char buf[40];
10
  const char *p;
11
  switch (x)
12
    {
13
    case 0:
14
      p = "abcd";
15
      /* Prevent cswitch optimization.  */
16
      asm volatile ("" : : : "memory");
17
      break;
18
    case 1:
19
      p = "efgh";
20
      break;
21
    case 2:
22
      p = "ijkl";
23
      break;
24
    default:
25
      p = "mnop";
26
      break;
27
    }
28
  if (y)
29
    {
30
      strcpy (buf, p);
31
      if (z)
32
        strcat (buf, "ABCDEFG");
33
      else
34
        strcat (buf, "HIJKLMN");
35
    }
36
  else
37
    {
38
      strcpy (buf, p + 1);
39
      if (z)
40
        strcat (buf, "OPQ");
41
      else
42
        strcat (buf, "RST");
43
    }
44
  return buf;
45
}
46
 
47
int
48
main ()
49
{
50
  int i;
51
  for (i = 0; i < 5; i++)
52
    {
53
      const char *p = "abcdefghijklmnop" + (i < 3 ? i : 3) * 4;
54
      const char *q;
55
      fn1 (i ? 0 : 1, 1, 1);
56
      q = fn1 (i, 0, 0);
57
      if (memcmp (q, p + 1, 3) != 0 || memcmp (q + 3, "RST", 4) != 0)
58
        abort ();
59
      fn1 (i ? 0 : 1, 0, 1);
60
      q = fn1 (i, 1, 0);
61
      if (memcmp (q, p, 4) != 0 || memcmp (q + 4, "HIJKLMN", 8) != 0)
62
        abort ();
63
      fn1 (i ? 0 : 1, 1, 0);
64
      q = fn1 (i, 0, 1);
65
      if (memcmp (q, p + 1, 3) != 0 || memcmp (q + 3, "OPQ", 4) != 0)
66
        abort ();
67
      fn1 (i ? 0 : 1, 0, 0);
68
      q = fn1 (i, 1, 1);
69
      if (memcmp (q, p, 4) != 0 || memcmp (q + 4, "ABCDEFG", 8) != 0)
70
        abort ();
71
    }
72
  return 0;
73
}
74
 
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" } } */
81
/* { dg-final { cleanup-tree-dump "strlen" } } */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.