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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

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

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, right before REE we have:
(insn 15 14 16 4 (set (reg/v:QI 4 si [orig:93 xr ] [93])
        (mem:QI (reg/v/f:SI 1 dx [orig:104 in ] [104]) [0 MEM[base: in_26,
offset: 0B]+0 S1 A8])) "pr50038.c":13 88 {*movqi_internal}
     (nil))
... // neither si nor bx referenced
(insn 36 18 19 4 (set (reg/v:QI 3 bx [orig:93 xr ] [93])
        (reg/v:QI 4 si [orig:93 xr ] [93])) "pr50038.c":15 88 {*movqi_internal}
     (nil))
(insn 19 36 20 4 (set (reg:SI 4 si [orig:109 xr ] [109])
        (zero_extend:SI (reg/v:QI 3 bx [orig:93 xr ] [93]))) "pr50038.c":15 140
{*zero_extendqisi2}
     (nil))

REE has framework to optimize
         (set (reg1) (expression))
         ...
         (set (reg2) (any_extend (reg1)))
to
         (set (reg2) (any_extend (expression)))
         (set (reg1) (reg2))
but that is not the case here, we'd need to extend that to handle also
         (set (reg1) (expression))
         ...
         (set (reg2) (reg1))
         ...
         (set (reg1) (any_extend (reg2)))
to
         (set (reg1) (any_extend (expression)))
         (set (reg2) (reg1))
and possibly:
         (set (reg1) (expression))
         ...
         (set (reg2) (reg1))
         ...
         (set (reg3) (any_extend (reg2)))
to
         (set (reg3) (any_extend (expression)))
         (set (reg1) (reg3))
         (set (reg2) (reg3))
Jeff, thoughts on this?

Reply via email to