On 09/27/2012 08:24 AM, Jakub Jelinek wrote:
> Hi!
>
> As discussed in the PR, the only way how to request a vector float/double
> logical operation in C/C++ code without intrinsics is by casting to integer
> vectors temporarily, but we then generate v?p{and,or,xor} instead of *p[sd].
>
> The following patch changes that if either both of the operands of
> vector integer and/or/xor are SUBREGs of the same vector float/double mode,
> or one is SUBREG and another one is CONST_VECTOR.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2012-09-27 Jakub Jelinek <[email protected]>
>
> PR target/54716
> * config/i386/predicates.md (nonimmediate_or_const_vector_operand):
> New predicate.
> * config/i386/i386.c (ix86_expand_vector_logical_operator): New
> function.
> * config/i386/i386-protos.h (ix86_expand_vector_logical_operator): New
> prototype.
> * config/i386/sse.md (<code><mode>3 VI logic): Use it.
>
> * gcc.target/i386/xorps-sse2.c: Remove xfails.
Ok.
r~