blob: 58c1b490b6724a3af8d475f50b4ba78f0f57902e [file] [log] [blame]
/* Make sure that short memcpy's with constant length are emitted
without loop statements. */
/* { dg-do compile } */
/* { dg-options "-O3 -mzarch" } */
/* 3 MVCs */
void
*memcpy1(void *dest, const void *src)
{
return __builtin_memcpy (dest, src, 700);
}
/* NOP */
void
*memcpy2(void *dest, const void *src)
{
return __builtin_memcpy (dest, src, 0);
}
/* 1 MVC */
void
*memcpy3(void *dest, const void *src)
{
return __builtin_memcpy (dest, src, 256);
}
/* 2 MVCs */
void
*memcpy4(void *dest, const void *src)
{
return __builtin_memcpy (dest, src, 512);
}
/* 3 MVCs */
void
*memcpy5(void *dest, const void *src)
{
return __builtin_memcpy (dest, src, 768);
}
/* Loop with 2 MVCs */
void
*memcpy6(void *dest, const void *src)
{
return __builtin_memcpy (dest, src, 1537);
}
/* memcpy6 uses a loop - check for the two load address instructions
used to increment src and dest. */
/* { dg-final { scan-assembler-times "la" 2 } } */
/* { dg-final { scan-assembler-times "mvc" 11 } } */