[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r995603 - /subversion/branches/performance/subversion/libsvn_subr/svn_string.c

From: Stefan Sperling <stsp_at_elego.de>
Date: Fri, 10 Sep 2010 15:32:14 +0200

On Thu, Sep 09, 2010 at 10:58:06PM -0000, stefan2_at_apache.org wrote:
> Author: stefan2
> Date: Thu Sep 9 22:58:06 2010
> New Revision: 995603
>
> URL: http://svn.apache.org/viewvc?rev=995603&view=rev
> Log:
> Try really hard to help the compiler generate good code
> for this frequently called function.
>
> * subversion/libsvn_subr/svn_string.c
> (svn_stringbuf_appendbyte): reformulate
>
> Modified:
> subversion/branches/performance/subversion/libsvn_subr/svn_string.c
>
> Modified: subversion/branches/performance/subversion/libsvn_subr/svn_string.c
> URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_subr/svn_string.c?rev=995603&r1=995602&r2=995603&view=diff
> ==============================================================================
> --- subversion/branches/performance/subversion/libsvn_subr/svn_string.c (original)
> +++ subversion/branches/performance/subversion/libsvn_subr/svn_string.c Thu Sep 9 22:58:06 2010
> @@ -403,8 +403,11 @@ svn_stringbuf_appendbyte(svn_stringbuf_t
> apr_size_t old_len = str->len;
> if (str->blocksize > old_len + 1)
> {
> - str->data[old_len] = byte;
> - str->data[old_len+1] = '\0';
> + char *dest = str->data;
> +
> + dest[old_len] = byte;
> + dest[old_len+1] = '\0';
> +
> str->len = old_len+1;
> }
> else
> @@ -412,7 +415,8 @@ svn_stringbuf_appendbyte(svn_stringbuf_t
> /* we need to re-allocate the string buffer
> * -> let the more generic implementation take care of that part
> */
> - svn_stringbuf_appendbytes(str, &byte, 1);
> + char b = byte;
> + svn_stringbuf_appendbytes(str, &b, 1);
> }
> }
>
>

If you're expecting this function to stay written as it now,
you need to add a comment explaining why it is laid out the way it is.
Otherwise people might change it, and the resulting generated code will
be less optimal again.

That said, I have my doubts whether tweaking C code in order to tune the
output of certain compilers in certain versions is a useful thing to do.
Will this still work as expected when new compiler versions are released?
It seems you'd rather want to fix the optimizer of the compiler.

Stefan
Received on 2010-09-10 15:32:56 CEST

This is an archived mail posted to the Subversion Dev mailing list.