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

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I think this is related to the *movsi_compare0 ARM define_ins which prevents
obvious cleanups, so we end up with:
(insn 97 90 98 24 (parallel [
            (set (reg:CC 100 cc)
                (compare:CC (reg:SI 131 [ d_lsm.22 ])
                    (const_int 0 [0])))
            (set (reg:SI 135)
                (reg:SI 131 [ d_lsm.22 ]))
        ]) "pr90275.c":18:20 248 {*movsi_compare0}
     (expr_list:REG_DEAD (reg:SI 131 [ d_lsm.22 ])
        (nil)))
// unrelated insn that doesn't touch SI 131 or SI 135, but consumes CC register
(insn 154 98 155 24 (set (reg:SI 131 [ d_lsm.22 ])
        (reg:SI 135)) "pr90275.c":18:20 241 {*arm_movsi_insn}
     (expr_list:REG_DEAD (reg:SI 135)
        (nil)))
where CSE is unhappy about the pseudo being copied there and back.

Reply via email to