blob: 0699146296ab2162941567e8a60d6ab51e4058e1 [file] [log] [blame]
/* PR middle-end/95886 - suboptimal memcpy with embedded zero bytes
{ dg-do compile { target { ! ia32 } } }
{ dg-options "-O2 -Wall -fdump-rtl-expand" } */
const char a1234567890[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
void cpy_123456789 (void *d)
{
/* Expands into:
movabsq $578437695752307201, %rax
movb $9, 8(%rdi)
movq %rax, (%rdi) */
__builtin_memcpy (d, a1234567890, 9);
}
const char a1234567800[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 0 };
void cpy_1234567800 (void *d)
{
/* Expands into:
movabsq $578437695752307201, %rax
movb $0, 8(%rdi)
movq %rax, (%rdi) */
__builtin_memcpy (d, a1234567800, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 578437695752307201" 2 "expand"} } */
const char a0234567890[10] = { 0, 2, 3, 4, 5, 6, 7, 8, 9 };
void cpy_023456789 (void *d)
{
__builtin_memcpy (d, a0234567890, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 578437695752307200" 1 "expand"} } */
const char a1034567890[10] = { 1, 0, 3, 4, 5, 6, 7, 8, 9 };
void cpy_103456789 (void *d)
{
__builtin_memcpy (d, a1034567890, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 578437695752306689" 1 "expand"} } */
const char a1204567890[10] = { 1, 2, 0, 4, 5, 6, 7, 8, 9 };
void cpy_120456789 (void *d)
{
__builtin_memcpy (d, a1204567890, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 578437695752110593" 1 "expand"} } */
const char a1230567890[10] = { 1, 2, 3, 0, 5, 6, 7, 8, 9 };
void cpy_123056789 (void *d)
{
__builtin_memcpy (d, a1230567890, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 578437695685198337" 1 "expand"} } */
const char a1234067890[10] = { 1, 2, 3, 4, 0, 6, 7, 8, 9 };
void cpy_123406789 (void *d)
{
__builtin_memcpy (d, a1234067890, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 578437695685198337" 1 "expand"} } */
const char a1234507890[10] = { 1, 2, 3, 4, 5, 0, 7, 8, 9 };
void cpy_123450789 (void *d)
{
__builtin_memcpy (d, a1234507890, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 578431098682540545" 1 "expand"} } */
const char a1234560890[10] = { 1, 2, 3, 4, 5, 6, 0, 8, 9 };
void cpy_123456089 (void *d)
{
__builtin_memcpy (d, a1234560890, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 576467370915332609" 1 "expand"} } */
const char a1234567090[10] = { 1, 2, 3, 4, 5, 6, 7, 0, 9 };
void cpy_123456709 (void *d)
{
__builtin_memcpy (d, a1234567090, 9);
}
/* { dg-final { scan-rtl-dump-times "const_int 1976943448883713" 1 "expand"} } */