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

--- Comment #23 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
In any case, (subreg:V16QI (reg:OO N) 0) folds to (reg:V16QI N) on little
endian and
(subreg:V16QI (reg:OO N) 16) folds to (reg:V16QI N+1), and
(subreg:V16QI (mem:OO X) 0) it folds to (mem:V16QI X) and
(subreg:V16QI (mem:OO X) 16) it folds to (mem:V16QI (plus X (const_int 16)).
And the behavior of lxvpx insn on little endian is clearly that it swaps the
doubleword order in the quadword:
(gdb) disas $pc,$pc+4
Dump of assembler code from 0x100008fc to 0x10000900:
=> 0x00000000100008fc <BF16GEMV_T_MMA_8+268>:   lxvpx   vs44,r30,r2
End of assembler dump.
(gdb) stepi
0x0000000010000900 in BF16GEMV_T_MMA_8 ()
(gdb) x/32bx $r2+$r30
0x10020120 <a.2+160>:   0xa9    0x3f    0xb7    0x3f    0xa7    0x3f    0x94   
0x3f
0x10020128 <a.2+168>:   0x1a    0x3f    0x7a    0x3f    0x9e    0x3f    0x93   
0x3f
0x10020130 <a.2+176>:   0xad    0x3f    0x6a    0x3f    0x49    0x3f    0x81   
0x3f
0x10020138 <a.2+184>:   0x41    0x3f    0xba    0x3f    0x66    0x3f    0xb0   
0x3f
(gdb) p/x $vs44.v16_int8
$37 = {0xad, 0x3f, 0x6a, 0x3f, 0x49, 0x3f, 0x81, 0x3f, 0x41, 0x3f, 0xba, 0x3f,
0x66, 0x3f, 0xb0, 0x3f}
(gdb) p/x $vs45.v16_int8
$38 = {0xa9, 0x3f, 0xb7, 0x3f, 0xa7, 0x3f, 0x94, 0x3f, 0x1a, 0x3f, 0x7a, 0x3f,
0x9e, 0x3f, 0x93, 0x3f}

Reply via email to