These patterns:

> (define_insn "avx2_lshlqv4di3"
>   [(set (match_operand:V4DI 0 "register_operand" "=x")
>         (ashift:V4DI (match_operand:V4DI 1 "register_operand" "x")
>                      (match_operand:SI 2 "const_0_to_255_mul_8_operand" 
> "n")))]
>   "TARGET_AVX2"
> {
>   operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
>   return "vpslldq\t{%2, %1, %0|%0, %1, %2}";
> }
...
> (define_insn "avx2_lshrqv4di3"
>   [(set (match_operand:V4DI 0 "register_operand" "=x")
>         (lshiftrt:V4DI
>          (match_operand:V4DI 1 "register_operand" "x")
>          (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
>   "TARGET_AVX2"
> {
>   operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
>   return "vpsrldq\t{%2, %1, %0|%0, %1, %2}";

are incorrect.  This is a 128-bit lane shift, i.e. V2TImode.

Uros, do you have an opinion on whether we should add V2TImode to
the set of modes, which means adding that to the move patterns.
Although given the scarse number of operations that we'd be able
to perform on V2TImode, perhaps it is better to simply use an unspec.


r~

Reply via email to