diff mbox

[1/2,graphite] check that all the scev applied ops have are dominated by their defs

Message ID 1449254322-32032-1-git-send-email-hiraditya@msn.com
State New
Headers show

Commit Message

Aditya K Dec. 4, 2015, 6:38 p.m. UTC
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.
---
 gcc/graphite-isl-ast-to-gimple.c      | 35 ++++++++++++++++++++++-------------
 gcc/testsuite/gcc.dg/graphite/id-29.c | 17 +++++++++++++++++
 2 files changed, 39 insertions(+), 13 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/graphite/id-29.c
diff mbox

Patch

diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index 20eb80f..ed2a896 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -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));
+	    }
 	}
     }
 
diff --git a/gcc/testsuite/gcc.dg/graphite/id-29.c b/gcc/testsuite/gcc.dg/graphite/id-29.c
new file mode 100644
index 0000000..9554c0b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/id-29.c
@@ -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);
+}