* tree-vectorizer.h (vect_is_simple_reduction): Takes a loop_vec_info
authordorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Aug 2007 09:39:50 +0000 (09:39 +0000)
committerdorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Aug 2007 09:39:50 +0000 (09:39 +0000)
commit221e9a92bd54d3f572f14697a066205ee80ec187
tree1440005827d5c910ba6597f144fa3292c95f2032
parent8787bd6a0c69004eb4cfac92bc1c50a16a703c35
    * tree-vectorizer.h (vect_is_simple_reduction): Takes a loop_vec_info
        as argument instead of struct loop.
        (nested_in_vect_loop_p): New function.
        (vect_relevant): Add enum values vect_used_in_outer_by_reduction and
        vect_used_in_outer.
        (is_loop_header_bb_p): New. Used to differentiate loop-header phis
        from other phis in the loop.
        (destroy_loop_vec_info): Add additional argument to declaration.

        * tree-vectorizer.c (supportable_widening_operation): Also check if
        nested_in_vect_loop_p (don't allow changing the order in this case).
        (vect_is_simple_reduction): Takes a loop_vec_info as argument instead
        of struct loop. Call nested_in_vect_loop_p and don't require
        flag_unsafe_math_optimizations if it returns true.
        (new_stmt_vec_info): When setting def_type for phis differentiate
        loop-header phis from other phis.
        (bb_in_loop_p): New function.
        (new_loop_vec_info): Inner-loop phis already have a stmt_vinfo, so just
        update their loop_vinfo.  Order of BB traversal now matters - call
        dfs_enumerate_from with bb_in_loop_p.
        (destroy_loop_vec_info): Takes additional argument to control whether
        stmt_vinfo of the loop stmts should be destroyed as well.
        (vect_is_simple_reduction): Allow the "non-reduction" use of a
        reduction stmt to be defines by a non loop-header phi.
        (vectorize_loops): Call destroy_loop_vec_info with additional argument.

        * tree-vect-transform.c (vectorizable_reduction): Call
        nested_in_vect_loop_p. Check for multitypes in the inner-loop.
        (vectorizable_call): Likewise.
        (vectorizable_conversion): Likewise.
        (vectorizable_operation): Likewise.
        (vectorizable_type_promotion): Likewise.
        (vectorizable_type_demotion): Likewise.
        (vectorizable_store): Likewise.
        (vectorizable_live_operation): Likewise.
        (vectorizable_reduction): Likewise. Also pass loop_info to
        vect_is_simple_reduction instead of loop.
        (vect_init_vector): Call nested_in_vect_loop_p.
        (get_initial_def_for_reduction): Likewise.
        (vect_create_epilog_for_reduction): Likewise.
        (vect_init_vector): Check which loop to work with, in case there's an
        inner-loop.
        (get_initial_def_for_inducion): Extend to handle outer-loop
        vectorization. Fix indentation.
        (vect_get_vec_def_for_operand): Support phis in the case vect_loop_def.
        In the case vect_induction_def get the vector def from the induction
        phi node, instead of calling get_initial_def_for_inducion.
        (get_initial_def_for_reduction): Extend to handle outer-loop
        vectorization.
        (vect_create_epilog_for_reduction): Extend to handle outer-loop
        vectorization.
        (vect_transform_loop): Change assert to just skip this case.  Add a
        dump printout.
        (vect_finish_stmt_generation): Add a couple asserts.

        (vect_estimate_min_profitable_iters): Multiply
        cost of inner-loop stmts (in outer-loop vectorization) by estimated
        inner-loop bound.
        (vect_model_reduction_cost): Don't add reduction epilogue cost in case
        this is an inner-loop reduction in outer-loop vectorization.

        * tree-vect-analyze.c (vect_analyze_scalar_cycles_1): New function.
        Same code as what used to be vect_analyze_scalar_cycles, only with
        additional argument loop, and loop_info passed to
        vect_is_simple_reduction instead of loop.
        (vect_analyze_scalar_cycles): Code factored out into
        vect_analyze_scalar_cycles_1. Call it for each relevant loop-nest.
        Updated documentation.
        (analyze_operations): Check for inner-loop loop-closed exit-phis during
        outer-loop vectorization that are live or not used in the outerloop,
        cause this requires special handling.
        (vect_enhance_data_refs_alignment): Don't consider versioning for
        nested-loops.
        (vect_analyze_data_refs): Check that there are no datarefs in the
        inner-loop.
        (vect_mark_stmts_to_be_vectorized): Also consider vect_used_in_outer
        and vect_used_in_outer_by_reduction cases.
        (process_use): Also consider the case of outer-loop stmt defining an
        inner-loop stmt and vice versa.
        (vect_analyze_loop_1): New function.
        (vect_analyze_loop_form): Extend, to allow a restricted form of nested
        loops.  Call vect_analyze_loop_1.
        (vect_analyze_loop): Skip (inner-)loops within outer-loops that have
        been vectorized.  Call destroy_loop_vec_info with additional argument.

        * tree-vect-patterns.c (vect_recog_widen_sum_pattern): Don't allow
        in the inner-loop when doing outer-loop vectorization. Add
        documentation and printout.
        (vect_recog_dot_prod_pattern): Likewise. Also add check for
        GIMPLE_MODIFY_STMT (in case we encounter a phi in the loop).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127623 138bc75d-0d04-0410-961f-82ee72b054a4
43 files changed:
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-outer-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-outer-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-outer-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-outer-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-noreassoc-outer-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10a.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-10b.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-11.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-12.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-13.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-14.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-15.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-16.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-17.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-19.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-20.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-21.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-22.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-7.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-8.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-9.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-9a.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-9b.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/no-tree-scev-cprop-vect-iv-1.c
gcc/testsuite/gcc.dg/vect/no-tree-scev-cprop-vect-iv-2.c
gcc/testsuite/gcc.dg/vect/no-tree-scev-cprop-vect-iv-3.c
gcc/testsuite/gcc.dg/vect/vect-widen-mult-sum.c
gcc/testsuite/gcc.dg/vect/vect.exp
gcc/tree-vect-analyze.c
gcc/tree-vect-patterns.c
gcc/tree-vect-transform.c
gcc/tree-vectorizer.c
gcc/tree-vectorizer.h