Patchwork [1/2] Call scev_analyzable_p only on is_gimple_reg.

login
register
mail settings
Submitter Sebastian Pop
Date July 27, 2010, 12:53 a.m.
Message ID <1280192009-20472-2-git-send-email-sebpop@gmail.com>
Download mbox | patch
Permalink /patch/59965/
State New
Headers show

Comments

Sebastian Pop - July 27, 2010, 12:53 a.m.
2010-07-26  Sebastian Pop  <sebastian.pop@amd.com>

	* graphite-sese-to-poly.c
	(rewrite_commutative_reductions_out_of_ssa_loop): Call
	scev_analyzable_p only on is_gimple_reg

	* gcc.dg/graphite/id-25.c: New.
---
 gcc/ChangeLog.graphite                |    8 +++++++
 gcc/graphite-sese-to-poly.c           |    5 +++-
 gcc/testsuite/gcc.dg/graphite/id-25.c |   34 +++++++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 1 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/graphite/id-25.c

Patch

diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index c2d4b24..2d0b2ab 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,11 @@ 
+2010-07-26  Sebastian Pop  <sebastian.pop@amd.com>
+
+	* graphite-sese-to-poly.c
+	(rewrite_commutative_reductions_out_of_ssa_loop): Call
+	scev_analyzable_p only on is_gimple_reg
+
+	* gcc.dg/graphite/id-25.c: New.
+
 2010-07-22  Sebastian Pop  <sebastian.pop@amd.com>
 
 	* graphite-sese-to-poly.c (propagate_expr_outside_region): New.
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 3cb22cb..3ca803e 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -2949,12 +2949,15 @@  rewrite_commutative_reductions_out_of_ssa_loop (loop_p loop,
 {
   gimple_stmt_iterator gsi;
   edge exit = single_exit (loop);
+  tree res;
 
   if (!exit)
     return;
 
   for (gsi = gsi_start_phis (exit->dest); !gsi_end_p (gsi); gsi_next (&gsi))
-    if (!scev_analyzable_p (gimple_phi_result (gsi_stmt (gsi)), region))
+    if ((res = gimple_phi_result (gsi_stmt (gsi)))
+	&& is_gimple_reg (res)
+	&& !scev_analyzable_p (res, region))
       rewrite_commutative_reductions_out_of_ssa_close_phi (gsi_stmt (gsi),
 							   reductions);
 }
diff --git a/gcc/testsuite/gcc.dg/graphite/id-25.c b/gcc/testsuite/gcc.dg/graphite/id-25.c
new file mode 100644
index 0000000..b719972
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/id-25.c
@@ -0,0 +1,34 @@ 
+typedef struct
+{
+  int mvd[2][(16/4)][(16/4)][2];
+} Macroblock;
+typedef struct
+{
+  int part_size[8][2];
+} InputParameters;
+typedef struct
+{
+  Macroblock *mb_data;
+  short****** pred_mv;
+  short****** all_mv;
+} ImageParameters;
+extern InputParameters *input;
+extern ImageParameters *img;
+int writeMotionVector8x8 (void)
+{
+  int i, j, k, l, m;
+  int step_h = input->part_size[7][0];
+  int step_v = input->part_size[7][1];
+  Macroblock* currMB = &img->mb_data[9];
+  int refindex = 0;
+  short****** all_mv = img->all_mv;
+  short****** pred_mv = img->pred_mv;
+
+  for (k=0; k<2; k++)
+    {
+      int curr_mvd = all_mv[2][8][0][8][7][8] - pred_mv[2][7][0][8][7][0];
+      for (l=0; l < step_v; l++)
+        for (m=0; m < step_h; m++)
+          currMB->mvd[0][8][9][8] = curr_mvd;
+    }
+}