diff options
Diffstat (limited to 'gcc/tree-loop-linear.c')
-rw-r--r-- | gcc/tree-loop-linear.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c index 3fb4d05..d04045d 100644 --- a/gcc/tree-loop-linear.c +++ b/gcc/tree-loop-linear.c @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #include "rtl.h" #include "basic-block.h" #include "diagnostic.h" +#include "obstack.h" #include "tree-flow.h" #include "tree-dump.h" #include "timevar.h" @@ -253,7 +254,7 @@ linear_transform_loops (void) VEC(tree,heap) *oldivs = NULL; VEC(tree,heap) *invariants = NULL; struct loop *loop_nest; - + FOR_EACH_LOOP (li, loop_nest, 0) { unsigned int depth = 0; @@ -263,6 +264,9 @@ linear_transform_loops (void) lambda_loopnest before, after; lambda_trans_matrix trans; bool problem = false; + struct obstack lambda_obstack; + gcc_obstack_init (&lambda_obstack); + /* If it's not a loop nest, we don't want it. We also don't handle sibling loops properly, which are loops of the following form: @@ -327,7 +331,7 @@ linear_transform_loops (void) } before = gcc_loopnest_to_lambda_loopnest (loop_nest, &oldivs, - &invariants); + &invariants, &lambda_obstack); if (!before) goto free_and_continue; @@ -338,7 +342,7 @@ linear_transform_loops (void) print_lambda_loopnest (dump_file, before, 'i'); } - after = lambda_loopnest_transform (before, trans); + after = lambda_loopnest_transform (before, trans, &lambda_obstack); if (dump_file) { @@ -347,13 +351,14 @@ linear_transform_loops (void) } lambda_loopnest_to_gcc_loopnest (loop_nest, oldivs, invariants, - after, trans); + after, trans, &lambda_obstack); modified = true; if (dump_file) fprintf (dump_file, "Successfully transformed loop.\n"); free_and_continue: + obstack_free (&lambda_obstack, NULL); free_dependence_relations (dependence_relations); free_data_refs (datarefs); } |