]>
Commit | Line | Data |
---|---|---|
6f966f06 SSF |
1 | /* { dg-do run } */ |
2 | /* { dg-options "-O2 -ftree-loop-distribution -fdump-tree-ldist-details" } */ | |
64bf0c83 | 3 | /* { dg-additional-options "-march=z13 -mzarch" { target s390x-*-* } } */ |
6f966f06 SSF |
4 | /* { dg-final { scan-tree-dump-times "generated strlenQI\n" 4 "ldist" } } */ |
5 | /* { dg-final { scan-tree-dump-times "generated strlenHI\n" 4 "ldist" { target s390x-*-* } } } */ | |
6 | /* { dg-final { scan-tree-dump-times "generated strlenSI\n" 4 "ldist" { target s390x-*-* } } } */ | |
7 | ||
8 | #include <stdint.h> | |
9 | #include <assert.h> | |
10 | ||
11 | typedef __SIZE_TYPE__ size_t; | |
12 | extern void* malloc (size_t); | |
13 | extern void* memset (void*, int, size_t); | |
14 | ||
15 | #define test(T, U) \ | |
16 | __attribute__((noinline)) \ | |
17 | U test_##T##U (T *s) \ | |
18 | { \ | |
19 | U i; \ | |
20 | for (i=0; s[i]; ++i); \ | |
21 | return i; \ | |
22 | } | |
23 | ||
24 | test (uint8_t, size_t) | |
25 | test (uint16_t, size_t) | |
26 | test (uint32_t, size_t) | |
27 | test (uint8_t, int) | |
28 | test (uint16_t, int) | |
29 | test (uint32_t, int) | |
30 | ||
31 | test (int8_t, size_t) | |
32 | test (int16_t, size_t) | |
33 | test (int32_t, size_t) | |
34 | test (int8_t, int) | |
35 | test (int16_t, int) | |
36 | test (int32_t, int) | |
37 | ||
38 | #define run(T, U, i) \ | |
39 | { \ | |
40 | T *q = p; \ | |
41 | q[i] = 0; \ | |
42 | assert (test_##T##U (p) == i); \ | |
43 | memset (&q[i], 0xf, sizeof (T)); \ | |
44 | } | |
45 | ||
46 | int main(void) | |
47 | { | |
48 | void *p = malloc (1024); | |
49 | assert (p); | |
50 | memset (p, 0xf, 1024); | |
51 | ||
52 | run (uint8_t, size_t, 0); | |
53 | run (uint8_t, size_t, 1); | |
54 | run (uint8_t, size_t, 13); | |
55 | ||
56 | run (int8_t, size_t, 0); | |
57 | run (int8_t, size_t, 1); | |
58 | run (int8_t, size_t, 13); | |
59 | ||
60 | run (uint8_t, int, 0); | |
61 | run (uint8_t, int, 1); | |
62 | run (uint8_t, int, 13); | |
63 | ||
64 | run (int8_t, int, 0); | |
65 | run (int8_t, int, 1); | |
66 | run (int8_t, int, 13); | |
67 | ||
68 | run (uint16_t, size_t, 0); | |
69 | run (uint16_t, size_t, 1); | |
70 | run (uint16_t, size_t, 13); | |
71 | ||
72 | run (int16_t, size_t, 0); | |
73 | run (int16_t, size_t, 1); | |
74 | run (int16_t, size_t, 13); | |
75 | ||
76 | run (uint16_t, int, 0); | |
77 | run (uint16_t, int, 1); | |
78 | run (uint16_t, int, 13); | |
79 | ||
80 | run (int16_t, int, 0); | |
81 | run (int16_t, int, 1); | |
82 | run (int16_t, int, 13); | |
83 | ||
84 | run (uint32_t, size_t, 0); | |
85 | run (uint32_t, size_t, 1); | |
86 | run (uint32_t, size_t, 13); | |
87 | ||
88 | run (int32_t, size_t, 0); | |
89 | run (int32_t, size_t, 1); | |
90 | run (int32_t, size_t, 13); | |
91 | ||
92 | run (uint32_t, int, 0); | |
93 | run (uint32_t, int, 1); | |
94 | run (uint32_t, int, 13); | |
95 | ||
96 | run (int32_t, int, 0); | |
97 | run (int32_t, int, 1); | |
98 | run (int32_t, int, 13); | |
99 | ||
100 | return 0; | |
101 | } |