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

--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
It looks to me that LR shrinkage pass should not move

(insn 7 22 18 2 (set (reg/v:SI 115 [ e ])
        (reg:SI 2 cx [ e ])) "pr83620.c":7 86 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 2 cx [ e ])
        (nil)))

that includes hard register in likely spilled class (CX), since it is extending
its life across

(insn 292 3 30 2 (parallel [
            (set (reg:DI 130 [ f ])
                (ashiftrt:DI (reg:DI 37 r8 [ f ])
                    (subreg:QI (reg:SI 112 [ c ]) 0)))
            (clobber (reg:CC 17 flags))
        ]) "pr83620.c":8 580 {*ashrdi3_1}
     (expr_list:REG_DEAD (reg:SI 112 [ c ])
        (expr_list:REG_DEAD (reg:DI 37 r8 [ f ])
            (expr_list:REG_UNUSED (reg:CC 17 flags)

which needs CX.

Reply via email to