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

--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> ---
The problem lies in:

(insn 4214 4213 4219 2 (parallel [
            (set (subreg:DI (reg:V32HI 4037 [ i ]) 0)
                (ior:DI (reg:DI 4040)
                    (reg:DI 4038 [ _7 ])))
            (clobber (reg:CC 17 flags))
        ]) "pr85090.c":13 442 {*iordi_1}
     (expr_list:REG_DEAD (reg:DI 4040)
        (expr_list:REG_DEAD (reg:DI 4038 [ _7 ])
            (expr_list:REG_UNUSED (reg:CC 17 flags)
                (nil)))))

(insn 4219 4214 4220 2 (set (reg/i:V32HI 21 xmm0)
        (reg:V32HI 4037 [ i ])) "pr85090.c":16 1254 {movv32hi_internal}
     (expr_list:REG_DEAD (reg:V32HI 4037 [ i ])

where (insn 4214) reloads with:

(insn 4214 4213 5658 2 (parallel [
            (set (reg:DI 0 ax [4040])
                (ior:DI (reg:DI 0 ax [4040])
                    (reg:DI 1 dx [orig:4038 _7 ] [4038])))
            (clobber (reg:CC 17 flags))
        ]) "pr85090.c":13 442 {*iordi_1}
     (nil))
(insn 5658 4214 5812 2 (set (mem/c:DI (plus:DI (reg/f:DI 7 sp)
                (const_int 264 [0x108])) [4 %sfp+-64 S8 A512])
        (reg:DI 0 ax [4040])) "pr85090.c":13 85 {*movdi_internal}
     (nil))
(insn 5812 5658 4219 2 (set (reg:DI 57 xmm20 [orig:422 i ] [422])
        (mem/c:DI (plus:DI (reg/f:DI 7 sp)
                (const_int 264 [0x108])) [4 %sfp+-64 S8 A512])) "pr85090.c":13
85 {*movdi_internal}
     (nil))
(insn 4219 5812 4220 2 (set (reg/i:V32HI 21 xmm0)
        (reg/v:V32HI 57 xmm20 [orig:422 i ] [422])) "pr85090.c":16 1254
{movv32hi_internal}
     (nil))

Using a subreg is not enough to change only part of the register.

Reply via email to