mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 22:41:28 +08:00
re PR tree-optimization/33866 (ICE in vect_get_vec_def_for_stmt_copy, at tree-vect-transform.c:1937)
PR tree-optimization/33866 * tree-vect-transform.c (vectorizable_store): Check operands of all the stmts in the group of strided accesses. Get def stmt type for each store in the group and pass it to vect_get_vec_def_for_stmt_copy (). From-SVN: r129623
This commit is contained in:
parent
e2520c41ed
commit
0bf2cf8907
@ -1,3 +1,10 @@
|
||||
2007-10-25 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
PR tree-optimization/33866
|
||||
* tree-vect-transform.c (vectorizable_store): Check operands of all the
|
||||
stmts in the group of strided accesses. Get def stmt type for each store
|
||||
in the group and pass it to vect_get_vec_def_for_stmt_copy ().
|
||||
|
||||
2007-10-25 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/constraints.md (Y0): Rename register constraint to Yz.
|
||||
|
@ -1,3 +1,9 @@
|
||||
2007-10-25 Martin Michlmayr <tbm@cyrius.com>
|
||||
Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
PR tree-optimization/33866
|
||||
* gcc.dg/vect/pr33866.c: New testcase.
|
||||
|
||||
2007-10-24 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* gcc.target/i386/pr11001-*.c: Remove -m32 from compile flags.
|
||||
|
31
gcc/testsuite/gcc.dg/vect/pr33866.c
Normal file
31
gcc/testsuite/gcc.dg/vect/pr33866.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* Testcase by Martin Michlmayr <tbm@cyrius.com> */
|
||||
/* { dg-do compile } */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
long *coords;
|
||||
}
|
||||
fill_iter_info;
|
||||
|
||||
extern H5Diterate (fill_iter_info *);
|
||||
|
||||
void test_select_fill_hyper_simple (long *offset)
|
||||
{
|
||||
long start[2];
|
||||
int num_points;
|
||||
long points[16][2];
|
||||
fill_iter_info iter_info;
|
||||
int i, j;
|
||||
iter_info.coords = (long *) points;
|
||||
for (i = 0, num_points = 0; j < (int) start[1]; j++, num_points++)
|
||||
{
|
||||
points[num_points][0] = i + start[0];
|
||||
points[num_points][1] = j + start[1];
|
||||
}
|
||||
H5Diterate (&iter_info);
|
||||
}
|
||||
|
||||
/* Needs interleaving support. */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_interleave } } } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
@ -4578,7 +4578,7 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt,
|
||||
int nunits = TYPE_VECTOR_SUBPARTS (vectype);
|
||||
int ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits;
|
||||
int j;
|
||||
tree next_stmt, first_stmt;
|
||||
tree next_stmt, first_stmt = NULL_TREE;
|
||||
bool strided_store = false;
|
||||
unsigned int group_size, i;
|
||||
VEC(tree,heap) *dr_chain = NULL, *oprnds = NULL, *result_chain = NULL;
|
||||
@ -4640,9 +4640,28 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt,
|
||||
if (STMT_VINFO_STRIDED_ACCESS (stmt_info))
|
||||
{
|
||||
strided_store = true;
|
||||
first_stmt = DR_GROUP_FIRST_DR (stmt_info);
|
||||
if (!vect_strided_store_supported (vectype)
|
||||
&& !PURE_SLP_STMT (stmt_info) && !slp)
|
||||
return false;
|
||||
return false;
|
||||
|
||||
if (first_stmt == stmt)
|
||||
{
|
||||
/* STMT is the leader of the group. Check the operands of all the
|
||||
stmts of the group. */
|
||||
next_stmt = DR_GROUP_NEXT_DR (stmt_info);
|
||||
while (next_stmt)
|
||||
{
|
||||
op = GIMPLE_STMT_OPERAND (next_stmt, 1);
|
||||
if (!vect_is_simple_use (op, loop_vinfo, &def_stmt, &def, &dt))
|
||||
{
|
||||
if (vect_print_dump_info (REPORT_DETAILS))
|
||||
fprintf (vect_dump, "use not simple.");
|
||||
return false;
|
||||
}
|
||||
next_stmt = DR_GROUP_NEXT_DR (vinfo_for_stmt (next_stmt));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!vec_stmt) /* transformation not required. */
|
||||
@ -4657,7 +4676,6 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt,
|
||||
|
||||
if (strided_store)
|
||||
{
|
||||
first_stmt = DR_GROUP_FIRST_DR (stmt_info);
|
||||
first_dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt));
|
||||
group_size = DR_GROUP_SIZE (vinfo_for_stmt (first_stmt));
|
||||
|
||||
@ -4803,8 +4821,9 @@ vectorizable_store (tree stmt, block_stmt_iterator *bsi, tree *vec_stmt,
|
||||
OPRNDS are of size 1. */
|
||||
for (i = 0; i < group_size; i++)
|
||||
{
|
||||
vec_oprnd = vect_get_vec_def_for_stmt_copy (dt,
|
||||
VEC_index (tree, oprnds, i));
|
||||
op = VEC_index (tree, oprnds, i);
|
||||
vect_is_simple_use (op, loop_vinfo, &def_stmt, &def, &dt);
|
||||
vec_oprnd = vect_get_vec_def_for_stmt_copy (dt, op);
|
||||
VEC_replace(tree, dr_chain, i, vec_oprnd);
|
||||
VEC_replace(tree, oprnds, i, vec_oprnd);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user