[Bug middle-end/78904] zero-extracts are not effective

segher at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Dec 22 22:08:00 GMT 2016


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

--- Comment #7 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Ah, "high byte" registers are never a separate register in the i386
backend, I see.

combine would need to combine four insns to arrive at your current
pattern, but it doesn't try because it thinks they are too complex.
If I change this code to count ZERO_EXTRACT in nshift as well, combine
does try, but comes up with

(set (zero_extract:SI (reg:SI 92 [ D.1801 ])
        (const_int 8 [0x8])
        (const_int 8 [0x8]))
    (subreg:SI (plus:QI (subreg:QI (zero_extract:SI (reg/v:SI 94 [ a ])
                    (const_int 8 [0x8])
                    (const_int 8 [0x8])) 0)
            (subreg:QI (zero_extract:SI (reg/v:SI 95 [ b ])
                    (const_int 8 [0x8])
                    (const_int 8 [0x8])) 0)) 0))

(so it does the plus as QImode).


More information about the Gcc-bugs mailing list