Re: [PATCH] Small optimization across postgres (remove strlen duplicate usage)

From: David Rowley <dgrowleyml(at)gmail(dot)com>
To: Ranier Vilela <ranier(dot)vf(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: [PATCH] Small optimization across postgres (remove strlen duplicate usage)
Date: 2020-04-20 01:00:40
Message-ID: CAApHDvq_-Q4U4uYUKud2KoD2OqO_DM+isDMGw3ccJq7EiM3hog@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, 20 Apr 2020 at 11:24, Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> wrote:
> I tried: https://godbolt.org with:
>
> -O2:
>
> f1:
> int main (int argv, char **argc)
> {
> return strlen(argc[0]) == 0;
> }
>
> f1: Assembly
> main: # @main
> mov rcx, qword ptr [rsi]
> xor eax, eax
> cmp byte ptr [rcx], 0
> sete al
> ret
>
> f2:
> int main (int argv, char **argc)
> {
> return argc[0] == '\0';
> }
>
> f2: Assembly
>
> main: # @main
> xor eax, eax
> cmp qword ptr [rsi], 0
> sete al
> ret
>
> For me clearly str [0] == '\ 0', wins.

I think you'd want to use argc[0][0] == '\0' or *argc[0] == '\0'.
Otherwise you appear just to be checking if the first element in the
argc pointer array is set to NULL, which is certainly not the same as
an empty string.

David

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jeff Davis 2020-04-20 02:48:14 Re: v13: Performance regression related to FORTIFY_SOURCE
Previous Message Tomas Vondra 2020-04-19 23:47:29 Re: sqlsmith crash incremental sort