check that all the scev applied ops have are dominated by their defs
2015-12-02 Aditya Kumar <aditya.k7@samsung.com> Sebastian Pop <s.pop@samsung.com> * gcc.dg/graphite/id-29.c: New test. gcc/ChangeLog: 2015-12-02 Aditya Kumar <aditya.k7@samsung.com> Sebastian Pop <s.pop@samsung.com> * graphite-isl-ast-to-gimple.c (translate_isl_ast_node_user): Improve debug. (get_rename_from_scev): Check that all the ops in an expression have their uses dominated by corresponding defs. Co-Authored-By: Sebastian Pop <s.pop@samsung.com> From-SVN: r231310
This commit is contained in:
parent
15256e28a5
commit
e7b9f15315
@ -1,3 +1,11 @@
|
||||
2015-12-04 Aditya Kumar <aditya.k7@samsung.com>
|
||||
Sebastian Pop <s.pop@samsung.com>
|
||||
|
||||
* graphite-isl-ast-to-gimple.c (translate_isl_ast_node_user):
|
||||
Improve debug.
|
||||
(get_rename_from_scev): Check that all the ops in an expression
|
||||
have their uses dominated by corresponding defs.
|
||||
|
||||
2015-12-04 Aditya Kumar <aditya.k7@samsung.com>
|
||||
Sebastian Pop <s.pop@samsung.com>
|
||||
|
||||
|
@ -1116,16 +1116,17 @@ translate_isl_ast_node_user (__isl_keep isl_ast_node *node,
|
||||
build_iv_mapping (iv_map, gbb, user_expr, ip, pbb->scop->scop_info->region);
|
||||
isl_ast_expr_free (user_expr);
|
||||
|
||||
basic_block old_bb = GBB_BB (gbb);
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (dump_file, "[codegen] copying from basic block\n");
|
||||
fprintf (dump_file,
|
||||
"[codegen] copying from bb_%d on edge (bb_%d, bb_%d)\n",
|
||||
old_bb->index, next_e->src->index, next_e->dest->index);
|
||||
print_loops_bb (dump_file, GBB_BB (gbb), 0, 3);
|
||||
fprintf (dump_file, "[codegen] to new basic block\n");
|
||||
print_loops_bb (dump_file, next_e->src, 0, 3);
|
||||
|
||||
}
|
||||
|
||||
next_e = copy_bb_and_scalar_dependences (GBB_BB (gbb), next_e,
|
||||
iv_map);
|
||||
next_e = copy_bb_and_scalar_dependences (old_bb, next_e, iv_map);
|
||||
|
||||
iv_map.release ();
|
||||
|
||||
@ -1598,8 +1599,8 @@ translate_isl_ast_to_gimple::collect_all_ssa_names (tree new_expr,
|
||||
}
|
||||
}
|
||||
|
||||
/* This is abridged version of the function:
|
||||
tree.c:substitute_in_expr (tree exp, tree f, tree r). */
|
||||
/* This is abridged version of the function copied from:
|
||||
tree.c:substitute_in_expr (tree exp, tree f, tree r). */
|
||||
|
||||
static tree
|
||||
substitute_ssa_name (tree exp, tree f, tree r)
|
||||
@ -1804,15 +1805,23 @@ get_rename_from_scev (tree old_name, gimple_seq *stmts, loop_p loop,
|
||||
}
|
||||
|
||||
new_expr = rename_all_uses (new_expr, new_bb, old_bb);
|
||||
/* We should check all the operands and all of them should dominate the use at
|
||||
|
||||
/* We check all the operands and all of them should dominate the use at
|
||||
new_expr. */
|
||||
if (TREE_CODE (new_expr) == SSA_NAME)
|
||||
auto_vec <tree, 2> new_ssa_names;
|
||||
collect_all_ssa_names (new_expr, &new_ssa_names);
|
||||
int i;
|
||||
tree new_ssa_name;
|
||||
FOR_EACH_VEC_ELT (new_ssa_names, i, new_ssa_name)
|
||||
{
|
||||
basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (new_expr));
|
||||
if (bb && !dominated_by_p (CDI_DOMINATORS, new_bb, bb))
|
||||
if (TREE_CODE (new_ssa_name) == SSA_NAME)
|
||||
{
|
||||
codegen_error = true;
|
||||
return build_zero_cst (TREE_TYPE (old_name));
|
||||
basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (new_ssa_name));
|
||||
if (bb && !dominated_by_p (CDI_DOMINATORS, new_bb, bb))
|
||||
{
|
||||
codegen_error = true;
|
||||
return build_zero_cst (TREE_TYPE (old_name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-12-04 Aditya Kumar <aditya.k7@samsung.com>
|
||||
Sebastian Pop <s.pop@samsung.com>
|
||||
|
||||
* gcc.dg/graphite/id-29.c: New test.
|
||||
|
||||
2015-12-04 Aditya Kumar <aditya.k7@samsung.com>
|
||||
Sebastian Pop <s.pop@samsung.com>
|
||||
|
||||
|
17
gcc/testsuite/gcc.dg/graphite/id-29.c
Normal file
17
gcc/testsuite/gcc.dg/graphite/id-29.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* { dg-options "-floop-nest-optimize -O2" } */
|
||||
|
||||
typedef struct {
|
||||
unsigned lp, lc;
|
||||
short *l;
|
||||
short p[1 << 4];
|
||||
} foo;
|
||||
|
||||
void LzmaEnc_Init(foo *p) {
|
||||
unsigned i;
|
||||
unsigned num = 0x300 << (p->lp + p->lc);
|
||||
for (i = 0; i < num; i++)
|
||||
p->l[i] = ((1 << 11) >> 1);
|
||||
|
||||
for (i = 0; i < (1 << 4); i++)
|
||||
p->p[i] = ((1 << 11) >> 1);
|
||||
}
|
Loading…
Reference in New Issue
Block a user