Richard Guenther <rguent...@suse.de> wrote on 29/03/2009 13:05:56:
> On Sun, 29 Mar 2009, Ira Rosen wrote: > > > > > > I will announce the time I am doing the last trunk -> alias-improvements > > > branch merge and freeze the trunk for that. > > > > > > Thus, this is a heads-up - if I collide with your planned merge schedule > > > just tell me and we can sort it out. > > > > I was planning to commit the vectorizer reorganization patch ( > > http://gcc.gnu.org/ml/gcc-patches/2009-02/msg00573.html). Do you prefer > > that I wait, so it doesn't disturb the merge? > > If you can commit the patch soon (like, before wednesday) you can go > ahead. The differences are not big (see attachment below for what > is the difference between trunk and branch in tree-vect-*), so I think > I can deal with the reorg just fine. Great! I will commit it today or tomorrow then. Thanks, Ira > > Thanks, > Richard. > > > Index: gcc/tree-vectorizer.c > =================================================================== > --- gcc/tree-vectorizer.c (.../trunk) (revision 145210) > +++ gcc/tree-vectorizer.c (.../branches/alias-improvements) > (revision 145211) > @@ -973,7 +973,7 @@ slpeel_can_duplicate_loop_p (const struc > gimple orig_cond = get_loop_exit_condition (loop); > gimple_stmt_iterator loop_exit_gsi = gsi_last_bb (exit_e->src); > > - if (need_ssa_update_p ()) > + if (need_ssa_update_p (cfun)) > return false; > > if (loop->inner > Index: gcc/tree-vect-analyze.c > =================================================================== > --- gcc/tree-vect-analyze.c (.../trunk) (revision 145210) > +++ gcc/tree-vect-analyze.c (.../branches/alias-improvements) > (revision 145211) > @@ -3563,16 +3563,6 @@ vect_analyze_data_refs (loop_vec_info lo > return false; > } > > - if (!DR_SYMBOL_TAG (dr)) > - { > - if (vect_print_dump_info (REPORT_UNVECTORIZED_LOOPS)) > - { > - fprintf (vect_dump, "not vectorized: no memory tag for "); > - print_generic_expr (vect_dump, DR_REF (dr), TDF_SLIM); > - } > - return false; > - } > - > base = unshare_expr (DR_BASE_ADDRESS (dr)); > offset = unshare_expr (DR_OFFSET (dr)); > init = unshare_expr (DR_INIT (dr)); > @@ -3804,7 +3794,7 @@ vect_stmt_relevant_p (gimple stmt, loop_ > > /* changing memory. */ > if (gimple_code (stmt) != GIMPLE_PHI) > - if (!ZERO_SSA_OPERANDS (stmt, SSA_OP_VIRTUAL_DEFS)) > + if (gimple_vdef (stmt)) > { > if (vect_print_dump_info (REPORT_DETAILS)) > fprintf (vect_dump, "vec_stmt_relevant_p: stmt has vdefs."); > Index: gcc/tree-vect-transform.c > =================================================================== > --- gcc/tree-vect-transform.c (.../trunk) (revision 145210) > +++ gcc/tree-vect-transform.c (.../branches/alias-improvements) > (revision 145211) > @@ -51,7 +51,7 @@ static bool vect_transform_stmt (gimple, > slp_tree, slp_instance); > static tree vect_create_destination_var (tree, tree); > static tree vect_create_data_ref_ptr > - (gimple, struct loop*, tree, tree *, gimple *, bool, bool *, tree); > + (gimple, struct loop*, tree, tree *, gimple *, bool, bool *); > static tree vect_create_addr_base_for_vector_ref > (gimple, gimple_seq *, tree, struct loop *); > static tree vect_get_new_vect_var (tree, enum vect_var_kind, const char *); > @@ -1009,7 +1009,7 @@ vect_create_addr_base_for_vector_ref (gi > static tree > vect_create_data_ref_ptr (gimple stmt, struct loop *at_loop, > tree offset, tree *initial_address, gimple *ptr_incr, > - bool only_init, bool *inv_p, tree type) > + bool only_init, bool *inv_p) > { > tree base_name; > stmt_vec_info stmt_info = vinfo_for_stmt (stmt); > @@ -1020,7 +1020,6 @@ vect_create_data_ref_ptr (gimple stmt, s > tree vectype = STMT_VINFO_VECTYPE (stmt_info); > tree vect_ptr_type; > tree vect_ptr; > - tree tag; > tree new_temp; > gimple vec_stmt; > gimple_seq new_stmt_list = NULL; > @@ -1068,42 +1067,33 @@ vect_create_data_ref_ptr (gimple stmt, s > } > > /** (1) Create the new vector-pointer variable: **/ > - if (type) > - vect_ptr_type = build_pointer_type (type); > - else > - vect_ptr_type = build_pointer_type (vectype); > - > - if (TREE_CODE (DR_BASE_ADDRESS (dr)) == SSA_NAME > - && TYPE_RESTRICT (TREE_TYPE (DR_BASE_ADDRESS (dr)))) > - vect_ptr_type = build_qualified_type (vect_ptr_type, TYPE_QUAL_RESTRICT); > + vect_ptr_type = build_pointer_type (vectype); > vect_ptr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, > get_name (base_name)); > - if (TREE_CODE (DR_BASE_ADDRESS (dr)) == SSA_NAME > - && TYPE_RESTRICT (TREE_TYPE (DR_BASE_ADDRESS (dr)))) > + > + /* If any of the data-references in the stmt group does not conflict > + with the created vector data-reference use a ref-all pointer > instead. */ > + if (STMT_VINFO_DR_GROUP_SIZE (stmt_info) > 1) > { > - get_alias_set (base_name); > - DECL_POINTER_ALIAS_SET (vect_ptr) > - = DECL_POINTER_ALIAS_SET (SSA_NAME_VAR (DR_BASE_ADDRESS (dr))); > + gimple orig_stmt = STMT_VINFO_DR_GROUP_FIRST_DR (stmt_info); > + do > + { > + if (!alias_sets_conflict_p (get_deref_alias_set (vect_ptr), > + get_alias_set (gimple_assign_lhs (orig_stmt)))) > + { > + vect_ptr_type = build_pointer_type_for_mode (vectype, > + ptr_mode, true); > + vect_ptr = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, > + get_name (base_name)); > + break; > + } > + orig_stmt = STMT_VINFO_DR_GROUP_NEXT_DR (vinfo_for_stmt (orig_stmt)); > + } > + while (orig_stmt); > } > > add_referenced_var (vect_ptr); > > - /** (2) Add aliasing information to the new vector-pointer: > - (The points-to info (DR_PTR_INFO) may be defined later.) **/ > - > - tag = DR_SYMBOL_TAG (dr); > - gcc_assert (tag); > - > - /* If tag is a variable (and NOT_A_TAG) than a new symbol memory > - tag must be created with tag added to its may alias list. */ > - if (!MTAG_P (tag)) > - new_type_alias (vect_ptr, tag, DR_REF (dr)); > - else > - { > - set_symbol_mem_tag (vect_ptr, tag); > - mark_sym_for_renaming (tag); > - } > - > /** Note: If the dataref is in an inner-loop nested in LOOP, and we are > vectorizing LOOP (i.e. outer-loop vectorization), we need to create two > def-use update cycles for the pointer: One relative to the outer-loop > @@ -3327,7 +3317,7 @@ vectorizable_call (gimple stmt, gimple_s > return false; > } > > - gcc_assert (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)); > + gcc_assert (!gimple_vuse (stmt)); > > if (modifier == NARROW) > ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits_out; > @@ -3493,8 +3483,6 @@ vect_gen_widened_results_half (enum tree > { > gimple new_stmt; > tree new_temp; > - tree sym; > - ssa_op_iter iter; > > /* Generate half of the widened result: */ > if (code == CALL_EXPR) > @@ -3520,16 +3508,6 @@ vect_gen_widened_results_half (enum tree > } > vect_finish_stmt_generation (stmt, new_stmt, gsi); > > - if (code == CALL_EXPR) > - { > - FOR_EACH_SSA_TREE_OPERAND (sym, new_stmt, iter, SSA_OP_ALL_VIRTUALS) > - { > - if (TREE_CODE (sym) == SSA_NAME) > - sym = SSA_NAME_VAR (sym); > - mark_sym_for_renaming (sym); > - } > - } > - > return new_stmt; > } > > @@ -3694,9 +3672,6 @@ vectorizable_conversion (gimple stmt, gi > case NONE: > for (j = 0; j < ncopies; j++) > { > - tree sym; > - ssa_op_iter iter; > - > if (j == 0) > vect_get_vec_defs (op0, NULL, stmt, &vec_oprnds0, NULL, slp_node); > else > @@ -3711,13 +3686,6 @@ vectorizable_conversion (gimple stmt, gi > new_temp = make_ssa_name (vec_dest, new_stmt); > gimple_call_set_lhs (new_stmt, new_temp); > vect_finish_stmt_generation (stmt, new_stmt, gsi); > - FOR_EACH_SSA_TREE_OPERAND (sym, new_stmt, iter, > - SSA_OP_ALL_VIRTUALS) > - { > - if (TREE_CODE (sym) == SSA_NAME) > - sym = SSA_NAME_VAR (sym); > - mark_sym_for_renaming (sym); > - } > if (slp_node) > VEC_quick_push (gimple, SLP_TREE_VEC_STMTS (slp_node), new_stmt); > } > @@ -5394,7 +5362,7 @@ vectorizable_store (gimple stmt, gimple_ > TREE_TYPE (vec_oprnd))); > dataref_ptr = vect_create_data_ref_ptr (first_stmt, NULL, NULL_TREE, > &dummy, &ptr_incr, false, > - &inv_p, NULL); > + &inv_p); > gcc_assert (!inv_p); > } > else > @@ -5443,6 +5411,10 @@ vectorizable_store (gimple stmt, gimple_ > vec_oprnd = VEC_index (tree, result_chain, i); > > data_ref = build_fold_indirect_ref (dataref_ptr); > + /* If accesses through a pointer to vectype do not alias the original > + memory reference we have a problem. This should never happen. */ > + gcc_assert (alias_sets_conflict_p (get_alias_set (data_ref), > + get_alias_set (gimple_assign_lhs (stmt)))); > > /* Arguments are ready. Create the new vector stmt. */ > new_stmt = gimple_build_assign (data_ref, vec_oprnd); > @@ -5633,7 +5605,7 @@ vect_setup_realignment (gimple stmt, gim > pe = loop_preheader_edge (loop_for_initial_load); > vec_dest = vect_create_destination_var (scalar_dest, vectype); > ptr = vect_create_data_ref_ptr (stmt, loop_for_initial_load, NULL_TREE, > - &init_addr, &inc, true, &inv_p, NULL_TREE); > + &init_addr, &inc, true, &inv_p); > data_ref = build1 (ALIGN_INDIRECT_REF, vectype, ptr); > new_stmt = gimple_build_assign (vec_dest, data_ref); > new_temp = make_ssa_name (vec_dest, new_stmt); > @@ -6016,8 +5988,6 @@ vect_create_mask_and_perm (gimple stmt, > stmt_vec_info next_stmt_info; > int i, group_size, stride, dr_chain_size; > tree first_vec, second_vec, data_ref; > - tree sym; > - ssa_op_iter iter; > VEC (tree, heap) *params = NULL; > > /* Create a vector mask. */ > @@ -6055,12 +6025,6 @@ vect_create_mask_and_perm (gimple stmt, > data_ref = make_ssa_name (perm_dest, perm_stmt); > gimple_call_set_lhs (perm_stmt, data_ref); > vect_finish_stmt_generation (stmt, perm_stmt, gsi); > - FOR_EACH_SSA_TREE_OPERAND (sym, perm_stmt, iter, SSA_OP_ALL_VIRTUALS) > - { > - if (TREE_CODE (sym) == SSA_NAME) > - sym = SSA_NAME_VAR (sym); > - mark_sym_for_renaming (sym); > - } > > /* Store the vector statement in NODE. */ > VEC_replace (gimple, SLP_TREE_VEC_STMTS (node), > @@ -6605,7 +6569,7 @@ vectorizable_load (gimple stmt, gimple_s > dataref_ptr = vect_create_data_ref_ptr (first_stmt, > at_loop, offset, > &dummy, &ptr_incr, false, > - &inv_p, NULL_TREE); > + &inv_p); > else > dataref_ptr = > bump_vector_ptr (dataref_ptr, ptr_incr, gsi, stmt, NULL_TREE); > @@ -6649,9 +6613,9 @@ vectorizable_load (gimple stmt, gimple_s > new_stmt = gimple_build_assign (vec_dest, data_ref); > new_temp = make_ssa_name (vec_dest, new_stmt); > gimple_assign_set_lhs (new_stmt, new_temp); > + gimple_set_vdef (new_stmt, gimple_vdef (stmt)); > + gimple_set_vuse (new_stmt, gimple_vuse (stmt)); > vect_finish_stmt_generation (stmt, new_stmt, gsi); > - copy_virtual_operands (new_stmt, stmt); > - mark_symbols_for_renaming (new_stmt); > msq = new_temp; > > bump = size_binop (MULT_EXPR, vs_minus_1, > @@ -6666,6 +6630,10 @@ vectorizable_load (gimple stmt, gimple_s > default: > gcc_unreachable (); > } > + /* If accesses through a pointer to vectype do not alias the original > + memory reference we have a problem. This should never happen. */ > + gcc_assert (alias_sets_conflict_p (get_alias_set (data_ref), > + get_alias_set (gimple_assign_rhs1 (stmt)))); > vec_dest = vect_create_destination_var (scalar_dest, vectype); > new_stmt = gimple_build_assign (vec_dest, data_ref); > new_temp = make_ssa_name (vec_dest, new_stmt); >