https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122873
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot
gnu.org
Status|NEW |ASSIGNED
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
305 gcc_assert (known_eq (GET_MODE_BITSIZE (from_mode),
306 GET_MODE_BITSIZE (to_mode)));
(gdb) p debug_rtx (to)
(reg:VNx8BI 149 [ _87 ])
$1 = void
(gdb) p debug_rtx (from)
(reg:V8QI 193 [ _84 ])
(gdb) p debug_gimple_stmt (g)
_86 = (vector(8) <signed-boolean:8>) _85;
this is a conversion from vector(8) <signed-boolean:8> to
vector(8) <signed-boolean:8> but with different mode. GIMPLE verification
is happy because TYPE_VECTOR_SUBPARTS of both are known_eq, so I wonder
why the mode sizes are not known_eq with -msve-vector-bits=128?!
The conversion is created by
0x00000000023144cc in vect_transform_cycle_phi (loop_vinfo=0x5187470,
stmt_info=0x533c3d0, slp_node=0x52ac630, slp_node_instance=0x533d290)
at /space/rguenther/src/gcc-autopar_devel/gcc/tree-vect-loop.cc:8368
8366 /* The epilogue loop might use a different vector mode, like
8367 VNx2DI vs. V2DI. */
8368 if (TYPE_MODE (vectype_out) != TYPE_MODE (TREE_TYPE (def)))
8369 {
8370 tree reduc_type = build_vector_type_for_mode
8371 (TREE_TYPE (TREE_TYPE (def)), TYPE_MODE (vectype_out));
8372 def = gimple_convert (&stmts, reduc_type, def);
This is when we try to re-use an accumulator from
vector(16) <signed-boolean:8> [V16QI] to an epilog with
vector(8) <signed-boolean:2> [VNx8BI]. We're using an intermediate
vector type vector(8) signed char [V8QI] for this.
I belive re-usable accumulators with bool vectors are not ready yet. It
will work for classical cases where the punning to data vectors "works",
but the types are not really correct.