On Fri, Apr 26, 2013 at 2:23 PM, Marc Glisse <marc.gli...@inria.fr> wrote:
> Ping http://gcc.gnu.org/ml/gcc-patches/2013-04/msg00783.html
>
> Even if we decide not to implement logic operators in the front-end, we
> still need the fix for the wrong code (the 2 save_expr in
> cp_build_binary_op, is that part of the patch ok with the vector-scalar-2.c
> testcase? and for 4.8?) and to avoid ICEing on __m128i f(__m128d a,__m128d
> b){return a<b&&b<a;} as we currently do in warn_logical_operator.

That part looks ok, but I'd rather have Jason approve it.  Maybe post it
separately?

Thanks,
Richard.

> On Fri, 12 Apr 2013, Marc Glisse wrote:
>
>> Hello,
>>
>> this adds support for vector !, && and ||. In the long run, I think it
>> would be good to be able to use TRUTH_*_EXPR with vectors, but that's
>> probably a lot of work.
>>
>> It currently restricts && and || to vector-vector operations. I'd like to
>> also support mixed scalar-vector later, but it is a bit more complicated.
>> With vectors, && evaluates both sides. For scal && vec, we have the choice
>> of making it short-circuit: cond_expr((bool)scal, vec!=0, {0}) or do a
>> vector and. For vec && scal, it seems clear we have to evaluate both
>> operands, but then we can also make it a cond_expr instead of a BIT_AND_EXPR
>> (technically, I think I can achieve that with save_expr and a compound_expr,
>> I don't know if there is a better way to add statements).
>>
>> The missing save_expr before build_vector_from_val are a bug I introduced
>> when I adapted the code from the C front-end. This bit (and the
>> vector-scalar-2.c testcase that goes with it) should probably be backported
>> to 4.8.
>>
>> The code we generate for these examples is not very good, but that's a
>> different issue.
>>
>> Bootstrap+testsuite on x86_64-linux-gnu.
>>
>> 2013-04-12  Marc Glisse  <marc.gli...@inria.fr>
>>
>> gcc/cp/
>>         * typeck.c (cp_build_binary_op): Call save_expr before
>>         build_vector_from_val.
>>         <TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, TRUTH_AND_EXPR,
>>         TRUTH_OR_EXPR>: Handle vectors.
>>         (cp_build_unary_op) <TRUTH_NOT_EXPR>: Likewise.
>>
>> gcc/c-family/
>>         * c-common.c (warn_logical_operator): Give up for vectors.
>>
>> gcc/testsuite/
>>         * c-c++-common/vector-scalar-2.c: New testcase.
>>         * g++.dg/ext/vector22.C: Likewise.
>>         * g++.dg/ext/vector23.C: Likewise.
>>         * g++.dg/ext/vector9.C: Adapt.
>>         * g++.dg/other/error23.C: Adapt.
>>
>>
>
> --
> Marc Glisse

Reply via email to