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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
           Keywords|                            |ra
   Last reconfirmed|                            |2020-04-20
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |vmakarov at gcc dot gnu.org

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I bet IRA is confused by the subregs.
The loop has:
(insn 30 26 32 4 (set (reg:V16SI 112)
        (unspec:V16SI [
                (subreg:V16SI (reg/v:V8DI 92 [ e ]) 0)
                (reg:V16SI 89 [ _25 ])
                (reg:V16SI 94 [ _63 ])
            ] UNSPEC_VPMADDUBSWACCSSD)) "include/avx512vnniintrin.h":66:20 5895
{vpdpbusds_v16si}
     (expr_list:REG_DEAD (reg/v:V8DI 92 [ e ])
        (nil)))
(insn 32 30 36 4 (set (reg/v:V8DI 92 [ e ])
        (subreg:V8DI (reg:V16SI 112) 0)) "include/avx512vnniintrin.h":66:10
1327 {movv8di_internal}
     (nil))
(insn 36 32 38 4 (set (reg:V16SI 116)
        (unspec:V16SI [
                (subreg:V16SI (reg/v:V8DI 88 [ f ]) 0)
                (reg:V16SI 89 [ _25 ])
                (reg:V16SI 93 [ _61 ])
            ] UNSPEC_VPMADDUBSWACCSSD)) "include/avx512vnniintrin.h":66:20 5895
{vpdpbusds_v16si}
     (expr_list:REG_DEAD (reg:V16SI 89 [ _25 ])
        (expr_list:REG_DEAD (reg/v:V8DI 88 [ f ])
            (nil))))
(insn 38 36 39 4 (set (reg/v:V8DI 88 [ f ])
        (subreg:V8DI (reg:V16SI 116) 0)) "include/avx512vnniintrin.h":66:10
1327 {movv8di_internal}
     (nil))
as the only instructions that refer pseudos 112, 92, 116, 88 and the
constraints on the vpdpbusds_v16si
insn are "=v" "0" "v" "vm", so best would be if IRA assigns the same hard
register to pseudos 112 and 92
and another one to 116 and 88.  But it actually assigns a different hard
register for each.

Reply via email to