On Tue, Sep 6, 2011 at 4:50 PM, Artem Shinkarov
<artyom.shinkar...@gmail.com> wrote:
> Here is a new version of the patch which considers the changes from
> 2011-09-02  Richard Guenther
>
>
> ChangeLog
>
> 20011-09-06 Artjoms Sinkarovs <artyom.shinkar...@gmail.com>
>
>       gcc/
>       * fold-const.c (constant_boolean_node): Adjust the meaning
>       of boolean for vector types: true = {-1,..}, false = {0,..}.
>       (fold_unary_loc): Avoid conversion of vector comparison to
>       boolean type.

Both changes have already been done.

>       * expr.c (expand_expr_real_2): Expand vector comparison by
>       building an appropriate VEC_COND_EXPR.

I prefer

Index: gcc/expr.c
===================================================================
*** gcc/expr.c.orig     2011-08-29 11:48:23.000000000 +0200
--- gcc/expr.c  2011-08-29 12:58:59.000000000 +0200
*************** do_store_flag (sepops ops, rtx target, e
*** 10309,10314 ****
--- 10309,10325 ----
    STRIP_NOPS (arg0);
    STRIP_NOPS (arg1);

+   /* For vector typed comparisons emit code to generate the desired
+      all-ones or all-zeros mask.  Conveniently use the VEC_COND_EXPR
+      expander for this.  */
+   if (TREE_CODE (ops->type) == VECTOR_TYPE)
+     {
+       tree ifexp = build2 (ops->code, ops->type, arg0, arg1);
+       tree if_true = constant_boolean_node (true, ops->type);
+       tree if_false = constant_boolean_node (false, ops->type);
+       return expand_vec_cond_expr (ops->type, ifexp, if_true,
if_false, target);
+     }
+
    /* Get the rtx comparison code to use.  We know that EXP is a comparison

as I said multiple times.

>       * c-typeck.c (build_binary_op): Typecheck vector comparisons.
>       (c_objc_common_truthvalue_conversion): Adjust.
>       * tree-vect-generic.c (do_compare): Helper function.
>       (expand_vector_comparison): Check if hardware supports
>       vector comparison of the given type or expand vector
>       piecewise.
>       (expand_vector_operation): Treat comparison as binary
>       operation of vector type.
>       (expand_vector_operations_1): Adjust.
>       * tree-cfg.c (verify_gimple_comparison): Adjust.

The tree-cfg.c change has already been done.

Richard.

>
>       gcc/config/i386
>       * i386.c (ix86_expand_sse_movcc): Consider a case when
>       vcond operators are {-1,..} and {0,..}.
>
>       gcc/doc
>       * extend.texi: Adjust.
>
>       gcc/testsuite
>       * gcc.c-torture/execute/vector-compare-1.c: New test.
>       * gcc.c-torture/execute/vector-compare-2.c: New test.
>       * gcc.dg/vector-compare-1.c: New test.
>       * gcc.dg/vector-compare-2.c: New test.
>
> bootstrapped and tested on x86_64-unknown-linux-gnu.
>
>
> Thanks,
> Artem.
>

Reply via email to