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

--- Comment #3 from Zdenek Sojka <zsojka at seznam dot cz> ---
(In reply to Jakub Jelinek from comment #2)
> Untested fix:
> --- gcc/config/i386/i386.c    (revision 234449)
> +++ gcc/config/i386/i386.c    (working copy)
> @@ -46930,7 +46930,7 @@ half:
>      {
>        tmp = gen_reg_rtx (mode);
>        emit_insn (gen_rtx_SET (tmp, gen_rtx_VEC_DUPLICATE (mode, val)));
> -      emit_insn (gen_blendm (target, tmp, target,
> +      emit_insn (gen_blendm (target, target, tmp,
>                            force_reg (mmode,
>                                       gen_int_mode (1 << elt, mmode))));
>      }

Thanks, that fixes the testcase and some other miscompiles. I haven't run the
testsuite though.

Is the fact that the useless cast in:
  x ^= ((v16si)v)[u[0]];
changes the generated code (makes it significantly worse at all opt levels)
worth creating a PR?

Reply via email to