Commit aed93b23 by Richard Biener Committed by Richard Biener

tree-vect-stmts.c (vectorizable_store): Adjust.

2015-06-16  Richard Biener  <rguenther@suse.de>

	* tree-vect-stmts.c (vectorizable_store): Adjust.
	(vectorizable_load): Likewise.
	* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref):
	Simplify.
	(vect_create_data_ref_ptr): Likewise.
	(bump_vector_ptr): Adjust.

	* gcc.target/i386/recip-vec-sqrtf-avx.c: Disable unrolling.

From-SVN: r224514
parent 283f1963
2015-06-16 Richard Biener <rguenther@suse.de> 2015-06-16 Richard Biener <rguenther@suse.de>
* tree-vect-stmts.c (vectorizable_store): Adjust.
(vectorizable_load): Likewise.
* tree-vect-data-refs.c (vect_create_addr_base_for_vector_ref):
Simplify.
(vect_create_data_ref_ptr): Likewise.
(bump_vector_ptr): Adjust.
2015-06-16 Richard Biener <rguenther@suse.de>
* tree-vect-stmts.c (vectorizable_load): Properly start loads * tree-vect-stmts.c (vectorizable_load): Properly start loads
with the first element if this is grouped loads. with the first element if this is grouped loads.
......
2015-06-16 Richard Biener <rguenther@suse.de>
* gcc.target/i386/recip-vec-sqrtf-avx.c: Disable unrolling.
2015-06-16 James Greenhalgh <james.greenhalgh@arm.com> 2015-06-16 James Greenhalgh <james.greenhalgh@arm.com>
* gcc.target/arm/pr65647.c: Do not override -mfloat-abi directives * gcc.target/arm/pr65647.c: Do not override -mfloat-abi directives
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx -mtune=generic -mfpmath=sse -mrecip" } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx -mtune=generic -mfpmath=sse -mrecip --param max-completely-peel-times=1" } */
float a[32]; float a[32];
float b[32]; float b[32];
......
...@@ -3956,13 +3956,13 @@ vect_create_addr_base_for_vector_ref (gimple stmt, ...@@ -3956,13 +3956,13 @@ vect_create_addr_base_for_vector_ref (gimple stmt,
} }
vect_ptr_type = build_pointer_type (STMT_VINFO_VECTYPE (stmt_info)); vect_ptr_type = build_pointer_type (STMT_VINFO_VECTYPE (stmt_info));
addr_base = fold_convert (vect_ptr_type, addr_base);
dest = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, base_name); dest = vect_get_new_vect_var (vect_ptr_type, vect_pointer_var, base_name);
addr_base = force_gimple_operand (addr_base, &seq, false, dest); addr_base = force_gimple_operand (addr_base, &seq, true, dest);
gimple_seq_add_seq (new_stmt_list, seq); gimple_seq_add_seq (new_stmt_list, seq);
if (DR_PTR_INFO (dr) if (DR_PTR_INFO (dr)
&& TREE_CODE (addr_base) == SSA_NAME) && TREE_CODE (addr_base) == SSA_NAME
&& !SSA_NAME_PTR_INFO (addr_base))
{ {
vect_duplicate_ssa_name_ptr_info (addr_base, dr, stmt_info); vect_duplicate_ssa_name_ptr_info (addr_base, dr, stmt_info);
if (offset || byte_offset) if (offset || byte_offset)
...@@ -4048,7 +4048,6 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop, ...@@ -4048,7 +4048,6 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
tree aggr_ptr_type; tree aggr_ptr_type;
tree aggr_ptr; tree aggr_ptr;
tree new_temp; tree new_temp;
gimple vec_stmt;
gimple_seq new_stmt_list = NULL; gimple_seq new_stmt_list = NULL;
edge pe = NULL; edge pe = NULL;
basic_block new_bb; basic_block new_bb;
...@@ -4196,28 +4195,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop, ...@@ -4196,28 +4195,7 @@ vect_create_data_ref_ptr (gimple stmt, tree aggr_type, struct loop *at_loop,
} }
*initial_address = new_temp; *initial_address = new_temp;
aggr_ptr_init = new_temp;
/* Create: p = (aggr_type *) initial_base */
if (TREE_CODE (new_temp) != SSA_NAME
|| !useless_type_conversion_p (aggr_ptr_type, TREE_TYPE (new_temp)))
{
vec_stmt = gimple_build_assign (aggr_ptr,
fold_convert (aggr_ptr_type, new_temp));
aggr_ptr_init = make_ssa_name (aggr_ptr, vec_stmt);
/* Copy the points-to information if it exists. */
if (DR_PTR_INFO (dr))
vect_duplicate_ssa_name_ptr_info (aggr_ptr_init, dr, stmt_info);
gimple_assign_set_lhs (vec_stmt, aggr_ptr_init);
if (pe)
{
new_bb = gsi_insert_on_edge_immediate (pe, vec_stmt);
gcc_assert (!new_bb);
}
else
gsi_insert_before (gsi, vec_stmt, GSI_SAME_STMT);
}
else
aggr_ptr_init = new_temp;
/* (3) Handle the updating of the aggregate-pointer inside the loop. /* (3) Handle the updating of the aggregate-pointer inside the loop.
This is needed when ONLY_INIT is false, and also when AT_LOOP is the This is needed when ONLY_INIT is false, and also when AT_LOOP is the
...@@ -4342,7 +4320,10 @@ bump_vector_ptr (tree dataref_ptr, gimple ptr_incr, gimple_stmt_iterator *gsi, ...@@ -4342,7 +4320,10 @@ bump_vector_ptr (tree dataref_ptr, gimple ptr_incr, gimple_stmt_iterator *gsi,
if (bump) if (bump)
update = bump; update = bump;
new_dataref_ptr = copy_ssa_name (dataref_ptr); if (TREE_CODE (dataref_ptr) == SSA_NAME)
new_dataref_ptr = copy_ssa_name (dataref_ptr);
else
new_dataref_ptr = make_ssa_name (TREE_TYPE (dataref_ptr));
incr_stmt = gimple_build_assign (new_dataref_ptr, POINTER_PLUS_EXPR, incr_stmt = gimple_build_assign (new_dataref_ptr, POINTER_PLUS_EXPR,
dataref_ptr, update); dataref_ptr, update);
vect_finish_stmt_generation (stmt, incr_stmt, gsi); vect_finish_stmt_generation (stmt, incr_stmt, gsi);
......
...@@ -5572,11 +5572,12 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, ...@@ -5572,11 +5572,12 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
vect_permute_store_chain(). */ vect_permute_store_chain(). */
vec_oprnd = result_chain[i]; vec_oprnd = result_chain[i];
data_ref = build2 (MEM_REF, TREE_TYPE (vec_oprnd), dataref_ptr, data_ref = fold_build2 (MEM_REF, TREE_TYPE (vec_oprnd),
dataref_offset dataref_ptr,
? dataref_offset dataref_offset
: build_int_cst (reference_alias_ptr_type ? dataref_offset
(DR_REF (first_dr)), 0)); : build_int_cst (reference_alias_ptr_type
(DR_REF (first_dr)), 0));
align = TYPE_ALIGN_UNIT (vectype); align = TYPE_ALIGN_UNIT (vectype);
if (aligned_access_p (first_dr)) if (aligned_access_p (first_dr))
misalign = 0; misalign = 0;
...@@ -5595,7 +5596,8 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, ...@@ -5595,7 +5596,8 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
TYPE_ALIGN (elem_type)); TYPE_ALIGN (elem_type));
misalign = DR_MISALIGNMENT (first_dr); misalign = DR_MISALIGNMENT (first_dr);
} }
if (dataref_offset == NULL_TREE) if (dataref_offset == NULL_TREE
&& TREE_CODE (dataref_ptr) == SSA_NAME)
set_ptr_info_alignment (get_ptr_info (dataref_ptr), align, set_ptr_info_alignment (get_ptr_info (dataref_ptr), align,
misalign); misalign);
...@@ -6643,11 +6645,11 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, ...@@ -6643,11 +6645,11 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
unsigned int align, misalign; unsigned int align, misalign;
data_ref data_ref
= build2 (MEM_REF, vectype, dataref_ptr, = fold_build2 (MEM_REF, vectype, dataref_ptr,
dataref_offset dataref_offset
? dataref_offset ? dataref_offset
: build_int_cst (reference_alias_ptr_type : build_int_cst (reference_alias_ptr_type
(DR_REF (first_dr)), 0)); (DR_REF (first_dr)), 0));
align = TYPE_ALIGN_UNIT (vectype); align = TYPE_ALIGN_UNIT (vectype);
if (alignment_support_scheme == dr_aligned) if (alignment_support_scheme == dr_aligned)
{ {
...@@ -6669,7 +6671,8 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, ...@@ -6669,7 +6671,8 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
TYPE_ALIGN (elem_type)); TYPE_ALIGN (elem_type));
misalign = DR_MISALIGNMENT (first_dr); misalign = DR_MISALIGNMENT (first_dr);
} }
if (dataref_offset == NULL_TREE) if (dataref_offset == NULL_TREE
&& TREE_CODE (dataref_ptr) == SSA_NAME)
set_ptr_info_alignment (get_ptr_info (dataref_ptr), set_ptr_info_alignment (get_ptr_info (dataref_ptr),
align, misalign); align, misalign);
break; break;
...@@ -6686,7 +6689,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, ...@@ -6686,7 +6689,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
dr_explicit_realign, dr_explicit_realign,
dataref_ptr, NULL); dataref_ptr, NULL);
ptr = copy_ssa_name (dataref_ptr); if (TREE_CODE (dataref_ptr) == SSA_NAME)
ptr = copy_ssa_name (dataref_ptr);
else
ptr = make_ssa_name (TREE_TYPE (dataref_ptr));
new_stmt = gimple_build_assign new_stmt = gimple_build_assign
(ptr, BIT_AND_EXPR, dataref_ptr, (ptr, BIT_AND_EXPR, dataref_ptr,
build_int_cst build_int_cst
...@@ -6716,7 +6722,7 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, ...@@ -6716,7 +6722,7 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
build_int_cst build_int_cst
(TREE_TYPE (ptr), (TREE_TYPE (ptr),
-(HOST_WIDE_INT)TYPE_ALIGN_UNIT (vectype))); -(HOST_WIDE_INT)TYPE_ALIGN_UNIT (vectype)));
ptr = copy_ssa_name (dataref_ptr, new_stmt); ptr = copy_ssa_name (ptr, new_stmt);
gimple_assign_set_lhs (new_stmt, ptr); gimple_assign_set_lhs (new_stmt, ptr);
vect_finish_stmt_generation (stmt, new_stmt, gsi); vect_finish_stmt_generation (stmt, new_stmt, gsi);
data_ref data_ref
...@@ -6726,7 +6732,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, ...@@ -6726,7 +6732,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
break; break;
} }
case dr_explicit_realign_optimized: case dr_explicit_realign_optimized:
new_temp = copy_ssa_name (dataref_ptr); if (TREE_CODE (dataref_ptr) == SSA_NAME)
new_temp = copy_ssa_name (dataref_ptr);
else
new_temp = make_ssa_name (TREE_TYPE (dataref_ptr));
new_stmt = gimple_build_assign new_stmt = gimple_build_assign
(new_temp, BIT_AND_EXPR, dataref_ptr, (new_temp, BIT_AND_EXPR, dataref_ptr,
build_int_cst build_int_cst
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment