microptimization: mark _PyGC_generation0 as having a const address
this is an advantage for _PyObject_GC_TRACK which before compiled to something like this: cmpq $-2, -16(%rdi) jne .LBB0_2 movq $-3, -16(%rdi) movq _PyGC_generation0(%rip), %rax movq %rax, -32(%rdi) movq _PyGC_generation0(%rip), %rax movq 8(%rax), %rax movq %rax, -24(%rdi) leaq -32(%rdi), %rcx movq %rcx, (%rax) movq _PyGC_generation0(%rip), %rax movq %rcx, 8(%rax) and now compiles to cmpq $-2, -16(%rdi) jne .LBB0_2 movq $-3, -16(%rdi) movq _PyGC_generation0(%rip), %rax movq %rax, -32(%rdi) movq 8(%rax), %rcx movq %rcx, -24(%rdi) leaq -32(%rdi), %rdx movq %rdx, (%rcx) movq %rdx, 8(%rax) notice that it had to load _PyGC_generation0 three times because the compiler had to assume that because of aliasing it got motified. (and this loads actually showed up in profiling as somewhat expensive)
Showing
Please register or sign in to comment