diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa87d604ef3f..92cae3887ba2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-02 Sebastian Pop + + * graphite-sese-to-poly.c + (rewrite_commutative_reductions_out_of_ssa_loop): Call + scev_analyzable_p only on is_gimple_reg + 2010-08-02 Sebastian Pop * graphite-sese-to-poly.c (propagate_expr_outside_region): New. diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 0ed18ef8a532..65607ec3054b 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,11 @@ +2010-07-26 Sebastian Pop + + * 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 * 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 574a25b22136..ae8518f69815 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2950,12 +2950,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/ChangeLog b/gcc/testsuite/ChangeLog index d1c803610e11..a3d5f7e258e8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-08-02 Sebastian Pop + + * gcc.dg/graphite/id-25.c: New. + 2010-08-02 Sebastian Pop * gcc.dg/graphite/run-id-5.c: New. 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 000000000000..b719972d00de --- /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; + } +}