[HACKERS] Minor codegen silliness in ExecInterpExpr()

Поиск
Список
Период
Сортировка
От Tom Lane
Тема [HACKERS] Minor codegen silliness in ExecInterpExpr()
Дата
Msg-id 2508.1506630094@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: [HACKERS] Minor codegen silliness in ExecInterpExpr()  (Andres Freund <andres@anarazel.de>)
Список pgsql-hackers
I noticed the following while poking around with perf:
      |                             fcinfo->isnull = false;      |b5b:   movb   $0x0,0x1c(%rdx)      |
          *op->resvalue = op->d.func.fn_addr(fcinfo); 0.02 |       mov    0x8(%rbx),%rcx 1.19 |       mov    %rdx,%rdi
0.93|       mov    %rdx,(%rsp)      |       mov    %rcx,0x8(%rsp) 0.01 |       callq  *0x28(%rbx) 2.17 |       mov
0x8(%rsp),%rcx     |       mov    %rax,(%rcx)      |                             *op->resnull = fcinfo->isnull; 1.18 |
    mov    (%rsp),%rdx 4.32 |       mov    0x10(%rbx),%rax 0.06 |       movzbl 0x1c(%rdx),%edx 9.14 |       mov
%dl,(%rax)

It looks to me like gcc believes it is required to evaluate "op->resvalue"
before invoking the called function, just in case the function somehow has
access to *op and modifies that.  We could save a pointless register spill
and reload if there were a temporary variable in there, ie
    EEO_CASE(EEOP_FUNCEXPR)    {        FunctionCallInfo fcinfo = op->d.func.fcinfo_data;
+            Datum    fvalue;        fcinfo->isnull = false;
-            *op->resvalue = op->d.func.fn_addr(fcinfo);
+            fvalue = op->d.func.fn_addr(fcinfo);
+            *op->resvalue = fvalue;        *op->resnull = fcinfo->isnull;
        EEO_NEXT();    }

and likewise in the other FUNCEXPR cases.

This is on a rather old gcc, haven't checked on bleeding-edge versions.
        regards, tom lane


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: [HACKERS] [COMMITTERS] pgsql: Fix freezing of a dead HOT-updatedtuple
Следующее
От: Pavel Stehule
Дата:
Сообщение: [HACKERS] plpgsql_check future