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.