Re: [PATCH] Make strbuf_cmp inline, constify its arguments and optimize it a bit
- From
David Kastrup <dak@gnu.org>
- Date
- Oct 7, 2007, 14:24 UTC
- Message-ID
- <85fy0nknnq.fsf@lola.goethe.zz>
- In-Reply-To
- <20071007140052.GA3260@steel.home>
Alex Riesen <raa.lkml@gmail.com> writes:
> It is definitely less code (also object code). It is not always > measurably faster (but mostly is).
Show 12 quoted lines
> -int strbuf_cmp(struct strbuf *a, struct strbuf *b)
> -{
> - int cmp;
> - if (a->len < b->len) {
> - cmp = memcmp(a->buf, b->buf, a->len);
> - return cmp ? cmp : -1;
> - } else {
> - cmp = memcmp(a->buf, b->buf, b->len);
> - return cmp ? cmp : a->len != b->len;
> - }
> -}
> -Show 8 quoted lines
> +static inline int strbuf_cmp(const struct strbuf *a, const struct strbuf *b)
> +{
> + int len = a->len < b->len ? a->len: b->len;
> + int cmp = memcmp(a->buf, b->buf, len);
> + if (cmp)
> + return cmp;
> + return a->len < b->len ? -1: a->len != b->len;
> +}My guess is that you are conflating two issues about speed here: the inlining will like speed the stuff up. But having to evaluate the (a->len < b->len) comparison twice will likely slow it down.
So if you do any profiling, you should do it on both separate angles of this patch.
-- David Kastrup, Kriemhildstr. 15, 44793 Bochum