------- Comment #13 from uros at gcc dot gnu dot org  2007-05-17 07:31 -------
Subject: Bug 24659

Author: uros
Date: Thu May 17 06:31:05 2007
New Revision: 124784

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=124784
Log:
        PR tree-optimization/24659
        * optabs.h (enum optab_index): Add OTI_vec_unpacks_float_hi,
        OTI_vec_unpacks_float_lo, OTI_vec_unpacku_float_hi,
        OTI_vec_unpacku_float_lo, OTI_vec_pack_sfix_trunc and
        OTI_vec_pack_ufix_trunc.
        (vec_unpacks_float_hi_optab): Define new macro.
        (vec_unpacks_float_lo_optab): Ditto.
        (vec_unpacku_float_hi_optab): Ditto.
        (vec_unpacku_float_lo_optab): Ditto.
        (vec_pack_sfix_trunc_optab): Ditto.
        (vec_pack_ufix_trunc_optab): Ditto.
        * genopinit.c (optabs): Implement vec_unpack[s|u]_[hi|lo]_optab
        and vec_pack_[s|u]fix_trunc_optab using
        vec_unpack[s|u]_[hi\lo]_* and vec_pack_[u|s]fix_trunc_* patterns
        * tree-vectorizer.c (supportable_widening_operation): Handle
        FLOAT_EXPR and CONVERT_EXPR.  Update comment.
        (supportable_narrowing_operation): New function.
        * tree-vectorizer.h (supportable_narrowing_operation): Prototype.
        * tree-vect-transform.c (vectorizable_conversion): Handle
        (nunits_in == nunits_out / 2) and (nunits_out == nunits_in / 2) cases.
        (vect_gen_widened_results_half): Move before vectorizable_conversion.
        (vectorizable_type_demotion): Call supportable_narrowing_operation()
        to check for target support.
        * optabs.c (optab_for_tree_code) Return vec_unpack[s|u]_float_hi_optab
        for VEC_UNPACK_FLOAT_HI_EXPR, vec_unpack[s|u]_float_lo_optab
        for VEC_UNPACK_FLOAT_LO_EXPR and vec_pack_[u|s]fix_trunc_optab
        for VEC_PACK_FIX_TRUNC_EXPR.
        (expand_binop): Special case mode of the result for
        vec_pack_[u|s]fix_trunc_optab.
        (init_optabs): Initialize vec_unpack[s|u]_[hi|lo]_optab and
        vec_pack_[u|s]fix_trunc_optab.

        * tree.def (VEC_UNPACK_FLOAT_HI_EXPR, VEC_UNPACK_FLOAT_LO_EXPR,
        VEC_PACK_FIX_TRUNC_EXPR): New tree codes.
        * tree-pretty-print.c (dump_generic_node): Handle
        VEC_UNPACK_FLOAT_HI_EXPR, VEC_UNPACK_FLOAT_LO_EXPR and
        VEC_PACK_FIX_TRUNC_EXPR.
        (op_prio): Ditto.
        * expr.c (expand_expr_real_1): Ditto.
        * tree-inline.c (estimate_num_insns_1): Ditto.
        * tree-vect-generic.c (expand_vector_operations_1): Ditto.

        * config/i386/sse.md (vec_unpacks_float_hi_v8hi): New expander.
        (vec_unpacks_float_lo_v8hi): Ditto.
        (vec_unpacku_float_hi_v8hi): Ditto.
        (vec_unpacku_float_lo_v8hi): Ditto.
        (vec_unpacks_float_hi_v4si): Ditto.
        (vec_unpacks_float_lo_v4si): Ditto.
        (vec_pack_sfix_trunc_v2df): Ditto.

        * doc/c-tree.texi (Expression trees) [VEC_UNPACK_FLOAT_HI_EXPR]:
        Document.
        [VEC_UNPACK_FLOAT_LO_EXPR]: Ditto.
        [VEC_PACK_FIX_TRUNC_EXPR]: Ditto.
        * doc/md.texi (Standard Names) [vec_pack_sfix_trunc]: Document.
        [vec_pack_ufix_trunc]: Ditto.
        [vec_unpacks_float_hi]: Ditto.
        [vec_unpacks_float_lo]: Ditto.
        [vec_unpacku_float_hi]: Ditto.
        [vec_unpacku_float_lo]: Ditto.

testsuite/ChangeLog:

        PR tree-optimization/24659
        * gcc.dg/vect/vect-floatint-conversion-2.c: New test.
        * gcc.dg/vect/vect-intfloat-conversion-1.c: Require vect_float,
        not vect_int target.
        * gcc.dg/vect/vect-intfloat-conversion-2.c: Require vect_float,
        not vect_int target.  Loop is vectorized for vect_intfloat_cvt
        targets.
        * gcc.dg/vect/vect-intfloat-conversion-3.c: New test.
        * gcc.dg/vect/vect-intfloat-conversion-4a.c: New test.
        * gcc.dg/vect/vect-intfloat-conversion-4b.c: New test.


Added:
    trunk/gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-2.c
    trunk/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-3.c
    trunk/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-4a.c
    trunk/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-4b.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/i386/sse.md
    trunk/gcc/doc/c-tree.texi
    trunk/gcc/doc/md.texi
    trunk/gcc/expr.c
    trunk/gcc/genopinit.c
    trunk/gcc/optabs.c
    trunk/gcc/optabs.h
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-1.c
    trunk/gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-2.c
    trunk/gcc/tree-inline.c
    trunk/gcc/tree-pretty-print.c
    trunk/gcc/tree-vect-generic.c
    trunk/gcc/tree-vect-transform.c
    trunk/gcc/tree-vectorizer.c
    trunk/gcc/tree-vectorizer.h
    trunk/gcc/tree.def


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24659

Reply via email to