STINNER Victor <vstin...@redhat.com> added the comment:

I tested PR 10079 using gdb on Fedora 28 with GCC 8.1.1 to check if 
Py_INCREF/Py_DECREF functions are inlined.

I understand that "static inline void Py_INCREF()" is *not* inline by gcc -O0, 
but it *is* inlined using gcc -Og which is the *default* optimization level of 
./configure --with-debug.

To develop on Python, I force -O0, because the compilation time matters more 
than runtime performance for me :-) Compilation on my laptop using 
MAKEFLAGS=-j9:

* -O0: 21s
* -0g: 36s (1.7x slower)


... But Py_INCREF/DECREF are always inlined, even with -O0, when using 
__attribute__((always_inline))! I will work on a change to use that.


== gcc -O0 ==

(gdb) disassemble Py_IncRef 
Dump of assembler code for function Py_IncRef:
   ...
   0x000000000047276a <+20>:    cmpq   $0x0,-0x8(%rbp)
   0x000000000047276f <+25>:    je     0x47277d <Py_IncRef+39>
   0x0000000000472771 <+27>:    mov    -0x8(%rbp),%rax
   0x0000000000472775 <+31>:    mov    %rax,%rdi
   0x0000000000472778 <+34>:    callq  0x472523 <_Py_INCREF>
   0x000000000047277d <+39>:    nop
   0x000000000047277e <+40>:    leaveq 
   0x000000000047277f <+41>:    retq   

(gdb) disassemble Py_DecRef 
Dump of assembler code for function Py_DecRef:
   ...
   0x0000000000472794 <+20>:    cmpq   $0x0,-0x8(%rbp)
   0x0000000000472799 <+25>:    je     0x4727b1 <Py_DecRef+49>
   0x000000000047279b <+27>:    mov    -0x8(%rbp),%rax
   0x000000000047279f <+31>:    mov    %rax,%rdx
   0x00000000004727a2 <+34>:    mov    $0xe1,%esi
   0x00000000004727a7 <+39>:    mov    $0x65c550,%edi
   0x00000000004727ac <+44>:    callq  0x472554 <_Py_DECREF>
   0x00000000004727b1 <+49>:    nop
   0x00000000004727b2 <+50>:    leaveq 
   0x00000000004727b3 <+51>:    retq   


== gcc -Og ==

(gdb) disassemble Py_IncRef 
Dump of assembler code for function Py_IncRef:
   0x0000000000462de2 <+0>:     test   %rdi,%rdi
   0x0000000000462de5 <+3>:     je     0x462dfb <Py_IncRef+25>
   0x0000000000462de7 <+5>:     addq   $0x1,0x4bfc09(%rip)        # 0x9229f8 
<_Py_RefTotal>
   0x0000000000462def <+13>:    mov    0x10(%rdi),%rax
   0x0000000000462df3 <+17>:    add    $0x1,%rax
   0x0000000000462df7 <+21>:    mov    %rax,0x10(%rdi)
   0x0000000000462dfb <+25>:    retq   

(gdb) disassemble Py_DecRef 
Dump of assembler code for function Py_DecRef:
   0x0000000000463b2e <+0>:     test   %rdi,%rdi
   0x0000000000463b31 <+3>:     je     0x463b6f <Py_DecRef+65>
   0x0000000000463b33 <+5>:     sub    $0x8,%rsp
   0x0000000000463b37 <+9>:     subq   $0x1,0x4beeb9(%rip)        # 0x9229f8 
<_Py_RefTotal>
   0x0000000000463b3f <+17>:    mov    0x10(%rdi),%rax
   0x0000000000463b43 <+21>:    sub    $0x1,%rax
   0x0000000000463b47 <+25>:    mov    %rax,0x10(%rdi)
   0x0000000000463b4b <+29>:    je     0x463b68 <Py_DecRef+58>
   0x0000000000463b4d <+31>:    js     0x463b54 <Py_DecRef+38>
   0x0000000000463b4f <+33>:    add    $0x8,%rsp
   0x0000000000463b53 <+37>:    retq   
   0x0000000000463b54 <+38>:    mov    %rdi,%rdx
   0x0000000000463b57 <+41>:    mov    $0xe1,%esi
   0x0000000000463b5c <+46>:    mov    $0x5e1120,%edi
   0x0000000000463b61 <+51>:    callq  0x462da4 <_Py_NegativeRefcount>
   0x0000000000463b66 <+56>:    jmp    0x463b4f <Py_DecRef+33>
   0x0000000000463b68 <+58>:    callq  0x463b0c <_Py_Dealloc>
   0x0000000000463b6d <+63>:    jmp    0x463b4f <Py_DecRef+33>
   0x0000000000463b6f <+65>:    retq

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35059>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

  • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor
    • ... Aaron Hall
    • ... Benjamin Peterson
    • ... STINNER Victor
    • ... శ్రీనివాస్ రెడ్డి తాటిపర్తి
    • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor
    • ... Serhiy Storchaka
    • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor
    • ... STINNER Victor

Reply via email to