Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/strlenopt-32.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* { dg-do run } */ | |
2 /* { dg-options "-O2 -fdump-tree-strlen" } */ | |
3 | |
4 #include "strlenopt.h" | |
5 | |
6 char temp[30]; | |
7 volatile int v; | |
8 | |
9 size_t __attribute__ ((noinline, noclone)) | |
10 f1 (void) | |
11 { | |
12 char a[30]; | |
13 v += 1; | |
14 memcpy (a, "1234567", 7); | |
15 memcpy (a + 7, "89abcdefg", 9); | |
16 memcpy (a + 16, "h", 2); | |
17 return strlen (a); // This strlen should be optimized into 17. | |
18 } | |
19 | |
20 size_t __attribute__ ((noinline, noclone)) | |
21 f2 (char *a) | |
22 { | |
23 v += 2; | |
24 memcpy (a, "1234567", 7); | |
25 memcpy (a + 7, "89abcdefg", 9); | |
26 memcpy (a + 16, "h", 2); | |
27 return strlen (a); // This strlen should be optimized into 17. | |
28 } | |
29 | |
30 size_t __attribute__ ((noinline, noclone)) | |
31 f3 (void) | |
32 { | |
33 char a[30]; | |
34 v += 3; | |
35 a[0] = '1'; | |
36 memcpy (a + 1, "2345678", 8); | |
37 return strlen (a); // This strlen should be optimized into 8. | |
38 } | |
39 | |
40 size_t __attribute__ ((noinline, noclone)) | |
41 f4 (char *a) | |
42 { | |
43 v += 4; | |
44 a[0] = '1'; | |
45 memcpy (a + 1, "2345678", 8); | |
46 return strlen (a); // This strlen should be optimized into 8. | |
47 } | |
48 | |
49 size_t __attribute__ ((noinline, noclone)) | |
50 f5 (void) | |
51 { | |
52 char a[30]; | |
53 v += 5; | |
54 a[0] = '1'; | |
55 a[1] = '2'; | |
56 a[2] = '3'; | |
57 memcpy (a + 3, "456", 3); | |
58 a[6] = '7'; | |
59 a[7] = 0; | |
60 return strlen (a); // This strlen should be optimized into 7. | |
61 } | |
62 | |
63 size_t __attribute__ ((noinline, noclone)) | |
64 f6 (char *a) | |
65 { | |
66 v += 6; | |
67 a[0] = '1'; | |
68 a[1] = '2'; | |
69 a[2] = '3'; | |
70 memcpy (a + 3, "456", 3); | |
71 a[6] = '7'; | |
72 a[7] = 0; | |
73 return strlen (a); // This strlen should be optimized into 7. | |
74 } | |
75 | |
76 size_t __attribute__ ((noinline, noclone)) | |
77 f7 (void) | |
78 { | |
79 char a[30]; | |
80 v += 7; | |
81 strcpy (a, "abcde"); | |
82 int len1 = strlen (a); | |
83 a[2] = '_'; | |
84 int len2 = strlen (a); | |
85 return len1 + len2; // This should be optimized into 10. | |
86 } | |
87 | |
88 size_t __attribute__ ((noinline, noclone)) | |
89 f8 (char *a) | |
90 { | |
91 v += 8; | |
92 strcpy (a, "abcde"); | |
93 int len1 = strlen (a); | |
94 a[2] = '_'; | |
95 int len2 = strlen (a); | |
96 return len1 + len2; // This should be optimized into 10. | |
97 } | |
98 | |
99 size_t __attribute__ ((noinline, noclone)) | |
100 f9 (char b) | |
101 { | |
102 char a[30]; | |
103 v += 9; | |
104 strcpy (a, "foo.bar"); | |
105 a[4] = b; | |
106 a[3] = 0; | |
107 return strlen (a); // This should be optimized into 3. | |
108 } | |
109 | |
110 size_t __attribute__ ((noinline, noclone)) | |
111 f10 (char *a, char b) | |
112 { | |
113 v += 10; | |
114 strcpy (a, "foo.bar"); | |
115 a[4] = b; | |
116 a[3] = 0; | |
117 return strlen (a); // This should be optimized into 3. | |
118 } | |
119 | |
120 size_t __attribute__ ((noinline, noclone)) | |
121 f11 (void) | |
122 { | |
123 char a[30]; | |
124 v += 11; | |
125 strcpy (temp, "123456"); | |
126 memcpy (a, temp, 7); | |
127 return strlen (a); // This should be optimized into 6. | |
128 } | |
129 | |
130 size_t __attribute__ ((noinline, noclone)) | |
131 f12 (char *a) | |
132 { | |
133 v += 12; | |
134 strcpy (temp, "123456"); | |
135 memcpy (a, temp, 7); | |
136 return strlen (a); // This should be optimized into 6. | |
137 } | |
138 | |
139 size_t __attribute__ ((noinline, noclone)) | |
140 f13 (void) | |
141 { | |
142 char a[30]; | |
143 v += 13; | |
144 strcpy (temp, "1234567"); | |
145 memcpy (a, temp, 7); | |
146 a[7] = 0; | |
147 return strlen (a); // This should be optimized into 7. | |
148 } | |
149 | |
150 size_t __attribute__ ((noinline, noclone)) | |
151 f14 (char *a) | |
152 { | |
153 v += 14; | |
154 strcpy (temp, "1234567"); | |
155 memcpy (a, temp, 7); | |
156 a[7] = 0; | |
157 return strlen (a); // This should be optimized into 7. | |
158 } | |
159 | |
160 size_t __attribute__ ((noinline, noclone)) | |
161 f15 (void) | |
162 { | |
163 char a[30]; | |
164 v += 15; | |
165 strcpy (temp, "12345679"); | |
166 memcpy (a, temp, 7); | |
167 a[7] = 0; | |
168 return strlen (a); // This should be optimized into 7. | |
169 } | |
170 | |
171 size_t __attribute__ ((noinline, noclone)) | |
172 f16 (char *a) | |
173 { | |
174 v += 16; | |
175 strcpy (temp, "123456789"); | |
176 memcpy (a, temp, 7); | |
177 a[7] = 0; | |
178 return strlen (a); // This should be optimized into 7. | |
179 } | |
180 | |
181 int | |
182 main () | |
183 { | |
184 char a[30]; | |
185 if (f1 () != 17 || f2 (a) != 17 || f3 () != 8 || f4 (a) != 8 | |
186 || f5 () != 7 || f6 (a) != 7 || f7 () != 10 || f8 (a) != 10 | |
187 || f9 ('_') != 3 || f10 (a, '_') != 3 || f11 () != 6 || f12 (a) != 6 | |
188 || f13 () != 7 || f14 (a) != 7 || f15 () != 7 || f16 (a) != 7) | |
189 abort (); | |
190 return 0; | |
191 } | |
192 | |
193 /* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen" } } */ |