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