mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Bench: Improve benchtests for memchr, strchr, strnlen, strrchr
1. Add more complete coverage in the medium size range. 2. In strnlen remove the `1 << i` which was UB (`i` could go beyond 32/64)
This commit is contained in:
parent
b412213eee
commit
643a2d0139
@ -126,7 +126,7 @@ do_test (json_ctx_t *json_ctx, size_t align, size_t pos, size_t len,
|
||||
int
|
||||
test_main (void)
|
||||
{
|
||||
size_t i;
|
||||
size_t i, j, al, al_max;
|
||||
int repeats;
|
||||
json_ctx_t json_ctx;
|
||||
test_init ();
|
||||
@ -147,35 +147,46 @@ test_main (void)
|
||||
|
||||
json_array_begin (&json_ctx, "results");
|
||||
|
||||
al_max = 0;
|
||||
#ifdef USE_AS_MEMRCHR
|
||||
al_max = getpagesize () / 2;
|
||||
#endif
|
||||
|
||||
for (repeats = 0; repeats < 2; ++repeats)
|
||||
{
|
||||
for (i = 1; i < 8; ++i)
|
||||
for (al = 0; al <= al_max; al += getpagesize () / 2)
|
||||
{
|
||||
do_test (&json_ctx, 0, 16 << i, 2048, 23, repeats);
|
||||
do_test (&json_ctx, i, 64, 256, 23, repeats);
|
||||
do_test (&json_ctx, 0, 16 << i, 2048, 0, repeats);
|
||||
do_test (&json_ctx, i, 64, 256, 0, repeats);
|
||||
for (i = 1; i < 8; ++i)
|
||||
{
|
||||
do_test (&json_ctx, al, 16 << i, 2048, 23, repeats);
|
||||
do_test (&json_ctx, al + i, 64, 256, 23, repeats);
|
||||
do_test (&json_ctx, al, 16 << i, 2048, 0, repeats);
|
||||
do_test (&json_ctx, al + i, 64, 256, 0, repeats);
|
||||
|
||||
do_test (&json_ctx, getpagesize () - 15, 64, 256, 0, repeats);
|
||||
do_test (&json_ctx, al + getpagesize () - 15, 64, 256, 0,
|
||||
repeats);
|
||||
#ifdef USE_AS_MEMRCHR
|
||||
/* Also test the position close to the beginning for memrchr. */
|
||||
do_test (&json_ctx, 0, i, 256, 23, repeats);
|
||||
do_test (&json_ctx, 0, i, 256, 0, repeats);
|
||||
do_test (&json_ctx, i, i, 256, 23, repeats);
|
||||
do_test (&json_ctx, i, i, 256, 0, repeats);
|
||||
/* Also test the position close to the beginning for memrchr. */
|
||||
do_test (&json_ctx, al, i, 256, 23, repeats);
|
||||
do_test (&json_ctx, al, i, 256, 0, repeats);
|
||||
do_test (&json_ctx, al + i, i, 256, 23, repeats);
|
||||
do_test (&json_ctx, al + i, i, 256, 0, repeats);
|
||||
#endif
|
||||
}
|
||||
for (i = 1; i < 8; ++i)
|
||||
{
|
||||
do_test (&json_ctx, i, i << 5, 192, 23, repeats);
|
||||
do_test (&json_ctx, i, i << 5, 192, 0, repeats);
|
||||
do_test (&json_ctx, i, i << 5, 256, 23, repeats);
|
||||
do_test (&json_ctx, i, i << 5, 256, 0, repeats);
|
||||
do_test (&json_ctx, i, i << 5, 512, 23, repeats);
|
||||
do_test (&json_ctx, i, i << 5, 512, 0, repeats);
|
||||
}
|
||||
for (i = 1; i < 8; ++i)
|
||||
{
|
||||
do_test (&json_ctx, al + i, i << 5, 192, 23, repeats);
|
||||
do_test (&json_ctx, al + i, i << 5, 192, 0, repeats);
|
||||
do_test (&json_ctx, al + i, i << 5, 256, 23, repeats);
|
||||
do_test (&json_ctx, al + i, i << 5, 256, 0, repeats);
|
||||
do_test (&json_ctx, al + i, i << 5, 512, 23, repeats);
|
||||
do_test (&json_ctx, al + i, i << 5, 512, 0, repeats);
|
||||
|
||||
do_test (&json_ctx, getpagesize () - 15, i << 5, 256, 23, repeats);
|
||||
do_test (&json_ctx, al + getpagesize () - 15, i << 5, 256, 23,
|
||||
repeats);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 1; i < 32; ++i)
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i + 1, 23, repeats);
|
||||
@ -207,6 +218,24 @@ test_main (void)
|
||||
do_test (&json_ctx, 0, 2, i + 1, 0, repeats);
|
||||
#endif
|
||||
}
|
||||
for (al = 0; al <= al_max; al += getpagesize () / 2)
|
||||
{
|
||||
for (i = (16 / sizeof (CHAR)); i <= (8192 / sizeof (CHAR)); i += i)
|
||||
{
|
||||
for (j = 0; j <= (384 / sizeof (CHAR));
|
||||
j += (32 / sizeof (CHAR)))
|
||||
{
|
||||
do_test (&json_ctx, al, i + j, i, 23, repeats);
|
||||
do_test (&json_ctx, al, i, i + j, 23, repeats);
|
||||
if (j < i)
|
||||
{
|
||||
do_test (&json_ctx, al, i - j, i, 23, repeats);
|
||||
do_test (&json_ctx, al, i, i - j, 23, repeats);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef USE_AS_MEMRCHR
|
||||
break;
|
||||
#endif
|
||||
|
@ -70,7 +70,7 @@ do_test (json_ctx_t *json_ctx, size_t align, size_t pos, size_t len, int seek_ch
|
||||
size_t i;
|
||||
char *result;
|
||||
|
||||
align &= 7;
|
||||
align &= getpagesize () - 1;
|
||||
if (align + len >= page_size)
|
||||
return;
|
||||
|
||||
@ -106,7 +106,6 @@ test_main (void)
|
||||
{
|
||||
json_ctx_t json_ctx;
|
||||
size_t i;
|
||||
|
||||
test_init ();
|
||||
|
||||
json_init (&json_ctx, 0, stdout);
|
||||
@ -120,7 +119,7 @@ test_main (void)
|
||||
|
||||
json_array_begin (&json_ctx, "ifuncs");
|
||||
FOR_EACH_IMPL (impl, 0)
|
||||
json_element_string (&json_ctx, impl->name);
|
||||
json_element_string (&json_ctx, impl->name);
|
||||
json_array_end (&json_ctx);
|
||||
|
||||
json_array_begin (&json_ctx, "results");
|
||||
@ -137,6 +136,31 @@ test_main (void)
|
||||
do_test (&json_ctx, 0, i, i + 1, 23);
|
||||
do_test (&json_ctx, 0, i, i + 1, 0);
|
||||
}
|
||||
for (; i < 256; i += 32)
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i + 1, 23);
|
||||
do_test (&json_ctx, 0, i - 1, i, 23);
|
||||
}
|
||||
for (; i < 512; i += 64)
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i + 1, 23);
|
||||
do_test (&json_ctx, 0, i - 1, i, 23);
|
||||
}
|
||||
for (; i < 1024; i += 128)
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i + 1, 23);
|
||||
do_test (&json_ctx, 0, i - 1, i, 23);
|
||||
}
|
||||
for (; i < 2048; i += 256)
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i + 1, 23);
|
||||
do_test (&json_ctx, 0, i - 1, i, 23);
|
||||
}
|
||||
for (; i < 4096; i += 512)
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i + 1, 23);
|
||||
do_test (&json_ctx, 0, i - 1, i, 23);
|
||||
}
|
||||
|
||||
json_array_end (&json_ctx);
|
||||
json_attr_object_end (&json_ctx);
|
||||
|
@ -287,8 +287,8 @@ int
|
||||
test_main (void)
|
||||
{
|
||||
json_ctx_t json_ctx;
|
||||
size_t i;
|
||||
|
||||
size_t i, j;
|
||||
test_init ();
|
||||
|
||||
json_init (&json_ctx, 0, stdout);
|
||||
@ -367,15 +367,30 @@ test_main (void)
|
||||
do_test (&json_ctx, 0, i, i + 1, 0, BIG_CHAR);
|
||||
}
|
||||
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.0);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.1);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.25);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.33);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.5);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.66);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.75);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 0.9);
|
||||
DO_RAND_TEST(&json_ctx, 0, 15, 16, 1.0);
|
||||
for (i = 16 / sizeof (CHAR); i <= 8192 / sizeof (CHAR); i += i)
|
||||
{
|
||||
for (j = 32 / sizeof (CHAR); j <= 320 / sizeof (CHAR);
|
||||
j += 32 / sizeof (CHAR))
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i + j, 0, MIDDLE_CHAR);
|
||||
do_test (&json_ctx, 0, i + j, i, 0, MIDDLE_CHAR);
|
||||
if (i > j)
|
||||
{
|
||||
do_test (&json_ctx, 0, i, i - j, 0, MIDDLE_CHAR);
|
||||
do_test (&json_ctx, 0, i - j, i, 0, MIDDLE_CHAR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.0);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.1);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.25);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.33);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.5);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.66);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.75);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 0.9);
|
||||
DO_RAND_TEST (&json_ctx, 0, 15, 16, 1.0);
|
||||
|
||||
json_array_end (&json_ctx);
|
||||
json_attr_object_end (&json_ctx);
|
||||
|
@ -195,19 +195,19 @@ test_main (void)
|
||||
{
|
||||
for (j = 0; j <= (704 / sizeof (CHAR)); j += (32 / sizeof (CHAR)))
|
||||
{
|
||||
do_test (&json_ctx, 0, 1 << i, (i + j), BIG_CHAR);
|
||||
do_test (&json_ctx, 0, i + j, i, BIG_CHAR);
|
||||
|
||||
do_test (&json_ctx, 64, 1 << i, (i + j), BIG_CHAR);
|
||||
do_test (&json_ctx, 64, i + j, i, BIG_CHAR);
|
||||
|
||||
do_test (&json_ctx, 0, i, i + j, BIG_CHAR);
|
||||
do_test (&json_ctx, 64, i, i + j, BIG_CHAR);
|
||||
|
||||
if (j < i)
|
||||
{
|
||||
do_test (&json_ctx, 0, 1 << i, i - j, BIG_CHAR);
|
||||
do_test (&json_ctx, 0, i - j, i, BIG_CHAR);
|
||||
|
||||
do_test (&json_ctx, 64, 1 << i, i - j, BIG_CHAR);
|
||||
do_test (&json_ctx, 64, i - j, i, BIG_CHAR);
|
||||
|
||||
do_test (&json_ctx, 0, i, i - j, BIG_CHAR);
|
||||
do_test (&json_ctx, 64, i, i - j, BIG_CHAR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -151,7 +151,7 @@ int
|
||||
test_main (void)
|
||||
{
|
||||
json_ctx_t json_ctx;
|
||||
size_t i, j;
|
||||
size_t i, j, k;
|
||||
int seek;
|
||||
|
||||
test_init ();
|
||||
@ -173,7 +173,7 @@ test_main (void)
|
||||
|
||||
for (seek = 0; seek <= 23; seek += 23)
|
||||
{
|
||||
for (j = 1; j < 32; j += j)
|
||||
for (j = 1; j <= 256; j = (j * 4))
|
||||
{
|
||||
for (i = 1; i < 9; ++i)
|
||||
{
|
||||
@ -197,6 +197,30 @@ test_main (void)
|
||||
do_test (&json_ctx, getpagesize () - i / 2 - 1, i, i + 1, seek,
|
||||
SMALL_CHAR, j);
|
||||
}
|
||||
|
||||
for (i = (16 / sizeof (CHAR)); i <= (288 / sizeof (CHAR)); i += 32)
|
||||
{
|
||||
do_test (&json_ctx, 0, i - 16, i, seek, SMALL_CHAR, j);
|
||||
do_test (&json_ctx, 0, i, i + 16, seek, SMALL_CHAR, j);
|
||||
}
|
||||
|
||||
for (i = (16 / sizeof (CHAR)); i <= (2048 / sizeof (CHAR)); i += i)
|
||||
{
|
||||
for (k = 0; k <= (288 / sizeof (CHAR));
|
||||
k += (48 / sizeof (CHAR)))
|
||||
{
|
||||
do_test (&json_ctx, 0, k, i, seek, SMALL_CHAR, j);
|
||||
do_test (&json_ctx, 0, i, i + k, seek, SMALL_CHAR, j);
|
||||
|
||||
if (k < i)
|
||||
{
|
||||
do_test (&json_ctx, 0, i - k, i, seek, SMALL_CHAR, j);
|
||||
do_test (&json_ctx, 0, k, i - k, seek, SMALL_CHAR, j);
|
||||
do_test (&json_ctx, 0, i, i - k, seek, SMALL_CHAR, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (seek == 0)
|
||||
{
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user