1 /* PR middle-end/95886 - suboptimal memcpy with embedded zero bytes
2 { dg-do compile { target { ! ia32 } } }
3 { dg-options "-O2 -Wall -fdump-rtl-expand" } */
4
5 const char a1234567890[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
6
cpy_123456789(void * d)7 void cpy_123456789 (void *d)
8 {
9 /* Expands into:
10 movabsq $578437695752307201, %rax
11 movb $9, 8(%rdi)
12 movq %rax, (%rdi) */
13 __builtin_memcpy (d, a1234567890, 9);
14 }
15
16 const char a1234567800[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 0 };
17
cpy_1234567800(void * d)18 void cpy_1234567800 (void *d)
19 {
20 /* Expands into:
21 movabsq $578437695752307201, %rax
22 movb $0, 8(%rdi)
23 movq %rax, (%rdi) */
24 __builtin_memcpy (d, a1234567800, 9);
25 }
26
27 /* { dg-final { scan-rtl-dump-times "const_int 578437695752307201" 2 "expand"} } */
28
29
30 const char a0234567890[10] = { 0, 2, 3, 4, 5, 6, 7, 8, 9 };
31
cpy_023456789(void * d)32 void cpy_023456789 (void *d)
33 {
34 __builtin_memcpy (d, a0234567890, 9);
35 }
36
37 /* { dg-final { scan-rtl-dump-times "const_int 578437695752307200" 1 "expand"} } */
38
39
40 const char a1034567890[10] = { 1, 0, 3, 4, 5, 6, 7, 8, 9 };
41
cpy_103456789(void * d)42 void cpy_103456789 (void *d)
43 {
44 __builtin_memcpy (d, a1034567890, 9);
45 }
46
47 /* { dg-final { scan-rtl-dump-times "const_int 578437695752306689" 1 "expand"} } */
48
49
50 const char a1204567890[10] = { 1, 2, 0, 4, 5, 6, 7, 8, 9 };
51
cpy_120456789(void * d)52 void cpy_120456789 (void *d)
53 {
54 __builtin_memcpy (d, a1204567890, 9);
55 }
56
57 /* { dg-final { scan-rtl-dump-times "const_int 578437695752110593" 1 "expand"} } */
58
59
60 const char a1230567890[10] = { 1, 2, 3, 0, 5, 6, 7, 8, 9 };
61
cpy_123056789(void * d)62 void cpy_123056789 (void *d)
63 {
64 __builtin_memcpy (d, a1230567890, 9);
65 }
66
67 /* { dg-final { scan-rtl-dump-times "const_int 578437695685198337" 1 "expand"} } */
68
69
70 const char a1234067890[10] = { 1, 2, 3, 4, 0, 6, 7, 8, 9 };
71
cpy_123406789(void * d)72 void cpy_123406789 (void *d)
73 {
74 __builtin_memcpy (d, a1234067890, 9);
75 }
76
77 /* { dg-final { scan-rtl-dump-times "const_int 578437695685198337" 1 "expand"} } */
78
79
80 const char a1234507890[10] = { 1, 2, 3, 4, 5, 0, 7, 8, 9 };
81
cpy_123450789(void * d)82 void cpy_123450789 (void *d)
83 {
84 __builtin_memcpy (d, a1234507890, 9);
85 }
86
87 /* { dg-final { scan-rtl-dump-times "const_int 578431098682540545" 1 "expand"} } */
88
89
90 const char a1234560890[10] = { 1, 2, 3, 4, 5, 6, 0, 8, 9 };
91
cpy_123456089(void * d)92 void cpy_123456089 (void *d)
93 {
94 __builtin_memcpy (d, a1234560890, 9);
95 }
96
97 /* { dg-final { scan-rtl-dump-times "const_int 576467370915332609" 1 "expand"} } */
98
99
100 const char a1234567090[10] = { 1, 2, 3, 4, 5, 6, 7, 0, 9 };
101
cpy_123456709(void * d)102 void cpy_123456709 (void *d)
103 {
104 __builtin_memcpy (d, a1234567090, 9);
105 }
106
107 /* { dg-final { scan-rtl-dump-times "const_int 1976943448883713" 1 "expand"} } */
108