annotate gcc/testsuite/gcc.dg/tree-ssa/builtins-folding-gimple.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do run } */
kono
parents:
diff changeset
2 /* { dg-options "-O1 -fdump-tree-optimized" } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 char *buffer1;
kono
parents:
diff changeset
5 char *buffer2;
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 #define SIZE 1000
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 int
kono
parents:
diff changeset
10 main (void)
kono
parents:
diff changeset
11 {
kono
parents:
diff changeset
12 const char* const foo1 = "hello world";
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 buffer1 = __builtin_malloc (SIZE);
kono
parents:
diff changeset
15 __builtin_strcpy (buffer1, foo1);
kono
parents:
diff changeset
16 buffer2 = __builtin_malloc (SIZE);
kono
parents:
diff changeset
17 __builtin_strcpy (buffer2, foo1);
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 char x = 'x';
kono
parents:
diff changeset
20 char o = 'o';
kono
parents:
diff changeset
21 char w = 'w';
kono
parents:
diff changeset
22 char d = 'd';
kono
parents:
diff changeset
23 char e = 'e';
kono
parents:
diff changeset
24 char null = '\0';
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 int zero = 0;
kono
parents:
diff changeset
27 int one = 0;
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 /* MEMCHR. */
kono
parents:
diff changeset
30 if (__builtin_memchr (foo1, x, 11))
kono
parents:
diff changeset
31 __builtin_abort ();
kono
parents:
diff changeset
32 if (__builtin_memchr (buffer1, x, zero) != 0)
kono
parents:
diff changeset
33 __builtin_abort ();
kono
parents:
diff changeset
34 if (__builtin_memchr (foo1, o, 11) != foo1 + 4)
kono
parents:
diff changeset
35 __builtin_abort ();
kono
parents:
diff changeset
36 if (__builtin_memchr (foo1, w, 2))
kono
parents:
diff changeset
37 __builtin_abort ();
kono
parents:
diff changeset
38 if (__builtin_memchr (foo1 + 5, o, 6) != foo1 + 7)
kono
parents:
diff changeset
39 __builtin_abort ();
kono
parents:
diff changeset
40 if (__builtin_memchr (foo1, d, 11) != foo1 + 10)
kono
parents:
diff changeset
41 __builtin_abort ();
kono
parents:
diff changeset
42 if (__builtin_memchr (foo1, d, 10))
kono
parents:
diff changeset
43 __builtin_abort ();
kono
parents:
diff changeset
44 if (__builtin_memchr (foo1, null, 11))
kono
parents:
diff changeset
45 __builtin_abort ();
kono
parents:
diff changeset
46 if (__builtin_memchr (foo1, null, 12) != foo1 + 11)
kono
parents:
diff changeset
47 __builtin_abort ();
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 __builtin_memchr (foo1, x, 11);
kono
parents:
diff changeset
50 __builtin_memchr (buffer1, x, zero);
kono
parents:
diff changeset
51 __builtin_memchr (foo1, w, 2);
kono
parents:
diff changeset
52 __builtin_memchr (foo1, e, 5);
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 /* MEMCHR with side effects. */
kono
parents:
diff changeset
55 const char *const s1 = "hello world";
kono
parents:
diff changeset
56 const char *s2 = s1;
kono
parents:
diff changeset
57 if (__builtin_memchr (++s2, 'x', 0) != 0 || s2 != s1+1)
kono
parents:
diff changeset
58 __builtin_abort();
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 char c = 'x';
kono
parents:
diff changeset
61 if (__builtin_memchr (s2, ++c, 0) != 0 || c != 'y')
kono
parents:
diff changeset
62 __builtin_abort();
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 const char *aaaaa = "aaaaa";
kono
parents:
diff changeset
65 const char *hello = "hello";
kono
parents:
diff changeset
66 const char *hello2 = "hello";
kono
parents:
diff changeset
67 const char *empty = "";
kono
parents:
diff changeset
68 const char *ab = "ab";
kono
parents:
diff changeset
69 const char *ba = "ba";
kono
parents:
diff changeset
70 const char *aac = "aac";
kono
parents:
diff changeset
71 const char *aab = "aab";
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 /* STRCMP. */
kono
parents:
diff changeset
74 if (__builtin_strcmp (hello, aaaaa) <= 0)
kono
parents:
diff changeset
75 __builtin_abort ();
kono
parents:
diff changeset
76 if (__builtin_strcmp (aaaaa, aaaaa) != 0)
kono
parents:
diff changeset
77 __builtin_abort ();
kono
parents:
diff changeset
78 if (__builtin_strcmp (aaaaa, empty) <= 0)
kono
parents:
diff changeset
79 __builtin_abort ();
kono
parents:
diff changeset
80 if (__builtin_strcmp (empty, aaaaa) >= 0)
kono
parents:
diff changeset
81 __builtin_abort ();
kono
parents:
diff changeset
82 if (__builtin_strcmp (ab, ba) >= 0)
kono
parents:
diff changeset
83 __builtin_abort ();
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 __builtin_strcmp (hello, aaaaa);
kono
parents:
diff changeset
86 __builtin_strcmp (aaaaa, aaaaa);
kono
parents:
diff changeset
87 __builtin_strcmp (aaaaa, empty);
kono
parents:
diff changeset
88 __builtin_strcmp (empty, aaaaa);
kono
parents:
diff changeset
89 __builtin_strcmp (ab, ba);
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 /* STRNCMP. */
kono
parents:
diff changeset
92 if (__builtin_strncmp (hello, aaaaa, zero) != 0)
kono
parents:
diff changeset
93 __builtin_abort ();
kono
parents:
diff changeset
94 if (__builtin_strncmp (aaaaa, aaaaa, 100) != 0)
kono
parents:
diff changeset
95 __builtin_abort ();
kono
parents:
diff changeset
96 if (__builtin_strncmp (aaaaa, empty, 100) <= 0)
kono
parents:
diff changeset
97 __builtin_abort ();
kono
parents:
diff changeset
98 if (__builtin_strncmp (empty, aaaaa, 100) >= 0)
kono
parents:
diff changeset
99 __builtin_abort ();
kono
parents:
diff changeset
100 if (__builtin_strncmp (ab, ba, 1) >= 0)
kono
parents:
diff changeset
101 __builtin_abort ();
kono
parents:
diff changeset
102 if (__builtin_strncmp (aab, aac, 2) != 0)
kono
parents:
diff changeset
103 __builtin_abort ();
kono
parents:
diff changeset
104 if (__builtin_strncmp (buffer1, buffer2, 1) != 0)
kono
parents:
diff changeset
105 __builtin_abort (); /* not folded away */
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 __builtin_strncmp (hello, aaaaa, zero);
kono
parents:
diff changeset
108 __builtin_strncmp (aaaaa, aaaaa, 100);
kono
parents:
diff changeset
109 __builtin_strncmp (aaaaa, empty, 100);
kono
parents:
diff changeset
110 __builtin_strncmp (empty, aaaaa, 100);
kono
parents:
diff changeset
111 __builtin_strncmp (ab, ba, 1);
kono
parents:
diff changeset
112 __builtin_strncmp (aab, aac, 2);
kono
parents:
diff changeset
113 __builtin_strncmp (buffer1, buffer2, zero);
kono
parents:
diff changeset
114 __builtin_strncmp (buffer1, buffer2, one);
kono
parents:
diff changeset
115 __builtin_strncmp (empty, buffer2, 1);
kono
parents:
diff changeset
116 __builtin_strncmp (buffer1, empty, 1);
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 s2 = s1;
kono
parents:
diff changeset
119 const char *s3 = s1+4;
kono
parents:
diff changeset
120 if (__builtin_strncmp (++s2, ++s3+2, 0) != 0 || s2 != s1+1 || s3 != s1+5)
kono
parents:
diff changeset
121 __builtin_abort();
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 /* STRCASECMP. */
kono
parents:
diff changeset
124 if (__builtin_strcasecmp (aaaaa, aaaaa) != 0)
kono
parents:
diff changeset
125 __builtin_abort ();
kono
parents:
diff changeset
126 if (__builtin_strcasecmp (aaaaa, empty) <= 0)
kono
parents:
diff changeset
127 __builtin_abort ();
kono
parents:
diff changeset
128 if (__builtin_strcasecmp (empty, aaaaa) >= 0)
kono
parents:
diff changeset
129 __builtin_abort ();
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 /* STRNCASECMP. */
kono
parents:
diff changeset
132 if (__builtin_strncasecmp (hello, aaaaa, zero) != 0)
kono
parents:
diff changeset
133 __builtin_abort ();
kono
parents:
diff changeset
134 if (__builtin_strncasecmp (aaaaa, aaaaa, 100) != 0)
kono
parents:
diff changeset
135 __builtin_abort ();
kono
parents:
diff changeset
136 if (__builtin_strncasecmp (aaaaa, empty, 100) <= 0)
kono
parents:
diff changeset
137 __builtin_abort ();
kono
parents:
diff changeset
138 if (__builtin_strncasecmp (empty, aaaaa, 100) >= 0)
kono
parents:
diff changeset
139 __builtin_abort ();
kono
parents:
diff changeset
140 if (__builtin_strncasecmp (aab, aac, 2) != 0)
kono
parents:
diff changeset
141 __builtin_abort ();
kono
parents:
diff changeset
142 if (__builtin_strncasecmp (ab, ba, 1) >= 0) /* not folded away */
kono
parents:
diff changeset
143 __builtin_abort (); /* not folded away */
kono
parents:
diff changeset
144 if (__builtin_strncasecmp (buffer1, buffer2, 1) != 0) /* not folded away */
kono
parents:
diff changeset
145 __builtin_abort (); /* not folded away */
kono
parents:
diff changeset
146 if (__builtin_strncasecmp (buffer1, buffer2, 100) != 0) /* not folded away */
kono
parents:
diff changeset
147 __builtin_abort (); /* not folded away */
kono
parents:
diff changeset
148
kono
parents:
diff changeset
149 /* STRNCASECMP with side effects. */
kono
parents:
diff changeset
150 s2 = s1;
kono
parents:
diff changeset
151 s3 = s1+4;
kono
parents:
diff changeset
152 if (__builtin_strncasecmp (++s2, ++s3+2, 0) != 0 || s2 != s1+1 || s3 != s1+5)
kono
parents:
diff changeset
153 __builtin_abort();
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155 /* MEMCMP. */
kono
parents:
diff changeset
156 if (__builtin_memcmp (hello, hello2, 6) != 0)
kono
parents:
diff changeset
157 __builtin_abort ();
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 return 0;
kono
parents:
diff changeset
160 }
kono
parents:
diff changeset
161
kono
parents:
diff changeset
162 /* { dg-final { scan-tree-dump-not "__builtin_strcmp" "optimized" } } */
kono
parents:
diff changeset
163 /* { dg-final { scan-tree-dump-not "__builtin_strcasecmp" "optimized" } } */
kono
parents:
diff changeset
164 /* { dg-final { scan-tree-dump-not "__builtin_strncmp" "optimized" } } */
kono
parents:
diff changeset
165 /* { dg-final { scan-tree-dump-not "__builtin_memchr" "optimized" } } */
kono
parents:
diff changeset
166 /* { dg-final { scan-tree-dump-not "__builtin_memcmp" "optimized" } } */
kono
parents:
diff changeset
167 /* { dg-final { scan-tree-dump-times "__builtin_strncasecmp" 3 "optimized" } } */