On Thu, Aug 13, 2026 at 8:16 PM Richard Biener <[email protected]> wrote:
>
> The following expands the double-conversion match patterns to also
> cover integer vectors (it already supports float vectors), adding
> required guards for supportability.  I have simplified
> supportable_convert_operation by eliding the useless output code
> argument (it's always the same as the input code).
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.
>
>         * match.pd ((convert (convert @0))): Allow integer vector
>         types, unify {inside,intrer,final}_vec, guard patterns that
>         are not correct for vectors and those that are with
>         checks the resulting conversion is supported by the target.
>         * optabs-tree.h (supportable_convert_operation): Remove
>         useless last argument.
>         * optabs-tree.cc (supportable_convert_operation): Likewise.
>         (supportable_half_widening_operation): Adjust.
>         * tree-vect-stmts.cc (vectorizable_conversion): Likewise.
>         (supportable_indirect_convert_operation): Likewise.
>         * tree-vect-generic.cc (expand_vector_conversion): Likewise.
>         * tree-vect-data-refs.cc (vect_gather_scatter_fn_p): Likewise.
>         * tree-ssa-forwprop.cc (simplify_vector_constructor): Likewise.
>
> Co-Authored-By: H.J. Lu <[email protected]>

It missed:

typedef int  v2si __attribute__((vector_size (8)));
typedef long long v2di __attribute__((vector_size (16)));

v2si
func (v2si a)
{
  v2di z = __builtin_convertvector (a, v2di);
  return __builtin_convertvector (z, v2si);
}

It should be compiled to an empty function.  But I got

        movdqa  %xmm0, %xmm1
        psrad   $31, %xmm1
        punpckldq       %xmm1, %xmm0
        shufps  $232, %xmm0, %xmm0


-- 
H.J.

Reply via email to