Re: src/port/snprintf.c: Optimize the common base=10 case in fmtint

Andres Freund <andres@anarazel.de>

From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Mark Dilger <mark.dilger@enterprisedb.com>, Arjan van de Ven <arjan@linux.intel.com>, pgsql-hackers@postgresql.org
Date: 2021-10-26T18:58:31Z
Lists: pgsql-hackers
Hi,

On 2021-10-26 14:33:08 -0400, Tom Lane wrote:
> Andres Freund <andres@anarazel.de> writes:
> > On 2021-10-26 13:51:55 -0400, Tom Lane wrote:
> >> I'd be inclined to just hard-wire the three allowed cases, and not have
> >> an arbitrary-divisor code path at all.
>
> > Yea, I came to the same conclusion. But I'd implement it by moving the
> > division into a separate inline function called from the switch. I tested that
> > locally and it works, but I got sidetracked by [1].
>
> Uh, why not just a "switch (base)" around three copies of the loop?
> Don't overthink this.

Well, putting the loop into its own function isn't really much more
complicated than duplicating the body. And there's also a few more
"unnecessarily run-time" branches that we could get rid of that way.

But I'm also ok with duplicating, at least for now.

Greetings,

Andres Freund



Commits

  1. Speed up printing of integers in snprintf.c.