diff mbox

Performance fix for libmpx memmove wrapper

Message ID CAGq4YfxfZQ0xZW_uWhgN=M653q5F6-yrxKcOmYcTMdJ0xtGQvg@mail.gmail.com
State New
Headers show

Commit Message

Aleksandra Tsvetkova Dec. 24, 2015, 11:21 a.m. UTC
This patch was tested on spec2000, spec2006 and make check. It fixes
regression on vortex.


2015-12-11  Tsvetkova Alexandra  <aleksandra.tsvetkova@intel.com>

* libmpxwrap/mpx_wrappers.c (mpx_pointer): New type.


   return dst;

Comments

Aleksandra Tsvetkova Dec. 24, 2015, 11:24 a.m. UTC | #1
Description:
2015-12-11  Tsvetkova Alexandra  <aleksandra.tsvetkova@intel.com>

        * libmpxwrap/mpx_wrappers.c (__mpx_wrapper_memmove): separate
case for size of pointer.

On Thu, Dec 24, 2015 at 2:21 PM, Aleksandra Tsvetkova
<astsvetk@gmail.com> wrote:
> This patch was tested on spec2000, spec2006 and make check. It fixes
> regression on vortex.
>
>
> 2015-12-11  Tsvetkova Alexandra  <aleksandra.tsvetkova@intel.com>
>
> * libmpxwrap/mpx_wrappers.c (mpx_pointer): New type.
>
>
> diff --git a/libmpx/mpxwrap/mpx_wrappers.c b/libmpx/mpxwrap/mpx_wrappers.c
> old mode 100644
> new mode 100755
> index ffa7e7e..679e546
> --- a/libmpx/mpxwrap/mpx_wrappers.c
> +++ b/libmpx/mpxwrap/mpx_wrappers.c
> @@ -483,10 +483,20 @@ __mpx_wrapper_memmove (void *dst, const void
> *src, size_t n)
>    __bnd_chk_ptr_bounds (dst, n);
>    __bnd_chk_ptr_bounds (src, n);
>
> +  /* This is an speedup for size of pointer.  */
> +  if (n == sizeof (void *))
> +  {
> +    const void **s = (const void**)src;
> +    void **d = (void**)dst;
> +    *d = *s;
> + return dst;
> +  }
> +
>    memmove (dst, src, n);
> +
>    /* Not necessary to copy bounds if size is less then size of pointer
>       or SRC==DST.  */
> -  if ((n >= sizeof (void *)) && (src != dst))
> +  if ((n > sizeof (void *)) && (src != dst))
>      move_bounds (dst, src, n);
>
>    return dst;
Ilya Enkovich Dec. 29, 2015, 12:51 p.m. UTC | #2
This patch is OK.  I applied it to trunk.

Thanks,
Ilya

2015-12-24 14:24 GMT+03:00 Aleksandra Tsvetkova <astsvetk@gmail.com>:
> Description:
> 2015-12-11  Tsvetkova Alexandra  <aleksandra.tsvetkova@intel.com>
>
>         * libmpxwrap/mpx_wrappers.c (__mpx_wrapper_memmove): separate
> case for size of pointer.
>
> On Thu, Dec 24, 2015 at 2:21 PM, Aleksandra Tsvetkova
> <astsvetk@gmail.com> wrote:
>> This patch was tested on spec2000, spec2006 and make check. It fixes
>> regression on vortex.
>>
>>
>> 2015-12-11  Tsvetkova Alexandra  <aleksandra.tsvetkova@intel.com>
>>
>> * libmpxwrap/mpx_wrappers.c (mpx_pointer): New type.
>>
>>
>> diff --git a/libmpx/mpxwrap/mpx_wrappers.c b/libmpx/mpxwrap/mpx_wrappers.c
>> old mode 100644
>> new mode 100755
>> index ffa7e7e..679e546
>> --- a/libmpx/mpxwrap/mpx_wrappers.c
>> +++ b/libmpx/mpxwrap/mpx_wrappers.c
>> @@ -483,10 +483,20 @@ __mpx_wrapper_memmove (void *dst, const void
>> *src, size_t n)
>>    __bnd_chk_ptr_bounds (dst, n);
>>    __bnd_chk_ptr_bounds (src, n);
>>
>> +  /* This is an speedup for size of pointer.  */
>> +  if (n == sizeof (void *))
>> +  {
>> +    const void **s = (const void**)src;
>> +    void **d = (void**)dst;
>> +    *d = *s;
>> + return dst;
>> +  }
>> +
>>    memmove (dst, src, n);
>> +
>>    /* Not necessary to copy bounds if size is less then size of pointer
>>       or SRC==DST.  */
>> -  if ((n >= sizeof (void *)) && (src != dst))
>> +  if ((n > sizeof (void *)) && (src != dst))
>>      move_bounds (dst, src, n);
>>
>>    return dst;
Thomas Schwinge Jan. 11, 2016, 8:21 a.m. UTC | #3
Hi!

On Tue, 29 Dec 2015 15:51:56 +0300, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
> This patch is OK.  I applied it to trunk.
> 
> Thanks,
> Ilya
> 
> 2015-12-24 14:24 GMT+03:00 Aleksandra Tsvetkova <astsvetk@gmail.com>:
> > Description:
> > 2015-12-11  Tsvetkova Alexandra  <aleksandra.tsvetkova@intel.com>
> >
> >         * libmpxwrap/mpx_wrappers.c (__mpx_wrapper_memmove): separate
> > case for size of pointer.
> >
> > On Thu, Dec 24, 2015 at 2:21 PM, Aleksandra Tsvetkova
> > <astsvetk@gmail.com> wrote:
> >> This patch was tested on spec2000, spec2006 and make check. It fixes
> >> regression on vortex.
> >>
> >>
> >> 2015-12-11  Tsvetkova Alexandra  <aleksandra.tsvetkova@intel.com>
> >>
> >> * libmpxwrap/mpx_wrappers.c (mpx_pointer): New type.
> >>
> >>
> >> diff --git a/libmpx/mpxwrap/mpx_wrappers.c b/libmpx/mpxwrap/mpx_wrappers.c
> >> old mode 100644
> >> new mode 100755
> >> index ffa7e7e..679e546
> >> --- a/libmpx/mpxwrap/mpx_wrappers.c
> >> +++ b/libmpx/mpxwrap/mpx_wrappers.c
> >> @@ -483,10 +483,20 @@ __mpx_wrapper_memmove (void *dst, const void
> >> *src, size_t n)
> >>    __bnd_chk_ptr_bounds (dst, n);
> >>    __bnd_chk_ptr_bounds (src, n);
> >>
> >> +  /* This is an speedup for size of pointer.  */
> >> +  if (n == sizeof (void *))
> >> +  {
> >> +    const void **s = (const void**)src;
> >> +    void **d = (void**)dst;
> >> +    *d = *s;
> >> + return dst;
> >> +  }

I'm seeing the following compiler diagnostic:

    [...]/source-gcc/libmpx/mpxwrap/mpx_wrappers.c: In function '__mpx_wrapper_memmove':
    [...]/source-gcc/libmpx/mpxwrap/mpx_wrappers.c:492:8: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
         *d = *s;
            ^


Grüße
 Thomas


> >> +
> >>    memmove (dst, src, n);
> >> +
> >>    /* Not necessary to copy bounds if size is less then size of pointer
> >>       or SRC==DST.  */
> >> -  if ((n >= sizeof (void *)) && (src != dst))
> >> +  if ((n > sizeof (void *)) && (src != dst))
> >>      move_bounds (dst, src, n);
> >>
> >>    return dst;
diff mbox

Patch

diff --git a/libmpx/mpxwrap/mpx_wrappers.c b/libmpx/mpxwrap/mpx_wrappers.c
old mode 100644
new mode 100755
index ffa7e7e..679e546
--- a/libmpx/mpxwrap/mpx_wrappers.c
+++ b/libmpx/mpxwrap/mpx_wrappers.c
@@ -483,10 +483,20 @@  __mpx_wrapper_memmove (void *dst, const void
*src, size_t n)
   __bnd_chk_ptr_bounds (dst, n);
   __bnd_chk_ptr_bounds (src, n);

+  /* This is an speedup for size of pointer.  */
+  if (n == sizeof (void *))
+  {
+    const void **s = (const void**)src;
+    void **d = (void**)dst;
+    *d = *s;
+ return dst;
+  }
+
   memmove (dst, src, n);
+
   /* Not necessary to copy bounds if size is less then size of pointer
      or SRC==DST.  */
-  if ((n >= sizeof (void *)) && (src != dst))
+  if ((n > sizeof (void *)) && (src != dst))
     move_bounds (dst, src, n);