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

--- Comment #3 from Hongtao.liu <crazylht at gmail dot com> ---
ix86_expand_vector_init expects vals to be a parallel containing values of
individual fields which should be either element mode of the vector mode, or a
vector mode with the same element mode and smaller number of elements.
But in the expander ashlv16qi3, the second operand is SImode which can't be
directly passed to gen_vec_initv16qiqi.

I'm testing

1 file changed, 2 insertions(+), 1 deletion(-)
gcc/config/i386/sse.md | 3 ++-

modified   gcc/config/i386/sse.md
@@ -24153,8 +24153,9 @@ (define_expand "<insn><mode>3"
            negate = true;
        }
       par = gen_rtx_PARALLEL (V16QImode, rtvec_alloc (16));
+      tmp = lowpart_subreg (QImode, operands[2], SImode);
       for (i = 0; i < 16; i++)
-        XVECEXP (par, 0, i) = operands[2];
+        XVECEXP (par, 0, i) = tmp;

       tmp = gen_reg_rtx (V16QImode);
       emit_insn (gen_vec_initv16qiqi (tmp, par));

Reply via email to