[Bug target/70079] missed constant propagation in memcpy expansion

segher at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Mar 7 00:05:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70079

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |segher at gcc dot gnu.org

--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> ---
(In reply to Paolo Bonzini from comment #0)
>         movq    %rdi, %rcx
>         leaq    8(%rdi), %rdi
>         andq    $-8, %rdi                 ;; 1
>         subq    %rdi, %rcx                ;; 2
>         subq    %rcx, %rsi                ;; 3
>         addl    $512, %ecx                ;; 4
>         shrl    $3, %ecx                  ;; 5
> 
> At 1, rdi = (a + 8) & ~7 = a & ~7 + 8 = a + 8 - (a & 7)
> At 2, rcx = a - rdi = a - a - 8 + (a & 7) = (a & 7) - 8
> At 3, rsi = b - (a & 7) + 8
> At 4, rcx = (a & 7) + 504, which is between 504 and 511
> At 5, rcx is always 31.

It would seem %rsi is still alive after this, so the %rcx input to "3"
has to be computed, which takes more than one insn so there is no way
combine will be able to handle this.


More information about the Gcc-bugs mailing list