X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-loop-linear.c;h=61fdee3f0681f79a049b9c5825b18e726207efd3;hb=0305c755745c1d24fb688d9b5bb540c4232417b7;hp=2ef7eacec13cfa3f7ae20c8108167e7de38d3a60;hpb=3be2994eca77013f3ab325a1265e8536cdb9fc6f;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c index 2ef7eacec13..61fdee3f068 100644 --- a/gcc/tree-loop-linear.c +++ b/gcc/tree-loop-linear.c @@ -236,22 +236,22 @@ try_interchange_loops (lambda_trans_matrix trans, return trans; } -/* Perform a set of linear transforms on LOOPS. */ +/* Perform a set of linear transforms on loops. */ void -linear_transform_loops (struct loops *loops) +linear_transform_loops (void) { bool modified = false; - unsigned int i; + loop_iterator li; VEC(tree,heap) *oldivs = NULL; VEC(tree,heap) *invariants = NULL; + struct loop *loop_nest; - for (i = 1; i < loops->num; i++) + FOR_EACH_LOOP (li, loop_nest, 0) { unsigned int depth = 0; VEC (ddr_p, heap) *dependence_relations; VEC (data_reference_p, heap) *datarefs; - struct loop *loop_nest = loops->parray[i]; struct loop *temp; lambda_loopnest before, after; lambda_trans_matrix trans; @@ -270,7 +270,7 @@ linear_transform_loops (struct loops *loops) ... } } */ - if (!loop_nest || !loop_nest->inner || !loop_nest->single_exit) + if (!loop_nest->inner || !single_exit (loop_nest)) continue; VEC_truncate (tree, oldivs, 0); VEC_truncate (tree, invariants, 0); @@ -278,7 +278,7 @@ linear_transform_loops (struct loops *loops) for (temp = loop_nest->inner; temp; temp = temp->inner) { /* If we have a sibling loop or multiple exit edges, jump ship. */ - if (temp->next || !temp->single_exit) + if (temp->next || !single_exit (temp)) { problem = true; break; @@ -308,7 +308,7 @@ linear_transform_loops (struct loops *loops) { if (dump_file) fprintf (dump_file, "Won't transform loop. Optimal transform is the identity transform\n"); - continue; + goto free_and_continue; } /* Check whether the transformation is legal. */ @@ -316,15 +316,15 @@ linear_transform_loops (struct loops *loops) { if (dump_file) fprintf (dump_file, "Can't transform loop, transform is illegal:\n"); - continue; + goto free_and_continue; } - before = gcc_loopnest_to_lambda_loopnest (loops, loop_nest, &oldivs, + before = gcc_loopnest_to_lambda_loopnest (loop_nest, &oldivs, &invariants); if (!before) - continue; - + goto free_and_continue; + if (dump_file) { fprintf (dump_file, "Before:\n"); @@ -346,6 +346,7 @@ linear_transform_loops (struct loops *loops) if (dump_file) fprintf (dump_file, "Successfully transformed loop.\n"); + free_and_continue: free_dependence_relations (dependence_relations); free_data_refs (datarefs); }